diff --git a/404.html b/404.html index d289dc426..8926e611f 100644 --- a/404.html +++ b/404.html @@ -1,14 +1 @@ - - - - - -Page Not Found | Solus Help Center - - - - - -
Skip to main content

Page Not Found

We could not find what you were looking for.

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

- - \ No newline at end of file +Page Not Found | Solus Help Center
Skip to main content

Page Not Found

We could not find what you were looking for.

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

\ No newline at end of file diff --git a/assets/css/styles.48211735.css b/assets/css/styles.48211735.css deleted file mode 100644 index 7f6075072..000000000 --- a/assets/css/styles.48211735.css +++ /dev/null @@ -1 +0,0 @@ -.col,.container{padding:0 var(--ifm-spacing-horizontal);width:100%}.markdown>h2,.markdown>h3,.markdown>h4,.markdown>h5,.markdown>h6{margin-bottom:calc(var(--ifm-heading-vertical-rhythm-bottom)*var(--ifm-leading))}.markdown li,body{word-wrap:break-word}body,ol ol,ol ul,ul ol,ul ul{margin:0}pre,table{overflow:auto}blockquote,pre{margin:0 0 var(--ifm-spacing-vertical)}.breadcrumbs__link,.button{transition-timing-function:var(--ifm-transition-timing-default)}.button,code{vertical-align:middle}.button--outline.button--active,.button--outline:active,.button--outline:hover,:root{--ifm-button-color:var(--ifm-font-color-base-inverse)}.menu__link:hover,a{transition:color var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.navbar--dark,:root{--ifm-navbar-link-hover-color:var(--ifm-color-primary)}.menu,.navbar-sidebar{overflow-x:hidden}:root,html[data-theme=dark]{--ifm-color-emphasis-500:var(--ifm-color-gray-500)}.toggleButton_gllP,html{-webkit-tap-highlight-color:transparent}:root,body.dark,body[data-theme=dark]{--aa-icon-color-rgb:119,119,163;--aa-scrollbar-thumb-background-color-rgb:var(--aa-background-color-rgb)}.aa-List,.clean-list,.containsTaskList_mC6p,.details_lb9f>summary,.dropdown__menu,.menu__list{list-style:none}:root{--ifm-color-scheme:light;--ifm-dark-value:10%;--ifm-darker-value:15%;--ifm-darkest-value:30%;--ifm-light-value:15%;--ifm-lighter-value:30%;--ifm-lightest-value:50%;--ifm-contrast-background-value:90%;--ifm-contrast-foreground-value:70%;--ifm-contrast-background-dark-value:70%;--ifm-contrast-foreground-dark-value:90%;--ifm-color-primary:#3578e5;--ifm-color-secondary:#ebedf0;--ifm-color-success:#00a400;--ifm-color-info:#54c7ec;--ifm-color-warning:#ffba00;--ifm-color-danger:#fa383e;--ifm-color-primary-dark:#306cce;--ifm-color-primary-darker:#2d66c3;--ifm-color-primary-darkest:#2554a0;--ifm-color-primary-light:#538ce9;--ifm-color-primary-lighter:#72a1ed;--ifm-color-primary-lightest:#9abcf2;--ifm-color-primary-contrast-background:#ebf2fc;--ifm-color-primary-contrast-foreground:#102445;--ifm-color-secondary-dark:#d4d5d8;--ifm-color-secondary-darker:#c8c9cc;--ifm-color-secondary-darkest:#a4a6a8;--ifm-color-secondary-light:#eef0f2;--ifm-color-secondary-lighter:#f1f2f5;--ifm-color-secondary-lightest:#f5f6f8;--ifm-color-secondary-contrast-background:#fdfdfe;--ifm-color-secondary-contrast-foreground:#474748;--ifm-color-success-dark:#009400;--ifm-color-success-darker:#008b00;--ifm-color-success-darkest:#007300;--ifm-color-success-light:#26b226;--ifm-color-success-lighter:#4dbf4d;--ifm-color-success-lightest:#80d280;--ifm-color-success-contrast-background:#e6f6e6;--ifm-color-success-contrast-foreground:#003100;--ifm-color-info-dark:#4cb3d4;--ifm-color-info-darker:#47a9c9;--ifm-color-info-darkest:#3b8ba5;--ifm-color-info-light:#6ecfef;--ifm-color-info-lighter:#87d8f2;--ifm-color-info-lightest:#aae3f6;--ifm-color-info-contrast-background:#eef9fd;--ifm-color-info-contrast-foreground:#193c47;--ifm-color-warning-dark:#e6a700;--ifm-color-warning-darker:#d99e00;--ifm-color-warning-darkest:#b38200;--ifm-color-warning-light:#ffc426;--ifm-color-warning-lighter:#ffcf4d;--ifm-color-warning-lightest:#ffdd80;--ifm-color-warning-contrast-background:#fff8e6;--ifm-color-warning-contrast-foreground:#4d3800;--ifm-color-danger-dark:#e13238;--ifm-color-danger-darker:#d53035;--ifm-color-danger-darkest:#af272b;--ifm-color-danger-light:#fb565b;--ifm-color-danger-lighter:#fb7478;--ifm-color-danger-lightest:#fd9c9f;--ifm-color-danger-contrast-background:#ffebec;--ifm-color-danger-contrast-foreground:#4b1113;--ifm-color-white:#fff;--ifm-color-black:#000;--ifm-color-gray-0:var(--ifm-color-white);--ifm-color-gray-100:#f5f6f7;--ifm-color-gray-200:#ebedf0;--ifm-color-gray-300:#dadde1;--ifm-color-gray-400:#ccd0d5;--ifm-color-gray-500:#bec3c9;--ifm-color-gray-600:#8d949e;--ifm-color-gray-700:#606770;--ifm-color-gray-800:#444950;--ifm-color-gray-900:#1c1e21;--ifm-color-gray-1000:var(--ifm-color-black);--ifm-color-emphasis-0:var(--ifm-color-gray-0);--ifm-color-emphasis-100:var(--ifm-color-gray-100);--ifm-color-emphasis-200:var(--ifm-color-gray-200);--ifm-color-emphasis-300:var(--ifm-color-gray-300);--ifm-color-emphasis-400:var(--ifm-color-gray-400);--ifm-color-emphasis-600:var(--ifm-color-gray-600);--ifm-color-emphasis-700:var(--ifm-color-gray-700);--ifm-color-emphasis-800:var(--ifm-color-gray-800);--ifm-color-emphasis-900:var(--ifm-color-gray-900);--ifm-color-emphasis-1000:var(--ifm-color-gray-1000);--ifm-color-content:var(--ifm-color-emphasis-900);--ifm-color-content-inverse:var(--ifm-color-emphasis-0);--ifm-color-content-secondary:#525860;--ifm-background-color:#0000;--ifm-background-surface-color:var(--ifm-color-content-inverse);--ifm-global-border-width:1px;--ifm-global-radius:0.4rem;--ifm-hover-overlay:#0000000d;--ifm-font-color-base:var(--ifm-color-content);--ifm-font-color-base-inverse:var(--ifm-color-content-inverse);--ifm-font-color-secondary:var(--ifm-color-content-secondary);--ifm-font-family-base:system-ui,-apple-system,Segoe UI,Roboto,Ubuntu,Cantarell,Noto Sans,sans-serif,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";--ifm-font-family-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--ifm-font-size-base:100%;--ifm-font-weight-light:300;--ifm-font-weight-normal:400;--ifm-font-weight-semibold:500;--ifm-font-weight-bold:700;--ifm-font-weight-base:var(--ifm-font-weight-normal);--ifm-line-height-base:1.65;--ifm-global-spacing:1rem;--ifm-spacing-vertical:var(--ifm-global-spacing);--ifm-spacing-horizontal:var(--ifm-global-spacing);--ifm-transition-fast:200ms;--ifm-transition-slow:400ms;--ifm-transition-timing-default:cubic-bezier(0.08,0.52,0.52,1);--ifm-global-shadow-lw:0 1px 2px 0 #0000001a;--ifm-global-shadow-md:0 5px 40px #0003;--ifm-global-shadow-tl:0 12px 28px 0 #0003,0 2px 4px 0 #0000001a;--ifm-z-index-dropdown:100;--ifm-z-index-fixed:200;--ifm-z-index-overlay:400;--ifm-container-width:1140px;--ifm-container-width-xl:1320px;--ifm-code-background:#f6f7f8;--ifm-code-border-radius:var(--ifm-global-radius);--ifm-code-font-size:90%;--ifm-code-padding-horizontal:0.1rem;--ifm-code-padding-vertical:0.1rem;--ifm-pre-background:var(--ifm-code-background);--ifm-pre-border-radius:var(--ifm-code-border-radius);--ifm-pre-color:inherit;--ifm-pre-line-height:1.45;--ifm-pre-padding:1rem;--ifm-heading-color:inherit;--ifm-heading-margin-top:0;--ifm-heading-margin-bottom:var(--ifm-spacing-vertical);--ifm-heading-font-family:var(--ifm-font-family-base);--ifm-heading-font-weight:var(--ifm-font-weight-bold);--ifm-heading-line-height:1.25;--ifm-h1-font-size:2rem;--ifm-h2-font-size:1.5rem;--ifm-h3-font-size:1.25rem;--ifm-h4-font-size:1rem;--ifm-h5-font-size:0.875rem;--ifm-h6-font-size:0.85rem;--ifm-image-alignment-padding:1.25rem;--ifm-leading-desktop:1.25;--ifm-leading:calc(var(--ifm-leading-desktop)*1rem);--ifm-list-left-padding:2rem;--ifm-list-margin:1rem;--ifm-list-item-margin:0.25rem;--ifm-list-paragraph-margin:1rem;--ifm-table-cell-padding:0.75rem;--ifm-table-background:#0000;--ifm-table-stripe-background:#00000008;--ifm-table-border-width:1px;--ifm-table-border-color:var(--ifm-color-emphasis-300);--ifm-table-head-background:inherit;--ifm-table-head-color:inherit;--ifm-table-head-font-weight:var(--ifm-font-weight-bold);--ifm-table-cell-color:inherit;--ifm-link-color:var(--ifm-color-primary);--ifm-link-decoration:none;--ifm-link-hover-color:var(--ifm-link-color);--ifm-link-hover-decoration:underline;--ifm-paragraph-margin-bottom:var(--ifm-leading);--ifm-blockquote-font-size:var(--ifm-font-size-base);--ifm-blockquote-border-left-width:2px;--ifm-blockquote-padding-horizontal:var(--ifm-spacing-horizontal);--ifm-blockquote-padding-vertical:0;--ifm-blockquote-shadow:none;--ifm-blockquote-color:var(--ifm-color-emphasis-800);--ifm-blockquote-border-color:var(--ifm-color-emphasis-300);--ifm-hr-background-color:var(--ifm-color-emphasis-500);--ifm-hr-height:1px;--ifm-hr-margin-vertical:1.5rem;--ifm-scrollbar-size:7px;--ifm-scrollbar-track-background-color:#f1f1f1;--ifm-scrollbar-thumb-background-color:silver;--ifm-scrollbar-thumb-hover-background-color:#a7a7a7;--ifm-alert-background-color:inherit;--ifm-alert-border-color:inherit;--ifm-alert-border-radius:var(--ifm-global-radius);--ifm-alert-border-width:0px;--ifm-alert-border-left-width:5px;--ifm-alert-color:var(--ifm-font-color-base);--ifm-alert-padding-horizontal:var(--ifm-spacing-horizontal);--ifm-alert-padding-vertical:var(--ifm-spacing-vertical);--ifm-alert-shadow:var(--ifm-global-shadow-lw);--ifm-avatar-intro-margin:1rem;--ifm-avatar-intro-alignment:inherit;--ifm-avatar-photo-size:3rem;--ifm-badge-background-color:inherit;--ifm-badge-border-color:inherit;--ifm-badge-border-radius:var(--ifm-global-radius);--ifm-badge-border-width:var(--ifm-global-border-width);--ifm-badge-color:var(--ifm-color-white);--ifm-badge-padding-horizontal:calc(var(--ifm-spacing-horizontal)*0.5);--ifm-badge-padding-vertical:calc(var(--ifm-spacing-vertical)*0.25);--ifm-breadcrumb-border-radius:1.5rem;--ifm-breadcrumb-spacing:0.5rem;--ifm-breadcrumb-color-active:var(--ifm-color-primary);--ifm-breadcrumb-item-background-active:var(--ifm-hover-overlay);--ifm-breadcrumb-padding-horizontal:0.8rem;--ifm-breadcrumb-padding-vertical:0.4rem;--ifm-breadcrumb-size-multiplier:1;--ifm-breadcrumb-separator:url('data:image/svg+xml;utf8,');--ifm-breadcrumb-separator-filter:none;--ifm-breadcrumb-separator-size:0.5rem;--ifm-breadcrumb-separator-size-multiplier:1.25;--ifm-button-background-color:inherit;--ifm-button-border-color:var(--ifm-button-background-color);--ifm-button-border-width:var(--ifm-global-border-width);--ifm-button-font-weight:var(--ifm-font-weight-bold);--ifm-button-padding-horizontal:1.5rem;--ifm-button-padding-vertical:0.375rem;--ifm-button-size-multiplier:1;--ifm-button-transition-duration:var(--ifm-transition-fast);--ifm-button-border-radius:calc(var(--ifm-global-radius)*var(--ifm-button-size-multiplier));--ifm-button-group-spacing:2px;--ifm-card-background-color:var(--ifm-background-surface-color);--ifm-card-border-radius:calc(var(--ifm-global-radius)*2);--ifm-card-horizontal-spacing:var(--ifm-global-spacing);--ifm-card-vertical-spacing:var(--ifm-global-spacing);--ifm-toc-border-color:var(--ifm-color-emphasis-300);--ifm-toc-link-color:var(--ifm-color-content-secondary);--ifm-toc-padding-vertical:0.5rem;--ifm-toc-padding-horizontal:0.5rem;--ifm-dropdown-background-color:var(--ifm-background-surface-color);--ifm-dropdown-font-weight:var(--ifm-font-weight-semibold);--ifm-dropdown-link-color:var(--ifm-font-color-base);--ifm-dropdown-hover-background-color:var(--ifm-hover-overlay);--ifm-footer-background-color:var(--ifm-color-emphasis-100);--ifm-footer-color:inherit;--ifm-footer-link-color:var(--ifm-color-emphasis-700);--ifm-footer-link-hover-color:var(--ifm-color-primary);--ifm-footer-link-horizontal-spacing:0.5rem;--ifm-footer-padding-horizontal:calc(var(--ifm-spacing-horizontal)*2);--ifm-footer-padding-vertical:calc(var(--ifm-spacing-vertical)*2);--ifm-footer-title-color:inherit;--ifm-footer-logo-max-width:min(30rem,90vw);--ifm-hero-background-color:var(--ifm-background-surface-color);--ifm-hero-text-color:var(--ifm-color-emphasis-800);--ifm-menu-color:var(--ifm-color-emphasis-700);--ifm-menu-color-active:var(--ifm-color-primary);--ifm-menu-color-background-active:var(--ifm-hover-overlay);--ifm-menu-color-background-hover:var(--ifm-hover-overlay);--ifm-menu-link-padding-horizontal:0.75rem;--ifm-menu-link-padding-vertical:0.375rem;--ifm-menu-link-sublist-icon:url('data:image/svg+xml;utf8,');--ifm-menu-link-sublist-icon-filter:none;--ifm-navbar-background-color:var(--ifm-background-surface-color);--ifm-navbar-height:3.75rem;--ifm-navbar-item-padding-horizontal:0.75rem;--ifm-navbar-item-padding-vertical:0.25rem;--ifm-navbar-link-color:var(--ifm-font-color-base);--ifm-navbar-link-active-color:var(--ifm-link-color);--ifm-navbar-padding-horizontal:var(--ifm-spacing-horizontal);--ifm-navbar-padding-vertical:calc(var(--ifm-spacing-vertical)*0.5);--ifm-navbar-shadow:var(--ifm-global-shadow-lw);--ifm-navbar-search-input-background-color:var(--ifm-color-emphasis-200);--ifm-navbar-search-input-color:var(--ifm-color-emphasis-800);--ifm-navbar-search-input-placeholder-color:var(--ifm-color-emphasis-500);--ifm-navbar-search-input-icon:url('data:image/svg+xml;utf8,');--ifm-navbar-sidebar-width:83vw;--ifm-pagination-border-radius:var(--ifm-global-radius);--ifm-pagination-color-active:var(--ifm-color-primary);--ifm-pagination-font-size:1rem;--ifm-pagination-item-active-background:var(--ifm-hover-overlay);--ifm-pagination-page-spacing:0.2em;--ifm-pagination-padding-horizontal:calc(var(--ifm-spacing-horizontal)*1);--ifm-pagination-padding-vertical:calc(var(--ifm-spacing-vertical)*0.25);--ifm-pagination-nav-border-radius:var(--ifm-global-radius);--ifm-pagination-nav-color-hover:var(--ifm-color-primary);--ifm-pills-color-active:var(--ifm-color-primary);--ifm-pills-color-background-active:var(--ifm-hover-overlay);--ifm-pills-spacing:0.125rem;--ifm-tabs-color:var(--ifm-font-color-secondary);--ifm-tabs-color-active:var(--ifm-color-primary);--ifm-tabs-color-active-border:var(--ifm-tabs-color-active);--ifm-tabs-padding-horizontal:1rem;--ifm-tabs-padding-vertical:1rem}.badge--danger,.badge--info,.badge--primary,.badge--secondary,.badge--success,.badge--warning{--ifm-badge-border-color:var(--ifm-badge-background-color)}.button--link,.button--outline{--ifm-button-background-color:#0000}*,.aa-Autocomplete *,.aa-DetachedFormContainer *,.aa-Panel *{box-sizing:border-box}html{background-color:var(--ifm-background-color);color:var(--ifm-font-color-base);color-scheme:var(--ifm-color-scheme);font:var(--ifm-font-size-base)/var(--ifm-line-height-base) var(--ifm-font-family-base);-webkit-font-smoothing:antialiased;text-rendering:optimizelegibility;-webkit-text-size-adjust:100%;text-size-adjust:100%}iframe{border:0;color-scheme:auto}.container{margin:0 auto;max-width:var(--ifm-container-width)}.container--fluid{max-width:inherit}.row{display:flex;flex-wrap:wrap;margin:0 calc(var(--ifm-spacing-horizontal)*-1)}.list_eTzJ article:last-child,.margin-bottom--none,.margin-vert--none,.markdown>:last-child{margin-bottom:0!important}.margin-top--none,.margin-vert--none,.tabItem_LNqP{margin-top:0!important}.row--no-gutters{margin-left:0;margin-right:0}.margin-horiz--none,.margin-right--none{margin-right:0!important}.row--no-gutters>.col{padding-left:0;padding-right:0}.row--align-top{align-items:flex-start}.row--align-bottom{align-items:flex-end}.menuExternalLink_NmtK,.row--align-center{align-items:center}.row--align-stretch{align-items:stretch}.row--align-baseline{align-items:baseline}.col{--ifm-col-width:100%;flex:1 0;margin-left:0;max-width:var(--ifm-col-width)}.padding-bottom--none,.padding-vert--none{padding-bottom:0!important}.padding-top--none,.padding-vert--none{padding-top:0!important}.padding-horiz--none,.padding-left--none{padding-left:0!important}.padding-horiz--none,.padding-right--none{padding-right:0!important}.col[class*=col--]{flex:0 0 var(--ifm-col-width)}.col--1{--ifm-col-width:8.33333%}.col--offset-1{margin-left:8.33333%}.col--2{--ifm-col-width:16.66667%}.col--offset-2{margin-left:16.66667%}.col--3{--ifm-col-width:25%}.col--offset-3{margin-left:25%}.col--4{--ifm-col-width:33.33333%}.col--offset-4{margin-left:33.33333%}.col--5{--ifm-col-width:41.66667%}.col--offset-5{margin-left:41.66667%}.col--6{--ifm-col-width:50%}.col--offset-6{margin-left:50%}.col--7{--ifm-col-width:58.33333%}.col--offset-7{margin-left:58.33333%}.col--8{--ifm-col-width:66.66667%}.col--offset-8{margin-left:66.66667%}.col--9{--ifm-col-width:75%}.col--offset-9{margin-left:75%}.col--10{--ifm-col-width:83.33333%}.col--offset-10{margin-left:83.33333%}.col--11{--ifm-col-width:91.66667%}.col--offset-11{margin-left:91.66667%}.col--12{--ifm-col-width:100%}.col--offset-12{margin-left:100%}.margin-horiz--none,.margin-left--none{margin-left:0!important}.margin--none{margin:0!important}.margin-bottom--xs,.margin-vert--xs{margin-bottom:.25rem!important}.margin-top--xs,.margin-vert--xs{margin-top:.25rem!important}.margin-horiz--xs,.margin-left--xs{margin-left:.25rem!important}.margin-horiz--xs,.margin-right--xs{margin-right:.25rem!important}.margin--xs{margin:.25rem!important}.margin-bottom--sm,.margin-vert--sm{margin-bottom:.5rem!important}.margin-top--sm,.margin-vert--sm{margin-top:.5rem!important}.margin-horiz--sm,.margin-left--sm{margin-left:.5rem!important}.margin-horiz--sm,.margin-right--sm{margin-right:.5rem!important}.margin--sm{margin:.5rem!important}.margin-bottom--md,.margin-vert--md{margin-bottom:1rem!important}.margin-top--md,.margin-vert--md{margin-top:1rem!important}.margin-horiz--md,.margin-left--md{margin-left:1rem!important}.margin-horiz--md,.margin-right--md{margin-right:1rem!important}.margin--md{margin:1rem!important}.margin-bottom--lg,.margin-vert--lg{margin-bottom:2rem!important}.margin-top--lg,.margin-vert--lg{margin-top:2rem!important}.margin-horiz--lg,.margin-left--lg{margin-left:2rem!important}.margin-horiz--lg,.margin-right--lg{margin-right:2rem!important}.margin--lg{margin:2rem!important}.margin-bottom--xl,.margin-vert--xl{margin-bottom:5rem!important}.margin-top--xl,.margin-vert--xl{margin-top:5rem!important}.margin-horiz--xl,.margin-left--xl{margin-left:5rem!important}.margin-horiz--xl,.margin-right--xl{margin-right:5rem!important}.margin--xl{margin:5rem!important}.padding--none{padding:0!important}.padding-bottom--xs,.padding-vert--xs{padding-bottom:.25rem!important}.padding-top--xs,.padding-vert--xs{padding-top:.25rem!important}.padding-horiz--xs,.padding-left--xs{padding-left:.25rem!important}.padding-horiz--xs,.padding-right--xs{padding-right:.25rem!important}.padding--xs{padding:.25rem!important}.padding-bottom--sm,.padding-vert--sm{padding-bottom:.5rem!important}.padding-top--sm,.padding-vert--sm{padding-top:.5rem!important}.padding-horiz--sm,.padding-left--sm{padding-left:.5rem!important}.padding-horiz--sm,.padding-right--sm{padding-right:.5rem!important}.padding--sm{padding:.5rem!important}.padding-bottom--md,.padding-vert--md{padding-bottom:1rem!important}.padding-top--md,.padding-vert--md{padding-top:1rem!important}.padding-horiz--md,.padding-left--md{padding-left:1rem!important}.padding-horiz--md,.padding-right--md{padding-right:1rem!important}.padding--md{padding:1rem!important}.padding-bottom--lg,.padding-vert--lg{padding-bottom:2rem!important}.padding-top--lg,.padding-vert--lg{padding-top:2rem!important}.padding-horiz--lg,.padding-left--lg{padding-left:2rem!important}.padding-horiz--lg,.padding-right--lg{padding-right:2rem!important}.padding--lg{padding:2rem!important}.padding-bottom--xl,.padding-vert--xl{padding-bottom:5rem!important}.padding-top--xl,.padding-vert--xl{padding-top:5rem!important}.padding-horiz--xl,.padding-left--xl{padding-left:5rem!important}.padding-horiz--xl,.padding-right--xl{padding-right:5rem!important}.padding--xl{padding:5rem!important}code{background-color:var(--ifm-code-background);border:.1rem solid #0000001a;border-radius:var(--ifm-code-border-radius);font-family:var(--ifm-font-family-monospace);font-size:var(--ifm-code-font-size);padding:var(--ifm-code-padding-vertical) var(--ifm-code-padding-horizontal)}a code{color:inherit}pre{background-color:var(--ifm-pre-background);border-radius:var(--ifm-pre-border-radius);color:var(--ifm-pre-color);font:var(--ifm-code-font-size)/var(--ifm-pre-line-height) var(--ifm-font-family-monospace);padding:var(--ifm-pre-padding)}pre code{background-color:initial;border:none;font-size:100%;line-height:inherit;padding:0}kbd{background-color:var(--ifm-color-emphasis-0);border:1px solid var(--ifm-color-emphasis-400);border-radius:.2rem;box-shadow:inset 0 -1px 0 var(--ifm-color-emphasis-400);color:var(--ifm-color-emphasis-800);font:80% var(--ifm-font-family-monospace);padding:.15rem .3rem}h1,h2,h3,h4,h5,h6{color:var(--ifm-heading-color);font-family:var(--ifm-heading-font-family);font-weight:var(--ifm-heading-font-weight);line-height:var(--ifm-heading-line-height);margin:var(--ifm-heading-margin-top) 0 var(--ifm-heading-margin-bottom) 0}h1{font-size:var(--ifm-h1-font-size)}h2{font-size:var(--ifm-h2-font-size)}h3{font-size:var(--ifm-h3-font-size)}h4{font-size:var(--ifm-h4-font-size)}h5{font-size:var(--ifm-h5-font-size)}h6{font-size:var(--ifm-h6-font-size)}img{max-width:100%}img[align=right]{padding-left:var(--image-alignment-padding)}img[align=left]{padding-right:var(--image-alignment-padding)}.markdown{--ifm-h1-vertical-rhythm-top:3;--ifm-h2-vertical-rhythm-top:2;--ifm-h3-vertical-rhythm-top:1.5;--ifm-heading-vertical-rhythm-top:1.25;--ifm-h1-vertical-rhythm-bottom:1.25;--ifm-heading-vertical-rhythm-bottom:1}.markdown:after,.markdown:before{content:"";display:table}.markdown:after{clear:both}.markdown h1:first-child{--ifm-h1-font-size:3rem;margin-bottom:calc(var(--ifm-h1-vertical-rhythm-bottom)*var(--ifm-leading))}.markdown>h2{--ifm-h2-font-size:2rem;margin-top:calc(var(--ifm-h2-vertical-rhythm-top)*var(--ifm-leading))}.markdown>h3{--ifm-h3-font-size:1.5rem;margin-top:calc(var(--ifm-h3-vertical-rhythm-top)*var(--ifm-leading))}.markdown>h4,.markdown>h5,.markdown>h6{margin-top:calc(var(--ifm-heading-vertical-rhythm-top)*var(--ifm-leading))}.markdown>p,.markdown>pre,.markdown>ul,.tabList__CuJ{margin-bottom:var(--ifm-leading)}.markdown li>p{margin-top:var(--ifm-list-paragraph-margin)}.markdown li+li{margin-top:var(--ifm-list-item-margin)}ol,ul{margin:0 0 var(--ifm-list-margin);padding-left:var(--ifm-list-left-padding)}ol ol,ul ol{list-style-type:lower-roman}ol ol ol,ol ul ol,ul ol ol,ul ul ol{list-style-type:lower-alpha}table{border-collapse:collapse;display:block;margin-bottom:var(--ifm-spacing-vertical)}table thead tr{border-bottom:2px solid var(--ifm-table-border-color)}table thead,table tr:nth-child(2n){background-color:var(--ifm-table-stripe-background)}table tr{background-color:var(--ifm-table-background);border-top:var(--ifm-table-border-width) solid var(--ifm-table-border-color)}table td,table th{border:var(--ifm-table-border-width) solid var(--ifm-table-border-color);padding:var(--ifm-table-cell-padding)}table th{background-color:var(--ifm-table-head-background);color:var(--ifm-table-head-color);font-weight:var(--ifm-table-head-font-weight)}table td{color:var(--ifm-table-cell-color)}strong{font-weight:var(--ifm-font-weight-bold)}a{color:var(--ifm-link-color);text-decoration:var(--ifm-link-decoration)}a:hover{color:var(--ifm-link-hover-color);text-decoration:var(--ifm-link-hover-decoration)}.button:hover,.text--no-decoration,.text--no-decoration:hover,a:not([href]){text-decoration:none}p{margin:0 0 var(--ifm-paragraph-margin-bottom)}blockquote{border-left:var(--ifm-blockquote-border-left-width) solid var(--ifm-blockquote-border-color);box-shadow:var(--ifm-blockquote-shadow);color:var(--ifm-blockquote-color);font-size:var(--ifm-blockquote-font-size);padding:var(--ifm-blockquote-padding-vertical) var(--ifm-blockquote-padding-horizontal)}blockquote>:first-child{margin-top:0}blockquote>:last-child{margin-bottom:0}hr{background-color:var(--ifm-hr-background-color);border:0;height:var(--ifm-hr-height);margin:var(--ifm-hr-margin-vertical) 0}.shadow--lw{box-shadow:var(--ifm-global-shadow-lw)!important}.shadow--md{box-shadow:var(--ifm-global-shadow-md)!important}.shadow--tl{box-shadow:var(--ifm-global-shadow-tl)!important}.text--primary,.wordWrapButtonEnabled_EoeP .wordWrapButtonIcon_Bwma{color:var(--ifm-color-primary)}.text--secondary{color:var(--ifm-color-secondary)}.text--success{color:var(--ifm-color-success)}.text--info{color:var(--ifm-color-info)}.text--warning{color:var(--ifm-color-warning)}.text--danger{color:var(--ifm-color-danger)}.text--center{text-align:center}.text--left{text-align:left}.text--justify{text-align:justify}.text--right{text-align:right}.text--capitalize{text-transform:capitalize}.text--lowercase{text-transform:lowercase}.admonitionHeading_Gvgb,.alert__heading,.text--uppercase{text-transform:uppercase}.text--light{font-weight:var(--ifm-font-weight-light)}.text--normal{font-weight:var(--ifm-font-weight-normal)}.text--semibold{font-weight:var(--ifm-font-weight-semibold)}.text--bold{font-weight:var(--ifm-font-weight-bold)}.text--italic{font-style:italic}.text--truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text--break{word-wrap:break-word!important;word-break:break-word!important}.clean-btn{background:none;border:none;color:inherit;cursor:pointer;font-family:inherit;padding:0}.alert,.alert .close{color:var(--ifm-alert-foreground-color)}.clean-list{padding-left:0}.alert--primary{--ifm-alert-background-color:var(--ifm-color-primary-contrast-background);--ifm-alert-background-color-highlight:#3578e526;--ifm-alert-foreground-color:var(--ifm-color-primary-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-primary-dark)}.alert--secondary{--ifm-alert-background-color:var(--ifm-color-secondary-contrast-background);--ifm-alert-background-color-highlight:#ebedf026;--ifm-alert-foreground-color:var(--ifm-color-secondary-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-secondary-dark)}.alert--success{--ifm-alert-background-color:var(--ifm-color-success-contrast-background);--ifm-alert-background-color-highlight:#00a40026;--ifm-alert-foreground-color:var(--ifm-color-success-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-success-dark)}.alert--info{--ifm-alert-background-color:var(--ifm-color-info-contrast-background);--ifm-alert-background-color-highlight:#54c7ec26;--ifm-alert-foreground-color:var(--ifm-color-info-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-info-dark)}.alert--warning{--ifm-alert-background-color:var(--ifm-color-warning-contrast-background);--ifm-alert-background-color-highlight:#ffba0026;--ifm-alert-foreground-color:var(--ifm-color-warning-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-warning-dark)}.alert--danger{--ifm-alert-background-color:var(--ifm-color-danger-contrast-background);--ifm-alert-background-color-highlight:#fa383e26;--ifm-alert-foreground-color:var(--ifm-color-danger-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-danger-dark)}.alert{--ifm-code-background:var(--ifm-alert-background-color-highlight);--ifm-link-color:var(--ifm-alert-foreground-color);--ifm-link-hover-color:var(--ifm-alert-foreground-color);--ifm-link-decoration:underline;--ifm-tabs-color:var(--ifm-alert-foreground-color);--ifm-tabs-color-active:var(--ifm-alert-foreground-color);--ifm-tabs-color-active-border:var(--ifm-alert-border-color);background-color:var(--ifm-alert-background-color);border:var(--ifm-alert-border-width) solid var(--ifm-alert-border-color);border-left-width:var(--ifm-alert-border-left-width);border-radius:var(--ifm-alert-border-radius);box-shadow:var(--ifm-alert-shadow);padding:var(--ifm-alert-padding-vertical) var(--ifm-alert-padding-horizontal)}.alert__heading{align-items:center;display:flex;font:700 var(--ifm-h5-font-size)/var(--ifm-heading-line-height) var(--ifm-heading-font-family);margin-bottom:.5rem}.alert__icon{display:inline-flex;margin-right:.4em}.alert__icon svg{fill:var(--ifm-alert-foreground-color);stroke:var(--ifm-alert-foreground-color);stroke-width:0}.alert .close{margin:calc(var(--ifm-alert-padding-vertical)*-1) calc(var(--ifm-alert-padding-horizontal)*-1) 0 0;opacity:.75}.alert .close:focus,.alert .close:hover{opacity:1}.alert a{text-decoration-color:var(--ifm-alert-border-color)}.alert a:hover{text-decoration-thickness:2px}.avatar{column-gap:var(--ifm-avatar-intro-margin);display:flex}.avatar__photo{border-radius:50%;display:block;height:var(--ifm-avatar-photo-size);overflow:hidden;width:var(--ifm-avatar-photo-size)}.card--full-height,.navbar__logo img,body,html{height:100%}.avatar__photo--sm{--ifm-avatar-photo-size:2rem}.avatar__photo--lg{--ifm-avatar-photo-size:4rem}.avatar__photo--xl{--ifm-avatar-photo-size:6rem}.avatar__intro{display:flex;flex:1 1;flex-direction:column;justify-content:center;text-align:var(--ifm-avatar-intro-alignment)}.badge,.breadcrumbs__item,.breadcrumbs__link,.button,.dropdown>.navbar__link:after{display:inline-block}.avatar__name{font:700 var(--ifm-h4-font-size)/var(--ifm-heading-line-height) var(--ifm-font-family-base)}.avatar__subtitle{margin-top:.25rem}.avatar--vertical{--ifm-avatar-intro-alignment:center;--ifm-avatar-intro-margin:0.5rem;align-items:center;flex-direction:column}.badge{background-color:var(--ifm-badge-background-color);border:var(--ifm-badge-border-width) solid var(--ifm-badge-border-color);border-radius:var(--ifm-badge-border-radius);color:var(--ifm-badge-color);font-size:75%;font-weight:var(--ifm-font-weight-bold);line-height:1;padding:var(--ifm-badge-padding-vertical) var(--ifm-badge-padding-horizontal)}.badge--primary{--ifm-badge-background-color:var(--ifm-color-primary)}.badge--secondary{--ifm-badge-background-color:var(--ifm-color-secondary);color:var(--ifm-color-black)}.breadcrumbs__link,.button.button--secondary.button--outline:not(.button--active):not(:hover){color:var(--ifm-font-color-base)}.badge--success{--ifm-badge-background-color:var(--ifm-color-success)}.badge--info{--ifm-badge-background-color:var(--ifm-color-info)}.badge--warning{--ifm-badge-background-color:var(--ifm-color-warning)}.badge--danger{--ifm-badge-background-color:var(--ifm-color-danger)}.breadcrumbs{margin-bottom:0;padding-left:0}.breadcrumbs__item:not(:last-child):after{background:var(--ifm-breadcrumb-separator) center;content:" ";display:inline-block;filter:var(--ifm-breadcrumb-separator-filter);height:calc(var(--ifm-breadcrumb-separator-size)*var(--ifm-breadcrumb-size-multiplier)*var(--ifm-breadcrumb-separator-size-multiplier));margin:0 var(--ifm-breadcrumb-spacing);opacity:.5;width:calc(var(--ifm-breadcrumb-separator-size)*var(--ifm-breadcrumb-size-multiplier)*var(--ifm-breadcrumb-separator-size-multiplier))}.breadcrumbs__item--active .breadcrumbs__link{background:var(--ifm-breadcrumb-item-background-active);color:var(--ifm-breadcrumb-color-active)}.breadcrumbs__link{border-radius:var(--ifm-breadcrumb-border-radius);font-size:calc(1rem*var(--ifm-breadcrumb-size-multiplier));padding:calc(var(--ifm-breadcrumb-padding-vertical)*var(--ifm-breadcrumb-size-multiplier)) calc(var(--ifm-breadcrumb-padding-horizontal)*var(--ifm-breadcrumb-size-multiplier));transition-duration:var(--ifm-transition-fast);transition-property:background,color}.breadcrumbs__link:any-link:hover,.breadcrumbs__link:link:hover,.breadcrumbs__link:visited:hover,area[href].breadcrumbs__link:hover{background:var(--ifm-breadcrumb-item-background-active);text-decoration:none}.breadcrumbs--sm{--ifm-breadcrumb-size-multiplier:0.8}.breadcrumbs--lg{--ifm-breadcrumb-size-multiplier:1.2}.button{background-color:var(--ifm-button-background-color);border:var(--ifm-button-border-width) solid var(--ifm-button-border-color);border-radius:var(--ifm-button-border-radius);cursor:pointer;font-size:calc(.875rem*var(--ifm-button-size-multiplier));font-weight:var(--ifm-button-font-weight);line-height:1.5;padding:calc(var(--ifm-button-padding-vertical)*var(--ifm-button-size-multiplier)) calc(var(--ifm-button-padding-horizontal)*var(--ifm-button-size-multiplier));text-align:center;transition-duration:var(--ifm-button-transition-duration);transition-property:color,background,border-color;-webkit-user-select:none;user-select:none;white-space:nowrap}.button,.button:hover{color:var(--ifm-button-color)}.button--outline{--ifm-button-color:var(--ifm-button-border-color)}.button--outline:hover{--ifm-button-background-color:var(--ifm-button-border-color)}.button--link{--ifm-button-border-color:#0000;color:var(--ifm-link-color);text-decoration:var(--ifm-link-decoration)}.button--link.button--active,.button--link:active,.button--link:hover{color:var(--ifm-link-hover-color);text-decoration:var(--ifm-link-hover-decoration)}.button.disabled,.button:disabled,.button[disabled]{opacity:.65;pointer-events:none}.button--sm{--ifm-button-size-multiplier:0.8}.button--lg{--ifm-button-size-multiplier:1.35}.button--block{display:block;width:100%}.button.button--secondary{color:var(--ifm-color-gray-900)}:where(.button--primary){--ifm-button-background-color:var(--ifm-color-primary);--ifm-button-border-color:var(--ifm-color-primary)}:where(.button--primary):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-primary-dark);--ifm-button-border-color:var(--ifm-color-primary-dark)}.button--primary.button--active,.button--primary:active{--ifm-button-background-color:var(--ifm-color-primary-darker);--ifm-button-border-color:var(--ifm-color-primary-darker)}:where(.button--secondary){--ifm-button-background-color:var(--ifm-color-secondary);--ifm-button-border-color:var(--ifm-color-secondary)}:where(.button--secondary):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-secondary-dark);--ifm-button-border-color:var(--ifm-color-secondary-dark)}.button--secondary.button--active,.button--secondary:active{--ifm-button-background-color:var(--ifm-color-secondary-darker);--ifm-button-border-color:var(--ifm-color-secondary-darker)}:where(.button--success){--ifm-button-background-color:var(--ifm-color-success);--ifm-button-border-color:var(--ifm-color-success)}:where(.button--success):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-success-dark);--ifm-button-border-color:var(--ifm-color-success-dark)}.button--success.button--active,.button--success:active{--ifm-button-background-color:var(--ifm-color-success-darker);--ifm-button-border-color:var(--ifm-color-success-darker)}:where(.button--info){--ifm-button-background-color:var(--ifm-color-info);--ifm-button-border-color:var(--ifm-color-info)}:where(.button--info):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-info-dark);--ifm-button-border-color:var(--ifm-color-info-dark)}.button--info.button--active,.button--info:active{--ifm-button-background-color:var(--ifm-color-info-darker);--ifm-button-border-color:var(--ifm-color-info-darker)}:where(.button--warning){--ifm-button-background-color:var(--ifm-color-warning);--ifm-button-border-color:var(--ifm-color-warning)}:where(.button--warning):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-warning-dark);--ifm-button-border-color:var(--ifm-color-warning-dark)}.button--warning.button--active,.button--warning:active{--ifm-button-background-color:var(--ifm-color-warning-darker);--ifm-button-border-color:var(--ifm-color-warning-darker)}:where(.button--danger){--ifm-button-background-color:var(--ifm-color-danger);--ifm-button-border-color:var(--ifm-color-danger)}:where(.button--danger):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-danger-dark);--ifm-button-border-color:var(--ifm-color-danger-dark)}.button--danger.button--active,.button--danger:active{--ifm-button-background-color:var(--ifm-color-danger-darker);--ifm-button-border-color:var(--ifm-color-danger-darker)}.button-group{display:inline-flex;gap:var(--ifm-button-group-spacing)}.button-group>.button:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.button-group>.button:not(:last-child){border-bottom-right-radius:0;border-top-right-radius:0}.button-group--block{display:flex;justify-content:stretch}.button-group--block>.button{flex-grow:1}.card{background-color:var(--ifm-card-background-color);border-radius:var(--ifm-card-border-radius);box-shadow:var(--ifm-global-shadow-lw);display:flex;flex-direction:column;overflow:hidden}.card__image{padding-top:var(--ifm-card-vertical-spacing)}.card__image:first-child{padding-top:0}.card__body,.card__footer,.card__header{padding:var(--ifm-card-vertical-spacing) var(--ifm-card-horizontal-spacing)}.card__body:not(:last-child),.card__footer:not(:last-child),.card__header:not(:last-child){padding-bottom:0}.card__body>:last-child,.card__footer>:last-child,.card__header>:last-child{margin-bottom:0}.card__footer{margin-top:auto}.table-of-contents{font-size:.8rem;margin-bottom:0;padding:var(--ifm-toc-padding-vertical) 0}.table-of-contents,.table-of-contents ul{list-style:none;padding-left:var(--ifm-toc-padding-horizontal)}.table-of-contents li{margin:var(--ifm-toc-padding-vertical) var(--ifm-toc-padding-horizontal)}.table-of-contents__left-border{border-left:1px solid var(--ifm-toc-border-color)}.table-of-contents__link{color:var(--ifm-toc-link-color);display:block}.table-of-contents__link--active,.table-of-contents__link--active code,.table-of-contents__link:hover,.table-of-contents__link:hover code{color:var(--ifm-color-primary);text-decoration:none}.close{color:var(--ifm-color-black);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)}.menu__caret,.menu__link,.menu__list-item-collapsible{border-radius:.25rem;transition:background var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.dropdown__link{border-radius:.25rem;color:var(--ifm-dropdown-link-color);display:block;font-size:.875rem;margin-top:.2rem;padding:.25rem .5rem;white-space:nowrap}.dropdown__link--active,.dropdown__link:hover{background-color:var(--ifm-dropdown-hover-background-color);color:var(--ifm-dropdown-link-color);text-decoration:none}.dropdown__link--active,.dropdown__link--active:hover{--ifm-dropdown-link-color:var(--ifm-link-color)}.dropdown>.navbar__link:after{border-color:currentcolor #0000;border-style:solid;border-width:.4em .4em 0;content:"";margin-left:.3em;position:relative;top:2px;transform:translateY(-50%)}.footer{background-color:var(--ifm-footer-background-color);color:var(--ifm-footer-color);padding:var(--ifm-footer-padding-vertical) var(--ifm-footer-padding-horizontal)}.footer--dark{--ifm-footer-background-color:#303846;--ifm-footer-color:var(--ifm-footer-link-color);--ifm-footer-link-color:var(--ifm-color-secondary);--ifm-footer-title-color:var(--ifm-color-white)}.footer__links{margin-bottom:1rem}.footer__link-item{color:var(--ifm-footer-link-color);line-height:2}.footer__link-item:hover{color:var(--ifm-footer-link-hover-color)}.footer__link-separator{margin:0 var(--ifm-footer-link-horizontal-spacing)}.footer__logo{margin-top:1rem;max-width:var(--ifm-footer-logo-max-width)}.footer__title{color:var(--ifm-footer-title-color);font:700 var(--ifm-h4-font-size)/var(--ifm-heading-line-height) var(--ifm-font-family-base);margin-bottom:var(--ifm-heading-margin-bottom)}.menu,.navbar__link{font-weight:var(--ifm-font-weight-semibold)}.docItemContainer_Djhp article>:first-child,.docItemContainer_Djhp header+*,.footer__item{margin-top:0}.admonitionContent_BuS1>:last-child,.cardContainer_fWXF :last-child,.collapsibleContent_i85q p:last-child,.details_lb9f>summary>p:last-child,.footer__items,.tabItem_Ymn6>:last-child{margin-bottom:0}.codeBlockStandalone_MEMb,[type=checkbox]{padding:0}.hero{align-items:center;background-color:var(--ifm-hero-background-color);color:var(--ifm-hero-text-color);display:flex;padding:4rem 2rem}.hero--primary{--ifm-hero-background-color:var(--ifm-color-primary);--ifm-hero-text-color:var(--ifm-font-color-base-inverse)}.hero--dark{--ifm-hero-background-color:#303846;--ifm-hero-text-color:var(--ifm-color-white)}.hero__title,.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{filter:var(--ifm-menu-link-sublist-icon-filter);height:1.25rem;transform:rotate(180deg);transition:transform var(--ifm-transition-fast) linear;width:1.25rem;content:""}.menu__link--sublist-caret:after{background:var(--ifm-menu-link-sublist-icon) 50%/2rem 2rem;margin-left:auto;min-width:1.25rem}.menu__link--active,.menu__link--active:hover{color:var(--ifm-menu-color-active)}.navbar__brand,.navbar__link{color:var(--ifm-navbar-link-color)}.menu__link--active:not(.menu__link--sublist){background-color:var(--ifm-menu-color-background-active)}.menu__caret:before{background:var(--ifm-menu-link-sublist-icon) 50%/2rem 2rem}.navbar--dark,html[data-theme=dark]{--ifm-menu-link-sublist-icon-filter:invert(100%) sepia(94%) saturate(17%) hue-rotate(223deg) brightness(104%) contrast(98%)}.navbar{background-color:var(--ifm-navbar-background-color);box-shadow:var(--ifm-navbar-shadow);height:var(--ifm-navbar-height);padding:var(--ifm-navbar-padding-vertical) var(--ifm-navbar-padding-horizontal)}.navbar,.navbar>.container,.navbar>.container-fluid{display:flex}.navbar--fixed-top{position:sticky;top:0;z-index:var(--ifm-z-index-fixed)}.navbar-sidebar,.navbar-sidebar__backdrop{bottom:0;opacity:0;position:fixed;transition-duration:var(--ifm-transition-fast);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:#ffffff1a;--ifm-navbar-search-input-placeholder-color:#ffffff80;color:var(--ifm-color-white)}.navbar--dark{--ifm-navbar-background-color:#242526;--ifm-menu-color-background-active:#ffffff0d;--ifm-navbar-search-input-color:var(--ifm-color-white)}.navbar--primary{--ifm-navbar-background-color:var(--ifm-color-primary);--ifm-navbar-link-hover-color:var(--ifm-color-white);--ifm-menu-color-active:var(--ifm-color-white);--ifm-navbar-search-input-color:var(--ifm-color-emphasis-500)}.navbar__search-input{appearance:none;background:var(--ifm-navbar-search-input-background-color) var(--ifm-navbar-search-input-icon) no-repeat .75rem center/1rem 1rem;border:none;border-radius:2rem;color:var(--ifm-navbar-search-input-color);cursor:text;display:inline-block;font-size:1rem;height:2rem;padding:0 .5rem 0 2.25rem;width:12.5rem}.navbar__search-input::placeholder{color:var(--ifm-navbar-search-input-placeholder-color)}.navbar-sidebar{background-color:var(--ifm-navbar-background-color);box-shadow:var(--ifm-global-shadow-md);transform:translate3d(-100%,0,0);transition-property:opacity,visibility,transform;width:var(--ifm-navbar-sidebar-width)}.navbar-sidebar--show .navbar-sidebar,.navbar-sidebar__items{transform:translateZ(0)}.navbar-sidebar--show .navbar-sidebar,.navbar-sidebar--show .navbar-sidebar__backdrop{opacity:1;visibility:visible}.navbar-sidebar__backdrop{background-color:#0009;right:0;transition-property:opacity,visibility}.navbar-sidebar__brand{align-items:center;box-shadow:var(--ifm-navbar-shadow);display:flex;flex:1;height:var(--ifm-navbar-height);padding:var(--ifm-navbar-padding-vertical) var(--ifm-navbar-padding-horizontal)}.navbar-sidebar__items{display:flex;height:calc(100% - var(--ifm-navbar-height));transition:transform var(--ifm-transition-fast) ease-in-out}.navbar-sidebar__items--show-secondary{transform:translate3d(calc((var(--ifm-navbar-sidebar-width))*-1),0,0)}.navbar-sidebar__item{flex-shrink:0;padding:.5rem;width:calc(var(--ifm-navbar-sidebar-width))}.navbar-sidebar__back{background:var(--ifm-menu-color-background-active);font-size:15px;font-weight:var(--ifm-button-font-weight);margin:0 0 .2rem -.5rem;padding:.6rem 1.5rem;position:relative;text-align:left;top:-.5rem;width:calc(100% + 1rem)}.navbar-sidebar__close{display:flex;margin-left:auto}.pagination{column-gap:var(--ifm-pagination-page-spacing);display:flex;font-size:var(--ifm-pagination-font-size);padding-left:0}.pagination--sm{--ifm-pagination-font-size:0.8rem;--ifm-pagination-padding-horizontal:0.8rem;--ifm-pagination-padding-vertical:0.2rem}.pagination--lg{--ifm-pagination-font-size:1.2rem;--ifm-pagination-padding-horizontal:1.2rem;--ifm-pagination-padding-vertical:0.3rem}.pagination__item{display:inline-flex}.pagination__item>span{padding:var(--ifm-pagination-padding-vertical)}.pagination__item--active .pagination__link{color:var(--ifm-pagination-color-active)}.pagination__item--active .pagination__link,.pagination__item:not(.pagination__item--active):hover .pagination__link{background:var(--ifm-pagination-item-active-background)}.pagination__item--disabled,.pagination__item[disabled]{opacity:.25;pointer-events:none}.pagination__link{border-radius:var(--ifm-pagination-border-radius);color:var(--ifm-font-color-base);display:inline-block;padding:var(--ifm-pagination-padding-vertical) var(--ifm-pagination-padding-horizontal);transition:background var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.pagination__link:hover,.sidebarItemLink_mo7H:hover{text-decoration:none}.pagination-nav{display:grid;grid-gap:var(--ifm-spacing-horizontal);gap:var(--ifm-spacing-horizontal);grid-template-columns:repeat(2,1fr)}.pagination-nav__link{border:1px solid var(--ifm-color-emphasis-300);border-radius:var(--ifm-pagination-nav-border-radius);display:block;height:100%;line-height:var(--ifm-heading-line-height);padding:var(--ifm-global-spacing);transition:border-color var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.pagination-nav__link:hover{border-color:var(--ifm-pagination-nav-color-hover);text-decoration:none}.pagination-nav__link--next{grid-column:2/3;text-align:right}.pagination-nav__label{font-size:var(--ifm-h4-font-size);font-weight:var(--ifm-heading-font-weight);word-break:break-word}.pagination-nav__link--prev .pagination-nav__label:before{content:"« "}.pagination-nav__link--next .pagination-nav__label:after{content:" »"}.pagination-nav__sublabel{color:var(--ifm-color-content-secondary);font-size:var(--ifm-h5-font-size);font-weight:var(--ifm-font-weight-semibold);margin-bottom:.25rem}.pills__item,.tabs{font-weight:var(--ifm-font-weight-bold)}.pills{display:flex;gap:var(--ifm-pills-spacing);padding-left:0}.pills__item{border-radius:.5rem;cursor:pointer;display:inline-block;padding:.25rem 1rem;transition:background var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.tabs,:not(.containsTaskList_mC6p>li)>.containsTaskList_mC6p{padding-left:0}.pills__item--active{color:var(--ifm-pills-color-active)}.pills__item--active,.pills__item:not(.pills__item--active):hover{background:var(--ifm-pills-color-background-active)}.pills--block{justify-content:stretch}.pills--block .pills__item{flex-grow:1;text-align:center}.tabs{color:var(--ifm-tabs-color);display:flex;margin-bottom:0;overflow-x:auto}.tabs__item{border-bottom:3px solid #0000;border-radius:var(--ifm-global-radius);cursor:pointer;display:inline-flex;padding:var(--ifm-tabs-padding-vertical) var(--ifm-tabs-padding-horizontal);transition:background-color var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.tabs__item--active{border-bottom-color:var(--ifm-tabs-color-active-border);border-bottom-left-radius:0;border-bottom-right-radius:0;color:var(--ifm-tabs-color-active)}.tabs__item:hover{background-color:var(--ifm-hover-overlay)}.tabs--block{justify-content:stretch}.tabs--block .tabs__item{flex-grow:1;justify-content:center}html[data-theme=dark]{--ifm-color-scheme:dark;--ifm-color-emphasis-0:var(--ifm-color-gray-1000);--ifm-color-emphasis-100:var(--ifm-color-gray-900);--ifm-color-emphasis-200:var(--ifm-color-gray-800);--ifm-color-emphasis-300:var(--ifm-color-gray-700);--ifm-color-emphasis-400:var(--ifm-color-gray-600);--ifm-color-emphasis-600:var(--ifm-color-gray-400);--ifm-color-emphasis-700:var(--ifm-color-gray-300);--ifm-color-emphasis-800:var(--ifm-color-gray-200);--ifm-color-emphasis-900:var(--ifm-color-gray-100);--ifm-color-emphasis-1000:var(--ifm-color-gray-0);--ifm-background-color:#1b1b1d;--ifm-background-surface-color:#242526;--ifm-hover-overlay:#ffffff0d;--ifm-color-content:#e3e3e3;--ifm-color-content-secondary:#fff;--ifm-breadcrumb-separator-filter:invert(64%) sepia(11%) saturate(0%) hue-rotate(149deg) brightness(99%) contrast(95%);--ifm-code-background:#ffffff1a;--ifm-scrollbar-track-background-color:#444;--ifm-scrollbar-thumb-background-color:#686868;--ifm-scrollbar-thumb-hover-background-color:#7a7a7a;--ifm-table-stripe-background:#ffffff12;--ifm-toc-border-color:var(--ifm-color-emphasis-200);--ifm-color-primary-contrast-background:#102445;--ifm-color-primary-contrast-foreground:#ebf2fc;--ifm-color-secondary-contrast-background:#474748;--ifm-color-secondary-contrast-foreground:#fdfdfe;--ifm-color-success-contrast-background:#003100;--ifm-color-success-contrast-foreground:#e6f6e6;--ifm-color-info-contrast-background:#193c47;--ifm-color-info-contrast-foreground:#eef9fd;--ifm-color-warning-contrast-background:#4d3800;--ifm-color-warning-contrast-foreground:#fff8e6;--ifm-color-danger-contrast-background:#4b1113;--ifm-color-danger-contrast-foreground:#ffebec}:root{--docusaurus-progress-bar-color:var(--ifm-color-primary);--ifm-color-primary:#2374d3;--ifm-color-primary-dark:#2068be;--ifm-color-primary-darker:#1e63b3;--ifm-color-primary-darkest:#1c5da9;--ifm-color-primary-light:#3280dd;--ifm-color-primary-lighter:#3c87df;--ifm-color-primary-lightest:#5c9ae4;--ifm-code-border-radius:0.25rem;--ifm-code-font-size:95%;--ifm-code-padding-horizontal:0.15rem;--docusaurus-highlighted-code-line-bg:#0000001a;--docusaurus-announcement-bar-height:auto;--aa-search-input-height:44px;--aa-input-icon-size:20px;--aa-base-unit:16;--aa-spacing-factor:1;--aa-spacing:calc(var(--aa-base-unit)*var(--aa-spacing-factor)*1px);--aa-spacing-half:calc(var(--aa-spacing)/2);--aa-panel-max-height:650px;--aa-base-z-index:9999;--aa-font-size:calc(var(--aa-base-unit)*1px);--aa-font-family:inherit;--aa-font-weight-medium:500;--aa-font-weight-semibold:600;--aa-font-weight-bold:700;--aa-icon-size:20px;--aa-icon-stroke-width:1.6;--aa-icon-color-alpha:1;--aa-action-icon-size:20px;--aa-text-color-rgb:38,38,39;--aa-text-color-alpha:1;--aa-primary-color-rgb:62,52,211;--aa-primary-color-alpha:0.2;--aa-muted-color-rgb:128,126,163;--aa-muted-color-alpha:0.6;--aa-panel-border-color-rgb:128,126,163;--aa-panel-border-color-alpha:0.3;--aa-input-border-color-rgb:128,126,163;--aa-input-border-color-alpha:0.8;--aa-background-color-rgb:255,255,255;--aa-background-color-alpha:1;--aa-input-background-color-rgb:255,255,255;--aa-input-background-color-alpha:1;--aa-selected-color-rgb:179,173,214;--aa-selected-color-alpha:0.205;--aa-description-highlight-background-color-rgb:245,223,77;--aa-description-highlight-background-color-alpha:0.5;--aa-detached-media-query:(max-width:680px);--aa-detached-modal-media-query:(min-width:680px);--aa-detached-modal-max-width:680px;--aa-detached-modal-max-height:500px;--aa-overlay-color-rgb:115,114,129;--aa-overlay-color-alpha:0.4;--aa-panel-shadow:0 0 0 1px #23263b1a,0 6px 16px -4px #23263b26;--aa-scrollbar-width:13px;--aa-scrollbar-track-background-color-rgb:234,234,234;--aa-scrollbar-track-background-color-alpha:1;--aa-scrollbar-thumb-background-color-alpha:1;--aa-search-input-height:36px;--docusaurus-blog-social-icon-size:1rem;--docusaurus-collapse-button-bg:#0000;--docusaurus-collapse-button-bg-hover:#0000001a;--doc-sidebar-width:300px;--doc-sidebar-hidden-width:30px;--docusaurus-tag-list-border:var(--ifm-color-emphasis-300)}#nprogress .bar{background:var(--docusaurus-progress-bar-color);height:2px;left:0;position:fixed;top:0;width:100%;z-index:1031}#nprogress .peg{box-shadow:0 0 10px var(--docusaurus-progress-bar-color),0 0 5px var(--docusaurus-progress-bar-color);height:100%;opacity:1;position:absolute;right:0;transform:rotate(3deg) translateY(-4px);width:100px}[data-theme=dark]{--ifm-color-primary:#5294e2;--ifm-color-primary-dark:#3884de;--ifm-color-primary-darker:#2a7cdb;--ifm-color-primary-darkest:#1f65b9;--ifm-color-primary-light:#6ca4e6;--ifm-color-primary-lighter:#7aace9;--ifm-color-primary-lightest:#a1c5ef;--docusaurus-highlighted-code-line-bg:#0000004d}body:not(.navigation-with-keyboard) :not(input):focus{outline:0}#__docusaurus-base-url-issue-banner-container,.aa-ClearButton[hidden],.aa-ItemContent:empty,.aa-LoadingIndicator[hidden],.aa-Source:empty,.aa-SourceHeader:empty,.themedComponent_mlkZ,[data-theme=dark] .lightToggleIcon_pyhR,[data-theme=light] .darkToggleIcon_wfgR,html[data-announcement-bar-initially-dismissed=true] .announcementBar_mb4j{display:none}.skipToContent_fXgn{background-color:var(--ifm-background-surface-color);color:var(--ifm-color-emphasis-900);left:100%;padding:calc(var(--ifm-global-spacing)/2) var(--ifm-global-spacing);position:fixed;top:1rem;z-index:calc(var(--ifm-z-index-fixed) + 1)}.skipToContent_fXgn:focus{box-shadow:var(--ifm-global-shadow-md);left:1rem}.closeButton_CVFx{line-height:0;padding:0}.content_knG7{font-size:85%;padding:5px 0;text-align:center}.content_knG7 a{color:inherit;text-decoration:underline}.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}.aa-Form,.toggleButton_gllP{align-items:center;width:100%;display:flex}.toggleButton_gllP{border-radius:50%;height:100%;justify-content:center;transition:background var(--ifm-transition-fast)}.toggleButton_gllP:hover{background:var(--ifm-color-emphasis-200)}.toggleButtonDisabled_aARS{cursor:not-allowed}.darkNavbarColorModeToggle_X3D1:hover{background:var(--ifm-color-gray-800)}[data-theme=dark] .themedComponent--dark_xIcU,[data-theme=light] .themedComponent--light_NVdE,html:not([data-theme]) .themedComponent--light_NVdE{display:initial}.iconExternalLink_nPIU{margin-left:.3rem}.dropdownNavbarItemMobile_S0Fm{cursor:pointer}.iconLanguage_nlXk{margin-right:5px;vertical-align:text-bottom}body.dark,body[data-theme=dark]{--aa-text-color-rgb:183,192,199;--aa-primary-color-rgb:146,138,255;--aa-muted-color-rgb:146,138,255;--aa-input-background-color-rgb:0,3,9;--aa-background-color-rgb:21,24,42;--aa-selected-color-rgb:146,138,255;--aa-selected-color-alpha:0.25;--aa-description-highlight-background-color-rgb:0 255 255;--aa-description-highlight-background-color-alpha:0.25;--aa-panel-shadow:inset 1px 1px 0 0 #2c2e40,0 3px 8px 0 #000309;--aa-scrollbar-track-background-color-rgb:44,46,64;--aa-muted-color-alpha:1}.aa-Autocomplete,.aa-DetachedFormContainer,.aa-Panel{color:#262627;color:rgba(var(--aa-text-color-rgb),var(--aa-text-color-alpha));font-family:inherit;font-family:var(--aa-font-family);font-size:16px;font-size:var(--aa-font-size);font-weight:400;line-height:1em;margin:0;padding:0;text-align:left}.aa-Form{background-color:#fff;background-color:rgba(var(--aa-input-background-color-rgb),var(--aa-input-background-color-alpha));border:1px solid #807ea3cc;border:1px solid rgba(var(--aa-input-border-color-rgb),var(--aa-input-border-color-alpha));border-radius:3px;line-height:1em;margin:0;position:relative}.aa-ClearButton,.aa-Input,.aa-SubmitButton{border:0;background:none}.aa-Form:focus-within{border-color:#3e34d3;border-color:rgba(var(--aa-primary-color-rgb),1);box-shadow:0 0 0 2px #3e34d333,inset 0 0 0 2px #3e34d333;box-shadow:rgba(var(--aa-primary-color-rgb),var(--aa-primary-color-alpha)) 0 0 0 2px,inset rgba(var(--aa-primary-color-rgb),var(--aa-primary-color-alpha)) 0 0 0 2px;outline:currentColor}.aa-InputWrapperPrefix{align-items:center;display:flex;flex-shrink:0;height:44px;height:var(--aa-search-input-height);order:1}.aa-Label,.aa-LoadingIndicator{cursor:auto;flex-shrink:0;height:100%;padding:0;text-align:left}.aa-Label svg,.aa-LoadingIndicator svg{color:#3e34d3;color:rgba(var(--aa-primary-color-rgb),1);height:auto;max-height:20px;max-height:var(--aa-input-icon-size);stroke-width:1.6;stroke-width:var(--aa-icon-stroke-width);width:20px;width:var(--aa-input-icon-size)}.aa-LoadingIndicator,.aa-SubmitButton{height:100%;padding-left:11px;padding-left:calc(var(--aa-spacing)*.75 - 1px);padding-right:8px;padding-right:var(--aa-spacing-half);width:47px;width:calc(var(--aa-spacing)*1.75 + var(--aa-icon-size) - 1px)}.aa-SubmitButton{appearance:none;margin:0}.aa-LoadingIndicator{align-items:center;display:flex;justify-content:center}.aa-InputWrapper{order:3;position:relative;width:100%}.aa-Input{appearance:none;color:#262627;color:rgba(var(--aa-text-color-rgb),var(--aa-text-color-alpha));font:inherit;height:44px;height:var(--aa-search-input-height);padding:0;width:100%}.aa-Input::placeholder{color:#807ea399;color:rgba(var(--aa-muted-color-rgb),var(--aa-muted-color-alpha));opacity:1}.aa-Input:focus{border-color:none;box-shadow:none;outline:0}.aa-Input::-webkit-search-cancel-button,.aa-Input::-webkit-search-decoration,.aa-Input::-webkit-search-results-button,.aa-Input::-webkit-search-results-decoration{appearance:none}.aa-InputWrapperSuffix{align-items:center;display:flex;height:44px;height:var(--aa-search-input-height);order:4}.aa-ClearButton{align-items:center;color:#807ea399;color:rgba(var(--aa-muted-color-rgb),var(--aa-muted-color-alpha));cursor:pointer;display:flex;height:100%;margin:0;padding:0 12.83328px;padding:0 calc(var(--aa-spacing)*.83333 - .5px)}.aa-Item,.aa-ItemIcon{align-items:center;border-radius:3px}.aa-ClearButton:focus,.aa-ClearButton:hover,.aa-ItemActionButton:focus svg,.aa-ItemActionButton:hover svg{color:#262627;color:rgba(var(--aa-text-color-rgb),var(--aa-text-color-alpha))}.aa-ClearButton svg{stroke-width:1.6;stroke-width:var(--aa-icon-stroke-width);width:20px;width:var(--aa-icon-size)}.aa-Panel{background-color:#fff;background-color:rgba(var(--aa-background-color-rgb),var(--aa-background-color-alpha));border-radius:4px;border-radius:calc(var(--aa-spacing)/4);box-shadow:0 0 0 1px #23263b1a,0 6px 16px -4px #23263b26;box-shadow:var(--aa-panel-shadow);margin:8px 0 0;overflow:hidden;position:absolute;transition:opacity .2s ease-in,filter .2s ease-in}.aa-Panel button{appearance:none;background:none;border:0;margin:0;padding:0}.aa-PanelLayout{height:100%;margin:0;max-height:650px;max-height:var(--aa-panel-max-height);overflow-y:auto;padding:0;position:relative;text-align:left}.aa-PanelLayoutColumns--twoGolden{display:grid;grid-template-columns:39.2% auto;overflow:hidden;padding:0}.aa-PanelLayoutColumns--two{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));overflow:hidden;padding:0}.aa-PanelLayoutColumns--three{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));overflow:hidden;padding:0}.aa-Panel--stalled .aa-Source{filter:grayscale(1);opacity:.8}.aa-Panel--scrollable{margin:0;max-height:650px;max-height:var(--aa-panel-max-height);overflow-x:hidden;overflow-y:auto;padding:8px;padding:var(--aa-spacing-half);scrollbar-color:#fff #eaeaea;scrollbar-color:rgba(var(--aa-scrollbar-thumb-background-color-rgb),var(--aa-scrollbar-thumb-background-color-alpha)) rgba(var(--aa-scrollbar-track-background-color-rgb),var(--aa-scrollbar-track-background-color-alpha));scrollbar-width:thin}.sidebar_re4s,.tableOfContents_bqdL{max-height:calc(100vh - var(--ifm-navbar-height) - 2rem)}.aa-Panel--scrollable::-webkit-scrollbar{width:13px;width:var(--aa-scrollbar-width)}.aa-Panel--scrollable::-webkit-scrollbar-track{background-color:#eaeaea;background-color:rgba(var(--aa-scrollbar-track-background-color-rgb),var(--aa-scrollbar-track-background-color-alpha))}.aa-Panel--scrollable::-webkit-scrollbar-thumb{background-color:#fff;background-color:rgba(var(--aa-scrollbar-thumb-background-color-rgb),var(--aa-scrollbar-thumb-background-color-alpha));border:3px solid #eaeaea;border:3px solid rgba(var(--aa-scrollbar-track-background-color-rgb),var(--aa-scrollbar-track-background-color-alpha));border-radius:9999px;border-right-width:2px}.aa-Source{margin:0;padding:0;position:relative;width:100%}.aa-SourceNoResults{font-size:1em;margin:0;padding:16px;padding:var(--aa-spacing)}.aa-List{margin:0}.aa-List,.aa-SourceHeader{padding:0;position:relative}.aa-SourceHeader{margin:8px .5em 8px 0;margin:var(--aa-spacing-half) .5em var(--aa-spacing-half) 0}.aa-SourceHeaderTitle{background:#fff;background:rgba(var(--aa-background-color-rgb),var(--aa-background-color-alpha));color:#3e34d3;color:rgba(var(--aa-primary-color-rgb),1);display:inline-block;font-size:.8em;font-weight:600;font-weight:var(--aa-font-weight-semibold);margin:0;padding:0 8px 0 0;padding:0 var(--aa-spacing-half) 0 0;position:relative;z-index:9999;z-index:var(--aa-base-z-index)}.aa-SourceHeaderLine{border-bottom:1px solid #3e34d3;border-bottom:1px solid rgba(var(--aa-primary-color-rgb),1);display:block;height:2px;left:0;margin:0;opacity:.3;padding:0;position:absolute;right:0;top:8px;top:var(--aa-spacing-half);z-index:9998;z-index:calc(var(--aa-base-z-index) - 1)}.aa-SourceFooterSeeAll{background:linear-gradient(180deg,#fff,#807ea324);background:linear-gradient(180deg,rgba(var(--aa-background-color-rgb),var(--aa-background-color-alpha)),#807ea324);border:1px solid #807ea399;border:1px solid rgba(var(--aa-muted-color-rgb),var(--aa-muted-color-alpha));border-radius:5px;box-shadow:inset 0 0 2px #fff,0 2px 2px -1px #4c455826;color:inherit;font-size:.95em;font-weight:500;font-weight:var(--aa-font-weight-medium);padding:.475em 1em .6em;-webkit-text-decoration:none;text-decoration:none}.aa-SourceFooterSeeAll:focus,.aa-SourceFooterSeeAll:hover{border:1px solid #3e34d3;border:1px solid rgba(var(--aa-primary-color-rgb),1);color:#3e34d3;color:rgba(var(--aa-primary-color-rgb),1)}.aa-Item{cursor:pointer;display:grid;min-height:40px;min-height:calc(var(--aa-spacing)*2.5);padding:4px;padding:calc(var(--aa-spacing-half)/2)}.aa-Item[aria-selected=true]{background-color:rgba(179,173,214,.205);background-color:rgba(var(--aa-selected-color-rgb),var(--aa-selected-color-alpha))}.aa-Item[aria-selected=true] .aa-ActiveOnly,.aa-Item[aria-selected=true] .aa-ItemActionButton{visibility:visible}.aa-ItemIcon{background:#fff;background:rgba(var(--aa-background-color-rgb),var(--aa-background-color-alpha));box-shadow:inset 0 0 0 1px #807ea34d;box-shadow:inset 0 0 0 1px rgba(var(--aa-panel-border-color-rgb),var(--aa-panel-border-color-alpha));color:#7777a3;color:rgba(var(--aa-icon-color-rgb),var(--aa-icon-color-alpha));display:flex;flex-shrink:0;font-size:.7em;height:28px;height:calc(var(--aa-icon-size) + var(--aa-spacing-half));justify-content:center;overflow:hidden;stroke-width:1.6;stroke-width:var(--aa-icon-stroke-width);text-align:center;width:28px;width:calc(var(--aa-icon-size) + var(--aa-spacing-half))}.aa-ItemIcon img{height:auto;max-height:20px;max-height:calc(var(--aa-icon-size) + var(--aa-spacing-half) - 8px);max-width:20px;max-width:calc(var(--aa-icon-size) + var(--aa-spacing-half) - 8px);width:auto}.aa-ItemIcon svg{height:20px;height:var(--aa-icon-size);width:20px;width:var(--aa-icon-size)}.aa-ItemIcon--alignTop{align-self:flex-start}.aa-ItemIcon--noBorder{background:none;box-shadow:none}.aa-ItemIcon--picture{height:96px;width:96px}.aa-ItemIcon--picture img{max-height:100%;max-width:100%;padding:8px;padding:var(--aa-spacing-half)}.aa-ItemContent{align-items:center;cursor:pointer;display:grid;gap:8px;grid-gap:8px;grid-gap:var(--aa-spacing-half);gap:var(--aa-spacing-half);grid-auto-flow:column;line-height:1.25em;overflow:hidden}.aa-ItemContent mark{background:none;color:#262627;color:rgba(var(--aa-text-color-rgb),var(--aa-text-color-alpha));font-style:normal;font-weight:700;font-weight:var(--aa-font-weight-bold)}.aa-ItemContent--dual{display:flex;flex-direction:column;justify-content:space-between;text-align:left}.aa-ItemContent--dual .aa-ItemContentSubtitle,.aa-ItemContent--dual .aa-ItemContentTitle,.tocCollapsibleContent_vkbj a{display:block}.aa-ItemContent--indented{padding-left:36px;padding-left:calc(var(--aa-icon-size) + var(--aa-spacing))}.aa-ItemContentBody{display:grid;gap:4px;grid-gap:4px;grid-gap:calc(var(--aa-spacing-half)/2);gap:calc(var(--aa-spacing-half)/2)}.aa-ItemContentTitle{display:inline-block;margin:0 .5em 0 0;max-width:100%;overflow:hidden;padding:0;text-overflow:ellipsis;white-space:nowrap}.aa-ItemContentSubtitle{font-size:.92em}.aa-ItemContentSubtitleIcon:before{border-color:#807ea3a3;border-color:rgba(var(--aa-muted-color-rgb),.64);border-style:solid;content:"";display:inline-block;left:1px;position:relative;top:-3px}.aa-PanelFooter:after,.aa-PanelHeader:after{content:"";position:absolute;pointer-events:none;right:0;left:0}.aa-ItemContentSubtitle--inline .aa-ItemContentSubtitleIcon:before{border-width:0 0 1.5px;margin-left:8px;margin-left:var(--aa-spacing-half);margin-right:4px;margin-right:calc(var(--aa-spacing-half)/2);width:10px;width:calc(var(--aa-spacing-half) + 2px)}.aa-ItemContentSubtitle--standalone{align-items:center;color:#262627;color:rgba(var(--aa-text-color-rgb),var(--aa-text-color-alpha));display:grid;gap:8px;grid-gap:8px;grid-gap:var(--aa-spacing-half);gap:var(--aa-spacing-half);grid-auto-flow:column;justify-content:start}.aa-ItemContentSubtitle--standalone .aa-ItemContentSubtitleIcon:before{border-radius:0 0 0 3px;border-width:0 0 1.5px 1.5px;height:8px;height:var(--aa-spacing-half);width:8px;width:var(--aa-spacing-half)}.aa-ItemContentSubtitleCategory{color:#807ea3;color:rgba(var(--aa-muted-color-rgb),1);font-weight:500}.aa-ItemContentDescription{color:#262627;color:rgba(var(--aa-text-color-rgb),var(--aa-text-color-alpha));font-size:.85em;max-width:100%;overflow-x:hidden;text-overflow:ellipsis}.aa-DetachedSearchButtonPlaceholder[hidden],.aa-ItemContentDescription:empty,.docSidebarContainer_YfHR,.navbarSearchContainer_Bca1:empty,.sidebarLogo_isFc{display:none}.aa-ItemContentDescription mark{background:#f5df4d80;background:rgba(var(--aa-description-highlight-background-color-rgb),var(--aa-description-highlight-background-color-alpha));color:#262627;color:rgba(var(--aa-text-color-rgb),var(--aa-text-color-alpha));font-style:normal;font-weight:500;font-weight:var(--aa-font-weight-medium)}.aa-ItemContentDash{color:#807ea399;color:rgba(var(--aa-muted-color-rgb),var(--aa-muted-color-alpha));display:none;opacity:.4}.aa-ItemContentTag{background-color:#3e34d333;background-color:rgba(var(--aa-primary-color-rgb),var(--aa-primary-color-alpha));border-radius:3px;margin:0 .4em 0 0;padding:.08em .3em}.aa-ItemLink,.aa-ItemWrapper{align-items:center;color:inherit;display:grid;gap:4px;grid-gap:4px;grid-gap:calc(var(--aa-spacing-half)/2);gap:calc(var(--aa-spacing-half)/2);grid-auto-flow:column;justify-content:space-between;width:100%}.aa-ItemLink{color:inherit;-webkit-text-decoration:none;text-decoration:none}.aa-ItemActions{display:grid;grid-auto-flow:column;height:100%;justify-self:end;margin:0 -5.33333px;margin:0 calc(var(--aa-spacing)/-3);padding:0 2px 0 0}.aa-ItemActionButton{align-items:center;background:none;border:0;color:#807ea399;color:rgba(var(--aa-muted-color-rgb),var(--aa-muted-color-alpha));cursor:pointer;display:flex;flex-shrink:0;padding:0}.aa-ItemActionButton svg{color:#807ea399;color:rgba(var(--aa-muted-color-rgb),var(--aa-muted-color-alpha));margin:5.33333px;margin:calc(var(--aa-spacing)/3);stroke-width:1.6;stroke-width:var(--aa-icon-stroke-width);width:20px;width:var(--aa-action-icon-size)}.aa-ActiveOnly{visibility:hidden}.aa-PanelHeader{align-items:center;background:#3e34d3;background:rgba(var(--aa-primary-color-rgb),1);color:#fff;display:grid;height:var(--aa-modal-header-height);margin:0;padding:8px 16px;padding:var(--aa-spacing-half) var(--aa-spacing);position:relative}.aa-PanelHeader:after{background-image:linear-gradient(#fff,#fff0);background-image:linear-gradient(rgba(var(--aa-background-color-rgb),1),rgba(var(--aa-background-color-rgb),0));bottom:-8px;bottom:calc(var(--aa-spacing-half)*-1);height:8px;height:var(--aa-spacing-half)}.aa-PanelFooter,.aa-PanelHeader:after{z-index:9999;z-index:var(--aa-base-z-index)}.aa-PanelFooter{background-color:#fff;background-color:rgba(var(--aa-background-color-rgb),var(--aa-background-color-alpha));box-shadow:inset 0 1px 0 #807ea34d;box-shadow:inset 0 1px 0 rgba(var(--aa-panel-border-color-rgb),var(--aa-panel-border-color-alpha));display:flex;justify-content:space-between;margin:0;padding:16px;padding:var(--aa-spacing);position:relative}.aa-PanelFooter:after{background-image:linear-gradient(#fff0,#807ea399);background-image:linear-gradient(rgba(var(--aa-background-color-rgb),0),rgba(var(--aa-muted-color-rgb),var(--aa-muted-color-alpha)));height:16px;height:var(--aa-spacing);opacity:.12;top:-16px;top:calc(var(--aa-spacing)*-1);z-index:9998;z-index:calc(var(--aa-base-z-index) - 1)}.aa-DetachedContainer{background:#fff;background:rgba(var(--aa-background-color-rgb),var(--aa-background-color-alpha));bottom:0;box-shadow:0 0 0 1px #23263b1a,0 6px 16px -4px #23263b26;box-shadow:var(--aa-panel-shadow);display:flex;flex-direction:column;left:0;margin:0;overflow:hidden;padding:0;position:fixed;right:0;top:0;z-index:9999;z-index:var(--aa-base-z-index)}.aa-DetachedContainer:after{height:32px}.aa-DetachedContainer .aa-SourceHeader{margin:8px 0 8px 2px;margin:var(--aa-spacing-half) 0 var(--aa-spacing-half) 2px}.aa-DetachedContainer .aa-Panel{background-color:#fff;background-color:rgba(var(--aa-background-color-rgb),var(--aa-background-color-alpha));border-radius:0;box-shadow:none;flex-grow:1;margin:0;padding:0;position:relative}.aa-DetachedContainer .aa-PanelLayout{bottom:0;box-shadow:none;left:0;margin:0;max-height:none;overflow-y:auto;position:absolute;right:0;top:0;width:100%}.aa-DetachedFormContainer{border-bottom:1px solid #807ea34d;border-bottom:1px solid rgba(var(--aa-panel-border-color-rgb),var(--aa-panel-border-color-alpha));display:flex;flex-direction:row;justify-content:space-between;margin:0;padding:8px;padding:var(--aa-spacing-half)}.aa-DetachedCancelButton{background:none;border:0;border-radius:3px;color:#262627;color:rgba(var(--aa-text-color-rgb),var(--aa-text-color-alpha));cursor:pointer;font:inherit;margin:0 0 0 8px;margin:0 0 0 var(--aa-spacing-half);padding:0 8px;padding:0 var(--aa-spacing-half)}.aa-DetachedCancelButton:focus,.aa-DetachedCancelButton:hover{box-shadow:inset 0 0 0 1px #807ea34d;box-shadow:inset 0 0 0 1px rgba(var(--aa-panel-border-color-rgb),var(--aa-panel-border-color-alpha))}.aa-DetachedContainer--modal{border-radius:6px;bottom:inherit;height:auto;margin:0 auto;max-width:680px;max-width:var(--aa-detached-modal-max-width);position:absolute;top:3%}.aa-DetachedContainer--modal .aa-PanelLayout{max-height:500px;max-height:var(--aa-detached-modal-max-height);padding-bottom:8px;padding-bottom:var(--aa-spacing-half);position:static}.aa-DetachedSearchButton{align-items:center;background-color:#fff;background-color:rgba(var(--aa-input-background-color-rgb),var(--aa-input-background-color-alpha));border:1px solid #807ea3cc;border:1px solid rgba(var(--aa-input-border-color-rgb),var(--aa-input-border-color-alpha));border-radius:3px;color:#807ea399;color:rgba(var(--aa-muted-color-rgb),var(--aa-muted-color-alpha));cursor:pointer;display:flex;font:inherit;font-family:inherit;font-family:var(--aa-font-family);font-size:16px;font-size:var(--aa-font-size);height:44px;height:var(--aa-search-input-height);margin:0;padding:0 5.5px;padding:0 calc(var(--aa-search-input-height)/8);position:relative;text-align:left;width:100%}.aa-DetachedSearchButton:focus{border-color:#3e34d3;border-color:rgba(var(--aa-primary-color-rgb),1);box-shadow:0 0 0 3px #3e34d333,inset 0 0 0 2px #3e34d333;box-shadow:rgba(var(--aa-primary-color-rgb),var(--aa-primary-color-alpha)) 0 0 0 3px,inset rgba(var(--aa-primary-color-rgb),var(--aa-primary-color-alpha)) 0 0 0 2px;outline:currentColor}.aa-DetachedSearchButtonIcon{align-items:center;color:#3e34d3;color:rgba(var(--aa-primary-color-rgb),1);cursor:auto;display:flex;flex-shrink:0;height:100%;justify-content:center;width:36px;width:calc(var(--aa-icon-size) + var(--aa-spacing))}.authorSocialIcon_XYv3,.authorSocialLink_owbf{width:var(--docusaurus-blog-social-icon-size)}.aa-DetachedSearchButtonQuery{color:#262627;color:rgba(var(--aa-text-color-rgb),1);line-height:1.25em;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.aa-Detached{height:100vh;overflow:hidden}.aa-DetachedOverlay{background-color:#73728166;background-color:rgba(var(--aa-overlay-color-rgb),var(--aa-overlay-color-alpha));height:100vh;left:0;margin:0;padding:0;position:fixed;right:0;top:0;z-index:9998;z-index:calc(var(--aa-base-z-index) - 1)}.aa-GradientBottom,.aa-GradientTop{height:8px;height:var(--aa-spacing-half);left:0;pointer-events:none;position:absolute;right:0;z-index:9999;z-index:var(--aa-base-z-index)}.aa-GradientTop{background-image:linear-gradient(#fff,#fff0);background-image:linear-gradient(rgba(var(--aa-background-color-rgb),1),rgba(var(--aa-background-color-rgb),0));top:0}.aa-GradientBottom{background-image:linear-gradient(#fff0,#fff);background-image:linear-gradient(rgba(var(--aa-background-color-rgb),0),rgba(var(--aa-background-color-rgb),1));border-bottom-left-radius:4px;border-bottom-left-radius:calc(var(--aa-spacing)/4);border-bottom-right-radius:4px;border-bottom-right-radius:calc(var(--aa-spacing)/4);bottom:0}.navbarHideable_m1mJ{transition:transform var(--ifm-transition-fast) ease}.navbarHidden_jGov{transform:translate3d(0,calc(-100% - 2px),0)}.errorBoundaryError_a6uf{color:red;white-space:pre-wrap}.errorBoundaryFallback_VBag{color:red;padding:.55rem}.footerLogoLink_BH7S{opacity:.5;transition:opacity var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.footerLogoLink_BH7S:hover,.hash-link:focus,:hover>.hash-link{opacity:1}.anchorWithStickyNavbar_LWe7{scroll-margin-top:calc(var(--ifm-navbar-height) + .5rem)}.anchorWithHideOnScrollNavbar_WYt5{scroll-margin-top:.5rem}.hash-link{opacity:0;padding-left:.5rem;transition:opacity var(--ifm-transition-fast);-webkit-user-select:none;user-select:none}.hash-link:before{content:"#"}.mainWrapper_z2l0{display:flex;flex:1 0 auto;flex-direction:column}.docusaurus-mt-lg{margin-top:3rem}#__docusaurus{display:flex;flex-direction:column;min-height:100%}.sidebar_re4s{overflow-y:auto;position:sticky;top:calc(var(--ifm-navbar-height) + 2rem)}.authorSocials_rSDt,.authorTitle_nd0D{overflow:hidden;-webkit-box-orient:vertical}.sidebarItemTitle_pO2u{font-size:var(--ifm-h3-font-size);font-weight:var(--ifm-font-weight-bold)}.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}.yearGroupHeading_rMGB{margin-bottom:.4rem;margin-top:1.6rem}.yearGroupHeading_QT03{margin:1rem .75rem .5rem}.cardContainer_fWXF{--ifm-link-color:var(--ifm-color-emphasis-800);--ifm-link-hover-color:var(--ifm-color-emphasis-700);--ifm-link-hover-decoration:none;border:1px solid var(--ifm-color-emphasis-200);box-shadow:0 1.5px 3px 0 #00000026;transition:all var(--ifm-transition-fast) ease;transition-property:border,box-shadow}.cardContainer_fWXF:hover{border-color:var(--ifm-color-primary);box-shadow:0 3px 6px 0 #0003}.cardTitle_rnsV{font-size:1.2rem}.cardDescription_PWke{font-size:.8rem}[data-theme=dark] .githubSvg_Uu4N,[data-theme=dark] .xSvg_y3PF{fill:var(--light)}[data-theme=light] .githubSvg_Uu4N,[data-theme=light] .xSvg_y3PF{fill:var(--dark)}.authorSocials_rSDt{align-items:center;display:flex;flex-wrap:wrap;line-clamp:1;-webkit-line-clamp:1}.authorSocialLink_owbf,.authorSocials_rSDt{height:var(--docusaurus-blog-social-icon-size);line-height:0}.authorSocialLink_owbf{margin-right:.4rem}.authorSocialIcon_XYv3{height:var(--docusaurus-blog-social-icon-size)}.authorImage_XqGP{--ifm-avatar-photo-size:3.6rem}.author-as-h1_n9oJ .authorImage_XqGP{--ifm-avatar-photo-size:7rem}.author-as-h2_gXvM .authorImage_XqGP{--ifm-avatar-photo-size:5.4rem}.authorDetails_lV9A{align-items:flex-start;display:flex;flex-direction:column;justify-content:space-around}.authorName_yefp{display:flex;flex-direction:row;font-size:1.1rem;line-height:1.1rem}.author-as-h1_n9oJ .authorName_yefp{display:inline;font-size:2.4rem;line-height:2.4rem}.author-as-h2_gXvM .authorName_yefp{display:inline;font-size:1.4rem;line-height:1.4rem}.authorTitle_nd0D{display:-webkit-box;font-size:.8rem;line-height:1rem;line-clamp:1;-webkit-line-clamp:1}.author-as-h1_n9oJ .authorTitle_nd0D{font-size:1.2rem;line-height:1.6rem}.author-as-h2_gXvM .authorTitle_nd0D{font-size:1rem;line-height:1.3rem}.authorBlogPostCount_iiJ5{background:var(--ifm-color-secondary);border-radius:var(--ifm-global-radius);color:var(--ifm-color-black);font-size:.8rem;line-height:1.2;margin-left:.3rem;padding:.1rem .4rem}.authorCol_Hf19{max-width:inherit!important}.imageOnlyAuthorRow_pa_O{display:flex;flex-flow:row wrap}.imageOnlyAuthorCol_G86a{margin-left:.3rem;margin-right:.3rem}.authorListItem_n3yI{list-style-type:none;margin-bottom:2rem}.backToTopButton_sjWU{background-color:var(--ifm-color-emphasis-200);border-radius:50%;bottom:1.3rem;box-shadow:var(--ifm-global-shadow-lw);height:3rem;opacity:0;position:fixed;right:1.3rem;transform:scale(0);transition:all var(--ifm-transition-fast) var(--ifm-transition-timing-default);visibility:hidden;width:3rem;z-index:calc(var(--ifm-z-index-fixed) - 1)}.buttonGroup__atx button,.codeBlockContainer_Ckt0{background:var(--prism-background-color);color:var(--prism-color)}.backToTopButton_sjWU:after{background-color:var(--ifm-color-emphasis-1000);content:" ";display:inline-block;height:100%;-webkit-mask:var(--ifm-menu-link-sublist-icon) 50%/2rem 2rem no-repeat;mask:var(--ifm-menu-link-sublist-icon) 50%/2rem 2rem no-repeat;width:100%}.backToTopButtonShow_xfvO{opacity:1;transform:scale(1);visibility:visible}[data-theme=dark]:root{--docusaurus-collapse-button-bg:#ffffff0d;--docusaurus-collapse-button-bg-hover:#ffffff1a}.collapseSidebarButton_PEFL{display:none;margin:0}.docMainContainer_TBSr,.docRoot_UBD9{display:flex;width:100%}.docsWrapper_hBAB{display:flex;flex:1 0 auto}.codeBlockContainer_Ckt0{border-radius:var(--ifm-code-border-radius);box-shadow:var(--ifm-global-shadow-lw);margin-bottom:var(--ifm-leading)}.codeBlockContent_biex{border-radius:inherit;direction:ltr;position:relative}.codeBlockTitle_Ktv7{border-bottom:1px solid var(--ifm-color-emphasis-300);border-top-left-radius:inherit;border-top-right-radius:inherit;font-size:var(--ifm-code-font-size);font-weight:500;padding:.75rem var(--ifm-pre-padding)}.codeBlock_bY9V{--ifm-pre-background:var(--prism-background-color);margin:0;padding:0}.codeBlockTitle_Ktv7+.codeBlockContent_biex .codeBlock_bY9V{border-top-left-radius:0;border-top-right-radius:0}.codeBlockLines_e6Vv{float:left;font:inherit;min-width:100%;padding:var(--ifm-pre-padding)}.codeBlockLinesWithNumbering_o6Pm{display:table;padding:var(--ifm-pre-padding) 0}.buttonGroup__atx{column-gap:.2rem;display:flex;position:absolute;right:calc(var(--ifm-pre-padding)/2);top:calc(var(--ifm-pre-padding)/2)}.buttonGroup__atx button{align-items:center;border:1px solid var(--ifm-color-emphasis-300);border-radius:var(--ifm-global-radius);display:flex;line-height:0;opacity:0;padding:.4rem;transition:opacity var(--ifm-transition-fast) ease-in-out}.buttonGroup__atx button:focus-visible,.buttonGroup__atx button:hover{opacity:1!important}.theme-code-block:hover .buttonGroup__atx button{opacity:.4}:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);display:block;margin:0 calc(var(--ifm-pre-padding)*-1);padding:0 var(--ifm-pre-padding)}.codeLine_lJS_{counter-increment:a;display:table-row}.codeLineNumber_Tfdd{background:var(--ifm-pre-background);display:table-cell;left:0;overflow-wrap:normal;padding:0 var(--ifm-pre-padding);position:sticky;text-align:right;width:1%}.codeLineNumber_Tfdd:before{content:counter(a);opacity:.4}.codeLineContent_feaV{padding-right:var(--ifm-pre-padding)}.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}.tag_Nnez{display:inline-block;margin:.5rem .5rem 0 1rem}.theme-code-block:hover .copyButtonCopied_obH4{opacity:1!important}.copyButtonIcons_eSgA{height:1.125rem;position:relative;width:1.125rem}.copyButtonIcon_y97N,.copyButtonSuccessIcon_LjdS{left:0;position:absolute;top:0;fill:currentColor;height:inherit;opacity:inherit;transition:all var(--ifm-transition-fast) ease;width:inherit}.copyButtonSuccessIcon_LjdS{color:#00d600;left:50%;opacity:0;top:50%;transform:translate(-50%,-50%) scale(.33)}.copyButtonCopied_obH4 .copyButtonIcon_y97N{opacity:0;transform:scale(.33)}.copyButtonCopied_obH4 .copyButtonSuccessIcon_LjdS{opacity:1;transform:translate(-50%,-50%) scale(1);transition-delay:75ms}.tags_jXut{display:inline}.tag_QGVx{display:inline-block;margin:0 .4rem .5rem 0}.iconEdit_Z9Sw{margin-right:.3em;vertical-align:sub}.lastUpdated_JAkA{font-size:smaller;font-style:italic;margin-top:.2rem}.tocCollapsibleButton_TO0P{align-items:center;display:flex;font-size:inherit;justify-content:space-between;padding:.4rem .8rem;width:100%}.tocCollapsibleButton_TO0P:after{background:var(--ifm-menu-link-sublist-icon) 50% 50%/2rem 2rem no-repeat;content:"";filter:var(--ifm-menu-link-sublist-icon-filter);height:1.25rem;transform:rotate(180deg);transition:transform var(--ifm-transition-fast);width:1.25rem}.tocCollapsibleButtonExpanded_MG3E:after,.tocCollapsibleExpanded_sAul{transform:none}.tocCollapsible_ETCw{background-color:var(--ifm-menu-color-background-active);border-radius:var(--ifm-global-radius);margin:1rem 0}.tocCollapsibleContent_vkbj>ul{border-left:none;border-top:1px solid var(--ifm-color-emphasis-300);font-size:15px;padding:.2rem 0}.tocCollapsibleContent_vkbj ul li{margin:.4rem .8rem}.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:#0000 #0000 #0000 var(--docusaurus-details-decoration-color);border-style:solid;border-width:var(--docusaurus-details-summary-arrow-size);content:"";left:0;position:absolute;top:.45rem;transform:rotate(0);transform-origin:calc(var(--docusaurus-details-summary-arrow-size)/2) 50%;transition:var(--docusaurus-details-transition)}.collapsibleContent_i85q{border-top:1px solid var(--docusaurus-details-decoration-color);margin-top:1rem;padding-top:1rem}.details_b_Ee{--docusaurus-details-decoration-color:var(--ifm-alert-border-color);--docusaurus-details-transition:transform var(--ifm-transition-fast) ease;border:1px solid var(--ifm-alert-border-color);margin:0 0 var(--ifm-spacing-vertical)}.img_ev3q{height:auto}.tableOfContents_bqdL{overflow-y:auto;position:sticky;top:calc(var(--ifm-navbar-height) + 1rem)}.admonition_xJq3{margin-bottom:1em}.admonitionHeading_Gvgb{font:var(--ifm-heading-font-weight) var(--ifm-h5-font-size)/var(--ifm-heading-line-height) var(--ifm-heading-font-family)}.admonitionHeading_Gvgb:not(:last-child){margin-bottom:.3rem}.admonitionHeading_Gvgb code{text-transform:none}.admonitionIcon_Rf37{display:inline-block;margin-right:.4em;vertical-align:middle}.admonitionIcon_Rf37 svg{display:inline-block;height:1.6em;width:1.6em;fill:var(--ifm-alert-foreground-color)}.breadcrumbHomeIcon_YNFT{height:1.1rem;position:relative;top:1px;vertical-align:top;width:1.1rem}.breadcrumbsContainer_Z_bl{--ifm-breadcrumb-size-multiplier:0.8;margin-bottom:.8rem}.title_kItE{--ifm-h1-font-size:3rem;margin-bottom:calc(var(--ifm-leading)*1.25)}@media (min-width:997px){.collapseSidebarButton_PEFL,.expandButton_TmdG{background-color:var(--docusaurus-collapse-button-bg)}:root{--docusaurus-announcement-bar-height:30px}.announcementBarClose_gvF7,.announcementBarPlaceholder_vyr4{flex-basis:50px}.navbarSearchContainer_Bca1{padding:var(--ifm-navbar-item-padding-vertical) var(--ifm-navbar-item-padding-horizontal)}.collapseSidebarButton_PEFL{border:1px solid var(--ifm-toc-border-color);border-radius:0;bottom:0;display:block!important;height:40px;position:sticky}.collapseSidebarButtonIcon_kv0_{margin-top:4px;transform:rotate(180deg)}.expandButtonIcon_i1dp,[dir=rtl] .collapseSidebarButtonIcon_kv0_{transform:rotate(0)}.collapseSidebarButton_PEFL:focus,.collapseSidebarButton_PEFL:hover,.expandButton_TmdG:focus,.expandButton_TmdG:hover{background-color:var(--docusaurus-collapse-button-bg-hover)}.menuHtmlItem_M9Kj{padding:var(--ifm-menu-link-padding-vertical) var(--ifm-menu-link-padding-horizontal)}.menu_SIkG{flex-grow:1;padding:.5rem}@supports (scrollbar-gutter:stable){.menu_SIkG{padding:.5rem 0 .5rem .5rem;scrollbar-gutter:stable}}.menuWithAnnouncementBar_GW3s{margin-bottom:var(--docusaurus-announcement-bar-height)}.sidebar_njMd{display:flex;flex-direction:column;height:100%;padding-top:var(--ifm-navbar-height);width:var(--doc-sidebar-width)}.sidebarWithHideableNavbar_wUlq{padding-top:0}.sidebarHidden_VK0M{opacity:0;visibility:hidden}.sidebarLogo_isFc{align-items:center;color:inherit!important;display:flex!important;margin:0 var(--ifm-navbar-padding-horizontal);max-height:var(--ifm-navbar-height);min-height:var(--ifm-navbar-height);text-decoration:none!important}.sidebarLogo_isFc img{height:2rem;margin-right:.5rem}.expandButton_TmdG{align-items:center;display:flex;height:100%;justify-content:center;position:absolute;right:0;top:0;transition:background-color var(--ifm-transition-fast) ease;width:100%}[dir=rtl] .expandButtonIcon_i1dp{transform:rotate(180deg)}.docSidebarContainer_YfHR{border-right:1px solid var(--ifm-toc-border-color);clip-path:inset(0);display:block;margin-top:calc(var(--ifm-navbar-height)*-1);transition:width var(--ifm-transition-fast) ease;width:var(--doc-sidebar-width);will-change:width}.docSidebarContainerHidden_DPk8{cursor:pointer;width:var(--doc-sidebar-hidden-width)}.sidebarViewport_aRkj{height:100%;max-height:100vh;position:sticky;top:0}.docMainContainer_TBSr{flex-grow:1;max-width:calc(100% - var(--doc-sidebar-width))}.docMainContainerEnhanced_lQrH{max-width:calc(100% - var(--doc-sidebar-hidden-width))}.docItemWrapperEnhanced_JWYK{max-width:calc(var(--ifm-container-width) + var(--doc-sidebar-width))!important}.lastUpdated_JAkA{text-align:right}.tocMobile_ITEo{display:none}.docItemCol_VOVn,.generatedIndexPage_vN6x{max-width:75%!important}.list_eTzJ article:nth-last-child(-n+2){margin-bottom:0!important}}@media (min-width:1440px){.container{max-width:var(--ifm-container-width-xl)}}@media (max-width:996px){.col{--ifm-col-width:100%;flex-basis:var(--ifm-col-width);margin-left:0}.footer{--ifm-footer-padding-horizontal:0}.colorModeToggle_DEke,.footer__link-separator,.navbar__item,.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}.navbarSearchContainer_Bca1{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)}.aa-TouchOnly{display:none}}@media (hover:none) and (pointer:coarse){:root{--aa-spacing-factor:1.2;--aa-action-icon-size:22px}.aa-LoadingIndicator,.aa-SubmitButton{padding-left:3px;padding-left:calc(var(--aa-spacing-half)/ 2 - 1px);width:39px;width:calc(var(--aa-icon-size) + var(--aa-spacing)*1.25 - 1px)}.aa-ClearButton{padding:0 10.16672px;padding:0 calc(var(--aa-spacing)*.66667 - .5px)}.aa-ItemActionButton:focus svg,.aa-ItemActionButton:hover svg{color:inherit}.aa-DesktopOnly{display:none}}@media (pointer:fine){.thin-scrollbar{scrollbar-width:thin}.thin-scrollbar::-webkit-scrollbar{height:var(--ifm-scrollbar-size);width:var(--ifm-scrollbar-size)}.thin-scrollbar::-webkit-scrollbar-track{background:var(--ifm-scrollbar-track-background-color);border-radius:10px}.thin-scrollbar::-webkit-scrollbar-thumb{background:var(--ifm-scrollbar-thumb-background-color);border-radius:10px}.thin-scrollbar::-webkit-scrollbar-thumb:hover{background:var(--ifm-scrollbar-thumb-hover-background-color)}}@media (prefers-reduced-motion:reduce){:root{--ifm-transition-fast:0ms;--ifm-transition-slow:0ms}}@media screen and (prefers-reduced-motion){.aa-Panel{transition:none}}@media print{.announcementBar_mb4j,.footer,.menu,.navbar,.pagination-nav,.table-of-contents,.tocMobile_ITEo{display:none}.tabs{page-break-inside:avoid}.codeBlockLines_e6Vv{white-space:pre-wrap}} \ No newline at end of file diff --git a/assets/css/styles.6ecb6ee1.css b/assets/css/styles.6ecb6ee1.css new file mode 100644 index 000000000..c9d06fd11 --- /dev/null +++ b/assets/css/styles.6ecb6ee1.css @@ -0,0 +1 @@ +: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-500:var(--ifm-color-gray-500);--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:.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:.2s;--ifm-transition-slow:.4s;--ifm-transition-timing-default:cubic-bezier(.08,.52,.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:.1rem;--ifm-code-padding-vertical:.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:.875rem;--ifm-h6-font-size:.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:.25rem;--ifm-list-paragraph-margin:1rem;--ifm-table-cell-padding:.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)*.5);--ifm-badge-padding-vertical:calc(var(--ifm-spacing-vertical)*.25);--ifm-breadcrumb-border-radius:1.5rem;--ifm-breadcrumb-spacing:.5rem;--ifm-breadcrumb-color-active:var(--ifm-color-primary);--ifm-breadcrumb-item-background-active:var(--ifm-hover-overlay);--ifm-breadcrumb-padding-horizontal:.8rem;--ifm-breadcrumb-padding-vertical:.4rem;--ifm-breadcrumb-size-multiplier:1;--ifm-breadcrumb-separator:url("data:image/svg+xml;utf8,");--ifm-breadcrumb-separator-filter:none;--ifm-breadcrumb-separator-size:.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-color:var(--ifm-font-color-base-inverse);--ifm-button-font-weight:var(--ifm-font-weight-bold);--ifm-button-padding-horizontal:1.5rem;--ifm-button-padding-vertical:.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:.5rem;--ifm-toc-padding-horizontal:.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:.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:.75rem;--ifm-menu-link-padding-vertical:.375rem;--ifm-menu-link-sublist-icon:url("data:image/svg+xml;utf8,");--ifm-menu-link-sublist-icon-filter:none;--ifm-navbar-background-color:var(--ifm-background-surface-color);--ifm-navbar-height:3.75rem;--ifm-navbar-item-padding-horizontal:.75rem;--ifm-navbar-item-padding-vertical:.25rem;--ifm-navbar-link-color:var(--ifm-font-color-base);--ifm-navbar-link-hover-color:var(--ifm-color-primary);--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)*.5);--ifm-navbar-shadow:var(--ifm-global-shadow-lw);--ifm-navbar-search-input-background-color:var(--ifm-color-emphasis-200);--ifm-navbar-search-input-color:var(--ifm-color-emphasis-800);--ifm-navbar-search-input-placeholder-color:var(--ifm-color-emphasis-500);--ifm-navbar-search-input-icon:url("data:image/svg+xml;utf8,");--ifm-navbar-sidebar-width:83vw;--ifm-pagination-border-radius:var(--ifm-global-radius);--ifm-pagination-color-active:var(--ifm-color-primary);--ifm-pagination-font-size:1rem;--ifm-pagination-item-active-background:var(--ifm-hover-overlay);--ifm-pagination-page-spacing:.2em;--ifm-pagination-padding-horizontal:calc(var(--ifm-spacing-horizontal)*1);--ifm-pagination-padding-vertical:calc(var(--ifm-spacing-vertical)*.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:.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}*{box-sizing:border-box}html{background-color:var(--ifm-background-color);color:var(--ifm-font-color-base);color-scheme:var(--ifm-color-scheme);font:var(--ifm-font-size-base)/var(--ifm-line-height-base)var(--ifm-font-family-base);-webkit-font-smoothing:antialiased;-webkit-tap-highlight-color:transparent;text-rendering:optimizelegibility;-webkit-text-size-adjust:100%;-moz-text-size-adjust:100%;text-size-adjust:100%}body{word-wrap:break-word;margin:0}iframe{color-scheme:normal;border:0}.container{max-width:var(--ifm-container-width);padding:0 var(--ifm-spacing-horizontal);width:100%;margin:0 auto}.container--fluid{max-width:inherit}.row{margin:0 calc(var(--ifm-spacing-horizontal)*-1);flex-wrap:wrap;display:flex}.row--no-gutters{margin-left:0;margin-right:0}.row--no-gutters>.col{padding-left:0;padding-right:0}.row--align-top{align-items:flex-start}.row--align-bottom{align-items:flex-end}.row--align-center{align-items:center}.row--align-stretch{align-items:stretch}.row--align-baseline{align-items:baseline}.col{--ifm-col-width:100%;max-width:var(--ifm-col-width);padding:0 var(--ifm-spacing-horizontal);flex:1 0;width:100%;margin-left:0}.col[class*=col--]{flex:0 0 var(--ifm-col-width)}.col--1{--ifm-col-width:calc(1/12*100%)}.col--offset-1{margin-left:8.33333%}.col--2{--ifm-col-width:calc(2/12*100%)}.col--offset-2{margin-left:16.6667%}.col--3{--ifm-col-width:calc(3/12*100%)}.col--offset-3{margin-left:25%}.col--4{--ifm-col-width:calc(4/12*100%)}.col--offset-4{margin-left:33.3333%}.col--5{--ifm-col-width:calc(5/12*100%)}.col--offset-5{margin-left:41.6667%}.col--6{--ifm-col-width:calc(6/12*100%)}.col--offset-6{margin-left:50%}.col--7{--ifm-col-width:calc(7/12*100%)}.col--offset-7{margin-left:58.3333%}.col--8{--ifm-col-width:calc(8/12*100%)}.col--offset-8{margin-left:66.6667%}.col--9{--ifm-col-width:calc(9/12*100%)}.col--offset-9{margin-left:75%}.col--10{--ifm-col-width:calc(10/12*100%)}.col--offset-10{margin-left:83.3333%}.col--11{--ifm-col-width:calc(11/12*100%)}.col--offset-11{margin-left:91.6667%}.col--12{--ifm-col-width:calc(12/12*100%)}.col--offset-12{margin-left:100%}.margin--none{margin:0!important}.margin-top--none{margin-top:0!important}.margin-left--none{margin-left:0!important}.margin-bottom--none{margin-bottom:0!important}.margin-right--none{margin-right:0!important}.margin-vert--none{margin-top:0!important;margin-bottom:0!important}.margin-horiz--none{margin-left:0!important;margin-right:0!important}.margin--xs{margin:.25rem!important}.margin-top--xs{margin-top:.25rem!important}.margin-left--xs{margin-left:.25rem!important}.margin-bottom--xs{margin-bottom:.25rem!important}.margin-right--xs{margin-right:.25rem!important}.margin-vert--xs{margin-top:.25rem!important;margin-bottom:.25rem!important}.margin-horiz--xs{margin-left:.25rem!important;margin-right:.25rem!important}.margin--sm{margin:.5rem!important}.margin-top--sm{margin-top:.5rem!important}.margin-left--sm{margin-left:.5rem!important}.margin-bottom--sm{margin-bottom:.5rem!important}.margin-right--sm{margin-right:.5rem!important}.margin-vert--sm{margin-top:.5rem!important;margin-bottom:.5rem!important}.margin-horiz--sm{margin-left:.5rem!important;margin-right:.5rem!important}.margin--md{margin:1rem!important}.margin-top--md{margin-top:1rem!important}.margin-left--md{margin-left:1rem!important}.margin-bottom--md{margin-bottom:1rem!important}.margin-right--md{margin-right:1rem!important}.margin-vert--md{margin-top:1rem!important;margin-bottom:1rem!important}.margin-horiz--md{margin-left:1rem!important;margin-right:1rem!important}.margin--lg{margin:2rem!important}.margin-top--lg{margin-top:2rem!important}.margin-left--lg{margin-left:2rem!important}.margin-bottom--lg{margin-bottom:2rem!important}.margin-right--lg{margin-right:2rem!important}.margin-vert--lg{margin-top:2rem!important;margin-bottom:2rem!important}.margin-horiz--lg{margin-left:2rem!important;margin-right:2rem!important}.margin--xl{margin:5rem!important}.margin-top--xl{margin-top:5rem!important}.margin-left--xl{margin-left:5rem!important}.margin-bottom--xl{margin-bottom:5rem!important}.margin-right--xl{margin-right:5rem!important}.margin-vert--xl{margin-top:5rem!important;margin-bottom:5rem!important}.margin-horiz--xl{margin-left:5rem!important;margin-right:5rem!important}.padding--none{padding:0!important}.padding-top--none{padding-top:0!important}.padding-left--none{padding-left:0!important}.padding-bottom--none{padding-bottom:0!important}.padding-right--none{padding-right:0!important}.padding-vert--none{padding-top:0!important;padding-bottom:0!important}.padding-horiz--none{padding-left:0!important;padding-right:0!important}.padding--xs{padding:.25rem!important}.padding-top--xs{padding-top:.25rem!important}.padding-left--xs{padding-left:.25rem!important}.padding-bottom--xs{padding-bottom:.25rem!important}.padding-right--xs{padding-right:.25rem!important}.padding-vert--xs{padding-top:.25rem!important;padding-bottom:.25rem!important}.padding-horiz--xs{padding-left:.25rem!important;padding-right:.25rem!important}.padding--sm{padding:.5rem!important}.padding-top--sm{padding-top:.5rem!important}.padding-left--sm{padding-left:.5rem!important}.padding-bottom--sm{padding-bottom:.5rem!important}.padding-right--sm{padding-right:.5rem!important}.padding-vert--sm{padding-top:.5rem!important;padding-bottom:.5rem!important}.padding-horiz--sm{padding-left:.5rem!important;padding-right:.5rem!important}.padding--md{padding:1rem!important}.padding-top--md{padding-top:1rem!important}.padding-left--md{padding-left:1rem!important}.padding-bottom--md{padding-bottom:1rem!important}.padding-right--md{padding-right:1rem!important}.padding-vert--md{padding-top:1rem!important;padding-bottom:1rem!important}.padding-horiz--md{padding-left:1rem!important;padding-right:1rem!important}.padding--lg{padding:2rem!important}.padding-top--lg{padding-top:2rem!important}.padding-left--lg{padding-left:2rem!important}.padding-bottom--lg{padding-bottom:2rem!important}.padding-right--lg{padding-right:2rem!important}.padding-vert--lg{padding-top:2rem!important;padding-bottom:2rem!important}.padding-horiz--lg{padding-left:2rem!important;padding-right:2rem!important}.padding--xl{padding:5rem!important}.padding-top--xl{padding-top:5rem!important}.padding-left--xl{padding-left:5rem!important}.padding-bottom--xl{padding-bottom:5rem!important}.padding-right--xl{padding-right:5rem!important}.padding-vert--xl{padding-top:5rem!important;padding-bottom:5rem!important}.padding-horiz--xl{padding-left:5rem!important;padding-right:5rem!important}code{background-color:var(--ifm-code-background);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);vertical-align:middle;border:.1rem solid rgba(0,0,0,.1)}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);margin:0 0 var(--ifm-spacing-vertical);padding:var(--ifm-pre-padding);overflow:auto}pre code{font-size:100%;line-height:inherit;background-color:transparent;border:none;padding:0}kbd{background-color:var(--ifm-color-emphasis-0);border:1px solid var(--ifm-color-emphasis-400);box-shadow:inset 0 -1px 0 var(--ifm-color-emphasis-400);color:var(--ifm-color-emphasis-800);font:80% var(--ifm-font-family-monospace);border-radius:.2rem;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:before{content:"";display:table}.markdown:after{clear:both;content:"";display:table}.markdown>:last-child{margin-bottom:0!important}.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-bottom:calc(var(--ifm-heading-vertical-rhythm-bottom)*var(--ifm-leading));margin-top:calc(var(--ifm-h2-vertical-rhythm-top)*var(--ifm-leading))}.markdown>h3{--ifm-h3-font-size:1.5rem;margin-bottom:calc(var(--ifm-heading-vertical-rhythm-bottom)*var(--ifm-leading));margin-top:calc(var(--ifm-h3-vertical-rhythm-top)*var(--ifm-leading))}.markdown>h4,.markdown>h5,.markdown>h6{margin-bottom:calc(var(--ifm-heading-vertical-rhythm-bottom)*var(--ifm-leading));margin-top:calc(var(--ifm-heading-vertical-rhythm-top)*var(--ifm-leading))}.markdown>pre,.markdown>ul,.markdown>p{margin-bottom:var(--ifm-leading)}.markdown li{word-wrap:break-word}.markdown li>p{margin-top:var(--ifm-list-paragraph-margin)}.markdown li+li{margin-top:var(--ifm-list-item-margin)}ul,ol{margin:0 0 var(--ifm-list-margin);padding-left:var(--ifm-list-left-padding)}ol ol,ul ol{list-style-type:lower-roman}ul ul,ul ol,ol ol,ol ul{margin:0}ul ul ol,ul ol ol,ol ul ol,ol ol ol{list-style-type:lower-alpha}table{border-collapse:collapse;margin-bottom:var(--ifm-spacing-vertical);display:block;overflow:auto}table thead tr{border-bottom:2px solid var(--ifm-table-border-color)}table thead{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 tr:nth-child(2n){background-color:var(--ifm-table-stripe-background)}table th,table td{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);-webkit-text-decoration:var(--ifm-link-decoration);text-decoration:var(--ifm-link-decoration);transition:color var(--ifm-transition-fast)var(--ifm-transition-timing-default)}a:hover{color:var(--ifm-link-hover-color);-webkit-text-decoration:var(--ifm-link-hover-decoration);text-decoration:var(--ifm-link-hover-decoration)}a:not([href]){-webkit-text-decoration:none;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);margin:0 0 var(--ifm-spacing-vertical);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);height:var(--ifm-hr-height);margin:var(--ifm-hr-margin-vertical)0;border:0}.shadow--lw{box-shadow:var(--ifm-global-shadow-lw)!important}.shadow--md{box-shadow:var(--ifm-global-shadow-md)!important}.shadow--tl{box-shadow:var(--ifm-global-shadow-tl)!important}.text--primary{color:var(--ifm-color-primary)}.text--secondary{color:var(--ifm-color-secondary)}.text--success{color:var(--ifm-color-success)}.text--info{color:var(--ifm-color-info)}.text--warning{color:var(--ifm-color-warning)}.text--danger{color:var(--ifm-color-danger)}.text--center{text-align:center}.text--left{text-align:left}.text--justify{text-align:justify}.text--right{text-align:right}.text--capitalize{text-transform:capitalize}.text--lowercase{text-transform:lowercase}.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{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.text--break{word-wrap:break-word!important;word-break:break-word!important}.text--no-decoration,.text--no-decoration:hover{-webkit-text-decoration:none;text-decoration:none}.clean-btn{color:inherit;cursor:pointer;background:0 0;border:none;padding:0;font-family:inherit}.clean-list{padding-left:0;list-style:none}.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);color:var(--ifm-alert-foreground-color);padding:var(--ifm-alert-padding-vertical)var(--ifm-alert-padding-horizontal)}.alert__heading{font:bold var(--ifm-h5-font-size)/var(--ifm-heading-line-height)var(--ifm-heading-font-family);text-transform:uppercase;align-items:center;margin-bottom:.5rem;display:flex}.alert__icon{margin-right:.4em;display:inline-flex}.alert__icon svg{fill:var(--ifm-alert-foreground-color);stroke:var(--ifm-alert-foreground-color);stroke-width:0}.alert .close{color:var(--ifm-alert-foreground-color);margin:calc(var(--ifm-alert-padding-vertical)*-1)calc(var(--ifm-alert-padding-horizontal)*-1)0 0;opacity:.75}.alert .close:hover,.alert .close:focus{opacity:1}.alert a{-webkit-text-decoration-color:var(--ifm-alert-border-color);text-decoration-color:var(--ifm-alert-border-color)}.alert a:hover{text-decoration-thickness:2px}.avatar{column-gap:var(--ifm-avatar-intro-margin);display:flex}.avatar__photo{height:var(--ifm-avatar-photo-size);width:var(--ifm-avatar-photo-size);border-radius:50%;display:block;overflow:hidden}.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{text-align:var(--ifm-avatar-intro-alignment);flex-direction:column;flex:1;justify-content:center;display:flex}.avatar__name{font:bold 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:.5rem;flex-direction:column;align-items:center}.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);padding:var(--ifm-badge-padding-vertical)var(--ifm-badge-padding-horizontal);line-height:1;display:inline-block}.badge--primary{--ifm-badge-background-color:var(--ifm-color-primary);--ifm-badge-border-color:var(--ifm-badge-background-color)}.badge--secondary{--ifm-badge-background-color:var(--ifm-color-secondary);--ifm-badge-border-color:var(--ifm-badge-background-color);color:var(--ifm-color-black)}.badge--success{--ifm-badge-background-color:var(--ifm-color-success);--ifm-badge-border-color:var(--ifm-badge-background-color)}.badge--info{--ifm-badge-background-color:var(--ifm-color-info);--ifm-badge-border-color:var(--ifm-badge-background-color)}.badge--warning{--ifm-badge-background-color:var(--ifm-color-warning);--ifm-badge-border-color:var(--ifm-badge-background-color)}.badge--danger{--ifm-badge-background-color:var(--ifm-color-danger);--ifm-badge-border-color:var(--ifm-badge-background-color)}.breadcrumbs{margin-bottom:0;padding-left:0}.breadcrumbs__item{display:inline-block}.breadcrumbs__item:not(:last-child):after{background:var(--ifm-breadcrumb-separator)center;content:" ";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));display:inline-block}.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);color:var(--ifm-font-color-base);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-property:background,color;transition-duration:var(--ifm-transition-fast);transition-timing-function:var(--ifm-transition-timing-default);display:inline-block}.breadcrumbs__link:link:hover,.breadcrumbs__link:visited:hover,area[href].breadcrumbs__link:hover{background:var(--ifm-breadcrumb-item-background-active);-webkit-text-decoration:none;text-decoration:none}.breadcrumbs__link:any-link:hover{background:var(--ifm-breadcrumb-item-background-active);-webkit-text-decoration:none;text-decoration:none}.breadcrumbs--sm{--ifm-breadcrumb-size-multiplier:.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);color:var(--ifm-button-color);cursor:pointer;font-size:calc(.875rem*var(--ifm-button-size-multiplier));font-weight:var(--ifm-button-font-weight);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;-webkit-user-select:none;user-select:none;vertical-align:middle;white-space:nowrap;transition-property:color,background,border-color;transition-duration:var(--ifm-button-transition-duration);transition-timing-function:var(--ifm-transition-timing-default);line-height:1.5;display:inline-block}.button:hover{color:var(--ifm-button-color);-webkit-text-decoration:none;text-decoration:none}.button--outline{--ifm-button-background-color:transparent;--ifm-button-color:var(--ifm-button-border-color)}.button--outline:hover{--ifm-button-background-color:var(--ifm-button-border-color)}.button--outline:hover,.button--outline:active,.button--outline.button--active{--ifm-button-color:var(--ifm-font-color-base-inverse)}.button--link{--ifm-button-background-color:transparent;--ifm-button-border-color:transparent;color:var(--ifm-link-color);-webkit-text-decoration:var(--ifm-link-decoration);text-decoration:var(--ifm-link-decoration)}.button--link:hover,.button--link:active,.button--link.button--active{color:var(--ifm-link-hover-color);-webkit-text-decoration:var(--ifm-link-hover-decoration);text-decoration:var(--ifm-link-hover-decoration)}.button.disabled,.button:disabled,.button[disabled]{opacity:.65;pointer-events:none}.button--sm{--ifm-button-size-multiplier:.8}.button--lg{--ifm-button-size-multiplier:1.35}.button--block{width:100%;display:block}.button.button--secondary{color:var(--ifm-color-gray-900)}.button.button--secondary.button--outline:not(.button--active):not(:hover){color:var(--ifm-font-color-base)}: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:active,.button--primary.button--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:active,.button--secondary.button--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:active,.button--success.button--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:active,.button--info.button--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:active,.button--warning.button--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:active,.button--danger.button--active{--ifm-button-background-color:var(--ifm-color-danger-darker);--ifm-button-border-color:var(--ifm-color-danger-darker)}.button-group{gap:var(--ifm-button-group-spacing);display:inline-flex}.button-group>.button:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.button-group>.button:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.button-group--block{justify-content:stretch;display:flex}.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);flex-direction:column;display:flex;overflow:hidden}.card--full-height{height:100%}.card__image{padding-top:var(--ifm-card-vertical-spacing)}.card__image:first-child{padding-top:0}.card__header,.card__body,.card__footer{padding:var(--ifm-card-vertical-spacing)var(--ifm-card-horizontal-spacing)}.card__header:not(:last-child),.card__body:not(:last-child),.card__footer:not(:last-child){padding-bottom:0}.card__header>:last-child,.card__body>:last-child,.card__footer>:last-child{margin-bottom:0}.card__footer{margin-top:auto}.table-of-contents{padding:var(--ifm-toc-padding-vertical)0;margin-bottom:0;font-size:.8rem}.table-of-contents,.table-of-contents ul{padding-left:var(--ifm-toc-padding-horizontal);list-style:none}.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:hover,.table-of-contents__link:hover code,.table-of-contents__link--active,.table-of-contents__link--active code{color:var(--ifm-color-primary);-webkit-text-decoration:none;text-decoration:none}.close{color:var(--ifm-color-black);float:right;font-size:1.5rem;font-weight:var(--ifm-font-weight-bold);opacity:.5;transition:opacity var(--ifm-transition-fast)var(--ifm-transition-timing-default);padding:1rem;line-height:1}.close:hover{opacity:.7}.close:focus{opacity:.8}.dropdown{font-weight:var(--ifm-dropdown-font-weight);vertical-align:top;display:inline-flex;position:relative}.dropdown--hoverable:hover .dropdown__menu,.dropdown--show .dropdown__menu{opacity:1;pointer-events:all;visibility:visible;transform:translateY(-1px)}.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);opacity:0;pointer-events:none;min-width:10rem;max-height:80vh;left:0;top:calc(100% - var(--ifm-navbar-item-padding-vertical) + .3rem);visibility:hidden;z-index:var(--ifm-z-index-dropdown);transition-property:opacity,transform,visibility;transition-duration:var(--ifm-transition-fast);transition-timing-function:var(--ifm-transition-timing-default);padding:.5rem;list-style:none;position:absolute;overflow-y:auto;transform:translateY(-.625rem)}.dropdown__link{color:var(--ifm-dropdown-link-color);white-space:nowrap;border-radius:.25rem;margin-top:.2rem;padding:.25rem .5rem;font-size:.875rem;display:block}.dropdown__link:hover,.dropdown__link--active{background-color:var(--ifm-dropdown-hover-background-color);color:var(--ifm-dropdown-link-color);-webkit-text-decoration:none;text-decoration:none}.dropdown__link--active,.dropdown__link--active:hover{--ifm-dropdown-link-color:var(--ifm-link-color)}.dropdown>.navbar__link:after{content:"";border:.4em solid transparent;border-top-color:currentColor;border-bottom:0 solid;margin-left:.3em;display:inline-block;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{max-width:var(--ifm-footer-logo-max-width);margin-top:1rem}.footer__title{color:var(--ifm-footer-title-color);font:bold var(--ifm-h4-font-size)/var(--ifm-heading-line-height)var(--ifm-font-family-base);margin-bottom:var(--ifm-heading-margin-bottom)}.footer__item{margin-top:0}.footer__items{margin-bottom:0}[type=checkbox]{padding:0}.hero{background-color:var(--ifm-hero-background-color);color:var(--ifm-hero-text-color);align-items:center;padding:4rem 2rem;display:flex}.hero--primary{--ifm-hero-background-color:var(--ifm-color-primary);--ifm-hero-text-color:var(--ifm-font-color-base-inverse)}.hero--dark{--ifm-hero-background-color:#303846;--ifm-hero-text-color:var(--ifm-color-white)}.hero__title{font-size:3rem}.hero__subtitle{font-size:1.5rem}.menu{font-weight:var(--ifm-font-weight-semibold);overflow-x:hidden}.menu__list{margin:0;padding-left:0;list-style:none}.menu__list .menu__list{padding-left:var(--ifm-menu-link-padding-horizontal);flex:0 0 100%;margin-top:.25rem}.menu__list-item:not(:first-child){margin-top:.25rem}.menu__list-item--collapsed .menu__list{height:0;overflow:hidden}.menu__list-item--collapsed .menu__link--sublist:after,.menu__list-item--collapsed .menu__caret:before{transform:rotate(90deg)}.menu__list-item-collapsible{transition:background var(--ifm-transition-fast)var(--ifm-transition-timing-default);border-radius:.25rem;flex-wrap:wrap;display:flex;position:relative}.menu__list-item-collapsible:hover,.menu__list-item-collapsible--active{background:var(--ifm-menu-color-background-hover)}.menu__list-item-collapsible .menu__link:hover,.menu__list-item-collapsible .menu__link--active{background:0 0!important}.menu__link,.menu__caret{transition:background var(--ifm-transition-fast)var(--ifm-transition-timing-default);border-radius:.25rem;align-items:center;display:flex}.menu__link:hover,.menu__caret:hover{background:var(--ifm-menu-color-background-hover)}.menu__link{color:var(--ifm-menu-color);padding:var(--ifm-menu-link-padding-vertical)var(--ifm-menu-link-padding-horizontal);flex:1;line-height:1.25}.menu__link:hover{color:var(--ifm-menu-color);transition:color var(--ifm-transition-fast)var(--ifm-transition-timing-default);-webkit-text-decoration:none;text-decoration:none}.menu__link--sublist-caret:after{content:"";background:var(--ifm-menu-link-sublist-icon)50%/2rem 2rem;min-width:1.25rem;filter:var(--ifm-menu-link-sublist-icon-filter);width:1.25rem;height:1.25rem;transition:transform var(--ifm-transition-fast)linear;margin-left:auto;transform:rotate(180deg)}.menu__link--active,.menu__link--active:hover{color:var(--ifm-menu-color-active)}.menu__link--active:not(.menu__link--sublist){background-color:var(--ifm-menu-color-background-active)}.menu__caret{padding:var(--ifm-menu-link-padding-vertical)var(--ifm-menu-link-padding-horizontal)}.menu__caret:before{content:"";background:var(--ifm-menu-link-sublist-icon)50%/2rem 2rem;filter:var(--ifm-menu-link-sublist-icon-filter);width:1.25rem;height:1.25rem;transition:transform var(--ifm-transition-fast)linear;transform:rotate(180deg)}html[data-theme=dark],.navbar--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);display:flex}.navbar>.container,.navbar>.container-fluid{display:flex}.navbar--fixed-top{z-index:var(--ifm-z-index-fixed);position:sticky;top:0}.navbar__inner{flex-wrap:wrap;justify-content:space-between;width:100%;display:flex}.navbar__brand{color:var(--ifm-navbar-link-color);align-items:center;min-width:0;margin-right:1rem;display:flex}.navbar__brand:hover{color:var(--ifm-navbar-link-hover-color);-webkit-text-decoration:none;text-decoration:none}.navbar__title{flex:auto}.navbar__toggle{margin-right:.5rem;display:none}.navbar__logo{flex:none;height:2rem;margin-right:.5rem}.navbar__logo img{height:100%}.navbar__items{flex:1;align-items:center;min-width:0;display:flex}.navbar__items--center{flex:none}.navbar__items--center .navbar__brand{margin:0}.navbar__items--center+.navbar__items--right{flex:1}.navbar__items--right{flex:none;justify-content:flex-end}.navbar__items--right>:last-child{padding-right:0}.navbar__item{padding:var(--ifm-navbar-item-padding-vertical)var(--ifm-navbar-item-padding-horizontal);display:inline-block}.navbar__item.dropdown .navbar__link:not([href]){pointer-events:none}.navbar__link{color:var(--ifm-navbar-link-color);font-weight:var(--ifm-font-weight-semibold)}.navbar__link:hover,.navbar__link--active{color:var(--ifm-navbar-link-hover-color);-webkit-text-decoration:none;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:rgba(255,255,255,.1);--ifm-navbar-search-input-placeholder-color:rgba(255,255,255,.5);color:var(--ifm-color-white)}.navbar--dark{--ifm-navbar-background-color:#242526;--ifm-navbar-link-hover-color:var(--ifm-color-primary);--ifm-menu-color-background-active:rgba(255,255,255,.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{appearance:none;background:var(--ifm-navbar-search-input-background-color)var(--ifm-navbar-search-input-icon)no-repeat .75rem center/1rem 1rem;color:var(--ifm-navbar-search-input-color);cursor:text;border:none;border-radius:2rem;width:12.5rem;height:2rem;padding:0 .5rem 0 2.25rem;font-size:1rem;display:inline-block}.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);opacity:0;visibility:hidden;width:var(--ifm-navbar-sidebar-width);transition-property:opacity,visibility,transform;transition-duration:var(--ifm-transition-fast);transition-timing-function:ease-in-out;position:fixed;top:0;bottom:0;left:0;overflow-x:hidden;transform:translate(-100%)}.navbar-sidebar--show .navbar-sidebar,.navbar-sidebar--show .navbar-sidebar__backdrop{opacity:1;visibility:visible}.navbar-sidebar--show .navbar-sidebar{transform:translate(0,0)}.navbar-sidebar__backdrop{opacity:0;visibility:hidden;transition-property:opacity,visibility;transition-duration:var(--ifm-transition-fast);background-color:rgba(0,0,0,.6);transition-timing-function:ease-in-out;position:fixed;inset:0}.navbar-sidebar__brand{box-shadow:var(--ifm-navbar-shadow);height:var(--ifm-navbar-height);padding:var(--ifm-navbar-padding-vertical)var(--ifm-navbar-padding-horizontal);flex:1;align-items:center;display:flex}.navbar-sidebar__items{height:calc(100% - var(--ifm-navbar-height));transition:transform var(--ifm-transition-fast)ease-in-out;display:flex;transform:translateZ(0)}.navbar-sidebar__items--show-secondary{transform:translate3d(calc((var(--ifm-navbar-sidebar-width))*-1),0,0)}.navbar-sidebar__item{width:calc(var(--ifm-navbar-sidebar-width));flex-shrink:0;padding:.5rem}.navbar-sidebar__back{background:var(--ifm-menu-color-background-active);font-size:15px;font-weight:var(--ifm-button-font-weight);text-align:left;width:calc(100% + 1rem);margin:0 0 .2rem -.5rem;padding:.6rem 1.5rem;position:relative;top:-.5rem}.navbar-sidebar__close{margin-left:auto;display:flex}.pagination{column-gap:var(--ifm-pagination-page-spacing);font-size:var(--ifm-pagination-font-size);padding-left:0;display:flex}.pagination--sm{--ifm-pagination-font-size:.8rem;--ifm-pagination-padding-horizontal:.8rem;--ifm-pagination-padding-vertical:.2rem}.pagination--lg{--ifm-pagination-font-size:1.2rem;--ifm-pagination-padding-horizontal:1.2rem;--ifm-pagination-padding-vertical:.3rem}.pagination__item{display:inline-flex}.pagination__item>span{padding:var(--ifm-pagination-padding-vertical)}.pagination__item--active .pagination__link{background:var(--ifm-pagination-item-active-background);color:var(--ifm-pagination-color-active)}.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);padding:var(--ifm-pagination-padding-vertical)var(--ifm-pagination-padding-horizontal);transition:background var(--ifm-transition-fast)var(--ifm-transition-timing-default);display:inline-block}.pagination__link:hover{-webkit-text-decoration:none;text-decoration:none}.pagination-nav{grid-gap:var(--ifm-spacing-horizontal);gap:var(--ifm-spacing-horizontal);grid-template-columns:repeat(2,1fr);display:grid}.pagination-nav__link{border:1px solid var(--ifm-color-emphasis-300);border-radius:var(--ifm-pagination-nav-border-radius);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);display:block}.pagination-nav__link:hover{border-color:var(--ifm-pagination-nav-color-hover);-webkit-text-decoration:none;text-decoration:none}.pagination-nav__link--next{text-align:right;grid-column:2/3}.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{gap:var(--ifm-pills-spacing);padding-left:0;display:flex}.pills__item{cursor:pointer;font-weight:var(--ifm-font-weight-bold);transition:background var(--ifm-transition-fast)var(--ifm-transition-timing-default);border-radius:.5rem;padding:.25rem 1rem;display:inline-block}.pills__item--active{background:var(--ifm-pills-color-background-active);color:var(--ifm-pills-color-active)}.pills__item:not(.pills__item--active):hover{background:var(--ifm-pills-color-background-active)}.pills--block{justify-content:stretch}.pills--block .pills__item{text-align:center;flex-grow:1}.tabs{color:var(--ifm-tabs-color);font-weight:var(--ifm-font-weight-bold);margin-bottom:0;padding-left:0;display:flex;overflow-x:auto}.tabs__item{border-radius:var(--ifm-global-radius);cursor:pointer;padding:var(--ifm-tabs-padding-vertical)var(--ifm-tabs-padding-horizontal);transition:background-color var(--ifm-transition-fast)var(--ifm-transition-timing-default);border-bottom:3px solid transparent;display:inline-flex}.tabs__item--active{border-bottom-color:var(--ifm-tabs-color-active-border);color:var(--ifm-tabs-color-active);border-bottom-right-radius:0;border-bottom-left-radius:0}.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-500:var(--ifm-color-gray-500);--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:rgba(255,255,255,.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:rgba(255,255,255,.1);--ifm-scrollbar-track-background-color:#444;--ifm-scrollbar-thumb-background-color:#686868;--ifm-scrollbar-thumb-hover-background-color:#7a7a7a;--ifm-table-stripe-background:rgba(255,255,255,.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}@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}.footer__link-separator{display:none}.footer__col{margin-bottom:calc(var(--ifm-spacing-vertical)*3)}.footer__link-item{width:max-content;display:block}.hero{padding-left:0;padding-right:0}.navbar>.container,.navbar>.container-fluid{padding:0}.navbar__toggle{display:inherit}.navbar__item{display:none}.navbar__search-input{width:9rem}.pills--block,.tabs--block{flex-direction:column}}@media (max-width:576px){.markdown h1:first-child{--ifm-h1-font-size:2rem}.markdown>h2{--ifm-h2-font-size:1.5rem}.markdown>h3{--ifm-h3-font-size:1.25rem}}@media (pointer:fine){.thin-scrollbar{scrollbar-width:thin}.thin-scrollbar::-webkit-scrollbar{height:var(--ifm-scrollbar-size);width:var(--ifm-scrollbar-size)}.thin-scrollbar::-webkit-scrollbar-track{background:var(--ifm-scrollbar-track-background-color);border-radius:10px}.thin-scrollbar::-webkit-scrollbar-thumb{background:var(--ifm-scrollbar-thumb-background-color);border-radius:10px}.thin-scrollbar::-webkit-scrollbar-thumb:hover{background:var(--ifm-scrollbar-thumb-hover-background-color)}}@media (prefers-reduced-motion:reduce){:root{--ifm-transition-fast:0s;--ifm-transition-slow:0s}}@media print{.table-of-contents,.footer,.menu,.navbar,.pagination-nav{display:none}.tabs{page-break-inside:avoid}}:root{--docusaurus-progress-bar-color:var(--ifm-color-primary)}#nprogress{pointer-events:none}#nprogress .bar{background:var(--docusaurus-progress-bar-color);z-index:1031;width:100%;height:2px;position:fixed;top:0;left:0}#nprogress .peg{width:100px;height:100%;box-shadow:0 0 10px var(--docusaurus-progress-bar-color),0 0 5px var(--docusaurus-progress-bar-color);opacity:1;position:absolute;right:0;transform:rotate(3deg)translateY(-4px)}:root{--ifm-color-primary:#2374d3;--ifm-color-primary-dark:#2068be;--ifm-color-primary-darker:#1e63b3;--ifm-color-primary-darkest:#1c5da9;--ifm-color-primary-light:#3280dd;--ifm-color-primary-lighter:#3c87df;--ifm-color-primary-lightest:#5c9ae4;--ifm-code-border-radius:.25rem;--ifm-code-font-size:95%;--ifm-code-padding-horizontal:.15rem;--docusaurus-highlighted-code-line-bg:rgba(0,0,0,.1)}[data-theme=dark]{--ifm-color-primary:#5294e2;--ifm-color-primary-dark:#3884de;--ifm-color-primary-darker:#2a7cdb;--ifm-color-primary-darkest:#1f65b9;--ifm-color-primary-light:#6ca4e6;--ifm-color-primary-lighter:#7aace9;--ifm-color-primary-lightest:#a1c5ef;--docusaurus-highlighted-code-line-bg:rgba(0,0,0,.3)}body:not(.navigation-with-keyboard) :not(input):focus{outline:none}#__docusaurus-base-url-issue-banner-container{display:none}.skipToContent_fXgn{z-index:calc(var(--ifm-z-index-fixed) + 1);padding:calc(var(--ifm-global-spacing)/2)var(--ifm-global-spacing);color:var(--ifm-color-emphasis-900);background-color:var(--ifm-background-surface-color);position:fixed;top:1rem;left:100%}.skipToContent_fXgn:focus{box-shadow:var(--ifm-global-shadow-md);left:1rem}.closeButton_CVFx{padding:0;line-height:0}.content_knG7{text-align:center;padding:5px 0;font-size:85%}.content_knG7 a{color:inherit;-webkit-text-decoration:underline;text-decoration:underline}:root{--docusaurus-announcement-bar-height:auto}.announcementBar_mb4j{height:var(--docusaurus-announcement-bar-height);background-color:var(--ifm-color-white);color:var(--ifm-color-black);border-bottom:1px solid var(--ifm-color-emphasis-100);align-items:center;display:flex}html[data-announcement-bar-initially-dismissed=true] .announcementBar_mb4j{display:none}.announcementBarPlaceholder_vyr4{flex:0 0 10px}.announcementBarClose_gvF7{flex:0 0 30px;align-self:stretch}.announcementBarContent_xLdY{flex:auto}@media print{.announcementBar_mb4j{display:none}}@media (min-width:997px){:root{--docusaurus-announcement-bar-height:30px}.announcementBarPlaceholder_vyr4,.announcementBarClose_gvF7{flex-basis:50px}}.toggle_vylO{width:2rem;height:2rem}.toggleButton_gllP{-webkit-tap-highlight-color:transparent;width:100%;height:100%;transition:background var(--ifm-transition-fast);border-radius:50%;justify-content:center;align-items:center;display:flex}.toggleButton_gllP:hover{background:var(--ifm-color-emphasis-200)}[data-theme=light] .darkToggleIcon_wfgR,[data-theme=dark] .lightToggleIcon_pyhR{display:none}.toggleButtonDisabled_aARS{cursor:not-allowed}.darkNavbarColorModeToggle_X3D1:hover{background:var(--ifm-color-gray-800)}.themedComponent_mlkZ{display:none}[data-theme=light] .themedComponent--light_NVdE,[data-theme=dark] .themedComponent--dark_xIcU,html:not([data-theme]) .themedComponent--light_NVdE{display:initial}.iconExternalLink_nPIU{margin-left:.3rem}.dropdownNavbarItemMobile_S0Fm{cursor:pointer}.iconLanguage_nlXk{vertical-align:text-bottom;margin-right:5px}:root{--aa-search-input-height:44px;--aa-input-icon-size:20px;--aa-base-unit:16;--aa-spacing-factor:1;--aa-spacing:calc(var(--aa-base-unit)*var(--aa-spacing-factor)*1px);--aa-spacing-half:calc(var(--aa-spacing)/2);--aa-panel-max-height:650px;--aa-base-z-index:9999;--aa-font-size:calc(var(--aa-base-unit)*1px);--aa-font-family:inherit;--aa-font-weight-medium:500;--aa-font-weight-semibold:600;--aa-font-weight-bold:700;--aa-icon-size:20px;--aa-icon-stroke-width:1.6;--aa-icon-color-rgb:119,119,163;--aa-icon-color-alpha:1;--aa-action-icon-size:20px;--aa-text-color-rgb:38,38,39;--aa-text-color-alpha:1;--aa-primary-color-rgb:62,52,211;--aa-primary-color-alpha:.2;--aa-muted-color-rgb:128,126,163;--aa-muted-color-alpha:.6;--aa-panel-border-color-rgb:128,126,163;--aa-panel-border-color-alpha:.3;--aa-input-border-color-rgb:128,126,163;--aa-input-border-color-alpha:.8;--aa-background-color-rgb:255,255,255;--aa-background-color-alpha:1;--aa-input-background-color-rgb:255,255,255;--aa-input-background-color-alpha:1;--aa-selected-color-rgb:179,173,214;--aa-selected-color-alpha:.205;--aa-description-highlight-background-color-rgb:245,223,77;--aa-description-highlight-background-color-alpha:.5;--aa-detached-media-query:(max-width:680px);--aa-detached-modal-media-query:(min-width:680px);--aa-detached-modal-max-width:680px;--aa-detached-modal-max-height:500px;--aa-overlay-color-rgb:115,114,129;--aa-overlay-color-alpha:.4;--aa-panel-shadow:0 0 0 1px rgba(35,38,59,.1),0 6px 16px -4px rgba(35,38,59,.15);--aa-scrollbar-width:13px;--aa-scrollbar-track-background-color-rgb:234,234,234;--aa-scrollbar-track-background-color-alpha:1;--aa-scrollbar-thumb-background-color-rgb:var(--aa-background-color-rgb);--aa-scrollbar-thumb-background-color-alpha:1}@media (hover:none) and (pointer:coarse){:root{--aa-spacing-factor:1.2;--aa-action-icon-size:22px}}body.dark,body[data-theme=dark]{--aa-text-color-rgb:183,192,199;--aa-primary-color-rgb:146,138,255;--aa-muted-color-rgb:146,138,255;--aa-input-background-color-rgb:0,3,9;--aa-background-color-rgb:21,24,42;--aa-selected-color-rgb:146,138,255;--aa-selected-color-alpha:.25;--aa-description-highlight-background-color-rgb:0 255 255;--aa-description-highlight-background-color-alpha:.25;--aa-icon-color-rgb:119,119,163;--aa-panel-shadow:inset 1px 1px 0 0 #2c2e40,0 3px 8px 0 #000309;--aa-scrollbar-track-background-color-rgb:44,46,64;--aa-scrollbar-thumb-background-color-rgb:var(--aa-background-color-rgb)}.aa-Autocomplete *,.aa-DetachedFormContainer *,.aa-Panel *{box-sizing:border-box}.aa-Autocomplete,.aa-DetachedFormContainer,.aa-Panel{color:rgba(var(--aa-text-color-rgb),var(--aa-text-color-alpha));font-family:inherit;font-family:var(--aa-font-family);font-size:16px;font-size:var(--aa-font-size);text-align:left;margin:0;padding:0;font-weight:400;line-height:1em}.aa-Form{background-color:#fff;background-color:rgba(var(--aa-input-background-color-rgb),var(--aa-input-background-color-alpha));border:1px solid rgba(128,126,163,.8);border:1px solid rgba(var(--aa-input-border-color-rgb),var(--aa-input-border-color-alpha));border-radius:3px;align-items:center;width:100%;margin:0;line-height:1em;display:flex;position:relative}.aa-Form:focus-within{border-color:#3e34d3;border-color:rgba(var(--aa-primary-color-rgb),1);box-shadow:0 0 0 2px rgba(62,52,211,.2),inset 0 0 0 2px rgba(62,52,211,.2);box-shadow:rgba(var(--aa-primary-color-rgb),var(--aa-primary-color-alpha))0 0 0 2px,inset rgba(var(--aa-primary-color-rgb),var(--aa-primary-color-alpha))0 0 0 2px;outline:none}.aa-InputWrapperPrefix{height:44px;height:var(--aa-search-input-height);flex-shrink:0;order:1;align-items:center;display:flex}.aa-Label,.aa-LoadingIndicator{cursor:auto;text-align:left;flex-shrink:0;height:100%;padding:0}.aa-Label svg,.aa-LoadingIndicator svg{color:rgba(var(--aa-primary-color-rgb),1);height:auto;max-height:20px;max-height:var(--aa-input-icon-size);stroke-width:1.6px;stroke-width:var(--aa-icon-stroke-width);width:20px;width:var(--aa-input-icon-size)}.aa-LoadingIndicator,.aa-SubmitButton{height:100%;padding-left:11px;padding-left:calc(var(--aa-spacing)*.75 - 1px);padding-right:8px;padding-right:var(--aa-spacing-half);width:47px;width:calc(var(--aa-spacing)*1.75 + var(--aa-icon-size) - 1px)}@media (hover:none) and (pointer:coarse){.aa-LoadingIndicator,.aa-SubmitButton{padding-left:3px;padding-left:calc(var(--aa-spacing-half)/2 - 1px);width:39px;width:calc(var(--aa-icon-size) + var(--aa-spacing)*1.25 - 1px)}}.aa-SubmitButton{appearance:none;background:0 0;border:0;margin:0}.aa-LoadingIndicator{justify-content:center;align-items:center;display:flex}.aa-LoadingIndicator[hidden]{display:none}.aa-InputWrapper{order:3;width:100%;position:relative}.aa-Input{appearance:none;color:rgba(var(--aa-text-color-rgb),var(--aa-text-color-alpha));font:inherit;height:44px;height:var(--aa-search-input-height);background:0 0;border:0;width:100%;padding:0}.aa-Input::placeholder{color:rgba(var(--aa-muted-color-rgb),var(--aa-muted-color-alpha));opacity:1}.aa-Input:focus{border-color:none;box-shadow:none;outline:none}.aa-Input::-webkit-search-cancel-button{appearance:none}.aa-Input::-webkit-search-decoration{appearance:none}.aa-Input::-webkit-search-results-button{appearance:none}.aa-Input::-webkit-search-results-decoration{appearance:none}.aa-InputWrapperSuffix{height:44px;height:var(--aa-search-input-height);order:4;align-items:center;display:flex}.aa-ClearButton{color:rgba(var(--aa-muted-color-rgb),var(--aa-muted-color-alpha));cursor:pointer;height:100%;padding:0 12.8333px;padding:0 calc(var(--aa-spacing)*.83333 - .5px);background:0 0;border:0;align-items:center;margin:0;display:flex}@media (hover:none) and (pointer:coarse){.aa-ClearButton{padding:0 10.1667px;padding:0 calc(var(--aa-spacing)*.66667 - .5px)}}.aa-ClearButton:focus,.aa-ClearButton:hover{color:rgba(var(--aa-text-color-rgb),var(--aa-text-color-alpha))}.aa-ClearButton[hidden]{display:none}.aa-ClearButton svg{stroke-width:1.6px;stroke-width:var(--aa-icon-stroke-width);width:20px;width:var(--aa-icon-size)}.aa-Panel{background-color:#fff;background-color:rgba(var(--aa-background-color-rgb),var(--aa-background-color-alpha));border-radius:4px;border-radius:calc(var(--aa-spacing)/4);box-shadow:0 0 0 1px rgba(35,38,59,.1),0 6px 16px -4px rgba(35,38,59,.15);box-shadow:var(--aa-panel-shadow);margin:8px 0 0;transition:opacity .2s ease-in,filter .2s ease-in;position:absolute;overflow:hidden}@media screen and (prefers-reduced-motion){.aa-Panel{transition:none}}.aa-Panel button{appearance:none;background:0 0;border:0;margin:0;padding:0}.aa-PanelLayout{height:100%;max-height:650px;max-height:var(--aa-panel-max-height);text-align:left;margin:0;padding:0;position:relative;overflow-y:auto}.aa-PanelLayoutColumns--twoGolden{grid-template-columns:39.2% auto;padding:0;display:grid;overflow:hidden}.aa-PanelLayoutColumns--two{grid-template-columns:repeat(2,minmax(0,1fr));padding:0;display:grid;overflow:hidden}.aa-PanelLayoutColumns--three{grid-template-columns:repeat(3,minmax(0,1fr));padding:0;display:grid;overflow:hidden}.aa-Panel--stalled .aa-Source{filter:grayscale();opacity:.8}.aa-Panel--scrollable{max-height:650px;max-height:var(--aa-panel-max-height);padding:8px;padding:var(--aa-spacing-half);scrollbar-color:#fff #eaeaea;scrollbar-color:rgba(var(--aa-scrollbar-thumb-background-color-rgb),var(--aa-scrollbar-thumb-background-color-alpha))rgba(var(--aa-scrollbar-track-background-color-rgb),var(--aa-scrollbar-track-background-color-alpha));scrollbar-width:thin;margin:0;overflow:hidden auto}.aa-Panel--scrollable::-webkit-scrollbar{width:13px;width:var(--aa-scrollbar-width)}.aa-Panel--scrollable::-webkit-scrollbar-track{background-color:#eaeaea;background-color:rgba(var(--aa-scrollbar-track-background-color-rgb),var(--aa-scrollbar-track-background-color-alpha))}.aa-Panel--scrollable::-webkit-scrollbar-thumb{background-color:#fff;background-color:rgba(var(--aa-scrollbar-thumb-background-color-rgb),var(--aa-scrollbar-thumb-background-color-alpha));border:3px solid #eaeaea;border:3px solid rgba(var(--aa-scrollbar-track-background-color-rgb),var(--aa-scrollbar-track-background-color-alpha));border-right-width:2px;border-radius:9999px}.aa-Source{width:100%;margin:0;padding:0;position:relative}.aa-Source:empty{display:none}.aa-SourceNoResults{padding:16px;padding:var(--aa-spacing);margin:0;font-size:1em}.aa-List{margin:0;list-style:none}.aa-List,.aa-SourceHeader{padding:0;position:relative}.aa-SourceHeader{margin:8px .5em 8px 0;margin:var(--aa-spacing-half).5em var(--aa-spacing-half)0}.aa-SourceHeader:empty{display:none}.aa-SourceHeaderTitle{background:#fff;background:rgba(var(--aa-background-color-rgb),var(--aa-background-color-alpha));color:rgba(var(--aa-primary-color-rgb),1);font-size:.8em;font-weight:600;font-weight:var(--aa-font-weight-semibold);padding:0 8px 0 0;padding:0 var(--aa-spacing-half)0 0;z-index:9999;z-index:var(--aa-base-z-index);margin:0;display:inline-block;position:relative}.aa-SourceHeaderLine{border-bottom:1px solid #3e34d3;border-bottom:1px solid rgba(var(--aa-primary-color-rgb),1);opacity:.3;height:2px;top:8px;left:0;right:0;top:var(--aa-spacing-half);z-index:calc(9999 - 1);z-index:calc(var(--aa-base-z-index) - 1);margin:0;padding:0;display:block;position:absolute}.aa-SourceFooterSeeAll{background:linear-gradient(#fff,rgba(128,126,163,.14));background:linear-gradient(180deg,rgba(var(--aa-background-color-rgb),var(--aa-background-color-alpha)),rgba(128,126,163,.14));border:1px solid rgba(128,126,163,.6);border:1px solid rgba(var(--aa-muted-color-rgb),var(--aa-muted-color-alpha));color:inherit;font-size:.95em;font-weight:500;font-weight:var(--aa-font-weight-medium);border-radius:5px;padding:.475em 1em .6em;-webkit-text-decoration:none;text-decoration:none;box-shadow:inset 0 0 2px #fff,0 2px 2px -1px rgba(76,69,88,.15)}.aa-SourceFooterSeeAll:focus,.aa-SourceFooterSeeAll:hover{border:1px solid #3e34d3;border:1px solid rgba(var(--aa-primary-color-rgb),1);color:rgba(var(--aa-primary-color-rgb),1)}.aa-Item{cursor:pointer;min-height:40px;min-height:calc(var(--aa-spacing)*2.5);padding:4px;padding:calc(var(--aa-spacing-half)/2);border-radius:3px;align-items:center;display:grid}.aa-Item[aria-selected=true]{background-color:rgba(179,173,214,.204);background-color:rgba(var(--aa-selected-color-rgb),var(--aa-selected-color-alpha))}.aa-Item[aria-selected=true] .aa-ActiveOnly,.aa-Item[aria-selected=true] .aa-ItemActionButton{visibility:visible}.aa-ItemIcon{background:#fff;background:rgba(var(--aa-background-color-rgb),var(--aa-background-color-alpha));box-shadow:inset 0 0 0 1px rgba(128,126,163,.3);box-shadow:inset 0 0 0 1px rgba(var(--aa-panel-border-color-rgb),var(--aa-panel-border-color-alpha));color:rgba(var(--aa-icon-color-rgb),var(--aa-icon-color-alpha));height:28px;height:calc(var(--aa-icon-size) + var(--aa-spacing-half));stroke-width:1.6px;stroke-width:var(--aa-icon-stroke-width);text-align:center;width:28px;width:calc(var(--aa-icon-size) + var(--aa-spacing-half));border-radius:3px;flex-shrink:0;justify-content:center;align-items:center;font-size:.7em;display:flex;overflow:hidden}.aa-ItemIcon img{height:auto;max-height:20px;max-height:calc(var(--aa-icon-size) + var(--aa-spacing-half) - 8px);max-width:20px;max-width:calc(var(--aa-icon-size) + var(--aa-spacing-half) - 8px);width:auto}.aa-ItemIcon svg{height:20px;height:var(--aa-icon-size);width:20px;width:var(--aa-icon-size)}.aa-ItemIcon--alignTop{align-self:flex-start}.aa-ItemIcon--noBorder{box-shadow:none;background:0 0}.aa-ItemIcon--picture{width:96px;height:96px}.aa-ItemIcon--picture img{max-width:100%;max-height:100%;padding:8px;padding:var(--aa-spacing-half)}.aa-ItemContent{cursor:pointer;grid-gap:calc((16*1*1px)/2);grid-gap:calc(calc(16*1*1px)/2);grid-gap:var(--aa-spacing-half);align-items:center;gap:8px;gap:var(--aa-spacing-half);grid-auto-flow:column;line-height:1.25em;display:grid;overflow:hidden}.aa-ItemContent:empty{display:none}.aa-ItemContent mark{color:rgba(var(--aa-text-color-rgb),var(--aa-text-color-alpha));font-style:normal;font-weight:700;font-weight:var(--aa-font-weight-bold);background:0 0}.aa-ItemContent--dual{text-align:left;flex-direction:column;justify-content:space-between;display:flex}.aa-ItemContent--dual .aa-ItemContentSubtitle,.aa-ItemContent--dual .aa-ItemContentTitle{display:block}.aa-ItemContent--indented{padding-left:36px;padding-left:calc(var(--aa-icon-size) + var(--aa-spacing))}.aa-ItemContentBody{grid-gap:calc(((16*1*1px)/2)/2);grid-gap:calc(calc(calc(16*1*1px)/2)/2);grid-gap:calc(var(--aa-spacing-half)/2);gap:4px;gap:calc(var(--aa-spacing-half)/2);display:grid}.aa-ItemContentTitle{text-overflow:ellipsis;white-space:nowrap;max-width:100%;margin:0 .5em 0 0;padding:0;display:inline-block;overflow:hidden}.aa-ItemContentSubtitle{font-size:.92em}.aa-ItemContentSubtitleIcon:before{border-color:rgba(128,126,163,.64);border-color:rgba(var(--aa-muted-color-rgb),.64);content:"";border-style:solid;display:inline-block;position:relative;top:-3px;left:1px}.aa-ItemContentSubtitle--inline .aa-ItemContentSubtitleIcon:before{margin-left:8px;margin-left:var(--aa-spacing-half);margin-right:4px;margin-right:calc(var(--aa-spacing-half)/2);width:10px;width:calc(var(--aa-spacing-half) + 2px);border-width:0 0 1.5px}.aa-ItemContentSubtitle--standalone{color:rgba(var(--aa-text-color-rgb),var(--aa-text-color-alpha));grid-gap:calc((16*1*1px)/2);grid-gap:calc(calc(16*1*1px)/2);grid-gap:var(--aa-spacing-half);align-items:center;gap:8px;gap:var(--aa-spacing-half);grid-auto-flow:column;justify-content:start;display:grid}.aa-ItemContentSubtitle--standalone .aa-ItemContentSubtitleIcon:before{height:8px;height:var(--aa-spacing-half);width:8px;width:var(--aa-spacing-half);border-width:0 0 1.5px 1.5px;border-radius:0 0 0 3px}.aa-ItemContentSubtitleCategory{color:rgba(var(--aa-muted-color-rgb),1);font-weight:500}.aa-ItemContentDescription{color:rgba(var(--aa-text-color-rgb),var(--aa-text-color-alpha));text-overflow:ellipsis;max-width:100%;font-size:.85em;overflow-x:hidden}.aa-ItemContentDescription:empty{display:none}.aa-ItemContentDescription mark{background:rgba(245,223,77,.5);background:rgba(var(--aa-description-highlight-background-color-rgb),var(--aa-description-highlight-background-color-alpha));color:rgba(var(--aa-text-color-rgb),var(--aa-text-color-alpha));font-style:normal;font-weight:500;font-weight:var(--aa-font-weight-medium)}.aa-ItemContentDash{color:rgba(var(--aa-muted-color-rgb),var(--aa-muted-color-alpha));opacity:.4;display:none}.aa-ItemContentTag{background-color:rgba(62,52,211,.2);background-color:rgba(var(--aa-primary-color-rgb),var(--aa-primary-color-alpha));border-radius:3px;margin:0 .4em 0 0;padding:.08em .3em}.aa-ItemLink,.aa-ItemWrapper{color:inherit;grid-gap:calc(((16*1*1px)/2)/2);grid-gap:calc(calc(calc(16*1*1px)/2)/2);grid-gap:calc(var(--aa-spacing-half)/2);align-items:center;gap:4px;gap:calc(var(--aa-spacing-half)/2);grid-auto-flow:column;justify-content:space-between;width:100%;display:grid}.aa-ItemLink{color:inherit;-webkit-text-decoration:none;text-decoration:none}.aa-ItemActions{height:100%;margin:0 -5.33333px;margin:0 calc(var(--aa-spacing)/-3);grid-auto-flow:column;justify-self:end;padding:0 2px 0 0;display:grid}.aa-ItemActionButton{color:rgba(var(--aa-muted-color-rgb),var(--aa-muted-color-alpha));cursor:pointer;background:0 0;border:0;flex-shrink:0;align-items:center;padding:0;display:flex}.aa-ItemActionButton:focus svg,.aa-ItemActionButton:hover svg{color:rgba(var(--aa-text-color-rgb),var(--aa-text-color-alpha))}@media (hover:none) and (pointer:coarse){.aa-ItemActionButton:focus svg,.aa-ItemActionButton:hover svg{color:inherit}}.aa-ItemActionButton svg{color:rgba(var(--aa-muted-color-rgb),var(--aa-muted-color-alpha));margin:5.33333px;margin:calc(var(--aa-spacing)/3);stroke-width:1.6px;stroke-width:var(--aa-icon-stroke-width);width:20px;width:var(--aa-action-icon-size)}.aa-ActiveOnly{visibility:hidden}.aa-PanelHeader{background:#3e34d3;background:rgba(var(--aa-primary-color-rgb),1);color:#fff;height:var(--aa-modal-header-height);padding:8px 16px;padding:var(--aa-spacing-half)var(--aa-spacing);align-items:center;margin:0;display:grid;position:relative}.aa-PanelHeader:after{background-image:linear-gradient(#fff,rgba(255,255,255,0));background-image:linear-gradient(rgba(var(--aa-background-color-rgb),1),rgba(var(--aa-background-color-rgb),0));bottom:-8px;bottom:calc(var(--aa-spacing-half)*-1);content:"";height:8px;height:var(--aa-spacing-half);pointer-events:none;z-index:9999;z-index:var(--aa-base-z-index);position:absolute;left:0;right:0}.aa-PanelFooter{background-color:#fff;background-color:rgba(var(--aa-background-color-rgb),var(--aa-background-color-alpha));box-shadow:inset 0 1px rgba(128,126,163,.3);box-shadow:inset 0 1px 0 rgba(var(--aa-panel-border-color-rgb),var(--aa-panel-border-color-alpha));padding:16px;padding:var(--aa-spacing);z-index:9999;z-index:var(--aa-base-z-index);justify-content:space-between;margin:0;display:flex;position:relative}.aa-PanelFooter:after{background-image:linear-gradient(rgba(255,255,255,0),rgba(128,126,163,.6));background-image:linear-gradient(rgba(var(--aa-background-color-rgb),0),rgba(var(--aa-muted-color-rgb),var(--aa-muted-color-alpha)));content:"";height:16px;height:var(--aa-spacing);opacity:.12;pointer-events:none;top:-16px;left:0;right:0;top:calc(var(--aa-spacing)*-1);z-index:calc(9999 - 1);z-index:calc(var(--aa-base-z-index) - 1);position:absolute}.aa-DetachedContainer{background:#fff;background:rgba(var(--aa-background-color-rgb),var(--aa-background-color-alpha));box-shadow:0 0 0 1px rgba(35,38,59,.1),0 6px 16px -4px rgba(35,38,59,.15);box-shadow:var(--aa-panel-shadow);z-index:9999;z-index:var(--aa-base-z-index);flex-direction:column;margin:0;padding:0;display:flex;position:fixed;inset:0;overflow:hidden}.aa-DetachedContainer:after{height:32px}.aa-DetachedContainer .aa-SourceHeader{margin:8px 0 8px 2px;margin:var(--aa-spacing-half)0 var(--aa-spacing-half)2px}.aa-DetachedContainer .aa-Panel{background-color:#fff;background-color:rgba(var(--aa-background-color-rgb),var(--aa-background-color-alpha));box-shadow:none;border-radius:0;flex-grow:1;margin:0;padding:0;position:relative}.aa-DetachedContainer .aa-PanelLayout{box-shadow:none;width:100%;max-height:none;margin:0;position:absolute;inset:0;overflow-y:auto}.aa-DetachedFormContainer{border-bottom:1px solid rgba(128,126,163,.3);border-bottom:1px solid rgba(var(--aa-panel-border-color-rgb),var(--aa-panel-border-color-alpha));padding:8px;padding:var(--aa-spacing-half);flex-direction:row;justify-content:space-between;margin:0;display:flex}.aa-DetachedCancelButton{color:rgba(var(--aa-text-color-rgb),var(--aa-text-color-alpha));cursor:pointer;font:inherit;margin:0 0 0 8px;margin:0 0 0 var(--aa-spacing-half);padding:0 8px;padding:0 var(--aa-spacing-half);background:0 0;border:0;border-radius:3px}.aa-DetachedCancelButton:focus,.aa-DetachedCancelButton:hover{box-shadow:inset 0 0 0 1px rgba(128,126,163,.3);box-shadow:inset 0 0 0 1px rgba(var(--aa-panel-border-color-rgb),var(--aa-panel-border-color-alpha))}.aa-DetachedContainer--modal{bottom:inherit;max-width:680px;height:auto;max-width:var(--aa-detached-modal-max-width);border-radius:6px;margin:0 auto;position:absolute;top:3%}.aa-DetachedContainer--modal .aa-PanelLayout{max-height:500px;max-height:var(--aa-detached-modal-max-height);padding-bottom:8px;padding-bottom:var(--aa-spacing-half);position:static}.aa-DetachedSearchButton{background-color:#fff;background-color:rgba(var(--aa-input-background-color-rgb),var(--aa-input-background-color-alpha));border:1px solid rgba(128,126,163,.8);border:1px solid rgba(var(--aa-input-border-color-rgb),var(--aa-input-border-color-alpha));color:rgba(var(--aa-muted-color-rgb),var(--aa-muted-color-alpha));cursor:pointer;font:inherit;font-family:inherit;font-family:var(--aa-font-family);font-size:16px;font-size:var(--aa-font-size);height:44px;height:var(--aa-search-input-height);padding:0 5.5px;padding:0 calc(var(--aa-search-input-height)/8);text-align:left;border-radius:3px;align-items:center;width:100%;margin:0;display:flex;position:relative}.aa-DetachedSearchButton:focus{border-color:#3e34d3;border-color:rgba(var(--aa-primary-color-rgb),1);box-shadow:0 0 0 3px rgba(62,52,211,.2),inset 0 0 0 2px rgba(62,52,211,.2);box-shadow:rgba(var(--aa-primary-color-rgb),var(--aa-primary-color-alpha))0 0 0 3px,inset rgba(var(--aa-primary-color-rgb),var(--aa-primary-color-alpha))0 0 0 2px;outline:none}.aa-DetachedSearchButtonIcon{color:rgba(var(--aa-primary-color-rgb),1);cursor:auto;width:36px;height:100%;width:calc(var(--aa-icon-size) + var(--aa-spacing));flex-shrink:0;justify-content:center;align-items:center;display:flex}.aa-DetachedSearchButtonQuery{color:rgba(var(--aa-text-color-rgb),1);text-overflow:ellipsis;white-space:nowrap;line-height:1.25em;overflow:hidden}.aa-DetachedSearchButtonPlaceholder[hidden]{display:none}.aa-Detached{height:100vh;overflow:hidden}.aa-DetachedOverlay{background-color:rgba(115,114,129,.4);background-color:rgba(var(--aa-overlay-color-rgb),var(--aa-overlay-color-alpha));height:100vh;z-index:calc(9999 - 1);z-index:calc(var(--aa-base-z-index) - 1);margin:0;padding:0;position:fixed;top:0;left:0;right:0}.aa-GradientBottom,.aa-GradientTop{height:8px;height:var(--aa-spacing-half);pointer-events:none;z-index:9999;z-index:var(--aa-base-z-index);position:absolute;left:0;right:0}.aa-GradientTop{background-image:linear-gradient(#fff,rgba(255,255,255,0));background-image:linear-gradient(rgba(var(--aa-background-color-rgb),1),rgba(var(--aa-background-color-rgb),0));top:0}.aa-GradientBottom{background-image:linear-gradient(rgba(255,255,255,0),#fff);background-image:linear-gradient(rgba(var(--aa-background-color-rgb),0),rgba(var(--aa-background-color-rgb),1));border-bottom-left-radius:4px;border-bottom-left-radius:calc(var(--aa-spacing)/4);border-bottom-right-radius:4px;border-bottom-right-radius:calc(var(--aa-spacing)/4);bottom:0}@media (hover:none) and (pointer:coarse){.aa-DesktopOnly{display:none}}@media (hover:hover){.aa-TouchOnly{display:none}}:root{--aa-search-input-height:36px}body.dark,body[data-theme=dark]{--aa-muted-color-alpha:1}.navbarSearchContainer_Bca1:empty{display:none}@media (max-width:996px){.navbarSearchContainer_Bca1{right:var(--ifm-navbar-padding-horizontal);position:absolute}}@media (min-width:997px){.navbarSearchContainer_Bca1{padding:var(--ifm-navbar-item-padding-vertical)var(--ifm-navbar-item-padding-horizontal)}}.navbarHideable_m1mJ{transition:transform var(--ifm-transition-fast)ease}.navbarHidden_jGov{transform:translateY(calc(-100% - 2px))}@media (max-width:996px){.colorModeToggle_DEke{display:none}}.errorBoundaryError_a6uf{white-space:pre-wrap;color:red}.errorBoundaryFallback_VBag{color:red;padding:.55rem}.footerLogoLink_BH7S{opacity:.5;transition:opacity var(--ifm-transition-fast)var(--ifm-transition-timing-default)}.footerLogoLink_BH7S:hover{opacity:1}.anchorWithStickyNavbar_LWe7{scroll-margin-top:calc(var(--ifm-navbar-height) + .5rem)}.anchorWithHideOnScrollNavbar_WYt5{scroll-margin-top:.5rem}.hash-link{opacity:0;transition:opacity var(--ifm-transition-fast);-webkit-user-select:none;user-select:none;padding-left:.5rem}.hash-link:before{content:"#"}.hash-link:focus,:hover>.hash-link{opacity:1}html,body{height:100%}.mainWrapper_z2l0{flex-direction:column;flex:1 0 auto;display:flex}.docusaurus-mt-lg{margin-top:3rem}#__docusaurus{flex-direction:column;min-height:100%;display:flex}.sidebar_re4s{max-height:calc(100vh - (var(--ifm-navbar-height) + 2rem));top:calc(var(--ifm-navbar-height) + 2rem);position:sticky;overflow-y:auto}.sidebarItemTitle_pO2u{font-size:var(--ifm-h3-font-size);font-weight:var(--ifm-font-weight-bold)}.sidebarItemList_Yudw{font-size:.9rem}.sidebarItem__DBe{margin-top:.7rem}.sidebarItemLink_mo7H{color:var(--ifm-font-color-base);display:block}.sidebarItemLink_mo7H:hover{-webkit-text-decoration:none;text-decoration:none}.sidebarItemLinkActive_I1ZP{color:var(--ifm-color-primary)!important}@media (max-width:996px){.sidebar_re4s{display:none}}.yearGroupHeading_rMGB{margin-top:1.6rem;margin-bottom:.4rem}.yearGroupHeading_QT03{margin:1rem .75rem .5rem}.cardContainer_fWXF{--ifm-link-color:var(--ifm-color-emphasis-800);--ifm-link-hover-color:var(--ifm-color-emphasis-700);--ifm-link-hover-decoration:none;border:1px solid var(--ifm-color-emphasis-200);transition:all var(--ifm-transition-fast)ease;transition-property:border,box-shadow;box-shadow:0 1.5px 3px rgba(0,0,0,.15)}.cardContainer_fWXF:hover{border-color:var(--ifm-color-primary);box-shadow:0 3px 6px rgba(0,0,0,.2)}.cardContainer_fWXF :last-child{margin-bottom:0}.cardTitle_rnsV{font-size:1.2rem}.cardDescription_PWke{font-size:.8rem}.title_f1Hy{font-size:3rem}@media (max-width:576px){.title_f1Hy{font-size:2rem}}.container_mt6G{font-size:.9rem}[data-theme=dark] .githubSvg_Uu4N{fill:var(--light)}[data-theme=light] .githubSvg_Uu4N{fill:var(--dark)}[data-theme=dark] .xSvg_y3PF{fill:var(--light)}[data-theme=light] .xSvg_y3PF{fill:var(--dark)}:root{--docusaurus-blog-social-icon-size:1rem}.authorSocials_rSDt{height:var(--docusaurus-blog-social-icon-size);line-clamp:1;-webkit-line-clamp:1;-webkit-box-orient:vertical;flex-wrap:wrap;align-items:center;line-height:0;display:flex;overflow:hidden}.authorSocialLink_owbf{height:var(--docusaurus-blog-social-icon-size);width:var(--docusaurus-blog-social-icon-size);margin-right:.4rem;line-height:0}.authorSocialIcon_XYv3{width:var(--docusaurus-blog-social-icon-size);height:var(--docusaurus-blog-social-icon-size)}.authorImage_XqGP{--ifm-avatar-photo-size:3.6rem}.author-as-h1_n9oJ .authorImage_XqGP{--ifm-avatar-photo-size:7rem}.author-as-h2_gXvM .authorImage_XqGP{--ifm-avatar-photo-size:5.4rem}.authorDetails_lV9A{flex-direction:column;justify-content:space-around;align-items:flex-start;display:flex}.authorName_yefp{flex-direction:row;font-size:1.1rem;line-height:1.1rem;display:flex}.author-as-h1_n9oJ .authorName_yefp{font-size:2.4rem;line-height:2.4rem;display:inline}.author-as-h2_gXvM .authorName_yefp{font-size:1.4rem;line-height:1.4rem;display:inline}.authorTitle_nd0D{line-clamp:1;-webkit-line-clamp:1;-webkit-box-orient:vertical;font-size:.8rem;line-height:1rem;display:-webkit-box;overflow:hidden}.author-as-h1_n9oJ .authorTitle_nd0D{font-size:1.2rem;line-height:1.6rem}.author-as-h2_gXvM .authorTitle_nd0D{font-size:1rem;line-height:1.3rem}.authorBlogPostCount_iiJ5{background:var(--ifm-color-secondary);color:var(--ifm-color-black);border-radius:var(--ifm-global-radius);margin-left:.3rem;padding:.1rem .4rem;font-size:.8rem;line-height:1.2}.authorCol_Hf19{max-width:inherit!important}.imageOnlyAuthorRow_pa_O{flex-flow:wrap;display:flex}.imageOnlyAuthorCol_G86a{margin-left:.3rem;margin-right:.3rem}.authorListItem_n3yI{margin-bottom:2rem;list-style-type:none}.backToTopButton_sjWU{background-color:var(--ifm-color-emphasis-200);width:3rem;height:3rem;z-index:calc(var(--ifm-z-index-fixed) - 1);box-shadow:var(--ifm-global-shadow-lw);transition:all var(--ifm-transition-fast)var(--ifm-transition-timing-default);opacity:0;visibility:hidden;border-radius:50%;position:fixed;bottom:1.3rem;right:1.3rem;transform:scale(0)}.backToTopButton_sjWU:after{content:" ";-webkit-mask:var(--ifm-menu-link-sublist-icon)50%/2rem 2rem no-repeat;-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;background-color:var(--ifm-color-emphasis-1000);width:100%;height:100%;display:inline-block}@media (hover:hover){.backToTopButton_sjWU:hover{background-color:var(--ifm-color-emphasis-300)}}.backToTopButtonShow_xfvO{opacity:1;visibility:visible;transform:scale(1)}:root{--docusaurus-collapse-button-bg:transparent;--docusaurus-collapse-button-bg-hover:rgba(0,0,0,.1)}[data-theme=dark]:root{--docusaurus-collapse-button-bg:rgba(255,255,255,.05);--docusaurus-collapse-button-bg-hover:rgba(255,255,255,.1)}@media (min-width:997px){.collapseSidebarButton_PEFL{background-color:var(--docusaurus-collapse-button-bg);border:1px solid var(--ifm-toc-border-color);border-radius:0;height:40px;position:sticky;bottom:0;display:block!important}.collapseSidebarButtonIcon_kv0_{margin-top:4px;transform:rotate(180deg)}[dir=rtl] .collapseSidebarButtonIcon_kv0_{transform:rotate(0)}.collapseSidebarButton_PEFL:hover,.collapseSidebarButton_PEFL:focus{background-color:var(--docusaurus-collapse-button-bg-hover)}}.collapseSidebarButton_PEFL{margin:0;display:none}.menuExternalLink_NmtK{align-items:center}@media (min-width:997px){.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{scrollbar-gutter:stable;padding:.5rem 0 .5rem .5rem}}.menuWithAnnouncementBar_GW3s{margin-bottom:var(--docusaurus-announcement-bar-height)}.sidebar_njMd{height:100%;padding-top:var(--ifm-navbar-height);width:var(--doc-sidebar-width);flex-direction:column;display:flex}.sidebarWithHideableNavbar_wUlq{padding-top:0}.sidebarHidden_VK0M{opacity:0;visibility:hidden}.sidebarLogo_isFc{margin:0 var(--ifm-navbar-padding-horizontal);min-height:var(--ifm-navbar-height);max-height:var(--ifm-navbar-height);align-items:center;color:inherit!important;-webkit-text-decoration:none!important;text-decoration:none!important;display:flex!important}.sidebarLogo_isFc img{height:2rem;margin-right:.5rem}}.sidebarLogo_isFc{display:none}@media (min-width:997px){.expandButton_TmdG{width:100%;height:100%;transition:background-color var(--ifm-transition-fast)ease;background-color:var(--docusaurus-collapse-button-bg);justify-content:center;align-items:center;display:flex;position:absolute;top:0;right:0}.expandButton_TmdG:hover,.expandButton_TmdG:focus{background-color:var(--docusaurus-collapse-button-bg-hover)}.expandButtonIcon_i1dp{transform:rotate(0)}[dir=rtl] .expandButtonIcon_i1dp{transform:rotate(180deg)}}:root{--doc-sidebar-width:300px;--doc-sidebar-hidden-width:30px}.docSidebarContainer_YfHR{display:none}@media (min-width:997px){.docSidebarContainer_YfHR{width:var(--doc-sidebar-width);margin-top:calc(-1*var(--ifm-navbar-height));border-right:1px solid var(--ifm-toc-border-color);will-change:width;transition:width var(--ifm-transition-fast)ease;clip-path:inset(0);display:block}.docSidebarContainerHidden_DPk8{width:var(--doc-sidebar-hidden-width);cursor:pointer}.sidebarViewport_aRkj{height:100%;max-height:100vh;position:sticky;top:0}}.docMainContainer_TBSr{width:100%;display:flex}@media (min-width:997px){.docMainContainer_TBSr{max-width:calc(100% - var(--doc-sidebar-width));flex-grow:1}.docMainContainerEnhanced_lQrH{max-width:calc(100% - var(--doc-sidebar-hidden-width))}.docItemWrapperEnhanced_JWYK{max-width:calc(var(--ifm-container-width) + var(--doc-sidebar-width))!important}}.docRoot_UBD9{width:100%;display:flex}.docsWrapper_hBAB{flex:1 0 auto;display:flex}.codeBlockContainer_Ckt0{background:var(--prism-background-color);color:var(--prism-color);margin-bottom:var(--ifm-leading);box-shadow:var(--ifm-global-shadow-lw);border-radius:var(--ifm-code-border-radius)}.codeBlockContent_biex{border-radius:inherit;direction:ltr;position:relative}.codeBlockTitle_Ktv7{border-bottom:1px solid var(--ifm-color-emphasis-300);font-size:var(--ifm-code-font-size);padding:.75rem var(--ifm-pre-padding);border-top-left-radius:inherit;border-top-right-radius:inherit;font-weight:500}.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}.codeBlockStandalone_MEMb{padding:0}.codeBlockLines_e6Vv{font:inherit;float:left;min-width:100%;padding:var(--ifm-pre-padding)}.codeBlockLinesWithNumbering_o6Pm{padding:var(--ifm-pre-padding)0;display:table}@media print{.codeBlockLines_e6Vv{white-space:pre-wrap}}.buttonGroup__atx{right:calc(var(--ifm-pre-padding)/2);top:calc(var(--ifm-pre-padding)/2);column-gap:.2rem;display:flex;position:absolute}.buttonGroup__atx button{background:var(--prism-background-color);color:var(--prism-color);border:1px solid var(--ifm-color-emphasis-300);border-radius:var(--ifm-global-radius);transition:opacity var(--ifm-transition-fast)ease-in-out;opacity:0;align-items:center;padding:.4rem;line-height:0;display:flex}.buttonGroup__atx button:hover{opacity:1!important}.buttonGroup__atx button:focus-visible{opacity:1!important}.theme-code-block:hover .buttonGroup__atx button{opacity:.4}:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.codeLine_lJS_{counter-increment:line-count;display:table-row}.codeLineNumber_Tfdd{text-align:right;width:1%;padding:0 var(--ifm-pre-padding);background:var(--ifm-pre-background);overflow-wrap:normal;display:table-cell;position:sticky;left:0}.codeLineNumber_Tfdd:before{content:counter(line-count);opacity:.4}.theme-code-block-highlighted-line .codeLineNumber_Tfdd:before{opacity:.8}.codeLineContent_feaV{padding-right:var(--ifm-pre-padding)}:root{--docusaurus-tag-list-border:var(--ifm-color-emphasis-300)}.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);-webkit-text-decoration:none;text-decoration:none}.tagRegular_sFm0{border-radius:var(--ifm-global-radius);padding:.2rem .5rem .3rem;font-size:90%}.tagWithCount_h2kH{border-left:0;align-items:center;padding:0 .5rem 0 1rem;display:flex;position:relative}.tagWithCount_h2kH:before,.tagWithCount_h2kH:after{content:"";border:1px solid var(--docusaurus-tag-list-border);transition:inherit;position:absolute;top:50%}.tagWithCount_h2kH:before{border-bottom:0;border-right:0;width:1.18rem;height:1.18rem;right:100%;transform:translate(50%,-50%)rotate(-45deg)}.tagWithCount_h2kH:after{border-radius:50%;width:.5rem;height:.5rem;left:0;transform:translateY(-50%)}.tagWithCount_h2kH span{background:var(--ifm-color-secondary);color:var(--ifm-color-black);border-radius:var(--ifm-global-radius);margin-left:.3rem;padding:.1rem .4rem;font-size:.7rem;line-height:1.2}.tag_Nnez{margin:.5rem .5rem 0 1rem;display:inline-block}.theme-code-block:hover .copyButtonCopied_obH4{opacity:1!important}.copyButtonIcons_eSgA{width:1.125rem;height:1.125rem;position:relative}.copyButtonIcon_y97N,.copyButtonSuccessIcon_LjdS{fill:currentColor;opacity:inherit;width:inherit;height:inherit;transition:all var(--ifm-transition-fast)ease;position:absolute;top:0;left:0}.copyButtonSuccessIcon_LjdS{opacity:0;color:#00d600;top:50%;left:50%;transform:translate(-50%,-50%)scale(.33)}.copyButtonCopied_obH4 .copyButtonIcon_y97N{opacity:0;transform:scale(.33)}.copyButtonCopied_obH4 .copyButtonSuccessIcon_LjdS{opacity:1;transition-delay:75ms;transform:translate(-50%,-50%)scale(1)}.tags_jXut{display:inline}.tag_QGVx{margin:0 .4rem .5rem 0;display:inline-block}.iconEdit_Z9Sw{vertical-align:sub;margin-right:.3em}.lastUpdated_JAkA{margin-top:.2rem;font-size:smaller;font-style:italic}@media (min-width:997px){.lastUpdated_JAkA{text-align:right}}.tocCollapsibleButton_TO0P{font-size:inherit;justify-content:space-between;align-items:center;width:100%;padding:.4rem .8rem;display:flex}.tocCollapsibleButton_TO0P:after{content:"";background:var(--ifm-menu-link-sublist-icon)50% 50%/2rem 2rem no-repeat;filter:var(--ifm-menu-link-sublist-icon-filter);width:1.25rem;height:1.25rem;transition:transform var(--ifm-transition-fast);transform:rotate(180deg)}.tocCollapsibleButtonExpanded_MG3E:after{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);padding:.2rem 0;font-size:15px}.tocCollapsibleContent_vkbj ul li{margin:.4rem .8rem}.tocCollapsibleContent_vkbj a{display:block}.tocCollapsibleExpanded_sAul{transform:none}@media (min-width:997px){.tocMobile_ITEo{display:none}}@media print{.tocMobile_ITEo{display:none}}.wordWrapButtonIcon_Bwma{width:1.2rem;height:1.2rem}.wordWrapButtonEnabled_EoeP .wordWrapButtonIcon_Bwma{color:var(--ifm-color-primary)}.details_lb9f{--docusaurus-details-summary-arrow-size:.38rem;--docusaurus-details-transition:transform .2s ease;--docusaurus-details-decoration-color:grey}.details_lb9f>summary{cursor:pointer;padding-left:1rem;list-style:none;position:relative}.details_lb9f>summary::-webkit-details-marker{display:none}.details_lb9f>summary:before{content:"";border-width:var(--docusaurus-details-summary-arrow-size);border-style:solid;border-color:transparent transparent transparent var(--docusaurus-details-decoration-color);transition:var(--docusaurus-details-transition);transform-origin:calc(var(--docusaurus-details-summary-arrow-size)/2)50%;position:absolute;top:.45rem;left:0;transform:rotate(0)}.details_lb9f[open]:not(.isBrowser_bmU9)>summary:before,.details_lb9f[data-collapsed=false].isBrowser_bmU9>summary:before{transform:rotate(90deg)}.collapsibleContent_i85q{border-top:1px solid var(--docusaurus-details-decoration-color);margin-top:1rem;padding-top:1rem}.collapsibleContent_i85q p:last-child,.details_lb9f>summary>p:last-child{margin-bottom:0}.details_b_Ee{--docusaurus-details-decoration-color:var(--ifm-alert-border-color);--docusaurus-details-transition:transform var(--ifm-transition-fast)ease;margin:0 0 var(--ifm-spacing-vertical);border:1px solid var(--ifm-alert-border-color)}.containsTaskList_mC6p{list-style:none}:not(.containsTaskList_mC6p>li)>.containsTaskList_mC6p{padding-left:0}.img_ev3q{height:auto}.tableOfContents_bqdL{max-height:calc(100vh - (var(--ifm-navbar-height) + 2rem));top:calc(var(--ifm-navbar-height) + 1rem);position:sticky;overflow-y:auto}@media (max-width:996px){.tableOfContents_bqdL{display:none}.docItemContainer_F8PC{padding:0 .3rem}}.admonition_xJq3{margin-bottom:1em}.admonitionHeading_Gvgb{font:var(--ifm-heading-font-weight)var(--ifm-h5-font-size)/var(--ifm-heading-line-height)var(--ifm-heading-font-family);text-transform:uppercase}.admonitionHeading_Gvgb:not(:last-child){margin-bottom:.3rem}.admonitionHeading_Gvgb code{text-transform:none}.admonitionIcon_Rf37{vertical-align:middle;margin-right:.4em;display:inline-block}.admonitionIcon_Rf37 svg{width:1.6em;height:1.6em;fill:var(--ifm-alert-foreground-color);display:inline-block}.admonitionContent_BuS1>:last-child{margin-bottom:0}.breadcrumbHomeIcon_YNFT{vertical-align:top;width:1.1rem;height:1.1rem;position:relative;top:1px}.breadcrumbsContainer_Z_bl{--ifm-breadcrumb-size-multiplier:.8;margin-bottom:.8rem}@media (min-width:997px){.generatedIndexPage_vN6x{max-width:75%!important}.list_eTzJ article:nth-last-child(-n+2){margin-bottom:0!important}}.title_kItE{--ifm-h1-font-size:3rem;margin-bottom:calc(1.25*var(--ifm-leading))}.list_eTzJ article:last-child{margin-bottom:0!important}.docItemContainer_Djhp header+*,.docItemContainer_Djhp article>:first-child{margin-top:0}@media (min-width:997px){.docItemCol_VOVn{max-width:75%!important}}.tabItem_Ymn6>:last-child{margin-bottom:0}.tabList__CuJ{margin-bottom:var(--ifm-leading)}.tabItem_LNqP{margin-top:0!important} \ No newline at end of file diff --git a/assets/js/0058b4c6.5b9529fc.js b/assets/js/0058b4c6.5b9529fc.js deleted file mode 100644 index 7f46b7b3b..000000000 --- a/assets/js/0058b4c6.5b9529fc.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[4088],{66462:e=>{e.exports=JSON.parse('{"version":{"pluginId":"default","version":"current","label":"Next","banner":null,"badge":false,"noIndex":false,"className":"docs-version-current","isLast":true,"docsSidebars":{"userSidebar":[{"type":"link","label":"Welcome","href":"/docs/user/intro","docId":"user/intro","unlisted":false},{"type":"category","label":"Quick Start","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Boot Management","href":"/docs/user/quick-start/boot-management","docId":"user/quick-start/boot-management","unlisted":false},{"type":"link","label":"Default Applications","href":"/docs/user/quick-start/default-applications","docId":"user/quick-start/default-applications","unlisted":false},{"type":"category","label":"Preparing to Install","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Disk Partitioning","href":"/docs/user/quick-start/installation/disks","docId":"user/quick-start/installation/disks","unlisted":false},{"type":"link","label":"Booting with Secure Boot Enabled","href":"/docs/user/quick-start/installation/secure-boot","docId":"user/quick-start/installation/secure-boot","unlisted":false},{"type":"link","label":"System Requirements","href":"/docs/user/quick-start/installation/system-requirements","docId":"user/quick-start/installation/system-requirements","unlisted":false}],"href":"/docs/user/quick-start/installation/"},{"type":"link","label":"Software Center","href":"/docs/user/quick-start/software-center/","docId":"user/quick-start/software-center/index","unlisted":false}],"href":"/docs/category/quick-start"},{"type":"category","label":"Contributing","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Community Guidelines","href":"/docs/user/contributing/community-guidelines","docId":"user/contributing/community-guidelines","unlisted":false},{"type":"link","label":"Getting Involved","href":"/docs/user/contributing/getting-involved","docId":"user/contributing/getting-involved","unlisted":false},{"type":"link","label":"Solus Style Guide","href":"/docs/user/contributing/style","docId":"user/contributing/style","unlisted":false},{"type":"link","label":"Testing an ISO","href":"/docs/user/contributing/testing-an-iso","docId":"user/contributing/testing-an-iso","unlisted":false}],"href":"/docs/category/contributing"},{"type":"category","label":"Editions","collapsible":true,"collapsed":true,"items":[{"type":"category","label":"Budgie","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Configuration","href":"/docs/user/editions/budgie/configuration","docId":"user/editions/budgie/configuration","unlisted":false},{"type":"link","label":"Tips and Tricks","href":"/docs/user/editions/budgie/tips-and-tricks","docId":"user/editions/budgie/tips-and-tricks","unlisted":false}],"href":"/docs/user/editions/budgie/"},{"type":"category","label":"GNOME","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Configuration","href":"/docs/user/editions/gnome/configuration","docId":"user/editions/gnome/configuration","unlisted":false},{"type":"link","label":"Tips and Tricks","href":"/docs/user/editions/gnome/tips-and-tricks","docId":"user/editions/gnome/tips-and-tricks","unlisted":false}],"href":"/docs/user/editions/gnome/"},{"type":"category","label":"MATE","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Configuration","href":"/docs/user/editions/mate/configuration","docId":"user/editions/mate/configuration","unlisted":false},{"type":"link","label":"Tips and Tricks","href":"/docs/user/editions/mate/tips-and-tricks","docId":"user/editions/mate/tips-and-tricks","unlisted":false}],"href":"/docs/user/editions/mate/"},{"type":"category","label":"Plasma","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Configuration","href":"/docs/user/editions/plasma/configuration","docId":"user/editions/plasma/configuration","unlisted":false},{"type":"link","label":"Tips and Tricks","href":"/docs/user/editions/plasma/tips-and-tricks","docId":"user/editions/plasma/tips-and-tricks","unlisted":false}],"href":"/docs/user/editions/plasma/"},{"type":"category","label":"XFCE","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Configuration","href":"/docs/user/editions/xfce/configuration","docId":"user/editions/xfce/configuration","unlisted":false},{"type":"link","label":"Tips and Tricks","href":"/docs/user/editions/xfce/tips-and-tricks","docId":"user/editions/xfce/tips-and-tricks","unlisted":false}],"href":"/docs/user/editions/xfce/"}],"href":"/docs/user/editions/"},{"type":"category","label":"Hardware","collapsible":true,"collapsed":true,"items":[{"type":"category","label":"Compatibility","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Laptops","href":"/docs/user/hardware/compatibility/laptops","docId":"user/hardware/compatibility/laptops","unlisted":false},{"type":"link","label":"WiFi","href":"/docs/user/hardware/compatibility/wifi","docId":"user/hardware/compatibility/wifi","unlisted":false}],"href":"/docs/category/compatibility"},{"type":"category","label":"Mobile","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Android","href":"/docs/user/hardware/mobile/android","docId":"user/hardware/mobile/android","unlisted":false},{"type":"link","label":"Apple","href":"/docs/user/hardware/mobile/apple","docId":"user/hardware/mobile/apple","unlisted":false}],"href":"/docs/category/mobile"},{"type":"category","label":"Peripherals","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Mice and Touchpads","href":"/docs/user/hardware/peripherals/mice-and-touchpads","docId":"user/hardware/peripherals/mice-and-touchpads","unlisted":false},{"type":"link","label":"MIDI Keyboards","href":"/docs/user/hardware/peripherals/midi-keyboard","docId":"user/hardware/peripherals/midi-keyboard","unlisted":false},{"type":"link","label":"Printers and Scanners","href":"/docs/user/hardware/peripherals/printers-and-scanners","docId":"user/hardware/peripherals/printers-and-scanners","unlisted":false}],"href":"/docs/category/peripherals"}],"href":"/docs/user/hardware/"},{"type":"category","label":"Package Management","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Basics to Package Management","href":"/docs/user/package-management/basics","docId":"user/package-management/basics","unlisted":false},{"type":"link","label":"History and Software Rollback","href":"/docs/user/package-management/history-and-rollback","docId":"user/package-management/history-and-rollback","unlisted":false},{"type":"link","label":"Repository Management","href":"/docs/user/package-management/repo-management","docId":"user/package-management/repo-management","unlisted":false}],"href":"/docs/category/package-management"},{"type":"link","label":"Privacy Policy","href":"/docs/user/privacy","docId":"user/privacy","unlisted":false},{"type":"category","label":"Software","collapsible":true,"collapsed":true,"items":[{"type":"category","label":"Camera","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"DroidCam","href":"/docs/user/software/camera/droidcam","docId":"user/software/camera/droidcam","unlisted":false}],"href":"/docs/category/camera"},{"type":"link","label":"Command Line","href":"/docs/user/software/command-line/","docId":"user/software/command-line/index","unlisted":false},{"type":"link","label":"Configuration File Locations","href":"/docs/user/software/configuration_files","docId":"user/software/configuration_files","unlisted":false},{"type":"link","label":"Desktops","href":"/docs/user/software/desktops/","docId":"user/software/desktops/index","unlisted":false},{"type":"category","label":"Development","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Containers","href":"/docs/user/software/development/containers","docId":"user/software/development/containers","unlisted":false},{"type":"link","label":"Java","href":"/docs/user/software/development/java","docId":"user/software/development/java","unlisted":false},{"type":"link","label":"PostgreSQL","href":"/docs/user/software/development/postgresql","docId":"user/software/development/postgresql","unlisted":false},{"type":"link","label":"R and RStudio","href":"/docs/user/software/development/r-and-rstudio","docId":"user/software/development/r-and-rstudio","unlisted":false},{"type":"link","label":"Rust","href":"/docs/user/software/development/rust","docId":"user/software/development/rust","unlisted":false},{"type":"link","label":"Web Development","href":"/docs/user/software/development/web","docId":"user/software/development/web","unlisted":false}],"href":"/docs/user/software/development/"},{"type":"link","label":"Gaming","href":"/docs/user/software/gaming/","docId":"user/software/gaming/index","unlisted":false},{"type":"category","label":"Localization","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"IBus","href":"/docs/user/software/localization/ibus","docId":"user/software/localization/ibus","unlisted":false}],"href":"/docs/category/localization"},{"type":"category","label":"Networking","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Samba File Sharing","href":"/docs/user/software/networking/samba","docId":"user/software/networking/samba","unlisted":false},{"type":"link","label":"TigerVNC","href":"/docs/user/software/networking/tigervnc","docId":"user/software/networking/tigervnc","unlisted":false},{"type":"link","label":"Wireshark","href":"/docs/user/software/networking/wireshark","docId":"user/software/networking/wireshark","unlisted":false},{"type":"link","label":"XRDP","href":"/docs/user/software/networking/xrdp","docId":"user/software/networking/xrdp","unlisted":false}],"href":"/docs/category/networking"},{"type":"link","label":"Sound","href":"/docs/user/software/sound/","docId":"user/software/sound/index","unlisted":false},{"type":"category","label":"Third Party","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Snap","href":"/docs/user/software/third-party/snap","docId":"user/software/third-party/snap","unlisted":false}],"href":"/docs/user/software/third-party/"},{"type":"category","label":"Utilities","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"KSysGuard","href":"/docs/user/software/utilities/ksysguard","docId":"user/software/utilities/ksysguard","unlisted":false},{"type":"link","label":"KDE Wallet","href":"/docs/user/software/utilities/kwallet","docId":"user/software/utilities/kwallet","unlisted":false}],"href":"/docs/category/utilities"},{"type":"category","label":"Virtualization","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"VirtualBox","href":"/docs/user/software/virtualization/virtualbox","docId":"user/software/virtualization/virtualbox","unlisted":false}],"href":"/docs/category/virtualization"},{"type":"category","label":"Web","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Open Broadcaster Software (OBS)","href":"/docs/user/software/web/obs","docId":"user/software/web/obs","unlisted":false}],"href":"/docs/category/web"}],"href":"/docs/category/software"},{"type":"category","label":"Troubleshooting","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Boot Rescue","href":"/docs/user/troubleshooting/boot-rescue","docId":"user/troubleshooting/boot-rescue","unlisted":false},{"type":"link","label":"Installation Issues","href":"/docs/user/troubleshooting/installation","docId":"user/troubleshooting/installation","unlisted":false},{"type":"link","label":"Plasma Troubleshooting","href":"/docs/user/troubleshooting/plasma","docId":"user/troubleshooting/plasma","unlisted":false}],"href":"/docs/user/troubleshooting/"}],"packagingSidebar":[{"type":"link","label":"Packaging Overview","href":"/docs/packaging/","docId":"packaging/index","unlisted":false},{"type":"link","label":"Prepare for Packaging","href":"/docs/packaging/prepare-for-packaging","docId":"packaging/prepare-for-packaging","unlisted":false},{"type":"link","label":"Update Your Development Environment","href":"/docs/packaging/update-dev-environment","docId":"packaging/update-dev-environment","unlisted":false},{"type":"link","label":"Creating a New Package","href":"/docs/packaging/creating-a-new-package","docId":"packaging/creating-a-new-package","unlisted":false},{"type":"link","label":"Updating an Existing Package","href":"/docs/packaging/updating-an-existing-package","docId":"packaging/updating-an-existing-package","unlisted":false},{"type":"link","label":"Testing a Package","href":"/docs/packaging/testing-a-package","docId":"packaging/testing-a-package","unlisted":false},{"type":"link","label":"Submitting a Pull Request for Review","href":"/docs/packaging/submitting-a-pull-request","docId":"packaging/submitting-a-pull-request","unlisted":false},{"type":"link","label":"Packaging Changes","href":"/docs/packaging/packaging-changes","docId":"packaging/packaging-changes","unlisted":false},{"type":"category","label":"Advanced Configuration","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Eopkg Configuration","href":"/docs/packaging/advanced-config/eopkg-configuration","docId":"packaging/advanced-config/eopkg-configuration","unlisted":false},{"type":"link","label":"Local Repository","href":"/docs/packaging/advanced-config/local-repository","docId":"packaging/advanced-config/local-repository","unlisted":false}],"href":"/docs/category/advanced-configuration"},{"type":"link","label":"Appstream Metainfo","href":"/docs/packaging/appstream-metainfo","docId":"packaging/appstream-metainfo","unlisted":false},{"type":"link","label":"Git Basics","href":"/docs/packaging/git-basics","docId":"packaging/git-basics","unlisted":false},{"type":"link","label":"Monitoring YAML","href":"/docs/packaging/monitoring.yml","docId":"packaging/monitoring.yml","unlisted":false},{"type":"link","label":"Package YAML","href":"/docs/packaging/package.yml","docId":"packaging/package.yml","unlisted":false},{"type":"link","label":"Packaging Practices","href":"/docs/packaging/packaging-practices","docId":"packaging/packaging-practices","unlisted":false},{"type":"category","label":"Procedures","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Maintainership","href":"/docs/packaging/procedures/maintainership","docId":"packaging/procedures/maintainership","unlisted":false},{"type":"link","label":"Package Inclusion Policy","href":"/docs/packaging/procedures/package-inclusion","docId":"packaging/procedures/package-inclusion","unlisted":false},{"type":"link","label":"Release Processes","href":"/docs/packaging/procedures/release-processes","docId":"packaging/procedures/release-processes","unlisted":false},{"type":"link","label":"Requesting a Package Update","href":"/docs/packaging/procedures/request-a-package-update","docId":"packaging/procedures/request-a-package-update","unlisted":false},{"type":"link","label":"Requesting a Package","href":"/docs/packaging/procedures/request-a-package","docId":"packaging/procedures/request-a-package","unlisted":false}],"href":"/docs/category/procedures"},{"type":"link","label":"Rebuilding a stack","href":"/docs/packaging/stack-rebuilds","docId":"packaging/stack-rebuilds","unlisted":false},{"type":"link","label":"Translation instructions","href":"/docs/packaging/translation-instructions","docId":"packaging/translation-instructions","unlisted":false},{"type":"link","label":"Troubleshooting for Packagers","href":"/docs/packaging/troubleshooting-packaging","docId":"packaging/troubleshooting-packaging","unlisted":false},{"type":"link","label":"Your First Package Update","href":"/docs/packaging/your-first-package-update","docId":"packaging/your-first-package-update","unlisted":false}]},"docs":{"packaging/advanced-config/eopkg-configuration":{"id":"packaging/advanced-config/eopkg-configuration","title":"Eopkg Configuration","description":"The eopkg configuration file changes how eopkg works. The first section in the config has settings for the process of building a package. The second section allows you to configure the directories that eopkg uses for various operations. Lastly, the [general] section contains settings for the general operation of eopkg.","sidebar":"packagingSidebar"},"packaging/advanced-config/local-repository":{"id":"packaging/advanced-config/local-repository","title":"Local Repository","description":"This guide walks you through the steps necessary to tell solbuild how to use your locally built .eopkg files that are not yet in the Solus repository.","sidebar":"packagingSidebar"},"packaging/appstream-metainfo":{"id":"packaging/appstream-metainfo","title":"Appstream Metainfo","description":"AppStream metainfo is required for all graphical application in Solus repository.","sidebar":"packagingSidebar"},"packaging/creating-a-new-package":{"id":"packaging/creating-a-new-package","title":"Creating a New Package","description":"This page will take you through the steps required to build a new package for the Solus package repositories. For this example, we will use the command line utility tree, which is already packaged for Solus, but we will pretend like it\'s not.","sidebar":"packagingSidebar"},"packaging/git-basics":{"id":"packaging/git-basics","title":"Git Basics","description":"Working with branches","sidebar":"packagingSidebar"},"packaging/index":{"id":"packaging/index","title":"Packaging Overview","description":"This is the overall workflow for creating or updating a package.","sidebar":"packagingSidebar"},"packaging/monitoring.yml":{"id":"packaging/monitoring.yml","title":"Monitoring YAML","description":"A monitoring.yml file is strongly suggested, but not yet required for Solus packages.","sidebar":"packagingSidebar"},"packaging/package.yml":{"id":"packaging/package.yml","title":"Package YAML","description":"Each package is generated from a single build file named package.yml. This file is sometimes also called a \\"recipe\\" since it provides steps for building a package. It provides all of the required metadata for the package manager, plus the packaging steps involved to produce a package. This file follows the YAML specification.","sidebar":"packagingSidebar"},"packaging/packaging-changes":{"id":"packaging/packaging-changes","title":"Packaging Changes","description":"This page is meant to serve as a changelog of sorts for the Solus packaging environment and the packaging instructions. Refer to specific help pages for more details.","sidebar":"packagingSidebar"},"packaging/packaging-practices":{"id":"packaging/packaging-practices","title":"Packaging Practices","description":"The primary goal of ypkg is ease of maintenance. In order to do so we ensure packages in the binary repository adhere to a strict set of conventions and practices.","sidebar":"packagingSidebar"},"packaging/prepare-for-packaging":{"id":"packaging/prepare-for-packaging","title":"Prepare for Packaging","description":"Switch to the Unstable repository","sidebar":"packagingSidebar"},"packaging/procedures/maintainership":{"id":"packaging/procedures/maintainership","title":"Maintainership","description":"The role of a maintainer is to update package(s) on a regular basis, while following Solus packaging and consistency standards.","sidebar":"packagingSidebar"},"packaging/procedures/package-inclusion":{"id":"packaging/procedures/package-inclusion","title":"Package Inclusion Policy","description":"This policy sets forth the criteria for a package to be accepted for inclusion into the Solus repositories or rejected.","sidebar":"packagingSidebar"},"packaging/procedures/release-processes":{"id":"packaging/procedures/release-processes","title":"Release Processes","description":"This post is intended as both information to users, and guidelines for developers and contributors of Solus. Solus employs a formal architecture to enable the curated rolling release model, which is made possible through the use of ferryd, solbuild and a split-repository model.","sidebar":"packagingSidebar"},"packaging/procedures/request-a-package":{"id":"packaging/procedures/request-a-package","title":"Requesting a Package","description":"If you think Solus is missing a package that would be useful, you can let us know using our Issue Tracker.","sidebar":"packagingSidebar"},"packaging/procedures/request-a-package-update":{"id":"packaging/procedures/request-a-package-update","title":"Requesting a Package Update","description":"Packages updates are typically provided by the community or dedicated package maintainers. If we are not shipping the latest stable release of a package, however, you can let us know.","sidebar":"packagingSidebar"},"packaging/stack-rebuilds":{"id":"packaging/stack-rebuilds","title":"Rebuilding a stack","description":"In packaging, a stack is a package and the packages that depend on it. Most commonly, this refers to libraries, such as the Poppler stack, but other software can be referred to a stack as well. One example is the GNOME stack, which includes the libraries and applications that are the core of the GNOME desktop environment. Packages that depend on another package are called that package\'s reverse dependencies. When updating a library, one has to be mindful of its reverse dependencies, and if they will need to be rebuilt after updating the library.","sidebar":"packagingSidebar"},"packaging/submitting-a-pull-request":{"id":"packaging/submitting-a-pull-request","title":"Submitting a Pull Request for Review","description":"Please refrain from submitting a pull request for the following instances:","sidebar":"packagingSidebar"},"packaging/testing-a-package":{"id":"packaging/testing-a-package","title":"Testing a Package","description":"After building a package, it must be tested against the unstable repository before a pull request can be submitted. Each pull request requires you to explain how you tested the package to make sure things work as expected.","sidebar":"packagingSidebar"},"packaging/translation-instructions":{"id":"packaging/translation-instructions","title":"Translation instructions","description":"Users will arrive here from the \\"Translation instructions\\" link on Transifex.","sidebar":"packagingSidebar"},"packaging/troubleshooting-packaging":{"id":"packaging/troubleshooting-packaging","title":"Troubleshooting for Packagers","description":"This page covers common packaging issues and how to fix them. We also show you how to share your packaging work so you can ask for help in the Solus Matrix rooms.","sidebar":"packagingSidebar"},"packaging/update-dev-environment":{"id":"packaging/update-dev-environment","title":"Update Your Development Environment","description":"Always make sure your development environment and system are up to date before beginning work on a package","sidebar":"packagingSidebar"},"packaging/updating-an-existing-package":{"id":"packaging/updating-an-existing-package","title":"Updating an Existing Package","description":"This article will go over updating a package that is already in the Solus package repositories.","sidebar":"packagingSidebar"},"packaging/your-first-package-update":{"id":"packaging/your-first-package-update","title":"Your First Package Update","description":"This page will guide you through the steps required to build your first package. This is really a test to make sure that your build environment is set up correctly. You will clone an existing package, build it, then install it, and finally remove it.","sidebar":"packagingSidebar"},"user/contributing/community-guidelines":{"id":"user/contributing/community-guidelines","title":"Community Guidelines","description":"Solus enforces a set of community guidelines to maintain a family-friendly, respectful, and professional environment.","sidebar":"userSidebar"},"user/contributing/getting-involved":{"id":"user/contributing/getting-involved","title":"Getting Involved","description":"Solus is a big undertaking, and as such there are many ways in which your involvement can help us. Naturally, that means there are also many ways in which you can help out.","sidebar":"userSidebar"},"user/contributing/style":{"id":"user/contributing/style","title":"Solus Style Guide","description":"Solus needs a style guide to give clarity to our contributors and a consistent experience for readers. But we don\'t want to write our own! We surveyed existing style guides, and we picked parts that were more suitable for our content.","sidebar":"userSidebar"},"user/contributing/testing-an-iso":{"id":"user/contributing/testing-an-iso","title":"Testing an ISO","description":"A handy checklist anyone can use for testing an ISO.","sidebar":"userSidebar"},"user/editions/budgie/configuration":{"id":"user/editions/budgie/configuration","title":"Configuration","description":"Date and Time","sidebar":"userSidebar"},"user/editions/budgie/index":{"id":"user/editions/budgie/index","title":"Budgie","description":"TODO: Add Budgie branding image","sidebar":"userSidebar"},"user/editions/budgie/tips-and-tricks":{"id":"user/editions/budgie/tips-and-tricks","title":"Tips and Tricks","description":"Budgie Shortcuts","sidebar":"userSidebar"},"user/editions/gnome/configuration":{"id":"user/editions/gnome/configuration","title":"Configuration","description":"System","sidebar":"userSidebar"},"user/editions/gnome/index":{"id":"user/editions/gnome/index","title":"GNOME","description":"GNOME Shell is provided by default with the GNOME Edition of Solus. They describe it as:","sidebar":"userSidebar"},"user/editions/gnome/tips-and-tricks":{"id":"user/editions/gnome/tips-and-tricks","title":"Tips and Tricks","description":"GNOME Keyboard Shortcuts","sidebar":"userSidebar"},"user/editions/index":{"id":"user/editions/index","title":"Editions","description":"","sidebar":"userSidebar"},"user/editions/mate/configuration":{"id":"user/editions/mate/configuration","title":"Configuration","description":"System","sidebar":"userSidebar"},"user/editions/mate/index":{"id":"user/editions/mate/index","title":"MATE","description":"The MATE Edition is deprecated. XFCE has been included to replace it. See the Solus 4.4 blog post here","sidebar":"userSidebar"},"user/editions/mate/tips-and-tricks":{"id":"user/editions/mate/tips-and-tricks","title":"Tips and Tricks","description":"MATE Keyboard Shortcuts","sidebar":"userSidebar"},"user/editions/plasma/configuration":{"id":"user/editions/plasma/configuration","title":"Configuration","description":"Opening System Settings","sidebar":"userSidebar"},"user/editions/plasma/index":{"id":"user/editions/plasma/index","title":"Plasma","description":"Solus Plasma","sidebar":"userSidebar"},"user/editions/plasma/tips-and-tricks":{"id":"user/editions/plasma/tips-and-tricks","title":"Tips and Tricks","description":"Keyboard shortcuts","sidebar":"userSidebar"},"user/editions/xfce/configuration":{"id":"user/editions/xfce/configuration","title":"Configuration","description":"TODO: Add configuration snippets for XFCE","sidebar":"userSidebar"},"user/editions/xfce/index":{"id":"user/editions/xfce/index","title":"XFCE","description":"XFCE is provided by the XFCE Edition of Solus. It is described as:","sidebar":"userSidebar"},"user/editions/xfce/tips-and-tricks":{"id":"user/editions/xfce/tips-and-tricks","title":"Tips and Tricks","description":"XFCE Keyboard Shortcuts","sidebar":"userSidebar"},"user/hardware/compatibility/laptops":{"id":"user/hardware/compatibility/laptops","title":"Laptops","description":"The following laptops have been tested and/or suggested to function correctly by our users.","sidebar":"userSidebar"},"user/hardware/compatibility/wifi":{"id":"user/hardware/compatibility/wifi","title":"WiFi","description":"The following wireless chipsets have been tested and/or suggested to function correctly by our users.","sidebar":"userSidebar"},"user/hardware/index":{"id":"user/hardware/index","title":"Hardware","description":"Preinstalled drivers","sidebar":"userSidebar"},"user/hardware/mobile/android":{"id":"user/hardware/mobile/android","title":"Android","description":"For the most part, Android devices will work out of the box on Solus. The experience is similar to other operating systems.","sidebar":"userSidebar"},"user/hardware/mobile/apple":{"id":"user/hardware/mobile/apple","title":"Apple","description":"Solus provides iOS support via libimobiledevice and libgpod.","sidebar":"userSidebar"},"user/hardware/peripherals/mice-and-touchpads":{"id":"user/hardware/peripherals/mice-and-touchpads","title":"Mice and Touchpads","description":"ASUS, Logitech, Roccat, SteelSeries","sidebar":"userSidebar"},"user/hardware/peripherals/midi-keyboard":{"id":"user/hardware/peripherals/midi-keyboard","title":"MIDI Keyboards","description":"These instructions will guide you through how to set up and use a USB-connected MIDI keyboard on Solus. This will easily let you use the keyboard to play music with a wide set of instruments.","sidebar":"userSidebar"},"user/hardware/peripherals/printers-and-scanners":{"id":"user/hardware/peripherals/printers-and-scanners","title":"Printers and Scanners","description":"Drivers","sidebar":"userSidebar"},"user/intro":{"id":"user/intro","title":"Welcome","description":"Solus is committed to helping users get the most out of their systems. We designed the help center to introduce our ecosystem and guide you through typical tasks you might need help with.","sidebar":"userSidebar"},"user/package-management/basics":{"id":"user/package-management/basics","title":"Basics to Package Management","description":"Solus uses the eopkg package manager. You can use eopkg to install, update, and remove software packages on your Solus system.","sidebar":"userSidebar"},"user/package-management/history-and-rollback":{"id":"user/package-management/history-and-rollback","title":"History and Software Rollback","description":"Solus offers a feature to view your history of software changes and revert your system to previous versions.","sidebar":"userSidebar"},"user/package-management/repo-management":{"id":"user/package-management/repo-management","title":"Repository Management","description":"Solus offers two main software sources: stable (shannon) and unstable. The eopkg package manager can use multiple sources on your system, which is helpful if you use a source provided by another vendor.","sidebar":"userSidebar"},"user/privacy":{"id":"user/privacy","title":"Privacy Policy","description":"Solus installations","sidebar":"userSidebar"},"user/quick-start/boot-management":{"id":"user/quick-start/boot-management","title":"Boot Management","description":"clr-boot-manager","sidebar":"userSidebar"},"user/quick-start/default-applications":{"id":"user/quick-start/default-applications","title":"Default Applications","description":"Each version of Solus comes with a pre-installed collection of desktop applications that can help you perform common tasks.","sidebar":"userSidebar"},"user/quick-start/installation/disks":{"id":"user/quick-start/installation/disks","title":"Disk Partitioning","description":"Solus provides multiple ways you can install onto your system.","sidebar":"userSidebar"},"user/quick-start/installation/index":{"id":"user/quick-start/installation/index","title":"Preparing to Install","description":"Before you start, make sure your system meets the minimum requirements.","sidebar":"userSidebar"},"user/quick-start/installation/secure-boot":{"id":"user/quick-start/installation/secure-boot","title":"Booting with Secure Boot Enabled","description":"Since Solus 4.4 Secure Boot is now supported. When you first boot the ISO, and, if you have Secure Boot enabled in your UEFI firmware; you will have to perform the one-time-step of manually enrolling the Solus certificate. The following guide will walk you through this. If you already have Solus installed and wish to enable Secure Boot, skip ahead here.","sidebar":"userSidebar"},"user/quick-start/installation/system-requirements":{"id":"user/quick-start/installation/system-requirements","title":"System Requirements","description":"- A blank DVD or a USB drive that is at least 3 GB","sidebar":"userSidebar"},"user/quick-start/software-center/index":{"id":"user/quick-start/software-center/index","title":"Software Center","description":"You can install software ranging from Google Chrome to LibreOffice, as well as update software, via our Software Center.","sidebar":"userSidebar"},"user/software/camera/droidcam":{"id":"user/software/camera/droidcam","title":"DroidCam","description":"DroidCam turns your phone or tablet into a webcam for your computer. You can use it with video conferencing programs like Zoom, MS Teams, and Skype.","sidebar":"userSidebar"},"user/software/command-line/index":{"id":"user/software/command-line/index","title":"Command Line","description":"Changing Shell","sidebar":"userSidebar"},"user/software/configuration_files":{"id":"user/software/configuration_files","title":"Configuration File Locations","description":"These are the standard locations on a Solus installation for software configuration files.","sidebar":"userSidebar"},"user/software/desktops/index":{"id":"user/software/desktops/index","title":"Desktops","description":"Solus offers a multitude of desktop environments, ranging from the feature-rich and modern Budgie to the traditional XFCE experience. It is recommended to use the ISO for a specific desktop environment but it is possible to install them afterwards if you wish to do try one out.","sidebar":"userSidebar"},"user/software/development/containers":{"id":"user/software/development/containers","title":"Containers","description":"Containers are a popular method to run and configure applications in a confined environment without directly installing the application and all its dependencies. Solus provides the following container technologies:","sidebar":"userSidebar"},"user/software/development/index":{"id":"user/software/development/index","title":"Development","description":"Solus provides a stable foundation for creating, testing, and deploying applications.","sidebar":"userSidebar"},"user/software/development/java":{"id":"user/software/development/java","title":"Java","description":"Solus includes multiple LTS versions of Java in the repositories. You can install more than one version in your system at once.","sidebar":"userSidebar"},"user/software/development/postgresql":{"id":"user/software/development/postgresql","title":"PostgreSQL","description":"PostgreSQL is an open source object-relational database system. The postgresql package in Solus includes the PostgreSQL library, client and server.","sidebar":"userSidebar"},"user/software/development/r-and-rstudio":{"id":"user/software/development/r-and-rstudio","title":"R and RStudio","description":"Covers the basics of how to install R and RStudio on Solus and how to install required dependencies for installing additional CRAN libraries.","sidebar":"userSidebar"},"user/software/development/rust":{"id":"user/software/development/rust","title":"Rust","description":"There are two ways to install Rust. This article explains how they differ and which one should be used, according to users\' needs.","sidebar":"userSidebar"},"user/software/development/web":{"id":"user/software/development/web","title":"Web Development","description":"Solus provides multiple web servers for local testing of web applications.","sidebar":"userSidebar"},"user/software/gaming/index":{"id":"user/software/gaming/index","title":"Gaming","description":"Heroes of Newerth","sidebar":"userSidebar"},"user/software/localization/ibus":{"id":"user/software/localization/ibus","title":"IBus","description":"Configuration","sidebar":"userSidebar"},"user/software/networking/samba":{"id":"user/software/networking/samba","title":"Samba File Sharing","description":"Samba is the standard Windows interoperability suite of programs for Linux and Unix. Among other things, it allows Linux, macOS and Windows users to share files via the Server Message Block (SMB) protocol.","sidebar":"userSidebar"},"user/software/networking/tigervnc":{"id":"user/software/networking/tigervnc","title":"TigerVNC","description":"TigerVNC is a high-performance implementation of the VNC protocol, which allows you to control/view desktops remotely over the internet.","sidebar":"userSidebar"},"user/software/networking/wireshark":{"id":"user/software/networking/wireshark","title":"Wireshark","description":"Wireshark is a widely-used network protocol analyzer that lets you see what\u2019s happening on a network at a microscopic level.","sidebar":"userSidebar"},"user/software/networking/xrdp":{"id":"user/software/networking/xrdp","title":"XRDP","description":"xrdp provides a graphical login to remote machines using Microsoft Remote Desktop Protocol (RDP). xrdp accepts connections from a variety of RDP clients: FreeRDP, rdesktop, NeutrinoRDP and Microsoft Remote Desktop Client (for Windows, Mac OS, iOS and Android).","sidebar":"userSidebar"},"user/software/sound/index":{"id":"user/software/sound/index","title":"Sound","description":"Solus comes with PipeWire configured by default.","sidebar":"userSidebar"},"user/software/third-party/index":{"id":"user/software/third-party/index","title":"Third Party","description":"The following applications are provided via our 3rd Party Repository to facilitate the installation and usage of them. These applications cannot be included in the primary repository due to licensing issues.","sidebar":"userSidebar"},"user/software/third-party/snap":{"id":"user/software/third-party/snap","title":"Snap","description":"Note that snaps are going to be removed from Solus in the future,","sidebar":"userSidebar"},"user/software/utilities/ksysguard":{"id":"user/software/utilities/ksysguard","title":"KSysGuard","description":"KSysGuard, also known as KDE System Guard and KDE System Monitor, is designed to make simple process control available to a user without needing to do any special setup.","sidebar":"userSidebar"},"user/software/utilities/kwallet":{"id":"user/software/utilities/kwallet","title":"KDE Wallet","description":"In KDE Plasma, the KDE Wallet is responsible for securely storing and supplying user credentials to the various KDE applications that request them.","sidebar":"userSidebar"},"user/software/virtualization/virtualbox":{"id":"user/software/virtualization/virtualbox","title":"VirtualBox","description":"VirtualBox is an x86 and x86_64 virtualization software package developed by Oracle.","sidebar":"userSidebar"},"user/software/web/obs":{"id":"user/software/web/obs","title":"Open Broadcaster Software (OBS)","description":"This article covers the installation of OBS Studio as well as the use of third-party plugins.","sidebar":"userSidebar"},"user/troubleshooting/boot-rescue":{"id":"user/troubleshooting/boot-rescue","title":"Boot Rescue","description":"In this document, we will walk through restoring the ability to boot Solus.","sidebar":"userSidebar"},"user/troubleshooting/index":{"id":"user/troubleshooting/index","title":"Troubleshooting","description":"This guide provides some basic troubleshooting instructions for when you have an issue in Solus. Before reporting bugs, it is important to check that your Solus installation is not missing files, or suffering from a corrupted disk. You should also ensure your system is fully up to date as the bug may have already been fixed.","sidebar":"userSidebar"},"user/troubleshooting/installation":{"id":"user/troubleshooting/installation","title":"Installation Issues","description":"This article covers various issues that you may come across during installation of Solus.","sidebar":"userSidebar"},"user/troubleshooting/plasma":{"id":"user/troubleshooting/plasma","title":"Plasma Troubleshooting","description":"This contains fixes for various issues you might encounter with the Plasma desktop environment.","sidebar":"userSidebar"}}}}')}}]); \ No newline at end of file diff --git a/assets/js/0058b4c6.a676eb23.js b/assets/js/0058b4c6.a676eb23.js new file mode 100644 index 000000000..6124b75a1 --- /dev/null +++ b/assets/js/0058b4c6.a676eb23.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([["1489"],{67136:function(e){e.exports=JSON.parse('{"version":{"pluginId":"default","version":"current","label":"Next","banner":null,"badge":false,"noIndex":false,"className":"docs-version-current","isLast":true,"docsSidebars":{"userSidebar":[{"type":"link","label":"Welcome","href":"/docs/user/intro","docId":"user/intro","unlisted":false},{"type":"category","label":"Quick Start","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Boot Management","href":"/docs/user/quick-start/boot-management","docId":"user/quick-start/boot-management","unlisted":false},{"type":"link","label":"Default Applications","href":"/docs/user/quick-start/default-applications","docId":"user/quick-start/default-applications","unlisted":false},{"type":"category","label":"Preparing to Install","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Disk Partitioning","href":"/docs/user/quick-start/installation/disks","docId":"user/quick-start/installation/disks","unlisted":false},{"type":"link","label":"Booting with Secure Boot Enabled","href":"/docs/user/quick-start/installation/secure-boot","docId":"user/quick-start/installation/secure-boot","unlisted":false},{"type":"link","label":"System Requirements","href":"/docs/user/quick-start/installation/system-requirements","docId":"user/quick-start/installation/system-requirements","unlisted":false}],"href":"/docs/user/quick-start/installation/"},{"type":"link","label":"Software Center","href":"/docs/user/quick-start/software-center/","docId":"user/quick-start/software-center/index","unlisted":false}],"href":"/docs/category/quick-start"},{"type":"category","label":"Contributing","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Community Guidelines","href":"/docs/user/contributing/community-guidelines","docId":"user/contributing/community-guidelines","unlisted":false},{"type":"link","label":"Getting Involved","href":"/docs/user/contributing/getting-involved","docId":"user/contributing/getting-involved","unlisted":false},{"type":"link","label":"Solus Style Guide","href":"/docs/user/contributing/style","docId":"user/contributing/style","unlisted":false},{"type":"link","label":"Testing an ISO","href":"/docs/user/contributing/testing-an-iso","docId":"user/contributing/testing-an-iso","unlisted":false}],"href":"/docs/category/contributing"},{"type":"category","label":"Editions","collapsible":true,"collapsed":true,"items":[{"type":"category","label":"Budgie","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Configuration","href":"/docs/user/editions/budgie/configuration","docId":"user/editions/budgie/configuration","unlisted":false},{"type":"link","label":"Tips and Tricks","href":"/docs/user/editions/budgie/tips-and-tricks","docId":"user/editions/budgie/tips-and-tricks","unlisted":false}],"href":"/docs/user/editions/budgie/"},{"type":"category","label":"GNOME","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Configuration","href":"/docs/user/editions/gnome/configuration","docId":"user/editions/gnome/configuration","unlisted":false},{"type":"link","label":"Tips and Tricks","href":"/docs/user/editions/gnome/tips-and-tricks","docId":"user/editions/gnome/tips-and-tricks","unlisted":false}],"href":"/docs/user/editions/gnome/"},{"type":"category","label":"MATE","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Configuration","href":"/docs/user/editions/mate/configuration","docId":"user/editions/mate/configuration","unlisted":false},{"type":"link","label":"Tips and Tricks","href":"/docs/user/editions/mate/tips-and-tricks","docId":"user/editions/mate/tips-and-tricks","unlisted":false}],"href":"/docs/user/editions/mate/"},{"type":"category","label":"Plasma","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Configuration","href":"/docs/user/editions/plasma/configuration","docId":"user/editions/plasma/configuration","unlisted":false},{"type":"link","label":"Tips and Tricks","href":"/docs/user/editions/plasma/tips-and-tricks","docId":"user/editions/plasma/tips-and-tricks","unlisted":false}],"href":"/docs/user/editions/plasma/"},{"type":"category","label":"XFCE","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Configuration","href":"/docs/user/editions/xfce/configuration","docId":"user/editions/xfce/configuration","unlisted":false},{"type":"link","label":"Tips and Tricks","href":"/docs/user/editions/xfce/tips-and-tricks","docId":"user/editions/xfce/tips-and-tricks","unlisted":false}],"href":"/docs/user/editions/xfce/"}],"href":"/docs/user/editions/"},{"type":"category","label":"Hardware","collapsible":true,"collapsed":true,"items":[{"type":"category","label":"Compatibility","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Laptops","href":"/docs/user/hardware/compatibility/laptops","docId":"user/hardware/compatibility/laptops","unlisted":false},{"type":"link","label":"WiFi","href":"/docs/user/hardware/compatibility/wifi","docId":"user/hardware/compatibility/wifi","unlisted":false}],"href":"/docs/category/compatibility"},{"type":"category","label":"Mobile","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Android","href":"/docs/user/hardware/mobile/android","docId":"user/hardware/mobile/android","unlisted":false},{"type":"link","label":"Apple","href":"/docs/user/hardware/mobile/apple","docId":"user/hardware/mobile/apple","unlisted":false}],"href":"/docs/category/mobile"},{"type":"category","label":"Peripherals","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Mice and Touchpads","href":"/docs/user/hardware/peripherals/mice-and-touchpads","docId":"user/hardware/peripherals/mice-and-touchpads","unlisted":false},{"type":"link","label":"MIDI Keyboards","href":"/docs/user/hardware/peripherals/midi-keyboard","docId":"user/hardware/peripherals/midi-keyboard","unlisted":false},{"type":"link","label":"Printers and Scanners","href":"/docs/user/hardware/peripherals/printers-and-scanners","docId":"user/hardware/peripherals/printers-and-scanners","unlisted":false}],"href":"/docs/category/peripherals"}],"href":"/docs/user/hardware/"},{"type":"category","label":"Package Management","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Basics to Package Management","href":"/docs/user/package-management/basics","docId":"user/package-management/basics","unlisted":false},{"type":"link","label":"History and Software Rollback","href":"/docs/user/package-management/history-and-rollback","docId":"user/package-management/history-and-rollback","unlisted":false},{"type":"link","label":"Repository Management","href":"/docs/user/package-management/repo-management","docId":"user/package-management/repo-management","unlisted":false}],"href":"/docs/category/package-management"},{"type":"link","label":"Privacy Policy","href":"/docs/user/privacy","docId":"user/privacy","unlisted":false},{"type":"category","label":"Software","collapsible":true,"collapsed":true,"items":[{"type":"category","label":"Camera","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"DroidCam","href":"/docs/user/software/camera/droidcam","docId":"user/software/camera/droidcam","unlisted":false}],"href":"/docs/category/camera"},{"type":"link","label":"Command Line","href":"/docs/user/software/command-line/","docId":"user/software/command-line/index","unlisted":false},{"type":"link","label":"Configuration File Locations","href":"/docs/user/software/configuration_files","docId":"user/software/configuration_files","unlisted":false},{"type":"link","label":"Desktops","href":"/docs/user/software/desktops/","docId":"user/software/desktops/index","unlisted":false},{"type":"category","label":"Development","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Containers","href":"/docs/user/software/development/containers","docId":"user/software/development/containers","unlisted":false},{"type":"link","label":"Java","href":"/docs/user/software/development/java","docId":"user/software/development/java","unlisted":false},{"type":"link","label":"PostgreSQL","href":"/docs/user/software/development/postgresql","docId":"user/software/development/postgresql","unlisted":false},{"type":"link","label":"R and RStudio","href":"/docs/user/software/development/r-and-rstudio","docId":"user/software/development/r-and-rstudio","unlisted":false},{"type":"link","label":"Rust","href":"/docs/user/software/development/rust","docId":"user/software/development/rust","unlisted":false},{"type":"link","label":"Web Development","href":"/docs/user/software/development/web","docId":"user/software/development/web","unlisted":false}],"href":"/docs/user/software/development/"},{"type":"link","label":"Gaming","href":"/docs/user/software/gaming/","docId":"user/software/gaming/index","unlisted":false},{"type":"category","label":"Localization","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"IBus","href":"/docs/user/software/localization/ibus","docId":"user/software/localization/ibus","unlisted":false}],"href":"/docs/category/localization"},{"type":"category","label":"Networking","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Samba File Sharing","href":"/docs/user/software/networking/samba","docId":"user/software/networking/samba","unlisted":false},{"type":"link","label":"TigerVNC","href":"/docs/user/software/networking/tigervnc","docId":"user/software/networking/tigervnc","unlisted":false},{"type":"link","label":"Wireshark","href":"/docs/user/software/networking/wireshark","docId":"user/software/networking/wireshark","unlisted":false},{"type":"link","label":"XRDP","href":"/docs/user/software/networking/xrdp","docId":"user/software/networking/xrdp","unlisted":false}],"href":"/docs/category/networking"},{"type":"link","label":"Sound","href":"/docs/user/software/sound/","docId":"user/software/sound/index","unlisted":false},{"type":"category","label":"Third Party","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Snap","href":"/docs/user/software/third-party/snap","docId":"user/software/third-party/snap","unlisted":false}],"href":"/docs/user/software/third-party/"},{"type":"category","label":"Utilities","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"KSysGuard","href":"/docs/user/software/utilities/ksysguard","docId":"user/software/utilities/ksysguard","unlisted":false},{"type":"link","label":"KDE Wallet","href":"/docs/user/software/utilities/kwallet","docId":"user/software/utilities/kwallet","unlisted":false}],"href":"/docs/category/utilities"},{"type":"category","label":"Virtualization","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"VirtualBox","href":"/docs/user/software/virtualization/virtualbox","docId":"user/software/virtualization/virtualbox","unlisted":false}],"href":"/docs/category/virtualization"},{"type":"category","label":"Web","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Open Broadcaster Software (OBS)","href":"/docs/user/software/web/obs","docId":"user/software/web/obs","unlisted":false}],"href":"/docs/category/web"}],"href":"/docs/category/software"},{"type":"category","label":"Troubleshooting","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Boot Rescue","href":"/docs/user/troubleshooting/boot-rescue","docId":"user/troubleshooting/boot-rescue","unlisted":false},{"type":"link","label":"Installation Issues","href":"/docs/user/troubleshooting/installation","docId":"user/troubleshooting/installation","unlisted":false},{"type":"link","label":"Plasma Troubleshooting","href":"/docs/user/troubleshooting/plasma","docId":"user/troubleshooting/plasma","unlisted":false}],"href":"/docs/user/troubleshooting/"}],"packagingSidebar":[{"type":"link","label":"Packaging Overview","href":"/docs/packaging/","docId":"packaging/index","unlisted":false},{"type":"link","label":"Prepare for Packaging","href":"/docs/packaging/prepare-for-packaging","docId":"packaging/prepare-for-packaging","unlisted":false},{"type":"link","label":"Update Your Development Environment","href":"/docs/packaging/update-dev-environment","docId":"packaging/update-dev-environment","unlisted":false},{"type":"link","label":"Creating a New Package","href":"/docs/packaging/creating-a-new-package","docId":"packaging/creating-a-new-package","unlisted":false},{"type":"link","label":"Updating an Existing Package","href":"/docs/packaging/updating-an-existing-package","docId":"packaging/updating-an-existing-package","unlisted":false},{"type":"link","label":"Testing a Package","href":"/docs/packaging/testing-a-package","docId":"packaging/testing-a-package","unlisted":false},{"type":"link","label":"Submitting a Pull Request for Review","href":"/docs/packaging/submitting-a-pull-request","docId":"packaging/submitting-a-pull-request","unlisted":false},{"type":"link","label":"Packaging Changes","href":"/docs/packaging/packaging-changes","docId":"packaging/packaging-changes","unlisted":false},{"type":"category","label":"Advanced Configuration","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Eopkg Configuration","href":"/docs/packaging/advanced-config/eopkg-configuration","docId":"packaging/advanced-config/eopkg-configuration","unlisted":false},{"type":"link","label":"Local Repository","href":"/docs/packaging/advanced-config/local-repository","docId":"packaging/advanced-config/local-repository","unlisted":false}],"href":"/docs/category/advanced-configuration"},{"type":"link","label":"Appstream Metainfo","href":"/docs/packaging/appstream-metainfo","docId":"packaging/appstream-metainfo","unlisted":false},{"type":"link","label":"Git Basics","href":"/docs/packaging/git-basics","docId":"packaging/git-basics","unlisted":false},{"type":"link","label":"Monitoring YAML","href":"/docs/packaging/monitoring.yml","docId":"packaging/monitoring.yml","unlisted":false},{"type":"link","label":"Package YAML","href":"/docs/packaging/package.yml","docId":"packaging/package.yml","unlisted":false},{"type":"link","label":"Packaging Practices","href":"/docs/packaging/packaging-practices","docId":"packaging/packaging-practices","unlisted":false},{"type":"category","label":"Procedures","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Maintainership","href":"/docs/packaging/procedures/maintainership","docId":"packaging/procedures/maintainership","unlisted":false},{"type":"link","label":"Package Inclusion Policy","href":"/docs/packaging/procedures/package-inclusion","docId":"packaging/procedures/package-inclusion","unlisted":false},{"type":"link","label":"Release Processes","href":"/docs/packaging/procedures/release-processes","docId":"packaging/procedures/release-processes","unlisted":false},{"type":"link","label":"Requesting a Package Update","href":"/docs/packaging/procedures/request-a-package-update","docId":"packaging/procedures/request-a-package-update","unlisted":false},{"type":"link","label":"Requesting a Package","href":"/docs/packaging/procedures/request-a-package","docId":"packaging/procedures/request-a-package","unlisted":false}],"href":"/docs/category/procedures"},{"type":"link","label":"Rebuilding a stack","href":"/docs/packaging/stack-rebuilds","docId":"packaging/stack-rebuilds","unlisted":false},{"type":"link","label":"Translation instructions","href":"/docs/packaging/translation-instructions","docId":"packaging/translation-instructions","unlisted":false},{"type":"link","label":"Troubleshooting for Packagers","href":"/docs/packaging/troubleshooting-packaging","docId":"packaging/troubleshooting-packaging","unlisted":false},{"type":"link","label":"Your First Package Update","href":"/docs/packaging/your-first-package-update","docId":"packaging/your-first-package-update","unlisted":false}]},"docs":{"packaging/advanced-config/eopkg-configuration":{"id":"packaging/advanced-config/eopkg-configuration","title":"Eopkg Configuration","description":"The eopkg configuration file changes how eopkg works. The first section in the config has settings for the process of building a package. The second section allows you to configure the directories that eopkg uses for various operations. Lastly, the [general] section contains settings for the general operation of eopkg.","sidebar":"packagingSidebar"},"packaging/advanced-config/local-repository":{"id":"packaging/advanced-config/local-repository","title":"Local Repository","description":"This guide walks you through the steps necessary to tell solbuild how to use your locally built .eopkg files that are not yet in the Solus repository.","sidebar":"packagingSidebar"},"packaging/appstream-metainfo":{"id":"packaging/appstream-metainfo","title":"Appstream Metainfo","description":"AppStream metainfo is required for all graphical application in Solus repository.","sidebar":"packagingSidebar"},"packaging/creating-a-new-package":{"id":"packaging/creating-a-new-package","title":"Creating a New Package","description":"This page will take you through the steps required to build a new package for the Solus package repositories. For this example, we will use the command line utility tree, which is already packaged for Solus, but we will pretend like it\'s not.","sidebar":"packagingSidebar"},"packaging/git-basics":{"id":"packaging/git-basics","title":"Git Basics","description":"Working with branches","sidebar":"packagingSidebar"},"packaging/index":{"id":"packaging/index","title":"Packaging Overview","description":"This is the overall workflow for creating or updating a package.","sidebar":"packagingSidebar"},"packaging/monitoring.yml":{"id":"packaging/monitoring.yml","title":"Monitoring YAML","description":"A monitoring.yml file is strongly suggested, but not yet required for Solus packages.","sidebar":"packagingSidebar"},"packaging/package.yml":{"id":"packaging/package.yml","title":"Package YAML","description":"Each package is generated from a single build file named package.yml. This file is sometimes also called a \\"recipe\\" since it provides steps for building a package. It provides all of the required metadata for the package manager, plus the packaging steps involved to produce a package. This file follows the YAML specification.","sidebar":"packagingSidebar"},"packaging/packaging-changes":{"id":"packaging/packaging-changes","title":"Packaging Changes","description":"This page is meant to serve as a changelog of sorts for the Solus packaging environment and the packaging instructions. Refer to specific help pages for more details.","sidebar":"packagingSidebar"},"packaging/packaging-practices":{"id":"packaging/packaging-practices","title":"Packaging Practices","description":"The primary goal of ypkg is ease of maintenance. In order to do so we ensure packages in the binary repository adhere to a strict set of conventions and practices.","sidebar":"packagingSidebar"},"packaging/prepare-for-packaging":{"id":"packaging/prepare-for-packaging","title":"Prepare for Packaging","description":"Switch to the Unstable repository","sidebar":"packagingSidebar"},"packaging/procedures/maintainership":{"id":"packaging/procedures/maintainership","title":"Maintainership","description":"The role of a maintainer is to update package(s) on a regular basis, while following Solus packaging and consistency standards.","sidebar":"packagingSidebar"},"packaging/procedures/package-inclusion":{"id":"packaging/procedures/package-inclusion","title":"Package Inclusion Policy","description":"This policy sets forth the criteria for a package to be accepted for inclusion into the Solus repositories or rejected.","sidebar":"packagingSidebar"},"packaging/procedures/release-processes":{"id":"packaging/procedures/release-processes","title":"Release Processes","description":"This post is intended as both information to users, and guidelines for developers and contributors of Solus. Solus employs a formal architecture to enable the curated rolling release model, which is made possible through the use of ferryd, solbuild and a split-repository model.","sidebar":"packagingSidebar"},"packaging/procedures/request-a-package":{"id":"packaging/procedures/request-a-package","title":"Requesting a Package","description":"If you think Solus is missing a package that would be useful, you can let us know using our Issue Tracker.","sidebar":"packagingSidebar"},"packaging/procedures/request-a-package-update":{"id":"packaging/procedures/request-a-package-update","title":"Requesting a Package Update","description":"Packages updates are typically provided by the community or dedicated package maintainers. If we are not shipping the latest stable release of a package, however, you can let us know.","sidebar":"packagingSidebar"},"packaging/stack-rebuilds":{"id":"packaging/stack-rebuilds","title":"Rebuilding a stack","description":"In packaging, a stack is a package and the packages that depend on it. Most commonly, this refers to libraries, such as the Poppler stack, but other software can be referred to a stack as well. One example is the GNOME stack, which includes the libraries and applications that are the core of the GNOME desktop environment. Packages that depend on another package are called that package\'s reverse dependencies. When updating a library, one has to be mindful of its reverse dependencies, and if they will need to be rebuilt after updating the library.","sidebar":"packagingSidebar"},"packaging/submitting-a-pull-request":{"id":"packaging/submitting-a-pull-request","title":"Submitting a Pull Request for Review","description":"Please refrain from submitting a pull request for the following instances:","sidebar":"packagingSidebar"},"packaging/testing-a-package":{"id":"packaging/testing-a-package","title":"Testing a Package","description":"After building a package, it must be tested against the unstable repository before a pull request can be submitted. Each pull request requires you to explain how you tested the package to make sure things work as expected.","sidebar":"packagingSidebar"},"packaging/translation-instructions":{"id":"packaging/translation-instructions","title":"Translation instructions","description":"Users will arrive here from the \\"Translation instructions\\" link on Transifex.","sidebar":"packagingSidebar"},"packaging/troubleshooting-packaging":{"id":"packaging/troubleshooting-packaging","title":"Troubleshooting for Packagers","description":"This page covers common packaging issues and how to fix them. We also show you how to share your packaging work so you can ask for help in the Solus Matrix rooms.","sidebar":"packagingSidebar"},"packaging/update-dev-environment":{"id":"packaging/update-dev-environment","title":"Update Your Development Environment","description":"Always make sure your development environment and system are up to date before beginning work on a package","sidebar":"packagingSidebar"},"packaging/updating-an-existing-package":{"id":"packaging/updating-an-existing-package","title":"Updating an Existing Package","description":"This article will go over updating a package that is already in the Solus package repositories.","sidebar":"packagingSidebar"},"packaging/your-first-package-update":{"id":"packaging/your-first-package-update","title":"Your First Package Update","description":"This page will guide you through the steps required to build your first package. This is really a test to make sure that your build environment is set up correctly. You will clone an existing package, build it, then install it, and finally remove it.","sidebar":"packagingSidebar"},"user/contributing/community-guidelines":{"id":"user/contributing/community-guidelines","title":"Community Guidelines","description":"Solus enforces a set of community guidelines to maintain a family-friendly, respectful, and professional environment.","sidebar":"userSidebar"},"user/contributing/getting-involved":{"id":"user/contributing/getting-involved","title":"Getting Involved","description":"Solus is a big undertaking, and as such there are many ways in which your involvement can help us. Naturally, that means there are also many ways in which you can help out.","sidebar":"userSidebar"},"user/contributing/style":{"id":"user/contributing/style","title":"Solus Style Guide","description":"Solus needs a style guide to give clarity to our contributors and a consistent experience for readers. But we don\'t want to write our own! We surveyed existing style guides, and we picked parts that were more suitable for our content.","sidebar":"userSidebar"},"user/contributing/testing-an-iso":{"id":"user/contributing/testing-an-iso","title":"Testing an ISO","description":"A handy checklist anyone can use for testing an ISO.","sidebar":"userSidebar"},"user/editions/budgie/configuration":{"id":"user/editions/budgie/configuration","title":"Configuration","description":"Date and Time","sidebar":"userSidebar"},"user/editions/budgie/index":{"id":"user/editions/budgie/index","title":"Budgie","description":"TODO: Add Budgie branding image","sidebar":"userSidebar"},"user/editions/budgie/tips-and-tricks":{"id":"user/editions/budgie/tips-and-tricks","title":"Tips and Tricks","description":"Budgie Shortcuts","sidebar":"userSidebar"},"user/editions/gnome/configuration":{"id":"user/editions/gnome/configuration","title":"Configuration","description":"System","sidebar":"userSidebar"},"user/editions/gnome/index":{"id":"user/editions/gnome/index","title":"GNOME","description":"GNOME Shell is provided by default with the GNOME Edition of Solus. They describe it as:","sidebar":"userSidebar"},"user/editions/gnome/tips-and-tricks":{"id":"user/editions/gnome/tips-and-tricks","title":"Tips and Tricks","description":"GNOME Keyboard Shortcuts","sidebar":"userSidebar"},"user/editions/index":{"id":"user/editions/index","title":"Editions","description":"","sidebar":"userSidebar"},"user/editions/mate/configuration":{"id":"user/editions/mate/configuration","title":"Configuration","description":"System","sidebar":"userSidebar"},"user/editions/mate/index":{"id":"user/editions/mate/index","title":"MATE","description":"The MATE Edition is deprecated. XFCE has been included to replace it. See the Solus 4.4 blog post here","sidebar":"userSidebar"},"user/editions/mate/tips-and-tricks":{"id":"user/editions/mate/tips-and-tricks","title":"Tips and Tricks","description":"MATE Keyboard Shortcuts","sidebar":"userSidebar"},"user/editions/plasma/configuration":{"id":"user/editions/plasma/configuration","title":"Configuration","description":"Opening System Settings","sidebar":"userSidebar"},"user/editions/plasma/index":{"id":"user/editions/plasma/index","title":"Plasma","description":"Solus Plasma","sidebar":"userSidebar"},"user/editions/plasma/tips-and-tricks":{"id":"user/editions/plasma/tips-and-tricks","title":"Tips and Tricks","description":"Keyboard shortcuts","sidebar":"userSidebar"},"user/editions/xfce/configuration":{"id":"user/editions/xfce/configuration","title":"Configuration","description":"TODO: Add configuration snippets for XFCE","sidebar":"userSidebar"},"user/editions/xfce/index":{"id":"user/editions/xfce/index","title":"XFCE","description":"XFCE is provided by the XFCE Edition of Solus. It is described as:","sidebar":"userSidebar"},"user/editions/xfce/tips-and-tricks":{"id":"user/editions/xfce/tips-and-tricks","title":"Tips and Tricks","description":"XFCE Keyboard Shortcuts","sidebar":"userSidebar"},"user/hardware/compatibility/laptops":{"id":"user/hardware/compatibility/laptops","title":"Laptops","description":"The following laptops have been tested and/or suggested to function correctly by our users.","sidebar":"userSidebar"},"user/hardware/compatibility/wifi":{"id":"user/hardware/compatibility/wifi","title":"WiFi","description":"The following wireless chipsets have been tested and/or suggested to function correctly by our users.","sidebar":"userSidebar"},"user/hardware/index":{"id":"user/hardware/index","title":"Hardware","description":"Preinstalled drivers","sidebar":"userSidebar"},"user/hardware/mobile/android":{"id":"user/hardware/mobile/android","title":"Android","description":"For the most part, Android devices will work out of the box on Solus. The experience is similar to other operating systems.","sidebar":"userSidebar"},"user/hardware/mobile/apple":{"id":"user/hardware/mobile/apple","title":"Apple","description":"Solus provides iOS support via libimobiledevice and libgpod.","sidebar":"userSidebar"},"user/hardware/peripherals/mice-and-touchpads":{"id":"user/hardware/peripherals/mice-and-touchpads","title":"Mice and Touchpads","description":"ASUS, Logitech, Roccat, SteelSeries","sidebar":"userSidebar"},"user/hardware/peripherals/midi-keyboard":{"id":"user/hardware/peripherals/midi-keyboard","title":"MIDI Keyboards","description":"These instructions will guide you through how to set up and use a USB-connected MIDI keyboard on Solus. This will easily let you use the keyboard to play music with a wide set of instruments.","sidebar":"userSidebar"},"user/hardware/peripherals/printers-and-scanners":{"id":"user/hardware/peripherals/printers-and-scanners","title":"Printers and Scanners","description":"Drivers","sidebar":"userSidebar"},"user/intro":{"id":"user/intro","title":"Welcome","description":"Solus is committed to helping users get the most out of their systems. We designed the help center to introduce our ecosystem and guide you through typical tasks you might need help with.","sidebar":"userSidebar"},"user/package-management/basics":{"id":"user/package-management/basics","title":"Basics to Package Management","description":"Solus uses the eopkg package manager. You can use eopkg to install, update, and remove software packages on your Solus system.","sidebar":"userSidebar"},"user/package-management/history-and-rollback":{"id":"user/package-management/history-and-rollback","title":"History and Software Rollback","description":"Solus offers a feature to view your history of software changes and revert your system to previous versions.","sidebar":"userSidebar"},"user/package-management/repo-management":{"id":"user/package-management/repo-management","title":"Repository Management","description":"Solus offers two main software sources: stable (shannon) and unstable. The eopkg package manager can use multiple sources on your system, which is helpful if you use a source provided by another vendor.","sidebar":"userSidebar"},"user/privacy":{"id":"user/privacy","title":"Privacy Policy","description":"Solus installations","sidebar":"userSidebar"},"user/quick-start/boot-management":{"id":"user/quick-start/boot-management","title":"Boot Management","description":"clr-boot-manager","sidebar":"userSidebar"},"user/quick-start/default-applications":{"id":"user/quick-start/default-applications","title":"Default Applications","description":"Each version of Solus comes with a pre-installed collection of desktop applications that can help you perform common tasks.","sidebar":"userSidebar"},"user/quick-start/installation/disks":{"id":"user/quick-start/installation/disks","title":"Disk Partitioning","description":"Solus provides multiple ways you can install onto your system.","sidebar":"userSidebar"},"user/quick-start/installation/index":{"id":"user/quick-start/installation/index","title":"Preparing to Install","description":"Before you start, make sure your system meets the minimum requirements.","sidebar":"userSidebar"},"user/quick-start/installation/secure-boot":{"id":"user/quick-start/installation/secure-boot","title":"Booting with Secure Boot Enabled","description":"Since Solus 4.4 Secure Boot is now supported. When you first boot the ISO, and, if you have Secure Boot enabled in your UEFI firmware; you will have to perform the one-time-step of manually enrolling the Solus certificate. The following guide will walk you through this. If you already have Solus installed and wish to enable Secure Boot, skip ahead here.","sidebar":"userSidebar"},"user/quick-start/installation/system-requirements":{"id":"user/quick-start/installation/system-requirements","title":"System Requirements","description":"- A blank DVD or a USB drive that is at least 3 GB","sidebar":"userSidebar"},"user/quick-start/software-center/index":{"id":"user/quick-start/software-center/index","title":"Software Center","description":"You can install software ranging from Google Chrome to LibreOffice, as well as update software, via our Software Center.","sidebar":"userSidebar"},"user/software/camera/droidcam":{"id":"user/software/camera/droidcam","title":"DroidCam","description":"DroidCam turns your phone or tablet into a webcam for your computer. You can use it with video conferencing programs like Zoom, MS Teams, and Skype.","sidebar":"userSidebar"},"user/software/command-line/index":{"id":"user/software/command-line/index","title":"Command Line","description":"Changing Shell","sidebar":"userSidebar"},"user/software/configuration_files":{"id":"user/software/configuration_files","title":"Configuration File Locations","description":"These are the standard locations on a Solus installation for software configuration files.","sidebar":"userSidebar"},"user/software/desktops/index":{"id":"user/software/desktops/index","title":"Desktops","description":"Solus offers a multitude of desktop environments, ranging from the feature-rich and modern Budgie to the traditional XFCE experience. It is recommended to use the ISO for a specific desktop environment but it is possible to install them afterwards if you wish to do try one out.","sidebar":"userSidebar"},"user/software/development/containers":{"id":"user/software/development/containers","title":"Containers","description":"Containers are a popular method to run and configure applications in a confined environment without directly installing the application and all its dependencies. Solus provides the following container technologies:","sidebar":"userSidebar"},"user/software/development/index":{"id":"user/software/development/index","title":"Development","description":"Solus provides a stable foundation for creating, testing, and deploying applications.","sidebar":"userSidebar"},"user/software/development/java":{"id":"user/software/development/java","title":"Java","description":"Solus includes multiple LTS versions of Java in the repositories. You can install more than one version in your system at once.","sidebar":"userSidebar"},"user/software/development/postgresql":{"id":"user/software/development/postgresql","title":"PostgreSQL","description":"PostgreSQL is an open source object-relational database system. The postgresql package in Solus includes the PostgreSQL library, client and server.","sidebar":"userSidebar"},"user/software/development/r-and-rstudio":{"id":"user/software/development/r-and-rstudio","title":"R and RStudio","description":"Covers the basics of how to install R and RStudio on Solus and how to install required dependencies for installing additional CRAN libraries.","sidebar":"userSidebar"},"user/software/development/rust":{"id":"user/software/development/rust","title":"Rust","description":"There are two ways to install Rust. This article explains how they differ and which one should be used, according to users\' needs.","sidebar":"userSidebar"},"user/software/development/web":{"id":"user/software/development/web","title":"Web Development","description":"Solus provides multiple web servers for local testing of web applications.","sidebar":"userSidebar"},"user/software/gaming/index":{"id":"user/software/gaming/index","title":"Gaming","description":"Heroes of Newerth","sidebar":"userSidebar"},"user/software/localization/ibus":{"id":"user/software/localization/ibus","title":"IBus","description":"Configuration","sidebar":"userSidebar"},"user/software/networking/samba":{"id":"user/software/networking/samba","title":"Samba File Sharing","description":"Samba is the standard Windows interoperability suite of programs for Linux and Unix. Among other things, it allows Linux, macOS and Windows users to share files via the Server Message Block (SMB) protocol.","sidebar":"userSidebar"},"user/software/networking/tigervnc":{"id":"user/software/networking/tigervnc","title":"TigerVNC","description":"TigerVNC is a high-performance implementation of the VNC protocol, which allows you to control/view desktops remotely over the internet.","sidebar":"userSidebar"},"user/software/networking/wireshark":{"id":"user/software/networking/wireshark","title":"Wireshark","description":"Wireshark is a widely-used network protocol analyzer that lets you see what\u2019s happening on a network at a microscopic level.","sidebar":"userSidebar"},"user/software/networking/xrdp":{"id":"user/software/networking/xrdp","title":"XRDP","description":"xrdp provides a graphical login to remote machines using Microsoft Remote Desktop Protocol (RDP). xrdp accepts connections from a variety of RDP clients: FreeRDP, rdesktop, NeutrinoRDP and Microsoft Remote Desktop Client (for Windows, Mac OS, iOS and Android).","sidebar":"userSidebar"},"user/software/sound/index":{"id":"user/software/sound/index","title":"Sound","description":"Solus comes with PipeWire configured by default.","sidebar":"userSidebar"},"user/software/third-party/index":{"id":"user/software/third-party/index","title":"Third Party","description":"The following applications are provided via our 3rd Party Repository to facilitate the installation and usage of them. These applications cannot be included in the primary repository due to licensing issues.","sidebar":"userSidebar"},"user/software/third-party/snap":{"id":"user/software/third-party/snap","title":"Snap","description":"Note that snaps are going to be removed from Solus in the future,","sidebar":"userSidebar"},"user/software/utilities/ksysguard":{"id":"user/software/utilities/ksysguard","title":"KSysGuard","description":"KSysGuard, also known as KDE System Guard and KDE System Monitor, is designed to make simple process control available to a user without needing to do any special setup.","sidebar":"userSidebar"},"user/software/utilities/kwallet":{"id":"user/software/utilities/kwallet","title":"KDE Wallet","description":"In KDE Plasma, the KDE Wallet is responsible for securely storing and supplying user credentials to the various KDE applications that request them.","sidebar":"userSidebar"},"user/software/virtualization/virtualbox":{"id":"user/software/virtualization/virtualbox","title":"VirtualBox","description":"VirtualBox is an x86 and x86_64 virtualization software package developed by Oracle.","sidebar":"userSidebar"},"user/software/web/obs":{"id":"user/software/web/obs","title":"Open Broadcaster Software (OBS)","description":"This article covers the installation of OBS Studio as well as the use of third-party plugins.","sidebar":"userSidebar"},"user/troubleshooting/boot-rescue":{"id":"user/troubleshooting/boot-rescue","title":"Boot Rescue","description":"In this document, we will walk through restoring the ability to boot Solus.","sidebar":"userSidebar"},"user/troubleshooting/index":{"id":"user/troubleshooting/index","title":"Troubleshooting","description":"This guide provides some basic troubleshooting instructions for when you have an issue in Solus. Before reporting bugs, it is important to check that your Solus installation is not missing files, or suffering from a corrupted disk. You should also ensure your system is fully up to date as the bug may have already been fixed.","sidebar":"userSidebar"},"user/troubleshooting/installation":{"id":"user/troubleshooting/installation","title":"Installation Issues","description":"This article covers various issues that you may come across during installation of Solus.","sidebar":"userSidebar"},"user/troubleshooting/plasma":{"id":"user/troubleshooting/plasma","title":"Plasma Troubleshooting","description":"This contains fixes for various issues you might encounter with the Plasma desktop environment.","sidebar":"userSidebar"}}}}')}}]); \ No newline at end of file diff --git a/assets/js/01a85c17.47c6c1ba.js b/assets/js/01a85c17.47c6c1ba.js deleted file mode 100644 index cb9e69fa3..000000000 --- a/assets/js/01a85c17.47c6c1ba.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[4013],{58112:(e,t,a)=>{a.d(t,{n4:()=>c,Ne:()=>P,ci:()=>_,CS:()=>f,wj:()=>l,nO:()=>m,iZ:()=>b,cH:()=>y});var s=a(67294),n=a(20585),i=a(3675),r=a(85893);function l(){const e=(0,i.Z)(),t=e?.data?.blogMetadata;if(!t)throw new Error("useBlogMetadata() can't be called on the current route because the blog metadata could not be found in route context");return t}const o=s.createContext(null);function c(e){let{children:t,content:a,isBlogPostPage:n=!1}=e;const i=function(e){let{content:t,isBlogPostPage:a}=e;return(0,s.useMemo)((()=>({metadata:t.metadata,frontMatter:t.frontMatter,assets:t.assets,toc:t.toc,isBlogPostPage:a})),[t,a])}({content:a,isBlogPostPage:n});return(0,r.jsx)(o.Provider,{value:i,children:t})}function m(){const e=(0,s.useContext)(o);if(null===e)throw new n.i6("BlogPostProvider");return e}var u=a(23466),d=a(75276);const g=e=>new Date(e).toISOString();function h(e){const t=e.map(j);return{author:1===t.length?t[0]:t}}function p(e,t,a){return e?{image:x({imageUrl:t(e,{absolute:!0}),caption:`title image for the blog post: ${a}`})}:{}}function f(e){const{siteConfig:t}=(0,d.Z)(),{withBaseUrl:a}=(0,u.Cg)(),{metadata:{blogDescription:s,blogTitle:n,permalink:i}}=e,r=`${t.url}${i}`;return{"@context":"https://schema.org","@type":"Blog","@id":r,mainEntityOfPage:r,headline:n,description:s,blogPost:e.items.map((e=>function(e,t,a){const{assets:s,frontMatter:n,metadata:i}=e,{date:r,title:l,description:o,lastUpdatedAt:c}=i,m=s.image??n.image,u=n.keywords??[],d=`${t.url}${i.permalink}`,f=c?g(c):void 0;return{"@type":"BlogPosting","@id":d,mainEntityOfPage:d,url:d,headline:l,name:l,description:o,datePublished:r,...f?{dateModified:f}:{},...h(i.authors),...p(m,a,l),...u?{keywords:u}:{}}}(e.content,t,a)))}}function b(){const e=l(),{assets:t,metadata:a}=m(),{siteConfig:s}=(0,d.Z)(),{withBaseUrl:n}=(0,u.Cg)(),{date:i,title:r,description:o,frontMatter:c,lastUpdatedAt:f}=a,b=t.image??c.image,j=c.keywords??[],x=f?g(f):void 0,N=`${s.url}${a.permalink}`;return{"@context":"https://schema.org","@type":"BlogPosting","@id":N,mainEntityOfPage:N,url:N,headline:r,name:r,description:o,datePublished:i,...x?{dateModified:x}:{},...h(a.authors),...p(b,n,r),...j?{keywords:j}:{},isPartOf:{"@type":"Blog","@id":`${s.url}${e.blogBasePath}`,name:e.blogTitle}}}function j(e){return{"@type":"Person",...e.name?{name:e.name}:{},...e.title?{description:e.title}:{},...e.url?{url:e.url}:{},...e.email?{email:e.email}:{},...e.imageURL?{image:e.imageURL}:{}}}function x(e){let{imageUrl:t,caption:a}=e;return{"@type":"ImageObject","@id":t,url:t,contentUrl:t,caption:a}}var N=a(16550),v=a(38208),C=a(79113),k=a(51997);function y(e){const{pathname:t}=(0,N.TH)();return(0,s.useMemo)((()=>e.filter((e=>function(e,t){return!(e.unlisted&&!(0,k.Mg)(e.permalink,t))}(e,t)))),[e,t])}function _(e){const t=(0,C.vM)(e,(e=>`${new Date(e.date).getFullYear()}`)),a=Object.entries(t);return a.reverse(),a}function P(e){let{items:t,ulClassName:a,liClassName:s,linkClassName:n,linkActiveClassName:i}=e;return(0,r.jsx)("ul",{className:a,children:t.map((e=>(0,r.jsx)("li",{className:s,children:(0,r.jsx)(v.Z,{isNavLink:!0,to:e.permalink,className:n,activeClassName:i,children:e.title})},e.permalink)))})}},50429:(e,t,a)=>{a.d(t,{Z:()=>L});var s=a(67294),n=a(36905),i=a(48714),r=a(62550),l=a(55361),o=a(58112),c=a(39581),m=a(42704),u=a(85893);function d(e){let{year:t,yearGroupHeadingClassName:a,children:s}=e;return(0,u.jsxs)("div",{role:"group",children:[(0,u.jsx)(m.Z,{as:"h3",className:a,children:t}),s]})}function g(e){let{items:t,yearGroupHeadingClassName:a,ListComponent:s}=e;if((0,c.L)().blog.sidebar.groupByYear){const e=(0,o.ci)(t);return(0,u.jsx)(u.Fragment,{children:e.map((e=>{let[t,n]=e;return(0,u.jsx)(d,{year:t,yearGroupHeadingClassName:a,children:(0,u.jsx)(s,{items:n})},t)}))})}return(0,u.jsx)(s,{items:t})}const h=(0,s.memo)(g),p="sidebar_re4s",f="sidebarItemTitle_pO2u",b="sidebarItemList_Yudw",j="sidebarItem__DBe",x="sidebarItemLink_mo7H",N="sidebarItemLinkActive_I1ZP",v="yearGroupHeading_rMGB",C=e=>{let{items:t}=e;return(0,u.jsx)(o.Ne,{items:t,ulClassName:(0,n.Z)(b,"clean-list"),liClassName:j,linkClassName:x,linkActiveClassName:N})};function k(e){let{sidebar:t}=e;const a=(0,o.cH)(t.items);return(0,u.jsx)("aside",{className:"col col--3",children:(0,u.jsxs)("nav",{className:(0,n.Z)(p,"thin-scrollbar"),"aria-label":(0,l.I)({id:"theme.blog.sidebar.navAriaLabel",message:"Blog recent posts navigation",description:"The ARIA label for recent posts in the blog sidebar"}),children:[(0,u.jsx)("div",{className:(0,n.Z)(f,"margin-bottom--md"),children:t.title}),(0,u.jsx)(h,{items:a,ListComponent:C,yearGroupHeadingClassName:v})]})})}const y=(0,s.memo)(k);var _=a(5689);const P={yearGroupHeading:"yearGroupHeading_QT03"},Z=e=>{let{items:t}=e;return(0,u.jsx)(o.Ne,{items:t,ulClassName:"menu__list",liClassName:"menu__list-item",linkClassName:"menu__link",linkActiveClassName:"menu__link--active"})};function w(e){let{sidebar:t}=e;const a=(0,o.cH)(t.items);return(0,u.jsx)(h,{items:a,ListComponent:Z,yearGroupHeadingClassName:P.yearGroupHeading})}function B(e){return(0,u.jsx)(_.Zo,{component:w,props:e})}const H=(0,s.memo)(B);function M(e){let{sidebar:t}=e;const a=(0,r.i)();return t?.items.length?"mobile"===a?(0,u.jsx)(H,{sidebar:t}):(0,u.jsx)(y,{sidebar:t}):null}function L(e){const{sidebar:t,toc:a,children:s,...r}=e,l=t&&t.items.length>0;return(0,u.jsx)(i.Z,{...r,children:(0,u.jsx)("div",{className:"container margin-vert--lg",children:(0,u.jsxs)("div",{className:"row",children:[(0,u.jsx)(M,{sidebar:t}),(0,u.jsx)("main",{className:(0,n.Z)("col",{"col--7":l,"col--9 col--offset-1":!l}),children:s}),a&&(0,u.jsx)("div",{className:"col col--2",children:a})]})})})}},53282:(e,t,a)=>{a.r(t),a.d(t,{default:()=>f});a(67294);var s=a(36905),n=a(55361);const i=()=>(0,n.I)({id:"theme.tags.tagsPageTitle",message:"Tags",description:"The title of the tag list page"});var r=a(96984),l=a(50563),o=a(50429),c=a(96194),m=a(42704);const u={tag:"tag_Nnez"};var d=a(85893);function g(e){let{letterEntry:t}=e;return(0,d.jsxs)("article",{children:[(0,d.jsx)(m.Z,{as:"h2",id:t.letter,children:t.letter}),(0,d.jsx)("ul",{className:"padding--none",children:t.tags.map((e=>(0,d.jsx)("li",{className:u.tag,children:(0,d.jsx)(c.Z,{...e})},e.permalink)))}),(0,d.jsx)("hr",{})]})}function h(e){let{tags:t}=e;const a=function(e){const t={};return Object.values(e).forEach((e=>{const a=function(e){return e[0].toUpperCase()}(e.label);t[a]??=[],t[a].push(e)})),Object.entries(t).sort(((e,t)=>{let[a]=e,[s]=t;return a.localeCompare(s)})).map((e=>{let[t,a]=e;return{letter:t,tags:a.sort(((e,t)=>e.label.localeCompare(t.label)))}}))}(t);return(0,d.jsx)("section",{className:"margin-vert--lg",children:a.map((e=>(0,d.jsx)(g,{letterEntry:e},e.letter)))})}var p=a(62362);function f(e){let{tags:t,sidebar:a}=e;const n=i();return(0,d.jsxs)(r.FG,{className:(0,s.Z)(l.k.wrapper.blogPages,l.k.page.blogTagsListPage),children:[(0,d.jsx)(r.d,{title:n}),(0,d.jsx)(p.Z,{tag:"blog_tags_list"}),(0,d.jsxs)(o.Z,{sidebar:a,children:[(0,d.jsx)(m.Z,{as:"h1",children:n}),(0,d.jsx)(h,{tags:t})]})]})}},96194:(e,t,a)=>{a.d(t,{Z:()=>l});a(67294);var s=a(36905),n=a(38208);const i={tag:"tag_zVej",tagRegular:"tagRegular_sFm0",tagWithCount:"tagWithCount_h2kH"};var r=a(85893);function l(e){let{permalink:t,label:a,count:l,description:o}=e;return(0,r.jsxs)(n.Z,{href:t,title:o,className:(0,s.Z)(i.tag,l?i.tagWithCount:i.tagRegular),children:[a,l&&(0,r.jsx)("span",{children:l})]})}}}]); \ No newline at end of file diff --git a/assets/js/01a85c17.b1768a6e.js b/assets/js/01a85c17.b1768a6e.js new file mode 100644 index 000000000..1850ea51b --- /dev/null +++ b/assets/js/01a85c17.b1768a6e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([["565"],{75700:function(e,t,a){a.d(t,{CS:()=>f,wj:()=>i,nO:()=>u,iZ:()=>j,n4:()=>c,Ne:()=>Z,ci:()=>k,cH:()=>_});var n=a("85893"),l=a("67294"),r=a("57100"),s=a("39025");function i(){let e=(0,s.Z)(),t=e?.data?.blogMetadata;if(!t)throw Error("useBlogMetadata() can't be called on the current route because the blog metadata could not be found in route context");return t}let o=l.createContext(null);function c(e){let{children:t,content:a,isBlogPostPage:r=!1}=e,s=function(e){let{content:t,isBlogPostPage:a}=e;return(0,l.useMemo)(()=>({metadata:t.metadata,frontMatter:t.frontMatter,assets:t.assets,toc:t.toc,isBlogPostPage:a}),[t,a])}({content:a,isBlogPostPage:r});return(0,n.jsx)(o.Provider,{value:s,children:t})}function u(){let e=(0,l.useContext)(o);if(null===e)throw new r.i6("BlogPostProvider");return e}var m=a("7571"),d=a("93934");let g=e=>new Date(e).toISOString();function h(e){let t=e.map(x);return{author:1===t.length?t[0]:t}}function p(e,t,a){return e?{image:function(e){let{imageUrl:t,caption:a}=e;return{"@type":"ImageObject","@id":t,url:t,contentUrl:t,caption:a}}({imageUrl:t(e,{absolute:!0}),caption:`title image for the blog post: ${a}`})}:{}}function f(e){let{siteConfig:t}=(0,d.Z)(),{withBaseUrl:a}=(0,m.Cg)(),{metadata:{blogDescription:n,blogTitle:l,permalink:r}}=e,s=`${t.url}${r}`;return{"@context":"https://schema.org","@type":"Blog","@id":s,mainEntityOfPage:s,headline:l,description:n,blogPost:e.items.map(e=>(function(e,t,a){let{assets:n,frontMatter:l,metadata:r}=e,{date:s,title:i,description:o,lastUpdatedAt:c}=r,u=n.image??l.image,m=l.keywords??[],d=`${t.url}${r.permalink}`,f=c?g(c):void 0;return{"@type":"BlogPosting","@id":d,mainEntityOfPage:d,url:d,headline:i,name:i,description:o,datePublished:s,...f?{dateModified:f}:{},...h(r.authors),...p(u,a,i),...m?{keywords:m}:{}}})(e.content,t,a))}}function j(){let e=i(),{assets:t,metadata:a}=u(),{siteConfig:n}=(0,d.Z)(),{withBaseUrl:l}=(0,m.Cg)(),{date:r,title:s,description:o,frontMatter:c,lastUpdatedAt:f}=a,j=t.image??c.image,x=c.keywords??[],b=f?g(f):void 0,v=`${n.url}${a.permalink}`;return{"@context":"https://schema.org","@type":"BlogPosting","@id":v,mainEntityOfPage:v,url:v,headline:s,name:s,description:o,datePublished:r,...b?{dateModified:b}:{},...h(a.authors),...p(j,l,s),...x?{keywords:x}:{},isPartOf:{"@type":"Blog","@id":`${n.url}${e.blogBasePath}`,name:e.blogTitle}}}function x(e){return{"@type":"Person",...e.name?{name:e.name}:{},...e.title?{description:e.title}:{},...e.url?{url:e.url}:{},...e.email?{email:e.email}:{},...e.imageURL?{image:e.imageURL}:{}}}var b=a("16550"),v=a("27544"),N=a("51373"),C=a("16896");function _(e){let{pathname:t}=(0,b.TH)();return(0,l.useMemo)(()=>e.filter(e=>{var a,n;return a=e,n=t,(!a.unlisted||!!(0,C.Mg)(a.permalink,n))&&!0}),[e,t])}function k(e){let t=Object.entries((0,N.vM)(e,e=>`${new Date(e.date).getFullYear()}`));return t.reverse(),t}function Z(e){let{items:t,ulClassName:a,liClassName:l,linkClassName:r,linkActiveClassName:s}=e;return(0,n.jsx)("ul",{className:a,children:t.map(e=>(0,n.jsx)("li",{className:l,children:(0,n.jsx)(v.Z,{isNavLink:!0,to:e.permalink,className:r,activeClassName:s,children:e.title})},e.permalink))})}},30928:function(e,t,a){a.d(t,{Z:()=>B});var n=a("85893"),l=a("67294"),r=a("74904"),s=a("99757"),i=a("72649"),o=a("1822"),c=a("75700"),u=a("45237"),m=a("52068");function d(e){let{year:t,yearGroupHeadingClassName:a,children:l}=e;return(0,n.jsxs)("div",{role:"group",children:[(0,n.jsx)(m.Z,{as:"h3",className:a,children:t}),l]})}let g=(0,l.memo)(function(e){let{items:t,yearGroupHeadingClassName:a,ListComponent:l}=e;if(!(0,u.L)().blog.sidebar.groupByYear)return(0,n.jsx)(l,{items:t});{let e=(0,c.ci)(t);return(0,n.jsx)(n.Fragment,{children:e.map(e=>{let[t,r]=e;return(0,n.jsx)(d,{year:t,yearGroupHeadingClassName:a,children:(0,n.jsx)(l,{items:r})},t)})})}}),h="sidebar_re4s",p="sidebarItemTitle_pO2u",f="sidebarItemList_Yudw",j="sidebarItem__DBe",x="sidebarItemLink_mo7H",b="sidebarItemLinkActive_I1ZP",v="yearGroupHeading_rMGB",N=e=>{let{items:t}=e;return(0,n.jsx)(c.Ne,{items:t,ulClassName:(0,r.Z)(f,"clean-list"),liClassName:j,linkClassName:x,linkActiveClassName:b})},C=(0,l.memo)(function(e){let{sidebar:t}=e,a=(0,c.cH)(t.items);return(0,n.jsx)("aside",{className:"col col--3",children:(0,n.jsxs)("nav",{className:(0,r.Z)(h,"thin-scrollbar"),"aria-label":(0,o.I)({id:"theme.blog.sidebar.navAriaLabel",message:"Blog recent posts navigation",description:"The ARIA label for recent posts in the blog sidebar"}),children:[(0,n.jsx)("div",{className:(0,r.Z)(p,"margin-bottom--md"),children:t.title}),(0,n.jsx)(g,{items:a,ListComponent:N,yearGroupHeadingClassName:v})]})})});var _=a("5942");let k="yearGroupHeading_QT03",Z=e=>{let{items:t}=e;return(0,n.jsx)(c.Ne,{items:t,ulClassName:"menu__list",liClassName:"menu__list-item",linkClassName:"menu__link",linkActiveClassName:"menu__link--active"})};function y(e){let{sidebar:t}=e,a=(0,c.cH)(t.items);return(0,n.jsx)(g,{items:a,ListComponent:Z,yearGroupHeadingClassName:k})}let P=(0,l.memo)(function(e){return(0,n.jsx)(_.Zo,{component:y,props:e})});function w(e){let{sidebar:t}=e,a=(0,i.i)();return t?.items.length?"mobile"===a?(0,n.jsx)(P,{sidebar:t}):(0,n.jsx)(C,{sidebar:t}):null}function B(e){let{sidebar:t,toc:a,children:l,...i}=e,o=t&&t.items.length>0;return(0,n.jsx)(s.Z,{...i,children:(0,n.jsx)("div",{className:"container margin-vert--lg",children:(0,n.jsxs)("div",{className:"row",children:[(0,n.jsx)(w,{sidebar:t}),(0,n.jsx)("main",{className:(0,r.Z)("col",{"col--7":o,"col--9 col--offset-1":!o}),children:l}),a&&(0,n.jsx)("div",{className:"col col--2",children:a})]})})})}},88292:function(e,t,a){a.r(t),a.d(t,{default:()=>f});var n=a("85893");a("67294");var l=a("74904"),r=a("1822");let s=()=>(0,r.I)({id:"theme.tags.tagsPageTitle",message:"Tags",description:"The title of the tag list page"});var i=a("81921"),o=a("50490"),c=a("30928"),u=a("62837"),m=a("52068");let d="tag_Nnez";function g(e){let{letterEntry:t}=e;return(0,n.jsxs)("article",{children:[(0,n.jsx)(m.Z,{as:"h2",id:t.letter,children:t.letter}),(0,n.jsx)("ul",{className:"padding--none",children:t.tags.map(e=>(0,n.jsx)("li",{className:d,children:(0,n.jsx)(u.Z,{...e})},e.permalink))}),(0,n.jsx)("hr",{})]})}function h(e){let{tags:t}=e,a=function(e){let t={};return Object.values(e).forEach(e=>{let a=e.label[0].toUpperCase();t[a]??=[],t[a].push(e)}),Object.entries(t).sort((e,t)=>{let[a]=e,[n]=t;return a.localeCompare(n)}).map(e=>{let[t,a]=e;return{letter:t,tags:a.sort((e,t)=>e.label.localeCompare(t.label))}})}(t);return(0,n.jsx)("section",{className:"margin-vert--lg",children:a.map(e=>(0,n.jsx)(g,{letterEntry:e},e.letter))})}var p=a("49868");function f(e){let{tags:t,sidebar:a}=e,r=s();return(0,n.jsxs)(i.FG,{className:(0,l.Z)(o.k.wrapper.blogPages,o.k.page.blogTagsListPage),children:[(0,n.jsx)(i.d,{title:r}),(0,n.jsx)(p.Z,{tag:"blog_tags_list"}),(0,n.jsxs)(c.Z,{sidebar:a,children:[(0,n.jsx)(m.Z,{as:"h1",children:r}),(0,n.jsx)(h,{tags:t})]})]})}},62837:function(e,t,a){a.d(t,{Z:()=>i});var n=a("85893");a("67294");var l=a("74904"),r=a("27544");let s={tag:"tag_zVej",tagRegular:"tagRegular_sFm0",tagWithCount:"tagWithCount_h2kH"};function i(e){let{permalink:t,label:a,count:i,description:o}=e;return(0,n.jsxs)(r.Z,{href:t,title:o,className:(0,l.Z)(s.tag,i?s.tagWithCount:s.tagRegular),children:[a,i&&(0,n.jsx)("span",{children:i})]})}}}]); \ No newline at end of file diff --git a/assets/js/04b18502.237889a0.js b/assets/js/04b18502.237889a0.js deleted file mode 100644 index 36edbb657..000000000 --- a/assets/js/04b18502.237889a0.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[1942],{37123:(e,a,n)=>{n.r(a),n.d(a,{assets:()=>o,contentTitle:()=>s,default:()=>p,frontMatter:()=>r,metadata:()=>c,toc:()=>l});var i=n(85893),t=n(11151);const r={title:"Packaging Overview",summary:"Steps for setting up a packaging environment and submitting packages",sidebar_position:0},s="Packaging Overview",c={id:"packaging/index",title:"Packaging Overview",description:"This is the overall workflow for creating or updating a package.",source:"@site/docs/packaging/index.md",sourceDirName:"packaging",slug:"/packaging/",permalink:"/docs/packaging/",draft:!1,unlisted:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/packaging/index.md",tags:[],version:"current",lastUpdatedAt:1732716912e3,sidebarPosition:0,frontMatter:{title:"Packaging Overview",summary:"Steps for setting up a packaging environment and submitting packages",sidebar_position:0},sidebar:"packagingSidebar",next:{title:"Prepare for Packaging",permalink:"/docs/packaging/prepare-for-packaging"}},o={},l=[{value:"Development environment preparation",id:"development-environment-preparation",level:2},{value:"Prior to building a package",id:"prior-to-building-a-package",level:2},{value:"Building packages",id:"building-packages",level:2}];function g(e){const a={a:"a",h1:"h1",h2:"h2",header:"header",li:"li",ol:"ol",p:"p",strong:"strong",ul:"ul",...(0,t.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(a.header,{children:(0,i.jsx)(a.h1,{id:"packaging-overview",children:"Packaging Overview"})}),"\n",(0,i.jsx)(a.p,{children:"This is the overall workflow for creating or updating a package."}),"\n",(0,i.jsx)(a.h2,{id:"development-environment-preparation",children:"Development environment preparation"}),"\n",(0,i.jsxs)(a.ol,{children:["\n",(0,i.jsx)(a.li,{children:(0,i.jsx)(a.a,{href:"/docs/packaging/prepare-for-packaging",children:"Prepare for Packaging"})}),"\n",(0,i.jsxs)(a.li,{children:["Review the ",(0,i.jsx)(a.a,{href:"/docs/packaging/package.yml",children:"requirements for the package.yml file"}),"."]}),"\n",(0,i.jsxs)(a.li,{children:["Also review our ",(0,i.jsx)(a.a,{href:"/docs/packaging/packaging-practices",children:"Packaging Practices"}),"."]}),"\n"]}),"\n",(0,i.jsx)(a.h2,{id:"prior-to-building-a-package",children:"Prior to building a package"}),"\n",(0,i.jsx)(a.p,{children:"Please check the following:"}),"\n",(0,i.jsxs)(a.ul,{children:["\n",(0,i.jsxs)(a.li,{children:["Search ",(0,i.jsx)(a.a,{href:"https://github.com/getsolus/packages/issues?q=label%3A%22Package+Request%22",children:"open package requests"})," to see if there is one for the package. If there isn't an existing issue, go ahead and submit your pull request. If there is already a pull request, please check its status to avoid duplicating work."]}),"\n",(0,i.jsxs)(a.li,{children:["If you are submitting a pull request for the inclusion of software in the repo, the package has a corresponding package request that is ",(0,i.jsx)(a.strong,{children:"accepted for inclusion"})," or is a dependency of a package that has been accepted into the repository."]}),"\n"]}),"\n",(0,i.jsx)(a.h2,{id:"building-packages",children:"Building packages"}),"\n",(0,i.jsxs)(a.ol,{children:["\n",(0,i.jsx)(a.li,{children:(0,i.jsx)(a.a,{href:"/docs/packaging/update-dev-environment",children:"Update your development environment"})}),"\n",(0,i.jsx)(a.li,{children:"Prepare the package directory and build the package"}),"\n"]}),"\n",(0,i.jsxs)(a.ul,{children:["\n",(0,i.jsxs)(a.li,{children:["For a new package that does not yet exist in the repos see ",(0,i.jsx)(a.a,{href:"/docs/packaging/creating-a-new-package",children:"Creating a New Package"})]}),"\n",(0,i.jsxs)(a.li,{children:["For updating a package that already is in the repos see ",(0,i.jsx)(a.a,{href:"/docs/packaging/updating-an-existing-package",children:"Updating an Existing Package"})]}),"\n"]}),"\n",(0,i.jsxs)(a.ol,{start:"3",children:["\n",(0,i.jsx)(a.li,{children:(0,i.jsx)(a.a,{href:"/docs/packaging/testing-a-package",children:"Test the Package"})}),"\n",(0,i.jsx)(a.li,{children:(0,i.jsx)(a.a,{href:"/docs/packaging/submitting-a-pull-request",children:"Submit a Pull Request for Review"})}),"\n"]})]})}function p(e={}){const{wrapper:a}={...(0,t.a)(),...e.components};return a?(0,i.jsx)(a,{...e,children:(0,i.jsx)(g,{...e})}):g(e)}},11151:(e,a,n)=>{n.d(a,{Z:()=>c,a:()=>s});var i=n(67294);const t={},r=i.createContext(t);function s(e){const a=i.useContext(r);return i.useMemo((function(){return"function"==typeof e?e(a):{...a,...e}}),[a,e])}function c(e){let a;return a=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:s(e.components),i.createElement(r.Provider,{value:a},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/04b18502.b1befb9c.js b/assets/js/04b18502.b1befb9c.js new file mode 100644 index 000000000..e30d2fd2c --- /dev/null +++ b/assets/js/04b18502.b1befb9c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([["5275"],{56422:function(e,a,n){n.r(a),n.d(a,{metadata:()=>i,contentTitle:()=>c,default:()=>p,assets:()=>o,toc:()=>l,frontMatter:()=>s});var i=JSON.parse('{"id":"packaging/index","title":"Packaging Overview","description":"This is the overall workflow for creating or updating a package.","source":"@site/docs/packaging/index.md","sourceDirName":"packaging","slug":"/packaging/","permalink":"/docs/packaging/","draft":false,"unlisted":false,"editUrl":"https://github.com/getsolus/help-center-docs/tree/master/docs/packaging/index.md","tags":[],"version":"current","lastUpdatedAt":1733757592000,"sidebarPosition":0,"frontMatter":{"title":"Packaging Overview","summary":"Steps for setting up a packaging environment and submitting packages","sidebar_position":0},"sidebar":"packagingSidebar","next":{"title":"Prepare for Packaging","permalink":"/docs/packaging/prepare-for-packaging"}}'),t=n("85893"),r=n("50065");let s={title:"Packaging Overview",summary:"Steps for setting up a packaging environment and submitting packages",sidebar_position:0},c="Packaging Overview",o={},l=[{value:"Development environment preparation",id:"development-environment-preparation",level:2},{value:"Prior to building a package",id:"prior-to-building-a-package",level:2},{value:"Building packages",id:"building-packages",level:2}];function g(e){let a={a:"a",h1:"h1",h2:"h2",header:"header",li:"li",ol:"ol",p:"p",strong:"strong",ul:"ul",...(0,r.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(a.header,{children:(0,t.jsx)(a.h1,{id:"packaging-overview",children:"Packaging Overview"})}),"\n",(0,t.jsx)(a.p,{children:"This is the overall workflow for creating or updating a package."}),"\n",(0,t.jsx)(a.h2,{id:"development-environment-preparation",children:"Development environment preparation"}),"\n",(0,t.jsxs)(a.ol,{children:["\n",(0,t.jsx)(a.li,{children:(0,t.jsx)(a.a,{href:"/docs/packaging/prepare-for-packaging",children:"Prepare for Packaging"})}),"\n",(0,t.jsxs)(a.li,{children:["Review the ",(0,t.jsx)(a.a,{href:"/docs/packaging/package.yml",children:"requirements for the package.yml file"}),"."]}),"\n",(0,t.jsxs)(a.li,{children:["Also review our ",(0,t.jsx)(a.a,{href:"/docs/packaging/packaging-practices",children:"Packaging Practices"}),"."]}),"\n"]}),"\n",(0,t.jsx)(a.h2,{id:"prior-to-building-a-package",children:"Prior to building a package"}),"\n",(0,t.jsx)(a.p,{children:"Please check the following:"}),"\n",(0,t.jsxs)(a.ul,{children:["\n",(0,t.jsxs)(a.li,{children:["Search ",(0,t.jsx)(a.a,{href:"https://github.com/getsolus/packages/issues?q=label%3A%22Package+Request%22",children:"open package requests"})," to see if there is one for the package. If there isn't an existing issue, go ahead and submit your pull request. If there is already a pull request, please check its status to avoid duplicating work."]}),"\n",(0,t.jsxs)(a.li,{children:["If you are submitting a pull request for the inclusion of software in the repo, the package has a corresponding package request that is ",(0,t.jsx)(a.strong,{children:"accepted for inclusion"})," or is a dependency of a package that has been accepted into the repository."]}),"\n"]}),"\n",(0,t.jsx)(a.h2,{id:"building-packages",children:"Building packages"}),"\n",(0,t.jsxs)(a.ol,{children:["\n",(0,t.jsx)(a.li,{children:(0,t.jsx)(a.a,{href:"/docs/packaging/update-dev-environment",children:"Update your development environment"})}),"\n",(0,t.jsx)(a.li,{children:"Prepare the package directory and build the package"}),"\n"]}),"\n",(0,t.jsxs)(a.ul,{children:["\n",(0,t.jsxs)(a.li,{children:["For a new package that does not yet exist in the repos see ",(0,t.jsx)(a.a,{href:"/docs/packaging/creating-a-new-package",children:"Creating a New Package"})]}),"\n",(0,t.jsxs)(a.li,{children:["For updating a package that already is in the repos see ",(0,t.jsx)(a.a,{href:"/docs/packaging/updating-an-existing-package",children:"Updating an Existing Package"})]}),"\n"]}),"\n",(0,t.jsxs)(a.ol,{start:"3",children:["\n",(0,t.jsx)(a.li,{children:(0,t.jsx)(a.a,{href:"/docs/packaging/testing-a-package",children:"Test the Package"})}),"\n",(0,t.jsx)(a.li,{children:(0,t.jsx)(a.a,{href:"/docs/packaging/submitting-a-pull-request",children:"Submit a Pull Request for Review"})}),"\n"]})]})}function p(e={}){let{wrapper:a}={...(0,r.a)(),...e.components};return a?(0,t.jsx)(a,{...e,children:(0,t.jsx)(g,{...e})}):g(e)}},50065:function(e,a,n){n.d(a,{Z:function(){return c},a:function(){return s}});var i=n(67294);let t={},r=i.createContext(t);function s(e){let a=i.useContext(r);return i.useMemo(function(){return"function"==typeof e?e(a):{...a,...e}},[a,e])}function c(e){let a;return a=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:s(e.components),i.createElement(r.Provider,{value:a},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/05767842.2aaac066.js b/assets/js/05767842.2aaac066.js deleted file mode 100644 index af0a91b15..000000000 --- a/assets/js/05767842.2aaac066.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[1606],{77755:e=>{e.exports=JSON.parse('{"author":{"name":"Joey Riches","title":"Solus Staff","page":{"permalink":"/blog/authors/joey"},"socials":{"github":"https://github.com/joebonrichie"},"imageURL":"https://avatars.githubusercontent.com/u/5338090","key":"joey","count":2},"listMetadata":{"permalink":"/blog/authors/joey","page":1,"postsPerPage":2,"totalPages":1,"totalCount":2,"blogDescription":"The Solus Development (b)log!","blogTitle":"Solus DevLog"}}')}}]); \ No newline at end of file diff --git a/assets/js/05767842.fef8ed1e.js b/assets/js/05767842.fef8ed1e.js new file mode 100644 index 000000000..48da2cbde --- /dev/null +++ b/assets/js/05767842.fef8ed1e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([["1371"],{70374:function(e){e.exports=JSON.parse('{"author":{"name":"Joey Riches","title":"Solus Staff","page":{"permalink":"/blog/authors/joey"},"socials":{"github":"https://github.com/joebonrichie"},"imageURL":"https://avatars.githubusercontent.com/u/5338090","key":"joey","count":2},"listMetadata":{"permalink":"/blog/authors/joey","page":1,"postsPerPage":2,"totalPages":1,"totalCount":2,"blogDescription":"The Solus Development (b)log!","blogTitle":"Solus DevLog"}}')}}]); \ No newline at end of file diff --git a/assets/js/06758c2b.4c9f371f.js b/assets/js/06758c2b.4c9f371f.js deleted file mode 100644 index f73aec02a..000000000 --- a/assets/js/06758c2b.4c9f371f.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[1073],{81885:e=>{e.exports=JSON.parse('{"tag":{"label":"optimization","permalink":"/blog/tags/optimization","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/optimization","page":1,"postsPerPage":1,"totalPages":1,"totalCount":1,"blogDescription":"The Solus Development (b)log!","blogTitle":"Solus DevLog"}}')}}]); \ No newline at end of file diff --git a/assets/js/06758c2b.90c52c90.js b/assets/js/06758c2b.90c52c90.js new file mode 100644 index 000000000..223116a0a --- /dev/null +++ b/assets/js/06758c2b.90c52c90.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([["9118"],{61343:function(t){t.exports=JSON.parse('{"tag":{"label":"optimization","permalink":"/blog/tags/optimization","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/optimization","page":1,"postsPerPage":1,"totalPages":1,"totalCount":1,"blogDescription":"The Solus Development (b)log!","blogTitle":"Solus DevLog"}}')}}]); \ No newline at end of file diff --git a/assets/js/080a8349.2a008348.js b/assets/js/080a8349.2a008348.js new file mode 100644 index 000000000..1a26afbf0 --- /dev/null +++ b/assets/js/080a8349.2a008348.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([["8046"],{46324:function(e,n,s){s.r(n),s.d(n,{metadata:()=>i,contentTitle:()=>d,default:()=>h,assets:()=>a,toc:()=>c,frontMatter:()=>o});var i=JSON.parse('{"id":"packaging/monitoring.yml","title":"Monitoring YAML","description":"A monitoring.yml file is strongly suggested, but not yet required for Solus packages.","source":"@site/docs/packaging/monitoring.yml.md","sourceDirName":"packaging","slug":"/packaging/monitoring.yml","permalink":"/docs/packaging/monitoring.yml","draft":false,"unlisted":false,"editUrl":"https://github.com/getsolus/help-center-docs/tree/master/docs/packaging/monitoring.yml.md","tags":[],"version":"current","lastUpdatedAt":1733757592000,"frontMatter":{"title":"Monitoring YAML","summary":"The purpose and format of monitoring.yml"},"sidebar":"packagingSidebar","previous":{"title":"Git Basics","permalink":"/docs/packaging/git-basics"},"next":{"title":"Package YAML","permalink":"/docs/packaging/package.yml"}}'),t=s("85893"),r=s("50065");let o={title:"Monitoring YAML",summary:"The purpose and format of monitoring.yml"},d="monitoring.yml",a={},c=[{value:"Adding monitoring.yml to an existing package",id:"adding-monitoringyml-to-an-existing-package",level:2},{value:"systemd as an example",id:"systemd-as-an-example",level:2},{value:""releases" fields",id:"releases-fields",level:2},{value:"Finding the Anitya ID",id:"finding-the-anitya-id",level:3},{value:""security" fields",id:"security-fields",level:2},{value:"What is a CPE Name?",id:"what-is-a-cpe-name",level:3},{value:"Finding the CPE Name",id:"finding-the-cpe-name",level:3},{value:"No known CPE",id:"no-known-cpe",level:3}];function l(e){let n={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",p:"p",pre:"pre",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,r.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.header,{children:(0,t.jsx)(n.h1,{id:"monitoringyml",children:(0,t.jsx)(n.code,{children:"monitoring.yml"})})}),"\n",(0,t.jsx)(n.admonition,{type:"important",children:(0,t.jsxs)(n.p,{children:["A ",(0,t.jsx)(n.code,{children:"monitoring.yml"})," file is strongly suggested, but not yet required for Solus packages."]})}),"\n",(0,t.jsxs)(n.p,{children:["A ",(0,t.jsx)(n.code,{children:"monitoring.yml"})," file is included in the Packages repository directory for every Solus package to enable automatic scanning for new releases and security advisories."]}),"\n",(0,t.jsxs)(n.p,{children:["Checking for new releases is done by mapping the Solus package to an ",(0,t.jsx)(n.a,{href:"https://github.com/fedora-infra/anitya",children:"Anitya"})," ID. ",(0,t.jsx)(n.em,{children:"Anitya"})," is a Red Hat project, part of ",(0,t.jsx)(n.a,{href:"https://release-monitoring.org/",children:"release-monitoring.org"})]}),"\n",(0,t.jsxs)(n.p,{children:["Checking for security advisories (",(0,t.jsx)(n.a,{href:"https://en.wikipedia.org/wiki/Common_Vulnerabilities_and_Exposures",children:"CVEs"}),"), is done by mapping the Solus package to a ",(0,t.jsx)(n.em,{children:"Common Platform Enumeration Name"})," (",(0,t.jsx)(n.a,{href:"https://nvd.nist.gov/products/cpe",children:"CPE"}),") from the National Vulnerability Database."]}),"\n",(0,t.jsx)(n.h2,{id:"adding-monitoringyml-to-an-existing-package",children:"Adding monitoring.yml to an existing package"}),"\n",(0,t.jsxs)(n.p,{children:["To add a ",(0,t.jsx)(n.code,{children:"monitoring.yml"})," file to an existing package you can use the following ",(0,t.jsx)(n.code,{children:"go-task"})," command to add a template file, starting from within the directory containing the ",(0,t.jsx)(n.code,{children:"package.yml"})," for a given package:"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"go-task add-monitoring\n"})}),"\n",(0,t.jsx)(n.p,{children:"Which will create a file with the following contents:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:"# Remove all comments before submitting, except CPE check date if none found\nreleases:\n id: ~ # Check https://release-monitoring.org/\n rss: ~ # For example https://github.com/PyO3/maturin/releases.atom\n# No known CPE, checked 2024-04-24\nsecurity:\n cpe: ~\n"})}),"\n",(0,t.jsxs)(n.p,{children:["You must, at minimum, fill out ",(0,t.jsx)(n.code,{children:"id"})," and check if the package has an RSS feed and ",(0,t.jsx)(n.a,{href:"#what-is-a-cpe-name",children:"CPE name"}),". If you can find no data for either of these fields, it must be set to ",(0,t.jsx)(n.code,{children:"~"}),"."]}),"\n",(0,t.jsx)(n.h2,{id:"systemd-as-an-example",children:"systemd as an example"}),"\n",(0,t.jsxs)(n.p,{children:["Let's look at the ",(0,t.jsx)(n.code,{children:"monitoring.yml"})," file for ",(0,t.jsx)(n.code,{children:"systemd"})," as an example."]}),"\n",(0,t.jsxs)(n.p,{children:["The ",(0,t.jsx)(n.code,{children:"systemd"})," directory in the Packages repository looks like this:"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-text",children:"systemd\n\u251C\u2500\u2500 monitoring.yml\n\u251C\u2500\u2500 package.yml\n\u251C\u2500\u2500 pspec_x86_64.xml\n\u2514\u2500\u2500 *lots of other files we can ignore*\n"})}),"\n",(0,t.jsxs)(n.p,{children:["The ",(0,t.jsx)(n.code,{children:"monitoring.yml"})," looks like this:"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:'releases:\n id: 205088\n ignore:\n # We only update to the n-1 stable release. So for now we\'re only interested in 252.x updates\n - "253.*"\n rss: https://github.com/systemd/systemd-stable/tags.atom\nsecurity:\n cpe:\n - vendor: systemd_project\n product: systemd\n - vendor: freedesktop\n product: systemd\n ignore:\n # A non-existent CVE added here as an example\n - CVE-2022-55555\n'})}),"\n",(0,t.jsx)(n.h2,{id:"releases-fields",children:'"releases" fields'}),"\n",(0,t.jsx)(n.p,{children:"Fields used to monitor for new versions."}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Field"}),(0,t.jsx)(n.th,{children:"Type"}),(0,t.jsx)(n.th,{children:"Required ?"}),(0,t.jsx)(n.th,{children:"Description"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"id"})}),(0,t.jsx)(n.td,{children:"integer"}),(0,t.jsx)(n.td,{children:"Yes"}),(0,t.jsxs)(n.td,{children:["Anitya ID from ",(0,t.jsx)(n.a,{href:"https://release-monitoring.org/",children:"release-monitoring.org"})]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"ignore"})}),(0,t.jsx)(n.td,{children:"list of regular expressions"}),(0,t.jsx)(n.td,{children:"No"}),(0,t.jsx)(n.td,{children:"List of regular expressions enclosed in quotes matching versions to ignore. Include a comment explaining the ignored versions."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"rss"})}),(0,t.jsx)(n.td,{children:"URL"}),(0,t.jsx)(n.td,{children:"Yes"}),(0,t.jsxs)(n.td,{children:['URL for a releases RSS feed. If the only RSS feed you can find for a project is a general "news" feed, set it to ',(0,t.jsx)(n.code,{children:"~"}),'. For GitHub projects, you can use the "tags" or "releases" feed: ',(0,t.jsx)(n.code,{children:"https://github.com/USER/REPOSITORY/tagsORreleases.atom"})]})]})]})]}),"\n",(0,t.jsx)(n.h3,{id:"finding-the-anitya-id",children:"Finding the Anitya ID"}),"\n",(0,t.jsxs)(n.p,{children:["To find the Anitya ID, search ",(0,t.jsx)(n.a,{href:"https://release-monitoring.org/",children:"release-monitoring.org"})," by project name, then take the ID out of the URL for the correct search result."]}),"\n",(0,t.jsxs)(n.p,{children:["For example, the correct ",(0,t.jsx)(n.code,{children:"systemd"})," search result for us is ",(0,t.jsx)(n.code,{children:"systemd-stable"})," with the URL ",(0,t.jsx)(n.a,{href:"https://release-monitoring.org/project/205088/",children:"https://release-monitoring.org/project/205088/"}),", so we use ",(0,t.jsx)(n.code,{children:"205088"})," in the ",(0,t.jsx)(n.code,{children:"id"})," field"]}),"\n",(0,t.jsxs)(n.p,{children:["If a project is not tracked by release-monitoring.org, you can create an account and ",(0,t.jsx)(n.a,{href:"https://release-monitoring.org/static/docs/user-guide.html#creating-new-project",children:"add it."})]}),"\n",(0,t.jsx)(n.h2,{id:"security-fields",children:'"security" fields'}),"\n",(0,t.jsx)(n.p,{children:"Fields used to monitor for security advisories (CVEs)"}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Field"}),(0,t.jsx)(n.th,{children:"Type"}),(0,t.jsx)(n.th,{children:"Required ?"}),(0,t.jsx)(n.th,{children:"Description"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"cpe"})}),(0,t.jsx)(n.td,{children:"list"}),(0,t.jsx)(n.td,{children:"Yes"}),(0,t.jsxs)(n.td,{children:["List of ",(0,t.jsx)(n.code,{children:"vendor:product"})," pairs from a full CPE name. CVEs for a given project may be published under more than one CPE; include more than one if that is likely."]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"ignore"})}),(0,t.jsx)(n.td,{children:"list of strings"}),(0,t.jsx)(n.td,{children:"No"}),(0,t.jsx)(n.td,{children:"List of specific CVE identifiers which can be ignored, including a comment explaining why each CVE was ignored. As an example, a CVE can be ignored if the Solus package includes a patch fixing the CVE."})]})]})]}),"\n",(0,t.jsx)(n.h3,{id:"what-is-a-cpe-name",children:"What is a CPE Name?"}),"\n",(0,t.jsxs)(n.p,{children:["A ",(0,t.jsx)(n.a,{href:"https://en.wikipedia.org/wiki/Common_Platform_Enumeration",children:"CPE Name"})," is a structured naming scheme for information technology systems, primarily used to search for CVEs."]}),"\n",(0,t.jsx)(n.p,{children:"CPE names contain redundant information we can ignore, we are only interested in the vendor and the product."}),"\n",(0,t.jsxs)(n.p,{children:["For example, ",(0,t.jsx)(n.code,{children:"cpe:2.3:a:systemd_project:systemd"})," is the CPE for the ",(0,t.jsx)(n.em,{children:"vendor"})," ",(0,t.jsx)(n.code,{children:"systemd_project"}),", and the ",(0,t.jsx)(n.em,{children:"product"})," ",(0,t.jsx)(n.code,{children:"systemd"}),"."]}),"\n",(0,t.jsx)(n.h3,{id:"finding-the-cpe-name",children:"Finding the CPE Name"}),"\n",(0,t.jsxs)(n.p,{children:["The easiest way to search for CPE Names is with the following command; replacing ",(0,t.jsx)(n.code,{children:"systemd"})," with your search term:"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:'curl -s -X POST https://cpe-guesser.cve-search.org/search -d "{\\"query\\": [\\"systemd\\"]}" | jq .\n'})}),"\n",(0,t.jsxs)(n.p,{children:["Note this command uses the ",(0,t.jsx)(n.code,{children:"jq"})," tool, which you may not have installed:"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"sudo eopkg it jq\n"})}),"\n",(0,t.jsxs)(n.p,{children:["If you have our ",(0,t.jsx)(n.a,{href:"/docs/packaging/prepare-for-packaging#set-up-repository-helper-functions-optional",children:"helper functions"})," installed, you can use the following command:"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"cpesearch systemd\n"})}),"\n",(0,t.jsx)(n.admonition,{type:"tip",children:(0,t.jsx)(n.p,{children:'Convert your search term to lower case and try variations on the search term if you get no results. The CPE search is not a "fuzzy" search.'})}),"\n",(0,t.jsx)(n.p,{children:"The command returns the following:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-text",children:'[\n [\n 49192,\n "cpe:2.3:a:ubuntu_developers:systemd"\n ],\n [\n 116392,\n "cpe:2.3:a:lennart_poettering:systemd"\n ],\n [\n 120506,\n "cpe:2.3:a:freedesktop:systemd"\n ],\n [\n 120627,\n "cpe:2.3:a:systemd_project:systemd"\n ]\n]\n'})}),"\n",(0,t.jsx)(n.p,{children:"Ignore the numerical ids, let's walk through the CPEs by vendor:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"ubuntu_developers"})," is for ",(0,t.jsx)(n.code,{children:"systemd"})," patched by Ubuntu; we can ignore it"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"lennart_poettering"})," is for the main ",(0,t.jsx)(n.code,{children:"systemd"})," developer and is probably a bleeding edge vendor; ignore it"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"freedesktop"})," is from freedesktop.org and is a good candidate, so we add it"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"systemd_project"})," is a good candidate, so we add it"]}),"\n"]}),"\n",(0,t.jsx)(n.h3,{id:"no-known-cpe",children:"No known CPE"}),"\n",(0,t.jsx)(n.p,{children:"If an established product hasn't had a security advisory in the past, it might not have a CPE."}),"\n",(0,t.jsxs)(n.p,{children:["In that case, include an empty ",(0,t.jsx)(n.code,{children:"security"})," and ",(0,t.jsx)(n.code,{children:"cpe"})," field with a comment in the following format:"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:"# No known CPE, checked 2024-01-23\nsecurity:\n cpe: ~\n"})}),"\n",(0,t.jsx)(n.admonition,{type:"tip",children:(0,t.jsx)(n.p,{children:"If you are unsure of what to do in this case, feel free to ask in the Solus Packaging Matrix room."})})]})}function h(e={}){let{wrapper:n}={...(0,r.a)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(l,{...e})}):l(e)}},50065:function(e,n,s){s.d(n,{Z:function(){return d},a:function(){return o}});var i=s(67294);let t={},r=i.createContext(t);function o(e){let n=i.useContext(r);return i.useMemo(function(){return"function"==typeof e?e(n):{...n,...e}},[n,e])}function d(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:o(e.components),i.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/080a8349.c3ed1278.js b/assets/js/080a8349.c3ed1278.js deleted file mode 100644 index 18e045334..000000000 --- a/assets/js/080a8349.c3ed1278.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[224],{92857:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>a,contentTitle:()=>o,default:()=>h,frontMatter:()=>r,metadata:()=>d,toc:()=>c});var i=s(85893),t=s(11151);const r={title:"Monitoring YAML",summary:"The purpose and format of monitoring.yml"},o="monitoring.yml",d={id:"packaging/monitoring.yml",title:"Monitoring YAML",description:"A monitoring.yml file is strongly suggested, but not yet required for Solus packages.",source:"@site/docs/packaging/monitoring.yml.md",sourceDirName:"packaging",slug:"/packaging/monitoring.yml",permalink:"/docs/packaging/monitoring.yml",draft:!1,unlisted:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/packaging/monitoring.yml.md",tags:[],version:"current",lastUpdatedAt:1732716912e3,frontMatter:{title:"Monitoring YAML",summary:"The purpose and format of monitoring.yml"},sidebar:"packagingSidebar",previous:{title:"Git Basics",permalink:"/docs/packaging/git-basics"},next:{title:"Package YAML",permalink:"/docs/packaging/package.yml"}},a={},c=[{value:"Adding monitoring.yml to an existing package",id:"adding-monitoringyml-to-an-existing-package",level:2},{value:"systemd as an example",id:"systemd-as-an-example",level:2},{value:""releases" fields",id:"releases-fields",level:2},{value:"Finding the Anitya ID",id:"finding-the-anitya-id",level:3},{value:""security" fields",id:"security-fields",level:2},{value:"What is a CPE Name?",id:"what-is-a-cpe-name",level:3},{value:"Finding the CPE Name",id:"finding-the-cpe-name",level:3},{value:"No known CPE",id:"no-known-cpe",level:3}];function l(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",p:"p",pre:"pre",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,t.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.header,{children:(0,i.jsx)(n.h1,{id:"monitoringyml",children:(0,i.jsx)(n.code,{children:"monitoring.yml"})})}),"\n",(0,i.jsx)(n.admonition,{type:"important",children:(0,i.jsxs)(n.p,{children:["A ",(0,i.jsx)(n.code,{children:"monitoring.yml"})," file is strongly suggested, but not yet required for Solus packages."]})}),"\n",(0,i.jsxs)(n.p,{children:["A ",(0,i.jsx)(n.code,{children:"monitoring.yml"})," file is included in the Packages repository directory for every Solus package to enable automatic scanning for new releases and security advisories."]}),"\n",(0,i.jsxs)(n.p,{children:["Checking for new releases is done by mapping the Solus package to an ",(0,i.jsx)(n.a,{href:"https://github.com/fedora-infra/anitya",children:"Anitya"})," ID. ",(0,i.jsx)(n.em,{children:"Anitya"})," is a Red Hat project, part of ",(0,i.jsx)(n.a,{href:"https://release-monitoring.org/",children:"release-monitoring.org"})]}),"\n",(0,i.jsxs)(n.p,{children:["Checking for security advisories (",(0,i.jsx)(n.a,{href:"https://en.wikipedia.org/wiki/Common_Vulnerabilities_and_Exposures",children:"CVEs"}),"), is done by mapping the Solus package to a ",(0,i.jsx)(n.em,{children:"Common Platform Enumeration Name"})," (",(0,i.jsx)(n.a,{href:"https://nvd.nist.gov/products/cpe",children:"CPE"}),") from the National Vulnerability Database."]}),"\n",(0,i.jsx)(n.h2,{id:"adding-monitoringyml-to-an-existing-package",children:"Adding monitoring.yml to an existing package"}),"\n",(0,i.jsxs)(n.p,{children:["To add a ",(0,i.jsx)(n.code,{children:"monitoring.yml"})," file to an existing package you can use the following ",(0,i.jsx)(n.code,{children:"go-task"})," command to add a template file, starting from within the directory containing the ",(0,i.jsx)(n.code,{children:"package.yml"})," for a given package:"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"go-task add-monitoring\n"})}),"\n",(0,i.jsx)(n.p,{children:"Which will create a file with the following contents:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-yaml",children:"# Remove all comments before submitting, except CPE check date if none found\nreleases:\n id: ~ # Check https://release-monitoring.org/\n rss: ~ # For example https://github.com/PyO3/maturin/releases.atom\n# No known CPE, checked 2024-04-24\nsecurity:\n cpe: ~\n"})}),"\n",(0,i.jsxs)(n.p,{children:["You must, at minimum, fill out ",(0,i.jsx)(n.code,{children:"id"})," and check if the package has an RSS feed and ",(0,i.jsx)(n.a,{href:"#what-is-a-cpe-name",children:"CPE name"}),". If you can find no data for either of these fields, it must be set to ",(0,i.jsx)(n.code,{children:"~"}),"."]}),"\n",(0,i.jsx)(n.h2,{id:"systemd-as-an-example",children:"systemd as an example"}),"\n",(0,i.jsxs)(n.p,{children:["Let's look at the ",(0,i.jsx)(n.code,{children:"monitoring.yml"})," file for ",(0,i.jsx)(n.code,{children:"systemd"})," as an example."]}),"\n",(0,i.jsxs)(n.p,{children:["The ",(0,i.jsx)(n.code,{children:"systemd"})," directory in the Packages repository looks like this:"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-text",children:"systemd\n\u251c\u2500\u2500 monitoring.yml\n\u251c\u2500\u2500 package.yml\n\u251c\u2500\u2500 pspec_x86_64.xml\n\u2514\u2500\u2500 *lots of other files we can ignore*\n"})}),"\n",(0,i.jsxs)(n.p,{children:["The ",(0,i.jsx)(n.code,{children:"monitoring.yml"})," looks like this:"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-yaml",children:'releases:\n id: 205088\n ignore:\n # We only update to the n-1 stable release. So for now we\'re only interested in 252.x updates\n - "253.*"\n rss: https://github.com/systemd/systemd-stable/tags.atom\nsecurity:\n cpe:\n - vendor: systemd_project\n product: systemd\n - vendor: freedesktop\n product: systemd\n ignore:\n # A non-existent CVE added here as an example\n - CVE-2022-55555\n'})}),"\n",(0,i.jsx)(n.h2,{id:"releases-fields",children:'"releases" fields'}),"\n",(0,i.jsx)(n.p,{children:"Fields used to monitor for new versions."}),"\n",(0,i.jsxs)(n.table,{children:[(0,i.jsx)(n.thead,{children:(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.th,{children:"Field"}),(0,i.jsx)(n.th,{children:"Type"}),(0,i.jsx)(n.th,{children:"Required ?"}),(0,i.jsx)(n.th,{children:"Description"})]})}),(0,i.jsxs)(n.tbody,{children:[(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"id"})}),(0,i.jsx)(n.td,{children:"integer"}),(0,i.jsx)(n.td,{children:"Yes"}),(0,i.jsxs)(n.td,{children:["Anitya ID from ",(0,i.jsx)(n.a,{href:"https://release-monitoring.org/",children:"release-monitoring.org"})]})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"ignore"})}),(0,i.jsx)(n.td,{children:"list of regular expressions"}),(0,i.jsx)(n.td,{children:"No"}),(0,i.jsx)(n.td,{children:"List of regular expressions enclosed in quotes matching versions to ignore. Include a comment explaining the ignored versions."})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"rss"})}),(0,i.jsx)(n.td,{children:"URL"}),(0,i.jsx)(n.td,{children:"Yes"}),(0,i.jsxs)(n.td,{children:['URL for a releases RSS feed. If the only RSS feed you can find for a project is a general "news" feed, set it to ',(0,i.jsx)(n.code,{children:"~"}),'. For GitHub projects, you can use the "tags" or "releases" feed: ',(0,i.jsx)(n.code,{children:"https://github.com/USER/REPOSITORY/tagsORreleases.atom"})]})]})]})]}),"\n",(0,i.jsx)(n.h3,{id:"finding-the-anitya-id",children:"Finding the Anitya ID"}),"\n",(0,i.jsxs)(n.p,{children:["To find the Anitya ID, search ",(0,i.jsx)(n.a,{href:"https://release-monitoring.org/",children:"release-monitoring.org"})," by project name, then take the ID out of the URL for the correct search result."]}),"\n",(0,i.jsxs)(n.p,{children:["For example, the correct ",(0,i.jsx)(n.code,{children:"systemd"})," search result for us is ",(0,i.jsx)(n.code,{children:"systemd-stable"})," with the URL ",(0,i.jsx)(n.a,{href:"https://release-monitoring.org/project/205088/",children:"https://release-monitoring.org/project/205088/"}),", so we use ",(0,i.jsx)(n.code,{children:"205088"})," in the ",(0,i.jsx)(n.code,{children:"id"})," field"]}),"\n",(0,i.jsxs)(n.p,{children:["If a project is not tracked by release-monitoring.org, you can create an account and ",(0,i.jsx)(n.a,{href:"https://release-monitoring.org/static/docs/user-guide.html#creating-new-project",children:"add it."})]}),"\n",(0,i.jsx)(n.h2,{id:"security-fields",children:'"security" fields'}),"\n",(0,i.jsx)(n.p,{children:"Fields used to monitor for security advisories (CVEs)"}),"\n",(0,i.jsxs)(n.table,{children:[(0,i.jsx)(n.thead,{children:(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.th,{children:"Field"}),(0,i.jsx)(n.th,{children:"Type"}),(0,i.jsx)(n.th,{children:"Required ?"}),(0,i.jsx)(n.th,{children:"Description"})]})}),(0,i.jsxs)(n.tbody,{children:[(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"cpe"})}),(0,i.jsx)(n.td,{children:"list"}),(0,i.jsx)(n.td,{children:"Yes"}),(0,i.jsxs)(n.td,{children:["List of ",(0,i.jsx)(n.code,{children:"vendor:product"})," pairs from a full CPE name. CVEs for a given project may be published under more than one CPE; include more than one if that is likely."]})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"ignore"})}),(0,i.jsx)(n.td,{children:"list of strings"}),(0,i.jsx)(n.td,{children:"No"}),(0,i.jsx)(n.td,{children:"List of specific CVE identifiers which can be ignored, including a comment explaining why each CVE was ignored. As an example, a CVE can be ignored if the Solus package includes a patch fixing the CVE."})]})]})]}),"\n",(0,i.jsx)(n.h3,{id:"what-is-a-cpe-name",children:"What is a CPE Name?"}),"\n",(0,i.jsxs)(n.p,{children:["A ",(0,i.jsx)(n.a,{href:"https://en.wikipedia.org/wiki/Common_Platform_Enumeration",children:"CPE Name"})," is a structured naming scheme for information technology systems, primarily used to search for CVEs."]}),"\n",(0,i.jsx)(n.p,{children:"CPE names contain redundant information we can ignore, we are only interested in the vendor and the product."}),"\n",(0,i.jsxs)(n.p,{children:["For example, ",(0,i.jsx)(n.code,{children:"cpe:2.3:a:systemd_project:systemd"})," is the CPE for the ",(0,i.jsx)(n.em,{children:"vendor"})," ",(0,i.jsx)(n.code,{children:"systemd_project"}),", and the ",(0,i.jsx)(n.em,{children:"product"})," ",(0,i.jsx)(n.code,{children:"systemd"}),"."]}),"\n",(0,i.jsx)(n.h3,{id:"finding-the-cpe-name",children:"Finding the CPE Name"}),"\n",(0,i.jsxs)(n.p,{children:["The easiest way to search for CPE Names is with the following command; replacing ",(0,i.jsx)(n.code,{children:"systemd"})," with your search term:"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:'curl -s -X POST https://cpe-guesser.cve-search.org/search -d "{\\"query\\": [\\"systemd\\"]}" | jq .\n'})}),"\n",(0,i.jsxs)(n.p,{children:["Note this command uses the ",(0,i.jsx)(n.code,{children:"jq"})," tool, which you may not have installed:"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"sudo eopkg it jq\n"})}),"\n",(0,i.jsxs)(n.p,{children:["If you have our ",(0,i.jsx)(n.a,{href:"/docs/packaging/prepare-for-packaging#set-up-repository-helper-functions-optional",children:"helper functions"})," installed, you can use the following command:"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"cpesearch systemd\n"})}),"\n",(0,i.jsx)(n.admonition,{type:"tip",children:(0,i.jsx)(n.p,{children:'Convert your search term to lower case and try variations on the search term if you get no results. The CPE search is not a "fuzzy" search.'})}),"\n",(0,i.jsx)(n.p,{children:"The command returns the following:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-text",children:'[\n [\n 49192,\n "cpe:2.3:a:ubuntu_developers:systemd"\n ],\n [\n 116392,\n "cpe:2.3:a:lennart_poettering:systemd"\n ],\n [\n 120506,\n "cpe:2.3:a:freedesktop:systemd"\n ],\n [\n 120627,\n "cpe:2.3:a:systemd_project:systemd"\n ]\n]\n'})}),"\n",(0,i.jsx)(n.p,{children:"Ignore the numerical ids, let's walk through the CPEs by vendor:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"ubuntu_developers"})," is for ",(0,i.jsx)(n.code,{children:"systemd"})," patched by Ubuntu; we can ignore it"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"lennart_poettering"})," is for the main ",(0,i.jsx)(n.code,{children:"systemd"})," developer and is probably a bleeding edge vendor; ignore it"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"freedesktop"})," is from freedesktop.org and is a good candidate, so we add it"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"systemd_project"})," is a good candidate, so we add it"]}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"no-known-cpe",children:"No known CPE"}),"\n",(0,i.jsx)(n.p,{children:"If an established product hasn't had a security advisory in the past, it might not have a CPE."}),"\n",(0,i.jsxs)(n.p,{children:["In that case, include an empty ",(0,i.jsx)(n.code,{children:"security"})," and ",(0,i.jsx)(n.code,{children:"cpe"})," field with a comment in the following format:"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-yaml",children:"# No known CPE, checked 2024-01-23\nsecurity:\n cpe: ~\n"})}),"\n",(0,i.jsx)(n.admonition,{type:"tip",children:(0,i.jsx)(n.p,{children:"If you are unsure of what to do in this case, feel free to ask in the Solus Packaging Matrix room."})})]})}function h(e={}){const{wrapper:n}={...(0,t.a)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(l,{...e})}):l(e)}},11151:(e,n,s)=>{s.d(n,{Z:()=>d,a:()=>o});var i=s(67294);const t={},r=i.createContext(t);function o(e){const n=i.useContext(r);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function d(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:o(e.components),i.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/08bef15d.701eeb09.js b/assets/js/08bef15d.701eeb09.js new file mode 100644 index 000000000..b05e34b28 --- /dev/null +++ b/assets/js/08bef15d.701eeb09.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([["7450"],{64401:function(e,t,r){r.r(t),r.d(t,{metadata:()=>s,contentTitle:()=>l,default:()=>h,assets:()=>a,toc:()=>c,frontMatter:()=>o});var s=JSON.parse('{"id":"user/privacy","title":"Privacy Policy","description":"Solus installations","source":"@site/docs/user/privacy.md","sourceDirName":"user","slug":"/user/privacy","permalink":"/docs/user/privacy","draft":false,"unlisted":false,"editUrl":"https://github.com/getsolus/help-center-docs/tree/master/docs/user/privacy.md","tags":[],"version":"current","lastUpdatedAt":1733757592000,"frontMatter":{},"sidebar":"userSidebar","previous":{"title":"Repository Management","permalink":"/docs/user/package-management/repo-management"},"next":{"title":"Software","permalink":"/docs/category/software"}}'),i=r("85893"),n=r("50065");let o={},l="Privacy Policy",a={},c=[{value:"Solus installations",id:"solus-installations",level:2},{value:"Solus forum (discuss.getsol.us)",id:"solus-forum-discussgetsolus",level:2},{value:"Third party hosts",id:"third-party-hosts",level:3},{value:"Cloudflare",id:"cloudflare",level:4},{value:"GitHub",id:"github",level:4},{value:"Matrix",id:"matrix",level:4},{value:"Your rights under the GDPR",id:"your-rights-under-the-gdpr",level:2},{value:"Privacy contact",id:"privacy-contact",level:2}];function d(e){let t={a:"a",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",h4:"h4",header:"header",li:"li",p:"p",ul:"ul",...(0,n.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(t.header,{children:(0,i.jsx)(t.h1,{id:"privacy-policy",children:"Privacy Policy"})}),"\n",(0,i.jsx)(t.h2,{id:"solus-installations",children:"Solus installations"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:"Solus does not collect or store data from user's machines."}),"\n",(0,i.jsx)(t.li,{children:"Solus does not use telemetry or automatic error reporting."}),"\n",(0,i.jsx)(t.li,{children:"Some packages may include their own built-in telemetry (examples: Firefox, Steam). Solus cannot control data collected in this way. These packages may allow you to disable this telemetry."}),"\n"]}),"\n",(0,i.jsx)(t.h2,{id:"solus-forum-discussgetsolus",children:"Solus forum (discuss.getsol.us)"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:"You may view the forum without providing personal data"}),"\n",(0,i.jsx)(t.li,{children:"Cookies are used to store login information"}),"\n",(0,i.jsxs)(t.li,{children:["We collect personal information when you register for an account:","\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.em,{children:"Username"})," and (optional) ",(0,i.jsx)(t.em,{children:"password"})," for account identification and authorization."]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.em,{children:"Email address"})," for account recovery and notifications."]}),"\n",(0,i.jsxs)(t.li,{children:["(optional) ",(0,i.jsx)(t.em,{children:"Third party login information"})," to allow signing in using an SSO provider like ",(0,i.jsx)(t.em,{children:"GitHub"}),"."]}),"\n",(0,i.jsx)(t.li,{children:"This information will be retained and processed to authenticate logins. The information will be retained until you delete your account."}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(t.h3,{id:"third-party-hosts",children:"Third party hosts"}),"\n",(0,i.jsx)(t.p,{children:"Solus cannot control how data is collected and processed on the third party hosts we use. We use the following hosts:"}),"\n",(0,i.jsx)(t.h4,{id:"cloudflare",children:"Cloudflare"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:["The Solus package mirror ",(0,i.jsx)(t.code,{children:"cdn.getsol.us"})," is hosted by Cloudflare"]}),"\n",(0,i.jsx)(t.li,{children:(0,i.jsx)(t.a,{href:"https://www.cloudflare.com/privacypolicy/",children:"Cloudflare Privacy Policy"})}),"\n"]}),"\n",(0,i.jsx)(t.h4,{id:"github",children:"GitHub"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:["The Solus homepage ",(0,i.jsx)(t.code,{children:"getsol.us"}),", and the help center ",(0,i.jsx)(t.code,{children:"help.getsol.us"})," are hosted by GitHub Pages"]}),"\n",(0,i.jsxs)(t.li,{children:["Solus repositories are hosted on GitHub under the ",(0,i.jsxs)(t.a,{href:"https://github.com/getsolus/",children:[(0,i.jsx)(t.code,{children:"getsolus"})," organization"]})]}),"\n",(0,i.jsx)(t.li,{children:(0,i.jsx)(t.a,{href:"https://docs.github.com/en/site-policy/privacy-policies/github-general-privacy-statement",children:"GitHub Privacy Policy"})}),"\n"]}),"\n",(0,i.jsx)(t.h4,{id:"matrix",children:"Matrix"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:"The Solus Matrix rooms are hosted by the Matrix.org homeserver"}),"\n",(0,i.jsx)(t.li,{children:(0,i.jsx)(t.a,{href:"https://matrix.org/legal/privacy-notice",children:"Matrix.org Homeserver Privacy Notice"})}),"\n"]}),"\n",(0,i.jsx)(t.h2,{id:"your-rights-under-the-gdpr",children:"Your rights under the GDPR"}),"\n",(0,i.jsxs)(t.p,{children:["If you are covered by the ",(0,i.jsx)(t.a,{href:"https://gdpr.eu/",children:"GDPR"})," you have rights as a data subject. Your rights are detailed under ",(0,i.jsx)(t.a,{href:"https://gdpr.eu/article-12-how-controllers-should-provide-personal-data-to-the-subject/",children:"Chapter 3 of the GDPR"}),". Additionally, you have the right to lodge a complaint with your national ",(0,i.jsx)(t.a,{href:"https://www.edpb.europa.eu/about-edpb/about-edpb/members_en",children:"Data Protection Authority"}),"."]}),"\n",(0,i.jsx)(t.h2,{id:"privacy-contact",children:"Privacy contact"}),"\n",(0,i.jsxs)(t.p,{children:["Any concerns or requests about personal data should be sent to ",(0,i.jsx)(t.a,{href:"mailto:privacy@getsol.us",children:"privacy@getsol.us"})]})]})}function h(e={}){let{wrapper:t}={...(0,n.a)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(d,{...e})}):d(e)}},50065:function(e,t,r){r.d(t,{Z:function(){return l},a:function(){return o}});var s=r(67294);let i={},n=s.createContext(i);function o(e){let t=s.useContext(n);return s.useMemo(function(){return"function"==typeof e?e(t):{...t,...e}},[t,e])}function l(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:o(e.components),s.createElement(n.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/08bef15d.856e2b7d.js b/assets/js/08bef15d.856e2b7d.js deleted file mode 100644 index 81898eda3..000000000 --- a/assets/js/08bef15d.856e2b7d.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[7228],{40846:(e,s,t)=>{t.r(s),t.d(s,{assets:()=>a,contentTitle:()=>n,default:()=>h,frontMatter:()=>o,metadata:()=>l,toc:()=>c});var r=t(85893),i=t(11151);const o={},n="Privacy Policy",l={id:"user/privacy",title:"Privacy Policy",description:"Solus installations",source:"@site/docs/user/privacy.md",sourceDirName:"user",slug:"/user/privacy",permalink:"/docs/user/privacy",draft:!1,unlisted:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/privacy.md",tags:[],version:"current",lastUpdatedAt:1732716912e3,frontMatter:{},sidebar:"userSidebar",previous:{title:"Repository Management",permalink:"/docs/user/package-management/repo-management"},next:{title:"Software",permalink:"/docs/category/software"}},a={},c=[{value:"Solus installations",id:"solus-installations",level:2},{value:"Solus forum (discuss.getsol.us)",id:"solus-forum-discussgetsolus",level:2},{value:"Third party hosts",id:"third-party-hosts",level:3},{value:"Cloudflare",id:"cloudflare",level:4},{value:"GitHub",id:"github",level:4},{value:"Matrix",id:"matrix",level:4},{value:"Your rights under the GDPR",id:"your-rights-under-the-gdpr",level:2},{value:"Privacy contact",id:"privacy-contact",level:2}];function d(e){const s={a:"a",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",h4:"h4",header:"header",li:"li",p:"p",ul:"ul",...(0,i.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(s.header,{children:(0,r.jsx)(s.h1,{id:"privacy-policy",children:"Privacy Policy"})}),"\n",(0,r.jsx)(s.h2,{id:"solus-installations",children:"Solus installations"}),"\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsx)(s.li,{children:"Solus does not collect or store data from user's machines."}),"\n",(0,r.jsx)(s.li,{children:"Solus does not use telemetry or automatic error reporting."}),"\n",(0,r.jsx)(s.li,{children:"Some packages may include their own built-in telemetry (examples: Firefox, Steam). Solus cannot control data collected in this way. These packages may allow you to disable this telemetry."}),"\n"]}),"\n",(0,r.jsx)(s.h2,{id:"solus-forum-discussgetsolus",children:"Solus forum (discuss.getsol.us)"}),"\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsx)(s.li,{children:"You may view the forum without providing personal data"}),"\n",(0,r.jsx)(s.li,{children:"Cookies are used to store login information"}),"\n",(0,r.jsxs)(s.li,{children:["We collect personal information when you register for an account:","\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.em,{children:"Username"})," and (optional) ",(0,r.jsx)(s.em,{children:"password"})," for account identification and authorization."]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.em,{children:"Email address"})," for account recovery and notifications."]}),"\n",(0,r.jsxs)(s.li,{children:["(optional) ",(0,r.jsx)(s.em,{children:"Third party login information"})," to allow signing in using an SSO provider like ",(0,r.jsx)(s.em,{children:"GitHub"}),"."]}),"\n",(0,r.jsx)(s.li,{children:"This information will be retained and processed to authenticate logins. The information will be retained until you delete your account."}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(s.h3,{id:"third-party-hosts",children:"Third party hosts"}),"\n",(0,r.jsx)(s.p,{children:"Solus cannot control how data is collected and processed on the third party hosts we use. We use the following hosts:"}),"\n",(0,r.jsx)(s.h4,{id:"cloudflare",children:"Cloudflare"}),"\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:["The Solus package mirror ",(0,r.jsx)(s.code,{children:"cdn.getsol.us"})," is hosted by Cloudflare"]}),"\n",(0,r.jsx)(s.li,{children:(0,r.jsx)(s.a,{href:"https://www.cloudflare.com/privacypolicy/",children:"Cloudflare Privacy Policy"})}),"\n"]}),"\n",(0,r.jsx)(s.h4,{id:"github",children:"GitHub"}),"\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:["The Solus homepage ",(0,r.jsx)(s.code,{children:"getsol.us"}),", and the help center ",(0,r.jsx)(s.code,{children:"help.getsol.us"})," are hosted by GitHub Pages"]}),"\n",(0,r.jsxs)(s.li,{children:["Solus repositories are hosted on GitHub under the ",(0,r.jsxs)(s.a,{href:"https://github.com/getsolus/",children:[(0,r.jsx)(s.code,{children:"getsolus"})," organization"]})]}),"\n",(0,r.jsx)(s.li,{children:(0,r.jsx)(s.a,{href:"https://docs.github.com/en/site-policy/privacy-policies/github-general-privacy-statement",children:"GitHub Privacy Policy"})}),"\n"]}),"\n",(0,r.jsx)(s.h4,{id:"matrix",children:"Matrix"}),"\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsx)(s.li,{children:"The Solus Matrix rooms are hosted by the Matrix.org homeserver"}),"\n",(0,r.jsx)(s.li,{children:(0,r.jsx)(s.a,{href:"https://matrix.org/legal/privacy-notice",children:"Matrix.org Homeserver Privacy Notice"})}),"\n"]}),"\n",(0,r.jsx)(s.h2,{id:"your-rights-under-the-gdpr",children:"Your rights under the GDPR"}),"\n",(0,r.jsxs)(s.p,{children:["If you are covered by the ",(0,r.jsx)(s.a,{href:"https://gdpr.eu/",children:"GDPR"})," you have rights as a data subject. Your rights are detailed under ",(0,r.jsx)(s.a,{href:"https://gdpr.eu/article-12-how-controllers-should-provide-personal-data-to-the-subject/",children:"Chapter 3 of the GDPR"}),". Additionally, you have the right to lodge a complaint with your national ",(0,r.jsx)(s.a,{href:"https://www.edpb.europa.eu/about-edpb/about-edpb/members_en",children:"Data Protection Authority"}),"."]}),"\n",(0,r.jsx)(s.h2,{id:"privacy-contact",children:"Privacy contact"}),"\n",(0,r.jsxs)(s.p,{children:["Any concerns or requests about personal data should be sent to ",(0,r.jsx)(s.a,{href:"mailto:privacy@getsol.us",children:"privacy@getsol.us"})]})]})}function h(e={}){const{wrapper:s}={...(0,i.a)(),...e.components};return s?(0,r.jsx)(s,{...e,children:(0,r.jsx)(d,{...e})}):d(e)}},11151:(e,s,t)=>{t.d(s,{Z:()=>l,a:()=>n});var r=t(67294);const i={},o=r.createContext(i);function n(e){const s=r.useContext(o);return r.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function l(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:n(e.components),r.createElement(o.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/09dbd43b.0c8820f5.js b/assets/js/09dbd43b.0c8820f5.js deleted file mode 100644 index 6a50c0efe..000000000 --- a/assets/js/09dbd43b.0c8820f5.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[9397],{78118:(e,s,t)=>{t.r(s),t.d(s,{assets:()=>d,contentTitle:()=>r,default:()=>h,frontMatter:()=>i,metadata:()=>l,toc:()=>a});var o=t(85893),n=t(11151);const i={title:"Boot Rescue",summary:"Troubleshooting the boot process for Solus"},r="Boot Rescue",l={id:"user/troubleshooting/boot-rescue",title:"Boot Rescue",description:"In this document, we will walk through restoring the ability to boot Solus.",source:"@site/docs/user/troubleshooting/boot-rescue.md",sourceDirName:"user/troubleshooting",slug:"/user/troubleshooting/boot-rescue",permalink:"/docs/user/troubleshooting/boot-rescue",draft:!1,unlisted:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/troubleshooting/boot-rescue.md",tags:[],version:"current",lastUpdatedAt:1732716912e3,frontMatter:{title:"Boot Rescue",summary:"Troubleshooting the boot process for Solus"},sidebar:"userSidebar",previous:{title:"Troubleshooting",permalink:"/docs/user/troubleshooting/"},next:{title:"Installation Issues",permalink:"/docs/user/troubleshooting/installation"}},d={},a=[{value:"Multi-booting",id:"multi-booting",level:2},{value:"An entry is present in /etc/fstab that is not present at boot time",id:"an-entry-is-present-in-etcfstab-that-is-not-present-at-boot-time",level:2},{value:"Incorrectly applied updates / disk changes",id:"incorrectly-applied-updates--disk-changes",level:2},{value:"Mounting your system",id:"mounting-your-system",level:3},{value:"Encrypted systems / LVM systems",id:"encrypted-systems--lvm-systems",level:4},{value:"UEFI",id:"uefi",level:4},{value:"Other partitions",id:"other-partitions",level:4},{value:"Chrooting to your Solus system",id:"chrooting-to-your-solus-system",level:3},{value:"Networking",id:"networking",level:3},{value:"Repairing packages",id:"repairing-packages",level:3},{value:"Correcting disks",id:"correcting-disks",level:3},{value:"Re-run system-wide configuration triggers",id:"re-run-system-wide-configuration-triggers",level:3},{value:"Regenerate UEFI boot entries",id:"regenerate-uefi-boot-entries",level:3},{value:"Unmounting your system",id:"unmounting-your-system",level:3}];function c(e){const s={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",header:"header",li:"li",ol:"ol",p:"p",pre:"pre",ul:"ul",...(0,n.a)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(s.header,{children:(0,o.jsx)(s.h1,{id:"boot-rescue",children:"Boot Rescue"})}),"\n",(0,o.jsx)(s.p,{children:"In this document, we will walk through restoring the ability to boot Solus."}),"\n",(0,o.jsx)(s.p,{children:"The inability to boot Solus can be attributed to various issues, such as:"}),"\n",(0,o.jsxs)(s.ul,{children:["\n",(0,o.jsx)(s.li,{children:'Multi-booting with an other operating system that "owns" GRUB and fails to show Solus after an upgrade of Solus is performed.'}),"\n",(0,o.jsx)(s.li,{children:'Upgrades, such as to the kernel, that may not have applied correctly. In which case this could affect "legacy boot" (non-UEFI) or UEFI systems.'}),"\n",(0,o.jsx)(s.li,{children:"If a disk is added, removed or had its UUID / mount point change."}),"\n"]}),"\n",(0,o.jsx)(s.p,{children:'NOTE: Most examples below use sdX as the drive name. If your system has nvme drives, substitute the appropriate name, for example "nvme0n1".'}),"\n",(0,o.jsx)(s.h2,{id:"multi-booting",children:"Multi-booting"}),"\n",(0,o.jsx)(s.p,{children:'Multi-booting is when you have multiple operating systems on the same device. Also referred to as "dual-booting" when only having two operating systems on the same device.'}),"\n",(0,o.jsxs)(s.p,{children:['The inability to access Solus in a multi-boot scenario typically applies to "legacy boot" (non-UEFI), where the other operating system owns GRUB, which is used booting itself and Solus. This can be resolved by accessing the other operating system and running ',(0,o.jsx)(s.code,{children:"sudo update-grub"}),"."]}),"\n",(0,o.jsxs)(s.h2,{id:"an-entry-is-present-in-etcfstab-that-is-not-present-at-boot-time",children:["An entry is present in ",(0,o.jsx)(s.code,{children:"/etc/fstab"})," that is not present at boot time"]}),"\n",(0,o.jsxs)(s.p,{children:["If you get to an emergency prompt when the system tries to boot, check ",(0,o.jsx)(s.code,{children:"/etc/fstab"}),'. Look for any entries that might refer to disks not present at boot, such as a USB drive or NFS mount. Try adding "noauto" and rebooting. A USB drive entry might look like:']}),"\n",(0,o.jsx)(s.pre,{children:(0,o.jsx)(s.code,{className:"language-bash",children:"UUID=XXXXXX /mnt/mydisk exfat noauto,uid=1000,gid=1000,umask=0022 0 0\n"})}),"\n",(0,o.jsx)(s.h2,{id:"incorrectly-applied-updates--disk-changes",children:"Incorrectly applied updates / disk changes"}),"\n",(0,o.jsx)(s.p,{children:"In the case that updates have not been applied correctly by the system, the updates were interrupted, or the disks have changed, it may be possible to boot rescue the Solus system. To do so, you will need:"}),"\n",(0,o.jsxs)(s.ol,{children:["\n",(0,o.jsx)(s.li,{children:"A Live ISO of Solus booted on your system"}),"\n",(0,o.jsx)(s.li,{children:"A terminal in that Live ISO opened"}),"\n"]}),"\n",(0,o.jsx)(s.h3,{id:"mounting-your-system",children:"Mounting your system"}),"\n",(0,o.jsxs)(s.p,{children:["Whether you're using GRUB or UEFI, you will need to mount your Solus root (",(0,o.jsx)(s.code,{children:"/"}),") partition as the first step of performing a boot rescue. This is typically your primary partition, formatted as the filesystem type ",(0,o.jsx)(s.code,{children:"ext4"}),"."]}),"\n",(0,o.jsxs)(s.ol,{children:["\n",(0,o.jsxs)(s.li,{children:["First we need to be the root user. Type: ",(0,o.jsx)(s.code,{children:"sudo su"})]}),"\n",(0,o.jsxs)(s.li,{children:["Next we make a directory where we will mount our local Solus system: ",(0,o.jsx)(s.code,{children:"mkdir /target"})]}),"\n",(0,o.jsxs)(s.li,{children:["Now, using ",(0,o.jsx)(s.code,{children:"lsblk"}),", determine the partition of the Solus system. We recommend checking the size of the partition listed and if it matches the size of your Solus install, use that. It will likely be something along the lines of ",(0,o.jsx)(s.code,{children:"sda#"})," or ",(0,o.jsx)(s.code,{children:"sdb#"}),". For NVMe drives, the name will look like ",(0,o.jsx)(s.code,{children:"nvme0n1px"}),'\nNote: If you see "lvm" as the type, the system has LVM partitions. See the next section for how to mount them.']}),"\n",(0,o.jsxs)(s.li,{children:['If your root partition is of type sdX / nvme0n1x, replace the "sdX#" in the following command with the partition and mount to the target directory we created: ',(0,o.jsx)(s.code,{children:"mount /dev/sdX# /target"})]}),"\n"]}),"\n",(0,o.jsx)(s.h4,{id:"encrypted-systems--lvm-systems",children:"Encrypted systems / LVM systems"}),"\n",(0,o.jsx)(s.p,{children:"If you use LVM volumes on your system, the process for mounting the system is a little different.\nIf you use LUKS-based encryption, the process will involve decrypting your LUKS partition before mounting it to the correct location. To do this, note the sda / sdb device from the prior steps and follow the steps below:"}),"\n",(0,o.jsxs)(s.ol,{children:["\n",(0,o.jsxs)(s.li,{children:["If the disk is encrypted, decrypt it by running ",(0,o.jsx)(s.code,{children:"cryptsetup luksOpen /dev/sdX# decrypted"}),", replacing ",(0,o.jsx)(s.code,{children:"X#"})," with the partition you identified, and enter your password when prompted."]}),"\n",(0,o.jsxs)(s.li,{children:["Next check the output of ",(0,o.jsx)(s.code,{children:"lsblk"}),". This will show you any LVM volumes. You should now see ",(0,o.jsx)(s.code,{children:"SolusSystem-Swap"})," and ",(0,o.jsx)(s.code,{children:"SolusSystem-Root"}),".\nFor non-encrypted volumes, you may see something like this. In this example, ",(0,o.jsx)(s.code,{children:"SolusSystem-Swap"})," and ",(0,o.jsx)(s.code,{children:"SolusSystem-Root"}),' are under "sda2":']}),"\n"]}),"\n",(0,o.jsx)(s.pre,{children:(0,o.jsx)(s.code,{className:"language-bash",children:"NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT\nloop0 7:0 0 1.3G 1 loop /run/initramfs/squashfs\nloop1 7:1 0 6.2G 1 loop /run/rootfsbase\nsr0 11:0 1 2.7G 0 rom /run/initramfs/live\nzram0 251:0 0 7.8G 0 disk [SWAP]\nsda 252:0 0 96G 0 disk\n\u251c\u2500sda1 252:1 0 287M 0 part\n\u2514\u2500sda2 252:2 0 69.7G 0 part\n \u251c\u2500SolusSystem-Swap 253:0 0 3.7G 0 lvm\n \u2514\u2500SolusSystem-Root 253:1 0 46G 0 lvm\n...\n"})}),"\n",(0,o.jsxs)(s.p,{children:["For decrypted volumes, the output should look similar to this, with ",(0,o.jsx)(s.code,{children:"SolusSystem-Swap"})," and ",(0,o.jsx)(s.code,{children:"SolusSystem-Root"}),' being under "decrypted":']}),"\n",(0,o.jsx)(s.pre,{children:(0,o.jsx)(s.code,{className:"language-bash",children:"NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT\nloop0 7:0 0 1.3G 1 loop /run/initramfs/squashfs\nloop1 7:1 0 6.2G 1 loop /run/rootfsbase\nloop2 7:2 0 6.2G 1 loop\n\u2514\u2500live-base 253:0 0 6.2G 1 dm\nsda 8:0 0 238.5G 0 disk\n\u251c\u2500sda1 8:1 0 488.3M 0 part\n\u2514\u2500sda2 8:2 0 238G 0 part\n \u2514\u2500decrypted 253:1 0 238G 0 crypt\n \u251c\u2500SolusSystem-Swap 253:2 0 3.7G 0 lvm\n \u2514\u2500SolusSystem-Root 253:3 0 234.3G 0 lvm\nsdb 8:16 1 7.3G 0 disk\n\u251c\u2500sdb1 8:17 1 1.4G 0 part /run/initramfs/live\n\u2514\u2500sdb2 8:18 1 40M 0 part\n"})}),"\n",(0,o.jsxs)(s.ol,{start:"3",children:["\n",(0,o.jsxs)(s.li,{children:["Mount ",(0,o.jsx)(s.code,{children:"SolusSystem-Root"})," by running ",(0,o.jsx)(s.code,{children:"mount /dev/mapper/SolusSystem-Root /target"})]}),"\n"]}),"\n",(0,o.jsx)(s.h4,{id:"uefi",children:"UEFI"}),"\n",(0,o.jsxs)(s.p,{children:["If your system uses UEFI as opposed to GRUB, you will also need to mount your EFI System Partition, otherwise referred to as ESP. If you followed our ",(0,o.jsx)(s.a,{href:"/docs/user/quick-start/installation/disks#uefi",children:"UEFI guide"}),' during installation of Solus, then in all likelihood your ESP will be about 1GB in size. For an older installation, it may be around 512MB. If you\'re unsure of the partition, run the following, replacing "X" with the same letter used during your mounting of your root file system, minus the number:']}),"\n",(0,o.jsx)(s.p,{children:"For HDD / SDD drives:"}),"\n",(0,o.jsx)(s.pre,{children:(0,o.jsx)(s.code,{className:"language-bash",children:"fdisk -o Device,Size,Type -l /dev/sdX\n"})}),"\n",(0,o.jsx)(s.p,{children:"For nvme drives:"}),"\n",(0,o.jsx)(s.pre,{children:(0,o.jsx)(s.code,{className:"language-bash",children:"fdisk -o Device,Size,Type -l /dev/nvme0nX\n"})}),"\n",(0,o.jsx)(s.p,{children:"Your output may look something similar to:"}),"\n",(0,o.jsx)(s.pre,{children:(0,o.jsx)(s.code,{className:"language-bash",children:"Device Size Type\n/dev/sda1 512M EFI System\n/dev/sda2 111.3G Linux filesystem\n"})}),"\n",(0,o.jsxs)(s.p,{children:["Notice we have ",(0,o.jsx)(s.code,{children:"/dev/sda1"})," as the Device with the ",(0,o.jsx)(s.code,{children:"EFI System"})," type and roughly 500MB in size. This is the partition we will be mounting."]}),"\n",(0,o.jsxs)(s.p,{children:["With our ESP device known, let's go ahead and mount it, replacing ",(0,o.jsx)(s.code,{children:"sdX#"})," in the case below with our partition."]}),"\n",(0,o.jsx)(s.pre,{children:(0,o.jsx)(s.code,{className:"language-bash",children:"mount /dev/sdX# /target/boot\n"})}),"\n",(0,o.jsx)(s.h4,{id:"other-partitions",children:"Other partitions"}),"\n",(0,o.jsxs)(s.p,{children:["If your system has other specific partitions, such as a separate ",(0,o.jsx)(s.code,{children:"/home"})," partition, they will also need to be mounted."]}),"\n",(0,o.jsx)(s.h3,{id:"chrooting-to-your-solus-system",children:"Chrooting to your Solus system"}),"\n",(0,o.jsx)(s.p,{children:"To access your system and perform boot rescue, you will need to mount specific directories from the host system (in this case, our Live ISO), to our Solus system, and then chroot (change root) to the Solus system."}),"\n",(0,o.jsx)(s.p,{children:"First run the following commands:"}),"\n",(0,o.jsx)(s.pre,{children:(0,o.jsx)(s.code,{className:"language-bash",children:"mount --types proc /proc /target/proc\nmount --rbind /dev /target/dev\nmount --rbind /sys /target/sys\nmount --make-rslave /target/dev\nmount --make-rslave /target/sys\n"})}),"\n",(0,o.jsxs)(s.p,{children:["Assuming all goes well, you should now be able to chroot into your Solus system by doing ",(0,o.jsx)(s.code,{children:"chroot /target"}),"."]}),"\n",(0,o.jsx)(s.h3,{id:"networking",children:"Networking"}),"\n",(0,o.jsxs)(s.p,{children:["To validate a working network connection (assuming a network connection is available in your live image), you can run ",(0,o.jsx)(s.code,{children:"ping google.com"})," in the chrooted environment. If you get responses from ",(0,o.jsx)(s.code,{children:"google.com"}),", you have a successful connection to the Internet. If you do not, try the following:"]}),"\n",(0,o.jsxs)(s.ol,{children:["\n",(0,o.jsxs)(s.li,{children:["Exit the chroot by typing ",(0,o.jsx)(s.code,{children:"exit"})]}),"\n",(0,o.jsx)(s.li,{children:"Run:"}),"\n"]}),"\n",(0,o.jsx)(s.pre,{children:(0,o.jsx)(s.code,{className:"language-bash",children:"cp /run/systemd/resolve/stub-resolv.conf /target/run/systemd/resolve/\ncd /target/etc\nln -s ../run/systemd/resolve/stub-resolv.conf /target/etc/resolv.conf\n"})}),"\n",(0,o.jsxs)(s.ol,{start:"3",children:["\n",(0,o.jsxs)(s.li,{children:["Chroot back into ",(0,o.jsx)(s.code,{children:"/target"})," by running ",(0,o.jsx)(s.code,{children:"chroot /target"})," again."]}),"\n",(0,o.jsx)(s.li,{children:"Retry networking."}),"\n"]}),"\n",(0,o.jsx)(s.h3,{id:"repairing-packages",children:"Repairing packages"}),"\n",(0,o.jsx)(s.p,{children:"In the event you had an incomplete upgrade, try the following commands:"}),"\n",(0,o.jsxs)(s.ol,{children:["\n",(0,o.jsx)(s.li,{children:(0,o.jsx)(s.code,{children:"sudo eopkg rebuild-db"})}),"\n",(0,o.jsx)(s.li,{children:(0,o.jsx)(s.code,{children:"sudo eopkg up"})}),"\n",(0,o.jsxs)(s.li,{children:[(0,o.jsx)(s.code,{children:"sudo eopkg check | grep Broken | awk '{print $4}' | xargs sudo eopkg it --reinstall"}),'\nIf you see output that starts with "Usage", this means the system has no broken packages.']}),"\n",(0,o.jsxs)(s.li,{children:['Try reverting the latest package transaction (this should only be done if the first two steps, followed by the "Re-run System-Wide Configuration Triggers", failed to produce a successful bootup). See ',(0,o.jsx)(s.a,{href:"/docs/user/package-management/history-and-rollback",children:"our documentation on history and rollback"})," for more information, followed by re-applying your updates by running ",(0,o.jsx)(s.code,{children:"sudo eopkg up"}),"."]}),"\n"]}),"\n",(0,o.jsx)(s.h3,{id:"correcting-disks",children:"Correcting disks"}),"\n",(0,o.jsx)(s.p,{children:"In the event that disk changes had caused the system to fail to boot, try the following in the chroot environment:"}),"\n",(0,o.jsxs)(s.ol,{children:["\n",(0,o.jsxs)(s.li,{children:["Get the UUIDs of your partitions the system expects from ",(0,o.jsx)(s.code,{children:"/etc/fstab"}),"."]}),"\n",(0,o.jsxs)(s.li,{children:["Compare this to the output of ",(0,o.jsx)(s.code,{children:"ls -lah /dev/disk/by-uuid"})]}),"\n"]}),"\n",(0,o.jsx)(s.h3,{id:"re-run-system-wide-configuration-triggers",children:"Re-run system-wide configuration triggers"}),"\n",(0,o.jsx)(s.p,{children:"In the chroot environment, run the following command which will perform various configuration triggers to update your icon cache, update GRUB and EFI configuration, re-compile settings, and more:"}),"\n",(0,o.jsx)(s.pre,{children:(0,o.jsx)(s.code,{className:"language-bash",children:"sudo usysconf run -f\n"})}),"\n",(0,o.jsx)(s.h3,{id:"regenerate-uefi-boot-entries",children:"Regenerate UEFI boot entries"}),"\n",(0,o.jsx)(s.p,{children:"Run the following command, which will update the boot entries for your EFI menu:"}),"\n",(0,o.jsx)(s.pre,{children:(0,o.jsx)(s.code,{className:"language-bash",children:"sudo clr-boot-manager update\n"})}),"\n",(0,o.jsxs)(s.p,{children:["After this, you should exit your chroot with ",(0,o.jsx)(s.code,{children:"exit"})," then reboot your system. In the event you are still unable to access Solus, please ",(0,o.jsx)(s.a,{href:"/docs/user/contributing/getting-involved",children:"contact us"}),"."]}),"\n",(0,o.jsx)(s.h3,{id:"unmounting-your-system",children:"Unmounting your system"}),"\n",(0,o.jsx)(s.p,{children:"In case further partition modifications are required, there's a series of steps that must be followed."}),"\n",(0,o.jsxs)(s.p,{children:["If you are still chrooted you have to exit the chroot environment by pressing ",(0,o.jsx)(s.code,{children:"Ctrl"})," + ",(0,o.jsx)(s.code,{children:"D"}),"."]}),"\n",(0,o.jsx)(s.p,{children:"Then proceed with unmounting the filesystem."}),"\n",(0,o.jsx)(s.pre,{children:(0,o.jsx)(s.code,{className:"language-bash",children:"umount -R /target\n"})}),"\n",(0,o.jsx)(s.p,{children:"In case of having a LUKS-based encryption you'll have to deactivate your logical volumes plus volume groups and then close your LUKS partition."}),"\n",(0,o.jsx)(s.pre,{children:(0,o.jsx)(s.code,{className:"language-bash",children:"lvchange -a n /dev/SolusSystem/Swap # `-a n` means `active: no`\nlvchange -a n /dev/SolusSystem/Root\nvgchange -a n SolusSystem\ncryptsetup luksClose decrypted\n"})})]})}function h(e={}){const{wrapper:s}={...(0,n.a)(),...e.components};return s?(0,o.jsx)(s,{...e,children:(0,o.jsx)(c,{...e})}):c(e)}},11151:(e,s,t)=>{t.d(s,{Z:()=>l,a:()=>r});var o=t(67294);const n={},i=o.createContext(n);function r(e){const s=o.useContext(i);return o.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function l(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:r(e.components),o.createElement(i.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/09dbd43b.33479490.js b/assets/js/09dbd43b.33479490.js new file mode 100644 index 000000000..55e01d623 --- /dev/null +++ b/assets/js/09dbd43b.33479490.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([["8388"],{56721:function(e,s,t){t.r(s),t.d(s,{metadata:()=>o,contentTitle:()=>l,default:()=>h,assets:()=>a,toc:()=>d,frontMatter:()=>r});var o=JSON.parse('{"id":"user/troubleshooting/boot-rescue","title":"Boot Rescue","description":"In this document, we will walk through restoring the ability to boot Solus.","source":"@site/docs/user/troubleshooting/boot-rescue.md","sourceDirName":"user/troubleshooting","slug":"/user/troubleshooting/boot-rescue","permalink":"/docs/user/troubleshooting/boot-rescue","draft":false,"unlisted":false,"editUrl":"https://github.com/getsolus/help-center-docs/tree/master/docs/user/troubleshooting/boot-rescue.md","tags":[],"version":"current","lastUpdatedAt":1733757592000,"frontMatter":{"title":"Boot Rescue","summary":"Troubleshooting the boot process for Solus"},"sidebar":"userSidebar","previous":{"title":"Troubleshooting","permalink":"/docs/user/troubleshooting/"},"next":{"title":"Installation Issues","permalink":"/docs/user/troubleshooting/installation"}}'),n=t("85893"),i=t("50065");let r={title:"Boot Rescue",summary:"Troubleshooting the boot process for Solus"},l="Boot Rescue",a={},d=[{value:"Multi-booting",id:"multi-booting",level:2},{value:"An entry is present in /etc/fstab that is not present at boot time",id:"an-entry-is-present-in-etcfstab-that-is-not-present-at-boot-time",level:2},{value:"Incorrectly applied updates / disk changes",id:"incorrectly-applied-updates--disk-changes",level:2},{value:"Mounting your system",id:"mounting-your-system",level:3},{value:"Encrypted systems / LVM systems",id:"encrypted-systems--lvm-systems",level:4},{value:"UEFI",id:"uefi",level:4},{value:"Other partitions",id:"other-partitions",level:4},{value:"Chrooting to your Solus system",id:"chrooting-to-your-solus-system",level:3},{value:"Networking",id:"networking",level:3},{value:"Repairing packages",id:"repairing-packages",level:3},{value:"Correcting disks",id:"correcting-disks",level:3},{value:"Re-run system-wide configuration triggers",id:"re-run-system-wide-configuration-triggers",level:3},{value:"Regenerate UEFI boot entries",id:"regenerate-uefi-boot-entries",level:3},{value:"Unmounting your system",id:"unmounting-your-system",level:3}];function c(e){let s={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",header:"header",li:"li",ol:"ol",p:"p",pre:"pre",ul:"ul",...(0,i.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(s.header,{children:(0,n.jsx)(s.h1,{id:"boot-rescue",children:"Boot Rescue"})}),"\n",(0,n.jsx)(s.p,{children:"In this document, we will walk through restoring the ability to boot Solus."}),"\n",(0,n.jsx)(s.p,{children:"The inability to boot Solus can be attributed to various issues, such as:"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:'Multi-booting with an other operating system that "owns" GRUB and fails to show Solus after an upgrade of Solus is performed.'}),"\n",(0,n.jsx)(s.li,{children:'Upgrades, such as to the kernel, that may not have applied correctly. In which case this could affect "legacy boot" (non-UEFI) or UEFI systems.'}),"\n",(0,n.jsx)(s.li,{children:"If a disk is added, removed or had its UUID / mount point change."}),"\n"]}),"\n",(0,n.jsx)(s.p,{children:'NOTE: Most examples below use sdX as the drive name. If your system has nvme drives, substitute the appropriate name, for example "nvme0n1".'}),"\n",(0,n.jsx)(s.h2,{id:"multi-booting",children:"Multi-booting"}),"\n",(0,n.jsx)(s.p,{children:'Multi-booting is when you have multiple operating systems on the same device. Also referred to as "dual-booting" when only having two operating systems on the same device.'}),"\n",(0,n.jsxs)(s.p,{children:['The inability to access Solus in a multi-boot scenario typically applies to "legacy boot" (non-UEFI), where the other operating system owns GRUB, which is used booting itself and Solus. This can be resolved by accessing the other operating system and running ',(0,n.jsx)(s.code,{children:"sudo update-grub"}),"."]}),"\n",(0,n.jsxs)(s.h2,{id:"an-entry-is-present-in-etcfstab-that-is-not-present-at-boot-time",children:["An entry is present in ",(0,n.jsx)(s.code,{children:"/etc/fstab"})," that is not present at boot time"]}),"\n",(0,n.jsxs)(s.p,{children:["If you get to an emergency prompt when the system tries to boot, check ",(0,n.jsx)(s.code,{children:"/etc/fstab"}),'. Look for any entries that might refer to disks not present at boot, such as a USB drive or NFS mount. Try adding "noauto" and rebooting. A USB drive entry might look like:']}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-bash",children:"UUID=XXXXXX /mnt/mydisk exfat noauto,uid=1000,gid=1000,umask=0022 0 0\n"})}),"\n",(0,n.jsx)(s.h2,{id:"incorrectly-applied-updates--disk-changes",children:"Incorrectly applied updates / disk changes"}),"\n",(0,n.jsx)(s.p,{children:"In the case that updates have not been applied correctly by the system, the updates were interrupted, or the disks have changed, it may be possible to boot rescue the Solus system. To do so, you will need:"}),"\n",(0,n.jsxs)(s.ol,{children:["\n",(0,n.jsx)(s.li,{children:"A Live ISO of Solus booted on your system"}),"\n",(0,n.jsx)(s.li,{children:"A terminal in that Live ISO opened"}),"\n"]}),"\n",(0,n.jsx)(s.h3,{id:"mounting-your-system",children:"Mounting your system"}),"\n",(0,n.jsxs)(s.p,{children:["Whether you're using GRUB or UEFI, you will need to mount your Solus root (",(0,n.jsx)(s.code,{children:"/"}),") partition as the first step of performing a boot rescue. This is typically your primary partition, formatted as the filesystem type ",(0,n.jsx)(s.code,{children:"ext4"}),"."]}),"\n",(0,n.jsxs)(s.ol,{children:["\n",(0,n.jsxs)(s.li,{children:["First we need to be the root user. Type: ",(0,n.jsx)(s.code,{children:"sudo su"})]}),"\n",(0,n.jsxs)(s.li,{children:["Next we make a directory where we will mount our local Solus system: ",(0,n.jsx)(s.code,{children:"mkdir /target"})]}),"\n",(0,n.jsxs)(s.li,{children:["Now, using ",(0,n.jsx)(s.code,{children:"lsblk"}),", determine the partition of the Solus system. We recommend checking the size of the partition listed and if it matches the size of your Solus install, use that. It will likely be something along the lines of ",(0,n.jsx)(s.code,{children:"sda#"})," or ",(0,n.jsx)(s.code,{children:"sdb#"}),". For NVMe drives, the name will look like ",(0,n.jsx)(s.code,{children:"nvme0n1px"}),'\nNote: If you see "lvm" as the type, the system has LVM partitions. See the next section for how to mount them.']}),"\n",(0,n.jsxs)(s.li,{children:['If your root partition is of type sdX / nvme0n1x, replace the "sdX#" in the following command with the partition and mount to the target directory we created: ',(0,n.jsx)(s.code,{children:"mount /dev/sdX# /target"})]}),"\n"]}),"\n",(0,n.jsx)(s.h4,{id:"encrypted-systems--lvm-systems",children:"Encrypted systems / LVM systems"}),"\n",(0,n.jsx)(s.p,{children:"If you use LVM volumes on your system, the process for mounting the system is a little different.\nIf you use LUKS-based encryption, the process will involve decrypting your LUKS partition before mounting it to the correct location. To do this, note the sda / sdb device from the prior steps and follow the steps below:"}),"\n",(0,n.jsxs)(s.ol,{children:["\n",(0,n.jsxs)(s.li,{children:["If the disk is encrypted, decrypt it by running ",(0,n.jsx)(s.code,{children:"cryptsetup luksOpen /dev/sdX# decrypted"}),", replacing ",(0,n.jsx)(s.code,{children:"X#"})," with the partition you identified, and enter your password when prompted."]}),"\n",(0,n.jsxs)(s.li,{children:["Next check the output of ",(0,n.jsx)(s.code,{children:"lsblk"}),". This will show you any LVM volumes. You should now see ",(0,n.jsx)(s.code,{children:"SolusSystem-Swap"})," and ",(0,n.jsx)(s.code,{children:"SolusSystem-Root"}),".\nFor non-encrypted volumes, you may see something like this. In this example, ",(0,n.jsx)(s.code,{children:"SolusSystem-Swap"})," and ",(0,n.jsx)(s.code,{children:"SolusSystem-Root"}),' are under "sda2":']}),"\n"]}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-bash",children:"NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT\nloop0 7:0 0 1.3G 1 loop /run/initramfs/squashfs\nloop1 7:1 0 6.2G 1 loop /run/rootfsbase\nsr0 11:0 1 2.7G 0 rom /run/initramfs/live\nzram0 251:0 0 7.8G 0 disk [SWAP]\nsda 252:0 0 96G 0 disk\n\u251C\u2500sda1 252:1 0 287M 0 part\n\u2514\u2500sda2 252:2 0 69.7G 0 part\n \u251C\u2500SolusSystem-Swap 253:0 0 3.7G 0 lvm\n \u2514\u2500SolusSystem-Root 253:1 0 46G 0 lvm\n...\n"})}),"\n",(0,n.jsxs)(s.p,{children:["For decrypted volumes, the output should look similar to this, with ",(0,n.jsx)(s.code,{children:"SolusSystem-Swap"})," and ",(0,n.jsx)(s.code,{children:"SolusSystem-Root"}),' being under "decrypted":']}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-bash",children:"NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT\nloop0 7:0 0 1.3G 1 loop /run/initramfs/squashfs\nloop1 7:1 0 6.2G 1 loop /run/rootfsbase\nloop2 7:2 0 6.2G 1 loop\n\u2514\u2500live-base 253:0 0 6.2G 1 dm\nsda 8:0 0 238.5G 0 disk\n\u251C\u2500sda1 8:1 0 488.3M 0 part\n\u2514\u2500sda2 8:2 0 238G 0 part\n \u2514\u2500decrypted 253:1 0 238G 0 crypt\n \u251C\u2500SolusSystem-Swap 253:2 0 3.7G 0 lvm\n \u2514\u2500SolusSystem-Root 253:3 0 234.3G 0 lvm\nsdb 8:16 1 7.3G 0 disk\n\u251C\u2500sdb1 8:17 1 1.4G 0 part /run/initramfs/live\n\u2514\u2500sdb2 8:18 1 40M 0 part\n"})}),"\n",(0,n.jsxs)(s.ol,{start:"3",children:["\n",(0,n.jsxs)(s.li,{children:["Mount ",(0,n.jsx)(s.code,{children:"SolusSystem-Root"})," by running ",(0,n.jsx)(s.code,{children:"mount /dev/mapper/SolusSystem-Root /target"})]}),"\n"]}),"\n",(0,n.jsx)(s.h4,{id:"uefi",children:"UEFI"}),"\n",(0,n.jsxs)(s.p,{children:["If your system uses UEFI as opposed to GRUB, you will also need to mount your EFI System Partition, otherwise referred to as ESP. If you followed our ",(0,n.jsx)(s.a,{href:"/docs/user/quick-start/installation/disks#uefi",children:"UEFI guide"}),' during installation of Solus, then in all likelihood your ESP will be about 1GB in size. For an older installation, it may be around 512MB. If you\'re unsure of the partition, run the following, replacing "X" with the same letter used during your mounting of your root file system, minus the number:']}),"\n",(0,n.jsx)(s.p,{children:"For HDD / SDD drives:"}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-bash",children:"fdisk -o Device,Size,Type -l /dev/sdX\n"})}),"\n",(0,n.jsx)(s.p,{children:"For nvme drives:"}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-bash",children:"fdisk -o Device,Size,Type -l /dev/nvme0nX\n"})}),"\n",(0,n.jsx)(s.p,{children:"Your output may look something similar to:"}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-bash",children:"Device Size Type\n/dev/sda1 512M EFI System\n/dev/sda2 111.3G Linux filesystem\n"})}),"\n",(0,n.jsxs)(s.p,{children:["Notice we have ",(0,n.jsx)(s.code,{children:"/dev/sda1"})," as the Device with the ",(0,n.jsx)(s.code,{children:"EFI System"})," type and roughly 500MB in size. This is the partition we will be mounting."]}),"\n",(0,n.jsxs)(s.p,{children:["With our ESP device known, let's go ahead and mount it, replacing ",(0,n.jsx)(s.code,{children:"sdX#"})," in the case below with our partition."]}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-bash",children:"mount /dev/sdX# /target/boot\n"})}),"\n",(0,n.jsx)(s.h4,{id:"other-partitions",children:"Other partitions"}),"\n",(0,n.jsxs)(s.p,{children:["If your system has other specific partitions, such as a separate ",(0,n.jsx)(s.code,{children:"/home"})," partition, they will also need to be mounted."]}),"\n",(0,n.jsx)(s.h3,{id:"chrooting-to-your-solus-system",children:"Chrooting to your Solus system"}),"\n",(0,n.jsx)(s.p,{children:"To access your system and perform boot rescue, you will need to mount specific directories from the host system (in this case, our Live ISO), to our Solus system, and then chroot (change root) to the Solus system."}),"\n",(0,n.jsx)(s.p,{children:"First run the following commands:"}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-bash",children:"mount --types proc /proc /target/proc\nmount --rbind /dev /target/dev\nmount --rbind /sys /target/sys\nmount --make-rslave /target/dev\nmount --make-rslave /target/sys\n"})}),"\n",(0,n.jsxs)(s.p,{children:["Assuming all goes well, you should now be able to chroot into your Solus system by doing ",(0,n.jsx)(s.code,{children:"chroot /target"}),"."]}),"\n",(0,n.jsx)(s.h3,{id:"networking",children:"Networking"}),"\n",(0,n.jsxs)(s.p,{children:["To validate a working network connection (assuming a network connection is available in your live image), you can run ",(0,n.jsx)(s.code,{children:"ping google.com"})," in the chrooted environment. If you get responses from ",(0,n.jsx)(s.code,{children:"google.com"}),", you have a successful connection to the Internet. If you do not, try the following:"]}),"\n",(0,n.jsxs)(s.ol,{children:["\n",(0,n.jsxs)(s.li,{children:["Exit the chroot by typing ",(0,n.jsx)(s.code,{children:"exit"})]}),"\n",(0,n.jsx)(s.li,{children:"Run:"}),"\n"]}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-bash",children:"cp /run/systemd/resolve/stub-resolv.conf /target/run/systemd/resolve/\ncd /target/etc\nln -s ../run/systemd/resolve/stub-resolv.conf /target/etc/resolv.conf\n"})}),"\n",(0,n.jsxs)(s.ol,{start:"3",children:["\n",(0,n.jsxs)(s.li,{children:["Chroot back into ",(0,n.jsx)(s.code,{children:"/target"})," by running ",(0,n.jsx)(s.code,{children:"chroot /target"})," again."]}),"\n",(0,n.jsx)(s.li,{children:"Retry networking."}),"\n"]}),"\n",(0,n.jsx)(s.h3,{id:"repairing-packages",children:"Repairing packages"}),"\n",(0,n.jsx)(s.p,{children:"In the event you had an incomplete upgrade, try the following commands:"}),"\n",(0,n.jsxs)(s.ol,{children:["\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.code,{children:"sudo eopkg rebuild-db"})}),"\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.code,{children:"sudo eopkg up"})}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"sudo eopkg check | grep Broken | awk '{print $4}' | xargs sudo eopkg it --reinstall"}),'\nIf you see output that starts with "Usage", this means the system has no broken packages.']}),"\n",(0,n.jsxs)(s.li,{children:['Try reverting the latest package transaction (this should only be done if the first two steps, followed by the "Re-run System-Wide Configuration Triggers", failed to produce a successful bootup). See ',(0,n.jsx)(s.a,{href:"/docs/user/package-management/history-and-rollback",children:"our documentation on history and rollback"})," for more information, followed by re-applying your updates by running ",(0,n.jsx)(s.code,{children:"sudo eopkg up"}),"."]}),"\n"]}),"\n",(0,n.jsx)(s.h3,{id:"correcting-disks",children:"Correcting disks"}),"\n",(0,n.jsx)(s.p,{children:"In the event that disk changes had caused the system to fail to boot, try the following in the chroot environment:"}),"\n",(0,n.jsxs)(s.ol,{children:["\n",(0,n.jsxs)(s.li,{children:["Get the UUIDs of your partitions the system expects from ",(0,n.jsx)(s.code,{children:"/etc/fstab"}),"."]}),"\n",(0,n.jsxs)(s.li,{children:["Compare this to the output of ",(0,n.jsx)(s.code,{children:"ls -lah /dev/disk/by-uuid"})]}),"\n"]}),"\n",(0,n.jsx)(s.h3,{id:"re-run-system-wide-configuration-triggers",children:"Re-run system-wide configuration triggers"}),"\n",(0,n.jsx)(s.p,{children:"In the chroot environment, run the following command which will perform various configuration triggers to update your icon cache, update GRUB and EFI configuration, re-compile settings, and more:"}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-bash",children:"sudo usysconf run -f\n"})}),"\n",(0,n.jsx)(s.h3,{id:"regenerate-uefi-boot-entries",children:"Regenerate UEFI boot entries"}),"\n",(0,n.jsx)(s.p,{children:"Run the following command, which will update the boot entries for your EFI menu:"}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-bash",children:"sudo clr-boot-manager update\n"})}),"\n",(0,n.jsxs)(s.p,{children:["After this, you should exit your chroot with ",(0,n.jsx)(s.code,{children:"exit"})," then reboot your system. In the event you are still unable to access Solus, please ",(0,n.jsx)(s.a,{href:"/docs/user/contributing/getting-involved",children:"contact us"}),"."]}),"\n",(0,n.jsx)(s.h3,{id:"unmounting-your-system",children:"Unmounting your system"}),"\n",(0,n.jsx)(s.p,{children:"In case further partition modifications are required, there's a series of steps that must be followed."}),"\n",(0,n.jsxs)(s.p,{children:["If you are still chrooted you have to exit the chroot environment by pressing ",(0,n.jsx)(s.code,{children:"Ctrl"})," + ",(0,n.jsx)(s.code,{children:"D"}),"."]}),"\n",(0,n.jsx)(s.p,{children:"Then proceed with unmounting the filesystem."}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-bash",children:"umount -R /target\n"})}),"\n",(0,n.jsx)(s.p,{children:"In case of having a LUKS-based encryption you'll have to deactivate your logical volumes plus volume groups and then close your LUKS partition."}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-bash",children:"lvchange -a n /dev/SolusSystem/Swap # `-a n` means `active: no`\nlvchange -a n /dev/SolusSystem/Root\nvgchange -a n SolusSystem\ncryptsetup luksClose decrypted\n"})})]})}function h(e={}){let{wrapper:s}={...(0,i.a)(),...e.components};return s?(0,n.jsx)(s,{...e,children:(0,n.jsx)(c,{...e})}):c(e)}},50065:function(e,s,t){t.d(s,{Z:function(){return l},a:function(){return r}});var o=t(67294);let n={},i=o.createContext(n);function r(e){let s=o.useContext(i);return o.useMemo(function(){return"function"==typeof e?e(s):{...s,...e}},[s,e])}function l(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:r(e.components),o.createElement(i.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/0b254e3a.1f9c4124.js b/assets/js/0b254e3a.1f9c4124.js deleted file mode 100644 index 2fcc6f191..000000000 --- a/assets/js/0b254e3a.1f9c4124.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[6726],{99528:(e,n,a)=>{a.r(n),a.d(n,{assets:()=>c,contentTitle:()=>r,default:()=>h,frontMatter:()=>t,metadata:()=>o,toc:()=>l});var i=a(85893),s=a(11151);const t={title:"Updating an Existing Package",summary:"Updating an Existing Package",sidebar_position:4},r="Updating an Existing Package",o={id:"packaging/updating-an-existing-package",title:"Updating an Existing Package",description:"This article will go over updating a package that is already in the Solus package repositories.",source:"@site/docs/packaging/updating-an-existing-package.md",sourceDirName:"packaging",slug:"/packaging/updating-an-existing-package",permalink:"/docs/packaging/updating-an-existing-package",draft:!1,unlisted:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/packaging/updating-an-existing-package.md",tags:[],version:"current",lastUpdatedAt:1732716912e3,sidebarPosition:4,frontMatter:{title:"Updating an Existing Package",summary:"Updating an Existing Package",sidebar_position:4},sidebar:"packagingSidebar",previous:{title:"Creating a New Package",permalink:"/docs/packaging/creating-a-new-package"},next:{title:"Testing a Package",permalink:"/docs/packaging/testing-a-package"}},c={},l=[{value:"Update your clone of the packages repository",id:"update-your-clone-of-the-packages-repository",level:3},{value:"Switch to a new git branch",id:"switch-to-a-new-git-branch",level:2},{value:"Updating a package",id:"updating-a-package",level:2},{value:"Bumping a package",id:"bumping-a-package",level:3},{value:"Using a different version",id:"using-a-different-version",level:3},{value:"The MAINTAINERS.md file",id:"the-maintainersmd-file",level:2},{value:"Build the package",id:"build-the-package",level:2},{value:"Commit your changes",id:"commit-your-changes",level:2},{value:"Commit message format",id:"commit-message-format",level:2},{value:"Package update",id:"package-update",level:3},{value:"Other commit message format examples",id:"other-commit-message-format-examples",level:3}];function d(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,s.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.header,{children:(0,i.jsx)(n.h1,{id:"updating-an-existing-package",children:"Updating an Existing Package"})}),"\n",(0,i.jsx)(n.p,{children:"This article will go over updating a package that is already in the Solus package repositories."}),"\n",(0,i.jsxs)(n.admonition,{type:"note",children:[(0,i.jsxs)(n.p,{children:[(0,i.jsxs)(n.strong,{children:["Please ",(0,i.jsx)(n.a,{href:"https://github.com/getsolus/packages/issues?q=label%3A%22Package+Request%22",children:"look to see if an issue has been filed"})," for the software update"]}),".\nIf there is an existing request, please add a link to it in your pull request. Ex:"]}),(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{children:"This PR resolves software update request https://github.com/getsolus/packages/issues/123\n"})})]}),"\n",(0,i.jsx)(n.h3,{id:"update-your-clone-of-the-packages-repository",children:"Update your clone of the packages repository"}),"\n",(0,i.jsxs)(n.p,{children:["If you do not have a local clone set up yet, see ",(0,i.jsx)(n.a,{href:"/docs/packaging/prepare-for-packaging#fork-the-getsoluspackages-repository",children:"Prepare for Packaging"})]}),"\n",(0,i.jsx)(n.p,{children:"Bring your local clone up to date. Run:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"cd ~/solus-packages/packages/n/nano\ngit switch main\ngit pull\n"})}),"\n",(0,i.jsx)(n.h2,{id:"switch-to-a-new-git-branch",children:"Switch to a new git branch"}),"\n",(0,i.jsx)(n.p,{children:"It's always a good idea to switch to a new git branch before beginning packaging work. This helps to separate your work from any new changes made to the package repository, which will allow you to more easily rebase any changes if needed. To do so run:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"git switch -c update_nano\n"})}),"\n",(0,i.jsx)(n.h2,{id:"updating-a-package",children:"Updating a package"}),"\n",(0,i.jsx)(n.p,{children:"There are two types of package updates: a package bump, and moving a package to a different version."}),"\n",(0,i.jsxs)(n.p,{children:["Bumping a package is typically done when rebuilding against a changed dependency, such as ",(0,i.jsx)(n.code,{children:"imagemagick"})," needing to be rebuilt if ",(0,i.jsx)(n.code,{children:"libwebp"})," changes. It is also done if changes are being made to the package, such as adding new dependencies or other modifications which aren't a version update."]}),"\n",(0,i.jsx)(n.h3,{id:"bumping-a-package",children:"Bumping a package"}),"\n",(0,i.jsxs)(n.p,{children:["Bumping can be achieved by running the ",(0,i.jsx)(n.code,{children:"bump"})," task, which increments the release number by 1."]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"go-task bump\n"})}),"\n",(0,i.jsx)(n.p,{children:"Check to make sure that the result is as expected."}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"git diff package.yml\n"})}),"\n",(0,i.jsx)(n.admonition,{type:"note",children:(0,i.jsx)(n.p,{children:"Certain packages with long descriptions might have their description messed up when this is run. Check if this happened, and fix it if necessary."})}),"\n",(0,i.jsx)(n.h3,{id:"using-a-different-version",children:"Using a different version"}),"\n",(0,i.jsxs)(n.p,{children:["To update the package to a newer version, use the ",(0,i.jsx)(n.code,{children:"update"})," task."]}),"\n",(0,i.jsx)(n.p,{children:"This task takes two arguments, in the following order:"}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsx)(n.li,{children:"Version"}),"\n",(0,i.jsx)(n.li,{children:"Source URL"}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"If you're updating the package to a newer version, naturally you would change both the version and source. If you're merely changing the source URL for the existing version, just pass the same version number and the new source URL."}),"\n",(0,i.jsx)(n.p,{children:"Example:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"go-task update -- 1.0 https://example.com/example-1.0.tar.xz\n"})}),"\n",(0,i.jsxs)(n.h2,{id:"the-maintainersmd-file",children:["The ",(0,i.jsx)(n.code,{children:"MAINTAINERS.md"})," file"]}),"\n",(0,i.jsxs)(n.p,{children:["There must be a file called ",(0,i.jsx)(n.code,{children:"MAINTAINERS.md"})," using the template in ",(0,i.jsx)(n.a,{href:"/docs/packaging/procedures/maintainership",children:"Maintainership"}),". Add it if it does not already exist. It should name the current maintainer(s) of the package."]}),"\n",(0,i.jsx)(n.h2,{id:"build-the-package",children:"Build the package"}),"\n",(0,i.jsxs)(n.p,{children:["Build the package using ",(0,i.jsx)(n.code,{children:"go-task"}),". The default task will build the package against the Unstable repository, so you don't have to specify a task here."]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"go-task\n"})}),"\n",(0,i.jsxs)(n.p,{children:["Once your package has built successfully, you will need to ",(0,i.jsx)(n.a,{href:"testing-a-package",children:"test it"}),"."]}),"\n",(0,i.jsx)(n.h2,{id:"commit-your-changes",children:"Commit your changes"}),"\n",(0,i.jsxs)(n.p,{children:["Check the ",(0,i.jsx)(n.a,{href:"git-basics#check-the-changes-in-your-files",children:"changes in your files"}),"."]}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.a,{href:"/docs/packaging/git-basics",children:"Add / remove files as necessary to the commit"}),". Then, ",(0,i.jsx)(n.strong,{children:"check your branch"}),"."]}),"\n",(0,i.jsx)(n.p,{children:"Double-check that everything looks correct and all of the files have been staged before committing."}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"git status\n"})}),"\n",(0,i.jsx)(n.p,{children:"If all looks well, commit your changes."}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"git commit\n"})}),"\n",(0,i.jsx)(n.h2,{id:"commit-message-format",children:"Commit message format"}),"\n",(0,i.jsx)(n.p,{children:'With the switch to a single large package git repository, having a regular, easy-to-read, and standardized commit message format helps enable quick and efficient "at-a-glance" reading of git commit messages for packagers and Staff alike.'}),"\n",(0,i.jsx)(n.p,{children:"Each commit message should consist of a meaningful summary line (which starts with the package name), a blank line, and then the rest of the commit message body."}),"\n",(0,i.jsxs)(n.p,{children:["Note that ",(0,i.jsx)(n.code,{children:"[NFC]"}),' (listed in an example below) is an abbreviation for "No Functional Change".']}),"\n",(0,i.jsx)(n.h3,{id:"package-update",children:"Package update"}),"\n",(0,i.jsx)(n.p,{children:"The following guidelines apply to the commit message body:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Bullet point lists should start with a dash."}),"\n",(0,i.jsx)(n.li,{children:"Include a changelog with a brief list of updates from the upstream release notes, with no links or issue numbers."}),"\n",(0,i.jsx)(n.li,{children:"There may also be a section for Solus specific work (e.g. rebuild against x / rework to remove dependency)."}),"\n",(0,i.jsx)(n.li,{children:"Optional: A link to the upstream release notes page."}),"\n"]}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.code,{children:"git commit"})," on ",(0,i.jsx)(n.a,{href:"/docs/packaging/prepare-for-packaging#initialize-git-hooks",children:"an initialized repository"})," will automatically open your editor with the correct template.\nNote that lines starting with a ",(0,i.jsx)(n.code,{children:"#"})," will be ignored by Git and do not need to be removed."]}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.em,{children:"Important"}),": Do not include issue numbers in changelogs. This will incorrectly link your issue to another one in our repository."]}),"\n",(0,i.jsx)(n.p,{children:"Example:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{children:"- #123 fixed a thing\n"})}),"\n",(0,i.jsx)(n.p,{children:"If you want to intentionally link to another issue in this repository, the right way is to use our repository name:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{children:"Fixes getsolus/packages#issuenumber\n"})}),"\n",(0,i.jsx)(n.p,{children:"Here is an example in our standard format:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{children:"foo: Update to 1.2.3\n\n**Summary**\n\nBugfixes:\n\n- Fixed a crash\n- Something else\n\nEnhancements:\n\n- Implemented a feature\n- Error when encountering a thing\n\nFull release notes:\n\n- [1.2.3](https://github.com/foo/foo/releases/tag/v1.2.3)\n"})}),"\n",(0,i.jsx)(n.h3,{id:"other-commit-message-format-examples",children:"Other commit message format examples"}),"\n",(0,i.jsx)(n.p,{children:"In the cases where you are not updating a package to a new version, but simply applying a patch or fixing an existing version, the following commit messages are considered suitable:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Add the ",(0,i.jsx)(n.code,{children:"homepage"})," metadata key:","\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"package: Add homepage"})}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["Fix a packaging issue (including adding a patch to fix the package)","\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"package: Fix (...)"})}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["Updating a README, ",(0,i.jsx)(n.a,{href:"/docs/packaging/monitoring.yml",children:"monitoring.yml file"})," or other stuff that does not directly ",(0,i.jsx)(n.em,{children:"change"})," the package, meaning the package release number didn't need a bump:","\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"package: [NFC] Add README.md and monitoring.yml"})}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.p,{children:["As stated previously, ",(0,i.jsx)(n.code,{children:"[NFC]"}),' is an abbreviation of "No Functional Change".']}),"\n",(0,i.jsxs)(n.p,{children:["For more information on suitable commit messages, please check the ",(0,i.jsx)(n.a,{href:"https://github.com/solus-project/tooling-central/blob/master/README.rst#using-git",children:"tooling central documentation"}),"."]}),"\n",(0,i.jsxs)(n.p,{children:["Next, you'll ",(0,i.jsx)(n.a,{href:"/docs/packaging/submitting-a-pull-request",children:"submit a pull request for review"}),"."]})]})}function h(e={}){const{wrapper:n}={...(0,s.a)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(d,{...e})}):d(e)}},11151:(e,n,a)=>{a.d(n,{Z:()=>o,a:()=>r});var i=a(67294);const s={},t=i.createContext(s);function r(e){const n=i.useContext(t);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:r(e.components),i.createElement(t.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/0b254e3a.5f373001.js b/assets/js/0b254e3a.5f373001.js new file mode 100644 index 000000000..9962b7dea --- /dev/null +++ b/assets/js/0b254e3a.5f373001.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([["1751"],{30607:function(e,n,a){a.r(n),a.d(n,{metadata:()=>i,contentTitle:()=>o,default:()=>h,assets:()=>c,toc:()=>l,frontMatter:()=>r});var i=JSON.parse('{"id":"packaging/updating-an-existing-package","title":"Updating an Existing Package","description":"This article will go over updating a package that is already in the Solus package repositories.","source":"@site/docs/packaging/updating-an-existing-package.md","sourceDirName":"packaging","slug":"/packaging/updating-an-existing-package","permalink":"/docs/packaging/updating-an-existing-package","draft":false,"unlisted":false,"editUrl":"https://github.com/getsolus/help-center-docs/tree/master/docs/packaging/updating-an-existing-package.md","tags":[],"version":"current","lastUpdatedAt":1733757592000,"sidebarPosition":4,"frontMatter":{"title":"Updating an Existing Package","summary":"Updating an Existing Package","sidebar_position":4},"sidebar":"packagingSidebar","previous":{"title":"Creating a New Package","permalink":"/docs/packaging/creating-a-new-package"},"next":{"title":"Testing a Package","permalink":"/docs/packaging/testing-a-package"}}'),s=a("85893"),t=a("50065");let r={title:"Updating an Existing Package",summary:"Updating an Existing Package",sidebar_position:4},o="Updating an Existing Package",c={},l=[{value:"Update your clone of the packages repository",id:"update-your-clone-of-the-packages-repository",level:3},{value:"Switch to a new git branch",id:"switch-to-a-new-git-branch",level:2},{value:"Updating a package",id:"updating-a-package",level:2},{value:"Bumping a package",id:"bumping-a-package",level:3},{value:"Using a different version",id:"using-a-different-version",level:3},{value:"The MAINTAINERS.md file",id:"the-maintainersmd-file",level:2},{value:"Build the package",id:"build-the-package",level:2},{value:"Commit your changes",id:"commit-your-changes",level:2},{value:"Commit message format",id:"commit-message-format",level:2},{value:"Package update",id:"package-update",level:3},{value:"Other commit message format examples",id:"other-commit-message-format-examples",level:3}];function d(e){let n={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,t.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.header,{children:(0,s.jsx)(n.h1,{id:"updating-an-existing-package",children:"Updating an Existing Package"})}),"\n",(0,s.jsx)(n.p,{children:"This article will go over updating a package that is already in the Solus package repositories."}),"\n",(0,s.jsxs)(n.admonition,{type:"note",children:[(0,s.jsxs)(n.p,{children:[(0,s.jsxs)(n.strong,{children:["Please ",(0,s.jsx)(n.a,{href:"https://github.com/getsolus/packages/issues?q=label%3A%22Package+Request%22",children:"look to see if an issue has been filed"})," for the software update"]}),".\nIf there is an existing request, please add a link to it in your pull request. Ex:"]}),(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{children:"This PR resolves software update request https://github.com/getsolus/packages/issues/123\n"})})]}),"\n",(0,s.jsx)(n.h3,{id:"update-your-clone-of-the-packages-repository",children:"Update your clone of the packages repository"}),"\n",(0,s.jsxs)(n.p,{children:["If you do not have a local clone set up yet, see ",(0,s.jsx)(n.a,{href:"/docs/packaging/prepare-for-packaging#fork-the-getsoluspackages-repository",children:"Prepare for Packaging"})]}),"\n",(0,s.jsx)(n.p,{children:"Bring your local clone up to date. Run:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"cd ~/solus-packages/packages/n/nano\ngit switch main\ngit pull\n"})}),"\n",(0,s.jsx)(n.h2,{id:"switch-to-a-new-git-branch",children:"Switch to a new git branch"}),"\n",(0,s.jsx)(n.p,{children:"It's always a good idea to switch to a new git branch before beginning packaging work. This helps to separate your work from any new changes made to the package repository, which will allow you to more easily rebase any changes if needed. To do so run:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"git switch -c update_nano\n"})}),"\n",(0,s.jsx)(n.h2,{id:"updating-a-package",children:"Updating a package"}),"\n",(0,s.jsx)(n.p,{children:"There are two types of package updates: a package bump, and moving a package to a different version."}),"\n",(0,s.jsxs)(n.p,{children:["Bumping a package is typically done when rebuilding against a changed dependency, such as ",(0,s.jsx)(n.code,{children:"imagemagick"})," needing to be rebuilt if ",(0,s.jsx)(n.code,{children:"libwebp"})," changes. It is also done if changes are being made to the package, such as adding new dependencies or other modifications which aren't a version update."]}),"\n",(0,s.jsx)(n.h3,{id:"bumping-a-package",children:"Bumping a package"}),"\n",(0,s.jsxs)(n.p,{children:["Bumping can be achieved by running the ",(0,s.jsx)(n.code,{children:"bump"})," task, which increments the release number by 1."]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"go-task bump\n"})}),"\n",(0,s.jsx)(n.p,{children:"Check to make sure that the result is as expected."}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"git diff package.yml\n"})}),"\n",(0,s.jsx)(n.admonition,{type:"note",children:(0,s.jsx)(n.p,{children:"Certain packages with long descriptions might have their description messed up when this is run. Check if this happened, and fix it if necessary."})}),"\n",(0,s.jsx)(n.h3,{id:"using-a-different-version",children:"Using a different version"}),"\n",(0,s.jsxs)(n.p,{children:["To update the package to a newer version, use the ",(0,s.jsx)(n.code,{children:"update"})," task."]}),"\n",(0,s.jsx)(n.p,{children:"This task takes two arguments, in the following order:"}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsx)(n.li,{children:"Version"}),"\n",(0,s.jsx)(n.li,{children:"Source URL"}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"If you're updating the package to a newer version, naturally you would change both the version and source. If you're merely changing the source URL for the existing version, just pass the same version number and the new source URL."}),"\n",(0,s.jsx)(n.p,{children:"Example:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"go-task update -- 1.0 https://example.com/example-1.0.tar.xz\n"})}),"\n",(0,s.jsxs)(n.h2,{id:"the-maintainersmd-file",children:["The ",(0,s.jsx)(n.code,{children:"MAINTAINERS.md"})," file"]}),"\n",(0,s.jsxs)(n.p,{children:["There must be a file called ",(0,s.jsx)(n.code,{children:"MAINTAINERS.md"})," using the template in ",(0,s.jsx)(n.a,{href:"/docs/packaging/procedures/maintainership",children:"Maintainership"}),". Add it if it does not already exist. It should name the current maintainer(s) of the package."]}),"\n",(0,s.jsx)(n.h2,{id:"build-the-package",children:"Build the package"}),"\n",(0,s.jsxs)(n.p,{children:["Build the package using ",(0,s.jsx)(n.code,{children:"go-task"}),". The default task will build the package against the Unstable repository, so you don't have to specify a task here."]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"go-task\n"})}),"\n",(0,s.jsxs)(n.p,{children:["Once your package has built successfully, you will need to ",(0,s.jsx)(n.a,{href:"testing-a-package",children:"test it"}),"."]}),"\n",(0,s.jsx)(n.h2,{id:"commit-your-changes",children:"Commit your changes"}),"\n",(0,s.jsxs)(n.p,{children:["Check the ",(0,s.jsx)(n.a,{href:"git-basics#check-the-changes-in-your-files",children:"changes in your files"}),"."]}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.a,{href:"/docs/packaging/git-basics",children:"Add / remove files as necessary to the commit"}),". Then, ",(0,s.jsx)(n.strong,{children:"check your branch"}),"."]}),"\n",(0,s.jsx)(n.p,{children:"Double-check that everything looks correct and all of the files have been staged before committing."}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"git status\n"})}),"\n",(0,s.jsx)(n.p,{children:"If all looks well, commit your changes."}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"git commit\n"})}),"\n",(0,s.jsx)(n.h2,{id:"commit-message-format",children:"Commit message format"}),"\n",(0,s.jsx)(n.p,{children:'With the switch to a single large package git repository, having a regular, easy-to-read, and standardized commit message format helps enable quick and efficient "at-a-glance" reading of git commit messages for packagers and Staff alike.'}),"\n",(0,s.jsx)(n.p,{children:"Each commit message should consist of a meaningful summary line (which starts with the package name), a blank line, and then the rest of the commit message body."}),"\n",(0,s.jsxs)(n.p,{children:["Note that ",(0,s.jsx)(n.code,{children:"[NFC]"}),' (listed in an example below) is an abbreviation for "No Functional Change".']}),"\n",(0,s.jsx)(n.h3,{id:"package-update",children:"Package update"}),"\n",(0,s.jsx)(n.p,{children:"The following guidelines apply to the commit message body:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Bullet point lists should start with a dash."}),"\n",(0,s.jsx)(n.li,{children:"Include a changelog with a brief list of updates from the upstream release notes, with no links or issue numbers."}),"\n",(0,s.jsx)(n.li,{children:"There may also be a section for Solus specific work (e.g. rebuild against x / rework to remove dependency)."}),"\n",(0,s.jsx)(n.li,{children:"Optional: A link to the upstream release notes page."}),"\n"]}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.code,{children:"git commit"})," on ",(0,s.jsx)(n.a,{href:"/docs/packaging/prepare-for-packaging#initialize-git-hooks",children:"an initialized repository"})," will automatically open your editor with the correct template.\nNote that lines starting with a ",(0,s.jsx)(n.code,{children:"#"})," will be ignored by Git and do not need to be removed."]}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.em,{children:"Important"}),": Do not include issue numbers in changelogs. This will incorrectly link your issue to another one in our repository."]}),"\n",(0,s.jsx)(n.p,{children:"Example:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{children:"- #123 fixed a thing\n"})}),"\n",(0,s.jsx)(n.p,{children:"If you want to intentionally link to another issue in this repository, the right way is to use our repository name:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{children:"Fixes getsolus/packages#issuenumber\n"})}),"\n",(0,s.jsx)(n.p,{children:"Here is an example in our standard format:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{children:"foo: Update to 1.2.3\n\n**Summary**\n\nBugfixes:\n\n- Fixed a crash\n- Something else\n\nEnhancements:\n\n- Implemented a feature\n- Error when encountering a thing\n\nFull release notes:\n\n- [1.2.3](https://github.com/foo/foo/releases/tag/v1.2.3)\n"})}),"\n",(0,s.jsx)(n.h3,{id:"other-commit-message-format-examples",children:"Other commit message format examples"}),"\n",(0,s.jsx)(n.p,{children:"In the cases where you are not updating a package to a new version, but simply applying a patch or fixing an existing version, the following commit messages are considered suitable:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["Add the ",(0,s.jsx)(n.code,{children:"homepage"})," metadata key:","\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.code,{children:"package: Add homepage"})}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["Fix a packaging issue (including adding a patch to fix the package)","\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.code,{children:"package: Fix (...)"})}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["Updating a README, ",(0,s.jsx)(n.a,{href:"/docs/packaging/monitoring.yml",children:"monitoring.yml file"})," or other stuff that does not directly ",(0,s.jsx)(n.em,{children:"change"})," the package, meaning the package release number didn't need a bump:","\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.code,{children:"package: [NFC] Add README.md and monitoring.yml"})}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.p,{children:["As stated previously, ",(0,s.jsx)(n.code,{children:"[NFC]"}),' is an abbreviation of "No Functional Change".']}),"\n",(0,s.jsxs)(n.p,{children:["For more information on suitable commit messages, please check the ",(0,s.jsx)(n.a,{href:"https://github.com/solus-project/tooling-central/blob/master/README.rst#using-git",children:"tooling central documentation"}),"."]}),"\n",(0,s.jsxs)(n.p,{children:["Next, you'll ",(0,s.jsx)(n.a,{href:"/docs/packaging/submitting-a-pull-request",children:"submit a pull request for review"}),"."]})]})}function h(e={}){let{wrapper:n}={...(0,t.a)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(d,{...e})}):d(e)}},50065:function(e,n,a){a.d(n,{Z:function(){return o},a:function(){return r}});var i=a(67294);let s={},t=i.createContext(s);function r(e){let n=i.useContext(t);return i.useMemo(function(){return"function"==typeof e?e(n):{...n,...e}},[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:r(e.components),i.createElement(t.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/0b85ec06.4722941f.js b/assets/js/0b85ec06.4722941f.js deleted file mode 100644 index 6cd9980d7..000000000 --- a/assets/js/0b85ec06.4722941f.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[3398],{22844:e=>{e.exports=JSON.parse('{"tag":{"label":"pgo","permalink":"/blog/tags/pgo","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/pgo","page":1,"postsPerPage":1,"totalPages":1,"totalCount":1,"blogDescription":"The Solus Development (b)log!","blogTitle":"Solus DevLog"}}')}}]); \ No newline at end of file diff --git a/assets/js/0b85ec06.f6b30f07.js b/assets/js/0b85ec06.f6b30f07.js new file mode 100644 index 000000000..c43b384b1 --- /dev/null +++ b/assets/js/0b85ec06.f6b30f07.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([["3161"],{93120:function(e){e.exports=JSON.parse('{"tag":{"label":"pgo","permalink":"/blog/tags/pgo","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/pgo","page":1,"postsPerPage":1,"totalPages":1,"totalCount":1,"blogDescription":"The Solus Development (b)log!","blogTitle":"Solus DevLog"}}')}}]); \ No newline at end of file diff --git a/assets/js/0cfc9369.b63787ba.js b/assets/js/0cfc9369.b63787ba.js deleted file mode 100644 index fa2090a8e..000000000 --- a/assets/js/0cfc9369.b63787ba.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[6025],{82504:e=>{e.exports=JSON.parse('{"tag":{"label":"lto","permalink":"/blog/tags/lto","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/lto","page":1,"postsPerPage":1,"totalPages":1,"totalCount":1,"blogDescription":"The Solus Development (b)log!","blogTitle":"Solus DevLog"}}')}}]); \ No newline at end of file diff --git a/assets/js/0cfc9369.d0ec6f81.js b/assets/js/0cfc9369.d0ec6f81.js new file mode 100644 index 000000000..2e3c5fc25 --- /dev/null +++ b/assets/js/0cfc9369.d0ec6f81.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([["8955"],{9093:function(e){e.exports=JSON.parse('{"tag":{"label":"lto","permalink":"/blog/tags/lto","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/lto","page":1,"postsPerPage":1,"totalPages":1,"totalCount":1,"blogDescription":"The Solus Development (b)log!","blogTitle":"Solus DevLog"}}')}}]); \ No newline at end of file diff --git a/assets/js/0e3c5e6b.6768dae5.js b/assets/js/0e3c5e6b.6768dae5.js new file mode 100644 index 000000000..4fa0afdca --- /dev/null +++ b/assets/js/0e3c5e6b.6768dae5.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([["5157"],{67391:function(e,t,s){s.r(t),s.d(t,{metadata:()=>n,contentTitle:()=>o,default:()=>u,assets:()=>l,toc:()=>d,frontMatter:()=>a});var n=JSON.parse('{"id":"user/editions/plasma/index","title":"Plasma","description":"Solus Plasma","source":"@site/docs/user/editions/plasma/index.md","sourceDirName":"user/editions/plasma","slug":"/user/editions/plasma/","permalink":"/docs/user/editions/plasma/","draft":false,"unlisted":false,"editUrl":"https://github.com/getsolus/help-center-docs/tree/master/docs/user/editions/plasma/index.md","tags":[],"version":"current","lastUpdatedAt":1733757592000,"frontMatter":{"title":"Plasma","summary":"A quick introduction to the Plasma edition of Solus"},"sidebar":"userSidebar","previous":{"title":"Tips and Tricks","permalink":"/docs/user/editions/mate/tips-and-tricks"},"next":{"title":"Configuration","permalink":"/docs/user/editions/plasma/configuration"}}'),i=s("85893"),r=s("50065");let a={title:"Plasma",summary:"A quick introduction to the Plasma edition of Solus"},o="Plasma",l={},d=[];function c(e){let t={a:"a",em:"em",h1:"h1",header:"header",hr:"hr",img:"img",li:"li",p:"p",ul:"ul",...(0,r.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(t.header,{children:(0,i.jsx)(t.h1,{id:"plasma",children:"Plasma"})}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"Solus Plasma",src:s(59640).Z+"",width:"1920",height:"1080"})}),"\n",(0,i.jsxs)(t.p,{children:["The ",(0,i.jsx)(t.em,{children:"Plasma"})," desktop is a graphical user interface for Linux distributions that aims to offer users an intuitive and customizable user interface to interact with their devices. The Plasma desktop is developed by KDE."]}),"\n",(0,i.jsx)(t.p,{children:"To learn more about the Plasma desktop and KDE, refer to the following pages:"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:(0,i.jsx)(t.a,{href:"https://kde.org/plasma-desktop/",children:"https://kde.org/plasma-desktop/"})}),"\n",(0,i.jsx)(t.li,{children:(0,i.jsx)(t.a,{href:"https://kde.org/announcements/",children:"https://kde.org/announcements/"})}),"\n",(0,i.jsx)(t.li,{children:(0,i.jsx)(t.a,{href:"https://kde.org/support/",children:"https://kde.org/support/"})}),"\n"]}),"\n",(0,i.jsx)(t.hr,{}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.a,{href:"configuration",children:"Configuration"})}),"\n",(0,i.jsx)(t.p,{children:"Learn how to customize and configure the Plasma Desktop on Solus."}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.a,{href:"tips-and-tricks",children:"Tips and Tricks"})}),"\n",(0,i.jsx)(t.p,{children:"Helpful tips and tricks for using Plasma on Solus."})]})}function u(e={}){let{wrapper:t}={...(0,r.a)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(c,{...e})}):c(e)}},59640:function(e,t,s){s.d(t,{Z:function(){return n}});let n=s.p+"assets/images/plasma-32bee314c05b57e65e0b26b6bf23f14f.jpg"},50065:function(e,t,s){s.d(t,{Z:function(){return o},a:function(){return a}});var n=s(67294);let i={},r=n.createContext(i);function a(e){let t=n.useContext(r);return n.useMemo(function(){return"function"==typeof e?e(t):{...t,...e}},[t,e])}function o(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:a(e.components),n.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/0e3c5e6b.6d3db483.js b/assets/js/0e3c5e6b.6d3db483.js deleted file mode 100644 index 99e3fba44..000000000 --- a/assets/js/0e3c5e6b.6d3db483.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[4859],{5166:(e,s,t)=>{t.r(s),t.d(s,{assets:()=>l,contentTitle:()=>a,default:()=>u,frontMatter:()=>r,metadata:()=>o,toc:()=>d});var n=t(85893),i=t(11151);const r={title:"Plasma",summary:"A quick introduction to the Plasma edition of Solus"},a="Plasma",o={id:"user/editions/plasma/index",title:"Plasma",description:"Solus Plasma",source:"@site/docs/user/editions/plasma/index.md",sourceDirName:"user/editions/plasma",slug:"/user/editions/plasma/",permalink:"/docs/user/editions/plasma/",draft:!1,unlisted:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/editions/plasma/index.md",tags:[],version:"current",lastUpdatedAt:1732716912e3,frontMatter:{title:"Plasma",summary:"A quick introduction to the Plasma edition of Solus"},sidebar:"userSidebar",previous:{title:"Tips and Tricks",permalink:"/docs/user/editions/mate/tips-and-tricks"},next:{title:"Configuration",permalink:"/docs/user/editions/plasma/configuration"}},l={},d=[];function c(e){const s={a:"a",em:"em",h1:"h1",header:"header",hr:"hr",img:"img",li:"li",p:"p",ul:"ul",...(0,i.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(s.header,{children:(0,n.jsx)(s.h1,{id:"plasma",children:"Plasma"})}),"\n",(0,n.jsx)(s.p,{children:(0,n.jsx)(s.img,{alt:"Solus Plasma",src:t(52603).Z+"",width:"1920",height:"1080"})}),"\n",(0,n.jsxs)(s.p,{children:["The ",(0,n.jsx)(s.em,{children:"Plasma"})," desktop is a graphical user interface for Linux distributions that aims to offer users an intuitive and customizable user interface to interact with their devices. The Plasma desktop is developed by KDE."]}),"\n",(0,n.jsx)(s.p,{children:"To learn more about the Plasma desktop and KDE, refer to the following pages:"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"https://kde.org/plasma-desktop/",children:"https://kde.org/plasma-desktop/"})}),"\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"https://kde.org/announcements/",children:"https://kde.org/announcements/"})}),"\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"https://kde.org/support/",children:"https://kde.org/support/"})}),"\n"]}),"\n",(0,n.jsx)(s.hr,{}),"\n",(0,n.jsx)(s.p,{children:(0,n.jsx)(s.a,{href:"configuration",children:"Configuration"})}),"\n",(0,n.jsx)(s.p,{children:"Learn how to customize and configure the Plasma Desktop on Solus."}),"\n",(0,n.jsx)(s.p,{children:(0,n.jsx)(s.a,{href:"tips-and-tricks",children:"Tips and Tricks"})}),"\n",(0,n.jsx)(s.p,{children:"Helpful tips and tricks for using Plasma on Solus."})]})}function u(e={}){const{wrapper:s}={...(0,i.a)(),...e.components};return s?(0,n.jsx)(s,{...e,children:(0,n.jsx)(c,{...e})}):c(e)}},52603:(e,s,t)=>{t.d(s,{Z:()=>n});const n=t.p+"assets/images/plasma-32bee314c05b57e65e0b26b6bf23f14f.jpg"},11151:(e,s,t)=>{t.d(s,{Z:()=>o,a:()=>a});var n=t(67294);const i={},r=n.createContext(i);function a(e){const s=n.useContext(r);return n.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function o(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:a(e.components),n.createElement(r.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/0e862883.abf6c904.js b/assets/js/0e862883.abf6c904.js new file mode 100644 index 000000000..9f6fe1cab --- /dev/null +++ b/assets/js/0e862883.abf6c904.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([["1125"],{52954:function(e,n,t){t.r(n),t.d(n,{metadata:()=>s,contentTitle:()=>l,default:()=>h,assets:()=>a,toc:()=>c,frontMatter:()=>o});var s=JSON.parse('{"id":"user/contributing/testing-an-iso","title":"Testing an ISO","description":"A handy checklist anyone can use for testing an ISO.","source":"@site/docs/user/contributing/testing-an-iso.md","sourceDirName":"user/contributing","slug":"/user/contributing/testing-an-iso","permalink":"/docs/user/contributing/testing-an-iso","draft":false,"unlisted":false,"editUrl":"https://github.com/getsolus/help-center-docs/tree/master/docs/user/contributing/testing-an-iso.md","tags":[],"version":"current","lastUpdatedAt":1733757592000,"frontMatter":{},"sidebar":"userSidebar","previous":{"title":"Solus Style Guide","permalink":"/docs/user/contributing/style"},"next":{"title":"Editions","permalink":"/docs/user/editions/"}}'),i=t("85893"),r=t("50065");let o={},l="Testing an ISO",a={},c=[{value:"For any release",id:"for-any-release",level:2},{value:"Laptops",id:"laptops",level:3},{value:"VMs",id:"vms",level:3},{value:"For the specific release",id:"for-the-specific-release",level:2}];function d(e){let n={a:"a",em:"em",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",p:"p",ul:"ul",...(0,r.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.header,{children:(0,i.jsx)(n.h1,{id:"testing-an-iso",children:"Testing an ISO"})}),"\n",(0,i.jsx)(n.p,{children:"A handy checklist anyone can use for testing an ISO."}),"\n",(0,i.jsx)(n.p,{children:"This is a list of some general things to check. It is not meant to be exhaustive, just enough to hit major points and hopefully uncover obvious problems. Testers are certainly not prohibited from doing more, at their discretion. Not all points will be testable by everyone (ex: docking / undocking). That is fine; this is just a reference."}),"\n",(0,i.jsx)(n.p,{children:"When testing, try to keep different types of users in mind. For instance, would a general / new user be comfortable with the experience? Would a technical user be put off by a limitation?"}),"\n",(0,i.jsx)(n.h2,{id:"for-any-release",children:"For any release"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"ISO can be written to a USB, used to boot a system and install"}),"\n",(0,i.jsx)(n.li,{children:"Can unlock the device if the live ISO lock screen engages"}),"\n",(0,i.jsx)(n.li,{children:"Installer is easy to follow"}),"\n",(0,i.jsx)(n.li,{children:"Installer detects location, time and time zone properly. Bonus points if the correct timezone is shown in the picker and you don't have to manually select one."}),"\n",(0,i.jsx)(n.li,{children:"Start menu works, has search"}),"\n",(0,i.jsx)(n.li,{children:"Can scan / print / use your peripherals"}),"\n",(0,i.jsx)(n.li,{children:"Sound over speakers"}),"\n",(0,i.jsx)(n.li,{children:"Bluetooth device connects, has high fidelity and headphone modes, you can hear sound"}),"\n",(0,i.jsx)(n.li,{children:"Install your usual software and just make sure basic functionality works"}),"\n",(0,i.jsx)(n.li,{children:"Plugging in a USB drive allows user to mount the drive and access files"}),"\n",(0,i.jsx)(n.li,{children:"System can be put to sleep and woken, things still work after waking (display, keyboard, mouse, sound, network)"}),"\n",(0,i.jsxs)(n.li,{children:["Able to create and use samba shares via file manager (you must ",(0,i.jsx)(n.a,{href:"/docs/user/software/networking/samba#samba-on-solus",children:"enable smb after installation"}),")"]}),"\n",(0,i.jsx)(n.li,{children:"Anything that's been flaky in your experience (LVM, for instance)"}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"laptops",children:"Laptops"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Multi-monitor display behaves properly with docking and undocking."}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"vms",children:"VMs"}),"\n",(0,i.jsx)(n.p,{children:"This functionality might be affected by the settings of the VM."}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Copy and paste works from host to guest ",(0,i.jsx)(n.em,{children:"before"})," install, while booted into the live ISO"]}),"\n",(0,i.jsxs)(n.li,{children:["Copy and paste works ",(0,i.jsx)(n.em,{children:"after"})," installation and rebooting the VM"]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"for-the-specific-release",children:"For the specific release"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Any issues that have been recently fixed, or are known to be recently flaky."}),"\n",(0,i.jsx)(n.li,{children:"Check the ISO task in the tracker for other potential areas of interest."}),"\n"]})]})}function h(e={}){let{wrapper:n}={...(0,r.a)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(d,{...e})}):d(e)}},50065:function(e,n,t){t.d(n,{Z:function(){return l},a:function(){return o}});var s=t(67294);let i={},r=s.createContext(i);function o(e){let n=s.useContext(r);return s.useMemo(function(){return"function"==typeof e?e(n):{...n,...e}},[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:o(e.components),s.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/0e862883.f9142d94.js b/assets/js/0e862883.f9142d94.js deleted file mode 100644 index bd8ff9468..000000000 --- a/assets/js/0e862883.f9142d94.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[172],{24673:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>l,contentTitle:()=>o,default:()=>h,frontMatter:()=>r,metadata:()=>a,toc:()=>c});var s=t(85893),i=t(11151);const r={},o="Testing an ISO",a={id:"user/contributing/testing-an-iso",title:"Testing an ISO",description:"A handy checklist anyone can use for testing an ISO.",source:"@site/docs/user/contributing/testing-an-iso.md",sourceDirName:"user/contributing",slug:"/user/contributing/testing-an-iso",permalink:"/docs/user/contributing/testing-an-iso",draft:!1,unlisted:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/contributing/testing-an-iso.md",tags:[],version:"current",lastUpdatedAt:1732716912e3,frontMatter:{},sidebar:"userSidebar",previous:{title:"Solus Style Guide",permalink:"/docs/user/contributing/style"},next:{title:"Editions",permalink:"/docs/user/editions/"}},l={},c=[{value:"For any release",id:"for-any-release",level:2},{value:"Laptops",id:"laptops",level:3},{value:"VMs",id:"vms",level:3},{value:"For the specific release",id:"for-the-specific-release",level:2}];function d(e){const n={a:"a",em:"em",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",p:"p",ul:"ul",...(0,i.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.header,{children:(0,s.jsx)(n.h1,{id:"testing-an-iso",children:"Testing an ISO"})}),"\n",(0,s.jsx)(n.p,{children:"A handy checklist anyone can use for testing an ISO."}),"\n",(0,s.jsx)(n.p,{children:"This is a list of some general things to check. It is not meant to be exhaustive, just enough to hit major points and hopefully uncover obvious problems. Testers are certainly not prohibited from doing more, at their discretion. Not all points will be testable by everyone (ex: docking / undocking). That is fine; this is just a reference."}),"\n",(0,s.jsx)(n.p,{children:"When testing, try to keep different types of users in mind. For instance, would a general / new user be comfortable with the experience? Would a technical user be put off by a limitation?"}),"\n",(0,s.jsx)(n.h2,{id:"for-any-release",children:"For any release"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"ISO can be written to a USB, used to boot a system and install"}),"\n",(0,s.jsx)(n.li,{children:"Can unlock the device if the live ISO lock screen engages"}),"\n",(0,s.jsx)(n.li,{children:"Installer is easy to follow"}),"\n",(0,s.jsx)(n.li,{children:"Installer detects location, time and time zone properly. Bonus points if the correct timezone is shown in the picker and you don't have to manually select one."}),"\n",(0,s.jsx)(n.li,{children:"Start menu works, has search"}),"\n",(0,s.jsx)(n.li,{children:"Can scan / print / use your peripherals"}),"\n",(0,s.jsx)(n.li,{children:"Sound over speakers"}),"\n",(0,s.jsx)(n.li,{children:"Bluetooth device connects, has high fidelity and headphone modes, you can hear sound"}),"\n",(0,s.jsx)(n.li,{children:"Install your usual software and just make sure basic functionality works"}),"\n",(0,s.jsx)(n.li,{children:"Plugging in a USB drive allows user to mount the drive and access files"}),"\n",(0,s.jsx)(n.li,{children:"System can be put to sleep and woken, things still work after waking (display, keyboard, mouse, sound, network)"}),"\n",(0,s.jsxs)(n.li,{children:["Able to create and use samba shares via file manager (you must ",(0,s.jsx)(n.a,{href:"/docs/user/software/networking/samba#samba-on-solus",children:"enable smb after installation"}),")"]}),"\n",(0,s.jsx)(n.li,{children:"Anything that's been flaky in your experience (LVM, for instance)"}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"laptops",children:"Laptops"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Multi-monitor display behaves properly with docking and undocking."}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"vms",children:"VMs"}),"\n",(0,s.jsx)(n.p,{children:"This functionality might be affected by the settings of the VM."}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["Copy and paste works from host to guest ",(0,s.jsx)(n.em,{children:"before"})," install, while booted into the live ISO"]}),"\n",(0,s.jsxs)(n.li,{children:["Copy and paste works ",(0,s.jsx)(n.em,{children:"after"})," installation and rebooting the VM"]}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"for-the-specific-release",children:"For the specific release"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Any issues that have been recently fixed, or are known to be recently flaky."}),"\n",(0,s.jsx)(n.li,{children:"Check the ISO task in the tracker for other potential areas of interest."}),"\n"]})]})}function h(e={}){const{wrapper:n}={...(0,i.a)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(d,{...e})}):d(e)}},11151:(e,n,t)=>{t.d(n,{Z:()=>a,a:()=>o});var s=t(67294);const i={},r=s.createContext(i);function o(e){const n=s.useContext(r);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:o(e.components),s.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/14488e92.3f3176d3.js b/assets/js/14488e92.3f3176d3.js deleted file mode 100644 index e75c57a9b..000000000 --- a/assets/js/14488e92.3f3176d3.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[4815],{93980:(e,i,s)=>{s.r(i),s.d(i,{assets:()=>l,contentTitle:()=>A,default:()=>o,frontMatter:()=>n,metadata:()=>r,toc:()=>d});var t=s(85893),c=s(11151);const n={title:"Default Applications",summary:"A guide to the default applications included with Solus."},A="Default applications",r={id:"user/quick-start/default-applications",title:"Default Applications",description:"Each version of Solus comes with a pre-installed collection of desktop applications that can help you perform common tasks.",source:"@site/docs/user/quick-start/default-applications.md",sourceDirName:"user/quick-start",slug:"/user/quick-start/default-applications",permalink:"/docs/user/quick-start/default-applications",draft:!1,unlisted:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/quick-start/default-applications.md",tags:[],version:"current",lastUpdatedAt:1732716912e3,frontMatter:{title:"Default Applications",summary:"A guide to the default applications included with Solus."},sidebar:"userSidebar",previous:{title:"Boot Management",permalink:"/docs/user/quick-start/boot-management"},next:{title:"Preparing to Install",permalink:"/docs/user/quick-start/installation/"}},l={},d=[{value:"Web browser",id:"web-browser",level:2},{value:"Email client",id:"email-client",level:2},{value:"Managing your files",id:"managing-your-files",level:2},{value:"Nemo",id:"nemo",level:3},{value:"GNOME Files",id:"gnome-files",level:3},{value:"Dolphin",id:"dolphin",level:3},{value:"Office suite",id:"office-suite",level:2},{value:"Calc",id:"calc",level:3},{value:"Draw",id:"draw",level:3},{value:"Impress",id:"impress",level:3},{value:"Math",id:"math",level:3},{value:"Writer",id:"writer",level:3},{value:"Spell-checking",id:"spell-checking",level:3},{value:"Finnish",id:"finnish",level:4},{value:"Music",id:"music",level:2},{value:"Rhythmbox",id:"rhythmbox",level:3},{value:"Elisa",id:"elisa",level:3},{value:"Video",id:"video",level:2},{value:"Celluloid",id:"celluloid",level:3},{value:"Haruna",id:"haruna",level:3},{value:"Parole",id:"parole",level:3}];function a(e){const i={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",header:"header",img:"img",li:"li",ol:"ol",p:"p",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,c.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(i.header,{children:(0,t.jsx)(i.h1,{id:"default-applications",children:"Default applications"})}),"\n",(0,t.jsx)(i.p,{children:"Each version of Solus comes with a pre-installed collection of desktop applications that can help you perform common tasks."}),"\n",(0,t.jsx)(i.h2,{id:"web-browser",children:"Web browser"}),"\n",(0,t.jsxs)(i.p,{children:["Solus comes pre-installed with Firefox, a secure and trustworthy web browser provided by the non-profit organization ",(0,t.jsx)(i.a,{href:"https://www.mozilla.org/",children:"Mozilla"}),"."]}),"\n",(0,t.jsx)(i.p,{children:(0,t.jsx)(i.img,{alt:"Firefox Screenshot",src:s(34133).Z+"",width:"1920",height:"1046"})}),"\n",(0,t.jsx)(i.h2,{id:"email-client",children:"Email client"}),"\n",(0,t.jsxs)(i.p,{children:["Solus comes pre-installed with the powerful ",(0,t.jsx)(i.a,{href:"https://www.thunderbird.net/",children:"Thunderbird"})," email, newsgroup, and feeds client."]}),"\n",(0,t.jsx)(i.p,{children:(0,t.jsx)(i.img,{alt:"Thunderbird Screenshot",src:s(80649).Z+"",width:"982",height:"822"})}),"\n",(0,t.jsx)(i.h2,{id:"managing-your-files",children:"Managing your files"}),"\n",(0,t.jsx)(i.p,{children:"Each Linux desktop environment has its own graphical application for managing files:"}),"\n",(0,t.jsxs)(i.table,{children:[(0,t.jsx)(i.thead,{children:(0,t.jsxs)(i.tr,{children:[(0,t.jsx)(i.th,{children:"Desktop"}),(0,t.jsx)(i.th,{children:"Application"})]})}),(0,t.jsxs)(i.tbody,{children:[(0,t.jsxs)(i.tr,{children:[(0,t.jsx)(i.td,{children:"Budgie"}),(0,t.jsx)(i.td,{children:"Nemo"})]}),(0,t.jsxs)(i.tr,{children:[(0,t.jsx)(i.td,{children:"GNOME"}),(0,t.jsx)(i.td,{children:"GNOME Files (formerly Nautilus)"})]}),(0,t.jsxs)(i.tr,{children:[(0,t.jsx)(i.td,{children:"Plasma"}),(0,t.jsx)(i.td,{children:"Dolphin"})]}),(0,t.jsxs)(i.tr,{children:[(0,t.jsx)(i.td,{children:"XFCE"}),(0,t.jsx)(i.td,{children:"Nemo"})]})]})]}),"\n",(0,t.jsx)(i.h3,{id:"nemo",children:"Nemo"}),"\n",(0,t.jsx)(i.p,{children:(0,t.jsx)(i.img,{alt:"Nemo Screenshot",src:s(80274).Z+"",width:"800",height:"586"})}),"\n",(0,t.jsx)(i.h3,{id:"gnome-files",children:"GNOME Files"}),"\n",(0,t.jsx)(i.p,{children:(0,t.jsx)(i.img,{alt:"GNOME Files Screenshot",src:s(51055).Z+"",width:"886",height:"548"})}),"\n",(0,t.jsx)(i.h3,{id:"dolphin",children:"Dolphin"}),"\n",(0,t.jsx)(i.p,{children:(0,t.jsx)(i.img,{alt:"Dolphin Screenshot",src:s(3638).Z+"",width:"1022",height:"721"})}),"\n",(0,t.jsx)(i.h2,{id:"office-suite",children:"Office suite"}),"\n",(0,t.jsxs)(i.p,{children:["Solus comes pre-installed with ",(0,t.jsx)(i.a,{href:"https://www.libreoffice.org",children:"LibreOffice"}),", an office suite that is capable of replacing Microsoft",(0,t.jsx)("sup",{children:"TM"})," Office for the most common tasks."]}),"\n",(0,t.jsx)(i.p,{children:"By default, Solus provides Writer (document editor), Calc (spreadsheet editor), and Impress (presentation editor). Other applications such as Math or Draw can be installed from the Software Center."}),"\n",(0,t.jsxs)(i.table,{children:[(0,t.jsx)(i.thead,{children:(0,t.jsxs)(i.tr,{children:[(0,t.jsx)(i.th,{children:"LibreOffice"}),(0,t.jsx)(i.th,{children:"Microsoft Office Equivalent"}),(0,t.jsx)(i.th,{children:"Apple Equivalent"})]})}),(0,t.jsxs)(i.tbody,{children:[(0,t.jsxs)(i.tr,{children:[(0,t.jsx)(i.td,{children:"Writer"}),(0,t.jsx)(i.td,{children:"Word"}),(0,t.jsx)(i.td,{children:"Pages"})]}),(0,t.jsxs)(i.tr,{children:[(0,t.jsx)(i.td,{children:"Calc"}),(0,t.jsx)(i.td,{children:"Excel"}),(0,t.jsx)(i.td,{children:"Numbers"})]}),(0,t.jsxs)(i.tr,{children:[(0,t.jsx)(i.td,{children:"Impress"}),(0,t.jsx)(i.td,{children:"PowerPoint"}),(0,t.jsx)(i.td,{children:"Keynote"})]}),(0,t.jsxs)(i.tr,{children:[(0,t.jsx)(i.td,{children:"Draw"}),(0,t.jsx)(i.td,{children:"Visio"}),(0,t.jsx)(i.td,{})]}),(0,t.jsxs)(i.tr,{children:[(0,t.jsx)(i.td,{children:"Math"}),(0,t.jsx)(i.td,{}),(0,t.jsx)(i.td,{})]})]})]}),"\n",(0,t.jsx)(i.h3,{id:"calc",children:"Calc"}),"\n",(0,t.jsx)(i.p,{children:(0,t.jsx)(i.img,{alt:"LibreOffice Calc Screenshot",src:s(85353).Z+"",width:"1068",height:"607"})}),"\n",(0,t.jsxs)(i.p,{children:["Calc is a spreadsheet editor. You can view, create, and edit spreadsheets as well as leverage a comprehensive range of advanced functions. Calc supports a variety of common open formats and Microsoft",(0,t.jsx)("sup",{children:"TM"})," Office compatible document formats such as (but not limited to): ",(0,t.jsx)(i.code,{children:"xls"}),", ",(0,t.jsx)(i.code,{children:"xlsx"}),", and ",(0,t.jsx)(i.code,{children:"ods"}),"."]}),"\n",(0,t.jsx)(i.h3,{id:"draw",children:"Draw"}),"\n",(0,t.jsx)(i.p,{children:(0,t.jsx)(i.img,{alt:"LibreOffice Draw Screenshot",src:s(91955).Z+"",width:"1068",height:"637"})}),"\n",(0,t.jsxs)(i.p,{children:["Draw is a graphical editor that allows you to sketch diagrams, workflows and any kind of other simple to complex drawing you can imagine. You can install Draw from the Software Center by searching for the package ",(0,t.jsx)(i.code,{children:"libreoffice-draw"}),"."]}),"\n",(0,t.jsx)(i.h3,{id:"impress",children:"Impress"}),"\n",(0,t.jsx)(i.p,{children:(0,t.jsx)(i.img,{alt:"LibreOffice Impress Screenshot",src:s(8017).Z+"",width:"1068",height:"605"})}),"\n",(0,t.jsxs)(i.p,{children:["Impress is a presentation viewer and editor. You can view, create, edit, and export presentations in common open formats or Microsoft",(0,t.jsx)("sup",{children:"TM"})," Office compatible document formats such as (but not limited to): ",(0,t.jsx)(i.code,{children:"ppt"}),", ",(0,t.jsx)(i.code,{children:"pptx"}),", and ",(0,t.jsx)(i.code,{children:"odp"}),"."]}),"\n",(0,t.jsx)(i.h3,{id:"math",children:"Math"}),"\n",(0,t.jsx)(i.p,{children:(0,t.jsx)(i.img,{alt:"LibreOffice Math Screenshot",src:s(56243).Z+"",width:"1068",height:"598"})}),"\n",(0,t.jsxs)(i.p,{children:["Math is a formula editor. Create your mathematical and scientific expressions and insert them with the correct formatting into your text documents, spreadsheets, presentations, or drawings. Math can be installed from the Software Center by searching for the package ",(0,t.jsx)(i.code,{children:"libreoffice-math"}),"."]}),"\n",(0,t.jsx)(i.h3,{id:"writer",children:"Writer"}),"\n",(0,t.jsx)(i.p,{children:(0,t.jsx)(i.img,{alt:"LibreOffice Writer Screenshot",src:s(51304).Z+"",width:"1068",height:"748"})}),"\n",(0,t.jsxs)(i.p,{children:["Writer is a document editor. You can view, create, edit, and export documents in common open formats or Microsoft",(0,t.jsx)("sup",{children:"TM"})," Office compatible document formats such as (but not limited to): ",(0,t.jsx)(i.code,{children:"doc"}),", ",(0,t.jsx)(i.code,{children:"docx"}),", and ",(0,t.jsx)(i.code,{children:"odt"}),"."]}),"\n",(0,t.jsx)(i.h3,{id:"spell-checking",children:"Spell-checking"}),"\n",(0,t.jsxs)(i.p,{children:["LibreOffice Writer users may want to install the package ",(0,t.jsx)(i.code,{children:"libreoffice-common-dictionaries"})," from Software Center to automatically enable spell-checking support."]}),"\n",(0,t.jsx)(i.h4,{id:"finnish",children:"Finnish"}),"\n",(0,t.jsxs)(i.p,{children:["Finnish language support is provided by installing ",(0,t.jsx)(i.code,{children:"libreoffice-voikko"}),". After installation of this package, there is further configuration required to properly leverage the Voikko spell-checking and Finnish dictionary support."]}),"\n",(0,t.jsxs)(i.ol,{children:["\n",(0,t.jsx)(i.li,{children:"Open up LibreOffice Writer"}),"\n",(0,t.jsxs)(i.li,{children:["In the menubar, go to ",(0,t.jsx)(i.code,{children:"Tools"})," then ",(0,t.jsx)(i.code,{children:"Options"}),". This will open up the Options dialog."]}),"\n",(0,t.jsx)(i.li,{children:"Go to the Language Settings, listed on the left of Options."}),"\n",(0,t.jsx)(i.li,{children:'Under Language Settings, click Writing Aids and ensure the "Spellchecker (Voikko)", "Grammar checker (Voikko)", and "Hyphenator (Voikko)" are under the "Available language modules" section.'}),"\n",(0,t.jsx)(i.li,{children:'Under Language Settings, click Voikko and ensure "standard: suomi (perussanasto)" is selected under the "Vocabulary" section.'}),"\n"]}),"\n",(0,t.jsx)(i.h2,{id:"music",children:"Music"}),"\n",(0,t.jsxs)(i.table,{children:[(0,t.jsx)(i.thead,{children:(0,t.jsxs)(i.tr,{children:[(0,t.jsx)(i.th,{children:"Desktop"}),(0,t.jsx)(i.th,{children:"Application"})]})}),(0,t.jsxs)(i.tbody,{children:[(0,t.jsxs)(i.tr,{children:[(0,t.jsx)(i.td,{children:"Budgie"}),(0,t.jsx)(i.td,{children:"Rhythmbox"})]}),(0,t.jsxs)(i.tr,{children:[(0,t.jsx)(i.td,{children:"GNOME"}),(0,t.jsx)(i.td,{children:"Rhythmbox"})]}),(0,t.jsxs)(i.tr,{children:[(0,t.jsx)(i.td,{children:"Plasma"}),(0,t.jsx)(i.td,{children:"Elisa"})]}),(0,t.jsxs)(i.tr,{children:[(0,t.jsx)(i.td,{children:"XFCE"}),(0,t.jsx)(i.td,{children:"Rhythmbox"})]})]})]}),"\n",(0,t.jsx)(i.h3,{id:"rhythmbox",children:"Rhythmbox"}),"\n",(0,t.jsx)(i.p,{children:(0,t.jsx)(i.img,{alt:"Rhythmbox Screenshot",src:s(48392).Z+"",width:"789",height:"606"})}),"\n",(0,t.jsx)(i.h3,{id:"elisa",children:"Elisa"}),"\n",(0,t.jsx)(i.p,{children:(0,t.jsx)(i.img,{alt:"Elisa Screenshot",src:s(92304).Z+"",width:"1020",height:"720"})}),"\n",(0,t.jsx)(i.h2,{id:"video",children:"Video"}),"\n",(0,t.jsxs)(i.table,{children:[(0,t.jsx)(i.thead,{children:(0,t.jsxs)(i.tr,{children:[(0,t.jsx)(i.th,{children:"Desktop"}),(0,t.jsx)(i.th,{children:"Application"})]})}),(0,t.jsxs)(i.tbody,{children:[(0,t.jsxs)(i.tr,{children:[(0,t.jsx)(i.td,{children:"Budgie"}),(0,t.jsx)(i.td,{children:"Celluloid (formerly GNOME MPV)"})]}),(0,t.jsxs)(i.tr,{children:[(0,t.jsx)(i.td,{children:"GNOME"}),(0,t.jsx)(i.td,{children:"Celluloid (formerly GNOME MPV)"})]}),(0,t.jsxs)(i.tr,{children:[(0,t.jsx)(i.td,{children:"Plasma"}),(0,t.jsx)(i.td,{children:"Haruna"})]}),(0,t.jsxs)(i.tr,{children:[(0,t.jsx)(i.td,{children:"XFCE"}),(0,t.jsx)(i.td,{children:"Parole"})]})]})]}),"\n",(0,t.jsx)(i.h3,{id:"celluloid",children:"Celluloid"}),"\n",(0,t.jsx)(i.p,{children:(0,t.jsx)(i.img,{alt:"Celluloid Screenshot",src:s(18646).Z+"",width:"651",height:"491"})}),"\n",(0,t.jsx)(i.h3,{id:"haruna",children:"Haruna"}),"\n",(0,t.jsx)(i.p,{children:(0,t.jsx)(i.img,{alt:"Haruna Screenshot",src:s(13289).Z+"",width:"1190",height:"749"})}),"\n",(0,t.jsx)(i.h3,{id:"parole",children:"Parole"}),"\n",(0,t.jsx)(i.p,{children:(0,t.jsx)(i.img,{alt:"Parole Screenshot",src:s(22407).Z+"",width:"764",height:"450"})})]})}function o(e={}){const{wrapper:i}={...(0,c.a)(),...e.components};return i?(0,t.jsx)(i,{...e,children:(0,t.jsx)(a,{...e})}):a(e)}},18646:(e,i,s)=>{s.d(i,{Z:()=>t});const t="data:image/webp;base64,UklGRmwRAABXRUJQVlA4WAoAAAAwAAAAigIA6gEASUNDUKACAAAAAAKgbGNtcwRAAABtbnRyUkdCIFhZWiAH5wAHAAgAFgA2ACZhY3NwQVBQTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9tYAAQAAAADTLWxjbXMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1kZXNjAAABIAAAAEBjcHJ0AAABYAAAADZ3dHB0AAABmAAAABRjaGFkAAABrAAAACxyWFlaAAAB2AAAABRiWFlaAAAB7AAAABRnWFlaAAACAAAAABRyVFJDAAACFAAAACBnVFJDAAACFAAAACBiVFJDAAACFAAAACBjaHJtAAACNAAAACRkbW5kAAACWAAAACRkbWRkAAACfAAAACRtbHVjAAAAAAAAAAEAAAAMZW5VUwAAACQAAAAcAEcASQBNAFAAIABiAHUAaQBsAHQALQBpAG4AIABzAFIARwBCbWx1YwAAAAAAAAABAAAADGVuVVMAAAAaAAAAHABQAHUAYgBsAGkAYwAgAEQAbwBtAGEAaQBuAABYWVogAAAAAAAA9tYAAQAAAADTLXNmMzIAAAAAAAEMQgAABd7///MlAAAHkwAA/ZD///uh///9ogAAA9wAAMBuWFlaIAAAAAAAAG+gAAA49QAAA5BYWVogAAAAAAAAJJ8AAA+EAAC2xFhZWiAAAAAAAABilwAAt4cAABjZcGFyYQAAAAAAAwAAAAJmZgAA8qcAAA1ZAAAT0AAACltjaHJtAAAAAAADAAAAAKPXAABUfAAATM0AAJmaAAAmZwAAD1xtbHVjAAAAAAAAAAEAAAAMZW5VUwAAAAgAAAAcAEcASQBNAFBtbHVjAAAAAAAAAAEAAAAMZW5VUwAAAAgAAAAcAHMAUgBHAEJBTFBI2gIAAB2ga9vase1Z6/oR27Zt9n8XG+dgVl8X4wxc/eOvvjOInZRubfN97x0n9R1cETEBWyKFilIixV+WOTT85UHIICEJgwhGggiRvzOTiH8NiBCCxID8ViRiYvxLs2qMhkgIvxWMKcAMFDPJGBLKAMMYxFFjTTBx7dq1yDwbFotFNLisUdFRGByu2+yMSw7bhnm2+OqNjc/+8FMqGEYZTYW45RnXMdnWtkdfuf99z34bcZiIEVizxS07MOPuc9tnd3y3BGIUiG5+D7PueRtu+D4REGNqs1uZd8/ecPsPw5gKNWrNGTtMPJz32bPLUQOKUa67jqn3tvt+yiiMsuY05t69939+SaJD11w0+XD5pmVSIqkjZp+jXxsSibrV7LPtN0kUoJh9y8FvBacfKhAEM/9ooIbMwAIRTOYfNEzGZhIy/FuxmYbkv8/NRDQfO/+YP2r/t//b/+3/9n/7v/3f/m//t//b/+3/9n/7v/3f/m//t//b/+3/9n/7v/3f/m//t//b/+3/9n/7v/3f/m//t//b/+3/9n/7v/3f/m//t//b/+3/9n/7v/3f/m//t//b/+3/9n/7v/3f/m//t//b/+3/9n/7v/3f/m//t//b/+3/9n+HMk4/8Y9m4TgR/W4+3mXy+WhngfxmvHX45PP6IfU7wbx60uTz8gkGg+SnF86efJ46Zp0EQvLuq+dMPasn7KlIiPy48eqp59Hj1hNJkIx3HlyZeFZO2askRBL5/vHXr5l2Hjj86M2JEgcQf1h9bWXSWTni2M0iUIkkku+fePCqcyac1cdOPWZziZLgUoL88O6mV8846bBdJpqP3nj52RNO3HMzgmRNQmpAIssf33v51bc/qmlm7HLwCSfusX4NUahhICYGYCxGHNNMxVpbAEYjDAyQCMmapKaZoUuFKGAYFSCRYXAg82yoYIooYCIERjEwAE4yATAUo0AIDITUomBgIDjBBMFQMNYOIRRWUDggxAsAALCIAJ0BKosC6wE+MRiLRCIhoRCohKAgAwS0t3C7HwFbrcc/OH94/Dzwo/sn40fuZ25vd31w/cbSM/hn1Z+1/kB+T3O7wAvUf9Z/Iv+uftV6o3dhTAeoR6ifJ/75/Y/2d/sH7gexj+d/kBzpv5f/Zv49+w/76/Rn97/sflxd8f1X3AP4X/Mv8H/PP7X/0v8j8P/9D/lv3N/uHtx+b/9V/j/7n/0PoJ/l/8u/xH9s/x3/U/yP///7X3E+tP9nPYf/Uv/5gUfN7FwnUqS8UlHeFLLAM2/t9hZ1lEqodvsLOsolVDt9hZ1lEqodvVVaW9o0ikTiEf/fOaWMaovNJCB1DRC/PuC9wXgEkwsAPuXnLA6pQyANRtwDo9VgCHYETeUE/a4q4SHIGhQcYP2ywWGKLDhmxiBsjDyXyQYNgKaT6V7Z/OJrevVLUEGO/NjTkYqyoPIUBwLVM4wqxOf6ZFEOLO/PjX0Oh0UUoWwVZZsEZSmgIUpkiqGONTQ29OJJklSFd/sQKqVbHLpuQEfPzmNqBFGx/rm8PRSvFo7wpZYBm39vsLOsolVDszhKFh0qodvsLOsolPjszhKFlElEQIZgMP7izvz7gvcF7gvcF7gvcF7gvgydNWF7gvcF7gvcF7gvcF7gvcGDaQpqwvcF7gvcF7gvcF7gvcF7g8vUFNWF7gvcF7gvcF7gvcF7gvccFjvz7gvcF7gvcF7gvcF7gvcF8GTpqwvcF7gvcF7gvcF7gvcF7gwbSFNWF7gvcF7gvcF7gvcF7gvcHl6gpqwvcF7gvcF7gvcF7gvcF7jgsd+fcF7gvcF7gvcF7gvcF7gvgydNWF7gvcF7gvcF7gvcF7gvcGDaQpqwvcF7gvcF7gvcF7gvcF7g8vUFNWF7gvcF7gvcF7gvcF7gvccFjvz7gvcF7gvcF7gvcF7gvcF8GTpqwvcF7gvcF7gvcF7gvcF7gwbSFNWF7gvcF7gvcF7gvcF7gvcHl6gpqwvcF7gvcF7gvcF7gvcF7jgsd+fcF7gvcF7gvcF7gvcF7gvgydNWF7gvcF7gvcF7gvcF7gvcGDaQpqwvcF7gvcF7gvcF7gvcF7g8vUFNWF7gvcF7gvcF7gvcF7gvccFjvz7gvcF7gvcF7gvcF7gvcF8GTpqwvcF7gvcF7gvcF7gvcF7gwbSFNWF7gvcF7gvcF7gvcF7gvcHJOnR50qh2+ws6yiVUO32FnWUSqh2+ws6yiVUO32FnWUSqh2+ws6nDxGfyRFT6kyF+t5rEyAdGljMuQqtTHXnQYxkVUF7gvcF7gvcF7fgYGB+OCUwne50RSCVEWIimzAvNAOCQTkFTwWbvH1+7uq1K7/qCujQIrJAMiOuvTF4TOAqunuC9wXuC9wXuC8DjnGOIYAMIOcg/gCmIE+ExBTmiE3Ck6I0tMAuTpVQ7fYWdYdKqHb7CzrKJVQ7fYWdZRKqHb7Czc6JVQSs31WoeqESaQgAA/vjxdPwNFhz7UHURDuIzPoZ5aVc/PGKf+VlXIPzSL3V5VMC/P/PDuAU1ovMeZ4ajzlnmVgtkQmDX1wXR9QsKPRxLmIYpFftgezVV8a4L7WoVsevEiMeY1uRThktijakQZh/U18HZ9XUiqE4A7C8nnumBh+lqgQCPblmIVuABhtIXtoO472tmXsHq8pRFar85EzsFuj4pP11ZKxRrA55bliwzrJmIV46e86XJDN3EZ8JR34gmuvkPBBaOTp1+XS0N00fVURo0iV8zndAAvu5YHf9k6lyBYBvQmXaXFvJrIrv39kvjtpz2ANKwqnpW6eeXtr01UaHfBmDPM/7SvmZZk49qDHZGpwrE/DsgxNunQpct/X03jTrjFU5SwuAcOj2ef5PYf3c+aJ+ATrWFnPg4nuYcySQRwrjIxc1/Oyc29jrMdiRoWBDtlREtYGbHT1n6pNvuZZKXLaSOlKcFLIM2D1/KXQnkjq6h82g1cO6EwAzxOEEPS02l631KGHDC+b0hxDFnvNX09EAZxo7JLYVacDqpcQfnOdHlLGz2MsVDvO32Hu6QOwVBzeEyRbrBDqRTEu3/oXc0vU0M3XJWQp0qHOmfiVZI/svW5O2Cny4t3f4gAQ9W+LMSZVJNvNXOKPEx1+RqPge/UbIqmoA1SEzOfsEVdnfXK2RkzQNFpJ0b+SovwdVhWh3Jp51WmgbrrDpVdkXn/OXj1cJnmaa0Tg60h3RT0HxL5h+TIaZh4aL2Xwi8zr8eA8dV2KwnuewouOtIxWEd7WxT3h+Eq5iCTDP3lByUF/trYGjkfp34CZx+Thlkp+Q4eGlksDPva4AT1NnzjY4wCAStWtk+GuWNUGYlwJ9y5NthKNKBmZNreIm8ORfMkzWYy+dhZfbW/N5GQbxtu23SiYYgamVQHYUiI/4l2UY/dU5Kt4trOTlSY+Zk3uck4bv49td3hMUvn+UOYc1K4rPDUBcGTyQ6iT5zX3RRl8kN80ETsLol7oyFq3RnlDVJ27OuwRhtv5Jwuw6uz/Ryg693fwcZgdklEOONsiYaCGxRc4O2GTExrKfXyoajcPAL///yGhgcfHmT3QKqWw8dWcVX3oMle39ddB8qkJHo3efRjNsJ93YikqPfv24GAmYuUCKETVLf0p14oHf+LJr5P0Cmo3pJaORUA7t5QubB+3MczXp0M/KrtTw/e209rqq+j9SRzMqmrbYT0MO0keS4EpYuEPApYb0Ztls/kmoPhIVJ0LGnn+NEtw1xVioFv+OgHHs8lNy4koFNt52ozqh6CNMHdwk6JGZnobr/qQlUACH/XFMCUrAwrBUjxIuALZi7EaQ9QKcZo8KgOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcEBC93uQHSq9JAEmG2WLGDW5SkH8MF0qDpJSwTEu3PKEyT+JKEILBtUKyTr8PMzQUExeOhp2+B9YjLJuVGJ2lwbcUJrvyeZg1Xf2XWbXrr09Bu+TnV6CYols/jwpc7nnKEcnmiVzEJ2OMqnvMDvBO0ABu/rhoBOIrdw9mW0VjlsmVycN55RVqnFd/f+8PEeZfWNqKuCAY5oaxfH/HwGezq5otTsKvpV0pX9oAMMs5VugFtRQb8YqrcvH2PfQABqmasYUNi4h/76sKn6ggeix2sKB/NcDVjz1d5/nMtNsw2jSHEEdDEVzUe0nWKeqsbjIhBgMog7SQ+ZFLsW8P844tvlEmra9opy2hqHrxnvn0hJBISK9loJ5L58jiNWFPRbof/D0lN4cEth/oi+f4VE2LpDwYFgU/X9CT16Hryx+z+0dWq2uyimSMSVd0BuaNl1W/S0I1RQsmPXOrLYDWEMUx40TxcpweyNWrPKyeMGb0im4rSXOatod/11B3WqfJmK9e3AIWq5yCsYtg1pYYAU5D9EvZlxHglBCT4DfvkJHMTK85g7Z3vv7enT7LzbIikzccL4isy0/Vie039AKmcj0+41bZPAAI3FuumP3M7/IH0yzD7ArLG2WtlpTFmKGy9dK2AuIAxXVYB/yZb/jfNHwNYRtsTt85Qk7Z0qPMKr9NtMq8KRWMm/7AHFkTqyZK3mOdYI62rRDqtlGhwHq+eIlFLVJJAQ5SgY8SyA36Xf01l7vX+Zr6O2i5wGIL2fnaCA140clcgWo36zYw8JZJNiOwiHxGuCZ+b3y9bLjXZ4CvZjgR0ZMmI8qh3ExDRaVglJh+q0tJ1m7iLpSnIT1n3JHvhht7y6wdfeoWQfHYGwr2v5NPrZLWTFWq5wr0LnhFFfrtDNZ04ToZauMLEN0Rn5cgen3biUZ7D4fqXcXEKOub5T+xBxxWUDvncTHEC7cAUfOHOW8NR0eR/O2PvjqYDjewLWgfssGdVoJ2xeefcPf05Z9H7f7mA9PG+pQ+6TbgNvvKVf2n3BCF+/hSyKGlbIsfxAf/2mjOlADCBLbHad/AG3l4/9CqwZtGwW98iRx4lSKVi2xJQuwNi9NkWEu9RYxEcnJUcC9QjaRj0aS7GqN9jhCWYf33rf6dFu9gCtlVQob8V4MxPASGLkMBSsTM54AAAA=="},3638:(e,i,s)=>{s.d(i,{Z:()=>t});const t=s.p+"assets/images/dolphin-06132e0261dad073f7f27bbee6bcbfba.jpg"},92304:(e,i,s)=>{s.d(i,{Z:()=>t});const t=s.p+"assets/images/elisa-63e84725c74e3606d527b80a49234bdf.jpg"},34133:(e,i,s)=>{s.d(i,{Z:()=>t});const t=s.p+"assets/images/firefox-0510dce504768afbd216c0fd00abe580.jpg"},13289:(e,i,s)=>{s.d(i,{Z:()=>t});const t=s.p+"assets/images/haruna-aee9cd480cd936456de187af2cb0ecfb.jpg"},85353:(e,i,s)=>{s.d(i,{Z:()=>t});const t=s.p+"assets/images/libreoffice-calc-d000f05dad58cf8e0877111b52108ecb.jpg"},91955:(e,i,s)=>{s.d(i,{Z:()=>t});const t=s.p+"assets/images/libreoffice-draw-46b341512a31da6fdf6505368197b96e.jpg"},8017:(e,i,s)=>{s.d(i,{Z:()=>t});const t=s.p+"assets/images/libreoffice-impress-8851e5e8a47c676d011846d7a919f95d.jpg"},56243:(e,i,s)=>{s.d(i,{Z:()=>t});const t=s.p+"assets/images/libreoffice-math-0fb2b8bfd4c3f8736d107cb81b546a13.jpg"},51304:(e,i,s)=>{s.d(i,{Z:()=>t});const t=s.p+"assets/images/libreoffice-writer-aeca166c3f0379a027c3d34f7d2c5d2c.jpg"},51055:(e,i,s)=>{s.d(i,{Z:()=>t});const t=s.p+"assets/images/nautilus-33ea265420bee017f2cdad24b84e912d.jpg"},80274:(e,i,s)=>{s.d(i,{Z:()=>t});const t=s.p+"assets/images/nemo-b369a1bfe8c00fd1e524e56bd0369e0c.jpg"},22407:(e,i,s)=>{s.d(i,{Z:()=>t});const t=s.p+"assets/images/parole-06df9f8c261a82dbfa968ee1482b4ec0.png"},48392:(e,i,s)=>{s.d(i,{Z:()=>t});const t=s.p+"assets/images/rhythmbox-eb6d0894497e065d9512c2c8454f25e6.jpg"},80649:(e,i,s)=>{s.d(i,{Z:()=>t});const t=s.p+"assets/images/thunderbird-95db449fb1a8d3241f691334bf0b2eb3.jpg"},11151:(e,i,s)=>{s.d(i,{Z:()=>r,a:()=>A});var t=s(67294);const c={},n=t.createContext(c);function A(e){const i=t.useContext(n);return t.useMemo((function(){return"function"==typeof e?e(i):{...i,...e}}),[i,e])}function r(e){let i;return i=e.disableParentContext?"function"==typeof e.components?e.components(c):e.components||c:A(e.components),t.createElement(n.Provider,{value:i},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/14488e92.4a4843cc.js b/assets/js/14488e92.4a4843cc.js new file mode 100644 index 000000000..d06d59b55 --- /dev/null +++ b/assets/js/14488e92.4a4843cc.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([["8301"],{73504:function(e,i,t){t.r(i),t.d(i,{metadata:()=>n,contentTitle:()=>l,default:()=>o,assets:()=>A,toc:()=>d,frontMatter:()=>r});var n=JSON.parse('{"id":"user/quick-start/default-applications","title":"Default Applications","description":"Each version of Solus comes with a pre-installed collection of desktop applications that can help you perform common tasks.","source":"@site/docs/user/quick-start/default-applications.md","sourceDirName":"user/quick-start","slug":"/user/quick-start/default-applications","permalink":"/docs/user/quick-start/default-applications","draft":false,"unlisted":false,"editUrl":"https://github.com/getsolus/help-center-docs/tree/master/docs/user/quick-start/default-applications.md","tags":[],"version":"current","lastUpdatedAt":1733757592000,"frontMatter":{"title":"Default Applications","summary":"A guide to the default applications included with Solus."},"sidebar":"userSidebar","previous":{"title":"Boot Management","permalink":"/docs/user/quick-start/boot-management"},"next":{"title":"Preparing to Install","permalink":"/docs/user/quick-start/installation/"}}'),s=t("85893"),c=t("50065");let r={title:"Default Applications",summary:"A guide to the default applications included with Solus."},l="Default applications",A={},d=[{value:"Web browser",id:"web-browser",level:2},{value:"Email client",id:"email-client",level:2},{value:"Managing your files",id:"managing-your-files",level:2},{value:"Nemo",id:"nemo",level:3},{value:"GNOME Files",id:"gnome-files",level:3},{value:"Dolphin",id:"dolphin",level:3},{value:"Office suite",id:"office-suite",level:2},{value:"Calc",id:"calc",level:3},{value:"Draw",id:"draw",level:3},{value:"Impress",id:"impress",level:3},{value:"Math",id:"math",level:3},{value:"Writer",id:"writer",level:3},{value:"Spell-checking",id:"spell-checking",level:3},{value:"Finnish",id:"finnish",level:4},{value:"Music",id:"music",level:2},{value:"Rhythmbox",id:"rhythmbox",level:3},{value:"Elisa",id:"elisa",level:3},{value:"Video",id:"video",level:2},{value:"Celluloid",id:"celluloid",level:3},{value:"Haruna",id:"haruna",level:3},{value:"Parole",id:"parole",level:3}];function a(e){let i={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",header:"header",img:"img",li:"li",ol:"ol",p:"p",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,c.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(i.header,{children:(0,s.jsx)(i.h1,{id:"default-applications",children:"Default applications"})}),"\n",(0,s.jsx)(i.p,{children:"Each version of Solus comes with a pre-installed collection of desktop applications that can help you perform common tasks."}),"\n",(0,s.jsx)(i.h2,{id:"web-browser",children:"Web browser"}),"\n",(0,s.jsxs)(i.p,{children:["Solus comes pre-installed with Firefox, a secure and trustworthy web browser provided by the non-profit organization ",(0,s.jsx)(i.a,{href:"https://www.mozilla.org/",children:"Mozilla"}),"."]}),"\n",(0,s.jsx)(i.p,{children:(0,s.jsx)(i.img,{alt:"Firefox Screenshot",src:t(15972).Z+"",width:"1920",height:"1046"})}),"\n",(0,s.jsx)(i.h2,{id:"email-client",children:"Email client"}),"\n",(0,s.jsxs)(i.p,{children:["Solus comes pre-installed with the powerful ",(0,s.jsx)(i.a,{href:"https://www.thunderbird.net/",children:"Thunderbird"})," email, newsgroup, and feeds client."]}),"\n",(0,s.jsx)(i.p,{children:(0,s.jsx)(i.img,{alt:"Thunderbird Screenshot",src:t(2811).Z+"",width:"982",height:"822"})}),"\n",(0,s.jsx)(i.h2,{id:"managing-your-files",children:"Managing your files"}),"\n",(0,s.jsx)(i.p,{children:"Each Linux desktop environment has its own graphical application for managing files:"}),"\n",(0,s.jsxs)(i.table,{children:[(0,s.jsx)(i.thead,{children:(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.th,{children:"Desktop"}),(0,s.jsx)(i.th,{children:"Application"})]})}),(0,s.jsxs)(i.tbody,{children:[(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:"Budgie"}),(0,s.jsx)(i.td,{children:"Nemo"})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:"GNOME"}),(0,s.jsx)(i.td,{children:"GNOME Files (formerly Nautilus)"})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:"Plasma"}),(0,s.jsx)(i.td,{children:"Dolphin"})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:"XFCE"}),(0,s.jsx)(i.td,{children:"Nemo"})]})]})]}),"\n",(0,s.jsx)(i.h3,{id:"nemo",children:"Nemo"}),"\n",(0,s.jsx)(i.p,{children:(0,s.jsx)(i.img,{alt:"Nemo Screenshot",src:t(78160).Z+"",width:"800",height:"586"})}),"\n",(0,s.jsx)(i.h3,{id:"gnome-files",children:"GNOME Files"}),"\n",(0,s.jsx)(i.p,{children:(0,s.jsx)(i.img,{alt:"GNOME Files Screenshot",src:t(4642).Z+"",width:"886",height:"548"})}),"\n",(0,s.jsx)(i.h3,{id:"dolphin",children:"Dolphin"}),"\n",(0,s.jsx)(i.p,{children:(0,s.jsx)(i.img,{alt:"Dolphin Screenshot",src:t(98894).Z+"",width:"1022",height:"721"})}),"\n",(0,s.jsx)(i.h2,{id:"office-suite",children:"Office suite"}),"\n",(0,s.jsxs)(i.p,{children:["Solus comes pre-installed with ",(0,s.jsx)(i.a,{href:"https://www.libreoffice.org",children:"LibreOffice"}),", an office suite that is capable of replacing Microsoft",(0,s.jsx)("sup",{children:"TM"})," Office for the most common tasks."]}),"\n",(0,s.jsx)(i.p,{children:"By default, Solus provides Writer (document editor), Calc (spreadsheet editor), and Impress (presentation editor). Other applications such as Math or Draw can be installed from the Software Center."}),"\n",(0,s.jsxs)(i.table,{children:[(0,s.jsx)(i.thead,{children:(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.th,{children:"LibreOffice"}),(0,s.jsx)(i.th,{children:"Microsoft Office Equivalent"}),(0,s.jsx)(i.th,{children:"Apple Equivalent"})]})}),(0,s.jsxs)(i.tbody,{children:[(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:"Writer"}),(0,s.jsx)(i.td,{children:"Word"}),(0,s.jsx)(i.td,{children:"Pages"})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:"Calc"}),(0,s.jsx)(i.td,{children:"Excel"}),(0,s.jsx)(i.td,{children:"Numbers"})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:"Impress"}),(0,s.jsx)(i.td,{children:"PowerPoint"}),(0,s.jsx)(i.td,{children:"Keynote"})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:"Draw"}),(0,s.jsx)(i.td,{children:"Visio"}),(0,s.jsx)(i.td,{})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:"Math"}),(0,s.jsx)(i.td,{}),(0,s.jsx)(i.td,{})]})]})]}),"\n",(0,s.jsx)(i.h3,{id:"calc",children:"Calc"}),"\n",(0,s.jsx)(i.p,{children:(0,s.jsx)(i.img,{alt:"LibreOffice Calc Screenshot",src:t(78906).Z+"",width:"1068",height:"607"})}),"\n",(0,s.jsxs)(i.p,{children:["Calc is a spreadsheet editor. You can view, create, and edit spreadsheets as well as leverage a comprehensive range of advanced functions. Calc supports a variety of common open formats and Microsoft",(0,s.jsx)("sup",{children:"TM"})," Office compatible document formats such as (but not limited to): ",(0,s.jsx)(i.code,{children:"xls"}),", ",(0,s.jsx)(i.code,{children:"xlsx"}),", and ",(0,s.jsx)(i.code,{children:"ods"}),"."]}),"\n",(0,s.jsx)(i.h3,{id:"draw",children:"Draw"}),"\n",(0,s.jsx)(i.p,{children:(0,s.jsx)(i.img,{alt:"LibreOffice Draw Screenshot",src:t(13131).Z+"",width:"1068",height:"637"})}),"\n",(0,s.jsxs)(i.p,{children:["Draw is a graphical editor that allows you to sketch diagrams, workflows and any kind of other simple to complex drawing you can imagine. You can install Draw from the Software Center by searching for the package ",(0,s.jsx)(i.code,{children:"libreoffice-draw"}),"."]}),"\n",(0,s.jsx)(i.h3,{id:"impress",children:"Impress"}),"\n",(0,s.jsx)(i.p,{children:(0,s.jsx)(i.img,{alt:"LibreOffice Impress Screenshot",src:t(3664).Z+"",width:"1068",height:"605"})}),"\n",(0,s.jsxs)(i.p,{children:["Impress is a presentation viewer and editor. You can view, create, edit, and export presentations in common open formats or Microsoft",(0,s.jsx)("sup",{children:"TM"})," Office compatible document formats such as (but not limited to): ",(0,s.jsx)(i.code,{children:"ppt"}),", ",(0,s.jsx)(i.code,{children:"pptx"}),", and ",(0,s.jsx)(i.code,{children:"odp"}),"."]}),"\n",(0,s.jsx)(i.h3,{id:"math",children:"Math"}),"\n",(0,s.jsx)(i.p,{children:(0,s.jsx)(i.img,{alt:"LibreOffice Math Screenshot",src:t(50131).Z+"",width:"1068",height:"598"})}),"\n",(0,s.jsxs)(i.p,{children:["Math is a formula editor. Create your mathematical and scientific expressions and insert them with the correct formatting into your text documents, spreadsheets, presentations, or drawings. Math can be installed from the Software Center by searching for the package ",(0,s.jsx)(i.code,{children:"libreoffice-math"}),"."]}),"\n",(0,s.jsx)(i.h3,{id:"writer",children:"Writer"}),"\n",(0,s.jsx)(i.p,{children:(0,s.jsx)(i.img,{alt:"LibreOffice Writer Screenshot",src:t(96200).Z+"",width:"1068",height:"748"})}),"\n",(0,s.jsxs)(i.p,{children:["Writer is a document editor. You can view, create, edit, and export documents in common open formats or Microsoft",(0,s.jsx)("sup",{children:"TM"})," Office compatible document formats such as (but not limited to): ",(0,s.jsx)(i.code,{children:"doc"}),", ",(0,s.jsx)(i.code,{children:"docx"}),", and ",(0,s.jsx)(i.code,{children:"odt"}),"."]}),"\n",(0,s.jsx)(i.h3,{id:"spell-checking",children:"Spell-checking"}),"\n",(0,s.jsxs)(i.p,{children:["LibreOffice Writer users may want to install the package ",(0,s.jsx)(i.code,{children:"libreoffice-common-dictionaries"})," from Software Center to automatically enable spell-checking support."]}),"\n",(0,s.jsx)(i.h4,{id:"finnish",children:"Finnish"}),"\n",(0,s.jsxs)(i.p,{children:["Finnish language support is provided by installing ",(0,s.jsx)(i.code,{children:"libreoffice-voikko"}),". After installation of this package, there is further configuration required to properly leverage the Voikko spell-checking and Finnish dictionary support."]}),"\n",(0,s.jsxs)(i.ol,{children:["\n",(0,s.jsx)(i.li,{children:"Open up LibreOffice Writer"}),"\n",(0,s.jsxs)(i.li,{children:["In the menubar, go to ",(0,s.jsx)(i.code,{children:"Tools"})," then ",(0,s.jsx)(i.code,{children:"Options"}),". This will open up the Options dialog."]}),"\n",(0,s.jsx)(i.li,{children:"Go to the Language Settings, listed on the left of Options."}),"\n",(0,s.jsx)(i.li,{children:'Under Language Settings, click Writing Aids and ensure the "Spellchecker (Voikko)", "Grammar checker (Voikko)", and "Hyphenator (Voikko)" are under the "Available language modules" section.'}),"\n",(0,s.jsx)(i.li,{children:'Under Language Settings, click Voikko and ensure "standard: suomi (perussanasto)" is selected under the "Vocabulary" section.'}),"\n"]}),"\n",(0,s.jsx)(i.h2,{id:"music",children:"Music"}),"\n",(0,s.jsxs)(i.table,{children:[(0,s.jsx)(i.thead,{children:(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.th,{children:"Desktop"}),(0,s.jsx)(i.th,{children:"Application"})]})}),(0,s.jsxs)(i.tbody,{children:[(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:"Budgie"}),(0,s.jsx)(i.td,{children:"Rhythmbox"})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:"GNOME"}),(0,s.jsx)(i.td,{children:"Rhythmbox"})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:"Plasma"}),(0,s.jsx)(i.td,{children:"Elisa"})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:"XFCE"}),(0,s.jsx)(i.td,{children:"Rhythmbox"})]})]})]}),"\n",(0,s.jsx)(i.h3,{id:"rhythmbox",children:"Rhythmbox"}),"\n",(0,s.jsx)(i.p,{children:(0,s.jsx)(i.img,{alt:"Rhythmbox Screenshot",src:t(62318).Z+"",width:"789",height:"606"})}),"\n",(0,s.jsx)(i.h3,{id:"elisa",children:"Elisa"}),"\n",(0,s.jsx)(i.p,{children:(0,s.jsx)(i.img,{alt:"Elisa Screenshot",src:t(34615).Z+"",width:"1020",height:"720"})}),"\n",(0,s.jsx)(i.h2,{id:"video",children:"Video"}),"\n",(0,s.jsxs)(i.table,{children:[(0,s.jsx)(i.thead,{children:(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.th,{children:"Desktop"}),(0,s.jsx)(i.th,{children:"Application"})]})}),(0,s.jsxs)(i.tbody,{children:[(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:"Budgie"}),(0,s.jsx)(i.td,{children:"Celluloid (formerly GNOME MPV)"})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:"GNOME"}),(0,s.jsx)(i.td,{children:"Celluloid (formerly GNOME MPV)"})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:"Plasma"}),(0,s.jsx)(i.td,{children:"Haruna"})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:"XFCE"}),(0,s.jsx)(i.td,{children:"Parole"})]})]})]}),"\n",(0,s.jsx)(i.h3,{id:"celluloid",children:"Celluloid"}),"\n",(0,s.jsx)(i.p,{children:(0,s.jsx)(i.img,{alt:"Celluloid Screenshot",src:t(82330).Z+"",width:"651",height:"491"})}),"\n",(0,s.jsx)(i.h3,{id:"haruna",children:"Haruna"}),"\n",(0,s.jsx)(i.p,{children:(0,s.jsx)(i.img,{alt:"Haruna Screenshot",src:t(73201).Z+"",width:"1190",height:"749"})}),"\n",(0,s.jsx)(i.h3,{id:"parole",children:"Parole"}),"\n",(0,s.jsx)(i.p,{children:(0,s.jsx)(i.img,{alt:"Parole Screenshot",src:t(49134).Z+"",width:"764",height:"450"})})]})}function o(e={}){let{wrapper:i}={...(0,c.a)(),...e.components};return i?(0,s.jsx)(i,{...e,children:(0,s.jsx)(a,{...e})}):a(e)}},82330:function(e,i,t){t.d(i,{Z:function(){return n}});let n="data:image/webp;base64,UklGRmwRAABXRUJQVlA4WAoAAAAwAAAAigIA6gEASUNDUKACAAAAAAKgbGNtcwRAAABtbnRyUkdCIFhZWiAH5wAHAAgAFgA2ACZhY3NwQVBQTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9tYAAQAAAADTLWxjbXMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1kZXNjAAABIAAAAEBjcHJ0AAABYAAAADZ3dHB0AAABmAAAABRjaGFkAAABrAAAACxyWFlaAAAB2AAAABRiWFlaAAAB7AAAABRnWFlaAAACAAAAABRyVFJDAAACFAAAACBnVFJDAAACFAAAACBiVFJDAAACFAAAACBjaHJtAAACNAAAACRkbW5kAAACWAAAACRkbWRkAAACfAAAACRtbHVjAAAAAAAAAAEAAAAMZW5VUwAAACQAAAAcAEcASQBNAFAAIABiAHUAaQBsAHQALQBpAG4AIABzAFIARwBCbWx1YwAAAAAAAAABAAAADGVuVVMAAAAaAAAAHABQAHUAYgBsAGkAYwAgAEQAbwBtAGEAaQBuAABYWVogAAAAAAAA9tYAAQAAAADTLXNmMzIAAAAAAAEMQgAABd7///MlAAAHkwAA/ZD///uh///9ogAAA9wAAMBuWFlaIAAAAAAAAG+gAAA49QAAA5BYWVogAAAAAAAAJJ8AAA+EAAC2xFhZWiAAAAAAAABilwAAt4cAABjZcGFyYQAAAAAAAwAAAAJmZgAA8qcAAA1ZAAAT0AAACltjaHJtAAAAAAADAAAAAKPXAABUfAAATM0AAJmaAAAmZwAAD1xtbHVjAAAAAAAAAAEAAAAMZW5VUwAAAAgAAAAcAEcASQBNAFBtbHVjAAAAAAAAAAEAAAAMZW5VUwAAAAgAAAAcAHMAUgBHAEJBTFBI2gIAAB2ga9vase1Z6/oR27Zt9n8XG+dgVl8X4wxc/eOvvjOInZRubfN97x0n9R1cETEBWyKFilIixV+WOTT85UHIICEJgwhGggiRvzOTiH8NiBCCxID8ViRiYvxLs2qMhkgIvxWMKcAMFDPJGBLKAMMYxFFjTTBx7dq1yDwbFotFNLisUdFRGByu2+yMSw7bhnm2+OqNjc/+8FMqGEYZTYW45RnXMdnWtkdfuf99z34bcZiIEVizxS07MOPuc9tnd3y3BGIUiG5+D7PueRtu+D4REGNqs1uZd8/ecPsPw5gKNWrNGTtMPJz32bPLUQOKUa67jqn3tvt+yiiMsuY05t69939+SaJD11w0+XD5pmVSIqkjZp+jXxsSibrV7LPtN0kUoJh9y8FvBacfKhAEM/9ooIbMwAIRTOYfNEzGZhIy/FuxmYbkv8/NRDQfO/+YP2r/t//b/+3/9n/7v/3f/m//t//b/+3/9n/7v/3f/m//t//b/+3/9n/7v/3f/m//t//b/+3/9n/7v/3f/m//t//b/+3/9n/7v/3f/m//t//b/+3/9n/7v/3f/m//t//b/+3/9n/7v/3f/m//t//b/+3/9n/7v/3f/m//t//b/+3/9n+HMk4/8Y9m4TgR/W4+3mXy+WhngfxmvHX45PP6IfU7wbx60uTz8gkGg+SnF86efJ46Zp0EQvLuq+dMPasn7KlIiPy48eqp59Hj1hNJkIx3HlyZeFZO2askRBL5/vHXr5l2Hjj86M2JEgcQf1h9bWXSWTni2M0iUIkkku+fePCqcyac1cdOPWZziZLgUoL88O6mV8846bBdJpqP3nj52RNO3HMzgmRNQmpAIssf33v51bc/qmlm7HLwCSfusX4NUahhICYGYCxGHNNMxVpbAEYjDAyQCMmapKaZoUuFKGAYFSCRYXAg82yoYIooYCIERjEwAE4yATAUo0AIDITUomBgIDjBBMFQMNYOIRRWUDggxAsAALCIAJ0BKosC6wE+MRiLRCIhoRCohKAgAwS0t3C7HwFbrcc/OH94/Dzwo/sn40fuZ25vd31w/cbSM/hn1Z+1/kB+T3O7wAvUf9Z/Iv+uftV6o3dhTAeoR6ifJ/75/Y/2d/sH7gexj+d/kBzpv5f/Zv49+w/76/Rn97/sflxd8f1X3AP4X/Mv8H/PP7X/0v8j8P/9D/lv3N/uHtx+b/9V/j/7n/0PoJ/l/8u/xH9s/x3/U/yP///7X3E+tP9nPYf/Uv/5gUfN7FwnUqS8UlHeFLLAM2/t9hZ1lEqodvsLOsolVDt9hZ1lEqodvVVaW9o0ikTiEf/fOaWMaovNJCB1DRC/PuC9wXgEkwsAPuXnLA6pQyANRtwDo9VgCHYETeUE/a4q4SHIGhQcYP2ywWGKLDhmxiBsjDyXyQYNgKaT6V7Z/OJrevVLUEGO/NjTkYqyoPIUBwLVM4wqxOf6ZFEOLO/PjX0Oh0UUoWwVZZsEZSmgIUpkiqGONTQ29OJJklSFd/sQKqVbHLpuQEfPzmNqBFGx/rm8PRSvFo7wpZYBm39vsLOsolVDszhKFh0qodvsLOsolPjszhKFlElEQIZgMP7izvz7gvcF7gvcF7gvcF7gvgydNWF7gvcF7gvcF7gvcF7gvcGDaQpqwvcF7gvcF7gvcF7gvcF7g8vUFNWF7gvcF7gvcF7gvcF7gvccFjvz7gvcF7gvcF7gvcF7gvcF8GTpqwvcF7gvcF7gvcF7gvcF7gwbSFNWF7gvcF7gvcF7gvcF7gvcHl6gpqwvcF7gvcF7gvcF7gvcF7jgsd+fcF7gvcF7gvcF7gvcF7gvgydNWF7gvcF7gvcF7gvcF7gvcGDaQpqwvcF7gvcF7gvcF7gvcF7g8vUFNWF7gvcF7gvcF7gvcF7gvccFjvz7gvcF7gvcF7gvcF7gvcF8GTpqwvcF7gvcF7gvcF7gvcF7gwbSFNWF7gvcF7gvcF7gvcF7gvcHl6gpqwvcF7gvcF7gvcF7gvcF7jgsd+fcF7gvcF7gvcF7gvcF7gvgydNWF7gvcF7gvcF7gvcF7gvcGDaQpqwvcF7gvcF7gvcF7gvcF7g8vUFNWF7gvcF7gvcF7gvcF7gvccFjvz7gvcF7gvcF7gvcF7gvcF8GTpqwvcF7gvcF7gvcF7gvcF7gwbSFNWF7gvcF7gvcF7gvcF7gvcHJOnR50qh2+ws6yiVUO32FnWUSqh2+ws6yiVUO32FnWUSqh2+ws6nDxGfyRFT6kyF+t5rEyAdGljMuQqtTHXnQYxkVUF7gvcF7gvcF7fgYGB+OCUwne50RSCVEWIimzAvNAOCQTkFTwWbvH1+7uq1K7/qCujQIrJAMiOuvTF4TOAqunuC9wXuC9wXuC8DjnGOIYAMIOcg/gCmIE+ExBTmiE3Ck6I0tMAuTpVQ7fYWdYdKqHb7CzrKJVQ7fYWdZRKqHb7Czc6JVQSs31WoeqESaQgAA/vjxdPwNFhz7UHURDuIzPoZ5aVc/PGKf+VlXIPzSL3V5VMC/P/PDuAU1ovMeZ4ajzlnmVgtkQmDX1wXR9QsKPRxLmIYpFftgezVV8a4L7WoVsevEiMeY1uRThktijakQZh/U18HZ9XUiqE4A7C8nnumBh+lqgQCPblmIVuABhtIXtoO472tmXsHq8pRFar85EzsFuj4pP11ZKxRrA55bliwzrJmIV46e86XJDN3EZ8JR34gmuvkPBBaOTp1+XS0N00fVURo0iV8zndAAvu5YHf9k6lyBYBvQmXaXFvJrIrv39kvjtpz2ANKwqnpW6eeXtr01UaHfBmDPM/7SvmZZk49qDHZGpwrE/DsgxNunQpct/X03jTrjFU5SwuAcOj2ef5PYf3c+aJ+ATrWFnPg4nuYcySQRwrjIxc1/Oyc29jrMdiRoWBDtlREtYGbHT1n6pNvuZZKXLaSOlKcFLIM2D1/KXQnkjq6h82g1cO6EwAzxOEEPS02l631KGHDC+b0hxDFnvNX09EAZxo7JLYVacDqpcQfnOdHlLGz2MsVDvO32Hu6QOwVBzeEyRbrBDqRTEu3/oXc0vU0M3XJWQp0qHOmfiVZI/svW5O2Cny4t3f4gAQ9W+LMSZVJNvNXOKPEx1+RqPge/UbIqmoA1SEzOfsEVdnfXK2RkzQNFpJ0b+SovwdVhWh3Jp51WmgbrrDpVdkXn/OXj1cJnmaa0Tg60h3RT0HxL5h+TIaZh4aL2Xwi8zr8eA8dV2KwnuewouOtIxWEd7WxT3h+Eq5iCTDP3lByUF/trYGjkfp34CZx+Thlkp+Q4eGlksDPva4AT1NnzjY4wCAStWtk+GuWNUGYlwJ9y5NthKNKBmZNreIm8ORfMkzWYy+dhZfbW/N5GQbxtu23SiYYgamVQHYUiI/4l2UY/dU5Kt4trOTlSY+Zk3uck4bv49td3hMUvn+UOYc1K4rPDUBcGTyQ6iT5zX3RRl8kN80ETsLol7oyFq3RnlDVJ27OuwRhtv5Jwuw6uz/Ryg693fwcZgdklEOONsiYaCGxRc4O2GTExrKfXyoajcPAL///yGhgcfHmT3QKqWw8dWcVX3oMle39ddB8qkJHo3efRjNsJ93YikqPfv24GAmYuUCKETVLf0p14oHf+LJr5P0Cmo3pJaORUA7t5QubB+3MczXp0M/KrtTw/e209rqq+j9SRzMqmrbYT0MO0keS4EpYuEPApYb0Ztls/kmoPhIVJ0LGnn+NEtw1xVioFv+OgHHs8lNy4koFNt52ozqh6CNMHdwk6JGZnobr/qQlUACH/XFMCUrAwrBUjxIuALZi7EaQ9QKcZo8KgOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcEBC93uQHSq9JAEmG2WLGDW5SkH8MF0qDpJSwTEu3PKEyT+JKEILBtUKyTr8PMzQUExeOhp2+B9YjLJuVGJ2lwbcUJrvyeZg1Xf2XWbXrr09Bu+TnV6CYols/jwpc7nnKEcnmiVzEJ2OMqnvMDvBO0ABu/rhoBOIrdw9mW0VjlsmVycN55RVqnFd/f+8PEeZfWNqKuCAY5oaxfH/HwGezq5otTsKvpV0pX9oAMMs5VugFtRQb8YqrcvH2PfQABqmasYUNi4h/76sKn6ggeix2sKB/NcDVjz1d5/nMtNsw2jSHEEdDEVzUe0nWKeqsbjIhBgMog7SQ+ZFLsW8P844tvlEmra9opy2hqHrxnvn0hJBISK9loJ5L58jiNWFPRbof/D0lN4cEth/oi+f4VE2LpDwYFgU/X9CT16Hryx+z+0dWq2uyimSMSVd0BuaNl1W/S0I1RQsmPXOrLYDWEMUx40TxcpweyNWrPKyeMGb0im4rSXOatod/11B3WqfJmK9e3AIWq5yCsYtg1pYYAU5D9EvZlxHglBCT4DfvkJHMTK85g7Z3vv7enT7LzbIikzccL4isy0/Vie039AKmcj0+41bZPAAI3FuumP3M7/IH0yzD7ArLG2WtlpTFmKGy9dK2AuIAxXVYB/yZb/jfNHwNYRtsTt85Qk7Z0qPMKr9NtMq8KRWMm/7AHFkTqyZK3mOdYI62rRDqtlGhwHq+eIlFLVJJAQ5SgY8SyA36Xf01l7vX+Zr6O2i5wGIL2fnaCA140clcgWo36zYw8JZJNiOwiHxGuCZ+b3y9bLjXZ4CvZjgR0ZMmI8qh3ExDRaVglJh+q0tJ1m7iLpSnIT1n3JHvhht7y6wdfeoWQfHYGwr2v5NPrZLWTFWq5wr0LnhFFfrtDNZ04ToZauMLEN0Rn5cgen3biUZ7D4fqXcXEKOub5T+xBxxWUDvncTHEC7cAUfOHOW8NR0eR/O2PvjqYDjewLWgfssGdVoJ2xeefcPf05Z9H7f7mA9PG+pQ+6TbgNvvKVf2n3BCF+/hSyKGlbIsfxAf/2mjOlADCBLbHad/AG3l4/9CqwZtGwW98iRx4lSKVi2xJQuwNi9NkWEu9RYxEcnJUcC9QjaRj0aS7GqN9jhCWYf33rf6dFu9gCtlVQob8V4MxPASGLkMBSsTM54AAAA=="},98894:function(e,i,t){t.d(i,{Z:function(){return n}});let n=t.p+"assets/images/dolphin-06132e0261dad073f7f27bbee6bcbfba.jpg"},34615:function(e,i,t){t.d(i,{Z:function(){return n}});let n=t.p+"assets/images/elisa-63e84725c74e3606d527b80a49234bdf.jpg"},15972:function(e,i,t){t.d(i,{Z:function(){return n}});let n=t.p+"assets/images/firefox-0510dce504768afbd216c0fd00abe580.jpg"},73201:function(e,i,t){t.d(i,{Z:function(){return n}});let n=t.p+"assets/images/haruna-aee9cd480cd936456de187af2cb0ecfb.jpg"},78906:function(e,i,t){t.d(i,{Z:function(){return n}});let n=t.p+"assets/images/libreoffice-calc-d000f05dad58cf8e0877111b52108ecb.jpg"},13131:function(e,i,t){t.d(i,{Z:function(){return n}});let n=t.p+"assets/images/libreoffice-draw-46b341512a31da6fdf6505368197b96e.jpg"},3664:function(e,i,t){t.d(i,{Z:function(){return n}});let n=t.p+"assets/images/libreoffice-impress-8851e5e8a47c676d011846d7a919f95d.jpg"},50131:function(e,i,t){t.d(i,{Z:function(){return n}});let n=t.p+"assets/images/libreoffice-math-0fb2b8bfd4c3f8736d107cb81b546a13.jpg"},96200:function(e,i,t){t.d(i,{Z:function(){return n}});let n=t.p+"assets/images/libreoffice-writer-aeca166c3f0379a027c3d34f7d2c5d2c.jpg"},4642:function(e,i,t){t.d(i,{Z:function(){return n}});let n=t.p+"assets/images/nautilus-33ea265420bee017f2cdad24b84e912d.jpg"},78160:function(e,i,t){t.d(i,{Z:function(){return n}});let n=t.p+"assets/images/nemo-b369a1bfe8c00fd1e524e56bd0369e0c.jpg"},49134:function(e,i,t){t.d(i,{Z:function(){return n}});let n=t.p+"assets/images/parole-06df9f8c261a82dbfa968ee1482b4ec0.png"},62318:function(e,i,t){t.d(i,{Z:function(){return n}});let n=t.p+"assets/images/rhythmbox-eb6d0894497e065d9512c2c8454f25e6.jpg"},2811:function(e,i,t){t.d(i,{Z:function(){return n}});let n=t.p+"assets/images/thunderbird-95db449fb1a8d3241f691334bf0b2eb3.jpg"},50065:function(e,i,t){t.d(i,{Z:function(){return l},a:function(){return r}});var n=t(67294);let s={},c=n.createContext(s);function r(e){let i=n.useContext(c);return n.useMemo(function(){return"function"==typeof e?e(i):{...i,...e}},[i,e])}function l(e){let i;return i=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:r(e.components),n.createElement(c.Provider,{value:i},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/14eb3368.14ad20f9.js b/assets/js/14eb3368.14ad20f9.js new file mode 100644 index 000000000..2c60d85aa --- /dev/null +++ b/assets/js/14eb3368.14ad20f9.js @@ -0,0 +1,4 @@ +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([["1983"],{19572:function(e,t,n){n.d(t,{Z:()=>f});var r=n("85893");n("67294");var s=n("74904"),i=n("50490"),a=n("71364"),l=n("16896"),o=n("27544"),c=n("1822"),d=n("7571");function u(e){return(0,r.jsx)("svg",{viewBox:"0 0 24 24",...e,children:(0,r.jsx)("path",{d:"M10 19v-5h4v5c0 .55.45 1 1 1h3c.55 0 1-.45 1-1v-7h1.7c.46 0 .68-.57.33-.87L12.67 3.6c-.38-.34-.96-.34-1.34 0l-8.36 7.53c-.34.3-.13.87.33.87H5v7c0 .55.45 1 1 1h3c.55 0 1-.45 1-1z",fill:"currentColor"})})}let h="breadcrumbHomeIcon_YNFT";function m(){let e=(0,d.ZP)("/");return(0,r.jsx)("li",{className:"breadcrumbs__item",children:(0,r.jsx)(o.Z,{"aria-label":(0,c.I)({id:"theme.docs.breadcrumbs.home",message:"Home page",description:"The ARIA label for the home page in the breadcrumbs"}),className:"breadcrumbs__link",href:e,children:(0,r.jsx)(u,{className:h})})})}let p="breadcrumbsContainer_Z_bl";function b(e){let{children:t,href:n,isLast:s}=e,i="breadcrumbs__link";return s?(0,r.jsx)("span",{className:i,itemProp:"name",children:t}):n?(0,r.jsx)(o.Z,{className:i,href:n,itemProp:"item",children:(0,r.jsx)("span",{itemProp:"name",children:t})}):(0,r.jsx)("span",{className:i,children:t})}function x(e){let{children:t,active:n,index:i,addMicrodata:a}=e;return(0,r.jsxs)("li",{...a&&{itemScope:!0,itemProp:"itemListElement",itemType:"https://schema.org/ListItem"},className:(0,s.Z)("breadcrumbs__item",{"breadcrumbs__item--active":n}),children:[t,(0,r.jsx)("meta",{itemProp:"position",content:String(i+1)})]})}function f(){let e=(0,a.s1)(),t=(0,l.Ns)();return e?(0,r.jsx)("nav",{className:(0,s.Z)(i.k.docs.docBreadcrumbs,p),"aria-label":(0,c.I)({id:"theme.docs.breadcrumbs.navAriaLabel",message:"Breadcrumbs",description:"The ARIA label for the breadcrumbs"}),children:(0,r.jsxs)("ul",{className:"breadcrumbs",itemScope:!0,itemType:"https://schema.org/BreadcrumbList",children:[t&&(0,r.jsx)(m,{}),e.map((t,n)=>{let s=n===e.length-1,i="category"===t.type&&t.linkUnlisted?void 0:t.href;return(0,r.jsx)(x,{active:s,index:n,addMicrodata:!!i,children:(0,r.jsx)(b,{href:i,isLast:s,children:t.label})},n)})]})}):null}},40855:function(e,t,n){n.r(t),n.d(t,{default:()=>C});var r=n("85893");n("67294");var s=n("81921"),i=n("71364"),a=n("7571"),l=n("74904"),o=n("27544"),c=n("67984"),d=n("76520"),u=n("1822"),h=n("52068");let m={cardContainer:"cardContainer_fWXF",cardTitle:"cardTitle_rnsV",cardDescription:"cardDescription_PWke"};function p(e){let{href:t,children:n}=e;return(0,r.jsx)(o.Z,{href:t,className:(0,l.Z)("card padding--lg",m.cardContainer),children:n})}function b(e){let{href:t,icon:n,title:s,description:i}=e;return(0,r.jsxs)(p,{href:t,children:[(0,r.jsxs)(h.Z,{as:"h2",className:(0,l.Z)("text--truncate",m.cardTitle),title:s,children:[n," ",s]}),i&&(0,r.jsx)("p",{className:(0,l.Z)("text--truncate",m.cardDescription),title:i,children:i})]})}function x(e){let{item:t}=e,n=(0,i.LM)(t),s=function(){let{selectMessage:e}=(0,c.c)();return t=>e(t,(0,u.I)({message:"1 item|{count} items",id:"theme.docs.DocCard.categoryDescription.plurals",description:"The default description for a category card in the generated index about how many items this category includes"},{count:t}))}();return n?(0,r.jsx)(b,{href:n,icon:"\uD83D\uDDC3\uFE0F",title:t.label,description:t.description??s(t.items.length)}):null}function f(e){let{item:t}=e,n=(0,d.Z)(t.href)?"\uD83D\uDCC4\uFE0F":"\uD83D\uDD17",s=(0,i.xz)(t.docId??void 0);return(0,r.jsx)(b,{href:t.href,icon:n,title:t.label,description:t.description??s?.description})}function v(e){let{item:t}=e;switch(t.type){case"link":return(0,r.jsx)(f,{item:t});case"category":return(0,r.jsx)(x,{item:t});default:throw Error(`unknown item type ${JSON.stringify(t)}`)}}function g(e){let{className:t}=e,n=(0,i.jA)();return(0,r.jsx)(j,{items:n.items,className:t})}function j(e){let{items:t,className:n}=e;if(!t)return(0,r.jsx)(g,{...e});let s=(0,i.MN)(t);return(0,r.jsx)("section",{className:(0,l.Z)("row",n),children:s.map((e,t)=>(0,r.jsx)("article",{className:"col col--6 margin-bottom--lg",children:(0,r.jsx)(v,{item:e})},t))})}var Z=n("16583"),N=n("70271"),_=n("6682"),k=n("19572");let L="generatedIndexPage_vN6x",T="list_eTzJ",w="title_kItE";function y(e){let{categoryGeneratedIndex:t}=e;return(0,r.jsx)(s.d,{title:t.title,description:t.description,keywords:t.keywords,image:(0,a.ZP)(t.image)})}function I(e){let{categoryGeneratedIndex:t}=e,n=(0,i.jA)();return(0,r.jsxs)("div",{className:L,children:[(0,r.jsx)(N.Z,{}),(0,r.jsx)(k.Z,{}),(0,r.jsx)(_.Z,{}),(0,r.jsxs)("header",{children:[(0,r.jsx)(h.Z,{as:"h1",className:w,children:t.title}),t.description&&(0,r.jsx)("p",{children:t.description})]}),(0,r.jsx)("article",{className:"margin-top--lg",children:(0,r.jsx)(j,{items:n.items,className:T})}),(0,r.jsx)("footer",{className:"margin-top--lg",children:(0,r.jsx)(Z.Z,{previous:t.navigation.previous,next:t.navigation.next})})]})}function C(e){return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(y,{...e}),(0,r.jsx)(I,{...e})]})}},16583:function(e,t,n){n.d(t,{Z:function(){return a}});var r=n(85893);n(67294);var s=n(1822),i=n(15779);function a(e){let{previous:t,next:n}=e;return(0,r.jsxs)("nav",{className:"pagination-nav docusaurus-mt-lg","aria-label":(0,s.I)({id:"theme.docs.paginator.navAriaLabel",message:"Docs pages",description:"The ARIA label for the docs pagination"}),children:[t&&(0,r.jsx)(i.Z,{...t,subLabel:(0,r.jsx)(s.Z,{id:"theme.docs.paginator.previous",description:"The label used to navigate to the previous doc",children:"Previous"})}),n&&(0,r.jsx)(i.Z,{...n,subLabel:(0,r.jsx)(s.Z,{id:"theme.docs.paginator.next",description:"The label used to navigate to the next doc",children:"Next"}),isNext:!0})]})}},6682:function(e,t,n){n.d(t,{Z:function(){return o}});var r=n(85893);n(67294);var s=n(74904),i=n(1822),a=n(50490),l=n(85302);function o(e){let{className:t}=e,n=(0,l.E)();return n.badge?(0,r.jsx)("span",{className:(0,s.Z)(t,a.k.docs.docVersionBadge,"badge badge--secondary"),children:(0,r.jsx)(i.Z,{id:"theme.docs.versionBadge.label",values:{versionLabel:n.label},children:"Version: {versionLabel}"})}):null}},70271:function(e,t,n){n.d(t,{Z:function(){return x}});var r=n(85893);n(67294);var s=n(74904),i=n(93934),a=n(27544),l=n(1822),o=n(1652),c=n(50490),d=n(13908),u=n(85302);let h={unreleased:function(e){let{siteTitle:t,versionMetadata:n}=e;return(0,r.jsx)(l.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:(0,r.jsx)("b",{children:n.label})},children:"This is unreleased documentation for {siteTitle} {versionLabel} version."})},unmaintained:function(e){let{siteTitle:t,versionMetadata:n}=e;return(0,r.jsx)(l.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:(0,r.jsx)("b",{children:n.label})},children:"This is documentation for {siteTitle} {versionLabel}, which is no longer actively maintained."})}};function m(e){let t=h[e.versionMetadata.banner];return(0,r.jsx)(t,{...e})}function p(e){let{versionLabel:t,to:n,onClick:s}=e;return(0,r.jsx)(l.Z,{id:"theme.docs.versions.latestVersionSuggestionLabel",description:"The label used to tell the user to check the latest version",values:{versionLabel:t,latestVersionLink:(0,r.jsx)("b",{children:(0,r.jsx)(a.Z,{to:n,onClick:s,children:(0,r.jsx)(l.Z,{id:"theme.docs.versions.latestVersionLinkLabel",description:"The label used for the latest version suggestion link label",children:"latest version"})})})},children:"For up-to-date documentation, see the {latestVersionLink} ({versionLabel})."})}function b(e){let t,{className:n,versionMetadata:a}=e,{siteConfig:{title:l}}=(0,i.Z)(),{pluginId:u}=(0,o.gA)({failfast:!0}),{savePreferredVersionName:h}=(0,d.J)(u),{latestDocSuggestion:b,latestVersionSuggestion:x}=(0,o.Jo)(u);let f=b??(t=x).docs.find(e=>e.id===t.mainDocId);return(0,r.jsxs)("div",{className:(0,s.Z)(n,c.k.docs.docVersionBanner,"alert alert--warning margin-bottom--md"),role:"alert",children:[(0,r.jsx)("div",{children:(0,r.jsx)(m,{siteTitle:l,versionMetadata:a})}),(0,r.jsx)("div",{className:"margin-top--md",children:(0,r.jsx)(p,{versionLabel:x.label,to:f.path,onClick:()=>h(x.name)})})]})}function x(e){let{className:t}=e,n=(0,u.E)();return n.banner?(0,r.jsx)(b,{className:t,versionMetadata:n}):null}},15779:function(e,t,n){n.d(t,{Z:function(){return a}});var r=n(85893);n(67294);var s=n(74904),i=n(27544);function a(e){let{permalink:t,title:n,subLabel:a,isNext:l}=e;return(0,r.jsxs)(i.Z,{className:(0,s.Z)("pagination-nav__link",l?"pagination-nav__link--next":"pagination-nav__link--prev"),to:t,children:[a&&(0,r.jsx)("div",{className:"pagination-nav__sublabel",children:a}),(0,r.jsx)("div",{className:"pagination-nav__label",children:n})]})}},67984:function(e,t,n){n.d(t,{c:function(){return o}});var r=n(67294),s=n(93934);let i=["zero","one","two","few","many","other"];function a(e){return i.filter(t=>e.includes(t))}let l={locale:"en",pluralForms:a(["one","other"]),select:e=>1===e?"one":"other"};function o(){let e=function(){let{i18n:{currentLocale:e}}=(0,s.Z)();return(0,r.useMemo)(()=>{try{return function(e){let t=new Intl.PluralRules(e);return{locale:e,pluralForms:a(t.resolvedOptions().pluralCategories),select:e=>t.select(e)}}(e)}catch(t){return console.error(`Failed to use Intl.PluralRules for locale "${e}". +Docusaurus will fallback to the default (English) implementation. +Error: ${t.message} +`),l}},[e])}();return{selectMessage:(t,n)=>(function(e,t,n){let r=e.split("|");if(1===r.length)return r[0];r.length>n.pluralForms.length&&console.error(`For locale=${n.locale}, a maximum of ${n.pluralForms.length} plural forms are expected (${n.pluralForms.join(",")}), but the message contains ${r.length}: ${e}`);let s=n.select(t);return r[Math.min(n.pluralForms.indexOf(s),r.length-1)]})(n,t,e)}}}}]); \ No newline at end of file diff --git a/assets/js/14eb3368.e474746e.js b/assets/js/14eb3368.e474746e.js deleted file mode 100644 index be7a860a7..000000000 --- a/assets/js/14eb3368.e474746e.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[9817],{36300:(e,t,n)=>{n.d(t,{Z:()=>g});n(67294);var s=n(36905),r=n(50563),i=n(68879),a=n(51997),l=n(38208),o=n(55361),c=n(23466),d=n(85893);function u(e){return(0,d.jsx)("svg",{viewBox:"0 0 24 24",...e,children:(0,d.jsx)("path",{d:"M10 19v-5h4v5c0 .55.45 1 1 1h3c.55 0 1-.45 1-1v-7h1.7c.46 0 .68-.57.33-.87L12.67 3.6c-.38-.34-.96-.34-1.34 0l-8.36 7.53c-.34.3-.13.87.33.87H5v7c0 .55.45 1 1 1h3c.55 0 1-.45 1-1z",fill:"currentColor"})})}const m={breadcrumbHomeIcon:"breadcrumbHomeIcon_YNFT"};function h(){const e=(0,c.ZP)("/");return(0,d.jsx)("li",{className:"breadcrumbs__item",children:(0,d.jsx)(l.Z,{"aria-label":(0,o.I)({id:"theme.docs.breadcrumbs.home",message:"Home page",description:"The ARIA label for the home page in the breadcrumbs"}),className:"breadcrumbs__link",href:e,children:(0,d.jsx)(u,{className:m.breadcrumbHomeIcon})})})}const b={breadcrumbsContainer:"breadcrumbsContainer_Z_bl"};function p(e){let{children:t,href:n,isLast:s}=e;const r="breadcrumbs__link";return s?(0,d.jsx)("span",{className:r,itemProp:"name",children:t}):n?(0,d.jsx)(l.Z,{className:r,href:n,itemProp:"item",children:(0,d.jsx)("span",{itemProp:"name",children:t})}):(0,d.jsx)("span",{className:r,children:t})}function x(e){let{children:t,active:n,index:r,addMicrodata:i}=e;return(0,d.jsxs)("li",{...i&&{itemScope:!0,itemProp:"itemListElement",itemType:"https://schema.org/ListItem"},className:(0,s.Z)("breadcrumbs__item",{"breadcrumbs__item--active":n}),children:[t,(0,d.jsx)("meta",{itemProp:"position",content:String(r+1)})]})}function g(){const e=(0,i.s1)(),t=(0,a.Ns)();return e?(0,d.jsx)("nav",{className:(0,s.Z)(r.k.docs.docBreadcrumbs,b.breadcrumbsContainer),"aria-label":(0,o.I)({id:"theme.docs.breadcrumbs.navAriaLabel",message:"Breadcrumbs",description:"The ARIA label for the breadcrumbs"}),children:(0,d.jsxs)("ul",{className:"breadcrumbs",itemScope:!0,itemType:"https://schema.org/BreadcrumbList",children:[t&&(0,d.jsx)(h,{}),e.map(((t,n)=>{const s=n===e.length-1,r="category"===t.type&&t.linkUnlisted?void 0:t.href;return(0,d.jsx)(x,{active:s,index:n,addMicrodata:!!r,children:(0,d.jsx)(p,{href:r,isLast:s,children:t.label})},n)}))]})}):null}},31745:(e,t,n)=>{n.r(t),n.d(t,{default:()=>y});n(67294);var s=n(96984),r=n(68879),i=n(23466),a=n(36905),l=n(38208),o=n(59676),c=n(41117),d=n(55361),u=n(42704);const m={cardContainer:"cardContainer_fWXF",cardTitle:"cardTitle_rnsV",cardDescription:"cardDescription_PWke"};var h=n(85893);function b(e){let{href:t,children:n}=e;return(0,h.jsx)(l.Z,{href:t,className:(0,a.Z)("card padding--lg",m.cardContainer),children:n})}function p(e){let{href:t,icon:n,title:s,description:r}=e;return(0,h.jsxs)(b,{href:t,children:[(0,h.jsxs)(u.Z,{as:"h2",className:(0,a.Z)("text--truncate",m.cardTitle),title:s,children:[n," ",s]}),r&&(0,h.jsx)("p",{className:(0,a.Z)("text--truncate",m.cardDescription),title:r,children:r})]})}function x(e){let{item:t}=e;const n=(0,r.LM)(t),s=function(){const{selectMessage:e}=(0,o.c)();return t=>e(t,(0,d.I)({message:"1 item|{count} items",id:"theme.docs.DocCard.categoryDescription.plurals",description:"The default description for a category card in the generated index about how many items this category includes"},{count:t}))}();return n?(0,h.jsx)(p,{href:n,icon:"\ud83d\uddc3\ufe0f",title:t.label,description:t.description??s(t.items.length)}):null}function g(e){let{item:t}=e;const n=(0,c.Z)(t.href)?"\ud83d\udcc4\ufe0f":"\ud83d\udd17",s=(0,r.xz)(t.docId??void 0);return(0,h.jsx)(p,{href:t.href,icon:n,title:t.label,description:t.description??s?.description})}function v(e){let{item:t}=e;switch(t.type){case"link":return(0,h.jsx)(g,{item:t});case"category":return(0,h.jsx)(x,{item:t});default:throw new Error(`unknown item type ${JSON.stringify(t)}`)}}function f(e){let{className:t}=e;const n=(0,r.jA)();return(0,h.jsx)(j,{items:n.items,className:t})}function j(e){const{items:t,className:n}=e;if(!t)return(0,h.jsx)(f,{...e});const s=(0,r.MN)(t);return(0,h.jsx)("section",{className:(0,a.Z)("row",n),children:s.map(((e,t)=>(0,h.jsx)("article",{className:"col col--6 margin-bottom--lg",children:(0,h.jsx)(v,{item:e})},t)))})}var N=n(78695),Z=n(1188),_=n(60425),L=n(36300);const k={generatedIndexPage:"generatedIndexPage_vN6x",list:"list_eTzJ",title:"title_kItE"};function T(e){let{categoryGeneratedIndex:t}=e;return(0,h.jsx)(s.d,{title:t.title,description:t.description,keywords:t.keywords,image:(0,i.ZP)(t.image)})}function I(e){let{categoryGeneratedIndex:t}=e;const n=(0,r.jA)();return(0,h.jsxs)("div",{className:k.generatedIndexPage,children:[(0,h.jsx)(Z.Z,{}),(0,h.jsx)(L.Z,{}),(0,h.jsx)(_.Z,{}),(0,h.jsxs)("header",{children:[(0,h.jsx)(u.Z,{as:"h1",className:k.title,children:t.title}),t.description&&(0,h.jsx)("p",{children:t.description})]}),(0,h.jsx)("article",{className:"margin-top--lg",children:(0,h.jsx)(j,{items:n.items,className:k.list})}),(0,h.jsx)("footer",{className:"margin-top--lg",children:(0,h.jsx)(N.Z,{previous:t.navigation.previous,next:t.navigation.next})})]})}function y(e){return(0,h.jsxs)(h.Fragment,{children:[(0,h.jsx)(T,{...e}),(0,h.jsx)(I,{...e})]})}},78695:(e,t,n)=>{n.d(t,{Z:()=>a});n(67294);var s=n(55361),r=n(60968),i=n(85893);function a(e){const{previous:t,next:n}=e;return(0,i.jsxs)("nav",{className:"pagination-nav docusaurus-mt-lg","aria-label":(0,s.I)({id:"theme.docs.paginator.navAriaLabel",message:"Docs pages",description:"The ARIA label for the docs pagination"}),children:[t&&(0,i.jsx)(r.Z,{...t,subLabel:(0,i.jsx)(s.Z,{id:"theme.docs.paginator.previous",description:"The label used to navigate to the previous doc",children:"Previous"})}),n&&(0,i.jsx)(r.Z,{...n,subLabel:(0,i.jsx)(s.Z,{id:"theme.docs.paginator.next",description:"The label used to navigate to the next doc",children:"Next"}),isNext:!0})]})}},60425:(e,t,n)=>{n.d(t,{Z:()=>o});n(67294);var s=n(36905),r=n(55361),i=n(50563),a=n(72950),l=n(85893);function o(e){let{className:t}=e;const n=(0,a.E)();return n.badge?(0,l.jsx)("span",{className:(0,s.Z)(t,i.k.docs.docVersionBadge,"badge badge--secondary"),children:(0,l.jsx)(r.Z,{id:"theme.docs.versionBadge.label",values:{versionLabel:n.label},children:"Version: {versionLabel}"})}):null}},1188:(e,t,n)=>{n.d(t,{Z:()=>x});n(67294);var s=n(36905),r=n(75276),i=n(38208),a=n(55361),l=n(48878),o=n(50563),c=n(5055),d=n(72950),u=n(85893);const m={unreleased:function(e){let{siteTitle:t,versionMetadata:n}=e;return(0,u.jsx)(a.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:(0,u.jsx)("b",{children:n.label})},children:"This is unreleased documentation for {siteTitle} {versionLabel} version."})},unmaintained:function(e){let{siteTitle:t,versionMetadata:n}=e;return(0,u.jsx)(a.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:(0,u.jsx)("b",{children:n.label})},children:"This is documentation for {siteTitle} {versionLabel}, which is no longer actively maintained."})}};function h(e){const t=m[e.versionMetadata.banner];return(0,u.jsx)(t,{...e})}function b(e){let{versionLabel:t,to:n,onClick:s}=e;return(0,u.jsx)(a.Z,{id:"theme.docs.versions.latestVersionSuggestionLabel",description:"The label used to tell the user to check the latest version",values:{versionLabel:t,latestVersionLink:(0,u.jsx)("b",{children:(0,u.jsx)(i.Z,{to:n,onClick:s,children:(0,u.jsx)(a.Z,{id:"theme.docs.versions.latestVersionLinkLabel",description:"The label used for the latest version suggestion link label",children:"latest version"})})})},children:"For up-to-date documentation, see the {latestVersionLink} ({versionLabel})."})}function p(e){let{className:t,versionMetadata:n}=e;const{siteConfig:{title:i}}=(0,r.Z)(),{pluginId:a}=(0,l.gA)({failfast:!0}),{savePreferredVersionName:d}=(0,c.J)(a),{latestDocSuggestion:m,latestVersionSuggestion:p}=(0,l.Jo)(a),x=m??(g=p).docs.find((e=>e.id===g.mainDocId));var g;return(0,u.jsxs)("div",{className:(0,s.Z)(t,o.k.docs.docVersionBanner,"alert alert--warning margin-bottom--md"),role:"alert",children:[(0,u.jsx)("div",{children:(0,u.jsx)(h,{siteTitle:i,versionMetadata:n})}),(0,u.jsx)("div",{className:"margin-top--md",children:(0,u.jsx)(b,{versionLabel:p.label,to:x.path,onClick:()=>d(p.name)})})]})}function x(e){let{className:t}=e;const n=(0,d.E)();return n.banner?(0,u.jsx)(p,{className:t,versionMetadata:n}):null}},60968:(e,t,n)=>{n.d(t,{Z:()=>a});n(67294);var s=n(36905),r=n(38208),i=n(85893);function a(e){const{permalink:t,title:n,subLabel:a,isNext:l}=e;return(0,i.jsxs)(r.Z,{className:(0,s.Z)("pagination-nav__link",l?"pagination-nav__link--next":"pagination-nav__link--prev"),to:t,children:[a&&(0,i.jsx)("div",{className:"pagination-nav__sublabel",children:a}),(0,i.jsx)("div",{className:"pagination-nav__label",children:n})]})}},59676:(e,t,n)=>{n.d(t,{c:()=>c});var s=n(67294),r=n(75276);const i=["zero","one","two","few","many","other"];function a(e){return i.filter((t=>e.includes(t)))}const l={locale:"en",pluralForms:a(["one","other"]),select:e=>1===e?"one":"other"};function o(){const{i18n:{currentLocale:e}}=(0,r.Z)();return(0,s.useMemo)((()=>{try{return function(e){const t=new Intl.PluralRules(e);return{locale:e,pluralForms:a(t.resolvedOptions().pluralCategories),select:e=>t.select(e)}}(e)}catch(t){return console.error(`Failed to use Intl.PluralRules for locale "${e}".\nDocusaurus will fallback to the default (English) implementation.\nError: ${t.message}\n`),l}}),[e])}function c(){const e=o();return{selectMessage:(t,n)=>function(e,t,n){const s=e.split("|");if(1===s.length)return s[0];s.length>n.pluralForms.length&&console.error(`For locale=${n.locale}, a maximum of ${n.pluralForms.length} plural forms are expected (${n.pluralForms.join(",")}), but the message contains ${s.length}: ${e}`);const r=n.select(t),i=n.pluralForms.indexOf(r);return s[Math.min(i,s.length-1)]}(n,t,e)}}}}]); \ No newline at end of file diff --git a/assets/js/156eae2c.2c19d67a.js b/assets/js/156eae2c.2c19d67a.js deleted file mode 100644 index 54f96b2a8..000000000 --- a/assets/js/156eae2c.2c19d67a.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[8692],{92354:e=>{e.exports=JSON.parse('{"categoryGeneratedIndex":{"title":"Networking","slug":"/category/networking","permalink":"/docs/category/networking","sidebar":"userSidebar","navigation":{"previous":{"title":"IBus","permalink":"/docs/user/software/localization/ibus"},"next":{"title":"Samba File Sharing","permalink":"/docs/user/software/networking/samba"}}}}')}}]); \ No newline at end of file diff --git a/assets/js/156eae2c.cb0cfbcc.js b/assets/js/156eae2c.cb0cfbcc.js new file mode 100644 index 000000000..90a914047 --- /dev/null +++ b/assets/js/156eae2c.cb0cfbcc.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([["9223"],{88713:function(e){e.exports=JSON.parse('{"categoryGeneratedIndex":{"title":"Networking","slug":"/category/networking","permalink":"/docs/category/networking","sidebar":"userSidebar","navigation":{"previous":{"title":"IBus","permalink":"/docs/user/software/localization/ibus"},"next":{"title":"Samba File Sharing","permalink":"/docs/user/software/networking/samba"}}}}')}}]); \ No newline at end of file diff --git a/assets/js/17896441.0ad84ab7.js b/assets/js/17896441.0ad84ab7.js new file mode 100644 index 000000000..9154a2fb9 --- /dev/null +++ b/assets/js/17896441.0ad84ab7.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([["7048"],{43672:function(e,t,n){n.d(t,{Z:function(){return c}});var i=n(85893);n(67294);var s=n(74904),l=n(72372),r=n(50490),a=n(77793);function o(e){let{className:t}=e;return(0,i.jsx)(a.Z,{type:"caution",title:(0,i.jsx)(l.cI,{}),className:(0,s.Z)(t,r.k.common.unlistedBanner),children:(0,i.jsx)(l.eU,{})})}function c(e){return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(l.T$,{}),(0,i.jsx)(o,{...e})]})}},38154:function(e,t,n){n.d(t,{Z:()=>d});var i=n("85893");n("67294");var s=n("74904"),l=n("72372"),r=n("50490"),a=n("77793");function o(e){let{className:t}=e;return(0,i.jsx)(a.Z,{type:"caution",title:(0,i.jsx)(l.ht,{}),className:(0,s.Z)(t,r.k.common.draftBanner),children:(0,i.jsx)(l.xo,{})})}var c=n("43672");function d(e){let{metadata:t}=e,{unlisted:n,frontMatter:s}=t;return(0,i.jsxs)(i.Fragment,{children:[(n||s.unlisted)&&(0,i.jsx)(c.Z,{}),s.draft&&(0,i.jsx)(o,{})]})}},19572:function(e,t,n){n.d(t,{Z:()=>f});var i=n("85893");n("67294");var s=n("74904"),l=n("50490"),r=n("71364"),a=n("16896"),o=n("27544"),c=n("1822"),d=n("7571");function u(e){return(0,i.jsx)("svg",{viewBox:"0 0 24 24",...e,children:(0,i.jsx)("path",{d:"M10 19v-5h4v5c0 .55.45 1 1 1h3c.55 0 1-.45 1-1v-7h1.7c.46 0 .68-.57.33-.87L12.67 3.6c-.38-.34-.96-.34-1.34 0l-8.36 7.53c-.34.3-.13.87.33.87H5v7c0 .55.45 1 1 1h3c.55 0 1-.45 1-1z",fill:"currentColor"})})}let m="breadcrumbHomeIcon_YNFT";function h(){let e=(0,d.ZP)("/");return(0,i.jsx)("li",{className:"breadcrumbs__item",children:(0,i.jsx)(o.Z,{"aria-label":(0,c.I)({id:"theme.docs.breadcrumbs.home",message:"Home page",description:"The ARIA label for the home page in the breadcrumbs"}),className:"breadcrumbs__link",href:e,children:(0,i.jsx)(u,{className:m})})})}let b="breadcrumbsContainer_Z_bl";function v(e){let{children:t,href:n,isLast:s}=e,l="breadcrumbs__link";return s?(0,i.jsx)("span",{className:l,itemProp:"name",children:t}):n?(0,i.jsx)(o.Z,{className:l,href:n,itemProp:"item",children:(0,i.jsx)("span",{itemProp:"name",children:t})}):(0,i.jsx)("span",{className:l,children:t})}function x(e){let{children:t,active:n,index:l,addMicrodata:r}=e;return(0,i.jsxs)("li",{...r&&{itemScope:!0,itemProp:"itemListElement",itemType:"https://schema.org/ListItem"},className:(0,s.Z)("breadcrumbs__item",{"breadcrumbs__item--active":n}),children:[t,(0,i.jsx)("meta",{itemProp:"position",content:String(l+1)})]})}function f(){let e=(0,r.s1)(),t=(0,a.Ns)();return e?(0,i.jsx)("nav",{className:(0,s.Z)(l.k.docs.docBreadcrumbs,b),"aria-label":(0,c.I)({id:"theme.docs.breadcrumbs.navAriaLabel",message:"Breadcrumbs",description:"The ARIA label for the breadcrumbs"}),children:(0,i.jsxs)("ul",{className:"breadcrumbs",itemScope:!0,itemType:"https://schema.org/BreadcrumbList",children:[t&&(0,i.jsx)(h,{}),e.map((t,n)=>{let s=n===e.length-1,l="category"===t.type&&t.linkUnlisted?void 0:t.href;return(0,i.jsx)(x,{active:s,index:n,addMicrodata:!!l,children:(0,i.jsx)(v,{href:l,isLast:s,children:t.label})},n)})]})}):null}},39436:function(e,t,n){n.r(t),n.d(t,{default:()=>R});var i=n("85893"),s=n("67294"),l=n("81921"),r=n("57100");let a=s.createContext(null);function o(e){var t;let{children:n,content:l}=e;let r=(t=l,(0,s.useMemo)(()=>({metadata:t.metadata,frontMatter:t.frontMatter,assets:t.assets,contentTitle:t.contentTitle,toc:t.toc}),[t]));return(0,i.jsx)(a.Provider,{value:r,children:n})}function c(){let e=(0,s.useContext)(a);if(null===e)throw new r.i6("DocProvider");return e}function d(){let{metadata:e,frontMatter:t,assets:n}=c();return(0,i.jsx)(l.d,{title:e.title,description:e.description,keywords:t.keywords,image:n.image??t.image})}var u=n("74904"),m=n("72649"),h=n("16583");function b(){let{metadata:e}=c();return(0,i.jsx)(h.Z,{previous:e.previous,next:e.next})}var v=n("70271"),x=n("6682"),f=n("50490"),p=n("50905"),j=n("57216");function g(){let{metadata:e}=c(),{editUrl:t,lastUpdatedAt:n,lastUpdatedBy:s,tags:l}=e,r=l.length>0,a=!!(t||n||s);return r||a?(0,i.jsxs)("footer",{className:(0,u.Z)(f.k.docs.docFooter,"docusaurus-mt-lg"),children:[r&&(0,i.jsx)("div",{className:(0,u.Z)("row margin-top--sm",f.k.docs.docFooterTagsRow),children:(0,i.jsx)("div",{className:"col",children:(0,i.jsx)(p.Z,{tags:l})})}),a&&(0,i.jsx)(j.Z,{className:(0,u.Z)("margin-top--sm",f.k.docs.docFooterEditMetaRow),editUrl:t,lastUpdatedAt:n,lastUpdatedBy:s})]}):null}var Z=n("6560"),_=n("51515"),C=n("1822");let N={tocCollapsibleButton:"tocCollapsibleButton_TO0P",tocCollapsibleButtonExpanded:"tocCollapsibleButtonExpanded_MG3E"};function L(e){let{collapsed:t,...n}=e;return(0,i.jsx)("button",{type:"button",...n,className:(0,u.Z)("clean-btn",N.tocCollapsibleButton,!t&&N.tocCollapsibleButtonExpanded,n.className),children:(0,i.jsx)(C.Z,{id:"theme.TOCCollapsible.toggleButtonLabel",description:"The label used by the button on the collapsible TOC component",children:"On this page"})})}let k={tocCollapsible:"tocCollapsible_ETCw",tocCollapsibleContent:"tocCollapsibleContent_vkbj",tocCollapsibleExpanded:"tocCollapsibleExpanded_sAul"};function T(e){let{toc:t,className:n,minHeadingLevel:s,maxHeadingLevel:l}=e,{collapsed:r,toggleCollapsed:a}=(0,Z.u)({initialState:!0});return(0,i.jsxs)("div",{className:(0,u.Z)(k.tocCollapsible,!r&&k.tocCollapsibleExpanded,n),children:[(0,i.jsx)(L,{collapsed:r,onClick:a}),(0,i.jsx)(Z.z,{lazy:!0,className:k.tocCollapsibleContent,collapsed:r,children:(0,i.jsx)(_.Z,{toc:t,minHeadingLevel:s,maxHeadingLevel:l})})]})}let y="tocMobile_ITEo";function w(){let{toc:e,frontMatter:t}=c();return(0,i.jsx)(T,{toc:e,minHeadingLevel:t.toc_min_heading_level,maxHeadingLevel:t.toc_max_heading_level,className:(0,u.Z)(f.k.docs.docTocMobile,y)})}var B=n("28669");function E(){let{toc:e,frontMatter:t}=c();return(0,i.jsx)(B.Z,{toc:e,minHeadingLevel:t.toc_min_heading_level,maxHeadingLevel:t.toc_max_heading_level,className:f.k.docs.docTocDesktop})}var I=n("52068"),M=n("27913");function A(e){let{children:t}=e,n=function(){let{metadata:e,frontMatter:t,contentTitle:n}=c();return!t.hide_title&&void 0===n?e.title:null}();return(0,i.jsxs)("div",{className:(0,u.Z)(f.k.docs.docMarkdown,"markdown"),children:[n&&(0,i.jsx)("header",{children:(0,i.jsx)(I.Z,{as:"h1",children:n})}),(0,i.jsx)(M.Z,{children:t})]})}var H=n("19572"),V=n("38154");let O={docItemContainer:"docItemContainer_Djhp",docItemCol:"docItemCol_VOVn"};function P(e){let{children:t}=e,n=function(){let{frontMatter:e,toc:t}=c(),n=(0,m.i)(),s=e.hide_table_of_contents,l=!s&&t.length>0,r=l?(0,i.jsx)(w,{}):void 0;return{hidden:s,mobile:r,desktop:l&&("desktop"===n||"ssr"===n)?(0,i.jsx)(E,{}):void 0}}(),{metadata:s}=c();return(0,i.jsxs)("div",{className:"row",children:[(0,i.jsxs)("div",{className:(0,u.Z)("col",!n.hidden&&O.docItemCol),children:[(0,i.jsx)(V.Z,{metadata:s}),(0,i.jsx)(v.Z,{}),(0,i.jsxs)("div",{className:O.docItemContainer,children:[(0,i.jsxs)("article",{children:[(0,i.jsx)(H.Z,{}),(0,i.jsx)(x.Z,{}),n.mobile,(0,i.jsx)(A,{children:t}),(0,i.jsx)(g,{})]}),(0,i.jsx)(b,{})]})]}),n.desktop&&(0,i.jsx)("div",{className:"col col--3",children:n.desktop})]})}function R(e){let t=`docs-doc-id-${e.content.metadata.id}`,n=e.content;return(0,i.jsx)(o,{content:e.content,children:(0,i.jsxs)(l.FG,{className:t,children:[(0,i.jsx)(d,{}),(0,i.jsx)(P,{children:(0,i.jsx)(n,{})})]})})}},16583:function(e,t,n){n.d(t,{Z:function(){return r}});var i=n(85893);n(67294);var s=n(1822),l=n(15779);function r(e){let{previous:t,next:n}=e;return(0,i.jsxs)("nav",{className:"pagination-nav docusaurus-mt-lg","aria-label":(0,s.I)({id:"theme.docs.paginator.navAriaLabel",message:"Docs pages",description:"The ARIA label for the docs pagination"}),children:[t&&(0,i.jsx)(l.Z,{...t,subLabel:(0,i.jsx)(s.Z,{id:"theme.docs.paginator.previous",description:"The label used to navigate to the previous doc",children:"Previous"})}),n&&(0,i.jsx)(l.Z,{...n,subLabel:(0,i.jsx)(s.Z,{id:"theme.docs.paginator.next",description:"The label used to navigate to the next doc",children:"Next"}),isNext:!0})]})}},6682:function(e,t,n){n.d(t,{Z:function(){return o}});var i=n(85893);n(67294);var s=n(74904),l=n(1822),r=n(50490),a=n(85302);function o(e){let{className:t}=e,n=(0,a.E)();return n.badge?(0,i.jsx)("span",{className:(0,s.Z)(t,r.k.docs.docVersionBadge,"badge badge--secondary"),children:(0,i.jsx)(l.Z,{id:"theme.docs.versionBadge.label",values:{versionLabel:n.label},children:"Version: {versionLabel}"})}):null}},70271:function(e,t,n){n.d(t,{Z:function(){return x}});var i=n(85893);n(67294);var s=n(74904),l=n(93934),r=n(27544),a=n(1822),o=n(1652),c=n(50490),d=n(13908),u=n(85302);let m={unreleased:function(e){let{siteTitle:t,versionMetadata:n}=e;return(0,i.jsx)(a.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:(0,i.jsx)("b",{children:n.label})},children:"This is unreleased documentation for {siteTitle} {versionLabel} version."})},unmaintained:function(e){let{siteTitle:t,versionMetadata:n}=e;return(0,i.jsx)(a.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:(0,i.jsx)("b",{children:n.label})},children:"This is documentation for {siteTitle} {versionLabel}, which is no longer actively maintained."})}};function h(e){let t=m[e.versionMetadata.banner];return(0,i.jsx)(t,{...e})}function b(e){let{versionLabel:t,to:n,onClick:s}=e;return(0,i.jsx)(a.Z,{id:"theme.docs.versions.latestVersionSuggestionLabel",description:"The label used to tell the user to check the latest version",values:{versionLabel:t,latestVersionLink:(0,i.jsx)("b",{children:(0,i.jsx)(r.Z,{to:n,onClick:s,children:(0,i.jsx)(a.Z,{id:"theme.docs.versions.latestVersionLinkLabel",description:"The label used for the latest version suggestion link label",children:"latest version"})})})},children:"For up-to-date documentation, see the {latestVersionLink} ({versionLabel})."})}function v(e){let t,{className:n,versionMetadata:r}=e,{siteConfig:{title:a}}=(0,l.Z)(),{pluginId:u}=(0,o.gA)({failfast:!0}),{savePreferredVersionName:m}=(0,d.J)(u),{latestDocSuggestion:v,latestVersionSuggestion:x}=(0,o.Jo)(u);let f=v??(t=x).docs.find(e=>e.id===t.mainDocId);return(0,i.jsxs)("div",{className:(0,s.Z)(n,c.k.docs.docVersionBanner,"alert alert--warning margin-bottom--md"),role:"alert",children:[(0,i.jsx)("div",{children:(0,i.jsx)(h,{siteTitle:a,versionMetadata:r})}),(0,i.jsx)("div",{className:"margin-top--md",children:(0,i.jsx)(b,{versionLabel:x.label,to:f.path,onClick:()=>m(x.name)})})]})}function x(e){let{className:t}=e,n=(0,u.E)();return n.banner?(0,i.jsx)(v,{className:t,versionMetadata:n}):null}},28669:function(e,t,n){n.d(t,{Z:()=>a});var i=n("85893");n("67294");var s=n("74904"),l=n("51515");let r="tableOfContents_bqdL";function a(e){let{className:t,...n}=e;return(0,i.jsx)("div",{className:(0,s.Z)(r,"thin-scrollbar",t),children:(0,i.jsx)(l.Z,{...n,linkClassName:"table-of-contents__link toc-highlight",linkActiveClassName:"table-of-contents__link--active"})})}},51515:function(e,t,n){n.d(t,{Z:()=>c});var i=n("85893"),s=n("67294"),l=n("45237");function r(e){let t=e.getBoundingClientRect();return t.top===t.bottom?r(e.parentNode):t}var a=n("27544");let o=s.memo(function e(t){let{toc:n,className:s,linkClassName:l,isChild:r}=t;return n.length?(0,i.jsx)("ul",{className:r?void 0:s,children:n.map(t=>(0,i.jsxs)("li",{children:[(0,i.jsx)(a.Z,{to:`#${t.id}`,className:l??void 0,dangerouslySetInnerHTML:{__html:t.value}}),(0,i.jsx)(e,{isChild:!0,toc:t.children,className:s,linkClassName:l})]},t.id))}):null});function c(e){let{toc:t,className:n="table-of-contents table-of-contents__left-border",linkClassName:a="table-of-contents__link",linkActiveClassName:c,minHeadingLevel:d,maxHeadingLevel:u,...m}=e,h=(0,l.L)(),b=d??h.tableOfContents.minHeadingLevel,v=u??h.tableOfContents.maxHeadingLevel,x=function(e){let{toc:t,minHeadingLevel:n,maxHeadingLevel:i}=e;return(0,s.useMemo)(()=>(function e(t){let{toc:n,minHeadingLevel:i,maxHeadingLevel:s}=t;return n.flatMap(t=>{var n;let l=e({toc:t.children,minHeadingLevel:i,maxHeadingLevel:s});return(n=t).level>=i&&n.level<=s?[{...t,children:l}]:l})})({toc:function(e){let t=e.map(e=>({...e,parentIndex:-1,children:[]})),n=Array(7).fill(-1);t.forEach((e,t)=>{let i=n.slice(2,e.level);e.parentIndex=Math.max(...i),n[e.level]=t});let i=[];return t.forEach(e=>{let{parentIndex:n,...s}=e;n>=0?t[n].children.push(s):i.push(s)}),i}(t),minHeadingLevel:n,maxHeadingLevel:i}),[t,n,i])}({toc:t,minHeadingLevel:b,maxHeadingLevel:v});return!function(e){let t=(0,s.useRef)(void 0),n=function(){let e=(0,s.useRef)(0),{navbar:{hideOnScroll:t}}=(0,l.L)();return(0,s.useEffect)(()=>{e.current=t?0:document.querySelector(".navbar").clientHeight},[t]),e}();(0,s.useEffect)(()=>{if(!e)return()=>{};let{linkClassName:i,linkActiveClassName:s,minHeadingLevel:l,maxHeadingLevel:a}=e;function o(){var e;let o=(e=i,Array.from(document.getElementsByClassName(e))),c=function(e,t){let{anchorTopOffset:n}=t,i=e.find(e=>r(e).top>=n);if(i){var s;return(s=r(i)).top>0&&s.bottom{var t;return c&&c.id===decodeURIComponent((t=e).href.substring(t.href.indexOf("#")+1))});o.forEach(e=>{var n;n=e,e===d?(t.current&&t.current!==n&&t.current.classList.remove(s),n.classList.add(s),t.current=n):n.classList.remove(s)})}return document.addEventListener("scroll",o),document.addEventListener("resize",o),o(),()=>{document.removeEventListener("scroll",o),document.removeEventListener("resize",o)}},[e,n])}((0,s.useMemo)(()=>{if(a&&c)return{linkClassName:a,linkActiveClassName:c,minHeadingLevel:b,maxHeadingLevel:v}},[a,c,b,v])),(0,i.jsx)(o,{toc:x,className:n,linkClassName:a,...m})}},72372:function(e,t,n){n.d(t,{T$:function(){return o},cI:function(){return r},eU:function(){return a},ht:function(){return c},xo:function(){return d}});var i=n(85893);n(67294);var s=n(1822),l=n(50777);function r(){return(0,i.jsx)(s.Z,{id:"theme.contentVisibility.unlistedBanner.title",description:"The unlisted content banner title",children:"Unlisted page"})}function a(){return(0,i.jsx)(s.Z,{id:"theme.contentVisibility.unlistedBanner.message",description:"The unlisted content banner message",children:"This page is unlisted. Search engines will not index it, and only users having a direct link can access it."})}function o(){return(0,i.jsx)(l.Z,{children:(0,i.jsx)("meta",{name:"robots",content:"noindex, nofollow"})})}function c(){return(0,i.jsx)(s.Z,{id:"theme.contentVisibility.draftBanner.title",description:"The draft content banner title",children:"Draft page"})}function d(){return(0,i.jsx)(s.Z,{id:"theme.contentVisibility.draftBanner.message",description:"The draft content banner message",children:"This page is a draft. It will only be visible in dev and be excluded from the production build."})}}}]); \ No newline at end of file diff --git a/assets/js/17896441.33637281.js b/assets/js/17896441.33637281.js deleted file mode 100644 index 739750b18..000000000 --- a/assets/js/17896441.33637281.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[7918],{40591:(e,t,n)=>{n.d(t,{Z:()=>c});n(67294);var s=n(36905),a=n(64827),i=n(50563),l=n(20906),r=n(85893);function o(e){let{className:t}=e;return(0,r.jsx)(l.Z,{type:"caution",title:(0,r.jsx)(a.cI,{}),className:(0,s.Z)(t,i.k.common.unlistedBanner),children:(0,r.jsx)(a.eU,{})})}function c(e){return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(a.T$,{}),(0,r.jsx)(o,{...e})]})}},46086:(e,t,n)=>{n.d(t,{Z:()=>d});n(67294);var s=n(36905),a=n(64827),i=n(50563),l=n(20906),r=n(85893);function o(e){let{className:t}=e;return(0,r.jsx)(l.Z,{type:"caution",title:(0,r.jsx)(a.ht,{}),className:(0,s.Z)(t,i.k.common.draftBanner),children:(0,r.jsx)(a.xo,{})})}var c=n(40591);function d(e){let{metadata:t}=e;const{unlisted:n,frontMatter:s}=t;return(0,r.jsxs)(r.Fragment,{children:[(n||s.unlisted)&&(0,r.jsx)(c.Z,{}),s.draft&&(0,r.jsx)(o,{})]})}},36300:(e,t,n)=>{n.d(t,{Z:()=>b});n(67294);var s=n(36905),a=n(50563),i=n(68879),l=n(51997),r=n(38208),o=n(55361),c=n(23466),d=n(85893);function u(e){return(0,d.jsx)("svg",{viewBox:"0 0 24 24",...e,children:(0,d.jsx)("path",{d:"M10 19v-5h4v5c0 .55.45 1 1 1h3c.55 0 1-.45 1-1v-7h1.7c.46 0 .68-.57.33-.87L12.67 3.6c-.38-.34-.96-.34-1.34 0l-8.36 7.53c-.34.3-.13.87.33.87H5v7c0 .55.45 1 1 1h3c.55 0 1-.45 1-1z",fill:"currentColor"})})}const m={breadcrumbHomeIcon:"breadcrumbHomeIcon_YNFT"};function h(){const e=(0,c.ZP)("/");return(0,d.jsx)("li",{className:"breadcrumbs__item",children:(0,d.jsx)(r.Z,{"aria-label":(0,o.I)({id:"theme.docs.breadcrumbs.home",message:"Home page",description:"The ARIA label for the home page in the breadcrumbs"}),className:"breadcrumbs__link",href:e,children:(0,d.jsx)(u,{className:m.breadcrumbHomeIcon})})})}const x={breadcrumbsContainer:"breadcrumbsContainer_Z_bl"};function v(e){let{children:t,href:n,isLast:s}=e;const a="breadcrumbs__link";return s?(0,d.jsx)("span",{className:a,itemProp:"name",children:t}):n?(0,d.jsx)(r.Z,{className:a,href:n,itemProp:"item",children:(0,d.jsx)("span",{itemProp:"name",children:t})}):(0,d.jsx)("span",{className:a,children:t})}function p(e){let{children:t,active:n,index:a,addMicrodata:i}=e;return(0,d.jsxs)("li",{...i&&{itemScope:!0,itemProp:"itemListElement",itemType:"https://schema.org/ListItem"},className:(0,s.Z)("breadcrumbs__item",{"breadcrumbs__item--active":n}),children:[t,(0,d.jsx)("meta",{itemProp:"position",content:String(a+1)})]})}function b(){const e=(0,i.s1)(),t=(0,l.Ns)();return e?(0,d.jsx)("nav",{className:(0,s.Z)(a.k.docs.docBreadcrumbs,x.breadcrumbsContainer),"aria-label":(0,o.I)({id:"theme.docs.breadcrumbs.navAriaLabel",message:"Breadcrumbs",description:"The ARIA label for the breadcrumbs"}),children:(0,d.jsxs)("ul",{className:"breadcrumbs",itemScope:!0,itemType:"https://schema.org/BreadcrumbList",children:[t&&(0,d.jsx)(h,{}),e.map(((t,n)=>{const s=n===e.length-1,a="category"===t.type&&t.linkUnlisted?void 0:t.href;return(0,d.jsx)(p,{active:s,index:n,addMicrodata:!!a,children:(0,d.jsx)(v,{href:a,isLast:s,children:t.label})},n)}))]})}):null}},11095:(e,t,n)=>{n.r(t),n.d(t,{default:()=>P});var s=n(67294),a=n(96984),i=n(20585),l=n(85893);const r=s.createContext(null);function o(e){let{children:t,content:n}=e;const a=function(e){return(0,s.useMemo)((()=>({metadata:e.metadata,frontMatter:e.frontMatter,assets:e.assets,contentTitle:e.contentTitle,toc:e.toc})),[e])}(n);return(0,l.jsx)(r.Provider,{value:a,children:t})}function c(){const e=(0,s.useContext)(r);if(null===e)throw new i.i6("DocProvider");return e}function d(){const{metadata:e,frontMatter:t,assets:n}=c();return(0,l.jsx)(a.d,{title:e.title,description:e.description,keywords:t.keywords,image:n.image??t.image})}var u=n(36905),m=n(62550),h=n(78695);function x(){const{metadata:e}=c();return(0,l.jsx)(h.Z,{previous:e.previous,next:e.next})}var v=n(1188),p=n(60425),b=n(50563),f=n(32223),g=n(62978);function j(){const{metadata:e}=c(),{editUrl:t,lastUpdatedAt:n,lastUpdatedBy:s,tags:a}=e,i=a.length>0,r=!!(t||n||s);return i||r?(0,l.jsxs)("footer",{className:(0,u.Z)(b.k.docs.docFooter,"docusaurus-mt-lg"),children:[i&&(0,l.jsx)("div",{className:(0,u.Z)("row margin-top--sm",b.k.docs.docFooterTagsRow),children:(0,l.jsx)("div",{className:"col",children:(0,l.jsx)(f.Z,{tags:a})})}),r&&(0,l.jsx)(g.Z,{className:(0,u.Z)("margin-top--sm",b.k.docs.docFooterEditMetaRow),editUrl:t,lastUpdatedAt:n,lastUpdatedBy:s})]}):null}var Z=n(93841),N=n(42536),C=n(55361);const L={tocCollapsibleButton:"tocCollapsibleButton_TO0P",tocCollapsibleButtonExpanded:"tocCollapsibleButtonExpanded_MG3E"};function _(e){let{collapsed:t,...n}=e;return(0,l.jsx)("button",{type:"button",...n,className:(0,u.Z)("clean-btn",L.tocCollapsibleButton,!t&&L.tocCollapsibleButtonExpanded,n.className),children:(0,l.jsx)(C.Z,{id:"theme.TOCCollapsible.toggleButtonLabel",description:"The label used by the button on the collapsible TOC component",children:"On this page"})})}const k={tocCollapsible:"tocCollapsible_ETCw",tocCollapsibleContent:"tocCollapsibleContent_vkbj",tocCollapsibleExpanded:"tocCollapsibleExpanded_sAul"};function T(e){let{toc:t,className:n,minHeadingLevel:s,maxHeadingLevel:a}=e;const{collapsed:i,toggleCollapsed:r}=(0,Z.u)({initialState:!0});return(0,l.jsxs)("div",{className:(0,u.Z)(k.tocCollapsible,!i&&k.tocCollapsibleExpanded,n),children:[(0,l.jsx)(_,{collapsed:i,onClick:r}),(0,l.jsx)(Z.z,{lazy:!0,className:k.tocCollapsibleContent,collapsed:i,children:(0,l.jsx)(N.Z,{toc:t,minHeadingLevel:s,maxHeadingLevel:a})})]})}const y={tocMobile:"tocMobile_ITEo"};function H(){const{toc:e,frontMatter:t}=c();return(0,l.jsx)(T,{toc:e,minHeadingLevel:t.toc_min_heading_level,maxHeadingLevel:t.toc_max_heading_level,className:(0,u.Z)(b.k.docs.docTocMobile,y.tocMobile)})}var w=n(15556);function U(){const{toc:e,frontMatter:t}=c();return(0,l.jsx)(w.Z,{toc:e,minHeadingLevel:t.toc_min_heading_level,maxHeadingLevel:t.toc_max_heading_level,className:b.k.docs.docTocDesktop})}var B=n(42704),M=n(38507);function A(e){let{children:t}=e;const n=function(){const{metadata:e,frontMatter:t,contentTitle:n}=c();return t.hide_title||void 0!==n?null:e.title}();return(0,l.jsxs)("div",{className:(0,u.Z)(b.k.docs.docMarkdown,"markdown"),children:[n&&(0,l.jsx)("header",{children:(0,l.jsx)(B.Z,{as:"h1",children:n})}),(0,l.jsx)(M.Z,{children:t})]})}var E=n(36300),I=n(46086);const S={docItemContainer:"docItemContainer_Djhp",docItemCol:"docItemCol_VOVn"};function V(e){let{children:t}=e;const n=function(){const{frontMatter:e,toc:t}=c(),n=(0,m.i)(),s=e.hide_table_of_contents,a=!s&&t.length>0;return{hidden:s,mobile:a?(0,l.jsx)(H,{}):void 0,desktop:!a||"desktop"!==n&&"ssr"!==n?void 0:(0,l.jsx)(U,{})}}(),{metadata:s}=c();return(0,l.jsxs)("div",{className:"row",children:[(0,l.jsxs)("div",{className:(0,u.Z)("col",!n.hidden&&S.docItemCol),children:[(0,l.jsx)(I.Z,{metadata:s}),(0,l.jsx)(v.Z,{}),(0,l.jsxs)("div",{className:S.docItemContainer,children:[(0,l.jsxs)("article",{children:[(0,l.jsx)(E.Z,{}),(0,l.jsx)(p.Z,{}),n.mobile,(0,l.jsx)(A,{children:t}),(0,l.jsx)(j,{})]}),(0,l.jsx)(x,{})]})]}),n.desktop&&(0,l.jsx)("div",{className:"col col--3",children:n.desktop})]})}function P(e){const t=`docs-doc-id-${e.content.metadata.id}`,n=e.content;return(0,l.jsx)(o,{content:e.content,children:(0,l.jsxs)(a.FG,{className:t,children:[(0,l.jsx)(d,{}),(0,l.jsx)(V,{children:(0,l.jsx)(n,{})})]})})}},78695:(e,t,n)=>{n.d(t,{Z:()=>l});n(67294);var s=n(55361),a=n(60968),i=n(85893);function l(e){const{previous:t,next:n}=e;return(0,i.jsxs)("nav",{className:"pagination-nav docusaurus-mt-lg","aria-label":(0,s.I)({id:"theme.docs.paginator.navAriaLabel",message:"Docs pages",description:"The ARIA label for the docs pagination"}),children:[t&&(0,i.jsx)(a.Z,{...t,subLabel:(0,i.jsx)(s.Z,{id:"theme.docs.paginator.previous",description:"The label used to navigate to the previous doc",children:"Previous"})}),n&&(0,i.jsx)(a.Z,{...n,subLabel:(0,i.jsx)(s.Z,{id:"theme.docs.paginator.next",description:"The label used to navigate to the next doc",children:"Next"}),isNext:!0})]})}},60425:(e,t,n)=>{n.d(t,{Z:()=>o});n(67294);var s=n(36905),a=n(55361),i=n(50563),l=n(72950),r=n(85893);function o(e){let{className:t}=e;const n=(0,l.E)();return n.badge?(0,r.jsx)("span",{className:(0,s.Z)(t,i.k.docs.docVersionBadge,"badge badge--secondary"),children:(0,r.jsx)(a.Z,{id:"theme.docs.versionBadge.label",values:{versionLabel:n.label},children:"Version: {versionLabel}"})}):null}},1188:(e,t,n)=>{n.d(t,{Z:()=>p});n(67294);var s=n(36905),a=n(75276),i=n(38208),l=n(55361),r=n(48878),o=n(50563),c=n(5055),d=n(72950),u=n(85893);const m={unreleased:function(e){let{siteTitle:t,versionMetadata:n}=e;return(0,u.jsx)(l.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:(0,u.jsx)("b",{children:n.label})},children:"This is unreleased documentation for {siteTitle} {versionLabel} version."})},unmaintained:function(e){let{siteTitle:t,versionMetadata:n}=e;return(0,u.jsx)(l.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:(0,u.jsx)("b",{children:n.label})},children:"This is documentation for {siteTitle} {versionLabel}, which is no longer actively maintained."})}};function h(e){const t=m[e.versionMetadata.banner];return(0,u.jsx)(t,{...e})}function x(e){let{versionLabel:t,to:n,onClick:s}=e;return(0,u.jsx)(l.Z,{id:"theme.docs.versions.latestVersionSuggestionLabel",description:"The label used to tell the user to check the latest version",values:{versionLabel:t,latestVersionLink:(0,u.jsx)("b",{children:(0,u.jsx)(i.Z,{to:n,onClick:s,children:(0,u.jsx)(l.Z,{id:"theme.docs.versions.latestVersionLinkLabel",description:"The label used for the latest version suggestion link label",children:"latest version"})})})},children:"For up-to-date documentation, see the {latestVersionLink} ({versionLabel})."})}function v(e){let{className:t,versionMetadata:n}=e;const{siteConfig:{title:i}}=(0,a.Z)(),{pluginId:l}=(0,r.gA)({failfast:!0}),{savePreferredVersionName:d}=(0,c.J)(l),{latestDocSuggestion:m,latestVersionSuggestion:v}=(0,r.Jo)(l),p=m??(b=v).docs.find((e=>e.id===b.mainDocId));var b;return(0,u.jsxs)("div",{className:(0,s.Z)(t,o.k.docs.docVersionBanner,"alert alert--warning margin-bottom--md"),role:"alert",children:[(0,u.jsx)("div",{children:(0,u.jsx)(h,{siteTitle:i,versionMetadata:n})}),(0,u.jsx)("div",{className:"margin-top--md",children:(0,u.jsx)(x,{versionLabel:v.label,to:p.path,onClick:()=>d(v.name)})})]})}function p(e){let{className:t}=e;const n=(0,d.E)();return n.banner?(0,u.jsx)(v,{className:t,versionMetadata:n}):null}},62978:(e,t,n)=>{n.d(t,{Z:()=>p});n(67294);var s=n(36905),a=n(55361),i=n(50563),l=n(38208);const r={iconEdit:"iconEdit_Z9Sw"};var o=n(85893);function c(e){let{className:t,...n}=e;return(0,o.jsx)("svg",{fill:"currentColor",height:"20",width:"20",viewBox:"0 0 40 40",className:(0,s.Z)(r.iconEdit,t),"aria-hidden":"true",...n,children:(0,o.jsx)("g",{children:(0,o.jsx)("path",{d:"m34.5 11.7l-3 3.1-6.3-6.3 3.1-3q0.5-0.5 1.2-0.5t1.1 0.5l3.9 3.9q0.5 0.4 0.5 1.1t-0.5 1.2z m-29.5 17.1l18.4-18.5 6.3 6.3-18.4 18.4h-6.3v-6.2z"})})})}function d(e){let{editUrl:t}=e;return(0,o.jsxs)(l.Z,{to:t,className:i.k.common.editThisPage,children:[(0,o.jsx)(c,{}),(0,o.jsx)(a.Z,{id:"theme.common.editThisPage",description:"The link label to edit the current page",children:"Edit this page"})]})}var u=n(14852);function m(e){let{lastUpdatedAt:t}=e;const n=new Date(t),s=(0,u.P)({day:"numeric",month:"short",year:"numeric",timeZone:"UTC"}).format(n);return(0,o.jsx)(a.Z,{id:"theme.lastUpdated.atDate",description:"The words used to describe on which date a page has been last updated",values:{date:(0,o.jsx)("b",{children:(0,o.jsx)("time",{dateTime:n.toISOString(),itemProp:"dateModified",children:s})})},children:" on {date}"})}function h(e){let{lastUpdatedBy:t}=e;return(0,o.jsx)(a.Z,{id:"theme.lastUpdated.byUser",description:"The words used to describe by who the page has been last updated",values:{user:(0,o.jsx)("b",{children:t})},children:" by {user}"})}function x(e){let{lastUpdatedAt:t,lastUpdatedBy:n}=e;return(0,o.jsxs)("span",{className:i.k.common.lastUpdated,children:[(0,o.jsx)(a.Z,{id:"theme.lastUpdated.lastUpdatedAtBy",description:"The sentence used to display when a page has been last updated, and by who",values:{atDate:t?(0,o.jsx)(m,{lastUpdatedAt:t}):"",byUser:n?(0,o.jsx)(h,{lastUpdatedBy:n}):""},children:"Last updated{atDate}{byUser}"}),!1]})}const v={lastUpdated:"lastUpdated_JAkA"};function p(e){let{className:t,editUrl:n,lastUpdatedAt:a,lastUpdatedBy:i}=e;return(0,o.jsxs)("div",{className:(0,s.Z)("row",t),children:[(0,o.jsx)("div",{className:"col",children:n&&(0,o.jsx)(d,{editUrl:n})}),(0,o.jsx)("div",{className:(0,s.Z)("col",v.lastUpdated),children:(a||i)&&(0,o.jsx)(x,{lastUpdatedAt:a,lastUpdatedBy:i})})]})}},38507:(e,t,n)=>{n.d(t,{Z:()=>w});var s=n(67294),a=n(11151),i=n(79722),l=n(17573),r=n(85893);function o(e){return(0,r.jsx)("code",{...e})}var c=n(38208);var d=n(36905),u=n(788),m=n(79202),h=n(45025),x=n(93841);const v={details:"details_lb9f",isBrowser:"isBrowser_bmU9",collapsibleContent:"collapsibleContent_i85q"};function p(e){return!!e&&("SUMMARY"===e.tagName||p(e.parentElement))}function b(e,t){return!!e&&(e===t||b(e.parentElement,t))}function f(e){let{summary:t,children:n,...a}=e;(0,m.Z)().collectAnchor(a.id);const i=(0,h.Z)(),l=(0,s.useRef)(null),{collapsed:o,setCollapsed:c}=(0,x.u)({initialState:!a.open}),[d,f]=(0,s.useState)(a.open),g=s.isValidElement(t)?t:(0,r.jsx)("summary",{children:t??"Details"});return(0,r.jsxs)("details",{...a,ref:l,open:d,"data-collapsed":o,className:(0,u.Z)(v.details,i&&v.isBrowser,a.className),onMouseDown:e=>{p(e.target)&&e.detail>1&&e.preventDefault()},onClick:e=>{e.stopPropagation();const t=e.target;p(t)&&b(t,l.current)&&(e.preventDefault(),o?(c(!1),f(!0)):c(!0))},children:[g,(0,r.jsx)(x.z,{lazy:!1,collapsed:o,disableSSRStyle:!0,onCollapseTransitionEnd:e=>{c(e),f(!e)},children:(0,r.jsx)("div",{className:v.collapsibleContent,children:n})})]})}const g={details:"details_b_Ee"},j="alert alert--info";function Z(e){let{...t}=e;return(0,r.jsx)(f,{...t,className:(0,d.Z)(j,g.details,t.className)})}function N(e){const t=s.Children.toArray(e.children),n=t.find((e=>s.isValidElement(e)&&"summary"===e.type)),a=(0,r.jsx)(r.Fragment,{children:t.filter((e=>e!==n))});return(0,r.jsx)(Z,{...e,summary:n,children:a})}var C=n(42704);function L(e){return(0,r.jsx)(C.Z,{...e})}const _={containsTaskList:"containsTaskList_mC6p"};function k(e){if(void 0!==e)return(0,d.Z)(e,e?.includes("contains-task-list")&&_.containsTaskList)}const T={img:"img_ev3q"};var y=n(20906);const H={Head:i.Z,details:N,Details:N,code:function(e){return function(e){return void 0!==e.children&&s.Children.toArray(e.children).every((e=>"string"==typeof e&&!e.includes("\n")))}(e)?(0,r.jsx)(o,{...e}):(0,r.jsx)(l.Z,{...e})},a:function(e){return(0,r.jsx)(c.Z,{...e})},pre:function(e){return(0,r.jsx)(r.Fragment,{children:e.children})},ul:function(e){return(0,r.jsx)("ul",{...e,className:k(e.className)})},li:function(e){return(0,m.Z)().collectAnchor(e.id),(0,r.jsx)("li",{...e})},img:function(e){return(0,r.jsx)("img",{decoding:"async",loading:"lazy",...e,className:(t=e.className,(0,d.Z)(t,T.img))});var t},h1:e=>(0,r.jsx)(L,{as:"h1",...e}),h2:e=>(0,r.jsx)(L,{as:"h2",...e}),h3:e=>(0,r.jsx)(L,{as:"h3",...e}),h4:e=>(0,r.jsx)(L,{as:"h4",...e}),h5:e=>(0,r.jsx)(L,{as:"h5",...e}),h6:e=>(0,r.jsx)(L,{as:"h6",...e}),admonition:y.Z,mermaid:()=>null};function w(e){let{children:t}=e;return(0,r.jsx)(a.Z,{components:H,children:t})}},60968:(e,t,n)=>{n.d(t,{Z:()=>l});n(67294);var s=n(36905),a=n(38208),i=n(85893);function l(e){const{permalink:t,title:n,subLabel:l,isNext:r}=e;return(0,i.jsxs)(a.Z,{className:(0,s.Z)("pagination-nav__link",r?"pagination-nav__link--next":"pagination-nav__link--prev"),to:t,children:[l&&(0,i.jsx)("div",{className:"pagination-nav__sublabel",children:l}),(0,i.jsx)("div",{className:"pagination-nav__label",children:n})]})}},15556:(e,t,n)=>{n.d(t,{Z:()=>c});n(67294);var s=n(36905),a=n(42536);const i={tableOfContents:"tableOfContents_bqdL",docItemContainer:"docItemContainer_F8PC"};var l=n(85893);const r="table-of-contents__link toc-highlight",o="table-of-contents__link--active";function c(e){let{className:t,...n}=e;return(0,l.jsx)("div",{className:(0,s.Z)(i.tableOfContents,"thin-scrollbar",t),children:(0,l.jsx)(a.Z,{...n,linkClassName:r,linkActiveClassName:o})})}},42536:(e,t,n)=>{n.d(t,{Z:()=>v});var s=n(67294),a=n(39581);function i(e){const t=e.map((e=>({...e,parentIndex:-1,children:[]}))),n=Array(7).fill(-1);t.forEach(((e,t)=>{const s=n.slice(2,e.level);e.parentIndex=Math.max(...s),n[e.level]=t}));const s=[];return t.forEach((e=>{const{parentIndex:n,...a}=e;n>=0?t[n].children.push(a):s.push(a)})),s}function l(e){let{toc:t,minHeadingLevel:n,maxHeadingLevel:s}=e;return t.flatMap((e=>{const t=l({toc:e.children,minHeadingLevel:n,maxHeadingLevel:s});return function(e){return e.level>=n&&e.level<=s}(e)?[{...e,children:t}]:t}))}function r(e){const t=e.getBoundingClientRect();return t.top===t.bottom?r(e.parentNode):t}function o(e,t){let{anchorTopOffset:n}=t;const s=e.find((e=>r(e).top>=n));if(s){return function(e){return e.top>0&&e.bottom{e.current=t?0:document.querySelector(".navbar").clientHeight}),[t]),e}function d(e){const t=(0,s.useRef)(void 0),n=c();(0,s.useEffect)((()=>{if(!e)return()=>{};const{linkClassName:s,linkActiveClassName:a,minHeadingLevel:i,maxHeadingLevel:l}=e;function r(){const e=function(e){return Array.from(document.getElementsByClassName(e))}(s),r=function(e){let{minHeadingLevel:t,maxHeadingLevel:n}=e;const s=[];for(let a=t;a<=n;a+=1)s.push(`h${a}.anchor`);return Array.from(document.querySelectorAll(s.join()))}({minHeadingLevel:i,maxHeadingLevel:l}),c=o(r,{anchorTopOffset:n.current}),d=e.find((e=>c&&c.id===function(e){return decodeURIComponent(e.href.substring(e.href.indexOf("#")+1))}(e)));e.forEach((e=>{!function(e,n){n?(t.current&&t.current!==e&&t.current.classList.remove(a),e.classList.add(a),t.current=e):e.classList.remove(a)}(e,e===d)}))}return document.addEventListener("scroll",r),document.addEventListener("resize",r),r(),()=>{document.removeEventListener("scroll",r),document.removeEventListener("resize",r)}}),[e,n])}var u=n(38208),m=n(85893);function h(e){let{toc:t,className:n,linkClassName:s,isChild:a}=e;return t.length?(0,m.jsx)("ul",{className:a?void 0:n,children:t.map((e=>(0,m.jsxs)("li",{children:[(0,m.jsx)(u.Z,{to:`#${e.id}`,className:s??void 0,dangerouslySetInnerHTML:{__html:e.value}}),(0,m.jsx)(h,{isChild:!0,toc:e.children,className:n,linkClassName:s})]},e.id)))}):null}const x=s.memo(h);function v(e){let{toc:t,className:n="table-of-contents table-of-contents__left-border",linkClassName:r="table-of-contents__link",linkActiveClassName:o,minHeadingLevel:c,maxHeadingLevel:u,...h}=e;const v=(0,a.L)(),p=c??v.tableOfContents.minHeadingLevel,b=u??v.tableOfContents.maxHeadingLevel,f=function(e){let{toc:t,minHeadingLevel:n,maxHeadingLevel:a}=e;return(0,s.useMemo)((()=>l({toc:i(t),minHeadingLevel:n,maxHeadingLevel:a})),[t,n,a])}({toc:t,minHeadingLevel:p,maxHeadingLevel:b});return d((0,s.useMemo)((()=>{if(r&&o)return{linkClassName:r,linkActiveClassName:o,minHeadingLevel:p,maxHeadingLevel:b}}),[r,o,p,b])),(0,m.jsx)(x,{toc:f,className:n,linkClassName:r,...h})}},96194:(e,t,n)=>{n.d(t,{Z:()=>r});n(67294);var s=n(36905),a=n(38208);const i={tag:"tag_zVej",tagRegular:"tagRegular_sFm0",tagWithCount:"tagWithCount_h2kH"};var l=n(85893);function r(e){let{permalink:t,label:n,count:r,description:o}=e;return(0,l.jsxs)(a.Z,{href:t,title:o,className:(0,s.Z)(i.tag,r?i.tagWithCount:i.tagRegular),children:[n,r&&(0,l.jsx)("span",{children:r})]})}},32223:(e,t,n)=>{n.d(t,{Z:()=>o});n(67294);var s=n(36905),a=n(55361),i=n(96194);const l={tags:"tags_jXut",tag:"tag_QGVx"};var r=n(85893);function o(e){let{tags:t}=e;return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)("b",{children:(0,r.jsx)(a.Z,{id:"theme.tags.tagsListLabel",description:"The label alongside a tag list",children:"Tags:"})}),(0,r.jsx)("ul",{className:(0,s.Z)(l.tags,"padding--none","margin-left--sm"),children:t.map((e=>(0,r.jsx)("li",{className:l.tag,children:(0,r.jsx)(i.Z,{...e})},e.permalink)))})]})}},64827:(e,t,n)=>{n.d(t,{T$:()=>o,cI:()=>l,eU:()=>r,ht:()=>c,xo:()=>d});n(67294);var s=n(55361),a=n(79722),i=n(85893);function l(){return(0,i.jsx)(s.Z,{id:"theme.contentVisibility.unlistedBanner.title",description:"The unlisted content banner title",children:"Unlisted page"})}function r(){return(0,i.jsx)(s.Z,{id:"theme.contentVisibility.unlistedBanner.message",description:"The unlisted content banner message",children:"This page is unlisted. Search engines will not index it, and only users having a direct link can access it."})}function o(){return(0,i.jsx)(a.Z,{children:(0,i.jsx)("meta",{name:"robots",content:"noindex, nofollow"})})}function c(){return(0,i.jsx)(s.Z,{id:"theme.contentVisibility.draftBanner.title",description:"The draft content banner title",children:"Draft page"})}function d(){return(0,i.jsx)(s.Z,{id:"theme.contentVisibility.draftBanner.message",description:"The draft content banner message",children:"This page is a draft. It will only be visible in dev and be excluded from the production build."})}},14852:(e,t,n)=>{n.d(t,{P:()=>a});var s=n(75276);function a(e){void 0===e&&(e={});const{i18n:{currentLocale:t}}=(0,s.Z)(),n=function(){const{i18n:{currentLocale:e,localeConfigs:t}}=(0,s.Z)();return t[e].calendar}();return new Intl.DateTimeFormat(t,{calendar:n,...e})}}}]); \ No newline at end of file diff --git a/assets/js/1a698c37.366fd749.js b/assets/js/1a698c37.366fd749.js new file mode 100644 index 000000000..50adfb3c0 --- /dev/null +++ b/assets/js/1a698c37.366fd749.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([["346"],{46821:function(e,i,s){s.r(i),s.d(i,{metadata:()=>n,contentTitle:()=>I,default:()=>O,assets:()=>y,toc:()=>S,frontMatter:()=>E});var n=JSON.parse('{"id":"user/editions/index","title":"Editions","description":"","source":"@site/docs/user/editions/index.mdx","sourceDirName":"user/editions","slug":"/user/editions/","permalink":"/docs/user/editions/","draft":false,"unlisted":false,"editUrl":"https://github.com/getsolus/help-center-docs/tree/master/docs/user/editions/index.mdx","tags":[],"version":"current","lastUpdatedAt":1733757592000,"frontMatter":{},"sidebar":"userSidebar","previous":{"title":"Testing an ISO","permalink":"/docs/user/contributing/testing-an-iso"},"next":{"title":"Budgie","permalink":"/docs/user/editions/budgie/"}}'),r=s("85893"),t=s("50065"),d=s("90706");s("67294");var a=s("86010"),o=s("1822"),l=s("27544"),c=s("326"),u=s("52068"),p=s("2734"),h=s("98396"),m=s("10727"),x=s("24434"),g=s("70342"),f=s("79931"),j=s("94229"),Z=s("39217"),k=s("7571");let b=[{name:"Budgie",url:"budgie",urlConfig:"budgie/configuration",urlTips:"budgie/tips-and-tricks",description:(0,r.jsx)(o.Z,{id:"edition.budgie.description",children:"A feature-rich, luxurious desktop using the most modern technologies."})},{name:"Plasma",url:"plasma",urlConfig:"plasma/configuration",urlTips:"plasma/tips-and-tricks",description:(0,r.jsx)(o.Z,{id:"edition.plasma.description",children:"A sophisticated desktop experience for the tinkerers. Simple by default, powerful when needed."})},{name:"GNOME",url:"gnome",urlConfig:"gnome/configuration",urlTips:"gnome/tips-and-tricks",description:(0,r.jsx)(o.Z,{id:"edition.gnome.description",children:"A simple, streamlined desktop for more modern hardware."})},{name:"MATE",url:"mate",urlConfig:"mate/configuration",urlTips:"mate/tips-and-tricks",description:(0,r.jsx)(o.Z,{id:"edition.mate.description",children:"A traditional desktop for advanced users and older hardware."})},{name:"XFCE",url:"xfce",urlConfig:"xfce/configuration",urlTips:"xfce/tips-and-tricks",description:(0,r.jsx)(o.Z,{id:"edition.xfce.description",children:"A lightweight desktop that aims to be fast while still being friendly."})}],A=e=>{let{name:i,url:s,urlConfig:n,urlTips:t,description:d}=e,b=(0,p.Z)(),A=(0,h.Z)(b.breakpoints.down("xl")),v=(0,k.ZP)(`/img/${i}.jpg`);return(0,r.jsx)(f.Z,{xs:6,children:(0,r.jsxs)(m.Z,{className:(0,a.Z)("card"),height:1,children:[(0,r.jsx)(m.Z,{className:(0,a.Z)("card__image"),children:(0,r.jsx)(l.Z,{to:s,children:(0,r.jsx)(c.Z,{img:v,alt:(0,o.I)({message:"Screenshot of {name} edition",id:"edition.card.image",description:"Alt text for images of editions"})})})}),(0,r.jsxs)(m.Z,{className:"card__body",children:[(0,r.jsx)(u.Z,{as:"h3",children:(0,r.jsx)("a",{href:i,children:i})}),(0,r.jsx)("p",{children:d})]}),(0,r.jsx)(m.Z,{className:"card__footer",children:(0,r.jsxs)(x.Z,{"aria-label":"contained card button group",fullWidth:!0,sx:{borderRadius:"10px"},variant:"contained",children:[(0,r.jsx)(g.Z,{href:n,startIcon:A?void 0:(0,r.jsx)(j.default,{}),sx:{borderRadius:"10px",paddingInline:2},children:(0,r.jsx)(o.Z,{id:"edition.card.configuration",children:"Configuration"})}),(0,r.jsx)(g.Z,{href:t,startIcon:A?void 0:(0,r.jsx)(Z.default,{}),sx:{borderRadius:"10px",paddingInline:2},children:(0,r.jsx)(o.Z,{id:"edition.card.tipsntricks",children:"Tips & Tricks"})})]})})]})})},v=()=>(0,r.jsx)(f.Z,{container:!0,columns:{xs:6,sm:6,md:6,lg:12},spacing:2,children:b.map(e=>(0,r.jsx)(A,{...e},e.name))});var w=s("96189"),T=s("6656"),_=s("93330");let C=(0,T.Z)({breakpoints:{values:{xs:0,sm:600,md:900,lg:1200,xl:1536,subfullhd:1800,fullhd:1920}},palette:{primary:{light:w.Z.A700,main:w.Z.A700,dark:w.Z.A100}}}),N=(0,_.Z)(C,{breakpoints:C.breakpoints.keys,factor:2}),E={},I="Editions",y={},S=[];function M(e){let i={h1:"h1",header:"header",...(0,t.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(i.header,{children:(0,r.jsx)(i.h1,{id:"editions",children:"Editions"})}),"\n","\n",(0,r.jsx)(d.Z,{theme:N,children:(0,r.jsx)(v,{})})]})}function O(e={}){let{wrapper:i}={...(0,t.a)(),...e.components};return i?(0,r.jsx)(i,{...e,children:(0,r.jsx)(M,{...e})}):M(e)}}}]); \ No newline at end of file diff --git a/assets/js/1a698c37.7fce42ce.js b/assets/js/1a698c37.7fce42ce.js deleted file mode 100644 index ba4913703..000000000 --- a/assets/js/1a698c37.7fce42ce.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[6126],{99870:(e,i,s)=>{s.r(i),s.d(i,{assets:()=>y,contentTitle:()=>I,default:()=>R,frontMatter:()=>E,metadata:()=>N,toc:()=>M});var n=s(85893),r=s(11151),t=s(22430),d=(s(67294),s(86010)),o=s(55361),a=s(38208),c=s(63186),l=s(42704),u=s(2734),p=s(98396),h=s(51233),m=s(56863),x=s(78146),g=s(27400),f=s(94229),j=s(39217),Z=s(23466);const k=[{name:"Budgie",url:"budgie",urlConfig:"budgie/configuration",urlTips:"budgie/tips-and-tricks",description:(0,n.jsx)(o.Z,{id:"edition.budgie.description",children:"A feature-rich, luxurious desktop using the most modern technologies."})},{name:"Plasma",url:"plasma",urlConfig:"plasma/configuration",urlTips:"plasma/tips-and-tricks",description:(0,n.jsx)(o.Z,{id:"edition.plasma.description",children:"A sophisticated desktop experience for the tinkerers. Simple by default, powerful when needed."})},{name:"GNOME",url:"gnome",urlConfig:"gnome/configuration",urlTips:"gnome/tips-and-tricks",description:(0,n.jsx)(o.Z,{id:"edition.gnome.description",children:"A simple, streamlined desktop for more modern hardware."})},{name:"MATE",url:"mate",urlConfig:"mate/configuration",urlTips:"mate/tips-and-tricks",description:(0,n.jsx)(o.Z,{id:"edition.mate.description",children:"A traditional desktop for advanced users and older hardware."})},{name:"XFCE",url:"xfce",urlConfig:"xfce/configuration",urlTips:"xfce/tips-and-tricks",description:(0,n.jsx)(o.Z,{id:"edition.xfce.description",children:"A lightweight desktop that aims to be fast while still being friendly."})}],b=e=>{let{name:i,url:s,urlConfig:r,urlTips:t,description:k}=e;const b=(0,u.Z)(),A=(0,p.Z)(b.breakpoints.down("xl")),T=(0,Z.ZP)(`/img/${i}.jpg`);return(0,n.jsx)(g.Z,{xs:6,children:(0,n.jsxs)(h.Z,{className:(0,d.Z)("card"),height:1,children:[(0,n.jsx)(h.Z,{className:(0,d.Z)("card__image"),children:(0,n.jsx)(a.Z,{to:s,children:(0,n.jsx)(c.Z,{img:T,alt:(0,o.I)({message:"Screenshot of {name} edition",id:"edition.card.image",description:"Alt text for images of editions"})})})}),(0,n.jsxs)(h.Z,{className:"card__body",children:[(0,n.jsx)(l.Z,{as:"h3",children:(0,n.jsx)("a",{href:i,children:i})}),(0,n.jsx)("p",{children:k})]}),(0,n.jsx)(h.Z,{className:"card__footer",children:(0,n.jsxs)(m.Z,{"aria-label":"contained card button group",fullWidth:!0,sx:{borderRadius:"10px"},variant:"contained",children:[(0,n.jsx)(x.Z,{href:r,startIcon:A?void 0:(0,n.jsx)(f.Z,{}),sx:{borderRadius:"10px",paddingInline:2},children:(0,n.jsx)(o.Z,{id:"edition.card.configuration",children:"Configuration"})}),(0,n.jsx)(x.Z,{href:t,startIcon:A?void 0:(0,n.jsx)(j.Z,{}),sx:{borderRadius:"10px",paddingInline:2},children:(0,n.jsx)(o.Z,{id:"edition.card.tipsntricks",children:"Tips & Tricks"})})]})})]})})},A=()=>(0,n.jsx)(g.Z,{container:!0,columns:{xs:6,sm:6,md:6,lg:12},spacing:2,children:k.map((e=>(0,n.jsx)(b,{...e},e.name)))});var T=s(96189),w=s(21265),C=s(98391);const _=(0,w.Z)({breakpoints:{values:{xs:0,sm:600,md:900,lg:1200,xl:1536,subfullhd:1800,fullhd:1920}},palette:{primary:{light:T.Z.A700,main:T.Z.A700,dark:T.Z.A100}}}),v=(0,C.Z)(_,{breakpoints:_.breakpoints.keys,factor:2}),E={},I="Editions",N={id:"user/editions/index",title:"Editions",description:"",source:"@site/docs/user/editions/index.mdx",sourceDirName:"user/editions",slug:"/user/editions/",permalink:"/docs/user/editions/",draft:!1,unlisted:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/editions/index.mdx",tags:[],version:"current",lastUpdatedAt:1732716912e3,frontMatter:{},sidebar:"userSidebar",previous:{title:"Testing an ISO",permalink:"/docs/user/contributing/testing-an-iso"},next:{title:"Budgie",permalink:"/docs/user/editions/budgie/"}},y={},M=[];function S(e){const i={h1:"h1",header:"header",...(0,r.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(i.header,{children:(0,n.jsx)(i.h1,{id:"editions",children:"Editions"})}),"\n","\n",(0,n.jsx)(t.Z,{theme:v,children:(0,n.jsx)(A,{})})]})}function R(e={}){const{wrapper:i}={...(0,r.a)(),...e.components};return i?(0,n.jsx)(i,{...e,children:(0,n.jsx)(S,{...e})}):S(e)}}}]); \ No newline at end of file diff --git a/assets/js/1ae709a2.c386f78c.js b/assets/js/1ae709a2.c386f78c.js new file mode 100644 index 000000000..5ac3d7085 --- /dev/null +++ b/assets/js/1ae709a2.c386f78c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([["5366"],{11912:function(e,s,n){n.r(s),n.d(s,{metadata:()=>t,contentTitle:()=>i,default:()=>d,assets:()=>l,toc:()=>c,frontMatter:()=>o});var t=JSON.parse('{"id":"user/package-management/history-and-rollback","title":"History and Software Rollback","description":"Solus offers a feature to view your history of software changes and revert your system to previous versions.","source":"@site/docs/user/package-management/history-and-rollback.md","sourceDirName":"user/package-management","slug":"/user/package-management/history-and-rollback","permalink":"/docs/user/package-management/history-and-rollback","draft":false,"unlisted":false,"editUrl":"https://github.com/getsolus/help-center-docs/tree/master/docs/user/package-management/history-and-rollback.md","tags":[],"version":"current","lastUpdatedAt":1733757592000,"frontMatter":{"title":"History and Software Rollback","summary":"History and Software Rollback"},"sidebar":"userSidebar","previous":{"title":"Basics to Package Management","permalink":"/docs/user/package-management/basics"},"next":{"title":"Repository Management","permalink":"/docs/user/package-management/repo-management"}}'),r=n("85893"),a=n("50065");let o={title:"History and Software Rollback",summary:"History and Software Rollback"},i="History and software rollback in Solus",l={},c=[{value:"History of software changes",id:"history-of-software-changes",level:2},{value:"Rollback",id:"rollback",level:2}];function h(e){let s={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",header:"header",img:"img",li:"li",ol:"ol",p:"p",pre:"pre",ul:"ul",...(0,a.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(s.header,{children:(0,r.jsx)(s.h1,{id:"history-and-software-rollback-in-solus",children:"History and software rollback in Solus"})}),"\n",(0,r.jsx)(s.p,{children:"Solus offers a feature to view your history of software changes and revert your system to previous versions."}),"\n",(0,r.jsx)(s.p,{children:"You can use this feature if you have issues after installing packages or system updates, and you need to return to a working state."}),"\n",(0,r.jsx)(s.h2,{id:"history-of-software-changes",children:"History of software changes"}),"\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:["\n",(0,r.jsx)(s.p,{children:"To see your history of software changes, open a terminal and execute:"}),"\n",(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-bash",children:"eopkg history\n"})}),"\n",(0,r.jsx)(s.p,{children:"The terminal displays a list of all the software changes in your system."}),"\n",(0,r.jsx)(s.p,{children:(0,r.jsx)(s.img,{alt:"eopkg history output",src:n(23158).Z+"",width:"523",height:"617"})}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(s.h2,{id:"rollback",children:"Rollback"}),"\n",(0,r.jsxs)(s.admonition,{title:"Important",type:"warning",children:[(0,r.jsx)(s.p,{children:"Reverting software changes works if either:"}),(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsx)(s.li,{children:"The Solus repository has the version of the package you need, or"}),"\n",(0,r.jsx)(s.li,{children:"You have a local copy of the package."}),"\n"]})]}),"\n",(0,r.jsxs)(s.ol,{children:["\n",(0,r.jsxs)(s.li,{children:["\n",(0,r.jsxs)(s.p,{children:["Disable any ",(0,r.jsx)(s.a,{href:"https://help.getsol.us/docs/packaging/advanced-config/local-repository#disabling-the-local-solbuild-repository-in-eopkg",children:"local repository"})," you have."]}),"\n",(0,r.jsx)(s.p,{children:"Local repositories can cause errors during rollbacks."}),"\n"]}),"\n",(0,r.jsxs)(s.li,{children:["\n",(0,r.jsx)(s.p,{children:"Open a terminal."}),"\n"]}),"\n",(0,r.jsxs)(s.li,{children:["\n",(0,r.jsx)(s.p,{children:"View the history of software changes:"}),"\n",(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-bash",children:"eopkg history\n"})}),"\n"]}),"\n",(0,r.jsxs)(s.li,{children:["\n",(0,r.jsx)(s.p,{children:"Note the number of the most recent software change."}),"\n"]}),"\n",(0,r.jsxs)(s.li,{children:["\n",(0,r.jsx)(s.p,{children:"Go back to the desired state:"}),"\n",(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-bash",children:"sudo eopkg history -t NUMBER\n"})}),"\n",(0,r.jsxs)(s.p,{children:["Replace ",(0,r.jsx)(s.code,{children:"NUMBER"})," with a number lower than the latest software change."]}),"\n",(0,r.jsx)(s.p,{children:"For example, if you want to revert operation 100, use 99 as the number."}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(s.p,{children:"After reverting to the desired state, verify your system status. You might need to restart your system to see some of the changes."})]})}function d(e={}){let{wrapper:s}={...(0,a.a)(),...e.components};return s?(0,r.jsx)(s,{...e,children:(0,r.jsx)(h,{...e})}):h(e)}},23158:function(e,s,n){n.d(s,{Z:function(){return t}});let t=n.p+"assets/images/eopkg-history-output-628a9b5bff409bebd31bec29c3d94e37.png"},50065:function(e,s,n){n.d(s,{Z:function(){return i},a:function(){return o}});var t=n(67294);let r={},a=t.createContext(r);function o(e){let s=t.useContext(a);return t.useMemo(function(){return"function"==typeof e?e(s):{...s,...e}},[s,e])}function i(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:o(e.components),t.createElement(a.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/1ae709a2.e38f79ec.js b/assets/js/1ae709a2.e38f79ec.js deleted file mode 100644 index 14db8f4a4..000000000 --- a/assets/js/1ae709a2.e38f79ec.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[355],{49332:(e,s,n)=>{n.r(s),n.d(s,{assets:()=>l,contentTitle:()=>o,default:()=>d,frontMatter:()=>a,metadata:()=>i,toc:()=>c});var t=n(85893),r=n(11151);const a={title:"History and Software Rollback",summary:"History and Software Rollback"},o="History and software rollback in Solus",i={id:"user/package-management/history-and-rollback",title:"History and Software Rollback",description:"Solus offers a feature to view your history of software changes and revert your system to previous versions.",source:"@site/docs/user/package-management/history-and-rollback.md",sourceDirName:"user/package-management",slug:"/user/package-management/history-and-rollback",permalink:"/docs/user/package-management/history-and-rollback",draft:!1,unlisted:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/package-management/history-and-rollback.md",tags:[],version:"current",lastUpdatedAt:1732716912e3,frontMatter:{title:"History and Software Rollback",summary:"History and Software Rollback"},sidebar:"userSidebar",previous:{title:"Basics to Package Management",permalink:"/docs/user/package-management/basics"},next:{title:"Repository Management",permalink:"/docs/user/package-management/repo-management"}},l={},c=[{value:"History of software changes",id:"history-of-software-changes",level:2},{value:"Rollback",id:"rollback",level:2}];function h(e){const s={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",header:"header",img:"img",li:"li",ol:"ol",p:"p",pre:"pre",ul:"ul",...(0,r.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(s.header,{children:(0,t.jsx)(s.h1,{id:"history-and-software-rollback-in-solus",children:"History and software rollback in Solus"})}),"\n",(0,t.jsx)(s.p,{children:"Solus offers a feature to view your history of software changes and revert your system to previous versions."}),"\n",(0,t.jsx)(s.p,{children:"You can use this feature if you have issues after installing packages or system updates, and you need to return to a working state."}),"\n",(0,t.jsx)(s.h2,{id:"history-of-software-changes",children:"History of software changes"}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:["\n",(0,t.jsx)(s.p,{children:"To see your history of software changes, open a terminal and execute:"}),"\n",(0,t.jsx)(s.pre,{children:(0,t.jsx)(s.code,{className:"language-bash",children:"eopkg history\n"})}),"\n",(0,t.jsx)(s.p,{children:"The terminal displays a list of all the software changes in your system."}),"\n",(0,t.jsx)(s.p,{children:(0,t.jsx)(s.img,{alt:"eopkg history output",src:n(66082).Z+"",width:"523",height:"617"})}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(s.h2,{id:"rollback",children:"Rollback"}),"\n",(0,t.jsxs)(s.admonition,{title:"Important",type:"warning",children:[(0,t.jsx)(s.p,{children:"Reverting software changes works if either:"}),(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsx)(s.li,{children:"The Solus repository has the version of the package you need, or"}),"\n",(0,t.jsx)(s.li,{children:"You have a local copy of the package."}),"\n"]})]}),"\n",(0,t.jsxs)(s.ol,{children:["\n",(0,t.jsxs)(s.li,{children:["\n",(0,t.jsxs)(s.p,{children:["Disable any ",(0,t.jsx)(s.a,{href:"https://help.getsol.us/docs/packaging/advanced-config/local-repository#disabling-the-local-solbuild-repository-in-eopkg",children:"local repository"})," you have."]}),"\n",(0,t.jsx)(s.p,{children:"Local repositories can cause errors during rollbacks."}),"\n"]}),"\n",(0,t.jsxs)(s.li,{children:["\n",(0,t.jsx)(s.p,{children:"Open a terminal."}),"\n"]}),"\n",(0,t.jsxs)(s.li,{children:["\n",(0,t.jsx)(s.p,{children:"View the history of software changes:"}),"\n",(0,t.jsx)(s.pre,{children:(0,t.jsx)(s.code,{className:"language-bash",children:"eopkg history\n"})}),"\n"]}),"\n",(0,t.jsxs)(s.li,{children:["\n",(0,t.jsx)(s.p,{children:"Note the number of the most recent software change."}),"\n"]}),"\n",(0,t.jsxs)(s.li,{children:["\n",(0,t.jsx)(s.p,{children:"Go back to the desired state:"}),"\n",(0,t.jsx)(s.pre,{children:(0,t.jsx)(s.code,{className:"language-bash",children:"sudo eopkg history -t NUMBER\n"})}),"\n",(0,t.jsxs)(s.p,{children:["Replace ",(0,t.jsx)(s.code,{children:"NUMBER"})," with a number lower than the latest software change."]}),"\n",(0,t.jsx)(s.p,{children:"For example, if you want to revert operation 100, use 99 as the number."}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(s.p,{children:"After reverting to the desired state, verify your system status. You might need to restart your system to see some of the changes."})]})}function d(e={}){const{wrapper:s}={...(0,r.a)(),...e.components};return s?(0,t.jsx)(s,{...e,children:(0,t.jsx)(h,{...e})}):h(e)}},66082:(e,s,n)=>{n.d(s,{Z:()=>t});const t=n.p+"assets/images/eopkg-history-output-628a9b5bff409bebd31bec29c3d94e37.png"},11151:(e,s,n)=>{n.d(s,{Z:()=>i,a:()=>o});var t=n(67294);const r={},a=t.createContext(r);function o(e){const s=t.useContext(a);return t.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function i(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:o(e.components),t.createElement(a.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/1b835d51.4dc923fa.js b/assets/js/1b835d51.4dc923fa.js new file mode 100644 index 000000000..9c75ec7f7 --- /dev/null +++ b/assets/js/1b835d51.4dc923fa.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([["5670"],{26976:function(e){e.exports=JSON.parse('{"tag":{"label":"3","permalink":"/blog/tags/3","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/3","page":1,"postsPerPage":1,"totalPages":1,"totalCount":1,"blogDescription":"The Solus Development (b)log!","blogTitle":"Solus DevLog"}}')}}]); \ No newline at end of file diff --git a/assets/js/1b835d51.f45078d9.js b/assets/js/1b835d51.f45078d9.js deleted file mode 100644 index 2f86b3869..000000000 --- a/assets/js/1b835d51.f45078d9.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[532],{769:e=>{e.exports=JSON.parse('{"tag":{"label":"3","permalink":"/blog/tags/3","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/3","page":1,"postsPerPage":1,"totalPages":1,"totalCount":1,"blogDescription":"The Solus Development (b)log!","blogTitle":"Solus DevLog"}}')}}]); \ No newline at end of file diff --git a/assets/js/1df93b7f.6c454b7b.js b/assets/js/1df93b7f.6c454b7b.js new file mode 100644 index 000000000..0c059e474 --- /dev/null +++ b/assets/js/1df93b7f.6c454b7b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([["8706"],{21703:function(e,t,a){var i=a(29251);t.default=void 0;var s=i(a(64938)),n=a(85893),r=(0,s.default)((0,n.jsx)("path",{d:"M9 15c-2.67 0-8 1.34-8 4v2h16v-2c0-2.66-5.33-4-8-4zm-6 4c.22-.72 3.31-2 6-2 2.7 0 5.8 1.29 6 2H3zM4.74 9H5c0 2.21 1.79 4 4 4s4-1.79 4-4h.26c.27 0 .49-.22.49-.49v-.02c0-.27-.22-.49-.49-.49H13c0-1.48-.81-2.75-2-3.45v.95c0 .28-.22.5-.5.5s-.5-.22-.5-.5V4.14C9.68 4.06 9.35 4 9 4s-.68.06-1 .14V5.5c0 .28-.22.5-.5.5S7 5.78 7 5.5v-.95C5.81 5.25 5 6.52 5 8h-.26c-.27 0-.49.22-.49.49v.03c0 .26.22.48.49.48zM11 9c0 1.1-.9 2-2 2s-2-.9-2-2h4zm10.98-2.77.93-.83-.75-1.3-1.19.39c-.14-.11-.3-.2-.47-.27L20.25 3h-1.5l-.25 1.22c-.17.07-.33.16-.48.27l-1.18-.39-.75 1.3.93.83c-.02.17-.02.35 0 .52l-.93.85.75 1.3 1.2-.38c.13.1.28.18.43.25l.28 1.23h1.5l.27-1.22c.16-.07.3-.15.44-.25l1.19.38.75-1.3-.93-.85c.03-.19.02-.36.01-.53zM19.5 7.75c-.69 0-1.25-.56-1.25-1.25s.56-1.25 1.25-1.25 1.25.56 1.25 1.25-.56 1.25-1.25 1.25zm-.1 3.04-.85.28c-.1-.08-.21-.14-.33-.19l-.18-.88h-1.07l-.18.87c-.12.05-.24.12-.34.19l-.84-.28-.54.93.66.59c-.01.13-.01.25 0 .37l-.66.61.54.93.86-.27c.1.07.2.13.31.18l.18.88h1.07l.19-.87c.11-.05.22-.11.32-.18l.85.27.54-.93-.66-.61c.01-.13.01-.25 0-.37l.66-.59-.53-.93zm-1.9 2.6c-.49 0-.89-.4-.89-.89s.4-.89.89-.89.89.4.89.89-.4.89-.89.89z"}),"EngineeringOutlined");t.default=r},78340:function(e,t,a){var i=a(29251);t.default=void 0;var s=i(a(64938)),n=a(85893),r=(0,s.default)([(0,n.jsx)("path",{d:"M20 2H4c-1 0-2 .9-2 2v3.01c0 .72.43 1.34 1 1.69V20c0 1.1 1.1 2 2 2h14c.9 0 2-.9 2-2V8.7c.57-.35 1-.97 1-1.69V4c0-1.1-1-2-2-2zm-1 18H5V9h14v11zm1-13H4V4h16v3z"},"0"),(0,n.jsx)("path",{d:"M9 12h6v2H9z"},"1")],"Inventory2Outlined");t.default=r},73079:function(e,t,a){var i=a(29251);t.default=void 0;var s=i(a(64938)),n=a(85893),r=(0,s.default)((0,n.jsx)("path",{d:"M12 5.9c1.16 0 2.1.94 2.1 2.1s-.94 2.1-2.1 2.1S9.9 9.16 9.9 8s.94-2.1 2.1-2.1m0 9c2.97 0 6.1 1.46 6.1 2.1v1.1H5.9V17c0-.64 3.13-2.1 6.1-2.1M12 4C9.79 4 8 5.79 8 8s1.79 4 4 4 4-1.79 4-4-1.79-4-4-4zm0 9c-2.67 0-8 1.34-8 4v3h16v-3c0-2.66-5.33-4-8-4z"}),"PersonOutlineOutlined");t.default=r},60105:function(e,t,a){a.r(t),a.d(t,{default:()=>B});var i=a("85893"),s=a("67294"),n=a("99757"),r=a("53517"),l=a("35426"),o=a("86010"),d=a("14142"),c=a("34867"),u=a("94780"),h=a("29628"),m=a("13264"),x=a("63425");let p=["className","component","disableGutters","fixed","maxWidth","classes"],g=(0,x.Z)(),f=(0,m.Z)("div",{name:"MuiContainer",slot:"Root",overridesResolver:(e,t)=>{let{ownerState:a}=e;return[t.root,t[`maxWidth${(0,d.Z)(String(a.maxWidth))}`],a.fixed&&t.fixed,a.disableGutters&&t.disableGutters]}}),v=e=>(0,h.Z)({props:e,name:"MuiContainer",defaultTheme:g}),Z=(e,t)=>{let{classes:a,fixed:i,disableGutters:s,maxWidth:n}=e,r={root:["root",n&&`maxWidth${(0,d.Z)(String(n))}`,i&&"fixed",s&&"disableGutters"]};return(0,u.Z)(r,e=>(0,c.Z)(t,e),a)};var b=a("98216"),j=a("90948"),k=a("71657");let z=function(e={}){let{createStyledComponent:t=f,useThemeProps:a=v,componentName:n="MuiContainer"}=e,d=t(({theme:e,ownerState:t})=>(0,l.Z)({width:"100%",marginLeft:"auto",boxSizing:"border-box",marginRight:"auto",display:"block"},!t.disableGutters&&{paddingLeft:e.spacing(2),paddingRight:e.spacing(2),[e.breakpoints.up("sm")]:{paddingLeft:e.spacing(3),paddingRight:e.spacing(3)}}),({theme:e,ownerState:t})=>t.fixed&&Object.keys(e.breakpoints.values).reduce((t,a)=>{let i=e.breakpoints.values[a];return 0!==i&&(t[e.breakpoints.up(a)]={maxWidth:`${i}${e.breakpoints.unit}`}),t},{}),({theme:e,ownerState:t})=>(0,l.Z)({},"xs"===t.maxWidth&&{[e.breakpoints.up("xs")]:{maxWidth:Math.max(e.breakpoints.values.xs,444)}},t.maxWidth&&"xs"!==t.maxWidth&&{[e.breakpoints.up(t.maxWidth)]:{maxWidth:`${e.breakpoints.values[t.maxWidth]}${e.breakpoints.unit}`}}));return s.forwardRef(function(e,t){let s=a(e),{className:c,component:u="div",disableGutters:h=!1,fixed:m=!1,maxWidth:x="lg"}=s,g=(0,r.Z)(s,p),f=(0,l.Z)({},s,{component:u,disableGutters:h,fixed:m,maxWidth:x}),v=Z(f,n);return(0,i.jsx)(d,(0,l.Z)({as:u,ownerState:f,className:(0,o.Z)(v.root,c),ref:t},g))})}({createStyledComponent:(0,j.ZP)("div",{name:"MuiContainer",slot:"Root",overridesResolver:(e,t)=>{let{ownerState:a}=e;return[t.root,t[`maxWidth${(0,b.Z)(String(a.maxWidth))}`],a.fixed&&t.fixed,a.disableGutters&&t.disableGutters]}}),useThemeProps:e=>(0,k.Z)({props:e,name:"MuiContainer"})});var w=a("79931"),M=a("73079"),W=a("78340"),C=a("21703"),S=a("27544"),N=a("7078"),y=a("86523"),G=a("39707"),H=a("96682");let R=["className","component"];var $=a("37078"),V=a("6656"),_=a("10606");let L=(0,V.Z)(),P=function(e={}){let{themeId:t,defaultTheme:a,defaultClassName:n="MuiBox-root",generateClassName:d}=e,c=(0,N.ZP)("div",{shouldForwardProp:e=>"theme"!==e&&"sx"!==e&&"as"!==e})(y.Z);return s.forwardRef(function(e,s){let u=(0,H.Z)(a),h=(0,G.Z)(e),{className:m,component:x="div"}=h,p=(0,r.Z)(h,R);return(0,i.jsx)(c,(0,l.Z)({as:x,ref:s,className:(0,o.Z)(m,d?d(n):n),theme:t&&u[t]||u},p))})}({themeId:_.Z,defaultTheme:L,defaultClassName:"MuiBox-root",generateClassName:$.Z.generate});var D=a("10727");let I=e=>{let{title:t,img:a,description:s,link:n}=e;return(0,i.jsx)(w.Z,{xs:6,children:(0,i.jsx)(P,{className:"card shadow--lw",sx:{p:6},children:(0,i.jsxs)(D.Z,{alignItems:"center",gap:2,textAlign:"center",children:[a,(0,i.jsx)(S.Z,{to:n,children:(0,i.jsx)("h3",{style:{fontWeight:"bold"},children:t})}),s]})})},`Doc-Grid-${t}`)},O=()=>(0,i.jsxs)(D.Z,{alignItems:"center",className:"hero hero--secondary",justifyContent:"center",padding:"5vh 10vw",spacing:2,children:[(0,i.jsx)("h1",{className:"hero__title",children:"Solus Help Center"}),(0,i.jsx)("p",{className:"hero__subtitle",children:"Documentation for Solus"})]}),F=[{title:"Users",description:(0,i.jsx)(i.Fragment,{children:"Installing, software, boot management, troubleshooting and more."}),link:"docs/user/intro",img:(0,i.jsx)(M.default,{sx:{fontSize:96}})},{title:"Packaging",description:(0,i.jsx)(i.Fragment,{children:"Get to grips with our advanced packaging features using easy to follow guides."}),link:"docs/packaging",img:(0,i.jsx)(W.default,{sx:{fontSize:96}})},{title:"Dev Log",description:(0,i.jsx)(i.Fragment,{children:"Learn what our developers have been up to, and preview upcoming changes."}),link:"blog",img:(0,i.jsx)(C.default,{sx:{fontSize:96}})}],B=()=>(0,i.jsxs)(n.Z,{title:"Documentation",description:"Solus",children:[(0,i.jsx)(O,{}),(0,i.jsx)(z,{sx:{marginBlock:"4vh",maxWidth:1920},children:(0,i.jsx)(w.Z,{columns:{xs:6,sm:18,md:18},container:!0,margin:0,spacing:4,width:1,children:F.map(e=>(0,s.createElement)(I,{...e,key:`Doc-${e.title}`}))})})]})}}]); \ No newline at end of file diff --git a/assets/js/1df93b7f.af2b12f5.js b/assets/js/1df93b7f.af2b12f5.js deleted file mode 100644 index a87335d22..000000000 --- a/assets/js/1df93b7f.af2b12f5.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[3237],{20780:(e,t,s)=>{s.r(t),s.d(t,{default:()=>B});var n=s(67294),a=s(48714),i=s(80102),r=s(83117),o=s(86010),c=s(14142),d=s(34867),l=s(94780),m=s(29628),h=s(13264),u=s(66500),x=s(85893);const p=["className","component","disableGutters","fixed","maxWidth","classes"],g=(0,u.Z)(),v=(0,h.Z)("div",{name:"MuiContainer",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:s}=e;return[t.root,t[`maxWidth${(0,c.Z)(String(s.maxWidth))}`],s.fixed&&t.fixed,s.disableGutters&&t.disableGutters]}}),f=e=>(0,m.Z)({props:e,name:"MuiContainer",defaultTheme:g});var Z=s(98216),b=s(90948),j=s(71657);const k=function(e={}){const{createStyledComponent:t=v,useThemeProps:s=f,componentName:a="MuiContainer"}=e,m=t((({theme:e,ownerState:t})=>(0,r.Z)({width:"100%",marginLeft:"auto",boxSizing:"border-box",marginRight:"auto",display:"block"},!t.disableGutters&&{paddingLeft:e.spacing(2),paddingRight:e.spacing(2),[e.breakpoints.up("sm")]:{paddingLeft:e.spacing(3),paddingRight:e.spacing(3)}})),(({theme:e,ownerState:t})=>t.fixed&&Object.keys(e.breakpoints.values).reduce(((t,s)=>{const n=s,a=e.breakpoints.values[n];return 0!==a&&(t[e.breakpoints.up(n)]={maxWidth:`${a}${e.breakpoints.unit}`}),t}),{})),(({theme:e,ownerState:t})=>(0,r.Z)({},"xs"===t.maxWidth&&{[e.breakpoints.up("xs")]:{maxWidth:Math.max(e.breakpoints.values.xs,444)}},t.maxWidth&&"xs"!==t.maxWidth&&{[e.breakpoints.up(t.maxWidth)]:{maxWidth:`${e.breakpoints.values[t.maxWidth]}${e.breakpoints.unit}`}}))),h=n.forwardRef((function(e,t){const n=s(e),{className:h,component:u="div",disableGutters:g=!1,fixed:v=!1,maxWidth:f="lg"}=n,Z=(0,i.Z)(n,p),b=(0,r.Z)({},n,{component:u,disableGutters:g,fixed:v,maxWidth:f}),j=((e,t)=>{const{classes:s,fixed:n,disableGutters:a,maxWidth:i}=e,r={root:["root",i&&`maxWidth${(0,c.Z)(String(i))}`,n&&"fixed",a&&"disableGutters"]};return(0,l.Z)(r,(e=>(0,d.Z)(t,e)),s)})(b,a);return(0,x.jsx)(m,(0,r.Z)({as:u,ownerState:b,className:(0,o.Z)(j.root,h),ref:t},Z))}));return h}({createStyledComponent:(0,b.ZP)("div",{name:"MuiContainer",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:s}=e;return[t.root,t[`maxWidth${(0,Z.Z)(String(s.maxWidth))}`],s.fixed&&t.fixed,s.disableGutters&&t.disableGutters]}}),useThemeProps:e=>(0,j.Z)({props:e,name:"MuiContainer"})}),w=k;var S=s(27400),W=s(73079),z=s(78340),C=s(21703),M=s(38208),N=s(62030),G=s(86523),y=s(39707),H=s(96682);const R=["className","component"];var $=s(37078),V=s(21265),_=s(10606);const P=(0,V.Z)(),I=function(e={}){const{themeId:t,defaultTheme:s,defaultClassName:a="MuiBox-root",generateClassName:c}=e,d=(0,N.ZP)("div",{shouldForwardProp:e=>"theme"!==e&&"sx"!==e&&"as"!==e})(G.Z);return n.forwardRef((function(e,n){const l=(0,H.Z)(s),m=(0,y.Z)(e),{className:h,component:u="div"}=m,p=(0,i.Z)(m,R);return(0,x.jsx)(d,(0,r.Z)({as:u,ref:n,className:(0,o.Z)(h,c?c(a):a),theme:t&&l[t]||l},p))}))}({themeId:_.Z,defaultTheme:P,defaultClassName:"MuiBox-root",generateClassName:$.Z.generate}),L=I;var D=s(51233);const O=e=>{let{title:t,img:s,description:n,link:a}=e;return(0,x.jsx)(S.Z,{xs:6,children:(0,x.jsx)(L,{className:"card shadow--lw",sx:{p:6},children:(0,x.jsxs)(D.Z,{alignItems:"center",gap:2,textAlign:"center",children:[s,(0,x.jsx)(M.Z,{to:a,children:(0,x.jsx)("h3",{style:{fontWeight:"bold"},children:t})}),n]})})},`Doc-Grid-${t}`)},T=()=>(0,x.jsxs)(D.Z,{alignItems:"center",className:"hero hero--secondary",justifyContent:"center",padding:"5vh 10vw",spacing:2,children:[(0,x.jsx)("h1",{className:"hero__title",children:"Solus Help Center"}),(0,x.jsx)("p",{className:"hero__subtitle",children:"Documentation for Solus"})]}),F=[{title:"Users",description:(0,x.jsx)(x.Fragment,{children:"Installing, software, boot management, troubleshooting and more."}),link:"docs/user/intro",img:(0,x.jsx)(W.Z,{sx:{fontSize:96}})},{title:"Packaging",description:(0,x.jsx)(x.Fragment,{children:"Get to grips with our advanced packaging features using easy to follow guides."}),link:"docs/packaging",img:(0,x.jsx)(z.Z,{sx:{fontSize:96}})},{title:"Dev Log",description:(0,x.jsx)(x.Fragment,{children:"Learn what our developers have been up to, and preview upcoming changes."}),link:"blog",img:(0,x.jsx)(C.Z,{sx:{fontSize:96}})}],B=()=>(0,x.jsxs)(a.Z,{title:"Documentation",description:"Solus",children:[(0,x.jsx)(T,{}),(0,x.jsx)(w,{sx:{marginBlock:"4vh",maxWidth:1920},children:(0,x.jsx)(S.Z,{columns:{xs:6,sm:18,md:18},container:!0,margin:0,spacing:4,width:1,children:F.map((e=>(0,n.createElement)(O,{...e,key:`Doc-${e.title}`})))})})]})},21703:(e,t,s)=>{var n=s(66344);t.Z=void 0;var a=n(s(64938)),i=s(85893),r=(0,a.default)((0,i.jsx)("path",{d:"M9 15c-2.67 0-8 1.34-8 4v2h16v-2c0-2.66-5.33-4-8-4zm-6 4c.22-.72 3.31-2 6-2 2.7 0 5.8 1.29 6 2H3zM4.74 9H5c0 2.21 1.79 4 4 4s4-1.79 4-4h.26c.27 0 .49-.22.49-.49v-.02c0-.27-.22-.49-.49-.49H13c0-1.48-.81-2.75-2-3.45v.95c0 .28-.22.5-.5.5s-.5-.22-.5-.5V4.14C9.68 4.06 9.35 4 9 4s-.68.06-1 .14V5.5c0 .28-.22.5-.5.5S7 5.78 7 5.5v-.95C5.81 5.25 5 6.52 5 8h-.26c-.27 0-.49.22-.49.49v.03c0 .26.22.48.49.48zM11 9c0 1.1-.9 2-2 2s-2-.9-2-2h4zm10.98-2.77.93-.83-.75-1.3-1.19.39c-.14-.11-.3-.2-.47-.27L20.25 3h-1.5l-.25 1.22c-.17.07-.33.16-.48.27l-1.18-.39-.75 1.3.93.83c-.02.17-.02.35 0 .52l-.93.85.75 1.3 1.2-.38c.13.1.28.18.43.25l.28 1.23h1.5l.27-1.22c.16-.07.3-.15.44-.25l1.19.38.75-1.3-.93-.85c.03-.19.02-.36.01-.53zM19.5 7.75c-.69 0-1.25-.56-1.25-1.25s.56-1.25 1.25-1.25 1.25.56 1.25 1.25-.56 1.25-1.25 1.25zm-.1 3.04-.85.28c-.1-.08-.21-.14-.33-.19l-.18-.88h-1.07l-.18.87c-.12.05-.24.12-.34.19l-.84-.28-.54.93.66.59c-.01.13-.01.25 0 .37l-.66.61.54.93.86-.27c.1.07.2.13.31.18l.18.88h1.07l.19-.87c.11-.05.22-.11.32-.18l.85.27.54-.93-.66-.61c.01-.13.01-.25 0-.37l.66-.59-.53-.93zm-1.9 2.6c-.49 0-.89-.4-.89-.89s.4-.89.89-.89.89.4.89.89-.4.89-.89.89z"}),"EngineeringOutlined");t.Z=r},78340:(e,t,s)=>{var n=s(66344);t.Z=void 0;var a=n(s(64938)),i=s(85893),r=(0,a.default)([(0,i.jsx)("path",{d:"M20 2H4c-1 0-2 .9-2 2v3.01c0 .72.43 1.34 1 1.69V20c0 1.1 1.1 2 2 2h14c.9 0 2-.9 2-2V8.7c.57-.35 1-.97 1-1.69V4c0-1.1-1-2-2-2zm-1 18H5V9h14v11zm1-13H4V4h16v3z"},"0"),(0,i.jsx)("path",{d:"M9 12h6v2H9z"},"1")],"Inventory2Outlined");t.Z=r},73079:(e,t,s)=>{var n=s(66344);t.Z=void 0;var a=n(s(64938)),i=s(85893),r=(0,a.default)((0,i.jsx)("path",{d:"M12 5.9c1.16 0 2.1.94 2.1 2.1s-.94 2.1-2.1 2.1S9.9 9.16 9.9 8s.94-2.1 2.1-2.1m0 9c2.97 0 6.1 1.46 6.1 2.1v1.1H5.9V17c0-.64 3.13-2.1 6.1-2.1M12 4C9.79 4 8 5.79 8 8s1.79 4 4 4 4-1.79 4-4-1.79-4-4-4zm0 9c-2.67 0-8 1.34-8 4v3h16v-3c0-2.66-5.33-4-8-4z"}),"PersonOutlineOutlined");t.Z=r}}]); \ No newline at end of file diff --git a/assets/js/2071.bc085cd1.js b/assets/js/2071.bc085cd1.js new file mode 100644 index 000000000..b92e772d3 --- /dev/null +++ b/assets/js/2071.bc085cd1.js @@ -0,0 +1,4 @@ +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([["2071"],{75700:function(e,t,a){a.d(t,{CS:()=>x,wj:()=>i,nO:()=>u,iZ:()=>p,n4:()=>c,Ne:()=>M,ci:()=>Z,cH:()=>_});var l=a("85893"),r=a("67294"),n=a("57100"),s=a("39025");function i(){let e=(0,s.Z)(),t=e?.data?.blogMetadata;if(!t)throw Error("useBlogMetadata() can't be called on the current route because the blog metadata could not be found in route context");return t}let o=r.createContext(null);function c(e){let{children:t,content:a,isBlogPostPage:n=!1}=e,s=function(e){let{content:t,isBlogPostPage:a}=e;return(0,r.useMemo)(()=>({metadata:t.metadata,frontMatter:t.frontMatter,assets:t.assets,toc:t.toc,isBlogPostPage:a}),[t,a])}({content:a,isBlogPostPage:n});return(0,l.jsx)(o.Provider,{value:s,children:t})}function u(){let e=(0,r.useContext)(o);if(null===e)throw new n.i6("BlogPostProvider");return e}var m=a("7571"),h=a("93934");let d=e=>new Date(e).toISOString();function g(e){let t=e.map(v);return{author:1===t.length?t[0]:t}}function f(e,t,a){return e?{image:function(e){let{imageUrl:t,caption:a}=e;return{"@type":"ImageObject","@id":t,url:t,contentUrl:t,caption:a}}({imageUrl:t(e,{absolute:!0}),caption:`title image for the blog post: ${a}`})}:{}}function x(e){let{siteConfig:t}=(0,h.Z)(),{withBaseUrl:a}=(0,m.Cg)(),{metadata:{blogDescription:l,blogTitle:r,permalink:n}}=e,s=`${t.url}${n}`;return{"@context":"https://schema.org","@type":"Blog","@id":s,mainEntityOfPage:s,headline:r,description:l,blogPost:e.items.map(e=>(function(e,t,a){let{assets:l,frontMatter:r,metadata:n}=e,{date:s,title:i,description:o,lastUpdatedAt:c}=n,u=l.image??r.image,m=r.keywords??[],h=`${t.url}${n.permalink}`,x=c?d(c):void 0;return{"@type":"BlogPosting","@id":h,mainEntityOfPage:h,url:h,headline:i,name:i,description:o,datePublished:s,...x?{dateModified:x}:{},...g(n.authors),...f(u,a,i),...m?{keywords:m}:{}}})(e.content,t,a))}}function p(){let e=i(),{assets:t,metadata:a}=u(),{siteConfig:l}=(0,h.Z)(),{withBaseUrl:r}=(0,m.Cg)(),{date:n,title:s,description:o,frontMatter:c,lastUpdatedAt:x}=a,p=t.image??c.image,v=c.keywords??[],j=x?d(x):void 0,w=`${l.url}${a.permalink}`;return{"@context":"https://schema.org","@type":"BlogPosting","@id":w,mainEntityOfPage:w,url:w,headline:s,name:s,description:o,datePublished:n,...j?{dateModified:j}:{},...g(a.authors),...f(p,r,s),...v?{keywords:v}:{},isPartOf:{"@type":"Blog","@id":`${l.url}${e.blogBasePath}`,name:e.blogTitle}}}function v(e){return{"@type":"Person",...e.name?{name:e.name}:{},...e.title?{description:e.title}:{},...e.url?{url:e.url}:{},...e.email?{email:e.email}:{},...e.imageURL?{image:e.imageURL}:{}}}var j=a("16550"),w=a("27544"),b=a("51373"),N=a("16896");function _(e){let{pathname:t}=(0,j.TH)();return(0,r.useMemo)(()=>e.filter(e=>{var a,l;return a=e,l=t,(!a.unlisted||!!(0,N.Mg)(a.permalink,l))&&!0}),[e,t])}function Z(e){let t=Object.entries((0,b.vM)(e,e=>`${new Date(e.date).getFullYear()}`));return t.reverse(),t}function M(e){let{items:t,ulClassName:a,liClassName:r,linkClassName:n,linkActiveClassName:s}=e;return(0,l.jsx)("ul",{className:a,children:t.map(e=>(0,l.jsx)("li",{className:r,children:(0,l.jsx)(w.Z,{isNavLink:!0,to:e.permalink,className:n,activeClassName:s,children:e.title})},e.permalink))})}},91941:function(e,t,a){a.d(t,{Z:()=>w});var l=a("85893");a("67294");var r=a("74904"),n=a("27544");let s="githubSvg_Uu4N",i="xSvg_y3PF",o=function(e){return(0,l.jsxs)("svg",{xmlns:"http://www.w3.org/2000/svg",width:"1em",height:"1em",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",...e,children:[(0,l.jsx)("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),(0,l.jsx)("path",{d:"M3 12a9 9 0 1 0 18 0a9 9 0 0 0 -18 0"}),(0,l.jsx)("path",{d:"M3.6 9h16.8"}),(0,l.jsx)("path",{d:"M3.6 15h16.8"}),(0,l.jsx)("path",{d:"M11.5 3a17 17 0 0 0 0 18"}),(0,l.jsx)("path",{d:"M12.5 3a17 17 0 0 1 0 18"})]})},c="authorSocials_rSDt",u="authorSocialLink_owbf",m={twitter:{Icon:function(e){return(0,l.jsx)("svg",{viewBox:"0 0 256 209",width:"1em",height:"1em",xmlns:"http://www.w3.org/2000/svg",preserveAspectRatio:"xMidYMid",...e,children:(0,l.jsx)("path",{d:"M256 25.45c-9.42 4.177-19.542 7-30.166 8.27 10.845-6.5 19.172-16.793 23.093-29.057a105.183 105.183 0 0 1-33.351 12.745C205.995 7.201 192.346.822 177.239.822c-29.006 0-52.523 23.516-52.523 52.52 0 4.117.465 8.125 1.36 11.97-43.65-2.191-82.35-23.1-108.255-54.876-4.52 7.757-7.11 16.78-7.11 26.404 0 18.222 9.273 34.297 23.365 43.716a52.312 52.312 0 0 1-23.79-6.57c-.003.22-.003.44-.003.661 0 25.447 18.104 46.675 42.13 51.5a52.592 52.592 0 0 1-23.718.9c6.683 20.866 26.08 36.05 49.062 36.475-17.975 14.086-40.622 22.483-65.228 22.483-4.24 0-8.42-.249-12.529-.734 23.243 14.902 50.85 23.597 80.51 23.597 96.607 0 149.434-80.031 149.434-149.435 0-2.278-.05-4.543-.152-6.795A106.748 106.748 0 0 0 256 25.45",fill:"#55acee"})})},label:"Twitter"},github:{Icon:function(e){return(0,l.jsx)("svg",{viewBox:"0 0 256 250",width:"1em",height:"1em",...e,className:(0,r.Z)(e.className,s),xmlns:"http://www.w3.org/2000/svg",style:{"--dark":"#000","--light":"#fff"},preserveAspectRatio:"xMidYMid",children:(0,l.jsx)("path",{d:"M128.001 0C57.317 0 0 57.307 0 128.001c0 56.554 36.676 104.535 87.535 121.46 6.397 1.185 8.746-2.777 8.746-6.158 0-3.052-.12-13.135-.174-23.83-35.61 7.742-43.124-15.103-43.124-15.103-5.823-14.795-14.213-18.73-14.213-18.73-11.613-7.944.876-7.78.876-7.78 12.853.902 19.621 13.19 19.621 13.19 11.417 19.568 29.945 13.911 37.249 10.64 1.149-8.272 4.466-13.92 8.127-17.116-28.431-3.236-58.318-14.212-58.318-63.258 0-13.975 5-25.394 13.188-34.358-1.329-3.224-5.71-16.242 1.24-33.874 0 0 10.749-3.44 35.21 13.121 10.21-2.836 21.16-4.258 32.038-4.307 10.878.049 21.837 1.47 32.066 4.307 24.431-16.56 35.165-13.12 35.165-13.12 6.967 17.63 2.584 30.65 1.255 33.873 8.207 8.964 13.173 20.383 13.173 34.358 0 49.163-29.944 59.988-58.447 63.157 4.591 3.972 8.682 11.762 8.682 23.704 0 17.126-.148 30.91-.148 35.126 0 3.407 2.304 7.398 8.792 6.14C219.37 232.5 256 184.537 256 128.002 256 57.307 198.691 0 128.001 0Zm-80.06 182.34c-.282.636-1.283.827-2.194.39-.929-.417-1.45-1.284-1.15-1.922.276-.655 1.279-.838 2.205-.399.93.418 1.46 1.293 1.139 1.931Zm6.296 5.618c-.61.566-1.804.303-2.614-.591-.837-.892-.994-2.086-.375-2.66.63-.566 1.787-.301 2.626.591.838.903 1 2.088.363 2.66Zm4.32 7.188c-.785.545-2.067.034-2.86-1.104-.784-1.138-.784-2.503.017-3.05.795-.547 2.058-.055 2.861 1.075.782 1.157.782 2.522-.019 3.08Zm7.304 8.325c-.701.774-2.196.566-3.29-.49-1.119-1.032-1.43-2.496-.726-3.27.71-.776 2.213-.558 3.315.49 1.11 1.03 1.45 2.505.701 3.27Zm9.442 2.81c-.31 1.003-1.75 1.459-3.199 1.033-1.448-.439-2.395-1.613-2.103-2.626.301-1.01 1.747-1.484 3.207-1.028 1.446.436 2.396 1.602 2.095 2.622Zm10.744 1.193c.036 1.055-1.193 1.93-2.715 1.95-1.53.034-2.769-.82-2.786-1.86 0-1.065 1.202-1.932 2.733-1.958 1.522-.03 2.768.818 2.768 1.868Zm10.555-.405c.182 1.03-.875 2.088-2.387 2.37-1.485.271-2.861-.365-3.05-1.386-.184-1.056.893-2.114 2.376-2.387 1.514-.263 2.868.356 3.061 1.403Z"})})},label:"GitHub"},stackoverflow:{Icon:function(e){return(0,l.jsxs)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 169.61 200",width:"1em",height:"1em",...e,children:[(0,l.jsx)("path",{d:"M140.44 178.38v-48.65h21.61V200H0v-70.27h21.61v48.65z",fill:"#bcbbbb"}),(0,l.jsx)("path",{d:"M124.24 140.54l4.32-16.22-86.97-17.83-3.78 17.83zM49.7 82.16L130.72 120l7.56-16.22-81.02-37.83zm22.68-40l68.06 57.3 11.35-13.51-68.6-57.3-11.35 13.51zM116.14 0l-14.59 10.81 53.48 71.89 14.58-10.81zM37.81 162.16h86.43v-16.21H37.81z",fill:"#f48024"})]})},label:"Stack Overflow"},linkedin:{Icon:function(e){return(0,l.jsx)("svg",{width:"1em",height:"1em",xmlns:"http://www.w3.org/2000/svg",preserveAspectRatio:"xMidYMid",viewBox:"0 0 256 256",...e,children:(0,l.jsx)("path",{d:"M218.123 218.127h-37.931v-59.403c0-14.165-.253-32.4-19.728-32.4-19.756 0-22.779 15.434-22.779 31.369v60.43h-37.93V95.967h36.413v16.694h.51a39.907 39.907 0 0 1 35.928-19.733c38.445 0 45.533 25.288 45.533 58.186l-.016 67.013ZM56.955 79.27c-12.157.002-22.014-9.852-22.016-22.009-.002-12.157 9.851-22.014 22.008-22.016 12.157-.003 22.014 9.851 22.016 22.008A22.013 22.013 0 0 1 56.955 79.27m18.966 138.858H37.95V95.967h37.97v122.16ZM237.033.018H18.89C8.58-.098.125 8.161-.001 18.471v219.053c.122 10.315 8.576 18.582 18.89 18.474h218.144c10.336.128 18.823-8.139 18.966-18.474V18.454c-.147-10.33-8.635-18.588-18.966-18.453",fill:"#0A66C2"})})},label:"LinkedIn"},x:{Icon:function(e){return(0,l.jsx)("svg",{xmlns:"http://www.w3.org/2000/svg",width:"1em",height:"1em",fill:"none",viewBox:"0 0 1200 1227",...e,className:(0,r.Z)(e.className,i),style:{"--dark":"#000","--light":"#fff"},children:(0,l.jsx)("path",{d:"M714.163 519.284 1160.89 0h-105.86L667.137 450.887 357.328 0H0l468.492 681.821L0 1226.37h105.866l409.625-476.152 327.181 476.152H1200L714.137 519.284h.026ZM569.165 687.828l-47.468-67.894-377.686-540.24h162.604l304.797 435.991 47.468 67.894 396.2 566.721H892.476L569.165 687.854v-.026Z"})})},label:"X"}};function h(e){var t;let{platform:a,link:s}=e;let{Icon:i,label:c}=m[t=a]??{Icon:o,label:t};return(0,l.jsx)(n.Z,{className:u,href:s,title:c,children:(0,l.jsx)(i,{className:(0,r.Z)(u)})})}function d(e){let{author:t}=e,a=Object.entries(t.socials??{});return(0,l.jsx)("div",{className:c,children:a.map(e=>{let[t,a]=e;return(0,l.jsx)(h,{platform:t,link:a},t)})})}var g=a("52068");let f={authorImage:"authorImage_XqGP","author-as-h1":"author-as-h1_n9oJ","author-as-h2":"author-as-h2_gXvM",authorDetails:"authorDetails_lV9A",authorName:"authorName_yefp",authorTitle:"authorTitle_nd0D",authorBlogPostCount:"authorBlogPostCount_iiJ5"};function x(e){return e.href?(0,l.jsx)(n.Z,{...e}):(0,l.jsx)(l.Fragment,{children:e.children})}function p(e){let{title:t}=e;return(0,l.jsx)("small",{className:f.authorTitle,title:t,children:t})}function v(e){let{name:t,as:a}=e;return a?(0,l.jsx)(g.Z,{as:a,className:f.authorName,children:t}):(0,l.jsx)("span",{className:f.authorName,children:t})}function j(e){let{count:t}=e;return(0,l.jsx)("span",{className:(0,r.Z)(f.authorBlogPostCount),children:t})}function w(e){let{as:t,author:a,className:n,count:s}=e,{name:i,title:o,url:c,imageURL:u,email:m,page:h}=a,g=h?.permalink||c||m&&`mailto:${m}`||void 0;return(0,l.jsxs)("div",{className:(0,r.Z)("avatar margin-bottom--sm",n,f[`author-as-${t}`]),children:[u&&(0,l.jsx)(x,{href:g,className:"avatar__photo-link",children:(0,l.jsx)("img",{className:(0,r.Z)("avatar__photo",f.authorImage),src:u,alt:i})}),(i||o)&&(0,l.jsxs)("div",{className:(0,r.Z)("avatar__intro",f.authorDetails),children:[(0,l.jsxs)("div",{className:"avatar__name",children:[i&&(0,l.jsx)(x,{href:g,children:(0,l.jsx)(v,{name:i,as:t})}),void 0!==s&&(0,l.jsx)(j,{count:s})]}),!!o&&(0,l.jsx)(p,{title:o}),(0,l.jsx)(d,{author:a})]})]})}},30928:function(e,t,a){a.d(t,{Z:()=>I});var l=a("85893"),r=a("67294"),n=a("74904"),s=a("99757"),i=a("72649"),o=a("1822"),c=a("75700"),u=a("45237"),m=a("52068");function h(e){let{year:t,yearGroupHeadingClassName:a,children:r}=e;return(0,l.jsxs)("div",{role:"group",children:[(0,l.jsx)(m.Z,{as:"h3",className:a,children:t}),r]})}let d=(0,r.memo)(function(e){let{items:t,yearGroupHeadingClassName:a,ListComponent:r}=e;if(!(0,u.L)().blog.sidebar.groupByYear)return(0,l.jsx)(r,{items:t});{let e=(0,c.ci)(t);return(0,l.jsx)(l.Fragment,{children:e.map(e=>{let[t,n]=e;return(0,l.jsx)(h,{year:t,yearGroupHeadingClassName:a,children:(0,l.jsx)(r,{items:n})},t)})})}}),g="sidebar_re4s",f="sidebarItemTitle_pO2u",x="sidebarItemList_Yudw",p="sidebarItem__DBe",v="sidebarItemLink_mo7H",j="sidebarItemLinkActive_I1ZP",w="yearGroupHeading_rMGB",b=e=>{let{items:t}=e;return(0,l.jsx)(c.Ne,{items:t,ulClassName:(0,n.Z)(x,"clean-list"),liClassName:p,linkClassName:v,linkActiveClassName:j})},N=(0,r.memo)(function(e){let{sidebar:t}=e,a=(0,c.cH)(t.items);return(0,l.jsx)("aside",{className:"col col--3",children:(0,l.jsxs)("nav",{className:(0,n.Z)(g,"thin-scrollbar"),"aria-label":(0,o.I)({id:"theme.blog.sidebar.navAriaLabel",message:"Blog recent posts navigation",description:"The ARIA label for recent posts in the blog sidebar"}),children:[(0,l.jsx)("div",{className:(0,n.Z)(f,"margin-bottom--md"),children:t.title}),(0,l.jsx)(d,{items:a,ListComponent:b,yearGroupHeadingClassName:w})]})})});var _=a("5942");let Z="yearGroupHeading_QT03",M=e=>{let{items:t}=e;return(0,l.jsx)(c.Ne,{items:t,ulClassName:"menu__list",liClassName:"menu__list-item",linkClassName:"menu__link",linkActiveClassName:"menu__link--active"})};function k(e){let{sidebar:t}=e,a=(0,c.cH)(t.items);return(0,l.jsx)(d,{items:a,ListComponent:M,yearGroupHeadingClassName:Z})}let C=(0,r.memo)(function(e){return(0,l.jsx)(_.Zo,{component:k,props:e})});function y(e){let{sidebar:t}=e,a=(0,i.i)();return t?.items.length?"mobile"===a?(0,l.jsx)(C,{sidebar:t}):(0,l.jsx)(N,{sidebar:t}):null}function I(e){let{sidebar:t,toc:a,children:r,...i}=e,o=t&&t.items.length>0;return(0,l.jsx)(s.Z,{...i,children:(0,l.jsx)("div",{className:"container margin-vert--lg",children:(0,l.jsxs)("div",{className:"row",children:[(0,l.jsx)(y,{sidebar:t}),(0,l.jsx)("main",{className:(0,n.Z)("col",{"col--7":o,"col--9 col--offset-1":!o}),children:r}),a&&(0,l.jsx)("div",{className:"col col--2",children:a})]})})})}},67984:function(e,t,a){a.d(t,{c:function(){return o}});var l=a(67294),r=a(93934);let n=["zero","one","two","few","many","other"];function s(e){return n.filter(t=>e.includes(t))}let i={locale:"en",pluralForms:s(["one","other"]),select:e=>1===e?"one":"other"};function o(){let e=function(){let{i18n:{currentLocale:e}}=(0,r.Z)();return(0,l.useMemo)(()=>{try{return function(e){let t=new Intl.PluralRules(e);return{locale:e,pluralForms:s(t.resolvedOptions().pluralCategories),select:e=>t.select(e)}}(e)}catch(t){return console.error(`Failed to use Intl.PluralRules for locale "${e}". +Docusaurus will fallback to the default (English) implementation. +Error: ${t.message} +`),i}},[e])}();return{selectMessage:(t,a)=>(function(e,t,a){let l=e.split("|");if(1===l.length)return l[0];l.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 ${l.length}: ${e}`);let r=a.select(t);return l[Math.min(a.pluralForms.indexOf(r),l.length-1)]})(a,t,e)}}}}]); \ No newline at end of file diff --git a/assets/js/21944812.434ec424.js b/assets/js/21944812.434ec424.js new file mode 100644 index 000000000..626594ecd --- /dev/null +++ b/assets/js/21944812.434ec424.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([["9663"],{23077:function(e,n,i){i.r(n),i.d(n,{metadata:()=>o,contentTitle:()=>r,default:()=>u,assets:()=>l,toc:()=>d,frontMatter:()=>a});var o=JSON.parse('{"id":"user/software/desktops/index","title":"Desktops","description":"Solus offers a multitude of desktop environments, ranging from the feature-rich and modern Budgie to the traditional XFCE experience. It is recommended to use the ISO for a specific desktop environment but it is possible to install them afterwards if you wish to do try one out.","source":"@site/docs/user/software/desktops/index.md","sourceDirName":"user/software/desktops","slug":"/user/software/desktops/","permalink":"/docs/user/software/desktops/","draft":false,"unlisted":false,"editUrl":"https://github.com/getsolus/help-center-docs/tree/master/docs/user/software/desktops/index.md","tags":[],"version":"current","lastUpdatedAt":1733757592000,"frontMatter":{"title":"Desktops","summary":"Quick guides on switching between or installing additional Desktop Environments on Solus"},"sidebar":"userSidebar","previous":{"title":"Configuration File Locations","permalink":"/docs/user/software/configuration_files"},"next":{"title":"Development","permalink":"/docs/user/software/development/"}}'),t=i("85893"),s=i("50065");let a={title:"Desktops",summary:"Quick guides on switching between or installing additional Desktop Environments on Solus"},r="Desktop Environments",l={},d=[{value:"Budgie",id:"budgie",level:2},{value:"GNOME Shell",id:"gnome-shell",level:2},{value:"MATE",id:"mate",level:2},{value:"XFCE",id:"xfce",level:2},{value:"Tiling window managers",id:"tiling-window-managers",level:2},{value:"i3",id:"i3",level:3},{value:"Sway",id:"sway",level:3},{value:"Stacking window manager",id:"stacking-window-manager",level:2},{value:"Labwc",id:"labwc",level:3}];function c(e){let n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",p:"p",pre:"pre",...(0,s.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.header,{children:(0,t.jsx)(n.h1,{id:"desktop-environments",children:"Desktop Environments"})}),"\n",(0,t.jsxs)(n.p,{children:["Solus offers a ",(0,t.jsx)(n.a,{href:"https://getsol.us/solus/experiences/",children:"multitude of desktop environments"}),", ranging from the feature-rich and modern Budgie to the traditional XFCE experience. It is recommended to use the ISO for a specific desktop environment but it is possible to install them afterwards if you wish to do try one out."]}),"\n",(0,t.jsx)(n.p,{children:"WARNING: Do NOT attempt to install ANY other desktop environments next to KDE Plasma Desktop. This scenario is NOT supported and you will be told so in no uncertain terms if asking for support."}),"\n",(0,t.jsx)(n.h2,{id:"budgie",children:"Budgie"}),"\n",(0,t.jsx)(n.p,{children:"The flagship desktop environment / experience of Solus is Budgie. If you have installed either our GNOME or XFCE editions, you can try out and install Budgie by running the following command:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"# Do NOT attempt to do this if you are running the KDE Plasma Desktop version of Solus!\nsudo eopkg install -c desktop.budgie\n"})}),"\n",(0,t.jsx)(n.h2,{id:"gnome-shell",children:"GNOME Shell"}),"\n",(0,t.jsx)(n.p,{children:"Solus offers a GNOME Shell experience that ships out-of-the-box with a variety of extensions. If you have installed either our Budgie or XFCE editions, you can try out and install GNOME Shell by running the following commands:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"# Do NOT attempt to do this if you are running the KDE Plasma Desktop version of Solus!\nsudo eopkg install gdm gnome-shell gnome-desktop-branding\n"})}),"\n",(0,t.jsx)(n.h2,{id:"mate",children:"MATE"}),"\n",(0,t.jsx)(n.admonition,{type:"caution",children:(0,t.jsx)(n.p,{children:"We plan to deprecate the MATE Desktop, for a similar experience, consider XFCE."})}),"\n",(0,t.jsxs)(n.p,{children:["Solus offers the MATE desktop environment / experience, tailored to advanced users and older hardware, as well as shipping with our modern menu called ",(0,t.jsx)(n.a,{href:"https://github.com/getsolus/brisk-menu",children:"Brisk Menu"}),". If you have installed either our Budgie or GNOME editions, you can try out and install MATE by running the following command:"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"# Do NOT attempt to do this if you are running the KDE Plasma Desktop version of Solus!\nsudo eopkg install -c desktop.mate\n"})}),"\n",(0,t.jsx)(n.h2,{id:"xfce",children:"XFCE"}),"\n",(0,t.jsx)(n.p,{children:"Solus offers the XFCE desktop environment for users preferring a more lightweight experience. It is recommended for existing MATE users. You can install XFCE with the following command:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"# Do NOT attempt to do this if you are running the KDE Plasma Desktop version of Solus!\nsudo eopkg install -c desktop.xfce\n"})}),"\n",(0,t.jsx)(n.h2,{id:"tiling-window-managers",children:"Tiling window managers"}),"\n",(0,t.jsx)(n.h3,{id:"i3",children:"i3"}),"\n",(0,t.jsx)(n.p,{children:"Solus offers i3 as a tiling window manager. Users wanting to try i3 can install it by running the following command:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"# Do NOT attempt to do this if you are running the KDE Plasma Desktop version of Solus!\nsudo eopkg install i3\n"})}),"\n",(0,t.jsx)(n.p,{children:"If you want to use i3 with support for GNOME Settings Daemon and other GNOME functionality, follow the instructions for installation of GNOME Shell, then choose GNOME+i3 at the login screen to use it."}),"\n",(0,t.jsx)(n.h3,{id:"sway",children:"Sway"}),"\n",(0,t.jsx)(n.p,{children:"Solus offers Sway as a Wayland-only tiling window manager. You can install it with the following command:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"sudo eopkg install sway\n"})}),"\n",(0,t.jsxs)(n.p,{children:["Sway expects users to do some configuration, refer to the ",(0,t.jsx)(n.a,{href:"https://github.com/swaywm/sway/wiki",children:"Sway Wiki"}),"."]}),"\n",(0,t.jsxs)(n.p,{children:["For more information about tiling window managers, click ",(0,t.jsx)(n.a,{href:"https://en.wikipedia.org/wiki/Tiling_window_manager",children:"here"}),"."]}),"\n",(0,t.jsx)(n.h2,{id:"stacking-window-manager",children:"Stacking window manager"}),"\n",(0,t.jsx)(n.h3,{id:"labwc",children:"Labwc"}),"\n",(0,t.jsx)(n.p,{children:"Solus offers Labwc as a Wayland-only stacking window manager. You can install it with the following command:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"sudo eopkg install labwc\n"})}),"\n",(0,t.jsxs)(n.p,{children:["Labwc expects users to do some configuration, refer to the ",(0,t.jsx)(n.a,{href:"https://labwc.github.io/",children:"Labwc wiki"})]}),"\n",(0,t.jsxs)(n.p,{children:["For more information about stacking window managers, click ",(0,t.jsx)(n.a,{href:"https://en.wikipedia.org/wiki/Stacking_window_manager",children:"here"})]})]})}function u(e={}){let{wrapper:n}={...(0,s.a)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(c,{...e})}):c(e)}},50065:function(e,n,i){i.d(n,{Z:function(){return r},a:function(){return a}});var o=i(67294);let t={},s=o.createContext(t);function a(e){let n=o.useContext(s);return o.useMemo(function(){return"function"==typeof e?e(n):{...n,...e}},[n,e])}function r(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:a(e.components),o.createElement(s.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/21944812.d04e0cac.js b/assets/js/21944812.d04e0cac.js deleted file mode 100644 index 18999d018..000000000 --- a/assets/js/21944812.d04e0cac.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[9873],{43042:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>l,contentTitle:()=>a,default:()=>h,frontMatter:()=>t,metadata:()=>r,toc:()=>d});var o=i(85893),s=i(11151);const t={title:"Desktops",summary:"Quick guides on switching between or installing additional Desktop Environments on Solus"},a="Desktop Environments",r={id:"user/software/desktops/index",title:"Desktops",description:"Solus offers a multitude of desktop environments, ranging from the feature-rich and modern Budgie to the traditional XFCE experience. It is recommended to use the ISO for a specific desktop environment but it is possible to install them afterwards if you wish to do try one out.",source:"@site/docs/user/software/desktops/index.md",sourceDirName:"user/software/desktops",slug:"/user/software/desktops/",permalink:"/docs/user/software/desktops/",draft:!1,unlisted:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/software/desktops/index.md",tags:[],version:"current",lastUpdatedAt:1732716912e3,frontMatter:{title:"Desktops",summary:"Quick guides on switching between or installing additional Desktop Environments on Solus"},sidebar:"userSidebar",previous:{title:"Configuration File Locations",permalink:"/docs/user/software/configuration_files"},next:{title:"Development",permalink:"/docs/user/software/development/"}},l={},d=[{value:"Budgie",id:"budgie",level:2},{value:"GNOME Shell",id:"gnome-shell",level:2},{value:"MATE",id:"mate",level:2},{value:"XFCE",id:"xfce",level:2},{value:"Tiling window managers",id:"tiling-window-managers",level:2},{value:"i3",id:"i3",level:3},{value:"Sway",id:"sway",level:3},{value:"Stacking window manager",id:"stacking-window-manager",level:2},{value:"Labwc",id:"labwc",level:3}];function c(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",p:"p",pre:"pre",...(0,s.a)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(n.header,{children:(0,o.jsx)(n.h1,{id:"desktop-environments",children:"Desktop Environments"})}),"\n",(0,o.jsxs)(n.p,{children:["Solus offers a ",(0,o.jsx)(n.a,{href:"https://getsol.us/solus/experiences/",children:"multitude of desktop environments"}),", ranging from the feature-rich and modern Budgie to the traditional XFCE experience. It is recommended to use the ISO for a specific desktop environment but it is possible to install them afterwards if you wish to do try one out."]}),"\n",(0,o.jsx)(n.p,{children:"WARNING: Do NOT attempt to install ANY other desktop environments next to KDE Plasma Desktop. This scenario is NOT supported and you will be told so in no uncertain terms if asking for support."}),"\n",(0,o.jsx)(n.h2,{id:"budgie",children:"Budgie"}),"\n",(0,o.jsx)(n.p,{children:"The flagship desktop environment / experience of Solus is Budgie. If you have installed either our GNOME or XFCE editions, you can try out and install Budgie by running the following command:"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-bash",children:"# Do NOT attempt to do this if you are running the KDE Plasma Desktop version of Solus!\nsudo eopkg install -c desktop.budgie\n"})}),"\n",(0,o.jsx)(n.h2,{id:"gnome-shell",children:"GNOME Shell"}),"\n",(0,o.jsx)(n.p,{children:"Solus offers a GNOME Shell experience that ships out-of-the-box with a variety of extensions. If you have installed either our Budgie or XFCE editions, you can try out and install GNOME Shell by running the following commands:"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-bash",children:"# Do NOT attempt to do this if you are running the KDE Plasma Desktop version of Solus!\nsudo eopkg install gdm gnome-shell gnome-desktop-branding\n"})}),"\n",(0,o.jsx)(n.h2,{id:"mate",children:"MATE"}),"\n",(0,o.jsx)(n.admonition,{type:"caution",children:(0,o.jsx)(n.p,{children:"We plan to deprecate the MATE Desktop, for a similar experience, consider XFCE."})}),"\n",(0,o.jsxs)(n.p,{children:["Solus offers the MATE desktop environment / experience, tailored to advanced users and older hardware, as well as shipping with our modern menu called ",(0,o.jsx)(n.a,{href:"https://github.com/getsolus/brisk-menu",children:"Brisk Menu"}),". If you have installed either our Budgie or GNOME editions, you can try out and install MATE by running the following command:"]}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-bash",children:"# Do NOT attempt to do this if you are running the KDE Plasma Desktop version of Solus!\nsudo eopkg install -c desktop.mate\n"})}),"\n",(0,o.jsx)(n.h2,{id:"xfce",children:"XFCE"}),"\n",(0,o.jsx)(n.p,{children:"Solus offers the XFCE desktop environment for users preferring a more lightweight experience. It is recommended for existing MATE users. You can install XFCE with the following command:"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-bash",children:"# Do NOT attempt to do this if you are running the KDE Plasma Desktop version of Solus!\nsudo eopkg install -c desktop.xfce\n"})}),"\n",(0,o.jsx)(n.h2,{id:"tiling-window-managers",children:"Tiling window managers"}),"\n",(0,o.jsx)(n.h3,{id:"i3",children:"i3"}),"\n",(0,o.jsx)(n.p,{children:"Solus offers i3 as a tiling window manager. Users wanting to try i3 can install it by running the following command:"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-bash",children:"# Do NOT attempt to do this if you are running the KDE Plasma Desktop version of Solus!\nsudo eopkg install i3\n"})}),"\n",(0,o.jsx)(n.p,{children:"If you want to use i3 with support for GNOME Settings Daemon and other GNOME functionality, follow the instructions for installation of GNOME Shell, then choose GNOME+i3 at the login screen to use it."}),"\n",(0,o.jsx)(n.h3,{id:"sway",children:"Sway"}),"\n",(0,o.jsx)(n.p,{children:"Solus offers Sway as a Wayland-only tiling window manager. You can install it with the following command:"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-bash",children:"sudo eopkg install sway\n"})}),"\n",(0,o.jsxs)(n.p,{children:["Sway expects users to do some configuration, refer to the ",(0,o.jsx)(n.a,{href:"https://github.com/swaywm/sway/wiki",children:"Sway Wiki"}),"."]}),"\n",(0,o.jsxs)(n.p,{children:["For more information about tiling window managers, click ",(0,o.jsx)(n.a,{href:"https://en.wikipedia.org/wiki/Tiling_window_manager",children:"here"}),"."]}),"\n",(0,o.jsx)(n.h2,{id:"stacking-window-manager",children:"Stacking window manager"}),"\n",(0,o.jsx)(n.h3,{id:"labwc",children:"Labwc"}),"\n",(0,o.jsx)(n.p,{children:"Solus offers Labwc as a Wayland-only stacking window manager. You can install it with the following command:"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-bash",children:"sudo eopkg install labwc\n"})}),"\n",(0,o.jsxs)(n.p,{children:["Labwc expects users to do some configuration, refer to the ",(0,o.jsx)(n.a,{href:"https://labwc.github.io/",children:"Labwc wiki"})]}),"\n",(0,o.jsxs)(n.p,{children:["For more information about stacking window managers, click ",(0,o.jsx)(n.a,{href:"https://en.wikipedia.org/wiki/Stacking_window_manager",children:"here"})]})]})}function h(e={}){const{wrapper:n}={...(0,s.a)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(c,{...e})}):c(e)}},11151:(e,n,i)=>{i.d(n,{Z:()=>r,a:()=>a});var o=i(67294);const s={},t=o.createContext(s);function a(e){const n=o.useContext(t);return o.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function r(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:a(e.components),o.createElement(t.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/257b9082.7d6673cb.js b/assets/js/257b9082.7d6673cb.js deleted file mode 100644 index 56dcc8447..000000000 --- a/assets/js/257b9082.7d6673cb.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[3192],{31874:(e,n,o)=>{o.r(n),o.d(n,{assets:()=>c,contentTitle:()=>i,default:()=>h,frontMatter:()=>s,metadata:()=>a,toc:()=>l});var t=o(85893),r=o(11151);const s={},i="Containers",a={id:"user/software/development/containers",title:"Containers",description:"Containers are a popular method to run and configure applications in a confined environment without directly installing the application and all its dependencies. Solus provides the following container technologies:",source:"@site/docs/user/software/development/containers.md",sourceDirName:"user/software/development",slug:"/user/software/development/containers",permalink:"/docs/user/software/development/containers",draft:!1,unlisted:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/software/development/containers.md",tags:[],version:"current",lastUpdatedAt:1732716912e3,frontMatter:{},sidebar:"userSidebar",previous:{title:"Development",permalink:"/docs/user/software/development/"},next:{title:"Java",permalink:"/docs/user/software/development/java"}},c={},l=[{value:"Docker",id:"docker",level:2},{value:"Podman",id:"podman",level:2}];function d(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",header:"header",li:"li",p:"p",ul:"ul",...(0,r.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.header,{children:(0,t.jsx)(n.h1,{id:"containers",children:"Containers"})}),"\n",(0,t.jsx)(n.p,{children:"Containers are a popular method to run and configure applications in a confined environment without directly installing the application and all its dependencies. Solus provides the following container technologies:"}),"\n",(0,t.jsx)(n.h2,{id:"docker",children:"Docker"}),"\n",(0,t.jsxs)(n.p,{children:["Docker is a container engine developed by Docker Inc. Solus provides the command line utility ",(0,t.jsx)(n.code,{children:"docker"})," to run and manage docker containers."]}),"\n",(0,t.jsxs)(n.p,{children:["A wide variety of applications are available through the official container registry ",(0,t.jsx)(n.a,{href:"https://hub.docker.com/search?q=",children:"Docker Hub"})]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["Install the docker engine by running ",(0,t.jsx)(n.code,{children:"sudo eopkg it docker"})," (you may also want to install ",(0,t.jsx)(n.code,{children:"docker-compose"}),")"]}),"\n",(0,t.jsxs)(n.li,{children:["Test your installation with ",(0,t.jsx)(n.code,{children:"sudo docker run hello-world"})]}),"\n",(0,t.jsxs)(n.li,{children:["Optional: For sudo-less docker, run ",(0,t.jsx)(n.code,{children:"sudo usermod -aG docker $USER"}),". You must restart for this change to take effect"]}),"\n",(0,t.jsxs)(n.li,{children:["Optional: Allow the docker daemon to start automatically at system startup ",(0,t.jsx)(n.code,{children:"sudo systemctl enable docker"})]}),"\n",(0,t.jsxs)(n.li,{children:["Refer to the official ",(0,t.jsx)(n.a,{href:"https://docs.docker.com/",children:"Docker Docs"})," for further topics"]}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"podman",children:"Podman"}),"\n",(0,t.jsx)(n.p,{children:"Podman is a container manager by Red Hat. Podman's main advantage is the capability of running containers without root permissions, thus limiting the attack surface of the host system. Assuming an attacker will be able to escape a compromised container, they won't have full control of the machine."}),"\n",(0,t.jsxs)(n.p,{children:["Podman's command line interface is 100% compatible with Docker, to the point it's possible to replace the ",(0,t.jsx)(n.code,{children:"docker"})," command with ",(0,t.jsx)(n.code,{children:"podman"})," without any subsequent errors."]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["Install Podman by running ",(0,t.jsx)(n.code,{children:"sudo eopkg it podman"})]}),"\n",(0,t.jsxs)(n.li,{children:["Optionally, add ",(0,t.jsx)(n.code,{children:"alias docker=podman"})," to your initial shell script, should you want to replace Docker with Podman while retaining your typing habits"]}),"\n",(0,t.jsxs)(n.li,{children:["Refer to the official ",(0,t.jsx)(n.a,{href:"https://podman.io/",children:"Podman website"})," for more documentation"]}),"\n"]})]})}function h(e={}){const{wrapper:n}={...(0,r.a)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(d,{...e})}):d(e)}},11151:(e,n,o)=>{o.d(n,{Z:()=>a,a:()=>i});var t=o(67294);const r={},s=t.createContext(r);function i(e){const n=t.useContext(s);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:i(e.components),t.createElement(s.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/257b9082.b2e4019a.js b/assets/js/257b9082.b2e4019a.js new file mode 100644 index 000000000..2c276aa48 --- /dev/null +++ b/assets/js/257b9082.b2e4019a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([["4401"],{49744:function(e,n,t){t.r(n),t.d(n,{metadata:()=>o,contentTitle:()=>a,default:()=>h,assets:()=>l,toc:()=>c,frontMatter:()=>s});var o=JSON.parse('{"id":"user/software/development/containers","title":"Containers","description":"Containers are a popular method to run and configure applications in a confined environment without directly installing the application and all its dependencies. Solus provides the following container technologies:","source":"@site/docs/user/software/development/containers.md","sourceDirName":"user/software/development","slug":"/user/software/development/containers","permalink":"/docs/user/software/development/containers","draft":false,"unlisted":false,"editUrl":"https://github.com/getsolus/help-center-docs/tree/master/docs/user/software/development/containers.md","tags":[],"version":"current","lastUpdatedAt":1733757592000,"frontMatter":{},"sidebar":"userSidebar","previous":{"title":"Development","permalink":"/docs/user/software/development/"},"next":{"title":"Java","permalink":"/docs/user/software/development/java"}}'),r=t("85893"),i=t("50065");let s={},a="Containers",l={},c=[{value:"Docker",id:"docker",level:2},{value:"Podman",id:"podman",level:2}];function d(e){let n={a:"a",code:"code",h1:"h1",h2:"h2",header:"header",li:"li",p:"p",ul:"ul",...(0,i.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.header,{children:(0,r.jsx)(n.h1,{id:"containers",children:"Containers"})}),"\n",(0,r.jsx)(n.p,{children:"Containers are a popular method to run and configure applications in a confined environment without directly installing the application and all its dependencies. Solus provides the following container technologies:"}),"\n",(0,r.jsx)(n.h2,{id:"docker",children:"Docker"}),"\n",(0,r.jsxs)(n.p,{children:["Docker is a container engine developed by Docker Inc. Solus provides the command line utility ",(0,r.jsx)(n.code,{children:"docker"})," to run and manage docker containers."]}),"\n",(0,r.jsxs)(n.p,{children:["A wide variety of applications are available through the official container registry ",(0,r.jsx)(n.a,{href:"https://hub.docker.com/search?q=",children:"Docker Hub"})]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["Install the docker engine by running ",(0,r.jsx)(n.code,{children:"sudo eopkg it docker"})," (you may also want to install ",(0,r.jsx)(n.code,{children:"docker-compose"}),")"]}),"\n",(0,r.jsxs)(n.li,{children:["Test your installation with ",(0,r.jsx)(n.code,{children:"sudo docker run hello-world"})]}),"\n",(0,r.jsxs)(n.li,{children:["Optional: For sudo-less docker, run ",(0,r.jsx)(n.code,{children:"sudo usermod -aG docker $USER"}),". You must restart for this change to take effect"]}),"\n",(0,r.jsxs)(n.li,{children:["Optional: Allow the docker daemon to start automatically at system startup ",(0,r.jsx)(n.code,{children:"sudo systemctl enable docker"})]}),"\n",(0,r.jsxs)(n.li,{children:["Refer to the official ",(0,r.jsx)(n.a,{href:"https://docs.docker.com/",children:"Docker Docs"})," for further topics"]}),"\n"]}),"\n",(0,r.jsx)(n.h2,{id:"podman",children:"Podman"}),"\n",(0,r.jsx)(n.p,{children:"Podman is a container manager by Red Hat. Podman's main advantage is the capability of running containers without root permissions, thus limiting the attack surface of the host system. Assuming an attacker will be able to escape a compromised container, they won't have full control of the machine."}),"\n",(0,r.jsxs)(n.p,{children:["Podman's command line interface is 100% compatible with Docker, to the point it's possible to replace the ",(0,r.jsx)(n.code,{children:"docker"})," command with ",(0,r.jsx)(n.code,{children:"podman"})," without any subsequent errors."]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["Install Podman by running ",(0,r.jsx)(n.code,{children:"sudo eopkg it podman"})]}),"\n",(0,r.jsxs)(n.li,{children:["Optionally, add ",(0,r.jsx)(n.code,{children:"alias docker=podman"})," to your initial shell script, should you want to replace Docker with Podman while retaining your typing habits"]}),"\n",(0,r.jsxs)(n.li,{children:["Refer to the official ",(0,r.jsx)(n.a,{href:"https://podman.io/",children:"Podman website"})," for more documentation"]}),"\n"]})]})}function h(e={}){let{wrapper:n}={...(0,i.a)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(d,{...e})}):d(e)}},50065:function(e,n,t){t.d(n,{Z:function(){return a},a:function(){return s}});var o=t(67294);let r={},i=o.createContext(r);function s(e){let n=o.useContext(i);return o.useMemo(function(){return"function"==typeof e?e(n):{...n,...e}},[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:s(e.components),o.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/2598a3a5.6ed95506.js b/assets/js/2598a3a5.6ed95506.js deleted file mode 100644 index 2d2eb751a..000000000 --- a/assets/js/2598a3a5.6ed95506.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[5951],{70197:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>a,default:()=>h,frontMatter:()=>o,metadata:()=>r,toc:()=>d});var i=n(85893),s=n(11151);const o={title:"Configuration",summary:"Help for configuring MATE Desktop on Solus"},a="Configuration",r={id:"user/editions/mate/configuration",title:"Configuration",description:"System",source:"@site/docs/user/editions/mate/configuration.md",sourceDirName:"user/editions/mate",slug:"/user/editions/mate/configuration",permalink:"/docs/user/editions/mate/configuration",draft:!1,unlisted:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/editions/mate/configuration.md",tags:[],version:"current",lastUpdatedAt:1732716912e3,frontMatter:{title:"Configuration",summary:"Help for configuring MATE Desktop on Solus"},sidebar:"userSidebar",previous:{title:"MATE",permalink:"/docs/user/editions/mate/"},next:{title:"Tips and Tricks",permalink:"/docs/user/editions/mate/tips-and-tricks"}},c={},d=[{value:"System",id:"system",level:2},{value:"Date and time",id:"date-and-time",level:3},{value:"Default applications",id:"default-applications",level:3},{value:"Displays",id:"displays",level:2},{value:"Keyboard layout",id:"keyboard-layout",level:2},{value:"IBus",id:"ibus",level:3},{value:"Mouse and touchpad",id:"mouse-and-touchpad",level:2},{value:"Mouse",id:"mouse",level:3},{value:"Touchpad",id:"touchpad",level:3},{value:"Networking",id:"networking",level:2},{value:"Non-hidden network",id:"non-hidden-network",level:3},{value:"Hidden network",id:"hidden-network",level:3},{value:"Sound and sound devices",id:"sound-and-sound-devices",level:2},{value:"Settings",id:"settings",level:3},{value:"Users",id:"users",level:2},{value:"Adding a user",id:"adding-a-user",level:3},{value:"Removing a user",id:"removing-a-user",level:3},{value:"User interface",id:"user-interface",level:2},{value:"Desktop background",id:"desktop-background",level:3},{value:"Desktop icons",id:"desktop-icons",level:3},{value:"Workspaces",id:"workspaces",level:2},{value:"Keyboard shortcuts",id:"keyboard-shortcuts",level:3},{value:"Workspaces configuration",id:"workspaces-configuration",level:3}];function l(e){const t={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",img:"img",li:"li",p:"p",ul:"ul",...(0,s.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(t.header,{children:(0,i.jsx)(t.h1,{id:"configuration",children:"Configuration"})}),"\n",(0,i.jsx)(t.h2,{id:"system",children:"System"}),"\n",(0,i.jsx)(t.h3,{id:"date-and-time",children:"Date and time"}),"\n",(0,i.jsx)(t.p,{children:'Using MATE, there are a couple of different ways to change the date and time. You can right click on the time in the bottom panel and click on "Preferences".'}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"MATE Date and Time Right-Click Menu",src:n(14205).Z+"",width:"195",height:"298"})}),"\n",(0,i.jsx)(t.p,{children:"This opens the Clock Preferences window and allows you to show the date, seconds or use 24 hour time."}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"MATE Clock Preferences",src:n(87653).Z+"",width:"375",height:"367"})}),"\n",(0,i.jsx)(t.p,{children:'To change the time, click on "Time Settings" at the bottom of this window.'}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"MATE Time Settings",src:n(11410).Z+"",width:"459",height:"355"})}),"\n",(0,i.jsx)(t.p,{children:'Once you have the correct time, you can click on "Set System Time".'}),"\n",(0,i.jsx)(t.p,{children:'Alternatively, if you wish to change your timezone, open the Brisk Menu and then click on "Administration" followed by "Time and Date". Click on "Unlock" and input your user password so that you can alter the time zone.'}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"MATE Timezone Settings",src:n(89206).Z+"",width:"496",height:"380"})}),"\n",(0,i.jsx)(t.h3,{id:"default-applications",children:"Default applications"}),"\n",(0,i.jsx)(t.p,{children:'Using MATE, open the Brisk Menu and click on "Preferences" and then on "Preferred Applications".'}),"\n",(0,i.jsx)(t.p,{children:"In this section you will need to click one of the five tabs at the top to find the category you wish to change. For most categories, you will need to have installed alternative applications before you can change the default settings. For instance, if you wish to change the default image viewer from Eye of MATE to GIMP then you must first install GIMP (available in the Software Center)."}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"MATE Preferred Applications",src:n(33340).Z+"",width:"399",height:"355"})}),"\n",(0,i.jsx)(t.p,{children:'You can specify default applications for individual file types by right clicking on a file and then clicking on "Open with other Application...".'}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"MATE File Context Menu",src:n(32077).Z+"",width:"302",height:"384"})}),"\n",(0,i.jsx)(t.p,{children:'Next, select the application you wish to use and make sure "Remember this application for "your file type" files" is ticked. Finish by clicking "Open". In the future, all files with the same file type will open with the same application.'}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"MATE Application Selection",src:n(48197).Z+"",width:"426",height:"501"})}),"\n",(0,i.jsx)(t.h2,{id:"displays",children:"Displays"}),"\n",(0,i.jsx)(t.p,{children:'With MATE, open the Brisk Menu and click on "Preferences" and then on "Displays".'}),"\n",(0,i.jsx)(t.p,{children:'This opens the Monitor Preferences window and your display(s) will be represented by 1 or more colored boxes. Click on the individual display you wish to configure. You will now be able to select if you wish to set this monitor as the primary display, mirror all displays by turning on "Same image in all monitors", or turn it off. This window also gives you the ability to change the aspect ratio, rotate the display, and to change the resolution.'}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"MATE Monitor Preferences",src:n(95067).Z+"",width:"556",height:"363"})}),"\n",(0,i.jsx)(t.p,{children:"You can arrange your displays by dragging the colored boxes to your preferred positions, as shown below."}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"MATE Monitor Arrangement",src:n(5229).Z+"",width:"556",height:"363"})}),"\n",(0,i.jsx)(t.p,{children:'Click "Apply" once you are happy with your changes. If you would like to apply the changes to all the user accounts on your system, click on "Apply system-wide". You will be shown a message asking if the display looks OK, if it does, click on "Keep This Configuration" within 30 seconds.'}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"MATE Confirm Monitor Preferences",src:n(572).Z+"",width:"483",height:"146"})}),"\n",(0,i.jsx)(t.h2,{id:"keyboard-layout",children:"Keyboard layout"}),"\n",(0,i.jsx)(t.p,{children:'To change your keyboard layout in MATE, open the Brisk Menu and click on "Preferences" and then on "Keyboard". This will open the Keyboard Preferences window, now click on the "Layouts" tab.'}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"MATE Keyboard Preferences",src:n(91066).Z+"",width:"452",height:"527"})}),"\n",(0,i.jsx)(t.p,{children:'To add a layout, click on the "+ Add..." button. The 2 tabs at the top of the chooser window give you the option to find your layout by country or by language. The preview gives you a graphical representation of each layout. Once you are happy with your selection, click on "+ Add".'}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"MATE Choose Keyboard Layout",src:n(46721).Z+"",width:"800",height:"509"})}),"\n",(0,i.jsx)(t.p,{children:'You can remove a keyboard layout by selecting one of the items in your layouts list and then clicking the "- Remove" button.'}),"\n",(0,i.jsx)(t.p,{children:"If you wish to use multiple keyboard layouts, you can switch between them by left clicking on the keyboard layout icon shown in the system tray. The icon will automatically appear when you have 2 or more keyboard layouts selected. A right click allows you to open the keyboard preferences window and to see the graphical view of your current layout."}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"MATE Keyboard Indicator",src:n(89990).Z+"",width:"370",height:"141"})}),"\n",(0,i.jsx)(t.p,{children:'To enable keyboard shortcuts for easy switching, re-open the Keyboard Preferences window and open the "Layouts" tab again. Now click on the "Options..." button. This will open a detailed options list, look for and click on "Switching to another layout". Select one or more of the available keyboard shortcuts and then finish by clicking "X Close".'}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"MATE Keyboard Layout Shortcuts",src:n(19720).Z+"",width:"552",height:"425"})}),"\n",(0,i.jsx)(t.h3,{id:"ibus",children:"IBus"}),"\n",(0,i.jsx)(t.p,{children:'By default, IBus needs to be started in MATE before it can be used. Open the Brisk Menu, click on "Preferences" and then on "IBus Preferences". You will be asked if you wish to start the IBus daemon, click "Yes".'}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"MATE IBus Starting Daemon",src:n(29608).Z+"",width:"419",height:"111"})}),"\n",(0,i.jsx)(t.p,{children:'If you wish to have the IBus daemon start automatically every time you start Solus MATE, Open the Brisk Menu, click on "Preferences" and then on "Startup Applications". Under the Startup Programs tab, click on "+ Add".'}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"MATE Startup Applications",src:n(61690).Z+"",width:"468",height:"379"})}),"\n",(0,i.jsxs)(t.p,{children:["In the Command box, you will need to write ",(0,i.jsx)(t.code,{children:"ibus-daemon --xim"}),'. If you wish, you can also fill in a Name and Comment but these are not compulsory. Once you are happy with your inputs, click the "+ Add" button. IBus will now run each time you boot your computer.']}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"MATE Add IBus Startup Entry",src:n(88955).Z+"",width:"372",height:"177"})}),"\n",(0,i.jsxs)(t.p,{children:["If you need an additional IBus IME for your language see: ",(0,i.jsx)(t.a,{href:"/docs/user/software/localization/ibus/",children:"IBus"})]}),"\n",(0,i.jsxs)(t.p,{children:["Finish by closing the IBus Preferences window. You can now switch between your layouts by using the keyboard shortcut ",(0,i.jsx)(t.code,{children:"Super + Space"}),"."]}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"MATE IBus Keyboard Shortcut",src:n(57540).Z+"",width:"142",height:"101"})}),"\n",(0,i.jsx)(t.p,{children:"Or by left clicking on the keyboard layout icon shown in the system tray and selecting the layout you wish to use."}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"MATE Bottom Panel IBus",src:n(31132).Z+"",width:"239",height:"207"})}),"\n",(0,i.jsx)(t.h2,{id:"mouse-and-touchpad",children:"Mouse and touchpad"}),"\n",(0,i.jsx)(t.p,{children:'With MATE, open the Brisk Menu and click on "Preferences" and then on "Mouse". You can toggle between the mouse and touchpad settings using the tabs at the top of the Mouse Preferences window. Click "Close" once you have finished making changes.'}),"\n",(0,i.jsx)(t.h3,{id:"mouse",children:"Mouse"}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"MATE Mouse Settings",src:n(39667).Z+"",width:"502",height:"611"})}),"\n",(0,i.jsx)(t.p,{children:"For mice, you can set:"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:"Left-handed or right-handed. This will change your primary button."}),"\n",(0,i.jsx)(t.li,{children:"Locate the pointer when the Control key is pressed."}),"\n",(0,i.jsx)(t.li,{children:"Mouse speed and sensitivity."}),"\n",(0,i.jsx)(t.li,{children:"Drag and Drop threshold. This is designed to prevent accidental dragging and dropping by setting the distance required to initiate a drag."}),"\n",(0,i.jsx)(t.li,{children:"Double click timeout. The length of time between 2 mouse clicks for it to register as a double click."}),"\n"]}),"\n",(0,i.jsx)(t.h3,{id:"touchpad",children:"Touchpad"}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"MATE Touchpad Settings",src:n(92324).Z+"",width:"502",height:"605"})}),"\n",(0,i.jsx)(t.p,{children:"For touchpads, you can set:"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:"Enabling / disabling of the touchpad."}),"\n",(0,i.jsx)(t.li,{children:"Enabling / disabling of the touchpad whilst typing."}),"\n",(0,i.jsx)(t.li,{children:"Enabling / disabling of mouse clicks with the touchpad."}),"\n",(0,i.jsx)(t.li,{children:"Two and three finger click emulation."}),"\n",(0,i.jsx)(t.li,{children:"Various edge and two finger scrolling options."}),"\n",(0,i.jsx)(t.li,{children:'Enabling / disabling "natural scrolling" (reversed scrolling direction).'}),"\n",(0,i.jsx)(t.li,{children:"Touchpad speed and sensitivity."}),"\n"]}),"\n",(0,i.jsx)(t.h2,{id:"networking",children:"Networking"}),"\n",(0,i.jsx)(t.p,{children:'With MATE, you can manage your network settings by left or right clicking on the network icon in the bottom panel system tray. A left click will bring up any wireless or wired connections currently available whilst a right click allows you to disable networking, view your current connection information and to create new connections and networks by clicking "Edit Connections...".'}),"\n",(0,i.jsx)(t.h3,{id:"non-hidden-network",children:"Non-hidden network"}),"\n",(0,i.jsx)(t.p,{children:'To connect to a network, left click on the network icon in the system tray. This will show you a selection of the networks currently available and you may need to click on "More networks" to find the one you want.'}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"MATE Networking Applet",src:n(35811).Z+"",width:"520",height:"475"})}),"\n",(0,i.jsx)(t.p,{children:'You may now be prompted to authenticate with the network. Type in your password and then click "Connect".'}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"MATE Network Authentication",src:n(21908).Z+"",width:"490",height:"254"})}),"\n",(0,i.jsx)(t.p,{children:"If your password is correct, you will now be authenticated with the network."}),"\n",(0,i.jsx)(t.p,{children:'Should you wish to disconnect from a network, left click on the network icon again and then click on "Disconnect" underneath the network you wish to leave.'}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"MATE Disconnect from Network",src:n(56120).Z+"",width:"283",height:"169"})}),"\n",(0,i.jsx)(t.h3,{id:"hidden-network",children:"Hidden network"}),"\n",(0,i.jsx)(t.p,{children:'To connect to a hidden network, left click on the network icon in the system tray and then on "Connect to Hidden Wi-Fi Network...". You will now be asked for the network name and type of security (if any).'}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"MATE Hidden Network",src:n(225).Z+"",width:"490",height:"247"})}),"\n",(0,i.jsx)(t.p,{children:"If the network is found and has a password, you will be prompted to authenticate with the network."}),"\n",(0,i.jsx)(t.h2,{id:"sound-and-sound-devices",children:"Sound and sound devices"}),"\n",(0,i.jsx)(t.p,{children:"To alter the volume in MATE, left click on the speaker icon in the bottom panel system tray and then drag the volume slider with your mouse."}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"MATE Volume Control",src:n(68146).Z+"",width:"71",height:"193"})}),"\n",(0,i.jsx)(t.h3,{id:"settings",children:"Settings"}),"\n",(0,i.jsx)(t.p,{children:'You can access sound settings, including individual application volume controls, and a simple speaker test by right clicking on the speaker icon in the bottom panel system tray and then clicking on "Sound Preferences". Alternatively, you can open the Brisk Menu and then click on "Preferences" followed by "Sound".'}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"MATE Sound Applet",src:n(13815).Z+"",width:"219",height:"113"})}),"\n",(0,i.jsx)(t.p,{children:"This will open the Sound Preferences window as shown below."}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"MATE Sound Preferences",src:n(90751).Z+"",width:"550",height:"423"})}),"\n",(0,i.jsx)(t.h2,{id:"users",children:"Users"}),"\n",(0,i.jsx)(t.p,{children:'To add and remove users with MATE, open the Brisk Menu and click on "Administration" and then on "Users and Groups".'}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"MATE Users and Groups",src:n(92617).Z+"",width:"652",height:"431"})}),"\n",(0,i.jsx)(t.h3,{id:"adding-a-user",children:"Adding a user"}),"\n",(0,i.jsx)(t.p,{children:'To add a user, click the "+ Add" button underneath the list of users. You will be asked to input your password before you can make changes.'}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"MATE New User",src:n(65545).Z+"",width:"307",height:"540"})}),"\n",(0,i.jsx)(t.p,{children:'Fill in the required items and then finish adding the new user by clicking "OK" in the bottom right corner.'}),"\n",(0,i.jsx)(t.h3,{id:"removing-a-user",children:"Removing a user"}),"\n",(0,i.jsx)(t.p,{children:'To remove a user, open the User Settings window and then click on the user you wish to remove. Now click on the "- Delete" button underneath the list of users.'}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"MATE User List",src:n(43845).Z+"",width:"652",height:"431"})}),"\n",(0,i.jsx)(t.p,{children:"Upon clicking to remove the user, you will be given the option to keep their files, delete their files, or cancel the removal of the user\u2019s account."}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"MATE Keep Files Prompt",src:n(2390).Z+"",width:"540",height:"203"})}),"\n",(0,i.jsx)(t.h2,{id:"user-interface",children:"User interface"}),"\n",(0,i.jsx)(t.h3,{id:"desktop-background",children:"Desktop background"}),"\n",(0,i.jsx)(t.p,{children:'If you wish to change the MATE desktop background, simply right click anywhere on the desktop and select "Change Desktop Background".'}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"MATE Background Right Click Menu",src:n(25408).Z+"",width:"261",height:"254"})}),"\n",(0,i.jsx)(t.p,{children:'Alternatively, open the Brisk Menu and click on "Preferences" and then on "Appearance". Click on the "Background" tab at the top if it isn\'t already selected.'}),"\n",(0,i.jsx)(t.p,{children:'In this section, you can choose between Solus wallpapers, solid colors, gradients or using your own pictures by clicking "Add". After choosing, click "Close".'}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"MATE Desktop Background Selection",src:n(46964).Z+"",width:"785",height:"536"})}),"\n",(0,i.jsx)(t.h3,{id:"desktop-icons",children:"Desktop icons"}),"\n",(0,i.jsx)(t.p,{children:'MATE has desktop icons enabled by default. If you wish to disable or re-enable them, open the Brisk Menu, click on "Preferences" and then on "MATE Tweak". You can then toggle them on and off by clicking "Show Desktop Icons" under the Desktop section.'}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"MATE Tweak Tool",src:n(88409).Z+"",width:"626",height:"599"})}),"\n",(0,i.jsx)(t.p,{children:"You may now add things to your Desktop. This can be done by dragging an item onto the Desktop, right clicking an icon and selecting Copy to / Move to Desktop or by opening the Caja file manager and then moving the files you want to the Desktop folder (as shown in the image below)."}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"MATE Desktop Folder",src:n(67887).Z+"",width:"803",height:"581"})}),"\n",(0,i.jsx)(t.h2,{id:"workspaces",children:"Workspaces"}),"\n",(0,i.jsxs)(t.p,{children:["In MATE, workspaces are enabled by default. You can move between workspaces by using the keyboard shortcuts ",(0,i.jsx)(t.code,{children:"Ctrl + Alt + Left"})," and ",(0,i.jsx)(t.code,{children:"Ctrl + Alt + Right"}),"."]}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"MATE Workspace Switching",src:n(43433).Z+"",width:"242",height:"93"})}),"\n",(0,i.jsx)(t.p,{children:'To send an application to a different workspace, right click on the applications titlebar and then use the "Move to Another Workspace" option or "Move to Workspace Right".'}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"MATE Workspace Menu",src:n(86624).Z+"",width:"411",height:"385"})}),"\n",(0,i.jsx)(t.p,{children:'One of the easiest ways to view and manage your workspaces is by using the Workspace Switcher. Right click inside the bottom panel and then click on "+ Add to Panel...".'}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"MATE Open Panel Configuration",src:n(23084).Z+"",width:"177",height:"228"})}),"\n",(0,i.jsx)(t.p,{children:'Towards the bottom of the list you will find the Workspace Switcher. Click on it and then finish by clicking "+ Add".'}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"MATE Add Applet to Panel",src:n(87666).Z+"",width:"512",height:"351"})}),"\n",(0,i.jsx)(t.p,{children:"You should now be able to see 4 slightly darker boxes to the left of your MATE system tray in the bottom panel. The workspace you are currently viewing will be highlighted in blue."}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"MATE Workspace Switcher",src:n(77967).Z+"",width:"265",height:"48"})}),"\n",(0,i.jsx)(t.p,{children:"In addition to using keyboard shortcuts, you will now be able to switch workspaces by clicking on them in the bottom panel. You can also drag one workspace onto another in the bottom panel which will move the current active application to the new workspace."}),"\n",(0,i.jsx)(t.h3,{id:"keyboard-shortcuts",children:"Keyboard shortcuts"}),"\n",(0,i.jsx)(t.p,{children:"MATE provides a variety of keyboard shortcuts for workspaces. By default, the keyboard shortcuts for switching directly to a certain workspace are disabled."}),"\n",(0,i.jsx)(t.p,{children:'To enable these and to also view all other available shortcuts open the Brisk Menu and click on "Preferences" and then on "Keyboard Shortcuts". The workspace shortcuts are listed under Windows Management.'}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"MATE Workspace Keyboard Shortcuts",src:n(63008).Z+"",width:"626",height:"408"})}),"\n",(0,i.jsx)(t.h3,{id:"workspaces-configuration",children:"Workspaces configuration"}),"\n",(0,i.jsx)(t.p,{children:'By default, MATE provides you with 4 workspaces. If you would like to have more, less or change their names you must first add the Workspace Switcher to your bottom panel, as detailed above. You\'ll then be able to right click on the Workspace Switcher and select "Preferences".'}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"MATE Open Switcher Preferences",src:n(5070).Z+"",width:"203",height:"228"})}),"\n",(0,i.jsx)(t.p,{children:'Use the plus and minus icons to add or remove workspaces. You can rename workspaces by double clicking on the current names and typing in an alternative. Click "X Close" once you are happy with your changes.'}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"MATE Workspace Switcher Preferences",src:n(3466).Z+"",width:"367",height:"409"})})]})}function h(e={}){const{wrapper:t}={...(0,s.a)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(l,{...e})}):l(e)}},67887:(e,t,n)=>{n.d(t,{Z:()=>i});const i=n.p+"assets/images/caja-desktop-folder-4165fea2b0afc876931a10dbeb707384.jpg"},25408:(e,t,n)=>{n.d(t,{Z:()=>i});const i=n.p+"assets/images/mate-background-right-click-0edaca8eb885eb54466e0a358d0f06ea.jpg"},46964:(e,t,n)=>{n.d(t,{Z:()=>i});const i=n.p+"assets/images/mate-background-selection-fefc0656871c76fa23c620d99521a0ef.jpg"},31132:(e,t,n)=>{n.d(t,{Z:()=>i});const i=n.p+"assets/images/mate-bottom-panel-ibus-left-click-016e725ce808036efb8bc77bd7fb47d8.jpg"},89990:(e,t,n)=>{n.d(t,{Z:()=>i});const i=n.p+"assets/images/mate-bottom-panel-keyboard-22cf218bfdf946e6c10250af144d2166.jpg"},35811:(e,t,n)=>{n.d(t,{Z:()=>i});const i=n.p+"assets/images/mate-bottom-panel-network-left-click-d3520a23fb573b5b52700f97306190a9.jpg"},23084:(e,t,n)=>{n.d(t,{Z:()=>i});const i=n.p+"assets/images/mate-bottom-panel-right-click-83df358e1390b363d6ae99f7465d006f.jpg"},13815:(e,t,n)=>{n.d(t,{Z:()=>i});const i=n.p+"assets/images/mate-bottom-panel-sound-right-click-696d602e3df72f0463e5984e82964a20.jpg"},87653:(e,t,n)=>{n.d(t,{Z:()=>i});const i=n.p+"assets/images/mate-clock-preferences-29e68150fa5526f0fbaab28c6f0ad6c2.jpg"},65545:(e,t,n)=>{n.d(t,{Z:()=>i});const i=n.p+"assets/images/mate-create-new-user-00e085b06fb8c6899a23f90d14b50a29.jpg"},88955:(e,t,n)=>{n.d(t,{Z:()=>i});const i=n.p+"assets/images/mate-ibus-add-startup-4f4ef3cf4e94656d727ff93c4e299432.jpg"},57540:(e,t,n)=>{n.d(t,{Z:()=>i});const i="data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEASABIAAD/2wBDAAIBAQEBAQIBAQECAgICAgQDAgICAgUEBAMEBgUGBgYFBgYGBwkIBgcJBwYGCAsICQoKCgoKBggLDAsKDAkKCgr/2wBDAQICAgICAgUDAwUKBwYHCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgr/wAARCABlAI4DAREAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD67+MHxXi8TvLGsnB7GvzKhC0UfoEYRppu543rDWM0TCVl59e1YYqDmrnJUSZj6XqdhaXgRpeDxzXnxU07HMrKVjorbVtORxunz75rdRlKNiJKKZm+I9V04OJFnHX1rhlBwncxUvfsV7bXtNKjfOM45rRKR07WHNrunDJ80YPsKicJGnMiG812w8khZgD2yOtDhpsU5eY3SdVsribc9xhQfzpcktkiG77G6ms6aq5FwPl6VsqLRvGKtqzU0nVjqi+RYxyTug5WGMsfyFOMJ7FqSSOq+D2m6N8QfHkXgzUZ7mFnUsUjgzKQCMhVJGT1/wDriu2GFquOi3NqbjBc9z70+H+uaJoPge1sNKsGkjhh2wtM4SRnXjaygfKeD6j601hq1Km1y6nDXnCvXu52R5r8TvHmr2dxc6xqdrEJopQRZIAFdPlyNynBIHIOBycV8zOnjIYlznofU4WOC+rqnTldHceB/jFDregf2dqrpBLb2Ilvba0dGCyFVwisfUkjkc4r36dWdWg4PseHi8JTp1lUW7djxvxn4b8NeLvGF4/iXxjd2ltOrXGILwpIskakxqHH3QWxnaBk4Oa8epg4w1n1Pchjpwgo0lfoW/FHib4ceD/C0d5/puqXKqkSXU87SSMcjCrg7jx3JP4UUeSC0MpKtWm+Z6HQfDjUpJtP+1SaetszrxE775Nvbd1AP0Jr1aPM1dnhYtp1LI+FvGWrtp9xIXYYyc8161NXiXKopRPoDwR+w78IviB4D8PeJrzxB4yN3q+hWN/dx6feWiRQ+fEHJHmQ/dBzxlmAx1r9GwXCGW4nBU6s5TvKKb1W7Sf8p8rXzfE060oJKybXXv6kr/8ABND4Mt/pH9q/EYNsL7Bqul5zuxt/1WM4+brjHfPFavgXJ2/jn98f/kTlea4lu9l+P+ZaH/BN/wCEETFF1v4hMAzqG/tTTcEKMg/6nox4HfPUAc1UeB8oj9uf3x/+RB5riG72X4/5kc//AATV+DV6BHNrPxDUM8YLf2ppvy7hkk/uTwvQ9+fl3Dms58BZNN3c5/fH/wCRM3mVdu9l+P8AmVV/4Jj/AAXSHeNY+JOfK37Dq2l7s7tuz/VYzj5uuMd88ULgLJkrc8/vj/8AIl/2riF0X4/5kjf8EyPgurMg1/4jMA0ihhqumchRkEZh6N0HfP3go5o/1CyZ/bn98f8A5Er+18T2X4/5gP8AgmP8FZHCtrvxFUM8YZjqum4AYZYnEPROjd8/dDDmj/UPJ7W55/fH/wCRB5vimrWX4/5lvw1/wTG+BV/q1rpFz4p+INmZ9pIl1Gw4HmbSMpbsN3Q/Rh7gTU4GyilRlJTnon1j/wDIjhm2JWll+P8Amd+P+CQP7Oo/5qT8QD9dUsf/AJDrxf8AVrL/AOaX3r/I3/tfE2tZfj/mXvD/APwSk+B3hXU4da8O/Fn4i2d5BIHhurfWLNXQ+xFpTjw3gItNSlp5r/IHm2Ias4r8f8z0/Q/2V/DekFJLz4jeKdUkh2mCfVprOaWIgDlX+zBs8Z612RynDx2k/wAP8jCWNqSVuVL0v/mbUnwN0KSNoj4o1oB87issAJJ7/wCq6055Vh6is5P8P8jKOJnF3/z/AMzn/FH7IfgTxdE8OqeMfEgEihSY7m26f8CgNedU4Wy+rK8pS+9f/Ino0M8xeHjaMY/c/wDMi0r9jn4e6FFdJo3i7xJbNdxqryRXVvuUrjDDMGC2RnJzVw4Zy+Gzl96/yHVz3GVrcyjp5P8AzMbWf2A/hfrciTXXxD8Yo0aBAYr60GVxjnNsc/175rKtwrl1f4pS+9f/ACJrR4jxtBWjGP3P/M80/a2+AfhH4CeBvD/jHw/4s8Q3k664unRW1/eWxibzIZpN5AiTLr5QAOcYLcHgj5/OuG8Fl2GjVoyk25JatWtZvol2PVyzO8Tja0qdSKStfS990u77i/BG7WbS3ubmVrh5F3NJNKZTnPT+6PoAK8qMFGO50TTqSPgz4rateRq8+8kV3UZWdrGc1yo/Rj9mCYT/AAW8FSll3P8ADrQWI8wkjNs3UdB9ep5z0FfuGWf8iyh/gj/6Sj4bFa4mfq/zPQri4gtIHurqZI4o0LySSMAqKBkkk9AB3rtMD80f2nv+Cvfxp+PviXUfhn/wTnv9M0Hwnp1zJZ6n8btc01b0X8yErImi2b4jnRWBU3c2YmIbYjABz8xnnFGDyd+yS56nZdPV9PTc/T+B/C3OuMYrEyfscNf42ruVt+SOl/NtpebaaPCNC/ZB8W/tM+IHX4m/GT4rfEzUgRJdX3if4j6hFbWu4/wxW0sMEKZziNU7HAODX5LxJ4rVMioKti68aSl8MYxTlL0Tu35vRK6u1c/a63hf4bcM4RTzCMqj6c05czflGDiv0XVnqfhb/glZ8cvhYia3+zF+2R45+HOrQgNDBpnjzUr7TncHjzrW+86Kdf8AZZPyr4zL/pGXrpToznDzUE//ACVpfiz4DNsi8NMVFxw2HrUX0cZKX3xnKV/RSXqev/Av/go9+0x+zP8AEvRf2dv+CqPg/S7S38QXosPBfxy8NQeVour3JYrHbahHkrp91JjKnIjfOAEwSf37hDj7h/jOhfBztUSvKEtJLzXddLrQ/Ic6yR5VV/d1PaU3tKzT9JRez9HJdpPU+9IpY54xLE4ZWGQR3r7Y8IbpQX/hYOjkqufLkwShzjzbfoegHTg8njHQ1liP92n6P8hr4kesV8obhQAUAFABQAUAFAHzr/wUtk8v4NeG9um/a3bxzarHDgn5vsl3zwD/AIV4HEcefAxX95fkz2ck/wB7l/hf5o5P4XyvFpaR2mjrbp5Iw0kuWb8q+FrU6iSPpabhKTSPiX4ueFra30uXzAC2wk8dK2oSc2mZ4mMldH3z+zArJ8EvBMYLbV+HmhBQWG3/AI9j0HXPTOeOmOhr91yz/kWUP8Ef/SUfB4j/AHifq/zPkL/guz+0b4hsvCHg79hP4e69cafffFmS6uPG1/YzFJrXwvaBPtUSsvMbXUssVsG/uGYEc1xcQ5qsnyueIXxbR9Xt92/yPsPDzhV8Y8VUcvl/D1lUa6Qjv6X0in0bTPkfR5NI8OaPa+H9AsILOxsrdILS0t0CxwxqAqooHQAADFfgVTEVK1Rzm7t6t+Z/oBhsvoYShGhRiowikkloklokvJH3Z+yl4e0rQvgrok+mhGfULcXl3MoGZJJOTnHUqMJ9EFfyHx3mOKzPjPEus3anLkiu0Y6aervL1Z/N/G+Lr4niKuqj+B8qXZR0/Hf5nrmnKAoqMujsfB1mUPjB8Evhv+0Z8Jte+CPxc8ORar4d8Sac9nqdnKOSrdHQ/wAEiMFdHHKuqsOQK/R+HcfjMpx1LGYWXLUg7p/5909muq0PHxdOFam4TV0zzD/gkN8cPiOnhrxt+w/8fPEkureOPgX4k/4R6bWLonztX0h41m0u/fPO6W1ZQckktESSSc1/fGQZvSz7JqGPpqyqRTt2ezXyaa+R+a4qg8PXlTfQ+y9Jb/i4GkLu6pIcebjP72D+Hv8AXt0/ir0sR/u8/R/kYL4ker18qbhQB86ftSf8FNPgf+yX8VoPg7488B+NtW1e50qPUIj4b0u2uIzE7SKB+8uY23Dy2J+XGMc0sO/rMqij9h2f3J/qvmXVg6MISl9rVfJtfoS/AT/gpL8Hv2hNO8W6p4Z+GvjzSYvB2gSavqJ8QaNbwefCgYlIdlw4Z8KeG2j3rXE03hcFPFSfuxaTS31Ten3d+xnQf1jG08LH4p7Ppulr/wCBLp3ND4Kf8FDPgX8efgB4t/aK8F6V4gi0rwXHcSa1pd/aW6X4WKDziURJ2QhlyFJcZKkHGKMZSlgqEK09YydlbvzKNne210/RrroLCyWLxTw8dJKz17O9n17NeqPSPgP8Z/C/7Q3wj0P4z+C7C/tdL1+1M9nBqkSJcIodkw6xu6g5U9GPGKvE4eeFq+znvaL0/vJSX4PUzoV4YiHPHa7X/gLaf4o66sDY+e/+CkniJPDHwW0LU2sWuG/4TK3SKNQPvG1uiDk8Accn0rxc9aWDi3/MvyZ6mU3eJdu36o4DwJ49i1nRIZ2l3YQdF47fnXw2IrpvQ+mwtNJu58hfH6drOKd0cENkjFa5dSfJqb4mpGpqfdH7MB3/AAV8FS7fvfDvQefKx/y7H+Lv9O3X+Kv3LLdMuo/4Y/kj89xOmJn6v8z8p/8Agrr4zuF/4LKtperTFVtPgXptnpKE8bZNRvLiQgepK8n/AGAO1eDx1llXF8I1sXTV/YVKbl5Rlzwv/wCBOC+Z+4fR5x2Gw3HcsPUdpVqM4x82nCbX/gMZP5Hmza/j+P8AWvwH2h/b/sD3r9mP9vKz+CnhKTwP488NXuq6ba+ZLpb6V5f2iJmJYwlZGRWUsWYMWBUsRyMbfy7izw8jxBmqx2Eqxp1JWU+a/K7ac14qTTSSTSTvbo73/KeN/DfEZ1iZY/LpJVGvei9FJpaNPo3trpfW61Phr4qf8F9/+CiWufECfxJ8P/Fmh+E9GE+bPw1a+HbW7iWIH5VkmuI3ldyMbmVkBOSqoOB/oxw19DLwcyzI6dDGwq4mu4rmrOrKF21q4wg1BR/lUlNpbylufwbiuMs5qYhuLUF/LZP729b99j9LP+CPP/BWix/4KJaLq/w/+Ivhay8P/EfwzbLd39lpbP8AY9TsWcJ9qt1kZni2OyJJGzNgyRsHbeVj/lTxu8Ba3hBmFHE4KtKtgK7cYSlbnhNK/JNpKLuryjJKN7STiuW8vpcmz1ZtTlGorVI722a7r9TY+HWoJ4U/4LyePdN0FtsPiD4IeH7/AFxU4DXcN7dW8Rb1IhwB7V934RTqS4SUZbKpJL00f5tniZ2ksZp2R+hWkh/+E90kgPt2vnCjbnzYMZPXPXGOOuegr9LxH+7z9H+R5C3R6tXypuFAH5yftseIvjb4V/4K7+Dtc/Z38AWPifxbF4CA03RdSvEghnBW9EhZ3kjA2oWYZcZI79K0yd1F9eUVo2r+S5aWv32XzHmipuhhOZ23t5vmlofQnhvx9+2V45/Zw+K7ftc/AvRfBUlt4RvBoa6Pq0V0LtWtLjzS3l3E23bhMZ253Hr25s3hhllM3CV5a3XlZWe3V3+43yqVb+2KSa928dfPm2+4+D/2c7m5/Z4/Zyn1eed08PfG/wCEPiSzlLt8ketae935XsN0BCgd2Y16Wa+/Tq4J7r2FaHo3BVEv/S35WRw5dpjKWLXScqUvSUVKD+cvdXldn6G/8EwP+TCfhr/2BZP/AEolrfOP99/7cp/+m4nLln+7P/HU/wDS5HvVeWegfMn/AAVW1GLTfgN4cnngSRW8eWqlZGIH/Hne+n0r57iV2wMf8S/Jnr5L/vUv8L/NHg/w58Y2Y08JbokaBMhVlLDn681+d16kYs+opSavc8A+PMiXVnNMJSRg/wBa+lwaSpoylfl1Pvj9lwp/wpPwSAy5/wCFc6DkByTj7M2MjoB7jk856Cv2TLv+RdR/wx/JHwmK/wB5n6v8z8wP+DlD4LeIPAH7QPwm/bc0OFxp17pr+CtfvAvy2k6zPeaeze0jSXaEnAGFB+8K+04U/s3FY2plmYq+HxcJUZ+XN8LT6NSSs+jd+hrl+aY/I8wo5lgZctajJTi/NdH3TWjXVXXU+TvD/wAWdE1u2X7ReJa3OP3lvO+3n/ZJ+8K/n/jvwb404Mx81DDzxGGu+WrTi5K3TnUbuEu99L/C2f6C8B+MfBPGuXwlPEQw+Jt71KpJRd+vI5WU49ra2+JIzfiJ8bdF8I6JPJp97Fdag0ZFrbxOHw56FsdFHXnr2rTw68HuK+NM4pLEYedDCJp1Kk4uHurdQ5knKT2Vk0t5eceI3jBwnwVk9V4fEwr4tpqnThJT95rSU+VtRit3dpy2j5fIesaIW3MVzk85r/SqEYwioxVktEf5pSlKUnJ7s+zP+Dd/wx4nH/BRuLxBo139n03SPBGq3PiORpdiGzIijUMTwR58kDY/2M/w1/Mf0tMRg6fhbGjVV6lTEUlTXXmSm21/24pK/nbqfR8LRm8zbWyi7/h+p+iP/BL6/l/a2/bf+Nv7fWno8nhnxJr1t4b8AXDcpPo+kRtbm7iP/PO4uDLIM8gqelfjXBOTTyLhqhhaitO3NL/FLVr5XUfkdWYV1iMVKS26fI/SPSgv/CwdHO1c+XJglDkfvbfv0A9up4x0NfTYj/d5+j/I4l8SPWK+UNwoA+Ov2uf2Kf2wfH/7ZWj/ALV/7L/xD8E6JdaP4aTTrdvEks7SLJ+/WQ+WtrKhUpNgEnOc8DAp4GU8I8QntVa+5KH6x6dCsX7PE0qMesL/AH3b/JnZfCn4R/8ABQ3WPBnjzwb+1X8W/AeuQa94TudP8Or4fhki+z3csbpvmP2SI7MMOm4+1GNp4fEZdUpQTVR2s3tazvf526dwwdSrh8ypVpP3I6tdbpxat8lLr1R574k/4Ji/EDxb/wAE2tA/ZL1fxF4cXxt4Z1OS/wBL1aO6nNgsj3Uzspk8kShWhmYH9394DggZrbMKqxOOo4ilpyxUXfquVJrr1Sa9OhlgI/V6VenU1VR3VujVrPpro15Jv0Poj9jj4MeKP2ef2ZvCPwY8aX9hdapoGnNBeT6XK727sZXfKNIiMRhh1Uc5rXH4iGKxHtIbcsFr/djGL/FaGGDoTw9FwlvzSf8A4FJtfgz02uM6j5H/AOCzGpf2V+zN4cuBLsJ+IVoqttz/AMuV8f6V89xL/wAi9f4l+TPRyx8uIfp+qPj74WeLbhtLH7zPydR+FflmJm+fU+hVVowvisn2rRpGyC205r7PDSUbHXU1R9/fswb1+CPglCX2j4d6FgFxtz9mOcDqD0yTweMdDX7Ll3/Iuo/4Y/kj4HFf7zP1f5j/ANqb9mn4XftffAXxJ+zz8Y9E+3aD4ksDb3SIwWSFwQ0c0TEHZLHIqyI2DhkBweldhgfzxftj/sefH3/gnV48l+Hv7RWkXOoeFGuTF4W+KFnaM1jqEOf3cd0Vz9luccFX4YglSwG4/uPB/iRQdGODzeXLJaKp0a6c3Z/3tn1s9X5+IwbvzU/uPKp7XT9WtRfaXeQ3MLjKTW8odGHsRwa/XqGIoYmkqlGalF9U0196OBpxdmc7rGk2sUqpc3ltbCRwoku7lIYxk4yzyEKo9WYgAckiuXM82y7JsHLFYyooQj33fkkruT7Rim29kVTpzqy5Yq7Psj9gv4JfE744fCXUv2bP2SrPUtM8OePJo0+Mvxua0ktzqVgm5f7B0NJVDNEQzia7KgMzuuCixiT+NuNMZi/ETi2lmuPi4YXC3WGouzd21zVqlrrnlZcsU2oRS15uY+nw8oYDCOjS1lL4pf8Atq8vPr6H7e/sn/s5eDP2avhNpHw58F6FBp9jplhFa2dpAPlhiRQqrzyTxyTkk5JJJzWhzM9M0oj/AIWBpC7hkxycebg/62D+Hv8AXt+NZYj/AHafo/yYL4kesV8obhQAUAFABQAUAFAHx/8A8FqrSO9/Zh8MwyzrGP8AhY1mQzZ/58b/AKYrwuIY82BX+Jfkzuy/+M/T/I+LvhXbPHpzKoJAXgkV+YYum3PQ9zm0KfxJcpYSxseCvrX1FOT5kepXTjK5+gH7Od1HpfwO8EXlxbTtG/w80QK8Fi8hytuoIygJJ/eKQuOBuPrj9oy3XLqP+GP5I+AxX+9VPV/md42vWKMyGC9yrSKcabORlBk4ITkHsejHhcmu2xgYnjrwv8PfifoNx4S8ceFDqdhfIsFzaX+iSSRSrIudrq8ZUrj72eF6Ng8UWC58QfFv/g36/wCCafxF1ebxNo3wMu9AuJ181/8AhG21PTkAL7cCCBljU552hAQOenNaUqtag705OL8nb8huz3G/Cf8A4IBf8E8fhdrya/8A8KO/tW8gkfFx4ijv9UGY+SQlyXj/AN0hfmP3cmpqTqVZc05Nvzd/zDbY+0Ph38Ofhx8N7OHTvDnh+eIRLFFFt0mZVQFflA+TCqAMHsvQ4PFRYR1Q8R6f5fm/Z7/Hlh8f2VcZwW29Nmc57dcc4xzTsBZ8O3BvvHOnTwQXIigd4pGltzGu/wA2HGN4BPQ4I+U889KxxH+7T9H+Q18R61XyhuFABQAUAFABQAUAfJH/AAWVhjn/AGafDccgJP8AwsK02Y9fsV9/9evGz3XBr1/Rndl/8Z+n6o+SvhboyHS8KvO0HkV+b4mPvnt20OQ+LkflWEnGNoIr36K7ns4hJo/VH9k7RtHm/ZZ+Gk0mlWzM/wAP9GLM0Ckkmxh5ziv0HC168cLBKb2XV9j4LEpfWJ+r/M9A/sLRP+gNa/8AgOv+Fb/WMR/O/vZjZB/YWif9Aa1/8B1/wo+sYj+d/ewsg/sLRP8AoDWv/gOv+FH1jEfzv72FkH9haJ/0BrX/AMB1/wAKPrGI/nf3sLIP7C0T/oDWv/gOv+FH1jEfzv72FkH9haJ/0BrX/wAB1/wo+sYj+d/ewshY9G0eJ1li0m2VlIKssCgg+o4pOvXas5P72FkWayGFABQAUAFABQAUAfKH/BYNBJ+zr4YU/wDRQ7T/ANIb6vGzx2wa9V+TO3Afx/l/kfOXwc0EyaP5pTrGOR+FfntdKcz6Hkcoo8a+N2oRpDMU+6Qc5Havdo/Cj061uXQ/V79kZg/7KHwwcd/h5op/8kYa+3wv+7Q9F+R8JiP94n6v8z0OtzEKACgAoA+efF/7Wb/D74i/Fzwb4p1XX3bQ7W1fwsuk+CL3UIrQvpqysXmtLWRFzKd375uB6LWFSVSWT1alN2qKVRJuyVlGDjq/d0bd/XXSx00oQWZUYVF7kowbS1bbqVFLRe9qlFK3bTW5B4n/AG0td+Evwc8IeMvE+meHdYuLz4f2eu619u8WpYajdZgVpja2UdtJ5pzk5Ywx5IUMO3q4ulShnFbDxVoxqcqt7zScrJvayXm7uzsnY87AurXy6jVbvKa66JtJPfu79FZdbXNrxp+194s8N694nbR/gmL/AMO+D9Q0yHWtdm8SpA7RXkVvIGht/JZpJE+0DKMyKVXIkJO0YUaLnUhGo+Xmqukuvvcyin0928lfquiZUqyeH9rTV/3Xtrbe6udtddbQdt03o7aN2Pin+1b4w8FXni2/8HfB621vQvBF/aWGv6ldeJvscxup0gkKwQ/ZpBIkaXERZmdDkkKrYJrPCwVeVLnfLGpUVOL3+2oOTWllzXS1bbWtlqa4hujGfLrKFN1GttFGUkr66tRvtZJrd6Gv4x/aY/4RLS/iHqX/AAhX2j/hAtY0+x2f2ls+3faobSTfnyz5W37VjHzZ2ZyN2AUI+3jQe3tKvs/T34w5vP4r202tfqFV+zdT+7SdX1sqj5f/ACnv57aa6vwv8beJ/Efxe+JPhfWNT86w0DV9Ph0iDyUXyI5dOgmcblUM2ZHZssSRnAwMClSSlgFUe/tKkflFQsvldhVfLiowWzpxl83Oqm/uivLT1O/qRhQAUAFAHyl/wV+AP7PPhcN/0UO0/wDSG+rw+IHbBL/EvyZ24D+N8v8AI8a+BltCPDibsZMfU/hX59N3kz6ihB8p8qfGXV1urWYR5YnOPxr3aCbibTm5Xsfrv+x5u/4ZH+Fm4YP/AArnQ8j/ALcIa+5w3+7Q9F+R8Vif94n6v8z0atzEKACgAoA5GL4MeF4dV8a6wt/f+b47jiTV1MqbYRHai2Hk/J8vyDJ3bvm9uKzq0o1cDLCP4ZObfe81GL8toq2nfc1pVZUsZDEr4oKKXb3ZSkr/ADk767WOH8SfsSeANf0R/Dlp8RfGGk2V14HtvCurw6Vf2yHUrG3jkSEys9uzLIolkOYjGrbsOrL8tdVWvKtiKlWaXv1FUa6KatquvRKzbWm19TChFYenRjDekuVPryuzafTdbpKS6NHQ6v8AszeA9a0HxZ4eutW1dYfGM9jLqbRzxBomtYYIo/KJjIUFbdC24NklsYyAEq0lOEv5avtV/i5ozt6XivO19epEKMYUfZrb2Xsf+3bTV/8AF7712203v5d+0b+z/wCP/HPjDxBoPw38M+NLO18WX2mz6ve2uvaVHoNxLEYVe5uIpD9uWRIolXZCNkpjTcOpowMlSrU3P4adVTSeu0ozfLbrJp2UtIybkrMvGL2mHmo6ylSlT00eqmoqV9LLmu3HVx93pY734j/sgeCviV4i1zW9Q+IXi7TrXxHPZ3OtaLpGpQxWl1c2ojWKZgYWkztijUpv8tgoJQkZqcNN4aUGteSaqRvspXi36puOt72u3HldmnXXt4OL0vB021u4vm+5rne1r7Surp914X+HOieEvF/iTxpp11dvdeKbu3uNQjndTHG0NuluojAUEApGCcluSeg4qYPkoeyW3NKXzla/y91WCS56qqPdRUfkpSkvneb+Vvnv0hhQAUAFAHyv/wAFc7G7vv2ePDgtI9xi8fWrv7L9ivRn8yK+d4mfLl8X/eX5M7cAr1n6f5Hz/wDBbW/s+hBHbkIP6V+a1a9nofV0H7p80+MdKa8tW+XryCBX1dGXLpcavfU6fR/2/wD9vXwF4U03wR4H+OZstL0bT4bHTLUeGdMk8mCJBHGm6S2ZmwqgZYknHJJr1oZjiYRUVLReS/yPPq5fhpTcnHV+b/zLWn/8FHv+ClFyMv8AtFvwef8AikNI/wDkSm82xUX8X4L/ACMVl2Gb+H8X/macf/BQf/gpGxH/ABkLJjH/AEKOkf8AyJULNsW/tfgv8jeOVYV/Z/F/5l1P29f+CkkkXmJ+0DJ0/wChS0n/AORKbzbFW+L8F/kS8rwv8v4v/MbP+3h/wUqeDdb/ALQ0gbt/xSOkc/8AkpXPVznHR1U/wX+RMssw6V+X8X/mWNI/bR/4KkatGXtvj1cNj08H6R/8iVKzrGuN+f8ABf5DWXYNr4fxf+Yt1+2n/wAFQ7BHkvvj7NGF7N4Q0n/5ErSGc4ySu5fgv8hQy3DVFdQ/F/5mPJ/wUH/4KUoxT/hoiTI6/wDFI6R/8iVM86xnSf4L/Iv+ysLb4fxf+Zlal/wUX/4Kc2VwuP2jnMZODnwfo/8A8h1ms9xt9Z/gv8jN5Zh07OP4s9h+GP7XH/BQXxH4aN7P8e2v7qSMtHv8MaWgj47hLYZ9eM5xWVXiDGwV+f8ABf5GtHK8JUnZx/F/5nV+Hv2nP24brS5RefG5pblUJQN4e01HJ3YI2/Zh05HTPQ08NxFiaujnf5L/ACNMTk2HhK8Y2Xq/8zl/GP7aX7e3hyOJ5/i35SrciKedNC01k2lgPMwbYldoyT2rWrnOPivdn+C/yCjlGEqSty/i/wDMoeH/ANv79ujVPCmmeN08b3s1hql2YLaL+ydLWUndtViBaHKsQewwATnFcdDP8yU37Spf5R/yOqrkGD+GCs/n/mbXh39q/wD4KHeKb+ddL+Kspifm3j/sHS8ptJDAMbUBs8EZ962/1gxsp2U/wX+RzyybCQjrH8X/AJnZ3H7Rn7XXgu0a/wDHXx8vvIFsXM6+FtOxG/o221rrpZzi+W8p/gv8jzMRhKEPhh+L/wAzwj4qftN/tE/HS3h8I/FP4j/2rpFtfreWtqmlWsAEqo6K+6GJHPyyONpOPm6ZAx8xm+d4vEw9lOV0nfZL8kaUcPSpvmirGt8PtV+w2TRBsEDHJ4r5Sddymd0ZtLQ8p1BFmsGMgzgZr7tScZo64t2KNlpVrKmWTr7V1rVjSudJ4S8MabdzhGQAH/ZrjrVJRZCspbHo+kfD/QRAN8AYjuVrCFSTZ20Ka1ua8PgjRNmPIHT+7WqnI2dNJOwW/grR47hAsQxkcFaylN8rRhKPuM+ovgR8G/Bo8MG++wIXK5+aMHsDXfhUlQcjhpzcGeXftFeBdGTUZIbeFI1JJwsY4rjqylUW5pCcqkuVaI8HuvBWipcMvkA89xXLzPlO2MVsZWteCdFmiIaBef8AZrknOUXoZVacbXPX/wBmrT9Js9Jltk0qFzCREGkXIweCcetL2kqiszOiranpfib4GWvhLTZvFfhvxTd2xaWzlmt9u4OJmdpEDbvlBwoGOm33rGm/ZJyXc9hVI1vclHoaXj34GeFPFVlfajqKI0ptP3CtACkLnaN4AIJP1PWn9bqybZz8kaTVu54t4W+DOj+IfBfh7RH1Oa3gi8X6nNcCAHMyxLBF5YJOUU+ax45A4HrXLCtP212elJpSbt0Po34PfBnwS2qrbwWLRRWttuSJXYjA7cniu6MU6qbPKxNSUKF1u3Yz/wBpC0trDwVevY2sSLDDI8gZMmTGTtznAHHoa9CtJxoXR5FR+z0PiK/toZ7uS9KBWZidqjgc18TiK051Gc1tSXS7ya3LCFiAc5596wg77mKm07H/2Q=="},29608:(e,t,n)=>{n.d(t,{Z:()=>i});const i=n.p+"assets/images/mate-ibus-starting-daemon-84bcee7978b1d8eb7163cb0d9b964ec3.jpg"},2390:(e,t,n)=>{n.d(t,{Z:()=>i});const i=n.p+"assets/images/mate-keep-files-prompt-2aa2cbdb6a94db223d708562c884d71a.jpg"},46721:(e,t,n)=>{n.d(t,{Z:()=>i});const i=n.p+"assets/images/mate-keyboard-choose-layout-e0ca24f2aa125275817acb229a194923.jpg"},19720:(e,t,n)=>{n.d(t,{Z:()=>i});const i=n.p+"assets/images/mate-keyboard-layout-shortcuts-62aefb0c48a9d92a34c277497866e85e.jpg"},91066:(e,t,n)=>{n.d(t,{Z:()=>i});const i=n.p+"assets/images/mate-keyboard-preferences-f13098df57c42dc0259006b9ac386dde.jpg"},572:(e,t,n)=>{n.d(t,{Z:()=>i});const i=n.p+"assets/images/mate-monitor-preferences-confirm-c9ddeb8ecc32eb0a88fc49b247bd2535.jpg"},5229:(e,t,n)=>{n.d(t,{Z:()=>i});const i=n.p+"assets/images/mate-monitor-preferences-dragging-0fb78bb10ab52ce991b90df95a517622.jpg"},95067:(e,t,n)=>{n.d(t,{Z:()=>i});const i=n.p+"assets/images/mate-monitor-preferences-db6d4f848b460b4278da5c95e62d4d9d.jpg"},39667:(e,t,n)=>{n.d(t,{Z:()=>i});const i=n.p+"assets/images/mate-mouse-settings-d43911b0e7fdc6f3a196808da1e353a8.jpg"},43845:(e,t,n)=>{n.d(t,{Z:()=>i});const i=n.p+"assets/images/mate-multiple-user-settings-112efa554f35300d772bb5ede0cc603c.jpg"},21908:(e,t,n)=>{n.d(t,{Z:()=>i});const i=n.p+"assets/images/mate-network-authentication-13f522132661aa358181f94e002fcc9f.jpg"},56120:(e,t,n)=>{n.d(t,{Z:()=>i});const i=n.p+"assets/images/mate-network-disconnect-eff4984eda8c49d3e42259381f0490b0.jpg"},225:(e,t,n)=>{n.d(t,{Z:()=>i});const i=n.p+"assets/images/mate-network-hidden-38a73abbffc438c4c8dc66f70d38fe33.jpg"},32077:(e,t,n)=>{n.d(t,{Z:()=>i});const i=n.p+"assets/images/mate-open-with-right-click-096ce2548d773af1ee45fceb5f2153e4.jpg"},48197:(e,t,n)=>{n.d(t,{Z:()=>i});const i=n.p+"assets/images/mate-open-with-setting-86e0958d69c60f7b4253ac2989931023.jpg"},33340:(e,t,n)=>{n.d(t,{Z:()=>i});const i=n.p+"assets/images/mate-preferred-applications-dcd4e02b67ec579d69171c22c1eb38d3.jpg"},92617:(e,t,n)=>{n.d(t,{Z:()=>i});const i=n.p+"assets/images/mate-single-user-settings-a1253a12d1a7214129fe3ac5dd897e32.jpg"},90751:(e,t,n)=>{n.d(t,{Z:()=>i});const i=n.p+"assets/images/mate-sound-preferences-e6f0a451c79339dfbc290113f63e2894.jpg"},61690:(e,t,n)=>{n.d(t,{Z:()=>i});const i=n.p+"assets/images/mate-startup-applications-e0d8dbd51c24a2987e3b83bc758d35fc.jpg"},14205:(e,t,n)=>{n.d(t,{Z:()=>i});const i=n.p+"assets/images/mate-time-and-date-right-click-792aa50841ec26d8fcd4803ebb171839.jpg"},89206:(e,t,n)=>{n.d(t,{Z:()=>i});const i=n.p+"assets/images/mate-time-and-date-settings-5fd258bf8a3cd09c075789ecb72370b4.jpg"},11410:(e,t,n)=>{n.d(t,{Z:()=>i});const i=n.p+"assets/images/mate-time-and-date-c6cabc4c6ccfb4d51983c582ac985445.jpg"},92324:(e,t,n)=>{n.d(t,{Z:()=>i});const i=n.p+"assets/images/mate-touchpad-settings-d9b3577e085d2ec9f5e357263f35ef90.jpg"},88409:(e,t,n)=>{n.d(t,{Z:()=>i});const i=n.p+"assets/images/mate-tweak-desktop-30894d02f2a10654d0b8219947f974e6.jpg"},68146:(e,t,n)=>{n.d(t,{Z:()=>i});const i="data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEASABIAAD/2wBDAAIBAQEBAQIBAQECAgICAgQDAgICAgUEBAMEBgUGBgYFBgYGBwkIBgcJBwYGCAsICQoKCgoKBggLDAsKDAkKCgr/2wBDAQICAgICAgUDAwUKBwYHCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgr/wAARCADBAEcDAREAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD9HpfDgaLBj61+HVKaeh+iyp3RzPiLwqRvEaHPpiuGpScehClZWOflt7eyVobpsjPTFcc46HRRpSmrT2PP/FVnAL8zQIQO5xxXDUcEioKNObXQyluETADfpWDXMjWU+UabuZjti59yK5aiV7HLec3cbNZxsocplifmyBWU6TWpE3yswvEWl+dA20fhXNL3pWZ5GMpKabR59q1p5MhUEDDdc4FceIirWZ4/K9rn6ZXOkRRxkuoXGe1fr04KKufZKMm7HJ+JrUsTDEm336Vw4l+7cHCK16nAa54enaUsFOM9PWvEqKpLQpTnszntZ8JPdwHcoHB6CuOVJp3HKEXRunqcLqXhy5sLllYMy544qJNSdmc9Cqr2luVXRVUA4GO54rN01udaSbGmUKgyenGfWolF2djKrTTKd6olQrg9O4rmdJPVnFUimuU4vxVpA80yDu3pXHioX92x4tWHs5n6SXURuiWZflzwBX6zVkuh9jJxWhzfiDTirE7RwfzrzZ++7HPopHMXei3N5KLeztWlkY/KkaZJ9cAUU8JUxFRQpxcn2Su38kFSVOnFym0l3ehSvPA3iMx4Xw3escdrN/8ACirkWbp3jh5/+AS/yOFY7Bp29pG3qv8AM4/xV8LvGlype28HanIechNPkP8A7LXnVeH85lLTDVP/AACX+RhUxWCjK8akfvRyF18JviQ+T/wrnXSR3Gkzf/E1j/YGef8AQLU/8Al/kdVPHYLf2sf/AAJf5nK6hpt5pl7JZ3tvJFLDIUmhljKtGykggg8gg8EHuK8irTq0arhNNNOzT0aa3TXc64yTtJap/cVGG9O/TvWEovuZ1IRbuYuvWQuI+AAc9azdFPW55GNpJq5+jUti65CpzX6by8+x7afMZepeH5pgZJE4HcVzVaDjqguk7sp+A9Na1+I2kyBeBeD+te1w01/bNJf4v/SZHmZ1Lmy2p8v/AEpHv9fqR8IFABQB+aPxYs7j/hZfiNzGcNrt5hv+2z1/O2fKMs7xX/Xyf/pTP0rAVISwFKMv5Y/kjlnslmXKghumcda8OVJlzSsZOrW8kQKyLj0yaiKtpY4qsItan6WG1V0BZQF71+pUoI6YS5SC8tUMQQJ2qqlNSQ7czMbQLMQ+ONObb0vU5/GujIKajndJr+9/6SzzM3SWWVPl/wClI9hr9MPiDk9K+It3qHj2Xwo9hGsCyyxRyAnfuQMST2wdp4xXXPDKOH9pfX/MyVRupynWVyGp8EfEfwuT451mZ4flm1S4cEd8yMa/n/OaEZ53iX/08n/6Uz7zBVI/U6af8q/JHK3/AINVTvSHH0FefLDNbI6ryijA1bwp5gK+XnnisnhlFHHW5m7n6CpOj/LkYPTFfc0a8WjtlFoiuoeCwrpjNTKjK5R021A8UafMB928jx+LCu3I0/7Zpv8Axf8ApLPPzlL+zZ/L/wBKR6dX6MfDHl/hn/kssn/YQu/5SV6lX/cvkv0OWP8AG+89QryzqPlXxToMV5rF47wA5upD06/Ma/GM0w6ebYhrrOf/AKUz73C0b4KlL+7H8kc5e+FoNrfugp7HHQ1yugrHRyyaOS1zw4yybVjK9unWs5UYNHPODvc+pRqJi+UP07Gs6eIZ68qd9WWrfVDL+7k5OOK76GI13MXTsyfTV/4nNn7XkX/oYr6nIWpZpTa/vf8ApLPNzqKWV1Pl/wClI9Er9BPgzy/wz/yWWT/sIXf8pK9Sr/uXyX6HLH+N956hXlnUeCXui+bdTTFfvSE5+pr8mzOF8zrP+/L/ANKZ+kYGzwFJP+WP5IytR8Ps+cQ/XiuPksayjJaxOc1jwtk5eMewzWahG5zOM5yPQ7u5fzsM3FfKxqyT3PbnbYtW94yMGJz689K9ShNvU57Kxu6Fdi41Sy55N3F/6GK+04Zqc2Z04/4v/SWePniX9mVLeX/pSPSa/Sz4A8v8M/8AJZZP+whd/wApK9Sr/uXyX6HLH+N956hXlnUea2ujw3NurMPvKDX5xjsPz4+t/il+bPvsHNrBU/8ADH8kUr/w88TlCnHauCphnE6FWbic9reiAyfMo4PeuVw5Xqi4yUi9cxxyYdD+Br5GVFHqVYuKGjaSF2/T3rahKSWpzxm3oaXhWVh4isYycg3kY/8AHhX2XC8k86pW/vf+ks8jPNMtqfL/ANKR61X6sfAnl/hn/kssn/YQu/5SV6lX/cvkv0OWP8b7z1CvLOo4rRokNpFzyY1PH0r4PENLH1b/AM0vzZ9vhpP6nT/wr8kXLuySaDBGcdKqUFJDUveOb1/SQcMo698V5mIw9paGt2mc5LL/AAt0z0r4ebTV0fWcnMrMYH3kFSOO3rWcJO5zSocpp+E5mbxTpyn/AJ+4+/8AtCvquE5v+3KKf97/ANIkeHn9Plyuo/8AD/6Uj2Cv18/Ozy/wz/yWWT/sIXf8pK9Sr/uXyX6HLH+N956hXlnUcRpNwn2WJR1ES8/gK/NsXVX9pVl/el+bPs8LJfVaa/ur8i+LhShGR7V1QrJI25dblDUYg8YwAeazqS5tSm2cTMiYJI47V+ZKqm9D6+LdynJIkA+9TlVWxvycxf8ABFys3ivTgP8An7jx+dfR8H1VLiGgv8X/AKRI+e4lp8uUVX/h/wDSke1V+2H5eeX+Gf8Akssn/YQu/wCUlepV/wBy+S/Q5Y/xvvPUK8s6jzS1kkihX0Kj+Vfl2Ye7mVZ/3pfmz7bCxTwtP/CvyRbjvmQABjWVKtK51qK6j3vUkTGRkV1xq3RnNWOHluVxjd196/InVlF2PseRrUrSRGXO5QcnpW9OcplxmangW1aLxVp7t0F2mMf7wr6/guP/ABkdF/4//SJHgcSyvk9Vf4f/AEpHtVfuR+Wnl/hn/kssn/YQu/5SV6lX/cvkv0OWP8b7z1CvLOo85g/e2iKAMhBj8q/M8zj/ALdW0+1L82fe4WNsFSf92P5IqXTSQnaT+deRdwlc10kyBb0k53YxXVCqrGjhzI5JJJPM+Yn3NfliV3qfYVHYsCTGM9+wrsoJcxyXd9Df8GKf7fsGxgfa4z/48K+74Piv7dov/F/6RI8LiRp5RU/7d/8ASkevV+yn5ieReFPEnh6f42yWkGvWTynUbsCJLpCxOJO2c169WnUWBu09l+hyQlH29r9z12vIOs84tZVjtlKn+AZr84zFr69V/wAUvzZ+hYNf7BSb/lj+SM7VJTINwJyK8aqlcrl5tjLnMsZ+XPNck5Sjsb7KxQuLArkxg9a+HdK0j6BVLuzLdjphuYPNAyR1FehhqLluYSqKMjb8KWvk63Z8Yxdxf+hivtOE6TjnlF/4v/SJHicRTvlVT/t3/wBKR3t9YJ4s8UjwveknT7SzS6v4AcC5MjssUbeqfu5CV/iwoPGQf2WMvZUudbt2Xl3+eqPzS3PLlexv3Hhvw9d6d/ZFzoVm9rggW7Wy7B9BjArBVKilzJu5pyxatYwfD6TaPrGoeEJbiSaKyWKeykmcs4t5d4VCx5ba0cgBPO3bnJyTvUtOCqd9/Vf8OjNe7JxPPftw2eWGHHHWvyXMa/8Awo1l2nL/ANKZ+i4FXwVJP+WP5IqM7yMd/T1rgbctTs91fCJJGrELxjHr1rhrKVyGn1GSwGKY4HXg8V89Onqev70loT2BEEu+MjBPIHStqcuUzqLmWpt6O0T6vZsi4P2uLP8A32K+y4VnfOqK/wAX/pEj5/PFJZZUT8v/AEpHYak974f8Qx+LLSyluYHtvs2pQQLukCBi0ciqOW2lnBUckPkZIwf1+PLUp8jduq/yPz53jLmKNt+0n8Cb/Vh4c0v4oaTeaq1xLbro1pcebe+bGGLp9nXMgI2NnKjoa6ZZPmlOj7WdGShZPmatGztZ321ujCOY4GdT2caicrtWvrdb6b9DQ0C31C6vr3xRq1qbefUGRYrVmBaCCMHYrY43Es7HHAL45xk81RxUVCOqX5m6u25M8iN4Wu5IlPSQg/ma/EczqJ5viFf7c/8A0pn6VhIWy+k1/LH8kX4IfNUbj3wcGtKO1jaKXUle2KrwOKqdJXNNGiaWy3OTjr14r5+cIs6Y1bIryW7QOMZwTWKjY1U1NFrw7deZ4jsIh0+2R/8AoQr6XhKb/t+jH/F/6RI8jP6dsnqv/D/6Uj1Wv2Q/Nj87/wBn/wD5SsX/AP2O/ib/ANFX1fvee/8AJsof9eqH50z8gyn/AJLyX/Xyr+Uz9EK/BD9fPCUtdupSydSZmI9ua/Cs2us5xP8A18n/AOlM/S8FGby+l/hj+SN2xi/d5Y8YxyK6cK01dmzp9BJ7lI8r3zXfJrlE/dVi1FMHyjHB9RXz7irmrjYgv5Igu3HT1rGouVXRrSi2yv4aAXxfp4XobxP/AEKvX4QlzcR0f+3/AP0iRycQyTySqv8AD/6VE9fr9sPzA/O/9n//AJSsX/8A2O/ib/0VfV+957/ybKH/AF6ofnTPyDKf+S8l/wBfKv5TP0Qr8EP188VTY1y+V6SH+dfh2a2/tjEf9fJ/+lM/WMBBf2bRf9yP/pKNCORlTr06c1NOU1qhzTSKlyxkbCLk59a6Y1HszC9ywZ/Mxtbn69a45R0OtQtuRXm9kLA5zXHU2ZUXyyE8KEjxbpylcf6Ynf3Felwhf/WWh/2//wCkSPL4gt/Y9X/t3/0pHsdfuB+aH53/ALP/APylYv8A/sd/E3/oq+r97z3/AJNlD/r1Q/OmfkGU/wDJeS/6+VfymfohX4Ifr54c0x+1SBW6SHP51+D5zUSznEJf8/J/+lM/XsAv+Eug/wC5H/0lF6C4wnzk9Oazp1XbUVVDRI7N+7/ACuunLm1Obl5dSjp+oRz4cv09Kwp1eZanYqsWrGopinj2jris6kG1oZyUt+hL4btmXxRp8xX/AJfI8n/gQr1eE6XLxHRl/i/9IkeTn03LKan/AG7/AOlI9ar9nPzk/O/9n/8A5SsX/wD2O/ib/wBFX1fvee/8myh/16ofnTPyDKf+S8l/18q/lM/RCvwQ/Xz55utQaPV5xnhZ2HX3Nfz1ntRLOsSl/wA/J/8ApTP13ANrK6H+CP8A6SjRiuGdd6cg+9c1CUpdR8rnoX7GQlht9Pzr16GsdWL2dkcHomvO4CqxPSuOjKyJhFSdjrdK1V2AViM+hrq5nKJ1qCtZnReHGZ9esGJ/5e48/wDfQr2+Fkv7eo/9vf8ApEjweIEllNVf4f8A0pHqdfrx+bnzP8Nv2FfFfgj9tHUf2krzxnp02jy6pqOo2dlGkn2ky3aSq0bgrtVV85sMGJO0cDJx+iZhxrhsZwhDKY0mqijCLenLaDVmtb3fKtLK19z4rBcLV8LxJLMXUTg3KSWt7yvo+lld63+R9MV+dn2p8u6jqQ/4SK7hZ+l5IPp85r+b89b/ALexX/Xyf/pTP2PLqSlleHf9yP8A6SjotNu41gCNzuXgiow001c6nStqjTsZk6KR9K9SnUSOWfu7ni3h3xQDtKSDBI6V5NHEqUdzzoVHe533h7WTPtbdj613xr8uiO6nW7nc+C7zzdesYv8Ap7i4/wCBCvpeFZN5/R/7e/8ASJHk8RO+VVLf3f8A0pHr9fsJ+ahQAUAfI2vtMniXUDyP9OlIx/vmv5rzt3z7Fr/p7U/9LZ+z5TK+VUP8Ef8A0lG5oequ0SrNwAOtcuFmlodU24I2I9SiiUNG/BHTvXqRqo5pWa1P5qIv2vP2soMeR+1B8REx02eNb8f+1a/oNcP5DHbCUv8AwXD/ACPx369jf+fsv/An/mWov22f2zbf/UftcfE5P9zx9qI/9rVX9hZIv+YWn/4BH/If9oY//n7L/wACf+ZPH+3X+29C2+L9sf4qqfVfiHqQ/wDa9b0cryzD1FUpUIRktmoxT+9IVTG4yrBwnUk0+jk2vuuSp+3l+3VK4jj/AGzfi0zMcKq/EXUySfT/AF9dtkcpZ0f9tr9v/wAQ366XoP7XnxgvLlkZ1gtviDqjuVVSzEAT54AJ/Ci0QKv/AA3r+3P/ANHofFn/AMOLqf8A8fosgI7H9sT9t7xBqAs9O/am+Kt7dzsSsUPjjUpJJD1PAmJJry6mR5JUm6k8LTcm7tuEW23u27atndDM8ypxUYVppLRJSf8AmdHefGv/AIKU6ZZG/ufjp8ZEhUZYp4z1Jio9SqzEj8qhZFkC2wtL/wAAj/kN5pmj3rz/APApf5nMH9t39tSMmM/td/FEYOCv/Cf6lx/5Gq/7CyRf8wtP/wAAj/kT/aWY/wDP6f8A4E/8zy6vVOIKACgD9gf+CHfwF/4J4+KfgD4L+I3jiw8G3vxcj8U6uZkvdbWXU7eGKC4aKRLJpCBsRUkVxFkEBgc81y1nU5rLY0ilY8a+BXgf9mrTP2VviXqPwI8rVbCx8J2eoHxHd2q/bodbj8W3FtogkbL/AGW5urCSRJraNthj2sUXzGq25cyv/WhOlj4R+PVjo+m/GbxLY6CqLax6vMESP7qNuy6jHQBtwx2xW0diXufUf/BGEfssePv2gIPgd+0rr0mgDXHA0G/ttsQ1W7JASxmuGJ8nd/BgDex27lcruyrcyjdFRtc/Zb4k/wDBOb9gjQfh5qOseJvBMXhnTdLsJLi98RDxDcxGxhRSzzO80rJhQCSXUjjpXKpzbNbKx/PJ+1z4y+FfjP4665d/BYyXPhq2vJLfSdYurH7NcapCrHbcSx5O0sOmcNtwWCn5V7opqOpi9zzOqEFABQBb0HXtb8La1a+JPDWr3On6hY3Cz2V9ZTtFLBKpyro6kFWBGQRzQBq+Bfij47+G8sj+D/EdxaxTSpLPab90EsqJIkcrxH5HeMSybGIJUucYyaTSYGFPPNdTvc3MzSSSOWkkdslmJySSeppgNR2jYOjFWU5BBwQaAPpL9oT/AIKt/tg/tMfsx+Gv2V/ib47M+h6EANTv4iy3niAIQbcX0mf33lADHA3sA8m91DDONKMZcyG5Nqx82VoIKACgAoAKACgAoAKACgAoA//Z"},63008:(e,t,n)=>{n.d(t,{Z:()=>i});const i=n.p+"assets/images/mate-workspace-keyboard-shortcuts-24395c1aa3f623b6b89284cffe6bd2e1.jpg"},87666:(e,t,n)=>{n.d(t,{Z:()=>i});const i=n.p+"assets/images/mate-workspace-switch-add-to-panel-e57ec1f9a49d5dcf52f3126805d1d110.jpg"},3466:(e,t,n)=>{n.d(t,{Z:()=>i});const i=n.p+"assets/images/mate-workspace-switcher-preferences-55630462d2aecfc0bd0f511b4ca5cd7c.jpg"},5070:(e,t,n)=>{n.d(t,{Z:()=>i});const i=n.p+"assets/images/mate-workspace-switcher-right-click-0660da43481f40fe6fec7d39e0ec6f06.jpg"},77967:(e,t,n)=>{n.d(t,{Z:()=>i});const i="data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAIBAQEBAQIBAQECAgICAgQDAgICAgUEBAMEBgUGBgYFBgYGBwkIBgcJBwYGCAsICQoKCgoKBggLDAsKDAkKCgr/2wBDAQICAgICAgUDAwUKBwYHCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgr/wAARCAAwAQkDAREAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD7i8a/FrTp2/sPTZFdj/rADya/A8TWpz92Ox+l4jFxxNb2EHoUdEttHK+d5K+ZJyx71jCjTkrs6VShCnyxZ7p4PsYdE+GomRAB5LvkD2ruwtKNHDzn3OWf7rB1PO55N8M9Ksme7ubuJS897IwY/wAQJrxK1CN+YvKsN7LBxkuup3B8L2kKi6tYgvcgcVzVcJzx0PehSc4XiW4FSWA7GG5e2a4+aVP3ZG8ZtrlmUp53VWJB46j0rGopQd+g+f2bs9jE1fZIC0bfUHvWMkmjOrCMtUcnrVrJbXAvIGOM/OoPSsLOMjz7ShOxIl5MsPng7k/iGeldVFu+oNOLHRuJ32s2M9DXa521KcNLnRaMIbu1+yy4LIPlOa7MNWWw4yT91m94bvRCG0+ddw6AE11RfJUv0MKkVCWozWfDLMxurdPcgVdWPNqY1KUbpooixFynltHhsdcVimdMFCUTM1HQNsbQyglW6ZHSibbRy16aaPOvFVjNpsz27E7T901yyTuePJJqx5t4xsLuMvJEODk4zWUo31OKUHTd0eb67dzIGjAPHQVE25I6oTUo3Rg2/iy60i78xJSBnpmuKWIlCVjto1dOVnd+E/i99rQWN1cAFhgZPeumjiIVNDrTcNDk/imDqVw8jDIYHn0rHHYf2kHYmcnzHiPirRTDcPtUjJ4r46phatCd2tB8qeplLps1tIAiHg/SsZ8z3MZUfdbOl8PXc7J9l1FN8fRXPUV7WT4irSly/ZOOUJQ1ijrtG0hbqEG3A4NfomC5Jx0Cn1Ql3YXFnOY5Fwc8cdq2qxlB7DUlfkHWMl7b3A8snk1zqVmNws9DrLI3F5aqskO5gOGHFdCcZImTlKNjT8Px3sN0A0B2HjPrUPlaMozlGWp0cOjzPdBoIyrE8DHU1hKyVzrjUdNXR1Xhqe7tZVWSIo69eK5nWV9Dtp1YVVqeg6H4z1C1VUZ2AIwQeaqV3Z3On2V1oa3/AAll/wD36Odleyrdzxrw5DqC3za1PcsZZDksxrptFo8t4SNJXW53Wha7qLTRj7xaRVwOhyQKdtNGROUoU2fUviC+i0T4RtNIduLIIMnuRXpVH7PLNTPGzdPBQT+0eU+EkNnp8YVsgktmvFjUU4n0OESWGhHyO20PWPNX7NOeccEnqKz5nFnVSk6UvIbfmSxuPPhbhjnissTQU43W501Epx5kUL3VVVvN4wRyO1eZJyS5ZHPCope7IztSkhuYmkgPzY4wa5J3joJuS0ObeWYM8NwuQeATXNKTRzzTeqKkEkljM0LMTEx+76V00qjcbkJ8y1LlnahyXVvlBznPSuyjLm0KhZrlRs2LJA6vBJ869feuqMHA55xlDU6HTjFcOs6HDEjPPSu6m3JWY5S9pC7O30nT4tQtQuBuA4rupq8LMwUraMzrrQBbXZ3pjJ4rGcHcqE48xT1jQkngK7c9wR2qHHqVWjzx0PMfiL4dE1q7pGN6DNYu0nqebWpu3MeWapYrdxmGRcMo4zSnRVjF0faQ5keSePNG+xXbsg4J54rkqU3ax51N+zq2POvE1l5sbSRffT+HHWvJx1Gpy8yOxt810Yel6hdR3AHmsCMYINeZh6tSNZKR305c1mz0jw7dx67p4tNWjzIBgPivsacIVaZ1VKUakdNyh4r+DB1GFrq0GQOQcda87FZaqpyP2i0ZxOq/DLUrCPe0DYHoK8mWUShDYFWaVmZP2WWyIgeFhg8mt8NRjhuhDcVqjofCt09pOkirkH76+tfQ4SpKLvExqRvZxO1m0rT9WiSa3YFsc+o9q92GIjUVpBFxc1dakdt4UYzBOCAfSlOlG3unT7NtnR2Gim2i27RkLwK8+peDKUOR7E9hZ3IuAUQ+56UX546ESinokdjoNt9pRdwVXTH4iuZtxfkKKlF2sa1yiRyhiwBHoah01JXR0wptyuiSPVZLQZm5HZh0rm9pJOzOuFSzsyf/AISeD1/UVpzvub3Ik0YRKm0cdgK6oTT3OKrB21N3wVostx4s0yyEeVkul3Dr05/pXXFKVPQ82tFq3meyftc+KpvCnwmg0+1bbJc3CIoz2Hb+ddeN92hCBy5zO3safmjgPBvieQ6bAJDysY3Dua8Z0+U9OjiGrROktvE1oxBEuxgeDWEpShuehDEaWkasHiuG8h+zzyDcOpz196r211qdlCutjG1rUTGC0LZXuK4KyjLUtwUp6GdYayGnwkmQx5XNefUulqXa2jLt7DHLF5qDPGSPSsYNPcmdPqtjD1Jw33CAQaVvZy02PPrJ0ttjQ8NX0bv5LNg9CK9LCzjdDozXNZly/jm0+6EifdboQele0oqS0NKrurGj4e1xRdqkjYzweetbcrUbo5b8qPRfD/iCOAiN3xnoc1tTqNJGckrXN2eW31GAjcM4zW9SPOtCVFvYxL4yWoPmcg8Bq4pc0HZm8JraRxviiO3uQ+SMnNZxik7szqQ5tjx7xno0llqDSRrtVzkEV0Qa2OaKcG4M8v8AiJpQniMhHOOfeqlSTVzzMRQalzI8m1nS2juGA4zx0riq4ZNMmnGVjlpNPay1I5wcHP4V81LCclc78Km1r0O88D3Foz+RKvQfLXtUJWSO5rmZ6NoN3b28e19rx9we1dvtPesyJRcZe8iPxLoemvbG4gQGOTrgdK7qSp1VZm7oQrQujgdY8F6ZPIf3IAPcVMsvpTZw1cO7WRlzeB1tT5lq3TnFczwk6N2jm96nGzI3lvNMYTLlSOOBxUupLbqJyhUWr1Om8H6p/bziBLdxKOwQ4PvW9LFSjpM0hjKcI2mzsIPCPid5UMWjTuOudnFdM+SrA6p4vDuOjNqLwB4rljUp4fnPqQnSuNxadkR9boJXNKw8C+MrZ1lj0Kfj/ZpTjzxtYUsXQlG5p3fg3xRdRiWPRZfcFcEVlFO1mjahjaM15lGfwj4ujXb/AGFO4OeAvasJ0m1sVPGUXoyv/wAIRr//AEAbj/P4Vh7GoY/WaHc/C6v6xPysKACgD6A/ZU/5J5ef9hqT/wBEw1+l8G/8iuf+N/8ApMT4Hir/AJGEf8K/OR6ZX1p8yFABQB57+1d/ybx4p/68F/8ARiV4HFH/ACIq3/bv/pSPa4e/5HFL5/8ApLPz5r8eP04KACgAoA0NY/5B2lf9eDf+lE1N7IDPpAFABQBoeG/+QjJ/14Xf/pPJTW4Mz6QBQAUAFAHrvww/5Eax/wC2v/o162h8JD3N+qEXNO8O69q+nahq+laLdXNrpVuk+p3MEDNHaRNKkSvIwGEUySIgJxlnA6mi4FvTfAfivVvDV94usNIeSw05Y3u5cgFUdmQOFPLKGUgsAQD1pXQGRTA+qfgn/wAEcv2yvjn8JND+NWhQeD9H0XxLbNc6J/wk3i63sp7q3DFRMI2yQhIOM4JGDjBBObqwTsUoto6qH/ggt+3TfP8AZdE1P4b6jdsp+z2Nl8QLV5p2AzsQHAJPuQPUil7aAcrPjbXNE1bwzrd54c1+wktb7T7qS2vbWYYeGaNirow9QwIP0rUkq0AFABQAUAFABQAUAFAH0B+yp/yTy8/7DUn/AKJhr9L4N/5Fc/8AG/8A0mJ8DxV/yMI/4V+cj0yvrT5kKACgDz39q7/k3jxT/wBeC/8AoxK8Dij/AJEVb/t3/wBKR7XD3/I4pfP/ANJZ+fNfjx+nBQAUAFAGhrH/ACDtK/68G/8ASiam9kBn0gCgAoA0PDf/ACEZP+vC7/8ASeSmtwZn0gCgAoAKAPXfhh/yI1j/ANtf/Rr1tD4SHub9UI/Z79oT9p//AIJdeOv+CaHxH8M/BCHw3eyW3gbwympaJ4Y0oaRdR6it4I4LqZHgU3EcFxJC0uEkBB2H/WCuSMaiqJs0bjynxb8RvF3wm8V+LPEvjL4W2lvbeB5p/E91pltDbC3ii0eXaioIf+XdJblWeKA4KL8oA2kVsk0tST4zrUk+5f8AgpZ4E8ca5+xR+yj450Xwbqt5omk/BsR6prFrp0slrZs1wgVZZVUpGSSAAxGSaxptc8vUp7I4P/gjF4C8deJf+Cifww8U+HPBerahpmi+KI31jUrLTpZYLBWhmCtNIqlYgcHBYjODVVWvZsI7njf7Ruo2mnftZePtUutItdSgh+IWqyPY3jSCG4UX0p2OYnR9p6HaynB4I61rSkoWbV/X/gf130InFyTSdv68zv8A9obxR41T9o/wt40+E/hltP1QfDrQL210/wALWLN9iT+yInk8hWErIETeQ53FANxORmr5pUc0xjbfKqj5mnZ8top62tHsnay28jNRjVy3Dxsr2kknqnJVqlrq/vNtXavqzU/ah8WweN7L4U/FPU/B+seJrXU/DepwrpfjHUJrjWbloriVTNc3tv5T3MaswaJgkYCxMhBAJbGvD2eNqLRc1KDTSty350pSWqc/d5m3pKLhdI1oScsLHV+7Vad9b6U3yx7RafLZaxlzNO705L9mzxFpv/ClfjB4VPgnSDdHwCboa+yTG+VRqWnr5Cky+UsfzEnEYcnGWIAFaYt82VO2lqlLbreT39OystLtN6k0PdzKm97qqvT91Pbz03d9G0tz1z9iH4SQ+FdBtdd8N33g/V9d8a+FdbXUbm58Y6Wk2hWX9n3Sx2yW8twsy3Esiq8kuzEUQAyA0pXTG05LL69COzpNt3WrdnGN+kY7ybtedlooe9lhqieMo15bxqwUVZ6JTSlLzbV4wSvpd6uUbfMH/CoPGP8Az9aB/wCFdpv/AMkV5P8AaeF7T/8ABdT/AORPV/s/Ed4/+Bw/+SOXr0DhCgAoA+gP2VP+SeXn/Yak/wDRMNfpfBv/ACK5/wCN/wDpMT4Hir/kYR/wr85HplfWnzIUAFAHnv7V3/JvHin/AK8F/wDRiV4HFH/Iirf9u/8ApSPa4e/5HFL5/wDpLPz5r8eP04KACgAoA0NY/wCQdpX/AF4N/wClE1N7IDPpAFABQBoeG/8AkIyf9eF3/wCk8lNbgzPpAFABQAUAeu/DD/kRrH/tr/6NetofCQ9zfqhChmUEKxAYYIB6igC3a+INbsdHuvD9nqs8VjfPG15apIQkxQkoWHfBJIoAp0AfQv7Mn/BUj9tX9k7w7H4F+GvxZe98LxWstvD4S8S2q6hpsSSPvbZDLny/myflIGWbj5jmJU4Sd2hqTR2PxG/4Lcf8FA/HnhP/AIQ7QfiPpfgq1e4MtzN4B0KLSp5zsKYaWP5gMH+Eg5AOeBiVRgmPmZ8mTzz3U73NzM8kkjlpJJGJZmJySSepJ71qSakHj/x3a6/ZeK7bxrq8eqabDFDp2pR6lKLi1jiQJEkcgbciogCqFICgADAqoznGo6idpPd9XfTV9SXCEqag17q2XTe+3q2/V33LmqfGD4ta54vX4ha18UfEd5r6wtEuuXWtzyXgjKMhQTM5faVZlIzghiOhNQoxUZJLSV1LzT3T7363Lbb5b/Zs15NO6a7Weq7PUx9N17XNGgvLXR9au7SLUbX7NqEdtctGtzDvV/KkCkb03ojbTkZRT1Apv3ocr2unbpdbP1XTsJaSUuqvr6qz+9Np+TsGi69rnhu/Gq+HdZu7C6EUkQubK4aKTZIjRyLuUg4ZGZSOhViDwTQ9YuPRqzXddn3QdU+qaa8mtU15p6p9CpQB/9k="},43433:(e,t,n)=>{n.d(t,{Z:()=>i});const i=n.p+"assets/images/mate-workspace-switching-a0f8cff6b00100314fd9f77994b5dcc9.jpg"},86624:(e,t,n)=>{n.d(t,{Z:()=>i});const i=n.p+"assets/images/mate-workspace-titlebar-right-click-6dfec2d387d17d6ca06de2ed728ff521.jpg"},11151:(e,t,n)=>{n.d(t,{Z:()=>r,a:()=>a});var i=n(67294);const s={},o=i.createContext(s);function a(e){const t=i.useContext(o);return i.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function r(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:a(e.components),i.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/2598a3a5.ec59d237.js b/assets/js/2598a3a5.ec59d237.js new file mode 100644 index 000000000..9a9fd4930 --- /dev/null +++ b/assets/js/2598a3a5.ec59d237.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([["7824"],{44472:function(e,n,t){t.r(n),t.d(n,{metadata:()=>i,contentTitle:()=>a,default:()=>h,assets:()=>c,toc:()=>d,frontMatter:()=>r});var i=JSON.parse('{"id":"user/editions/mate/configuration","title":"Configuration","description":"System","source":"@site/docs/user/editions/mate/configuration.md","sourceDirName":"user/editions/mate","slug":"/user/editions/mate/configuration","permalink":"/docs/user/editions/mate/configuration","draft":false,"unlisted":false,"editUrl":"https://github.com/getsolus/help-center-docs/tree/master/docs/user/editions/mate/configuration.md","tags":[],"version":"current","lastUpdatedAt":1733757592000,"frontMatter":{"title":"Configuration","summary":"Help for configuring MATE Desktop on Solus"},"sidebar":"userSidebar","previous":{"title":"MATE","permalink":"/docs/user/editions/mate/"},"next":{"title":"Tips and Tricks","permalink":"/docs/user/editions/mate/tips-and-tricks"}}'),o=t("85893"),s=t("50065");let r={title:"Configuration",summary:"Help for configuring MATE Desktop on Solus"},a="Configuration",c={},d=[{value:"System",id:"system",level:2},{value:"Date and time",id:"date-and-time",level:3},{value:"Default applications",id:"default-applications",level:3},{value:"Displays",id:"displays",level:2},{value:"Keyboard layout",id:"keyboard-layout",level:2},{value:"IBus",id:"ibus",level:3},{value:"Mouse and touchpad",id:"mouse-and-touchpad",level:2},{value:"Mouse",id:"mouse",level:3},{value:"Touchpad",id:"touchpad",level:3},{value:"Networking",id:"networking",level:2},{value:"Non-hidden network",id:"non-hidden-network",level:3},{value:"Hidden network",id:"hidden-network",level:3},{value:"Sound and sound devices",id:"sound-and-sound-devices",level:2},{value:"Settings",id:"settings",level:3},{value:"Users",id:"users",level:2},{value:"Adding a user",id:"adding-a-user",level:3},{value:"Removing a user",id:"removing-a-user",level:3},{value:"User interface",id:"user-interface",level:2},{value:"Desktop background",id:"desktop-background",level:3},{value:"Desktop icons",id:"desktop-icons",level:3},{value:"Workspaces",id:"workspaces",level:2},{value:"Keyboard shortcuts",id:"keyboard-shortcuts",level:3},{value:"Workspaces configuration",id:"workspaces-configuration",level:3}];function l(e){let n={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",img:"img",li:"li",p:"p",ul:"ul",...(0,s.a)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(n.header,{children:(0,o.jsx)(n.h1,{id:"configuration",children:"Configuration"})}),"\n",(0,o.jsx)(n.h2,{id:"system",children:"System"}),"\n",(0,o.jsx)(n.h3,{id:"date-and-time",children:"Date and time"}),"\n",(0,o.jsx)(n.p,{children:'Using MATE, there are a couple of different ways to change the date and time. You can right click on the time in the bottom panel and click on "Preferences".'}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.img,{alt:"MATE Date and Time Right-Click Menu",src:t(17010).Z+"",width:"195",height:"298"})}),"\n",(0,o.jsx)(n.p,{children:"This opens the Clock Preferences window and allows you to show the date, seconds or use 24 hour time."}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.img,{alt:"MATE Clock Preferences",src:t(76746).Z+"",width:"375",height:"367"})}),"\n",(0,o.jsx)(n.p,{children:'To change the time, click on "Time Settings" at the bottom of this window.'}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.img,{alt:"MATE Time Settings",src:t(31245).Z+"",width:"459",height:"355"})}),"\n",(0,o.jsx)(n.p,{children:'Once you have the correct time, you can click on "Set System Time".'}),"\n",(0,o.jsx)(n.p,{children:'Alternatively, if you wish to change your timezone, open the Brisk Menu and then click on "Administration" followed by "Time and Date". Click on "Unlock" and input your user password so that you can alter the time zone.'}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.img,{alt:"MATE Timezone Settings",src:t(3141).Z+"",width:"496",height:"380"})}),"\n",(0,o.jsx)(n.h3,{id:"default-applications",children:"Default applications"}),"\n",(0,o.jsx)(n.p,{children:'Using MATE, open the Brisk Menu and click on "Preferences" and then on "Preferred Applications".'}),"\n",(0,o.jsx)(n.p,{children:"In this section you will need to click one of the five tabs at the top to find the category you wish to change. For most categories, you will need to have installed alternative applications before you can change the default settings. For instance, if you wish to change the default image viewer from Eye of MATE to GIMP then you must first install GIMP (available in the Software Center)."}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.img,{alt:"MATE Preferred Applications",src:t(10440).Z+"",width:"399",height:"355"})}),"\n",(0,o.jsx)(n.p,{children:'You can specify default applications for individual file types by right clicking on a file and then clicking on "Open with other Application...".'}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.img,{alt:"MATE File Context Menu",src:t(88508).Z+"",width:"302",height:"384"})}),"\n",(0,o.jsx)(n.p,{children:'Next, select the application you wish to use and make sure "Remember this application for "your file type" files" is ticked. Finish by clicking "Open". In the future, all files with the same file type will open with the same application.'}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.img,{alt:"MATE Application Selection",src:t(36998).Z+"",width:"426",height:"501"})}),"\n",(0,o.jsx)(n.h2,{id:"displays",children:"Displays"}),"\n",(0,o.jsx)(n.p,{children:'With MATE, open the Brisk Menu and click on "Preferences" and then on "Displays".'}),"\n",(0,o.jsx)(n.p,{children:'This opens the Monitor Preferences window and your display(s) will be represented by 1 or more colored boxes. Click on the individual display you wish to configure. You will now be able to select if you wish to set this monitor as the primary display, mirror all displays by turning on "Same image in all monitors", or turn it off. This window also gives you the ability to change the aspect ratio, rotate the display, and to change the resolution.'}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.img,{alt:"MATE Monitor Preferences",src:t(73004).Z+"",width:"556",height:"363"})}),"\n",(0,o.jsx)(n.p,{children:"You can arrange your displays by dragging the colored boxes to your preferred positions, as shown below."}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.img,{alt:"MATE Monitor Arrangement",src:t(4786).Z+"",width:"556",height:"363"})}),"\n",(0,o.jsx)(n.p,{children:'Click "Apply" once you are happy with your changes. If you would like to apply the changes to all the user accounts on your system, click on "Apply system-wide". You will be shown a message asking if the display looks OK, if it does, click on "Keep This Configuration" within 30 seconds.'}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.img,{alt:"MATE Confirm Monitor Preferences",src:t(6507).Z+"",width:"483",height:"146"})}),"\n",(0,o.jsx)(n.h2,{id:"keyboard-layout",children:"Keyboard layout"}),"\n",(0,o.jsx)(n.p,{children:'To change your keyboard layout in MATE, open the Brisk Menu and click on "Preferences" and then on "Keyboard". This will open the Keyboard Preferences window, now click on the "Layouts" tab.'}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.img,{alt:"MATE Keyboard Preferences",src:t(54805).Z+"",width:"452",height:"527"})}),"\n",(0,o.jsx)(n.p,{children:'To add a layout, click on the "+ Add..." button. The 2 tabs at the top of the chooser window give you the option to find your layout by country or by language. The preview gives you a graphical representation of each layout. Once you are happy with your selection, click on "+ Add".'}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.img,{alt:"MATE Choose Keyboard Layout",src:t(73210).Z+"",width:"800",height:"509"})}),"\n",(0,o.jsx)(n.p,{children:'You can remove a keyboard layout by selecting one of the items in your layouts list and then clicking the "- Remove" button.'}),"\n",(0,o.jsx)(n.p,{children:"If you wish to use multiple keyboard layouts, you can switch between them by left clicking on the keyboard layout icon shown in the system tray. The icon will automatically appear when you have 2 or more keyboard layouts selected. A right click allows you to open the keyboard preferences window and to see the graphical view of your current layout."}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.img,{alt:"MATE Keyboard Indicator",src:t(94960).Z+"",width:"370",height:"141"})}),"\n",(0,o.jsx)(n.p,{children:'To enable keyboard shortcuts for easy switching, re-open the Keyboard Preferences window and open the "Layouts" tab again. Now click on the "Options..." button. This will open a detailed options list, look for and click on "Switching to another layout". Select one or more of the available keyboard shortcuts and then finish by clicking "X Close".'}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.img,{alt:"MATE Keyboard Layout Shortcuts",src:t(62792).Z+"",width:"552",height:"425"})}),"\n",(0,o.jsx)(n.h3,{id:"ibus",children:"IBus"}),"\n",(0,o.jsx)(n.p,{children:'By default, IBus needs to be started in MATE before it can be used. Open the Brisk Menu, click on "Preferences" and then on "IBus Preferences". You will be asked if you wish to start the IBus daemon, click "Yes".'}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.img,{alt:"MATE IBus Starting Daemon",src:t(48922).Z+"",width:"419",height:"111"})}),"\n",(0,o.jsx)(n.p,{children:'If you wish to have the IBus daemon start automatically every time you start Solus MATE, Open the Brisk Menu, click on "Preferences" and then on "Startup Applications". Under the Startup Programs tab, click on "+ Add".'}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.img,{alt:"MATE Startup Applications",src:t(51910).Z+"",width:"468",height:"379"})}),"\n",(0,o.jsxs)(n.p,{children:["In the Command box, you will need to write ",(0,o.jsx)(n.code,{children:"ibus-daemon --xim"}),'. If you wish, you can also fill in a Name and Comment but these are not compulsory. Once you are happy with your inputs, click the "+ Add" button. IBus will now run each time you boot your computer.']}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.img,{alt:"MATE Add IBus Startup Entry",src:t(12730).Z+"",width:"372",height:"177"})}),"\n",(0,o.jsxs)(n.p,{children:["If you need an additional IBus IME for your language see: ",(0,o.jsx)(n.a,{href:"/docs/user/software/localization/ibus/",children:"IBus"})]}),"\n",(0,o.jsxs)(n.p,{children:["Finish by closing the IBus Preferences window. You can now switch between your layouts by using the keyboard shortcut ",(0,o.jsx)(n.code,{children:"Super + Space"}),"."]}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.img,{alt:"MATE IBus Keyboard Shortcut",src:t(71722).Z+"",width:"142",height:"101"})}),"\n",(0,o.jsx)(n.p,{children:"Or by left clicking on the keyboard layout icon shown in the system tray and selecting the layout you wish to use."}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.img,{alt:"MATE Bottom Panel IBus",src:t(71903).Z+"",width:"239",height:"207"})}),"\n",(0,o.jsx)(n.h2,{id:"mouse-and-touchpad",children:"Mouse and touchpad"}),"\n",(0,o.jsx)(n.p,{children:'With MATE, open the Brisk Menu and click on "Preferences" and then on "Mouse". You can toggle between the mouse and touchpad settings using the tabs at the top of the Mouse Preferences window. Click "Close" once you have finished making changes.'}),"\n",(0,o.jsx)(n.h3,{id:"mouse",children:"Mouse"}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.img,{alt:"MATE Mouse Settings",src:t(94892).Z+"",width:"502",height:"611"})}),"\n",(0,o.jsx)(n.p,{children:"For mice, you can set:"}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsx)(n.li,{children:"Left-handed or right-handed. This will change your primary button."}),"\n",(0,o.jsx)(n.li,{children:"Locate the pointer when the Control key is pressed."}),"\n",(0,o.jsx)(n.li,{children:"Mouse speed and sensitivity."}),"\n",(0,o.jsx)(n.li,{children:"Drag and Drop threshold. This is designed to prevent accidental dragging and dropping by setting the distance required to initiate a drag."}),"\n",(0,o.jsx)(n.li,{children:"Double click timeout. The length of time between 2 mouse clicks for it to register as a double click."}),"\n"]}),"\n",(0,o.jsx)(n.h3,{id:"touchpad",children:"Touchpad"}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.img,{alt:"MATE Touchpad Settings",src:t(40498).Z+"",width:"502",height:"605"})}),"\n",(0,o.jsx)(n.p,{children:"For touchpads, you can set:"}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsx)(n.li,{children:"Enabling / disabling of the touchpad."}),"\n",(0,o.jsx)(n.li,{children:"Enabling / disabling of the touchpad whilst typing."}),"\n",(0,o.jsx)(n.li,{children:"Enabling / disabling of mouse clicks with the touchpad."}),"\n",(0,o.jsx)(n.li,{children:"Two and three finger click emulation."}),"\n",(0,o.jsx)(n.li,{children:"Various edge and two finger scrolling options."}),"\n",(0,o.jsx)(n.li,{children:'Enabling / disabling "natural scrolling" (reversed scrolling direction).'}),"\n",(0,o.jsx)(n.li,{children:"Touchpad speed and sensitivity."}),"\n"]}),"\n",(0,o.jsx)(n.h2,{id:"networking",children:"Networking"}),"\n",(0,o.jsx)(n.p,{children:'With MATE, you can manage your network settings by left or right clicking on the network icon in the bottom panel system tray. A left click will bring up any wireless or wired connections currently available whilst a right click allows you to disable networking, view your current connection information and to create new connections and networks by clicking "Edit Connections...".'}),"\n",(0,o.jsx)(n.h3,{id:"non-hidden-network",children:"Non-hidden network"}),"\n",(0,o.jsx)(n.p,{children:'To connect to a network, left click on the network icon in the system tray. This will show you a selection of the networks currently available and you may need to click on "More networks" to find the one you want.'}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.img,{alt:"MATE Networking Applet",src:t(63127).Z+"",width:"520",height:"475"})}),"\n",(0,o.jsx)(n.p,{children:'You may now be prompted to authenticate with the network. Type in your password and then click "Connect".'}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.img,{alt:"MATE Network Authentication",src:t(49690).Z+"",width:"490",height:"254"})}),"\n",(0,o.jsx)(n.p,{children:"If your password is correct, you will now be authenticated with the network."}),"\n",(0,o.jsx)(n.p,{children:'Should you wish to disconnect from a network, left click on the network icon again and then click on "Disconnect" underneath the network you wish to leave.'}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.img,{alt:"MATE Disconnect from Network",src:t(40915).Z+"",width:"283",height:"169"})}),"\n",(0,o.jsx)(n.h3,{id:"hidden-network",children:"Hidden network"}),"\n",(0,o.jsx)(n.p,{children:'To connect to a hidden network, left click on the network icon in the system tray and then on "Connect to Hidden Wi-Fi Network...". You will now be asked for the network name and type of security (if any).'}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.img,{alt:"MATE Hidden Network",src:t(77426).Z+"",width:"490",height:"247"})}),"\n",(0,o.jsx)(n.p,{children:"If the network is found and has a password, you will be prompted to authenticate with the network."}),"\n",(0,o.jsx)(n.h2,{id:"sound-and-sound-devices",children:"Sound and sound devices"}),"\n",(0,o.jsx)(n.p,{children:"To alter the volume in MATE, left click on the speaker icon in the bottom panel system tray and then drag the volume slider with your mouse."}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.img,{alt:"MATE Volume Control",src:t(31246).Z+"",width:"71",height:"193"})}),"\n",(0,o.jsx)(n.h3,{id:"settings",children:"Settings"}),"\n",(0,o.jsx)(n.p,{children:'You can access sound settings, including individual application volume controls, and a simple speaker test by right clicking on the speaker icon in the bottom panel system tray and then clicking on "Sound Preferences". Alternatively, you can open the Brisk Menu and then click on "Preferences" followed by "Sound".'}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.img,{alt:"MATE Sound Applet",src:t(53539).Z+"",width:"219",height:"113"})}),"\n",(0,o.jsx)(n.p,{children:"This will open the Sound Preferences window as shown below."}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.img,{alt:"MATE Sound Preferences",src:t(10265).Z+"",width:"550",height:"423"})}),"\n",(0,o.jsx)(n.h2,{id:"users",children:"Users"}),"\n",(0,o.jsx)(n.p,{children:'To add and remove users with MATE, open the Brisk Menu and click on "Administration" and then on "Users and Groups".'}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.img,{alt:"MATE Users and Groups",src:t(59548).Z+"",width:"652",height:"431"})}),"\n",(0,o.jsx)(n.h3,{id:"adding-a-user",children:"Adding a user"}),"\n",(0,o.jsx)(n.p,{children:'To add a user, click the "+ Add" button underneath the list of users. You will be asked to input your password before you can make changes.'}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.img,{alt:"MATE New User",src:t(85039).Z+"",width:"307",height:"540"})}),"\n",(0,o.jsx)(n.p,{children:'Fill in the required items and then finish adding the new user by clicking "OK" in the bottom right corner.'}),"\n",(0,o.jsx)(n.h3,{id:"removing-a-user",children:"Removing a user"}),"\n",(0,o.jsx)(n.p,{children:'To remove a user, open the User Settings window and then click on the user you wish to remove. Now click on the "- Delete" button underneath the list of users.'}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.img,{alt:"MATE User List",src:t(1986).Z+"",width:"652",height:"431"})}),"\n",(0,o.jsx)(n.p,{children:"Upon clicking to remove the user, you will be given the option to keep their files, delete their files, or cancel the removal of the user\u2019s account."}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.img,{alt:"MATE Keep Files Prompt",src:t(78667).Z+"",width:"540",height:"203"})}),"\n",(0,o.jsx)(n.h2,{id:"user-interface",children:"User interface"}),"\n",(0,o.jsx)(n.h3,{id:"desktop-background",children:"Desktop background"}),"\n",(0,o.jsx)(n.p,{children:'If you wish to change the MATE desktop background, simply right click anywhere on the desktop and select "Change Desktop Background".'}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.img,{alt:"MATE Background Right Click Menu",src:t(8419).Z+"",width:"261",height:"254"})}),"\n",(0,o.jsx)(n.p,{children:'Alternatively, open the Brisk Menu and click on "Preferences" and then on "Appearance". Click on the "Background" tab at the top if it isn\'t already selected.'}),"\n",(0,o.jsx)(n.p,{children:'In this section, you can choose between Solus wallpapers, solid colors, gradients or using your own pictures by clicking "Add". After choosing, click "Close".'}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.img,{alt:"MATE Desktop Background Selection",src:t(51547).Z+"",width:"785",height:"536"})}),"\n",(0,o.jsx)(n.h3,{id:"desktop-icons",children:"Desktop icons"}),"\n",(0,o.jsx)(n.p,{children:'MATE has desktop icons enabled by default. If you wish to disable or re-enable them, open the Brisk Menu, click on "Preferences" and then on "MATE Tweak". You can then toggle them on and off by clicking "Show Desktop Icons" under the Desktop section.'}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.img,{alt:"MATE Tweak Tool",src:t(75410).Z+"",width:"626",height:"599"})}),"\n",(0,o.jsx)(n.p,{children:"You may now add things to your Desktop. This can be done by dragging an item onto the Desktop, right clicking an icon and selecting Copy to / Move to Desktop or by opening the Caja file manager and then moving the files you want to the Desktop folder (as shown in the image below)."}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.img,{alt:"MATE Desktop Folder",src:t(618).Z+"",width:"803",height:"581"})}),"\n",(0,o.jsx)(n.h2,{id:"workspaces",children:"Workspaces"}),"\n",(0,o.jsxs)(n.p,{children:["In MATE, workspaces are enabled by default. You can move between workspaces by using the keyboard shortcuts ",(0,o.jsx)(n.code,{children:"Ctrl + Alt + Left"})," and ",(0,o.jsx)(n.code,{children:"Ctrl + Alt + Right"}),"."]}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.img,{alt:"MATE Workspace Switching",src:t(85755).Z+"",width:"242",height:"93"})}),"\n",(0,o.jsx)(n.p,{children:'To send an application to a different workspace, right click on the applications titlebar and then use the "Move to Another Workspace" option or "Move to Workspace Right".'}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.img,{alt:"MATE Workspace Menu",src:t(69659).Z+"",width:"411",height:"385"})}),"\n",(0,o.jsx)(n.p,{children:'One of the easiest ways to view and manage your workspaces is by using the Workspace Switcher. Right click inside the bottom panel and then click on "+ Add to Panel...".'}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.img,{alt:"MATE Open Panel Configuration",src:t(75855).Z+"",width:"177",height:"228"})}),"\n",(0,o.jsx)(n.p,{children:'Towards the bottom of the list you will find the Workspace Switcher. Click on it and then finish by clicking "+ Add".'}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.img,{alt:"MATE Add Applet to Panel",src:t(52421).Z+"",width:"512",height:"351"})}),"\n",(0,o.jsx)(n.p,{children:"You should now be able to see 4 slightly darker boxes to the left of your MATE system tray in the bottom panel. The workspace you are currently viewing will be highlighted in blue."}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.img,{alt:"MATE Workspace Switcher",src:t(1091).Z+"",width:"265",height:"48"})}),"\n",(0,o.jsx)(n.p,{children:"In addition to using keyboard shortcuts, you will now be able to switch workspaces by clicking on them in the bottom panel. You can also drag one workspace onto another in the bottom panel which will move the current active application to the new workspace."}),"\n",(0,o.jsx)(n.h3,{id:"keyboard-shortcuts",children:"Keyboard shortcuts"}),"\n",(0,o.jsx)(n.p,{children:"MATE provides a variety of keyboard shortcuts for workspaces. By default, the keyboard shortcuts for switching directly to a certain workspace are disabled."}),"\n",(0,o.jsx)(n.p,{children:'To enable these and to also view all other available shortcuts open the Brisk Menu and click on "Preferences" and then on "Keyboard Shortcuts". The workspace shortcuts are listed under Windows Management.'}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.img,{alt:"MATE Workspace Keyboard Shortcuts",src:t(18083).Z+"",width:"626",height:"408"})}),"\n",(0,o.jsx)(n.h3,{id:"workspaces-configuration",children:"Workspaces configuration"}),"\n",(0,o.jsx)(n.p,{children:'By default, MATE provides you with 4 workspaces. If you would like to have more, less or change their names you must first add the Workspace Switcher to your bottom panel, as detailed above. You\'ll then be able to right click on the Workspace Switcher and select "Preferences".'}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.img,{alt:"MATE Open Switcher Preferences",src:t(10609).Z+"",width:"203",height:"228"})}),"\n",(0,o.jsx)(n.p,{children:'Use the plus and minus icons to add or remove workspaces. You can rename workspaces by double clicking on the current names and typing in an alternative. Click "X Close" once you are happy with your changes.'}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.img,{alt:"MATE Workspace Switcher Preferences",src:t(40263).Z+"",width:"367",height:"409"})})]})}function h(e={}){let{wrapper:n}={...(0,s.a)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(l,{...e})}):l(e)}},618:function(e,n,t){t.d(n,{Z:function(){return i}});let i=t.p+"assets/images/caja-desktop-folder-4165fea2b0afc876931a10dbeb707384.jpg"},8419:function(e,n,t){t.d(n,{Z:function(){return i}});let i=t.p+"assets/images/mate-background-right-click-0edaca8eb885eb54466e0a358d0f06ea.jpg"},51547:function(e,n,t){t.d(n,{Z:function(){return i}});let i=t.p+"assets/images/mate-background-selection-fefc0656871c76fa23c620d99521a0ef.jpg"},71903:function(e,n,t){t.d(n,{Z:function(){return i}});let i=t.p+"assets/images/mate-bottom-panel-ibus-left-click-016e725ce808036efb8bc77bd7fb47d8.jpg"},94960:function(e,n,t){t.d(n,{Z:function(){return i}});let i=t.p+"assets/images/mate-bottom-panel-keyboard-22cf218bfdf946e6c10250af144d2166.jpg"},63127:function(e,n,t){t.d(n,{Z:function(){return i}});let i=t.p+"assets/images/mate-bottom-panel-network-left-click-d3520a23fb573b5b52700f97306190a9.jpg"},75855:function(e,n,t){t.d(n,{Z:function(){return i}});let i=t.p+"assets/images/mate-bottom-panel-right-click-83df358e1390b363d6ae99f7465d006f.jpg"},53539:function(e,n,t){t.d(n,{Z:function(){return i}});let i=t.p+"assets/images/mate-bottom-panel-sound-right-click-696d602e3df72f0463e5984e82964a20.jpg"},76746:function(e,n,t){t.d(n,{Z:function(){return i}});let i=t.p+"assets/images/mate-clock-preferences-29e68150fa5526f0fbaab28c6f0ad6c2.jpg"},85039:function(e,n,t){t.d(n,{Z:function(){return i}});let i=t.p+"assets/images/mate-create-new-user-00e085b06fb8c6899a23f90d14b50a29.jpg"},12730:function(e,n,t){t.d(n,{Z:function(){return i}});let i=t.p+"assets/images/mate-ibus-add-startup-4f4ef3cf4e94656d727ff93c4e299432.jpg"},71722:function(e,n,t){t.d(n,{Z:function(){return i}});let i="data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEASABIAAD/2wBDAAIBAQEBAQIBAQECAgICAgQDAgICAgUEBAMEBgUGBgYFBgYGBwkIBgcJBwYGCAsICQoKCgoKBggLDAsKDAkKCgr/2wBDAQICAgICAgUDAwUKBwYHCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgr/wAARCABlAI4DAREAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD67+MHxXi8TvLGsnB7GvzKhC0UfoEYRppu543rDWM0TCVl59e1YYqDmrnJUSZj6XqdhaXgRpeDxzXnxU07HMrKVjorbVtORxunz75rdRlKNiJKKZm+I9V04OJFnHX1rhlBwncxUvfsV7bXtNKjfOM45rRKR07WHNrunDJ80YPsKicJGnMiG812w8khZgD2yOtDhpsU5eY3SdVsribc9xhQfzpcktkiG77G6ms6aq5FwPl6VsqLRvGKtqzU0nVjqi+RYxyTug5WGMsfyFOMJ7FqSSOq+D2m6N8QfHkXgzUZ7mFnUsUjgzKQCMhVJGT1/wDriu2GFquOi3NqbjBc9z70+H+uaJoPge1sNKsGkjhh2wtM4SRnXjaygfKeD6j601hq1Km1y6nDXnCvXu52R5r8TvHmr2dxc6xqdrEJopQRZIAFdPlyNynBIHIOBycV8zOnjIYlznofU4WOC+rqnTldHceB/jFDregf2dqrpBLb2Ilvba0dGCyFVwisfUkjkc4r36dWdWg4PseHi8JTp1lUW7djxvxn4b8NeLvGF4/iXxjd2ltOrXGILwpIskakxqHH3QWxnaBk4Oa8epg4w1n1Pchjpwgo0lfoW/FHib4ceD/C0d5/puqXKqkSXU87SSMcjCrg7jx3JP4UUeSC0MpKtWm+Z6HQfDjUpJtP+1SaetszrxE775Nvbd1AP0Jr1aPM1dnhYtp1LI+FvGWrtp9xIXYYyc8161NXiXKopRPoDwR+w78IviB4D8PeJrzxB4yN3q+hWN/dx6feWiRQ+fEHJHmQ/dBzxlmAx1r9GwXCGW4nBU6s5TvKKb1W7Sf8p8rXzfE060oJKybXXv6kr/8ABND4Mt/pH9q/EYNsL7Bqul5zuxt/1WM4+brjHfPFavgXJ2/jn98f/kTlea4lu9l+P+ZaH/BN/wCEETFF1v4hMAzqG/tTTcEKMg/6nox4HfPUAc1UeB8oj9uf3x/+RB5riG72X4/5kc//AATV+DV6BHNrPxDUM8YLf2ppvy7hkk/uTwvQ9+fl3Dms58BZNN3c5/fH/wCRM3mVdu9l+P8AmVV/4Jj/AAXSHeNY+JOfK37Dq2l7s7tuz/VYzj5uuMd88ULgLJkrc8/vj/8AIl/2riF0X4/5kjf8EyPgurMg1/4jMA0ihhqumchRkEZh6N0HfP3go5o/1CyZ/bn98f8A5Er+18T2X4/5gP8AgmP8FZHCtrvxFUM8YZjqum4AYZYnEPROjd8/dDDmj/UPJ7W55/fH/wCRB5vimrWX4/5lvw1/wTG+BV/q1rpFz4p+INmZ9pIl1Gw4HmbSMpbsN3Q/Rh7gTU4GyilRlJTnon1j/wDIjhm2JWll+P8Amd+P+CQP7Oo/5qT8QD9dUsf/AJDrxf8AVrL/AOaX3r/I3/tfE2tZfj/mXvD/APwSk+B3hXU4da8O/Fn4i2d5BIHhurfWLNXQ+xFpTjw3gItNSlp5r/IHm2Ias4r8f8z0/Q/2V/DekFJLz4jeKdUkh2mCfVprOaWIgDlX+zBs8Z612RynDx2k/wAP8jCWNqSVuVL0v/mbUnwN0KSNoj4o1oB87issAJJ7/wCq6055Vh6is5P8P8jKOJnF3/z/AMzn/FH7IfgTxdE8OqeMfEgEihSY7m26f8CgNedU4Wy+rK8pS+9f/Ino0M8xeHjaMY/c/wDMi0r9jn4e6FFdJo3i7xJbNdxqryRXVvuUrjDDMGC2RnJzVw4Zy+Gzl96/yHVz3GVrcyjp5P8AzMbWf2A/hfrciTXXxD8Yo0aBAYr60GVxjnNsc/175rKtwrl1f4pS+9f/ACJrR4jxtBWjGP3P/M80/a2+AfhH4CeBvD/jHw/4s8Q3k664unRW1/eWxibzIZpN5AiTLr5QAOcYLcHgj5/OuG8Fl2GjVoyk25JatWtZvol2PVyzO8Tja0qdSKStfS990u77i/BG7WbS3ubmVrh5F3NJNKZTnPT+6PoAK8qMFGO50TTqSPgz4rateRq8+8kV3UZWdrGc1yo/Rj9mCYT/AAW8FSll3P8ADrQWI8wkjNs3UdB9ep5z0FfuGWf8iyh/gj/6Sj4bFa4mfq/zPQri4gtIHurqZI4o0LySSMAqKBkkk9AB3rtMD80f2nv+Cvfxp+PviXUfhn/wTnv9M0Hwnp1zJZ6n8btc01b0X8yErImi2b4jnRWBU3c2YmIbYjABz8xnnFGDyd+yS56nZdPV9PTc/T+B/C3OuMYrEyfscNf42ruVt+SOl/NtpebaaPCNC/ZB8W/tM+IHX4m/GT4rfEzUgRJdX3if4j6hFbWu4/wxW0sMEKZziNU7HAODX5LxJ4rVMioKti68aSl8MYxTlL0Tu35vRK6u1c/a63hf4bcM4RTzCMqj6c05czflGDiv0XVnqfhb/glZ8cvhYia3+zF+2R45+HOrQgNDBpnjzUr7TncHjzrW+86Kdf8AZZPyr4zL/pGXrpToznDzUE//ACVpfiz4DNsi8NMVFxw2HrUX0cZKX3xnKV/RSXqev/Av/go9+0x+zP8AEvRf2dv+CqPg/S7S38QXosPBfxy8NQeVour3JYrHbahHkrp91JjKnIjfOAEwSf37hDj7h/jOhfBztUSvKEtJLzXddLrQ/Ic6yR5VV/d1PaU3tKzT9JRez9HJdpPU+9IpY54xLE4ZWGQR3r7Y8IbpQX/hYOjkqufLkwShzjzbfoegHTg8njHQ1liP92n6P8hr4kesV8obhQAUAFABQAUAFAHzr/wUtk8v4NeG9um/a3bxzarHDgn5vsl3zwD/AIV4HEcefAxX95fkz2ck/wB7l/hf5o5P4XyvFpaR2mjrbp5Iw0kuWb8q+FrU6iSPpabhKTSPiX4ueFra30uXzAC2wk8dK2oSc2mZ4mMldH3z+zArJ8EvBMYLbV+HmhBQWG3/AI9j0HXPTOeOmOhr91yz/kWUP8Ef/SUfB4j/AHifq/zPkL/guz+0b4hsvCHg79hP4e69cafffFmS6uPG1/YzFJrXwvaBPtUSsvMbXUssVsG/uGYEc1xcQ5qsnyueIXxbR9Xt92/yPsPDzhV8Y8VUcvl/D1lUa6Qjv6X0in0bTPkfR5NI8OaPa+H9AsILOxsrdILS0t0CxwxqAqooHQAADFfgVTEVK1Rzm7t6t+Z/oBhsvoYShGhRiowikkloklokvJH3Z+yl4e0rQvgrok+mhGfULcXl3MoGZJJOTnHUqMJ9EFfyHx3mOKzPjPEus3anLkiu0Y6aervL1Z/N/G+Lr4niKuqj+B8qXZR0/Hf5nrmnKAoqMujsfB1mUPjB8Evhv+0Z8Jte+CPxc8ORar4d8Sac9nqdnKOSrdHQ/wAEiMFdHHKuqsOQK/R+HcfjMpx1LGYWXLUg7p/5909muq0PHxdOFam4TV0zzD/gkN8cPiOnhrxt+w/8fPEkureOPgX4k/4R6bWLonztX0h41m0u/fPO6W1ZQckktESSSc1/fGQZvSz7JqGPpqyqRTt2ezXyaa+R+a4qg8PXlTfQ+y9Jb/i4GkLu6pIcebjP72D+Hv8AXt0/ir0sR/u8/R/kYL4ker18qbhQB86ftSf8FNPgf+yX8VoPg7488B+NtW1e50qPUIj4b0u2uIzE7SKB+8uY23Dy2J+XGMc0sO/rMqij9h2f3J/qvmXVg6MISl9rVfJtfoS/AT/gpL8Hv2hNO8W6p4Z+GvjzSYvB2gSavqJ8QaNbwefCgYlIdlw4Z8KeG2j3rXE03hcFPFSfuxaTS31Ten3d+xnQf1jG08LH4p7Ppulr/wCBLp3ND4Kf8FDPgX8efgB4t/aK8F6V4gi0rwXHcSa1pd/aW6X4WKDziURJ2QhlyFJcZKkHGKMZSlgqEK09YydlbvzKNne210/RrroLCyWLxTw8dJKz17O9n17NeqPSPgP8Z/C/7Q3wj0P4z+C7C/tdL1+1M9nBqkSJcIodkw6xu6g5U9GPGKvE4eeFq+znvaL0/vJSX4PUzoV4YiHPHa7X/gLaf4o66sDY+e/+CkniJPDHwW0LU2sWuG/4TK3SKNQPvG1uiDk8Accn0rxc9aWDi3/MvyZ6mU3eJdu36o4DwJ49i1nRIZ2l3YQdF47fnXw2IrpvQ+mwtNJu58hfH6drOKd0cENkjFa5dSfJqb4mpGpqfdH7MB3/AAV8FS7fvfDvQefKx/y7H+Lv9O3X+Kv3LLdMuo/4Y/kj89xOmJn6v8z8p/8Agrr4zuF/4LKtperTFVtPgXptnpKE8bZNRvLiQgepK8n/AGAO1eDx1llXF8I1sXTV/YVKbl5Rlzwv/wCBOC+Z+4fR5x2Gw3HcsPUdpVqM4x82nCbX/gMZP5Hmza/j+P8AWvwH2h/b/sD3r9mP9vKz+CnhKTwP488NXuq6ba+ZLpb6V5f2iJmJYwlZGRWUsWYMWBUsRyMbfy7izw8jxBmqx2Eqxp1JWU+a/K7ac14qTTSSTSTvbo73/KeN/DfEZ1iZY/LpJVGvei9FJpaNPo3trpfW61Phr4qf8F9/+CiWufECfxJ8P/Fmh+E9GE+bPw1a+HbW7iWIH5VkmuI3ldyMbmVkBOSqoOB/oxw19DLwcyzI6dDGwq4mu4rmrOrKF21q4wg1BR/lUlNpbylufwbiuMs5qYhuLUF/LZP729b99j9LP+CPP/BWix/4KJaLq/w/+Ivhay8P/EfwzbLd39lpbP8AY9TsWcJ9qt1kZni2OyJJGzNgyRsHbeVj/lTxu8Ba3hBmFHE4KtKtgK7cYSlbnhNK/JNpKLuryjJKN7STiuW8vpcmz1ZtTlGorVI722a7r9TY+HWoJ4U/4LyePdN0FtsPiD4IeH7/AFxU4DXcN7dW8Rb1IhwB7V934RTqS4SUZbKpJL00f5tniZ2ksZp2R+hWkh/+E90kgPt2vnCjbnzYMZPXPXGOOuegr9LxH+7z9H+R5C3R6tXypuFAH5yftseIvjb4V/4K7+Dtc/Z38AWPifxbF4CA03RdSvEghnBW9EhZ3kjA2oWYZcZI79K0yd1F9eUVo2r+S5aWv32XzHmipuhhOZ23t5vmlofQnhvx9+2V45/Zw+K7ftc/AvRfBUlt4RvBoa6Pq0V0LtWtLjzS3l3E23bhMZ253Hr25s3hhllM3CV5a3XlZWe3V3+43yqVb+2KSa928dfPm2+4+D/2c7m5/Z4/Zyn1eed08PfG/wCEPiSzlLt8ketae935XsN0BCgd2Y16Wa+/Tq4J7r2FaHo3BVEv/S35WRw5dpjKWLXScqUvSUVKD+cvdXldn6G/8EwP+TCfhr/2BZP/AEolrfOP99/7cp/+m4nLln+7P/HU/wDS5HvVeWegfMn/AAVW1GLTfgN4cnngSRW8eWqlZGIH/Hne+n0r57iV2wMf8S/Jnr5L/vUv8L/NHg/w58Y2Y08JbokaBMhVlLDn681+d16kYs+opSavc8A+PMiXVnNMJSRg/wBa+lwaSpoylfl1Pvj9lwp/wpPwSAy5/wCFc6DkByTj7M2MjoB7jk856Cv2TLv+RdR/wx/JHwmK/wB5n6v8z8wP+DlD4LeIPAH7QPwm/bc0OFxp17pr+CtfvAvy2k6zPeaeze0jSXaEnAGFB+8K+04U/s3FY2plmYq+HxcJUZ+XN8LT6NSSs+jd+hrl+aY/I8wo5lgZctajJTi/NdH3TWjXVXXU+TvD/wAWdE1u2X7ReJa3OP3lvO+3n/ZJ+8K/n/jvwb404Mx81DDzxGGu+WrTi5K3TnUbuEu99L/C2f6C8B+MfBPGuXwlPEQw+Jt71KpJRd+vI5WU49ra2+JIzfiJ8bdF8I6JPJp97Fdag0ZFrbxOHw56FsdFHXnr2rTw68HuK+NM4pLEYedDCJp1Kk4uHurdQ5knKT2Vk0t5eceI3jBwnwVk9V4fEwr4tpqnThJT95rSU+VtRit3dpy2j5fIesaIW3MVzk85r/SqEYwioxVktEf5pSlKUnJ7s+zP+Dd/wx4nH/BRuLxBo139n03SPBGq3PiORpdiGzIijUMTwR58kDY/2M/w1/Mf0tMRg6fhbGjVV6lTEUlTXXmSm21/24pK/nbqfR8LRm8zbWyi7/h+p+iP/BL6/l/a2/bf+Nv7fWno8nhnxJr1t4b8AXDcpPo+kRtbm7iP/PO4uDLIM8gqelfjXBOTTyLhqhhaitO3NL/FLVr5XUfkdWYV1iMVKS26fI/SPSgv/CwdHO1c+XJglDkfvbfv0A9up4x0NfTYj/d5+j/I4l8SPWK+UNwoA+Ov2uf2Kf2wfH/7ZWj/ALV/7L/xD8E6JdaP4aTTrdvEks7SLJ+/WQ+WtrKhUpNgEnOc8DAp4GU8I8QntVa+5KH6x6dCsX7PE0qMesL/AH3b/JnZfCn4R/8ABQ3WPBnjzwb+1X8W/AeuQa94TudP8Or4fhki+z3csbpvmP2SI7MMOm4+1GNp4fEZdUpQTVR2s3tazvf526dwwdSrh8ypVpP3I6tdbpxat8lLr1R574k/4Ji/EDxb/wAE2tA/ZL1fxF4cXxt4Z1OS/wBL1aO6nNgsj3Uzspk8kShWhmYH9394DggZrbMKqxOOo4ilpyxUXfquVJrr1Sa9OhlgI/V6VenU1VR3VujVrPpro15Jv0Poj9jj4MeKP2ef2ZvCPwY8aX9hdapoGnNBeT6XK727sZXfKNIiMRhh1Uc5rXH4iGKxHtIbcsFr/djGL/FaGGDoTw9FwlvzSf8A4FJtfgz02uM6j5H/AOCzGpf2V+zN4cuBLsJ+IVoqttz/AMuV8f6V89xL/wAi9f4l+TPRyx8uIfp+qPj74WeLbhtLH7zPydR+FflmJm+fU+hVVowvisn2rRpGyC205r7PDSUbHXU1R9/fswb1+CPglCX2j4d6FgFxtz9mOcDqD0yTweMdDX7Ll3/Iuo/4Y/kj4HFf7zP1f5j/ANqb9mn4XftffAXxJ+zz8Y9E+3aD4ksDb3SIwWSFwQ0c0TEHZLHIqyI2DhkBweldhgfzxftj/sefH3/gnV48l+Hv7RWkXOoeFGuTF4W+KFnaM1jqEOf3cd0Vz9luccFX4YglSwG4/uPB/iRQdGODzeXLJaKp0a6c3Z/3tn1s9X5+IwbvzU/uPKp7XT9WtRfaXeQ3MLjKTW8odGHsRwa/XqGIoYmkqlGalF9U0196OBpxdmc7rGk2sUqpc3ltbCRwoku7lIYxk4yzyEKo9WYgAckiuXM82y7JsHLFYyooQj33fkkruT7Rim29kVTpzqy5Yq7Psj9gv4JfE744fCXUv2bP2SrPUtM8OePJo0+Mvxua0ktzqVgm5f7B0NJVDNEQzia7KgMzuuCixiT+NuNMZi/ETi2lmuPi4YXC3WGouzd21zVqlrrnlZcsU2oRS15uY+nw8oYDCOjS1lL4pf8Atq8vPr6H7e/sn/s5eDP2avhNpHw58F6FBp9jplhFa2dpAPlhiRQqrzyTxyTkk5JJJzWhzM9M0oj/AIWBpC7hkxycebg/62D+Hv8AXt+NZYj/AHafo/yYL4kesV8obhQAUAFABQAUAFAHx/8A8FqrSO9/Zh8MwyzrGP8AhY1mQzZ/58b/AKYrwuIY82BX+Jfkzuy/+M/T/I+LvhXbPHpzKoJAXgkV+YYum3PQ9zm0KfxJcpYSxseCvrX1FOT5kepXTjK5+gH7Od1HpfwO8EXlxbTtG/w80QK8Fi8hytuoIygJJ/eKQuOBuPrj9oy3XLqP+GP5I+AxX+9VPV/md42vWKMyGC9yrSKcabORlBk4ITkHsejHhcmu2xgYnjrwv8PfifoNx4S8ceFDqdhfIsFzaX+iSSRSrIudrq8ZUrj72eF6Ng8UWC58QfFv/g36/wCCafxF1ebxNo3wMu9AuJ181/8AhG21PTkAL7cCCBljU552hAQOenNaUqtag705OL8nb8huz3G/Cf8A4IBf8E8fhdrya/8A8KO/tW8gkfFx4ijv9UGY+SQlyXj/AN0hfmP3cmpqTqVZc05Nvzd/zDbY+0Ph38Ofhx8N7OHTvDnh+eIRLFFFt0mZVQFflA+TCqAMHsvQ4PFRYR1Q8R6f5fm/Z7/Hlh8f2VcZwW29Nmc57dcc4xzTsBZ8O3BvvHOnTwQXIigd4pGltzGu/wA2HGN4BPQ4I+U889KxxH+7T9H+Q18R61XyhuFABQAUAFABQAUAfJH/AAWVhjn/AGafDccgJP8AwsK02Y9fsV9/9evGz3XBr1/Rndl/8Z+n6o+SvhboyHS8KvO0HkV+b4mPvnt20OQ+LkflWEnGNoIr36K7ns4hJo/VH9k7RtHm/ZZ+Gk0mlWzM/wAP9GLM0Ckkmxh5ziv0HC168cLBKb2XV9j4LEpfWJ+r/M9A/sLRP+gNa/8AgOv+Fb/WMR/O/vZjZB/YWif9Aa1/8B1/wo+sYj+d/ewsg/sLRP8AoDWv/gOv+FH1jEfzv72FkH9haJ/0BrX/AMB1/wAKPrGI/nf3sLIP7C0T/oDWv/gOv+FH1jEfzv72FkH9haJ/0BrX/wAB1/wo+sYj+d/ewshY9G0eJ1li0m2VlIKssCgg+o4pOvXas5P72FkWayGFABQAUAFABQAUAfKH/BYNBJ+zr4YU/wDRQ7T/ANIb6vGzx2wa9V+TO3Afx/l/kfOXwc0EyaP5pTrGOR+FfntdKcz6Hkcoo8a+N2oRpDMU+6Qc5Havdo/Cj061uXQ/V79kZg/7KHwwcd/h5op/8kYa+3wv+7Q9F+R8JiP94n6v8z0OtzEKACgAoA+efF/7Wb/D74i/Fzwb4p1XX3bQ7W1fwsuk+CL3UIrQvpqysXmtLWRFzKd375uB6LWFSVSWT1alN2qKVRJuyVlGDjq/d0bd/XXSx00oQWZUYVF7kowbS1bbqVFLRe9qlFK3bTW5B4n/AG0td+Evwc8IeMvE+meHdYuLz4f2eu619u8WpYajdZgVpja2UdtJ5pzk5Ywx5IUMO3q4ulShnFbDxVoxqcqt7zScrJvayXm7uzsnY87AurXy6jVbvKa66JtJPfu79FZdbXNrxp+194s8N694nbR/gmL/AMO+D9Q0yHWtdm8SpA7RXkVvIGht/JZpJE+0DKMyKVXIkJO0YUaLnUhGo+Xmqukuvvcyin0928lfquiZUqyeH9rTV/3Xtrbe6udtddbQdt03o7aN2Pin+1b4w8FXni2/8HfB621vQvBF/aWGv6ldeJvscxup0gkKwQ/ZpBIkaXERZmdDkkKrYJrPCwVeVLnfLGpUVOL3+2oOTWllzXS1bbWtlqa4hujGfLrKFN1GttFGUkr66tRvtZJrd6Gv4x/aY/4RLS/iHqX/AAhX2j/hAtY0+x2f2ls+3faobSTfnyz5W37VjHzZ2ZyN2AUI+3jQe3tKvs/T34w5vP4r202tfqFV+zdT+7SdX1sqj5f/ACnv57aa6vwv8beJ/Efxe+JPhfWNT86w0DV9Ph0iDyUXyI5dOgmcblUM2ZHZssSRnAwMClSSlgFUe/tKkflFQsvldhVfLiowWzpxl83Oqm/uivLT1O/qRhQAUAFAHyl/wV+AP7PPhcN/0UO0/wDSG+rw+IHbBL/EvyZ24D+N8v8AI8a+BltCPDibsZMfU/hX59N3kz6ihB8p8qfGXV1urWYR5YnOPxr3aCbibTm5Xsfrv+x5u/4ZH+Fm4YP/AArnQ8j/ALcIa+5w3+7Q9F+R8Vif94n6v8z0atzEKACgAoA5GL4MeF4dV8a6wt/f+b47jiTV1MqbYRHai2Hk/J8vyDJ3bvm9uKzq0o1cDLCP4ZObfe81GL8toq2nfc1pVZUsZDEr4oKKXb3ZSkr/ADk767WOH8SfsSeANf0R/Dlp8RfGGk2V14HtvCurw6Vf2yHUrG3jkSEys9uzLIolkOYjGrbsOrL8tdVWvKtiKlWaXv1FUa6KatquvRKzbWm19TChFYenRjDekuVPryuzafTdbpKS6NHQ6v8AszeA9a0HxZ4eutW1dYfGM9jLqbRzxBomtYYIo/KJjIUFbdC24NklsYyAEq0lOEv5avtV/i5ozt6XivO19epEKMYUfZrb2Xsf+3bTV/8AF7712203v5d+0b+z/wCP/HPjDxBoPw38M+NLO18WX2mz6ve2uvaVHoNxLEYVe5uIpD9uWRIolXZCNkpjTcOpowMlSrU3P4adVTSeu0ozfLbrJp2UtIybkrMvGL2mHmo6ylSlT00eqmoqV9LLmu3HVx93pY734j/sgeCviV4i1zW9Q+IXi7TrXxHPZ3OtaLpGpQxWl1c2ojWKZgYWkztijUpv8tgoJQkZqcNN4aUGteSaqRvspXi36puOt72u3HldmnXXt4OL0vB021u4vm+5rne1r7Surp914X+HOieEvF/iTxpp11dvdeKbu3uNQjndTHG0NuluojAUEApGCcluSeg4qYPkoeyW3NKXzla/y91WCS56qqPdRUfkpSkvneb+Vvnv0hhQAUAFAHyv/wAFc7G7vv2ePDgtI9xi8fWrv7L9ivRn8yK+d4mfLl8X/eX5M7cAr1n6f5Hz/wDBbW/s+hBHbkIP6V+a1a9nofV0H7p80+MdKa8tW+XryCBX1dGXLpcavfU6fR/2/wD9vXwF4U03wR4H+OZstL0bT4bHTLUeGdMk8mCJBHGm6S2ZmwqgZYknHJJr1oZjiYRUVLReS/yPPq5fhpTcnHV+b/zLWn/8FHv+ClFyMv8AtFvwef8AikNI/wDkSm82xUX8X4L/ACMVl2Gb+H8X/macf/BQf/gpGxH/ABkLJjH/AEKOkf8AyJULNsW/tfgv8jeOVYV/Z/F/5l1P29f+CkkkXmJ+0DJ0/wChS0n/AORKbzbFW+L8F/kS8rwv8v4v/MbP+3h/wUqeDdb/ALQ0gbt/xSOkc/8AkpXPVznHR1U/wX+RMssw6V+X8X/mWNI/bR/4KkatGXtvj1cNj08H6R/8iVKzrGuN+f8ABf5DWXYNr4fxf+Yt1+2n/wAFQ7BHkvvj7NGF7N4Q0n/5ErSGc4ySu5fgv8hQy3DVFdQ/F/5mPJ/wUH/4KUoxT/hoiTI6/wDFI6R/8iVM86xnSf4L/Iv+ysLb4fxf+Zlal/wUX/4Kc2VwuP2jnMZODnwfo/8A8h1ms9xt9Z/gv8jN5Zh07OP4s9h+GP7XH/BQXxH4aN7P8e2v7qSMtHv8MaWgj47hLYZ9eM5xWVXiDGwV+f8ABf5GtHK8JUnZx/F/5nV+Hv2nP24brS5RefG5pblUJQN4e01HJ3YI2/Zh05HTPQ08NxFiaujnf5L/ACNMTk2HhK8Y2Xq/8zl/GP7aX7e3hyOJ5/i35SrciKedNC01k2lgPMwbYldoyT2rWrnOPivdn+C/yCjlGEqSty/i/wDMoeH/ANv79ujVPCmmeN08b3s1hql2YLaL+ydLWUndtViBaHKsQewwATnFcdDP8yU37Spf5R/yOqrkGD+GCs/n/mbXh39q/wD4KHeKb+ddL+Kspifm3j/sHS8ptJDAMbUBs8EZ962/1gxsp2U/wX+RzyybCQjrH8X/AJnZ3H7Rn7XXgu0a/wDHXx8vvIFsXM6+FtOxG/o221rrpZzi+W8p/gv8jzMRhKEPhh+L/wAzwj4qftN/tE/HS3h8I/FP4j/2rpFtfreWtqmlWsAEqo6K+6GJHPyyONpOPm6ZAx8xm+d4vEw9lOV0nfZL8kaUcPSpvmirGt8PtV+w2TRBsEDHJ4r5Sddymd0ZtLQ8p1BFmsGMgzgZr7tScZo64t2KNlpVrKmWTr7V1rVjSudJ4S8MabdzhGQAH/ZrjrVJRZCspbHo+kfD/QRAN8AYjuVrCFSTZ20Ka1ua8PgjRNmPIHT+7WqnI2dNJOwW/grR47hAsQxkcFaylN8rRhKPuM+ovgR8G/Bo8MG++wIXK5+aMHsDXfhUlQcjhpzcGeXftFeBdGTUZIbeFI1JJwsY4rjqylUW5pCcqkuVaI8HuvBWipcMvkA89xXLzPlO2MVsZWteCdFmiIaBef8AZrknOUXoZVacbXPX/wBmrT9Js9Jltk0qFzCREGkXIweCcetL2kqiszOiranpfib4GWvhLTZvFfhvxTd2xaWzlmt9u4OJmdpEDbvlBwoGOm33rGm/ZJyXc9hVI1vclHoaXj34GeFPFVlfajqKI0ptP3CtACkLnaN4AIJP1PWn9bqybZz8kaTVu54t4W+DOj+IfBfh7RH1Oa3gi8X6nNcCAHMyxLBF5YJOUU+ax45A4HrXLCtP212elJpSbt0Po34PfBnwS2qrbwWLRRWttuSJXYjA7cniu6MU6qbPKxNSUKF1u3Yz/wBpC0trDwVevY2sSLDDI8gZMmTGTtznAHHoa9CtJxoXR5FR+z0PiK/toZ7uS9KBWZidqjgc18TiK051Gc1tSXS7ya3LCFiAc5596wg77mKm07H/2Q=="},48922:function(e,n,t){t.d(n,{Z:function(){return i}});let i=t.p+"assets/images/mate-ibus-starting-daemon-84bcee7978b1d8eb7163cb0d9b964ec3.jpg"},78667:function(e,n,t){t.d(n,{Z:function(){return i}});let i=t.p+"assets/images/mate-keep-files-prompt-2aa2cbdb6a94db223d708562c884d71a.jpg"},73210:function(e,n,t){t.d(n,{Z:function(){return i}});let i=t.p+"assets/images/mate-keyboard-choose-layout-e0ca24f2aa125275817acb229a194923.jpg"},62792:function(e,n,t){t.d(n,{Z:function(){return i}});let i=t.p+"assets/images/mate-keyboard-layout-shortcuts-62aefb0c48a9d92a34c277497866e85e.jpg"},54805:function(e,n,t){t.d(n,{Z:function(){return i}});let i=t.p+"assets/images/mate-keyboard-preferences-f13098df57c42dc0259006b9ac386dde.jpg"},6507:function(e,n,t){t.d(n,{Z:function(){return i}});let i=t.p+"assets/images/mate-monitor-preferences-confirm-c9ddeb8ecc32eb0a88fc49b247bd2535.jpg"},4786:function(e,n,t){t.d(n,{Z:function(){return i}});let i=t.p+"assets/images/mate-monitor-preferences-dragging-0fb78bb10ab52ce991b90df95a517622.jpg"},73004:function(e,n,t){t.d(n,{Z:function(){return i}});let i=t.p+"assets/images/mate-monitor-preferences-db6d4f848b460b4278da5c95e62d4d9d.jpg"},94892:function(e,n,t){t.d(n,{Z:function(){return i}});let i=t.p+"assets/images/mate-mouse-settings-d43911b0e7fdc6f3a196808da1e353a8.jpg"},1986:function(e,n,t){t.d(n,{Z:function(){return i}});let i=t.p+"assets/images/mate-multiple-user-settings-112efa554f35300d772bb5ede0cc603c.jpg"},49690:function(e,n,t){t.d(n,{Z:function(){return i}});let i=t.p+"assets/images/mate-network-authentication-13f522132661aa358181f94e002fcc9f.jpg"},40915:function(e,n,t){t.d(n,{Z:function(){return i}});let i=t.p+"assets/images/mate-network-disconnect-eff4984eda8c49d3e42259381f0490b0.jpg"},77426:function(e,n,t){t.d(n,{Z:function(){return i}});let i=t.p+"assets/images/mate-network-hidden-38a73abbffc438c4c8dc66f70d38fe33.jpg"},88508:function(e,n,t){t.d(n,{Z:function(){return i}});let i=t.p+"assets/images/mate-open-with-right-click-096ce2548d773af1ee45fceb5f2153e4.jpg"},36998:function(e,n,t){t.d(n,{Z:function(){return i}});let i=t.p+"assets/images/mate-open-with-setting-86e0958d69c60f7b4253ac2989931023.jpg"},10440:function(e,n,t){t.d(n,{Z:function(){return i}});let i=t.p+"assets/images/mate-preferred-applications-dcd4e02b67ec579d69171c22c1eb38d3.jpg"},59548:function(e,n,t){t.d(n,{Z:function(){return i}});let i=t.p+"assets/images/mate-single-user-settings-a1253a12d1a7214129fe3ac5dd897e32.jpg"},10265:function(e,n,t){t.d(n,{Z:function(){return i}});let i=t.p+"assets/images/mate-sound-preferences-e6f0a451c79339dfbc290113f63e2894.jpg"},51910:function(e,n,t){t.d(n,{Z:function(){return i}});let i=t.p+"assets/images/mate-startup-applications-e0d8dbd51c24a2987e3b83bc758d35fc.jpg"},17010:function(e,n,t){t.d(n,{Z:function(){return i}});let i=t.p+"assets/images/mate-time-and-date-right-click-792aa50841ec26d8fcd4803ebb171839.jpg"},3141:function(e,n,t){t.d(n,{Z:function(){return i}});let i=t.p+"assets/images/mate-time-and-date-settings-5fd258bf8a3cd09c075789ecb72370b4.jpg"},31245:function(e,n,t){t.d(n,{Z:function(){return i}});let i=t.p+"assets/images/mate-time-and-date-c6cabc4c6ccfb4d51983c582ac985445.jpg"},40498:function(e,n,t){t.d(n,{Z:function(){return i}});let i=t.p+"assets/images/mate-touchpad-settings-d9b3577e085d2ec9f5e357263f35ef90.jpg"},75410:function(e,n,t){t.d(n,{Z:function(){return i}});let i=t.p+"assets/images/mate-tweak-desktop-30894d02f2a10654d0b8219947f974e6.jpg"},31246:function(e,n,t){t.d(n,{Z:function(){return i}});let i="data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEASABIAAD/2wBDAAIBAQEBAQIBAQECAgICAgQDAgICAgUEBAMEBgUGBgYFBgYGBwkIBgcJBwYGCAsICQoKCgoKBggLDAsKDAkKCgr/2wBDAQICAgICAgUDAwUKBwYHCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgr/wAARCADBAEcDAREAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD9HpfDgaLBj61+HVKaeh+iyp3RzPiLwqRvEaHPpiuGpScehClZWOflt7eyVobpsjPTFcc46HRRpSmrT2PP/FVnAL8zQIQO5xxXDUcEioKNObXQyluETADfpWDXMjWU+UabuZjti59yK5aiV7HLec3cbNZxsocplifmyBWU6TWpE3yswvEWl+dA20fhXNL3pWZ5GMpKabR59q1p5MhUEDDdc4FceIirWZ4/K9rn6ZXOkRRxkuoXGe1fr04KKufZKMm7HJ+JrUsTDEm336Vw4l+7cHCK16nAa54enaUsFOM9PWvEqKpLQpTnszntZ8JPdwHcoHB6CuOVJp3HKEXRunqcLqXhy5sLllYMy544qJNSdmc9Cqr2luVXRVUA4GO54rN01udaSbGmUKgyenGfWolF2djKrTTKd6olQrg9O4rmdJPVnFUimuU4vxVpA80yDu3pXHioX92x4tWHs5n6SXURuiWZflzwBX6zVkuh9jJxWhzfiDTirE7RwfzrzZ++7HPopHMXei3N5KLeztWlkY/KkaZJ9cAUU8JUxFRQpxcn2Su38kFSVOnFym0l3ehSvPA3iMx4Xw3escdrN/8ACirkWbp3jh5/+AS/yOFY7Bp29pG3qv8AM4/xV8LvGlype28HanIechNPkP8A7LXnVeH85lLTDVP/AACX+RhUxWCjK8akfvRyF18JviQ+T/wrnXSR3Gkzf/E1j/YGef8AQLU/8Al/kdVPHYLf2sf/AAJf5nK6hpt5pl7JZ3tvJFLDIUmhljKtGykggg8gg8EHuK8irTq0arhNNNOzT0aa3TXc64yTtJap/cVGG9O/TvWEovuZ1IRbuYuvWQuI+AAc9azdFPW55GNpJq5+jUti65CpzX6by8+x7afMZepeH5pgZJE4HcVzVaDjqguk7sp+A9Na1+I2kyBeBeD+te1w01/bNJf4v/SZHmZ1Lmy2p8v/AEpHv9fqR8IFABQB+aPxYs7j/hZfiNzGcNrt5hv+2z1/O2fKMs7xX/Xyf/pTP0rAVISwFKMv5Y/kjlnslmXKghumcda8OVJlzSsZOrW8kQKyLj0yaiKtpY4qsItan6WG1V0BZQF71+pUoI6YS5SC8tUMQQJ2qqlNSQ7czMbQLMQ+ONObb0vU5/GujIKajndJr+9/6SzzM3SWWVPl/wClI9hr9MPiDk9K+It3qHj2Xwo9hGsCyyxRyAnfuQMST2wdp4xXXPDKOH9pfX/MyVRupynWVyGp8EfEfwuT451mZ4flm1S4cEd8yMa/n/OaEZ53iX/08n/6Uz7zBVI/U6af8q/JHK3/AINVTvSHH0FefLDNbI6ryijA1bwp5gK+XnnisnhlFHHW5m7n6CpOj/LkYPTFfc0a8WjtlFoiuoeCwrpjNTKjK5R021A8UafMB928jx+LCu3I0/7Zpv8Axf8ApLPPzlL+zZ/L/wBKR6dX6MfDHl/hn/kssn/YQu/5SV6lX/cvkv0OWP8AG+89QryzqPlXxToMV5rF47wA5upD06/Ma/GM0w6ebYhrrOf/AKUz73C0b4KlL+7H8kc5e+FoNrfugp7HHQ1yugrHRyyaOS1zw4yybVjK9unWs5UYNHPODvc+pRqJi+UP07Gs6eIZ68qd9WWrfVDL+7k5OOK76GI13MXTsyfTV/4nNn7XkX/oYr6nIWpZpTa/vf8ApLPNzqKWV1Pl/wClI9Er9BPgzy/wz/yWWT/sIXf8pK9Sr/uXyX6HLH+N956hXlnUeCXui+bdTTFfvSE5+pr8mzOF8zrP+/L/ANKZ+kYGzwFJP+WP5IytR8Ps+cQ/XiuPksayjJaxOc1jwtk5eMewzWahG5zOM5yPQ7u5fzsM3FfKxqyT3PbnbYtW94yMGJz689K9ShNvU57Kxu6Fdi41Sy55N3F/6GK+04Zqc2Z04/4v/SWePniX9mVLeX/pSPSa/Sz4A8v8M/8AJZZP+whd/wApK9Sr/uXyX6HLH+N956hXlnUea2ujw3NurMPvKDX5xjsPz4+t/il+bPvsHNrBU/8ADH8kUr/w88TlCnHauCphnE6FWbic9reiAyfMo4PeuVw5Xqi4yUi9cxxyYdD+Br5GVFHqVYuKGjaSF2/T3rahKSWpzxm3oaXhWVh4isYycg3kY/8AHhX2XC8k86pW/vf+ks8jPNMtqfL/ANKR61X6sfAnl/hn/kssn/YQu/5SV6lX/cvkv0OWP8b7z1CvLOo4rRokNpFzyY1PH0r4PENLH1b/AM0vzZ9vhpP6nT/wr8kXLuySaDBGcdKqUFJDUveOb1/SQcMo698V5mIw9paGt2mc5LL/AAt0z0r4ebTV0fWcnMrMYH3kFSOO3rWcJO5zSocpp+E5mbxTpyn/AJ+4+/8AtCvquE5v+3KKf97/ANIkeHn9Plyuo/8AD/6Uj2Cv18/Ozy/wz/yWWT/sIXf8pK9Sr/uXyX6HLH+N956hXlnUcRpNwn2WJR1ES8/gK/NsXVX9pVl/el+bPs8LJfVaa/ur8i+LhShGR7V1QrJI25dblDUYg8YwAeazqS5tSm2cTMiYJI47V+ZKqm9D6+LdynJIkA+9TlVWxvycxf8ABFys3ivTgP8An7jx+dfR8H1VLiGgv8X/AKRI+e4lp8uUVX/h/wDSke1V+2H5eeX+Gf8Akssn/YQu/wCUlepV/wBy+S/Q5Y/xvvPUK8s6jzS1kkihX0Kj+Vfl2Ye7mVZ/3pfmz7bCxTwtP/CvyRbjvmQABjWVKtK51qK6j3vUkTGRkV1xq3RnNWOHluVxjd196/InVlF2PseRrUrSRGXO5QcnpW9OcplxmangW1aLxVp7t0F2mMf7wr6/guP/ABkdF/4//SJHgcSyvk9Vf4f/AEpHtVfuR+Wnl/hn/kssn/YQu/5SV6lX/cvkv0OWP8b7z1CvLOo85g/e2iKAMhBj8q/M8zj/ALdW0+1L82fe4WNsFSf92P5IqXTSQnaT+deRdwlc10kyBb0k53YxXVCqrGjhzI5JJJPM+Yn3NfliV3qfYVHYsCTGM9+wrsoJcxyXd9Df8GKf7fsGxgfa4z/48K+74Piv7dov/F/6RI8LiRp5RU/7d/8ASkevV+yn5ieReFPEnh6f42yWkGvWTynUbsCJLpCxOJO2c169WnUWBu09l+hyQlH29r9z12vIOs84tZVjtlKn+AZr84zFr69V/wAUvzZ+hYNf7BSb/lj+SM7VJTINwJyK8aqlcrl5tjLnMsZ+XPNck5Sjsb7KxQuLArkxg9a+HdK0j6BVLuzLdjphuYPNAyR1FehhqLluYSqKMjb8KWvk63Z8Yxdxf+hivtOE6TjnlF/4v/SJHicRTvlVT/t3/wBKR3t9YJ4s8UjwveknT7SzS6v4AcC5MjssUbeqfu5CV/iwoPGQf2WMvZUudbt2Xl3+eqPzS3PLlexv3Hhvw9d6d/ZFzoVm9rggW7Wy7B9BjArBVKilzJu5pyxatYwfD6TaPrGoeEJbiSaKyWKeykmcs4t5d4VCx5ba0cgBPO3bnJyTvUtOCqd9/Vf8OjNe7JxPPftw2eWGHHHWvyXMa/8Awo1l2nL/ANKZ+i4FXwVJP+WP5IqM7yMd/T1rgbctTs91fCJJGrELxjHr1rhrKVyGn1GSwGKY4HXg8V89Onqev70loT2BEEu+MjBPIHStqcuUzqLmWpt6O0T6vZsi4P2uLP8A32K+y4VnfOqK/wAX/pEj5/PFJZZUT8v/AEpHYak974f8Qx+LLSyluYHtvs2pQQLukCBi0ciqOW2lnBUckPkZIwf1+PLUp8jduq/yPz53jLmKNt+0n8Cb/Vh4c0v4oaTeaq1xLbro1pcebe+bGGLp9nXMgI2NnKjoa6ZZPmlOj7WdGShZPmatGztZ321ujCOY4GdT2caicrtWvrdb6b9DQ0C31C6vr3xRq1qbefUGRYrVmBaCCMHYrY43Es7HHAL45xk81RxUVCOqX5m6u25M8iN4Wu5IlPSQg/ma/EczqJ5viFf7c/8A0pn6VhIWy+k1/LH8kX4IfNUbj3wcGtKO1jaKXUle2KrwOKqdJXNNGiaWy3OTjr14r5+cIs6Y1bIryW7QOMZwTWKjY1U1NFrw7deZ4jsIh0+2R/8AoQr6XhKb/t+jH/F/6RI8jP6dsnqv/D/6Uj1Wv2Q/Nj87/wBn/wD5SsX/AP2O/ib/ANFX1fvee/8AJsof9eqH50z8gyn/AJLyX/Xyr+Uz9EK/BD9fPCUtdupSydSZmI9ua/Cs2us5xP8A18n/AOlM/S8FGby+l/hj+SN2xi/d5Y8YxyK6cK01dmzp9BJ7lI8r3zXfJrlE/dVi1FMHyjHB9RXz7irmrjYgv5Igu3HT1rGouVXRrSi2yv4aAXxfp4XobxP/AEKvX4QlzcR0f+3/AP0iRycQyTySqv8AD/6VE9fr9sPzA/O/9n//AJSsX/8A2O/ib/0VfV+957/ybKH/AF6ofnTPyDKf+S8l/wBfKv5TP0Qr8EP188VTY1y+V6SH+dfh2a2/tjEf9fJ/+lM/WMBBf2bRf9yP/pKNCORlTr06c1NOU1qhzTSKlyxkbCLk59a6Y1HszC9ywZ/Mxtbn69a45R0OtQtuRXm9kLA5zXHU2ZUXyyE8KEjxbpylcf6Ynf3Felwhf/WWh/2//wCkSPL4gt/Y9X/t3/0pHsdfuB+aH53/ALP/APylYv8A/sd/E3/oq+r97z3/AJNlD/r1Q/OmfkGU/wDJeS/6+VfymfohX4Ifr54c0x+1SBW6SHP51+D5zUSznEJf8/J/+lM/XsAv+Eug/wC5H/0lF6C4wnzk9Oazp1XbUVVDRI7N+7/ACuunLm1Obl5dSjp+oRz4cv09Kwp1eZanYqsWrGopinj2jris6kG1oZyUt+hL4btmXxRp8xX/AJfI8n/gQr1eE6XLxHRl/i/9IkeTn03LKan/AG7/AOlI9ar9nPzk/O/9n/8A5SsX/wD2O/ib/wBFX1fvee/8myh/16ofnTPyDKf+S8l/18q/lM/RCvwQ/Xz55utQaPV5xnhZ2HX3Nfz1ntRLOsSl/wA/J/8ApTP13ANrK6H+CP8A6SjRiuGdd6cg+9c1CUpdR8rnoX7GQlht9Pzr16GsdWL2dkcHomvO4CqxPSuOjKyJhFSdjrdK1V2AViM+hrq5nKJ1qCtZnReHGZ9esGJ/5e48/wDfQr2+Fkv7eo/9vf8ApEjweIEllNVf4f8A0pHqdfrx+bnzP8Nv2FfFfgj9tHUf2krzxnp02jy6pqOo2dlGkn2ky3aSq0bgrtVV85sMGJO0cDJx+iZhxrhsZwhDKY0mqijCLenLaDVmtb3fKtLK19z4rBcLV8LxJLMXUTg3KSWt7yvo+lld63+R9MV+dn2p8u6jqQ/4SK7hZ+l5IPp85r+b89b/ALexX/Xyf/pTP2PLqSlleHf9yP8A6SjotNu41gCNzuXgiow001c6nStqjTsZk6KR9K9SnUSOWfu7ni3h3xQDtKSDBI6V5NHEqUdzzoVHe533h7WTPtbdj613xr8uiO6nW7nc+C7zzdesYv8Ap7i4/wCBCvpeFZN5/R/7e/8ASJHk8RO+VVLf3f8A0pHr9fsJ+ahQAUAfI2vtMniXUDyP9OlIx/vmv5rzt3z7Fr/p7U/9LZ+z5TK+VUP8Ef8A0lG5oequ0SrNwAOtcuFmlodU24I2I9SiiUNG/BHTvXqRqo5pWa1P5qIv2vP2soMeR+1B8REx02eNb8f+1a/oNcP5DHbCUv8AwXD/ACPx369jf+fsv/An/mWov22f2zbf/UftcfE5P9zx9qI/9rVX9hZIv+YWn/4BH/If9oY//n7L/wACf+ZPH+3X+29C2+L9sf4qqfVfiHqQ/wDa9b0cryzD1FUpUIRktmoxT+9IVTG4yrBwnUk0+jk2vuuSp+3l+3VK4jj/AGzfi0zMcKq/EXUySfT/AF9dtkcpZ0f9tr9v/wAQ366XoP7XnxgvLlkZ1gtviDqjuVVSzEAT54AJ/Ci0QKv/AA3r+3P/ANHofFn/AMOLqf8A8fosgI7H9sT9t7xBqAs9O/am+Kt7dzsSsUPjjUpJJD1PAmJJry6mR5JUm6k8LTcm7tuEW23u27atndDM8ypxUYVppLRJSf8AmdHefGv/AIKU6ZZG/ufjp8ZEhUZYp4z1Jio9SqzEj8qhZFkC2wtL/wAAj/kN5pmj3rz/APApf5nMH9t39tSMmM/td/FEYOCv/Cf6lx/5Gq/7CyRf8wtP/wAAj/kT/aWY/wDP6f8A4E/8zy6vVOIKACgD9gf+CHfwF/4J4+KfgD4L+I3jiw8G3vxcj8U6uZkvdbWXU7eGKC4aKRLJpCBsRUkVxFkEBgc81y1nU5rLY0ilY8a+BXgf9mrTP2VviXqPwI8rVbCx8J2eoHxHd2q/bodbj8W3FtogkbL/AGW5urCSRJraNthj2sUXzGq25cyv/WhOlj4R+PVjo+m/GbxLY6CqLax6vMESP7qNuy6jHQBtwx2xW0diXufUf/BGEfssePv2gIPgd+0rr0mgDXHA0G/ttsQ1W7JASxmuGJ8nd/BgDex27lcruyrcyjdFRtc/Zb4k/wDBOb9gjQfh5qOseJvBMXhnTdLsJLi98RDxDcxGxhRSzzO80rJhQCSXUjjpXKpzbNbKx/PJ+1z4y+FfjP4665d/BYyXPhq2vJLfSdYurH7NcapCrHbcSx5O0sOmcNtwWCn5V7opqOpi9zzOqEFABQBb0HXtb8La1a+JPDWr3On6hY3Cz2V9ZTtFLBKpyro6kFWBGQRzQBq+Bfij47+G8sj+D/EdxaxTSpLPab90EsqJIkcrxH5HeMSybGIJUucYyaTSYGFPPNdTvc3MzSSSOWkkdslmJySSeppgNR2jYOjFWU5BBwQaAPpL9oT/AIKt/tg/tMfsx+Gv2V/ib47M+h6EANTv4iy3niAIQbcX0mf33lADHA3sA8m91DDONKMZcyG5Nqx82VoIKACgAoAKACgAoAKACgAoA//Z"},18083:function(e,n,t){t.d(n,{Z:function(){return i}});let i=t.p+"assets/images/mate-workspace-keyboard-shortcuts-24395c1aa3f623b6b89284cffe6bd2e1.jpg"},52421:function(e,n,t){t.d(n,{Z:function(){return i}});let i=t.p+"assets/images/mate-workspace-switch-add-to-panel-e57ec1f9a49d5dcf52f3126805d1d110.jpg"},40263:function(e,n,t){t.d(n,{Z:function(){return i}});let i=t.p+"assets/images/mate-workspace-switcher-preferences-55630462d2aecfc0bd0f511b4ca5cd7c.jpg"},10609:function(e,n,t){t.d(n,{Z:function(){return i}});let i=t.p+"assets/images/mate-workspace-switcher-right-click-0660da43481f40fe6fec7d39e0ec6f06.jpg"},1091:function(e,n,t){t.d(n,{Z:function(){return i}});let i="data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAIBAQEBAQIBAQECAgICAgQDAgICAgUEBAMEBgUGBgYFBgYGBwkIBgcJBwYGCAsICQoKCgoKBggLDAsKDAkKCgr/2wBDAQICAgICAgUDAwUKBwYHCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgr/wAARCAAwAQkDAREAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD7i8a/FrTp2/sPTZFdj/rADya/A8TWpz92Ox+l4jFxxNb2EHoUdEttHK+d5K+ZJyx71jCjTkrs6VShCnyxZ7p4PsYdE+GomRAB5LvkD2ruwtKNHDzn3OWf7rB1PO55N8M9Ksme7ubuJS897IwY/wAQJrxK1CN+YvKsN7LBxkuup3B8L2kKi6tYgvcgcVzVcJzx0PehSc4XiW4FSWA7GG5e2a4+aVP3ZG8ZtrlmUp53VWJB46j0rGopQd+g+f2bs9jE1fZIC0bfUHvWMkmjOrCMtUcnrVrJbXAvIGOM/OoPSsLOMjz7ShOxIl5MsPng7k/iGeldVFu+oNOLHRuJ32s2M9DXa521KcNLnRaMIbu1+yy4LIPlOa7MNWWw4yT91m94bvRCG0+ddw6AE11RfJUv0MKkVCWozWfDLMxurdPcgVdWPNqY1KUbpooixFynltHhsdcVimdMFCUTM1HQNsbQyglW6ZHSibbRy16aaPOvFVjNpsz27E7T901yyTuePJJqx5t4xsLuMvJEODk4zWUo31OKUHTd0eb67dzIGjAPHQVE25I6oTUo3Rg2/iy60i78xJSBnpmuKWIlCVjto1dOVnd+E/i99rQWN1cAFhgZPeumjiIVNDrTcNDk/imDqVw8jDIYHn0rHHYf2kHYmcnzHiPirRTDcPtUjJ4r46phatCd2tB8qeplLps1tIAiHg/SsZ8z3MZUfdbOl8PXc7J9l1FN8fRXPUV7WT4irSly/ZOOUJQ1ijrtG0hbqEG3A4NfomC5Jx0Cn1Ql3YXFnOY5Fwc8cdq2qxlB7DUlfkHWMl7b3A8snk1zqVmNws9DrLI3F5aqskO5gOGHFdCcZImTlKNjT8Px3sN0A0B2HjPrUPlaMozlGWp0cOjzPdBoIyrE8DHU1hKyVzrjUdNXR1Xhqe7tZVWSIo69eK5nWV9Dtp1YVVqeg6H4z1C1VUZ2AIwQeaqV3Z3On2V1oa3/AAll/wD36Odleyrdzxrw5DqC3za1PcsZZDksxrptFo8t4SNJXW53Wha7qLTRj7xaRVwOhyQKdtNGROUoU2fUviC+i0T4RtNIduLIIMnuRXpVH7PLNTPGzdPBQT+0eU+EkNnp8YVsgktmvFjUU4n0OESWGhHyO20PWPNX7NOeccEnqKz5nFnVSk6UvIbfmSxuPPhbhjnissTQU43W501Epx5kUL3VVVvN4wRyO1eZJyS5ZHPCope7IztSkhuYmkgPzY4wa5J3joJuS0ObeWYM8NwuQeATXNKTRzzTeqKkEkljM0LMTEx+76V00qjcbkJ8y1LlnahyXVvlBznPSuyjLm0KhZrlRs2LJA6vBJ869feuqMHA55xlDU6HTjFcOs6HDEjPPSu6m3JWY5S9pC7O30nT4tQtQuBuA4rupq8LMwUraMzrrQBbXZ3pjJ4rGcHcqE48xT1jQkngK7c9wR2qHHqVWjzx0PMfiL4dE1q7pGN6DNYu0nqebWpu3MeWapYrdxmGRcMo4zSnRVjF0faQ5keSePNG+xXbsg4J54rkqU3ax51N+zq2POvE1l5sbSRffT+HHWvJx1Gpy8yOxt810Yel6hdR3AHmsCMYINeZh6tSNZKR305c1mz0jw7dx67p4tNWjzIBgPivsacIVaZ1VKUakdNyh4r+DB1GFrq0GQOQcda87FZaqpyP2i0ZxOq/DLUrCPe0DYHoK8mWUShDYFWaVmZP2WWyIgeFhg8mt8NRjhuhDcVqjofCt09pOkirkH76+tfQ4SpKLvExqRvZxO1m0rT9WiSa3YFsc+o9q92GIjUVpBFxc1dakdt4UYzBOCAfSlOlG3unT7NtnR2Gim2i27RkLwK8+peDKUOR7E9hZ3IuAUQ+56UX546ESinokdjoNt9pRdwVXTH4iuZtxfkKKlF2sa1yiRyhiwBHoah01JXR0wptyuiSPVZLQZm5HZh0rm9pJOzOuFSzsyf/AISeD1/UVpzvub3Ik0YRKm0cdgK6oTT3OKrB21N3wVostx4s0yyEeVkul3Dr05/pXXFKVPQ82tFq3meyftc+KpvCnwmg0+1bbJc3CIoz2Hb+ddeN92hCBy5zO3safmjgPBvieQ6bAJDysY3Dua8Z0+U9OjiGrROktvE1oxBEuxgeDWEpShuehDEaWkasHiuG8h+zzyDcOpz196r211qdlCutjG1rUTGC0LZXuK4KyjLUtwUp6GdYayGnwkmQx5XNefUulqXa2jLt7DHLF5qDPGSPSsYNPcmdPqtjD1Jw33CAQaVvZy02PPrJ0ttjQ8NX0bv5LNg9CK9LCzjdDozXNZly/jm0+6EifdboQele0oqS0NKrurGj4e1xRdqkjYzweetbcrUbo5b8qPRfD/iCOAiN3xnoc1tTqNJGckrXN2eW31GAjcM4zW9SPOtCVFvYxL4yWoPmcg8Bq4pc0HZm8JraRxviiO3uQ+SMnNZxik7szqQ5tjx7xno0llqDSRrtVzkEV0Qa2OaKcG4M8v8AiJpQniMhHOOfeqlSTVzzMRQalzI8m1nS2juGA4zx0riq4ZNMmnGVjlpNPay1I5wcHP4V81LCclc78Km1r0O88D3Foz+RKvQfLXtUJWSO5rmZ6NoN3b28e19rx9we1dvtPesyJRcZe8iPxLoemvbG4gQGOTrgdK7qSp1VZm7oQrQujgdY8F6ZPIf3IAPcVMsvpTZw1cO7WRlzeB1tT5lq3TnFczwk6N2jm96nGzI3lvNMYTLlSOOBxUupLbqJyhUWr1Om8H6p/bziBLdxKOwQ4PvW9LFSjpM0hjKcI2mzsIPCPid5UMWjTuOudnFdM+SrA6p4vDuOjNqLwB4rljUp4fnPqQnSuNxadkR9boJXNKw8C+MrZ1lj0Kfj/ZpTjzxtYUsXQlG5p3fg3xRdRiWPRZfcFcEVlFO1mjahjaM15lGfwj4ujXb/AGFO4OeAvasJ0m1sVPGUXoyv/wAIRr//AEAbj/P4Vh7GoY/WaHc/C6v6xPysKACgD6A/ZU/5J5ef9hqT/wBEw1+l8G/8iuf+N/8ApMT4Hir/AJGEf8K/OR6ZX1p8yFABQB57+1d/ybx4p/68F/8ARiV4HFH/ACIq3/bv/pSPa4e/5HFL5/8ApLPz5r8eP04KACgAoA0NY/5B2lf9eDf+lE1N7IDPpAFABQBoeG/+QjJ/14Xf/pPJTW4Mz6QBQAUAFAHrvww/5Eax/wC2v/o162h8JD3N+qEXNO8O69q+nahq+laLdXNrpVuk+p3MEDNHaRNKkSvIwGEUySIgJxlnA6mi4FvTfAfivVvDV94usNIeSw05Y3u5cgFUdmQOFPLKGUgsAQD1pXQGRTA+qfgn/wAEcv2yvjn8JND+NWhQeD9H0XxLbNc6J/wk3i63sp7q3DFRMI2yQhIOM4JGDjBBObqwTsUoto6qH/ggt+3TfP8AZdE1P4b6jdsp+z2Nl8QLV5p2AzsQHAJPuQPUil7aAcrPjbXNE1bwzrd54c1+wktb7T7qS2vbWYYeGaNirow9QwIP0rUkq0AFABQAUAFABQAUAFAH0B+yp/yTy8/7DUn/AKJhr9L4N/5Fc/8AG/8A0mJ8DxV/yMI/4V+cj0yvrT5kKACgDz39q7/k3jxT/wBeC/8AoxK8Dij/AJEVb/t3/wBKR7XD3/I4pfP/ANJZ+fNfjx+nBQAUAFAGhrH/ACDtK/68G/8ASiam9kBn0gCgAoA0PDf/ACEZP+vC7/8ASeSmtwZn0gCgAoAKAPXfhh/yI1j/ANtf/Rr1tD4SHub9UI/Z79oT9p//AIJdeOv+CaHxH8M/BCHw3eyW3gbwympaJ4Y0oaRdR6it4I4LqZHgU3EcFxJC0uEkBB2H/WCuSMaiqJs0bjynxb8RvF3wm8V+LPEvjL4W2lvbeB5p/E91pltDbC3ii0eXaioIf+XdJblWeKA4KL8oA2kVsk0tST4zrUk+5f8AgpZ4E8ca5+xR+yj450Xwbqt5omk/BsR6prFrp0slrZs1wgVZZVUpGSSAAxGSaxptc8vUp7I4P/gjF4C8deJf+Cifww8U+HPBerahpmi+KI31jUrLTpZYLBWhmCtNIqlYgcHBYjODVVWvZsI7njf7Ruo2mnftZePtUutItdSgh+IWqyPY3jSCG4UX0p2OYnR9p6HaynB4I61rSkoWbV/X/gf130InFyTSdv68zv8A9obxR41T9o/wt40+E/hltP1QfDrQL210/wALWLN9iT+yInk8hWErIETeQ53FANxORmr5pUc0xjbfKqj5mnZ8top62tHsnay28jNRjVy3Dxsr2kknqnJVqlrq/vNtXavqzU/ah8WweN7L4U/FPU/B+seJrXU/DepwrpfjHUJrjWbloriVTNc3tv5T3MaswaJgkYCxMhBAJbGvD2eNqLRc1KDTSty350pSWqc/d5m3pKLhdI1oScsLHV+7Vad9b6U3yx7RafLZaxlzNO705L9mzxFpv/ClfjB4VPgnSDdHwCboa+yTG+VRqWnr5Cky+UsfzEnEYcnGWIAFaYt82VO2lqlLbreT39OystLtN6k0PdzKm97qqvT91Pbz03d9G0tz1z9iH4SQ+FdBtdd8N33g/V9d8a+FdbXUbm58Y6Wk2hWX9n3Sx2yW8twsy3Esiq8kuzEUQAyA0pXTG05LL69COzpNt3WrdnGN+kY7ybtedlooe9lhqieMo15bxqwUVZ6JTSlLzbV4wSvpd6uUbfMH/CoPGP8Az9aB/wCFdpv/AMkV5P8AaeF7T/8ABdT/AORPV/s/Ed4/+Bw/+SOXr0DhCgAoA+gP2VP+SeXn/Yak/wDRMNfpfBv/ACK5/wCN/wDpMT4Hir/kYR/wr85HplfWnzIUAFAHnv7V3/JvHin/AK8F/wDRiV4HFH/Iirf9u/8ApSPa4e/5HFL5/wDpLPz5r8eP04KACgAoA0NY/wCQdpX/AF4N/wClE1N7IDPpAFABQBoeG/8AkIyf9eF3/wCk8lNbgzPpAFABQAUAeu/DD/kRrH/tr/6NetofCQ9zfqhChmUEKxAYYIB6igC3a+INbsdHuvD9nqs8VjfPG15apIQkxQkoWHfBJIoAp0AfQv7Mn/BUj9tX9k7w7H4F+GvxZe98LxWstvD4S8S2q6hpsSSPvbZDLny/myflIGWbj5jmJU4Sd2hqTR2PxG/4Lcf8FA/HnhP/AIQ7QfiPpfgq1e4MtzN4B0KLSp5zsKYaWP5gMH+Eg5AOeBiVRgmPmZ8mTzz3U73NzM8kkjlpJJGJZmJySSepJ71qSakHj/x3a6/ZeK7bxrq8eqabDFDp2pR6lKLi1jiQJEkcgbciogCqFICgADAqoznGo6idpPd9XfTV9SXCEqag17q2XTe+3q2/V33LmqfGD4ta54vX4ha18UfEd5r6wtEuuXWtzyXgjKMhQTM5faVZlIzghiOhNQoxUZJLSV1LzT3T7363Lbb5b/Zs15NO6a7Weq7PUx9N17XNGgvLXR9au7SLUbX7NqEdtctGtzDvV/KkCkb03ojbTkZRT1Apv3ocr2unbpdbP1XTsJaSUuqvr6qz+9Np+TsGi69rnhu/Gq+HdZu7C6EUkQubK4aKTZIjRyLuUg4ZGZSOhViDwTQ9YuPRqzXddn3QdU+qaa8mtU15p6p9CpQB/9k="},85755:function(e,n,t){t.d(n,{Z:function(){return i}});let i=t.p+"assets/images/mate-workspace-switching-a0f8cff6b00100314fd9f77994b5dcc9.jpg"},69659:function(e,n,t){t.d(n,{Z:function(){return i}});let i=t.p+"assets/images/mate-workspace-titlebar-right-click-6dfec2d387d17d6ca06de2ed728ff521.jpg"},50065:function(e,n,t){t.d(n,{Z:function(){return a},a:function(){return r}});var i=t(67294);let o={},s=i.createContext(o);function r(e){let n=i.useContext(s);return i.useMemo(function(){return"function"==typeof e?e(n):{...n,...e}},[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:r(e.components),i.createElement(s.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/2609550e.71ed5abe.js b/assets/js/2609550e.71ed5abe.js new file mode 100644 index 000000000..e1a30c73d --- /dev/null +++ b/assets/js/2609550e.71ed5abe.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([["640"],{17667:function(e,n,s){s.r(n),s.d(n,{metadata:()=>a,contentTitle:()=>r,default:()=>h,assets:()=>l,toc:()=>d,frontMatter:()=>o});var a=JSON.parse('{"id":"user/software/networking/samba","title":"Samba File Sharing","description":"Samba is the standard Windows interoperability suite of programs for Linux and Unix. Among other things, it allows Linux, macOS and Windows users to share files via the Server Message Block (SMB) protocol.","source":"@site/docs/user/software/networking/samba.md","sourceDirName":"user/software/networking","slug":"/user/software/networking/samba","permalink":"/docs/user/software/networking/samba","draft":false,"unlisted":false,"editUrl":"https://github.com/getsolus/help-center-docs/tree/master/docs/user/software/networking/samba.md","tags":[],"version":"current","lastUpdatedAt":1733757592000,"frontMatter":{"title":"Samba File Sharing","summary":"A quick start guide to Samba on Solus"},"sidebar":"userSidebar","previous":{"title":"Networking","permalink":"/docs/category/networking"},"next":{"title":"TigerVNC","permalink":"/docs/user/software/networking/tigervnc"}}'),i=s("85893"),t=s("50065");let o={title:"Samba File Sharing",summary:"A quick start guide to Samba on Solus"},r="Samba file sharing",l={},d=[{value:"Samba on Solus",id:"samba-on-solus",level:2},{value:"How to start/stop Samba",id:"how-to-startstop-samba",level:3},{value:"Enabling Windows 7+ network discovery support",id:"enabling-windows-7-network-discovery-support",level:3},{value:"Accessing Samba via IPv6",id:"accessing-samba-via-ipv6",level:3},{value:"A brief introduction to the Samba usershare functionality",id:"a-brief-introduction-to-the-samba-usershare-functionality",level:2},{value:"GUI - configuring shares via file manager plugins",id:"gui---configuring-shares-via-file-manager-plugins",level:3},{value:"CLI - using the net usershare command",id:"cli---using-the-net-usershare-command",level:3},{value:"Managing Samba authentication for named users",id:"managing-samba-authentication-for-named-users",level:2},{value:"Debugging Samba authentication issues",id:"debugging-samba-authentication-issues",level:3},{value:"Adding custom configuration parameters via /etc/samba/smb.conf",id:"adding-custom-configuration-parameters-via-etcsambasmbconf",level:2},{value:"Example -- anonymous, read-write share outside of $HOME",id:"example----anonymous-read-write-share-outside-of-home",level:3},{value:"Links to the official Samba documentation",id:"links-to-the-official-samba-documentation",level:3},{value:"Full manual control of Samba (recommended only for experienced Samba admins)",id:"full-manual-control-of-samba-recommended-only-for-experienced-samba-admins",level:2}];function c(e){let n={a:"a",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,t.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.header,{children:(0,i.jsx)(n.h1,{id:"samba-file-sharing",children:"Samba file sharing"})}),"\n",(0,i.jsx)(n.p,{children:"Samba is the standard Windows interoperability suite of programs for Linux and Unix. Among other things, it allows Linux, macOS and Windows users to share files via the Server Message Block (SMB) protocol."}),"\n",(0,i.jsx)(n.h2,{id:"samba-on-solus",children:"Samba on Solus"}),"\n",(0,i.jsx)(n.p,{children:"To enable convenient file-sharing on Solus, we maintain a Solus-specific Samba configuration that out-of-the-box:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Supports Samba usershare functionality"}),"\n",(0,i.jsxs)(n.li,{children:["Enables sharing of ",(0,i.jsx)(n.em,{children:"$HOME"})," folders (manual user account activation needed)"]}),"\n",(0,i.jsx)(n.li,{children:"Is set up as a standalone server using the SMB2.0.2 protocol and up (>= Windows Vista/Server 2008)"}),"\n",(0,i.jsxs)(n.li,{children:["Advertises itself via ",(0,i.jsx)(n.em,{children:"Avahi"})," aka ",(0,i.jsx)(n.em,{children:"Apple Bonjour"})," / ",(0,i.jsx)(n.em,{children:"mDNS"})," / ",(0,i.jsx)(n.em,{children:"zeroconf"})," for macOS compatibility"]}),"\n",(0,i.jsxs)(n.li,{children:["Advertises itself via ",(0,i.jsx)(n.em,{children:"wsdd"})," aka ",(0,i.jsx)(n.em,{children:"Web Services Discovery Daemon"})," for Windows 7+ compatibility"]}),"\n",(0,i.jsx)(n.li,{children:"Disables sharing of printers via Samba (use IPP via CUPS instead)"}),"\n",(0,i.jsx)(n.li,{children:"Allows access only from IPv4 and IPv6 private and link-local (non-internet-routable) addresses"}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"As of Samba 4.7.x, Solus disables the old, deprecated and insecure original SMB1/CIFS protocol by default."}),"\n",(0,i.jsxs)(n.p,{children:["For more information on this choice, please read ",(0,i.jsx)(n.a,{href:"https://techcommunity.microsoft.com/t5/storage-at-microsoft/stop-using-smb1/ba-p/425858",children:"this post regarding SMB1"}),"."]}),"\n",(0,i.jsx)(n.p,{children:"As of Samba 4.11.x, the SMB1/CIFS protocol is officially deprecated upstream."}),"\n",(0,i.jsx)(n.h3,{id:"how-to-startstop-samba",children:"How to start/stop Samba"}),"\n",(0,i.jsx)(n.p,{children:"Please note that Samba does NOT run on system boot by default. It needs to be manually started/configured to start automatically:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"# Start Samba manually\nsudo systemctl start smb\n\n# Configure Samba to start automatically on each boot and immediately start the service\nsudo systemctl enable --now smb\n\n# Check whether Samba is running\nsudo systemctl status smb\n\n# Restart Samba manually\nsudo systemctl restart smb\n\n# Stop Samba manually\nsudo systemctl stop smb\n\n# Configure Samba to not start automatically on each boot and immediately stop the service\nsudo systemctl disable --now smb\n"})}),"\n",(0,i.jsx)(n.h3,{id:"enabling-windows-7-network-discovery-support",children:"Enabling Windows 7+ network discovery support"}),"\n",(0,i.jsxs)(n.p,{children:["The Web Services Discovery protocol is used by Windows 7+ clients to discover shares on other computers. Solus now includes the ",(0,i.jsx)(n.em,{children:"wsdd"})," service which provides support for the Web Services Discovery protocol."]}),"\n",(0,i.jsx)(n.p,{children:"When restarting wsdd, it may be necessary to also restart Samba."}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"# Start wsdd manually (depends on the smb service)\nsudo systemctl start wsdd\n\n# Configure wsdd to start automatically on each boot and immediately start the service\nsudo systemctl enable --now wsdd\n\n# Check whether wsdd is running\nsudo systemctl status wsdd\n\n# Restart wsdd and Samba\nsudo systemctl restart wsdd smb\n\n# Stop wsdd manually\nsudo systemctl stop wsdd\n\n# Configure wsdd to not start automatically on each boot and immediately stop the service\nsudo systemctl disable --now wsdd\n"})}),"\n",(0,i.jsxs)(n.p,{children:["For more details on managing services on Solus with ",(0,i.jsx)(n.em,{children:"systemctl"}),", see ",(0,i.jsx)(n.code,{children:"man systemctl"})," which is part of the systemd system and service manager."]}),"\n",(0,i.jsx)(n.h3,{id:"accessing-samba-via-ipv6",children:"Accessing Samba via IPv6"}),"\n",(0,i.jsx)(n.p,{children:"In order to access a running Solus Samba server instance via IPv6, first verify that all relevant hosts (including the Samba host) are configured with an IPv6 link-local address."}),"\n",(0,i.jsx)(n.p,{children:"This can be verified in a terminal:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{children:"$ ip addr\n\n2: enp2s0: mtu 1500 qdisc pfifo_fast state UP group default qlen 1000\n link/ether 14:da:e9:10:f9:c7 brd ff:ff:ff:ff:ff:ff\n inet 192.168.147.233/24 brd 192.168.147.255 scope global dynamic noprefixroute enp2s0\n valid_lft 5066sec preferred_lft 5066sec\n inet6 fe80::d555:a50f:1aea:c944/64 scope link noprefixroute\n valid_lft forever preferred_lft forever\n"})}),"\n",(0,i.jsxs)(n.p,{children:["In the above example, the name of the relevant network device is ",(0,i.jsx)(n.code,{children:"enp2s0"}),". Note how the line starting with ",(0,i.jsx)(n.code,{children:"inet6"})," contains an IPv6 address which begins with fe80:: and contains ",(0,i.jsx)(n.code,{children:"scope link"}),"."]}),"\n",(0,i.jsxs)(n.p,{children:["Ensure that Samba has been started on the host and then query the running local Samba instance with the following command, using the IPv6 address and interface as show by the output of ",(0,i.jsx)(n.code,{children:"ip addr"}),":"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{children:"$ smbclient -N -L //fe80::d555:a50f:1aea:c944%enp2s0\n"})}),"\n",(0,i.jsx)(n.p,{children:"The output might look something like this:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{children:"Unable to initialize messaging context\nAnonymous login successful\n\n Sharename Type Comment\n --------- ---- -------\n eopkgs Disk\n IPC$ IPC IPC Service (Samba server (version: 4.10.11, protocol: SMB3_11))\n Public Disk\nfe80::d555:a50f:1aea:c944%enp2s0 is an IPv6 address -- no workgroup available\n"})}),"\n",(0,i.jsxs)(n.p,{children:["Make sure to change the IPv6 address and interface name (",(0,i.jsx)(n.code,{children:"fe80::d555:a50f:1aea:c944"})," and ",(0,i.jsx)(n.code,{children:"enp2s0"})," respectively in the above example) to the real address and interface name of the Samba host in question."]}),"\n",(0,i.jsx)(n.h2,{id:"a-brief-introduction-to-the-samba-usershare-functionality",children:"A brief introduction to the Samba usershare functionality"}),"\n",(0,i.jsxs)(n.p,{children:["In order to support user-managed (as opposed to system-managed) shares, Samba provides the so-called ",(0,i.jsx)(n.em,{children:"usershare"})," functionality, where users can define network shares without touching the traditional Samba configuration file."]}),"\n",(0,i.jsx)(n.h3,{id:"gui---configuring-shares-via-file-manager-plugins",children:"GUI - configuring shares via file manager plugins"}),"\n",(0,i.jsxs)(n.p,{children:["The default Solus configuration was written with the ",(0,i.jsx)(n.code,{children:"nemo-share"})," (Budgie and XFCE), ",(0,i.jsx)(n.code,{children:"nautilus-share"})," (GNOME), and ",(0,i.jsx)(n.code,{children:"kdenetwork-filesharing"})," (Plasma) file manager plugins in mind. These plugins allow the user to share folders in an easy and convenient way."]}),"\n",(0,i.jsxs)(n.p,{children:["All you need to do is to install either the ",(0,i.jsx)(n.code,{children:"caja-extensions"})," package (which includes the ",(0,i.jsx)(n.code,{children:"caja-share"})," plugin), the ",(0,i.jsx)(n.code,{children:"kdenetwork-filesharing"})," package, the ",(0,i.jsx)(n.code,{children:"nautilus-share"})," package or the ",(0,i.jsx)(n.code,{children:"nemo-share"})," package from the Software Center and enable the relevant Samba services."]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"# Budgie\nsudo eopkg install nemo-share\n\n#GNOME\nsudo eopkg install nautilus-share\n\n# Plasma\nsudo eopkg install kdenetwork-filesharing\n\n# XFCE\nsudo eopkg install nemo-share\n"})}),"\n",(0,i.jsx)(n.p,{children:"In order to load the newly installed file manager plugin, you will need to log out of the current desktop session and log back in to a new desktop session, at which point the plugin in question will be ready for use."}),"\n",(0,i.jsxs)(n.p,{children:["Afterwards, simply right-clicking a folder and clicking ",(0,i.jsx)(n.em,{children:"properties"})," will now show an option to share it, as well as whether to allow Read/Write permissions to your users or guest access."]}),"\n",(0,i.jsx)(n.h3,{id:"cli---using-the-net-usershare-command",children:"CLI - using the net usershare command"}),"\n",(0,i.jsxs)(n.p,{children:["Excerpt from the ",(0,i.jsx)(n.code,{children:"man smb.conf"})," manual page:"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{children:"net usershare add sharename path [comment] [acl] [guest_ok=[y|n]]\n To create or modify (overwrite) a user defined share.\n\nnet usershare delete sharename\n To delete a user defined share.\n\nnet usershare list wildcard-sharename\n To list user defined shares.\n\nnet usershare info wildcard-sharename\n To print information about user defined shares.\n"})}),"\n",(0,i.jsx)(n.h2,{id:"managing-samba-authentication-for-named-users",children:"Managing Samba authentication for named users"}),"\n",(0,i.jsxs)(n.p,{children:["Should the user ",(0,i.jsx)(n.code,{children:"some_user"})," wish to access e.g. the ",(0,i.jsx)(n.em,{children:"$HOME"})," directory via Samba, it is necessary to enable the ",(0,i.jsx)(n.code,{children:"some_user"})," Samba account."]}),"\n",(0,i.jsxs)(n.p,{children:["Note that the ",(0,i.jsx)(n.code,{children:"some_user"})," Samba account is separate from the ",(0,i.jsx)(n.code,{children:"some_user"})," Linux user account, but they share the same ",(0,i.jsx)(n.em,{children:"$HOME"})," directory."]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"# Add the some_user account to the Samba login db\nsudo smbpasswd -a some_user\n\n# Enable the some_user account in the Samba login db\nsudo smbpasswd -e some_user\n\n# Try to log in to a running Samba instance as some_user and list shares\nsmbclient -U some_user -L localhost\n\n# Disable the some_user account in the Samba login db\nsudo smbpasswd -d some_user\n\n# Remove the some_user account from the Samba login db\nsudo smbpasswd -x some_user\n"})}),"\n",(0,i.jsxs)(n.p,{children:["See ",(0,i.jsx)(n.code,{children:"man smbpasswd"})," for more details."]}),"\n",(0,i.jsx)(n.h3,{id:"debugging-samba-authentication-issues",children:"Debugging Samba authentication issues"}),"\n",(0,i.jsx)(n.p,{children:"To help debug authentication issues, the Solus Samba configuration is by default set up with relatively verbose logging when it comes to authentication and protocol negotiation."}),"\n",(0,i.jsxs)(n.p,{children:["The Samba log files live in the ",(0,i.jsx)(n.code,{children:"/var/log/samba/"})," directory."]}),"\n",(0,i.jsxs)(n.h2,{id:"adding-custom-configuration-parameters-via-etcsambasmbconf",children:["Adding custom configuration parameters via ",(0,i.jsx)(n.code,{children:"/etc/samba/smb.conf"})]}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"CAUTION:"})," ",(0,i.jsxs)(n.em,{children:["From this point on, it is assumed that the user is familiar with the Samba documentation, including ",(0,i.jsx)(n.code,{children:"man smb.conf"}),", and that the user has a basic understanding of Linux filesystem permissions."]})]}),"\n",(0,i.jsxs)(n.p,{children:["The default Solus-managed configuration (which lives in ",(0,i.jsx)(n.code,{children:"/usr/share/defaults/samba/smb.conf"})," and will be overwritten on each Samba package update) is written such that it will attempt to include any configuration parameters present in ",(0,i.jsx)(n.code,{children:"/etc/samba/smb.conf"}),"."]}),"\n",(0,i.jsxs)(n.p,{children:["Hence, any persistent user-managed parameters should be added to ",(0,i.jsx)(n.code,{children:"/etc/samba/smb.conf"})," which will ",(0,i.jsx)(n.em,{children:"never"})," be overwritten by the system package manager."]}),"\n",(0,i.jsxs)(n.p,{children:["In addition, the Solus-controlled Samba configuration is written such that it is possible to override its default parameters simply by assigning a new value to the parameter in question in ",(0,i.jsx)(n.code,{children:"/etc/samba/smb.conf"}),". From a technical perspective, any parameters added without a ",(0,i.jsx)(n.code,{children:"[shared resource]"})," header will considered part of the ",(0,i.jsx)(n.code,{children:"[global]"})," configuration section."]}),"\n",(0,i.jsxs)(n.p,{children:["This way, simply deleting or renaming ",(0,i.jsx)(n.code,{children:"/etc/samba/smb.conf"})," and restarting Samba with ",(0,i.jsx)(n.code,{children:"sudo systemctl restart smb"})," will reset the configuration to the known working default Solus configuration."]}),"\n",(0,i.jsxs)(n.h3,{id:"example----anonymous-read-write-share-outside-of-home",children:["Example -- anonymous, read-write share outside of ",(0,i.jsx)(n.em,{children:"$HOME"})]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-ini",children:"# Contents of /etc/samba/smb.conf:\n#\n# If /etc/samba/smb.conf exists, it is automatically loaded by the Solus-\n# controlled default config residing in /usr/share/defaults/samba/smb.conf\n#\n# The following configuration creates a \"//servername/someshare\" share where\n# anonymous users have read and write access.\n#\n# ';' also denotes a comment (typically used for configuration parameters)\n#\n[someshare]\npath = /mnt/someshare\n# allow anonymous access\nguest ok = Yes\n# ONLY allow anonymous access (don't allow both guest and system user access)\n;guest only = Yes\n# allow write access\nread only = No\n# This is an example of how to limit access to the share to known IPs\n;hosts deny = ALL\n;hosts allow = 127.0.0.1 192.168.1.0/24\n# share config end\n"})}),"\n",(0,i.jsxs)(n.p,{children:["In the above example, it is assumed that the user has chosen a suitable method for making ",(0,i.jsx)(n.code,{children:"/mnt/someshare"})," writeable by guest users."]}),"\n",(0,i.jsxs)(n.p,{children:["After adding a ",(0,i.jsx)(n.code,{children:"[someshare]"})," section like in the above example, run ",(0,i.jsx)(n.code,{children:"sudo testparm"})," to check that the newly included share does not contain syntax errors. Check out ",(0,i.jsx)(n.code,{children:"man testparm"})," for more information about the ",(0,i.jsx)(n.em,{children:"testparm"})," utility."]}),"\n",(0,i.jsxs)(n.p,{children:["If ",(0,i.jsx)(n.em,{children:"testparm"})," didn't spot any problems, restart Samba with ",(0,i.jsx)(n.code,{children:"sudo systemctl restart smb"}),", which will activate the new configuration."]}),"\n",(0,i.jsx)(n.h3,{id:"links-to-the-official-samba-documentation",children:"Links to the official Samba documentation"}),"\n",(0,i.jsxs)(n.p,{children:["Apart from the aforementioned ",(0,i.jsx)(n.code,{children:"man smb.conf"}),", wiki.samba.org is your friend, specifically:"]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"https://wiki.samba.org/index.php/Setting_up_a_Share_Using_POSIX_ACLs",children:"https://wiki.samba.org/index.php/Setting_up_a_Share_Using_POSIX_ACLs"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"https://wiki.samba.org/index.php/Setting_up_Samba_as_a_Standalone_Server",children:"https://wiki.samba.org/index.php/Setting_up_Samba_as_a_Standalone_Server"})}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"The default Solus Samba configuration is patterned on the above."}),"\n",(0,i.jsx)(n.h2,{id:"full-manual-control-of-samba-recommended-only-for-experienced-samba-admins",children:"Full manual control of Samba (recommended only for experienced Samba admins)"}),"\n",(0,i.jsx)(n.p,{children:"Full manual control of Samba can be achieved by completely bypassing the default Solus Samba configuration."}),"\n",(0,i.jsxs)(n.p,{children:["In the ",(0,i.jsx)(n.em,{children:"smbd"})," manual page (",(0,i.jsx)(n.code,{children:"man 8 smbd"}),"), it is shown how the compiled-in default config file can be overridden by specifying the ",(0,i.jsx)(n.code,{children:"--configfile="})," flag during startup."]}),"\n",(0,i.jsxs)(n.p,{children:["To use the traditional ",(0,i.jsx)(n.code,{children:"/etc/samba/smb.conf"})," configuration file exclusively (thus bypassing the Solus configuration), edit the ",(0,i.jsx)(n.code,{children:"/etc/sysconfig/samba"})," file to look like so:"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-ini",children:'## Path: Network/Samba\n## Description: Samba process options\n## Type: string\n## Default: ""\n## ServiceRestart: samba\nSAMBAOPTIONS=""\n## Type: string\n## Default: ""\n## ServiceRestart: smb\nSMBDOPTIONS="--configfile=/etc/samba/smb.conf"\n## Type: string\n## Default: ""\n## ServiceRestart: nmb\nNMBDOPTIONS="--configfile=/etc/samba/smb.conf"\n## Type: string\n## Default: ""\n## ServiceRestart: winbind\nWINBINDOPTIONS=""\n'})})]})}function h(e={}){let{wrapper:n}={...(0,t.a)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(c,{...e})}):c(e)}},50065:function(e,n,s){s.d(n,{Z:function(){return r},a:function(){return o}});var a=s(67294);let i={},t=a.createContext(i);function o(e){let n=a.useContext(t);return a.useMemo(function(){return"function"==typeof e?e(n):{...n,...e}},[n,e])}function r(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:o(e.components),a.createElement(t.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/2609550e.ee6a6ea4.js b/assets/js/2609550e.ee6a6ea4.js deleted file mode 100644 index 3f4394e5b..000000000 --- a/assets/js/2609550e.ee6a6ea4.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[3206],{23394:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>l,contentTitle:()=>o,default:()=>h,frontMatter:()=>t,metadata:()=>r,toc:()=>d});var a=s(85893),i=s(11151);const t={title:"Samba File Sharing",summary:"A quick start guide to Samba on Solus"},o="Samba file sharing",r={id:"user/software/networking/samba",title:"Samba File Sharing",description:"Samba is the standard Windows interoperability suite of programs for Linux and Unix. Among other things, it allows Linux, macOS and Windows users to share files via the Server Message Block (SMB) protocol.",source:"@site/docs/user/software/networking/samba.md",sourceDirName:"user/software/networking",slug:"/user/software/networking/samba",permalink:"/docs/user/software/networking/samba",draft:!1,unlisted:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/software/networking/samba.md",tags:[],version:"current",lastUpdatedAt:1732716912e3,frontMatter:{title:"Samba File Sharing",summary:"A quick start guide to Samba on Solus"},sidebar:"userSidebar",previous:{title:"Networking",permalink:"/docs/category/networking"},next:{title:"TigerVNC",permalink:"/docs/user/software/networking/tigervnc"}},l={},d=[{value:"Samba on Solus",id:"samba-on-solus",level:2},{value:"How to start/stop Samba",id:"how-to-startstop-samba",level:3},{value:"Enabling Windows 7+ network discovery support",id:"enabling-windows-7-network-discovery-support",level:3},{value:"Accessing Samba via IPv6",id:"accessing-samba-via-ipv6",level:3},{value:"A brief introduction to the Samba usershare functionality",id:"a-brief-introduction-to-the-samba-usershare-functionality",level:2},{value:"GUI - configuring shares via file manager plugins",id:"gui---configuring-shares-via-file-manager-plugins",level:3},{value:"CLI - using the net usershare command",id:"cli---using-the-net-usershare-command",level:3},{value:"Managing Samba authentication for named users",id:"managing-samba-authentication-for-named-users",level:2},{value:"Debugging Samba authentication issues",id:"debugging-samba-authentication-issues",level:3},{value:"Adding custom configuration parameters via /etc/samba/smb.conf",id:"adding-custom-configuration-parameters-via-etcsambasmbconf",level:2},{value:"Example -- anonymous, read-write share outside of $HOME",id:"example----anonymous-read-write-share-outside-of-home",level:3},{value:"Links to the official Samba documentation",id:"links-to-the-official-samba-documentation",level:3},{value:"Full manual control of Samba (recommended only for experienced Samba admins)",id:"full-manual-control-of-samba-recommended-only-for-experienced-samba-admins",level:2}];function c(e){const n={a:"a",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,i.a)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(n.header,{children:(0,a.jsx)(n.h1,{id:"samba-file-sharing",children:"Samba file sharing"})}),"\n",(0,a.jsx)(n.p,{children:"Samba is the standard Windows interoperability suite of programs for Linux and Unix. Among other things, it allows Linux, macOS and Windows users to share files via the Server Message Block (SMB) protocol."}),"\n",(0,a.jsx)(n.h2,{id:"samba-on-solus",children:"Samba on Solus"}),"\n",(0,a.jsx)(n.p,{children:"To enable convenient file-sharing on Solus, we maintain a Solus-specific Samba configuration that out-of-the-box:"}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsx)(n.li,{children:"Supports Samba usershare functionality"}),"\n",(0,a.jsxs)(n.li,{children:["Enables sharing of ",(0,a.jsx)(n.em,{children:"$HOME"})," folders (manual user account activation needed)"]}),"\n",(0,a.jsx)(n.li,{children:"Is set up as a standalone server using the SMB2.0.2 protocol and up (>= Windows Vista/Server 2008)"}),"\n",(0,a.jsxs)(n.li,{children:["Advertises itself via ",(0,a.jsx)(n.em,{children:"Avahi"})," aka ",(0,a.jsx)(n.em,{children:"Apple Bonjour"})," / ",(0,a.jsx)(n.em,{children:"mDNS"})," / ",(0,a.jsx)(n.em,{children:"zeroconf"})," for macOS compatibility"]}),"\n",(0,a.jsxs)(n.li,{children:["Advertises itself via ",(0,a.jsx)(n.em,{children:"wsdd"})," aka ",(0,a.jsx)(n.em,{children:"Web Services Discovery Daemon"})," for Windows 7+ compatibility"]}),"\n",(0,a.jsx)(n.li,{children:"Disables sharing of printers via Samba (use IPP via CUPS instead)"}),"\n",(0,a.jsx)(n.li,{children:"Allows access only from IPv4 and IPv6 private and link-local (non-internet-routable) addresses"}),"\n"]}),"\n",(0,a.jsx)(n.p,{children:"As of Samba 4.7.x, Solus disables the old, deprecated and insecure original SMB1/CIFS protocol by default."}),"\n",(0,a.jsxs)(n.p,{children:["For more information on this choice, please read ",(0,a.jsx)(n.a,{href:"https://techcommunity.microsoft.com/t5/storage-at-microsoft/stop-using-smb1/ba-p/425858",children:"this post regarding SMB1"}),"."]}),"\n",(0,a.jsx)(n.p,{children:"As of Samba 4.11.x, the SMB1/CIFS protocol is officially deprecated upstream."}),"\n",(0,a.jsx)(n.h3,{id:"how-to-startstop-samba",children:"How to start/stop Samba"}),"\n",(0,a.jsx)(n.p,{children:"Please note that Samba does NOT run on system boot by default. It needs to be manually started/configured to start automatically:"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"# Start Samba manually\nsudo systemctl start smb\n\n# Configure Samba to start automatically on each boot and immediately start the service\nsudo systemctl enable --now smb\n\n# Check whether Samba is running\nsudo systemctl status smb\n\n# Restart Samba manually\nsudo systemctl restart smb\n\n# Stop Samba manually\nsudo systemctl stop smb\n\n# Configure Samba to not start automatically on each boot and immediately stop the service\nsudo systemctl disable --now smb\n"})}),"\n",(0,a.jsx)(n.h3,{id:"enabling-windows-7-network-discovery-support",children:"Enabling Windows 7+ network discovery support"}),"\n",(0,a.jsxs)(n.p,{children:["The Web Services Discovery protocol is used by Windows 7+ clients to discover shares on other computers. Solus now includes the ",(0,a.jsx)(n.em,{children:"wsdd"})," service which provides support for the Web Services Discovery protocol."]}),"\n",(0,a.jsx)(n.p,{children:"When restarting wsdd, it may be necessary to also restart Samba."}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"# Start wsdd manually (depends on the smb service)\nsudo systemctl start wsdd\n\n# Configure wsdd to start automatically on each boot and immediately start the service\nsudo systemctl enable --now wsdd\n\n# Check whether wsdd is running\nsudo systemctl status wsdd\n\n# Restart wsdd and Samba\nsudo systemctl restart wsdd smb\n\n# Stop wsdd manually\nsudo systemctl stop wsdd\n\n# Configure wsdd to not start automatically on each boot and immediately stop the service\nsudo systemctl disable --now wsdd\n"})}),"\n",(0,a.jsxs)(n.p,{children:["For more details on managing services on Solus with ",(0,a.jsx)(n.em,{children:"systemctl"}),", see ",(0,a.jsx)(n.code,{children:"man systemctl"})," which is part of the systemd system and service manager."]}),"\n",(0,a.jsx)(n.h3,{id:"accessing-samba-via-ipv6",children:"Accessing Samba via IPv6"}),"\n",(0,a.jsx)(n.p,{children:"In order to access a running Solus Samba server instance via IPv6, first verify that all relevant hosts (including the Samba host) are configured with an IPv6 link-local address."}),"\n",(0,a.jsx)(n.p,{children:"This can be verified in a terminal:"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{children:"$ ip addr\n\n2: enp2s0: mtu 1500 qdisc pfifo_fast state UP group default qlen 1000\n link/ether 14:da:e9:10:f9:c7 brd ff:ff:ff:ff:ff:ff\n inet 192.168.147.233/24 brd 192.168.147.255 scope global dynamic noprefixroute enp2s0\n valid_lft 5066sec preferred_lft 5066sec\n inet6 fe80::d555:a50f:1aea:c944/64 scope link noprefixroute\n valid_lft forever preferred_lft forever\n"})}),"\n",(0,a.jsxs)(n.p,{children:["In the above example, the name of the relevant network device is ",(0,a.jsx)(n.code,{children:"enp2s0"}),". Note how the line starting with ",(0,a.jsx)(n.code,{children:"inet6"})," contains an IPv6 address which begins with fe80:: and contains ",(0,a.jsx)(n.code,{children:"scope link"}),"."]}),"\n",(0,a.jsxs)(n.p,{children:["Ensure that Samba has been started on the host and then query the running local Samba instance with the following command, using the IPv6 address and interface as show by the output of ",(0,a.jsx)(n.code,{children:"ip addr"}),":"]}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{children:"$ smbclient -N -L //fe80::d555:a50f:1aea:c944%enp2s0\n"})}),"\n",(0,a.jsx)(n.p,{children:"The output might look something like this:"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{children:"Unable to initialize messaging context\nAnonymous login successful\n\n Sharename Type Comment\n --------- ---- -------\n eopkgs Disk\n IPC$ IPC IPC Service (Samba server (version: 4.10.11, protocol: SMB3_11))\n Public Disk\nfe80::d555:a50f:1aea:c944%enp2s0 is an IPv6 address -- no workgroup available\n"})}),"\n",(0,a.jsxs)(n.p,{children:["Make sure to change the IPv6 address and interface name (",(0,a.jsx)(n.code,{children:"fe80::d555:a50f:1aea:c944"})," and ",(0,a.jsx)(n.code,{children:"enp2s0"})," respectively in the above example) to the real address and interface name of the Samba host in question."]}),"\n",(0,a.jsx)(n.h2,{id:"a-brief-introduction-to-the-samba-usershare-functionality",children:"A brief introduction to the Samba usershare functionality"}),"\n",(0,a.jsxs)(n.p,{children:["In order to support user-managed (as opposed to system-managed) shares, Samba provides the so-called ",(0,a.jsx)(n.em,{children:"usershare"})," functionality, where users can define network shares without touching the traditional Samba configuration file."]}),"\n",(0,a.jsx)(n.h3,{id:"gui---configuring-shares-via-file-manager-plugins",children:"GUI - configuring shares via file manager plugins"}),"\n",(0,a.jsxs)(n.p,{children:["The default Solus configuration was written with the ",(0,a.jsx)(n.code,{children:"nemo-share"})," (Budgie and XFCE), ",(0,a.jsx)(n.code,{children:"nautilus-share"})," (GNOME), and ",(0,a.jsx)(n.code,{children:"kdenetwork-filesharing"})," (Plasma) file manager plugins in mind. These plugins allow the user to share folders in an easy and convenient way."]}),"\n",(0,a.jsxs)(n.p,{children:["All you need to do is to install either the ",(0,a.jsx)(n.code,{children:"caja-extensions"})," package (which includes the ",(0,a.jsx)(n.code,{children:"caja-share"})," plugin), the ",(0,a.jsx)(n.code,{children:"kdenetwork-filesharing"})," package, the ",(0,a.jsx)(n.code,{children:"nautilus-share"})," package or the ",(0,a.jsx)(n.code,{children:"nemo-share"})," package from the Software Center and enable the relevant Samba services."]}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"# Budgie\nsudo eopkg install nemo-share\n\n#GNOME\nsudo eopkg install nautilus-share\n\n# Plasma\nsudo eopkg install kdenetwork-filesharing\n\n# XFCE\nsudo eopkg install nemo-share\n"})}),"\n",(0,a.jsx)(n.p,{children:"In order to load the newly installed file manager plugin, you will need to log out of the current desktop session and log back in to a new desktop session, at which point the plugin in question will be ready for use."}),"\n",(0,a.jsxs)(n.p,{children:["Afterwards, simply right-clicking a folder and clicking ",(0,a.jsx)(n.em,{children:"properties"})," will now show an option to share it, as well as whether to allow Read/Write permissions to your users or guest access."]}),"\n",(0,a.jsx)(n.h3,{id:"cli---using-the-net-usershare-command",children:"CLI - using the net usershare command"}),"\n",(0,a.jsxs)(n.p,{children:["Excerpt from the ",(0,a.jsx)(n.code,{children:"man smb.conf"})," manual page:"]}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{children:"net usershare add sharename path [comment] [acl] [guest_ok=[y|n]]\n To create or modify (overwrite) a user defined share.\n\nnet usershare delete sharename\n To delete a user defined share.\n\nnet usershare list wildcard-sharename\n To list user defined shares.\n\nnet usershare info wildcard-sharename\n To print information about user defined shares.\n"})}),"\n",(0,a.jsx)(n.h2,{id:"managing-samba-authentication-for-named-users",children:"Managing Samba authentication for named users"}),"\n",(0,a.jsxs)(n.p,{children:["Should the user ",(0,a.jsx)(n.code,{children:"some_user"})," wish to access e.g. the ",(0,a.jsx)(n.em,{children:"$HOME"})," directory via Samba, it is necessary to enable the ",(0,a.jsx)(n.code,{children:"some_user"})," Samba account."]}),"\n",(0,a.jsxs)(n.p,{children:["Note that the ",(0,a.jsx)(n.code,{children:"some_user"})," Samba account is separate from the ",(0,a.jsx)(n.code,{children:"some_user"})," Linux user account, but they share the same ",(0,a.jsx)(n.em,{children:"$HOME"})," directory."]}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"# Add the some_user account to the Samba login db\nsudo smbpasswd -a some_user\n\n# Enable the some_user account in the Samba login db\nsudo smbpasswd -e some_user\n\n# Try to log in to a running Samba instance as some_user and list shares\nsmbclient -U some_user -L localhost\n\n# Disable the some_user account in the Samba login db\nsudo smbpasswd -d some_user\n\n# Remove the some_user account from the Samba login db\nsudo smbpasswd -x some_user\n"})}),"\n",(0,a.jsxs)(n.p,{children:["See ",(0,a.jsx)(n.code,{children:"man smbpasswd"})," for more details."]}),"\n",(0,a.jsx)(n.h3,{id:"debugging-samba-authentication-issues",children:"Debugging Samba authentication issues"}),"\n",(0,a.jsx)(n.p,{children:"To help debug authentication issues, the Solus Samba configuration is by default set up with relatively verbose logging when it comes to authentication and protocol negotiation."}),"\n",(0,a.jsxs)(n.p,{children:["The Samba log files live in the ",(0,a.jsx)(n.code,{children:"/var/log/samba/"})," directory."]}),"\n",(0,a.jsxs)(n.h2,{id:"adding-custom-configuration-parameters-via-etcsambasmbconf",children:["Adding custom configuration parameters via ",(0,a.jsx)(n.code,{children:"/etc/samba/smb.conf"})]}),"\n",(0,a.jsxs)(n.p,{children:[(0,a.jsx)(n.strong,{children:"CAUTION:"})," ",(0,a.jsxs)(n.em,{children:["From this point on, it is assumed that the user is familiar with the Samba documentation, including ",(0,a.jsx)(n.code,{children:"man smb.conf"}),", and that the user has a basic understanding of Linux filesystem permissions."]})]}),"\n",(0,a.jsxs)(n.p,{children:["The default Solus-managed configuration (which lives in ",(0,a.jsx)(n.code,{children:"/usr/share/defaults/samba/smb.conf"})," and will be overwritten on each Samba package update) is written such that it will attempt to include any configuration parameters present in ",(0,a.jsx)(n.code,{children:"/etc/samba/smb.conf"}),"."]}),"\n",(0,a.jsxs)(n.p,{children:["Hence, any persistent user-managed parameters should be added to ",(0,a.jsx)(n.code,{children:"/etc/samba/smb.conf"})," which will ",(0,a.jsx)(n.em,{children:"never"})," be overwritten by the system package manager."]}),"\n",(0,a.jsxs)(n.p,{children:["In addition, the Solus-controlled Samba configuration is written such that it is possible to override its default parameters simply by assigning a new value to the parameter in question in ",(0,a.jsx)(n.code,{children:"/etc/samba/smb.conf"}),". From a technical perspective, any parameters added without a ",(0,a.jsx)(n.code,{children:"[shared resource]"})," header will considered part of the ",(0,a.jsx)(n.code,{children:"[global]"})," configuration section."]}),"\n",(0,a.jsxs)(n.p,{children:["This way, simply deleting or renaming ",(0,a.jsx)(n.code,{children:"/etc/samba/smb.conf"})," and restarting Samba with ",(0,a.jsx)(n.code,{children:"sudo systemctl restart smb"})," will reset the configuration to the known working default Solus configuration."]}),"\n",(0,a.jsxs)(n.h3,{id:"example----anonymous-read-write-share-outside-of-home",children:["Example -- anonymous, read-write share outside of ",(0,a.jsx)(n.em,{children:"$HOME"})]}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-ini",children:"# Contents of /etc/samba/smb.conf:\n#\n# If /etc/samba/smb.conf exists, it is automatically loaded by the Solus-\n# controlled default config residing in /usr/share/defaults/samba/smb.conf\n#\n# The following configuration creates a \"//servername/someshare\" share where\n# anonymous users have read and write access.\n#\n# ';' also denotes a comment (typically used for configuration parameters)\n#\n[someshare]\npath = /mnt/someshare\n# allow anonymous access\nguest ok = Yes\n# ONLY allow anonymous access (don't allow both guest and system user access)\n;guest only = Yes\n# allow write access\nread only = No\n# This is an example of how to limit access to the share to known IPs\n;hosts deny = ALL\n;hosts allow = 127.0.0.1 192.168.1.0/24\n# share config end\n"})}),"\n",(0,a.jsxs)(n.p,{children:["In the above example, it is assumed that the user has chosen a suitable method for making ",(0,a.jsx)(n.code,{children:"/mnt/someshare"})," writeable by guest users."]}),"\n",(0,a.jsxs)(n.p,{children:["After adding a ",(0,a.jsx)(n.code,{children:"[someshare]"})," section like in the above example, run ",(0,a.jsx)(n.code,{children:"sudo testparm"})," to check that the newly included share does not contain syntax errors. Check out ",(0,a.jsx)(n.code,{children:"man testparm"})," for more information about the ",(0,a.jsx)(n.em,{children:"testparm"})," utility."]}),"\n",(0,a.jsxs)(n.p,{children:["If ",(0,a.jsx)(n.em,{children:"testparm"})," didn't spot any problems, restart Samba with ",(0,a.jsx)(n.code,{children:"sudo systemctl restart smb"}),", which will activate the new configuration."]}),"\n",(0,a.jsx)(n.h3,{id:"links-to-the-official-samba-documentation",children:"Links to the official Samba documentation"}),"\n",(0,a.jsxs)(n.p,{children:["Apart from the aforementioned ",(0,a.jsx)(n.code,{children:"man smb.conf"}),", wiki.samba.org is your friend, specifically:"]}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsx)(n.li,{children:(0,a.jsx)(n.a,{href:"https://wiki.samba.org/index.php/Setting_up_a_Share_Using_POSIX_ACLs",children:"https://wiki.samba.org/index.php/Setting_up_a_Share_Using_POSIX_ACLs"})}),"\n",(0,a.jsx)(n.li,{children:(0,a.jsx)(n.a,{href:"https://wiki.samba.org/index.php/Setting_up_Samba_as_a_Standalone_Server",children:"https://wiki.samba.org/index.php/Setting_up_Samba_as_a_Standalone_Server"})}),"\n"]}),"\n",(0,a.jsx)(n.p,{children:"The default Solus Samba configuration is patterned on the above."}),"\n",(0,a.jsx)(n.h2,{id:"full-manual-control-of-samba-recommended-only-for-experienced-samba-admins",children:"Full manual control of Samba (recommended only for experienced Samba admins)"}),"\n",(0,a.jsx)(n.p,{children:"Full manual control of Samba can be achieved by completely bypassing the default Solus Samba configuration."}),"\n",(0,a.jsxs)(n.p,{children:["In the ",(0,a.jsx)(n.em,{children:"smbd"})," manual page (",(0,a.jsx)(n.code,{children:"man 8 smbd"}),"), it is shown how the compiled-in default config file can be overridden by specifying the ",(0,a.jsx)(n.code,{children:"--configfile="})," flag during startup."]}),"\n",(0,a.jsxs)(n.p,{children:["To use the traditional ",(0,a.jsx)(n.code,{children:"/etc/samba/smb.conf"})," configuration file exclusively (thus bypassing the Solus configuration), edit the ",(0,a.jsx)(n.code,{children:"/etc/sysconfig/samba"})," file to look like so:"]}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-ini",children:'## Path: Network/Samba\n## Description: Samba process options\n## Type: string\n## Default: ""\n## ServiceRestart: samba\nSAMBAOPTIONS=""\n## Type: string\n## Default: ""\n## ServiceRestart: smb\nSMBDOPTIONS="--configfile=/etc/samba/smb.conf"\n## Type: string\n## Default: ""\n## ServiceRestart: nmb\nNMBDOPTIONS="--configfile=/etc/samba/smb.conf"\n## Type: string\n## Default: ""\n## ServiceRestart: winbind\nWINBINDOPTIONS=""\n'})})]})}function h(e={}){const{wrapper:n}={...(0,i.a)(),...e.components};return n?(0,a.jsx)(n,{...e,children:(0,a.jsx)(c,{...e})}):c(e)}},11151:(e,n,s)=>{s.d(n,{Z:()=>r,a:()=>o});var a=s(67294);const i={},t=a.createContext(i);function o(e){const n=a.useContext(t);return a.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function r(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:o(e.components),a.createElement(t.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/26308ea3.5643d214.js b/assets/js/26308ea3.5643d214.js new file mode 100644 index 000000000..decbb603e --- /dev/null +++ b/assets/js/26308ea3.5643d214.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([["614"],{4129:function(e,t,n){n.r(t),n.d(t,{metadata:()=>i,contentTitle:()=>R,default:()=>_,assets:()=>P,toc:()=>A,frontMatter:()=>T});var i=JSON.parse('{"id":"packaging/submitting-a-pull-request","title":"Submitting a Pull Request for Review","description":"Please refrain from submitting a pull request for the following instances:","source":"@site/docs/packaging/submitting-a-pull-request.mdx","sourceDirName":"packaging","slug":"/packaging/submitting-a-pull-request","permalink":"/docs/packaging/submitting-a-pull-request","draft":false,"unlisted":false,"editUrl":"https://github.com/getsolus/help-center-docs/tree/master/docs/packaging/submitting-a-pull-request.mdx","tags":[],"version":"current","lastUpdatedAt":1733757592000,"sidebarPosition":6,"frontMatter":{"title":"Submitting a Pull Request for Review","summary":"Submitting a Pull Request for Review","sidebar_position":6},"sidebar":"packagingSidebar","previous":{"title":"Testing a Package","permalink":"/docs/packaging/testing-a-package"},"next":{"title":"Packaging Changes","permalink":"/docs/packaging/packaging-changes"}}'),s=n("85893"),r=n("50065"),a=n("77793"),l=n("84404"),o=n("67294"),c=n("74904");let u="tabItem_Ymn6";function h(e){let{children:t,hidden:n,className:i}=e;return(0,s.jsx)("div",{role:"tabpanel",className:(0,c.Z)(u,i),hidden:n,children:t})}var d=n("27570"),m=n("16550"),p=n("27222"),g=n("63237"),f=n("51373"),x=n("70085");function b(e){return o.Children.toArray(e).filter(e=>"\n"!==e).map(e=>{if(!e||o.isValidElement(e)&&function(e){let{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)})?.filter(Boolean)??[]}function j(e){let{value:t,tabValues:n}=e;return n.some(e=>e.value===t)}var y=n("13341");let k="tabList__CuJ",v="tabItem_LNqP";function w(e){let{className:t,block:n,selectedValue:i,selectValue:r,tabValues:a}=e,l=[],{blockElementScrollPositionUntilNextRender:o}=(0,d.o5)(),u=e=>{let t=e.currentTarget,n=a[l.indexOf(t)].value;n!==i&&(o(t),r(n))},h=e=>{let t=null;switch(e.key){case"Enter":u(e);break;case"ArrowRight":{let n=l.indexOf(e.currentTarget)+1;t=l[n]??l[0];break}case"ArrowLeft":{let n=l.indexOf(e.currentTarget)-1;t=l[n]??l[l.length-1]}}t?.focus()};return(0,s.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,c.Z)("tabs",{"tabs--block":n},t),children:a.map(e=>{let{value:t,label:n,attributes:r}=e;return(0,s.jsx)("li",{role:"tab",tabIndex:i===t?0:-1,"aria-selected":i===t,ref:e=>l.push(e),onKeyDown:h,onClick:u,...r,className:(0,c.Z)("tabs__item",v,r?.className,{"tabs__item--active":i===t}),children:n??t},t)})})}function q(e){let{lazy:t,children:n,selectedValue:i}=e,r=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){let e=r.find(e=>e.props.value===i);return e?(0,o.cloneElement)(e,{className:(0,c.Z)("margin-top--md",e.props.className)}):null}return(0,s.jsx)("div",{className:"margin-top--md",children:r.map((e,t)=>(0,o.cloneElement)(e,{key:t,hidden:e.props.value!==i}))})}function S(e){let t=function(e){let{defaultValue:t,queryString:n=!1,groupId:i}=e,s=function(e){let{values:t,children:n}=e;return(0,o.useMemo)(()=>{let e=t??b(n).map(e=>{let{props:{value:t,label:n,attributes:i,default:s}}=e;return{value:t,label:n,attributes:i,default:s}});return!function(e){let t=(0,f.lx)(e,(e,t)=>e.value===t.value);if(t.length>0)throw Error(`Docusaurus error: Duplicate values "${t.map(e=>e.value).join(", ")}" found in . Every value needs to be unique.`)}(e),e},[t,n])}(e),[r,a]=(0,o.useState)(()=>(function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw Error("Docusaurus error: the component requires at least one children component");if(t){if(!j({value:t,tabValues:n}))throw Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map(e=>e.value).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}let i=n.find(e=>e.default)??n[0];if(!i)throw Error("Unexpected error: 0 tabValues");return i.value})({defaultValue:t,tabValues:s})),[l,c]=function(e){let{queryString:t=!1,groupId:n}=e,i=(0,m.k6)(),s=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n}),r=(0,g._X)(s);return[r,(0,o.useCallback)(e=>{if(!s)return;let t=new URLSearchParams(i.location.search);t.set(s,e),i.replace({...i.location,search:t.toString()})},[s,i])]}({queryString:n,groupId:i}),[u,h]=function(e){var t;let{groupId:n}=e;let i=(t=n)?`docusaurus.tab.${t}`:null,[s,r]=(0,x.Nk)(i);return[s,(0,o.useCallback)(e=>{if(!!i)r.set(e)},[i,r])]}({groupId:i}),d=(()=>{let e=l??u;return j({value:e,tabValues:s})?e:null})();return(0,p.Z)(()=>{d&&a(d)},[d]),{selectedValue:r,selectValue:(0,o.useCallback)(e=>{if(!j({value:e,tabValues:s}))throw Error(`Can't select invalid tab value=${e}`);a(e),c(e),h(e)},[c,h,s]),tabValues:s}}(e);return(0,s.jsxs)("div",{className:(0,c.Z)("tabs-container",k),children:[(0,s.jsx)(w,{...t,...e}),(0,s.jsx)(q,{...t,...e})]})}function I(e){let t=(0,y.Z)();return(0,s.jsx)(S,{...e,children:b(e.children)},String(t))}let T={title:"Submitting a Pull Request for Review",summary:"Submitting a Pull Request for Review",sidebar_position:6},R="Submitting a Pull Request for Review",P={},A=[{value:"Final branch review",id:"final-branch-review",level:2},{value:"Creating the pull request",id:"creating-the-pull-request",level:2},{value:"Amending a pull request",id:"amending-a-pull-request",level:2},{value:"Amending a pull request with multiple commits",id:"amending-a-pull-request-with-multiple-commits",level:3},{value:"Updating a pull request that has changes requested",id:"updating-a-pull-request-that-has-changes-requested",level:2},{value:"After the pull request is accepted",id:"after-the-pull-request-is-accepted",level:2}];function C(e){let t={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",ol:"ol",p:"p",pre:"pre",ul:"ul",...(0,r.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.header,{children:(0,s.jsx)(t.h1,{id:"submitting-a-pull-request-for-review",children:"Submitting a Pull Request for Review"})}),"\n",(0,s.jsx)(t.p,{children:"Please refrain from submitting a pull request for the following instances:"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsxs)(t.li,{children:["For a package that is yet to be accepted for inclusion by a member of the Solus Staff team. Search ",(0,s.jsx)(t.a,{href:"https://github.com/getsolus/packages/issues?q=label%3A%22Package+Request%22",children:"open package requests"})," to see if there is an open request for the package.\nWe welcome you to politely reach out via the package request issue or our Support room on ",(0,s.jsx)(t.a,{href:"/docs/user/contributing/getting-involved#matrix-chat",children:"Matrix"})," if you deem the review of the request to be time-sensitive in nature."]}),"\n",(0,s.jsxs)(t.li,{children:["If your pull request is a Work In Progress / WIP. Pull requests that are completed or are marked as ",(0,s.jsx)(t.em,{children:"request for comments"})," (RFC) are accepted. For RFC request please ensure your patch title contains ",(0,s.jsx)(t.code,{children:"[RFC]"})," and is marked as 'draft'. WIP patches clutter the issue tracker, make patch review by Solus Staff more time consuming, and introduce unnecessary work."]}),"\n"]}),"\n",(0,s.jsx)(t.h2,{id:"final-branch-review",children:"Final branch review"}),"\n",(0,s.jsx)(t.p,{children:"At minimum, your pull request will include changes for the following files:"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.code,{children:"package.yml"})}),"\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.code,{children:"pspec_*.xml"})}),"\n"]}),"\n",(0,s.jsx)(t.p,{children:"It may also include these files:"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.code,{children:"MAINTAINERS.md"})}),"\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.code,{children:"monitoring.yml"})}),"\n"]}),"\n",(0,s.jsxs)(t.p,{children:["Double check the ",(0,s.jsx)(t.code,{children:"package.yml"})," to make sure the builddeps are in the right order, and that it otherwise adheres to the ",(0,s.jsx)(t.a,{href:"/docs/packaging/package.yml",children:"standards"})," Solus has set."]}),"\n",(0,s.jsxs)(t.p,{children:["If any additional files were required for the build, then you must also include the ",(0,s.jsx)(t.code,{children:"files/"})," directory. See ",(0,s.jsx)(t.a,{href:"/docs/packaging/packaging-practices",children:"Packaging Practices"})," for more detail."]}),"\n",(0,s.jsxs)(t.p,{children:["Many package builds may result in the automatic generation of an ABI report. These files start with ",(0,s.jsx)(t.code,{children:"abi_*"})," and must also be included, as they allow simple tracking of changes to symbols and dependencies."]}),"\n",(0,s.jsx)(t.p,{children:"Take a final look over your commit message to make sure it has all the necessary information, and that the formatting is good. You can use this, which will show the most recent commit:"}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-bash",children:"git log -1\n"})}),"\n",(0,s.jsx)(t.h2,{id:"creating-the-pull-request",children:"Creating the pull request"}),"\n",(0,s.jsx)(t.p,{children:"There are multiple ways to create a pull request with GitHub, either from the website, or from the command line."}),"\n",(0,s.jsxs)(I,{groupId:"opening-prs",children:[(0,s.jsxs)(h,{value:"website",label:"Website",children:[(0,s.jsx)("p",{children:"In the package folder, push your local changes to a remote branch:"}),(0,s.jsx)(l.Z,{language:"bash",children:(0,s.jsx)(t.p,{children:"git push"})}),(0,s.jsx)(a.Z,{type:"info",children:(0,s.jsx)(t.p,{children:"If you've created your own branch, as recommended, the CLI tool will show you a new command to create and push to a remote branch matching the local one. Run this."})}),(0,s.jsx)("p",{children:"Once the commit is successfully pushed, you'll notice that a URL will be provided that will immediately allow you to create a pull request with your changes."}),(0,s.jsxs)("p",{children:["Run ",(0,s.jsx)(t.code,{children:"git status"})," one last time to make sure your branch is clean. If it is:"]}),(0,s.jsxs)(t.ol,{children:["\n",(0,s.jsx)(t.li,{children:"Open the link."}),"\n",(0,s.jsx)(t.li,{children:"Fill in a summary of your changes (usually the same as the commit message)."}),"\n",(0,s.jsxs)(t.li,{children:["Link any relevant issues:","\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsxs)(t.li,{children:["If you want to link this pull request to an existing issue, simply mention it in the PR summary: ",(0,s.jsx)(t.code,{children:"The inclusion of fixes #123"}),"."]}),"\n",(0,s.jsxs)(t.li,{children:["If you need a change to depend on another change, mention it in the PR summary too: ",(0,s.jsx)(t.code,{children:"Depends on #234"}),"."]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(t.li,{children:"Double-check everything."}),"\n",(0,s.jsx)(t.li,{children:"Create the pull request!"}),"\n"]})]}),(0,s.jsxs)(h,{value:"github-cli",label:"GitHub CLI",children:[(0,s.jsxs)("p",{children:["In the package folder, run the ",(0,s.jsx)(t.code,{children:"gh"})," command:"]}),(0,s.jsx)(l.Z,{language:"bash",children:(0,s.jsx)(t.p,{children:"gh pr create"})}),(0,s.jsx)("p",{children:"This will start an interactive session to create your pull request step-by-step."}),(0,s.jsxs)("p",{children:["When the current branch isn't fully pushed to a git remote, a prompt will ask where to push the branch and offer an option to fork the base repository. For community packagers, you should use your fork of the packages repository. If you are a member of the Solus Staff, you should use ",(0,s.jsx)(t.code,{children:"getsolus/packages"}),"."]}),(0,s.jsx)(a.Z,{type:"info",children:(0,s.jsxs)(t.p,{children:["The text editor used by ",(0,s.jsx)(t.code,{children:"github-cli"})," may not the same one that ",(0,s.jsx)(t.code,{children:"git"})," uses. To change this, consult the ",(0,s.jsxs)(t.a,{href:"https://cli.github.com/manual/gh_config_set",children:[(0,s.jsx)(t.code,{children:"gh config set"})," command"]}),"."]})})]})]}),"\n",(0,s.jsx)(t.h2,{id:"amending-a-pull-request",children:"Amending a pull request"}),"\n",(0,s.jsx)(t.p,{children:"There may be times you need to make minor changes after submitting the pull request. For instance, you see something that needs correcting. To do this, you will need to amend your commit."}),"\n",(0,s.jsxs)(t.ol,{children:["\n",(0,s.jsx)(t.li,{children:"Make your changes"}),"\n",(0,s.jsxs)(t.li,{children:["Stage your changes: ",(0,s.jsx)(t.code,{children:"git add ."})]}),"\n",(0,s.jsxs)(t.li,{children:["Amend the commit: ",(0,s.jsx)(t.code,{children:"git commit --amend"})]}),"\n",(0,s.jsxs)(t.li,{children:["Push the amended commit: ",(0,s.jsx)(t.code,{children:"git push --force"})]}),"\n"]}),"\n",(0,s.jsx)(t.p,{children:"The web interface on GitHub will automatically update with the latest changes."}),"\n",(0,s.jsx)(t.admonition,{type:"note",children:(0,s.jsx)(t.p,{children:"We want amended commits because of the way our tooling works. It expects that there is only one Git commit per package change."})}),"\n",(0,s.jsx)(t.h3,{id:"amending-a-pull-request-with-multiple-commits",children:"Amending a pull request with multiple commits"}),"\n",(0,s.jsx)(t.p,{children:"Sometimes, you may be submitting multiple packages in a single pull request, and one of them might need changes. The process is very similar to the above steps, but with a couple of additions."}),"\n",(0,s.jsxs)(t.ol,{children:["\n",(0,s.jsxs)(t.li,{children:["Rebase on the ",(0,s.jsx)(t.code,{children:"main"})," branch: ",(0,s.jsx)(t.code,{children:"git rebase -i origin/main"})]}),"\n",(0,s.jsxs)(t.li,{children:["A text editor will open in your terminal (",(0,s.jsx)(t.code,{children:"nano"})," by default). Change the line or lines of the commits you want to change from ",(0,s.jsx)(t.code,{children:"pick"})," to ",(0,s.jsx)(t.code,{children:"edit"})]}),"\n",(0,s.jsxs)(t.li,{children:["Save and close the editor (by default, ",(0,s.jsx)(t.code,{children:"Ctrl+s"})," ",(0,s.jsx)(t.code,{children:"Ctrl+x"}),")"]}),"\n",(0,s.jsx)(t.li,{children:"Make your changes"}),"\n",(0,s.jsxs)(t.li,{children:["Stage your changes: ",(0,s.jsx)(t.code,{children:"git add ."})]}),"\n",(0,s.jsxs)(t.li,{children:["Amend the commit: ",(0,s.jsx)(t.code,{children:"git commit --amend"})]}),"\n",(0,s.jsxs)(t.li,{children:["Continue the rebase: ",(0,s.jsx)(t.code,{children:"git rebase --continue"})]}),"\n",(0,s.jsx)(t.li,{children:"Repeat steps 4 through 7 for all commits you wish to edit"}),"\n",(0,s.jsxs)(t.li,{children:["Push the amended stack: ",(0,s.jsx)(t.code,{children:"git push --force"})]}),"\n"]}),"\n",(0,s.jsx)(t.h2,{id:"updating-a-pull-request-that-has-changes-requested",children:"Updating a pull request that has changes requested"}),"\n",(0,s.jsx)(t.p,{children:"Your pull request will be reviewed, and changes may be requested. This is normal. It's to ensure the quality of the packages in our repository and to make sure each PR adheres to our standards."}),"\n",(0,s.jsxs)(t.p,{children:["If you need to make changes in response to a review, follow the steps in the ",(0,s.jsx)(t.a,{href:"#amending-a-pull-request",children:"section above"}),"."]}),"\n",(0,s.jsx)(t.h2,{id:"after-the-pull-request-is-accepted",children:"After the pull request is accepted"}),"\n",(0,s.jsx)(t.p,{children:"Once your pull request is accepted and merged, someone on the Solus Team will issue a build. Your new / updated package will be published to the unstable repos."}),"\n",(0,s.jsxs)(t.p,{children:["At this point you may ",(0,s.jsx)(t.a,{href:"git-basics#deleting-your-branch-after-a-pull-request-is-merged",children:"delete the local and remote branches"})," for this pull request."]})]})}function _(e={}){let{wrapper:t}={...(0,r.a)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(C,{...e})}):C(e)}}}]); \ No newline at end of file diff --git a/assets/js/26308ea3.adc66a12.js b/assets/js/26308ea3.adc66a12.js deleted file mode 100644 index 0435bf27a..000000000 --- a/assets/js/26308ea3.adc66a12.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[6485],{85612:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>C,contentTitle:()=>P,default:()=>N,frontMatter:()=>T,metadata:()=>A,toc:()=>V});var s=n(85893),a=n(11151),r=n(20906),i=n(17573),l=n(67294),o=n(36905);const c={tabItem:"tabItem_Ymn6"};function u(e){let{children:t,hidden:n,className:a}=e;return(0,s.jsx)("div",{role:"tabpanel",className:(0,o.Z)(c.tabItem,a),hidden:n,children:t})}var h=n(18119),d=n(16550),p=n(1290),m=n(39222),g=n(79113),f=n(1606);function b(e){return l.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,l.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function x(e){const{values:t,children:n}=e;return(0,l.useMemo)((()=>{const e=t??function(e){return b(e).map((e=>{let{props:{value:t,label:n,attributes:s,default:a}}=e;return{value:t,label:n,attributes:s,default:a}}))}(n);return function(e){const t=(0,g.lx)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,n])}function j(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function y(e){let{queryString:t=!1,groupId:n}=e;const s=(0,d.k6)(),a=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,m._X)(a),(0,l.useCallback)((e=>{if(!a)return;const t=new URLSearchParams(s.location.search);t.set(a,e),s.replace({...s.location,search:t.toString()})}),[a,s])]}function w(e){const{defaultValue:t,queryString:n=!1,groupId:s}=e,a=x(e),[r,i]=(0,l.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!j({value:t,tabValues:n}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const s=n.find((e=>e.default))??n[0];if(!s)throw new Error("Unexpected error: 0 tabValues");return s.value}({defaultValue:t,tabValues:a}))),[o,c]=y({queryString:n,groupId:s}),[u,h]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[s,a]=(0,f.Nk)(n);return[s,(0,l.useCallback)((e=>{n&&a.set(e)}),[n,a])]}({groupId:s}),d=(()=>{const e=o??u;return j({value:e,tabValues:a})?e:null})();(0,p.Z)((()=>{d&&i(d)}),[d]);return{selectedValue:r,selectValue:(0,l.useCallback)((e=>{if(!j({value:e,tabValues:a}))throw new Error(`Can't select invalid tab value=${e}`);i(e),c(e),h(e)}),[c,h,a]),tabValues:a}}var k=n(45025);const v={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};function q(e){let{className:t,block:n,selectedValue:a,selectValue:r,tabValues:i}=e;const l=[],{blockElementScrollPositionUntilNextRender:c}=(0,h.o5)(),u=e=>{const t=e.currentTarget,n=l.indexOf(t),s=i[n].value;s!==a&&(c(t),r(s))},d=e=>{let t=null;switch(e.key){case"Enter":u(e);break;case"ArrowRight":{const n=l.indexOf(e.currentTarget)+1;t=l[n]??l[0];break}case"ArrowLeft":{const n=l.indexOf(e.currentTarget)-1;t=l[n]??l[l.length-1];break}}t?.focus()};return(0,s.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,o.Z)("tabs",{"tabs--block":n},t),children:i.map((e=>{let{value:t,label:n,attributes:r}=e;return(0,s.jsx)("li",{role:"tab",tabIndex:a===t?0:-1,"aria-selected":a===t,ref:e=>l.push(e),onKeyDown:d,onClick:u,...r,className:(0,o.Z)("tabs__item",v.tabItem,r?.className,{"tabs__item--active":a===t}),children:n??t},t)}))})}function I(e){let{lazy:t,children:n,selectedValue:a}=e;const r=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=r.find((e=>e.props.value===a));return e?(0,l.cloneElement)(e,{className:(0,o.Z)("margin-top--md",e.props.className)}):null}return(0,s.jsx)("div",{className:"margin-top--md",children:r.map(((e,t)=>(0,l.cloneElement)(e,{key:t,hidden:e.props.value!==a})))})}function S(e){const t=w(e);return(0,s.jsxs)("div",{className:(0,o.Z)("tabs-container",v.tabList),children:[(0,s.jsx)(q,{...t,...e}),(0,s.jsx)(I,{...t,...e})]})}function R(e){const t=(0,k.Z)();return(0,s.jsx)(S,{...e,children:b(e.children)},String(t))}const T={title:"Submitting a Pull Request for Review",summary:"Submitting a Pull Request for Review",sidebar_position:6},P="Submitting a Pull Request for Review",A={id:"packaging/submitting-a-pull-request",title:"Submitting a Pull Request for Review",description:"Please refrain from submitting a pull request for the following instances:",source:"@site/docs/packaging/submitting-a-pull-request.mdx",sourceDirName:"packaging",slug:"/packaging/submitting-a-pull-request",permalink:"/docs/packaging/submitting-a-pull-request",draft:!1,unlisted:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/packaging/submitting-a-pull-request.mdx",tags:[],version:"current",lastUpdatedAt:1732716912e3,sidebarPosition:6,frontMatter:{title:"Submitting a Pull Request for Review",summary:"Submitting a Pull Request for Review",sidebar_position:6},sidebar:"packagingSidebar",previous:{title:"Testing a Package",permalink:"/docs/packaging/testing-a-package"},next:{title:"Packaging Changes",permalink:"/docs/packaging/packaging-changes"}},C={},V=[{value:"Final branch review",id:"final-branch-review",level:2},{value:"Creating the pull request",id:"creating-the-pull-request",level:2},{value:"Amending a pull request",id:"amending-a-pull-request",level:2},{value:"Amending a pull request with multiple commits",id:"amending-a-pull-request-with-multiple-commits",level:3},{value:"Updating a pull request that has changes requested",id:"updating-a-pull-request-that-has-changes-requested",level:2},{value:"After the pull request is accepted",id:"after-the-pull-request-is-accepted",level:2}];function _(e){const t={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",ol:"ol",p:"p",pre:"pre",ul:"ul",...(0,a.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.header,{children:(0,s.jsx)(t.h1,{id:"submitting-a-pull-request-for-review",children:"Submitting a Pull Request for Review"})}),"\n",(0,s.jsx)(t.p,{children:"Please refrain from submitting a pull request for the following instances:"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsxs)(t.li,{children:["For a package that is yet to be accepted for inclusion by a member of the Solus Staff team. Search ",(0,s.jsx)(t.a,{href:"https://github.com/getsolus/packages/issues?q=label%3A%22Package+Request%22",children:"open package requests"})," to see if there is an open request for the package.\nWe welcome you to politely reach out via the package request issue or our Support room on ",(0,s.jsx)(t.a,{href:"/docs/user/contributing/getting-involved#matrix-chat",children:"Matrix"})," if you deem the review of the request to be time-sensitive in nature."]}),"\n",(0,s.jsxs)(t.li,{children:["If your pull request is a Work In Progress / WIP. Pull requests that are completed or are marked as ",(0,s.jsx)(t.em,{children:"request for comments"})," (RFC) are accepted. For RFC request please ensure your patch title contains ",(0,s.jsx)(t.code,{children:"[RFC]"})," and is marked as 'draft'. WIP patches clutter the issue tracker, make patch review by Solus Staff more time consuming, and introduce unnecessary work."]}),"\n"]}),"\n",(0,s.jsx)(t.h2,{id:"final-branch-review",children:"Final branch review"}),"\n",(0,s.jsx)(t.p,{children:"At minimum, your pull request will include changes for the following files:"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.code,{children:"package.yml"})}),"\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.code,{children:"pspec_*.xml"})}),"\n"]}),"\n",(0,s.jsx)(t.p,{children:"It may also include these files:"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.code,{children:"MAINTAINERS.md"})}),"\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.code,{children:"monitoring.yml"})}),"\n"]}),"\n",(0,s.jsxs)(t.p,{children:["Double check the ",(0,s.jsx)(t.code,{children:"package.yml"})," to make sure the builddeps are in the right order, and that it otherwise adheres to the ",(0,s.jsx)(t.a,{href:"/docs/packaging/package.yml",children:"standards"})," Solus has set."]}),"\n",(0,s.jsxs)(t.p,{children:["If any additional files were required for the build, then you must also include the ",(0,s.jsx)(t.code,{children:"files/"})," directory. See ",(0,s.jsx)(t.a,{href:"/docs/packaging/packaging-practices",children:"Packaging Practices"})," for more detail."]}),"\n",(0,s.jsxs)(t.p,{children:["Many package builds may result in the automatic generation of an ABI report. These files start with ",(0,s.jsx)(t.code,{children:"abi_*"})," and must also be included, as they allow simple tracking of changes to symbols and dependencies."]}),"\n",(0,s.jsx)(t.p,{children:"Take a final look over your commit message to make sure it has all the necessary information, and that the formatting is good. You can use this, which will show the most recent commit:"}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-bash",children:"git log -1\n"})}),"\n",(0,s.jsx)(t.h2,{id:"creating-the-pull-request",children:"Creating the pull request"}),"\n",(0,s.jsx)(t.p,{children:"There are multiple ways to create a pull request with GitHub, either from the website, or from the command line."}),"\n",(0,s.jsxs)(R,{groupId:"opening-prs",children:[(0,s.jsxs)(u,{value:"website",label:"Website",children:[(0,s.jsxs)("p",{children:[(0,s.jsx)(t.p,{children:"In the package folder, push your local changes to a remote branch:"}),(0,s.jsx)(i.Z,{language:"bash",children:(0,s.jsx)(t.p,{children:"git push"})})]}),(0,s.jsx)(r.Z,{type:"info",children:(0,s.jsx)(t.p,{children:"If you've created your own branch, as recommended, the CLI tool will show you a new command to create and push to a remote branch matching the local one. Run this."})}),(0,s.jsxs)("p",{children:[(0,s.jsx)(t.p,{children:"Once the commit is successfully pushed, you'll notice that a URL will be provided that will immediately allow you to create a pull request with your changes."}),(0,s.jsxs)(t.p,{children:["Run ",(0,s.jsx)(t.code,{children:"git status"})," one last time to make sure your branch is clean. If it is:"]}),(0,s.jsxs)(t.ol,{children:["\n",(0,s.jsx)(t.li,{children:"Open the link."}),"\n",(0,s.jsx)(t.li,{children:"Fill in a summary of your changes (usually the same as the commit message)."}),"\n",(0,s.jsxs)(t.li,{children:["Link any relevant issues:","\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsxs)(t.li,{children:["If you want to link this pull request to an existing issue, simply mention it in the PR summary: ",(0,s.jsx)(t.code,{children:"The inclusion of fixes #123"}),"."]}),"\n",(0,s.jsxs)(t.li,{children:["If you need a change to depend on another change, mention it in the PR summary too: ",(0,s.jsx)(t.code,{children:"Depends on #234"}),"."]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(t.li,{children:"Double-check everything."}),"\n",(0,s.jsx)(t.li,{children:"Create the pull request!"}),"\n"]})]})]}),(0,s.jsxs)(u,{value:"github-cli",label:"GitHub CLI",children:[(0,s.jsx)("p",{children:(0,s.jsxs)(t.p,{children:["In the package folder, run the ",(0,s.jsx)(t.code,{children:"gh"})," command:"]})}),(0,s.jsx)(i.Z,{language:"bash",children:(0,s.jsx)(t.p,{children:"gh pr create"})}),(0,s.jsxs)("p",{children:[(0,s.jsx)(t.p,{children:"This will start an interactive session to create your pull request step-by-step."}),(0,s.jsxs)(t.p,{children:["When the current branch isn't fully pushed to a git remote, a prompt will ask where to push the branch and offer an option to fork the base repository. For community packagers, you should use your fork of the packages repository. If you are a member of the Solus Staff, you should use ",(0,s.jsx)(t.code,{children:"getsolus/packages"}),"."]})]}),(0,s.jsx)(r.Z,{type:"info",children:(0,s.jsxs)(t.p,{children:["The text editor used by ",(0,s.jsx)(t.code,{children:"github-cli"})," may not the same one that ",(0,s.jsx)(t.code,{children:"git"})," uses. To change this, consult the ",(0,s.jsxs)(t.a,{href:"https://cli.github.com/manual/gh_config_set",children:[(0,s.jsx)(t.code,{children:"gh config set"})," command"]}),"."]})})]})]}),"\n",(0,s.jsx)(t.h2,{id:"amending-a-pull-request",children:"Amending a pull request"}),"\n",(0,s.jsx)(t.p,{children:"There may be times you need to make minor changes after submitting the pull request. For instance, you see something that needs correcting. To do this, you will need to amend your commit."}),"\n",(0,s.jsxs)(t.ol,{children:["\n",(0,s.jsx)(t.li,{children:"Make your changes"}),"\n",(0,s.jsxs)(t.li,{children:["Stage your changes: ",(0,s.jsx)(t.code,{children:"git add ."})]}),"\n",(0,s.jsxs)(t.li,{children:["Amend the commit: ",(0,s.jsx)(t.code,{children:"git commit --amend"})]}),"\n",(0,s.jsxs)(t.li,{children:["Push the amended commit: ",(0,s.jsx)(t.code,{children:"git push --force"})]}),"\n"]}),"\n",(0,s.jsx)(t.p,{children:"The web interface on GitHub will automatically update with the latest changes."}),"\n",(0,s.jsx)(t.admonition,{type:"note",children:(0,s.jsx)(t.p,{children:"We want amended commits because of the way our tooling works. It expects that there is only one Git commit per package change."})}),"\n",(0,s.jsx)(t.h3,{id:"amending-a-pull-request-with-multiple-commits",children:"Amending a pull request with multiple commits"}),"\n",(0,s.jsx)(t.p,{children:"Sometimes, you may be submitting multiple packages in a single pull request, and one of them might need changes. The process is very similar to the above steps, but with a couple of additions."}),"\n",(0,s.jsxs)(t.ol,{children:["\n",(0,s.jsxs)(t.li,{children:["Rebase on the ",(0,s.jsx)(t.code,{children:"main"})," branch: ",(0,s.jsx)(t.code,{children:"git rebase -i origin/main"})]}),"\n",(0,s.jsxs)(t.li,{children:["A text editor will open in your terminal (",(0,s.jsx)(t.code,{children:"nano"})," by default). Change the line or lines of the commits you want to change from ",(0,s.jsx)(t.code,{children:"pick"})," to ",(0,s.jsx)(t.code,{children:"edit"})]}),"\n",(0,s.jsxs)(t.li,{children:["Save and close the editor (by default, ",(0,s.jsx)(t.code,{children:"Ctrl+s"})," ",(0,s.jsx)(t.code,{children:"Ctrl+x"}),")"]}),"\n",(0,s.jsx)(t.li,{children:"Make your changes"}),"\n",(0,s.jsxs)(t.li,{children:["Stage your changes: ",(0,s.jsx)(t.code,{children:"git add ."})]}),"\n",(0,s.jsxs)(t.li,{children:["Amend the commit: ",(0,s.jsx)(t.code,{children:"git commit --amend"})]}),"\n",(0,s.jsxs)(t.li,{children:["Continue the rebase: ",(0,s.jsx)(t.code,{children:"git rebase --continue"})]}),"\n",(0,s.jsx)(t.li,{children:"Repeat steps 4 through 7 for all commits you wish to edit"}),"\n",(0,s.jsxs)(t.li,{children:["Push the amended stack: ",(0,s.jsx)(t.code,{children:"git push --force"})]}),"\n"]}),"\n",(0,s.jsx)(t.h2,{id:"updating-a-pull-request-that-has-changes-requested",children:"Updating a pull request that has changes requested"}),"\n",(0,s.jsx)(t.p,{children:"Your pull request will be reviewed, and changes may be requested. This is normal. It's to ensure the quality of the packages in our repository and to make sure each PR adheres to our standards."}),"\n",(0,s.jsxs)(t.p,{children:["If you need to make changes in response to a review, follow the steps in the ",(0,s.jsx)(t.a,{href:"#amending-a-pull-request",children:"section above"}),"."]}),"\n",(0,s.jsx)(t.h2,{id:"after-the-pull-request-is-accepted",children:"After the pull request is accepted"}),"\n",(0,s.jsx)(t.p,{children:"Once your pull request is accepted and merged, someone on the Solus Team will issue a build. Your new / updated package will be published to the unstable repos."}),"\n",(0,s.jsxs)(t.p,{children:["At this point you may ",(0,s.jsx)(t.a,{href:"git-basics#deleting-your-branch-after-a-pull-request-is-merged",children:"delete the local and remote branches"})," for this pull request."]})]})}function N(e={}){const{wrapper:t}={...(0,a.a)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(_,{...e})}):_(e)}}}]); \ No newline at end of file diff --git a/assets/js/27d71881.29975ae9.js b/assets/js/27d71881.29975ae9.js new file mode 100644 index 000000000..7e3aa462e --- /dev/null +++ b/assets/js/27d71881.29975ae9.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([["4033"],{82071:function(e){e.exports=JSON.parse('{"categoryGeneratedIndex":{"title":"Package Management","slug":"/category/package-management","permalink":"/docs/category/package-management","sidebar":"userSidebar","navigation":{"previous":{"title":"Printers and Scanners","permalink":"/docs/user/hardware/peripherals/printers-and-scanners"},"next":{"title":"Basics to Package Management","permalink":"/docs/user/package-management/basics"}}}}')}}]); \ No newline at end of file diff --git a/assets/js/27d71881.f7c66090.js b/assets/js/27d71881.f7c66090.js deleted file mode 100644 index 0b617974e..000000000 --- a/assets/js/27d71881.f7c66090.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[7577],{19511:e=>{e.exports=JSON.parse('{"categoryGeneratedIndex":{"title":"Package Management","slug":"/category/package-management","permalink":"/docs/category/package-management","sidebar":"userSidebar","navigation":{"previous":{"title":"Printers and Scanners","permalink":"/docs/user/hardware/peripherals/printers-and-scanners"},"next":{"title":"Basics to Package Management","permalink":"/docs/user/package-management/basics"}}}}')}}]); \ No newline at end of file diff --git a/assets/js/2a0f90eb.493adcbc.js b/assets/js/2a0f90eb.493adcbc.js deleted file mode 100644 index 5175d4042..000000000 --- a/assets/js/2a0f90eb.493adcbc.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[2817],{98247:e=>{e.exports=JSON.parse('{"tag":{"label":"solus","permalink":"/blog/tags/solus","allTagsPath":"/blog/tags","count":5,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/solus","page":1,"postsPerPage":5,"totalPages":1,"totalCount":5,"blogDescription":"The Solus Development (b)log!","blogTitle":"Solus DevLog"}}')}}]); \ No newline at end of file diff --git a/assets/js/2a0f90eb.61aa8e18.js b/assets/js/2a0f90eb.61aa8e18.js new file mode 100644 index 000000000..bbba90624 --- /dev/null +++ b/assets/js/2a0f90eb.61aa8e18.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([["9522"],{16961:function(e){e.exports=JSON.parse('{"tag":{"label":"solus","permalink":"/blog/tags/solus","allTagsPath":"/blog/tags","count":5,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/solus","page":1,"postsPerPage":5,"totalPages":1,"totalCount":5,"blogDescription":"The Solus Development (b)log!","blogTitle":"Solus DevLog"}}')}}]); \ No newline at end of file diff --git a/assets/js/2a34ce22.174c770a.js b/assets/js/2a34ce22.174c770a.js deleted file mode 100644 index 5117f575a..000000000 --- a/assets/js/2a34ce22.174c770a.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[6074],{21974:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>a,contentTitle:()=>d,default:()=>h,frontMatter:()=>i,metadata:()=>o,toc:()=>l});var s=r(85893),n=r(11151);const i={title:"System Requirements",summary:"Hardware Requirements Guide"},d="System requirements",o={id:"user/quick-start/installation/system-requirements",title:"System Requirements",description:"- A blank DVD or a USB drive that is at least 3 GB",source:"@site/docs/user/quick-start/installation/system-requirements.md",sourceDirName:"user/quick-start/installation",slug:"/user/quick-start/installation/system-requirements",permalink:"/docs/user/quick-start/installation/system-requirements",draft:!1,unlisted:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/quick-start/installation/system-requirements.md",tags:[],version:"current",lastUpdatedAt:1732716912e3,frontMatter:{title:"System Requirements",summary:"Hardware Requirements Guide"},sidebar:"userSidebar",previous:{title:"Booting with Secure Boot Enabled",permalink:"/docs/user/quick-start/installation/secure-boot"},next:{title:"Software Center",permalink:"/docs/user/quick-start/software-center/"}},a={},l=[];function c(e){const t={a:"a",admonition:"admonition",h1:"h1",header:"header",li:"li",p:"p",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,n.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.header,{children:(0,s.jsx)(t.h1,{id:"system-requirements",children:"System requirements"})}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsx)(t.li,{children:"A blank DVD or a USB drive that is at least 3\xa0GB"}),"\n",(0,s.jsx)(t.li,{children:"On UEFI systems, an EFI partition of 1\xa0GB minimum"}),"\n",(0,s.jsx)(t.li,{children:"An internet connection"}),"\n",(0,s.jsx)(t.li,{children:"System connected to AC power"}),"\n"]}),"\n",(0,s.jsx)(t.p,{children:"In order to install Solus, your system must meet the minimum system requirements. Ideally it should meet or exceed the recommended values for a better experience."}),"\n",(0,s.jsxs)(t.table,{children:[(0,s.jsx)(t.thead,{children:(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.th,{}),(0,s.jsx)(t.th,{children:"Minimum"}),(0,s.jsx)(t.th,{children:"Recommended"})]})}),(0,s.jsxs)(t.tbody,{children:[(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:(0,s.jsx)(t.strong,{children:"Disk space free"})}),(0,s.jsx)(t.td,{children:"10\xa0GB / 9.3\xa0GiB"}),(0,s.jsx)(t.td,{children:"25\xa0GB / 23.3\xa0GiB"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:(0,s.jsx)(t.strong,{children:"Memory (RAM)"})}),(0,s.jsx)(t.td,{children:"4\xa0GB"}),(0,s.jsx)(t.td,{children:"8\xa0GB or more"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:(0,s.jsx)(t.strong,{children:"Processor (CPU)"})}),(0,s.jsx)(t.td,{children:"64-bit (x86-64) processor"}),(0,s.jsxs)(t.td,{children:[(0,s.jsx)(t.a,{href:"https://en.wikipedia.org/wiki/X86-64#Microarchitecture_levels",children:"x86-64-v2"})," 2\xa0GHz quad core"]})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:(0,s.jsx)(t.strong,{children:"System firmware"})}),(0,s.jsx)(t.td,{children:"BIOS / UEFI"}),(0,s.jsx)(t.td,{children:"UEFI"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:(0,s.jsx)(t.strong,{children:"Display Adapter (GPU)"})}),(0,s.jsx)(t.td,{children:"Any onboard or dedicated adapter"}),(0,s.jsx)(t.td,{})]})]})]}),"\n",(0,s.jsx)(t.p,{children:"These are general recommendations. Your requirements may vary based on your intended use of the system."}),"\n",(0,s.jsxs)(t.admonition,{type:"info",children:[(0,s.jsx)(t.p,{children:"Desktop environments that are more feature rich (such as GNOME and KDE Plasma) use the graphics card for 3D-acceleration, when possible. They will benefit from dedicated and more powerful GPUs. Older graphics cards may not support acceleration:"}),(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsx)(t.li,{children:"Intel prior to GMA9xx"}),"\n",(0,s.jsx)(t.li,{children:"NVIDIA prior to NV30 (GeForce FX5xxx series)"}),"\n",(0,s.jsx)(t.li,{children:"Radeon prior to R300 (Radeon 9500)"}),"\n"]})]})]})}function h(e={}){const{wrapper:t}={...(0,n.a)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(c,{...e})}):c(e)}},11151:(e,t,r)=>{r.d(t,{Z:()=>o,a:()=>d});var s=r(67294);const n={},i=s.createContext(n);function d(e){const t=s.useContext(i);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function o(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:d(e.components),s.createElement(i.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/2a34ce22.61bd3e7c.js b/assets/js/2a34ce22.61bd3e7c.js new file mode 100644 index 000000000..55f70cd55 --- /dev/null +++ b/assets/js/2a34ce22.61bd3e7c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([["4530"],{82753:function(e,t,r){r.r(t),r.d(t,{metadata:()=>s,contentTitle:()=>o,default:()=>u,assets:()=>l,toc:()=>a,frontMatter:()=>d});var s=JSON.parse('{"id":"user/quick-start/installation/system-requirements","title":"System Requirements","description":"- A blank DVD or a USB drive that is at least 3 GB","source":"@site/docs/user/quick-start/installation/system-requirements.md","sourceDirName":"user/quick-start/installation","slug":"/user/quick-start/installation/system-requirements","permalink":"/docs/user/quick-start/installation/system-requirements","draft":false,"unlisted":false,"editUrl":"https://github.com/getsolus/help-center-docs/tree/master/docs/user/quick-start/installation/system-requirements.md","tags":[],"version":"current","lastUpdatedAt":1733757592000,"frontMatter":{"title":"System Requirements","summary":"Hardware Requirements Guide"},"sidebar":"userSidebar","previous":{"title":"Booting with Secure Boot Enabled","permalink":"/docs/user/quick-start/installation/secure-boot"},"next":{"title":"Software Center","permalink":"/docs/user/quick-start/software-center/"}}'),n=r("85893"),i=r("50065");let d={title:"System Requirements",summary:"Hardware Requirements Guide"},o="System requirements",l={},a=[];function c(e){let t={a:"a",admonition:"admonition",h1:"h1",header:"header",li:"li",p:"p",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,i.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.header,{children:(0,n.jsx)(t.h1,{id:"system-requirements",children:"System requirements"})}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsx)(t.li,{children:"A blank DVD or a USB drive that is at least 3\xa0GB"}),"\n",(0,n.jsx)(t.li,{children:"On UEFI systems, an EFI partition of 1\xa0GB minimum"}),"\n",(0,n.jsx)(t.li,{children:"An internet connection"}),"\n",(0,n.jsx)(t.li,{children:"System connected to AC power"}),"\n"]}),"\n",(0,n.jsx)(t.p,{children:"In order to install Solus, your system must meet the minimum system requirements. Ideally it should meet or exceed the recommended values for a better experience."}),"\n",(0,n.jsxs)(t.table,{children:[(0,n.jsx)(t.thead,{children:(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.th,{}),(0,n.jsx)(t.th,{children:"Minimum"}),(0,n.jsx)(t.th,{children:"Recommended"})]})}),(0,n.jsxs)(t.tbody,{children:[(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.strong,{children:"Disk space free"})}),(0,n.jsx)(t.td,{children:"10\xa0GB / 9.3\xa0GiB"}),(0,n.jsx)(t.td,{children:"25\xa0GB / 23.3\xa0GiB"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.strong,{children:"Memory (RAM)"})}),(0,n.jsx)(t.td,{children:"4\xa0GB"}),(0,n.jsx)(t.td,{children:"8\xa0GB or more"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.strong,{children:"Processor (CPU)"})}),(0,n.jsx)(t.td,{children:"64-bit (x86-64) processor"}),(0,n.jsxs)(t.td,{children:[(0,n.jsx)(t.a,{href:"https://en.wikipedia.org/wiki/X86-64#Microarchitecture_levels",children:"x86-64-v2"})," 2\xa0GHz quad core"]})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.strong,{children:"System firmware"})}),(0,n.jsx)(t.td,{children:"BIOS / UEFI"}),(0,n.jsx)(t.td,{children:"UEFI"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.strong,{children:"Display Adapter (GPU)"})}),(0,n.jsx)(t.td,{children:"Any onboard or dedicated adapter"}),(0,n.jsx)(t.td,{})]})]})]}),"\n",(0,n.jsx)(t.p,{children:"These are general recommendations. Your requirements may vary based on your intended use of the system."}),"\n",(0,n.jsxs)(t.admonition,{type:"info",children:[(0,n.jsx)(t.p,{children:"Desktop environments that are more feature rich (such as GNOME and KDE Plasma) use the graphics card for 3D-acceleration, when possible. They will benefit from dedicated and more powerful GPUs. Older graphics cards may not support acceleration:"}),(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsx)(t.li,{children:"Intel prior to GMA9xx"}),"\n",(0,n.jsx)(t.li,{children:"NVIDIA prior to NV30 (GeForce FX5xxx series)"}),"\n",(0,n.jsx)(t.li,{children:"Radeon prior to R300 (Radeon 9500)"}),"\n"]})]})]})}function u(e={}){let{wrapper:t}={...(0,i.a)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(c,{...e})}):c(e)}},50065:function(e,t,r){r.d(t,{Z:function(){return o},a:function(){return d}});var s=r(67294);let n={},i=s.createContext(n);function d(e){let t=s.useContext(i);return s.useMemo(function(){return"function"==typeof e?e(t):{...t,...e}},[t,e])}function o(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:d(e.components),s.createElement(i.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/2a37c7d8.b4c6dbb5.js b/assets/js/2a37c7d8.b4c6dbb5.js new file mode 100644 index 000000000..9e05fede9 --- /dev/null +++ b/assets/js/2a37c7d8.b4c6dbb5.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([["8609"],{68854:function(e,n,s){s.r(n),s.d(n,{metadata:()=>t,contentTitle:()=>c,default:()=>a,assets:()=>l,toc:()=>o,frontMatter:()=>d});var t=JSON.parse('{"id":"user/editions/plasma/tips-and-tricks","title":"Tips and Tricks","description":"Keyboard shortcuts","source":"@site/docs/user/editions/plasma/tips-and-tricks.md","sourceDirName":"user/editions/plasma","slug":"/user/editions/plasma/tips-and-tricks","permalink":"/docs/user/editions/plasma/tips-and-tricks","draft":false,"unlisted":false,"editUrl":"https://github.com/getsolus/help-center-docs/tree/master/docs/user/editions/plasma/tips-and-tricks.md","tags":[],"version":"current","lastUpdatedAt":1733757592000,"frontMatter":{"title":"Tips and Tricks","summary":"Helpful tips and tricks for using Plasma on Solus."},"sidebar":"userSidebar","previous":{"title":"Configuration","permalink":"/docs/user/editions/plasma/configuration"},"next":{"title":"XFCE","permalink":"/docs/user/editions/xfce/"}}'),i=s("85893"),r=s("50065");let d={title:"Tips and Tricks",summary:"Helpful tips and tricks for using Plasma on Solus."},c="Tips and Tricks",l={},o=[{value:"Keyboard shortcuts",id:"keyboard-shortcuts",level:2},{value:"Using KRunner",id:"using-krunner",level:2},{value:"Dolphin",id:"dolphin",level:2},{value:"Context menu",id:"context-menu",level:2}];function h(e){let n={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",header:"header",img:"img",li:"li",p:"p",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,r.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.header,{children:(0,i.jsx)(n.h1,{id:"tips-and-tricks",children:"Tips and Tricks"})}),"\n",(0,i.jsx)(n.h2,{id:"keyboard-shortcuts",children:"Keyboard shortcuts"}),"\n",(0,i.jsx)(n.admonition,{type:"tip",children:(0,i.jsxs)(n.p,{children:["To see the complete list of keyboard shortcuts available on your system, open the ",(0,i.jsx)(n.strong,{children:(0,i.jsx)(n.a,{href:"/docs/user/editions/plasma/configuration#opening-system-settings",children:"System Settings"})})," screen, then go to ",(0,i.jsx)(n.strong,{children:"Workspace"})," > ",(0,i.jsx)(n.strong,{children:"Shortcuts"}),"."]})}),"\n",(0,i.jsx)(n.p,{children:"The following table shows some of the keyboard shortcuts available in Solus Plasma."}),"\n",(0,i.jsxs)(n.table,{children:[(0,i.jsx)(n.thead,{children:(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.th,{children:"Keyboard shortcut"}),(0,i.jsx)(n.th,{children:"Action"})]})}),(0,i.jsxs)(n.tbody,{children:[(0,i.jsxs)(n.tr,{children:[(0,i.jsxs)(n.td,{children:[(0,i.jsx)(n.code,{children:"Alt"})," + ",(0,i.jsx)(n.code,{children:"F2"})]}),(0,i.jsx)(n.td,{children:"Opens KRunner"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsxs)(n.td,{children:[(0,i.jsx)(n.code,{children:"Alt"})," + ",(0,i.jsx)(n.code,{children:"Space"})]}),(0,i.jsx)(n.td,{children:"Opens KRunner"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsxs)(n.td,{children:[(0,i.jsx)(n.code,{children:"Alt"})," + ",(0,i.jsx)(n.code,{children:"F4"})]}),(0,i.jsx)(n.td,{children:"Closes the active window on the desktop"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsxs)(n.td,{children:[(0,i.jsx)(n.code,{children:"Alt"})," + ",(0,i.jsx)(n.code,{children:"Tab"})]}),(0,i.jsx)(n.td,{children:"Opens application switcher, switch to the next application on the list"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsxs)(n.td,{children:[(0,i.jsx)(n.code,{children:"Shift"})," + ",(0,i.jsx)(n.code,{children:"Alt"})," + ",(0,i.jsx)(n.code,{children:"Tab"})]}),(0,i.jsx)(n.td,{children:"Opens application switcher, switch to previous application on the list"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"Super"})}),(0,i.jsx)(n.td,{children:"Opens the application menu"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsxs)(n.td,{children:[(0,i.jsx)(n.code,{children:"Super"})," + ",(0,i.jsx)(n.code,{children:"L"})]}),(0,i.jsx)(n.td,{children:"Locks the screen"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsxs)(n.td,{children:[(0,i.jsx)(n.code,{children:"Super"})," + ",(0,i.jsx)(n.code,{children:"D"})]}),(0,i.jsx)(n.td,{children:"Shows the desktop"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"Print"})}),(0,i.jsx)(n.td,{children:"Opens the screenshot utility (Spectacle)"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsxs)(n.td,{children:[(0,i.jsx)(n.code,{children:"Super"})," + ",(0,i.jsx)(n.code,{children:"Print"})]}),(0,i.jsx)(n.td,{children:"Captures the active window"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsxs)(n.td,{children:[(0,i.jsx)(n.code,{children:"Super"})," + ",(0,i.jsx)(n.code,{children:"Shift"})," + ",(0,i.jsx)(n.code,{children:"Print"})]}),(0,i.jsx)(n.td,{children:"Captures a rectangular region of the screen"})]})]})]}),"\n",(0,i.jsx)(n.h2,{id:"using-krunner",children:"Using KRunner"}),"\n",(0,i.jsx)(n.p,{children:"KRunner is a system-wide desktop search and launcher app available on Solus Plasma. KRunner allows you to perform a variety of actions such as launching apps, executing commands, search files and open open system settings."}),"\n",(0,i.jsxs)(n.p,{children:["Open KRunner by pressing ",(0,i.jsx)(n.code,{children:"Alt"})," + ",(0,i.jsx)(n.code,{children:"F2"})," or ",(0,i.jsx)(n.code,{children:"Alt"})," + ",(0,i.jsx)(n.code,{children:"Space"}),"."]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"KRunner interface",src:s(34029).Z+"",width:"723",height:"161"})}),"\n",(0,i.jsx)(n.p,{children:"The following table outlines the actions you can perform using KRunner."}),"\n",(0,i.jsxs)(n.table,{children:[(0,i.jsx)(n.thead,{children:(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.th,{children:"Action"}),(0,i.jsx)(n.th,{children:"Description"})]})}),(0,i.jsxs)(n.tbody,{children:[(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"Open an application"}),(0,i.jsx)(n.td,{children:"Enter the name of the application, then select the application from the list."})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"Run a command"}),(0,i.jsxs)(n.td,{children:["Enter the command you want to run and press ",(0,i.jsx)(n.code,{children:"Enter"}),"."]})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"See the man pages of a command"}),(0,i.jsxs)(n.td,{children:["Add ",(0,i.jsx)(n.code,{children:"#"})," before a command name and press enter (Example, ",(0,i.jsx)(n.code,{children:"#wget"}),")."]})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"Terminate a program"}),(0,i.jsxs)(n.td,{children:["Enter ",(0,i.jsx)(n.code,{children:"kill [application name]"})," and press ",(0,i.jsx)(n.code,{children:"Enter"})," (Example: ",(0,i.jsx)(n.code,{children:"kill firefox"}),")"]})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"Do math operations"}),(0,i.jsxs)(n.td,{children:["Enter ",(0,i.jsx)(n.code,{children:"="})," followed by the calculation you want to perform (Examples: ",(0,i.jsx)(n.code,{children:"=2*2"}),", ",(0,i.jsx)(n.code,{children:"=5!"}),", ",(0,i.jsx)(n.code,{children:"=sin(20)"}),")."]})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"Unit conversions"}),(0,i.jsxs)(n.td,{children:["Enter ",(0,i.jsx)(n.code,{children:"[measurement] to [destination unit]"})," (Examples: ",(0,i.jsx)(n.code,{children:"200 mi to km"}),")."]})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"Currency conversions"}),(0,i.jsxs)(n.td,{children:["Enter ",(0,i.jsx)(n.code,{children:"[amount] to [destination currency]"}),". You can use the ISO code or the name of the currencies to do the conversion (Examples: ",(0,i.jsx)(n.code,{children:"200 CAD to NOK"}),", ",(0,i.jsx)(n.code,{children:"50 koruna to yen"}),")."]})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"Check the time of other countries or time zones"}),(0,i.jsxs)(n.td,{children:["Enter ",(0,i.jsx)(n.code,{children:"time [country]"})," or ",(0,i.jsx)(n.code,{children:"time [time zone]"})," (Examples: ",(0,i.jsx)(n.code,{children:"time finland"}),", ",(0,i.jsx)(n.code,{children:"time gmt-1"}),")."]})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"Open files and folders"}),(0,i.jsx)(n.td,{children:"Enter the name of a file or folder, then select an entry from the list."})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"Switch between windows"}),(0,i.jsxs)(n.td,{children:["Enter the name of an open window and select an entry from the ",(0,i.jsx)(n.strong,{children:"Windows"})," list."]})]})]})]}),"\n",(0,i.jsx)(n.admonition,{type:"info",children:(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["To see a list of the currencies KRunner supports, see ",(0,i.jsx)(n.a,{href:"https://www.ecb.europa.eu/stats/policy_and_exchange_rates/euro_reference_exchange_rates/html/index.en.html",children:"https://www.ecb.europa.eu/stats/policy_and_exchange_rates/euro_reference_exchange_rates/html/index.en.html"}),"."]}),"\n",(0,i.jsxs)(n.li,{children:["Unit and currency conversions do not require the ",(0,i.jsx)(n.code,{children:"="})," symbol."]}),"\n"]})}),"\n",(0,i.jsx)(n.h2,{id:"dolphin",children:"Dolphin"}),"\n",(0,i.jsx)(n.p,{children:"Dolphin is the file manager included by default in Solus Plasma. Dolphin has multiple features, including tabs, split views, integrated terminal, and support for various file formats and protocols."}),"\n",(0,i.jsx)(n.p,{children:"The following table describes some of the keyboard shortcuts you can use in Dolphin."}),"\n",(0,i.jsxs)(n.table,{children:[(0,i.jsx)(n.thead,{children:(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.th,{children:"Action"}),(0,i.jsx)(n.th,{children:"Description"})]})}),(0,i.jsxs)(n.tbody,{children:[(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"Create a new folder"}),(0,i.jsxs)(n.td,{children:["Press ",(0,i.jsx)(n.code,{children:"F10"})," to create a new folder."]})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"Enabling dual-pane mode"}),(0,i.jsxs)(n.td,{children:["Press ",(0,i.jsx)(n.code,{children:"F3"})," to enable dual-pane mode."]})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"Open multiple tabs"}),(0,i.jsxs)(n.td,{children:["Press ",(0,i.jsx)(n.code,{children:"Ctrl"})," + ",(0,i.jsx)(n.code,{children:"T"})," to open multiple Dolphin tabs."]})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"Open a terminal window in the current location"}),(0,i.jsxs)(n.td,{children:["Press ",(0,i.jsx)(n.code,{children:"Alt"})," + ",(0,i.jsx)(n.code,{children:"Shift"})," + ",(0,i.jsx)(n.code,{children:"F4"})," to open a terminal window in the location you have open."]})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"Show/hide hidden files"}),(0,i.jsxs)(n.td,{children:["Press ",(0,i.jsx)(n.code,{children:"Ctrl"})," + ",(0,i.jsx)(n.code,{children:"H"})," to show/hide hidden files."]})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"Show/hide the side panel"}),(0,i.jsxs)(n.td,{children:["Press ",(0,i.jsx)(n.code,{children:"F9"})," to show/hide the ",(0,i.jsx)(n.strong,{children:"Places"})," side panel."]})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"Switch between the view modes"}),(0,i.jsxs)(n.td,{children:["Press ",(0,i.jsx)(n.code,{children:"Ctrl"})," + ",(0,i.jsx)(n.code,{children:"1"})," to display icons in ",(0,i.jsx)(n.em,{children:"icons"})," view, press ",(0,i.jsx)(n.code,{children:"Ctrl"})," + ",(0,i.jsx)(n.code,{children:"2"})," to display icons in ",(0,i.jsx)(n.em,{children:"compact"})," view, or press ",(0,i.jsx)(n.code,{children:"Ctrl"})," + ",(0,i.jsx)(n.code,{children:"3"})," to display icons in ",(0,i.jsx)(n.em,{children:"details"})," view;"]})]})]})]}),"\n",(0,i.jsx)(n.h2,{id:"context-menu",children:"Context menu"}),"\n",(0,i.jsxs)(n.p,{children:["The ",(0,i.jsx)(n.em,{children:"Plasma"})," desktop provides a variety of context menus. Context menus display options, settings, and actions applicable to the current context or element you select."]}),"\n",(0,i.jsx)(n.p,{children:"The following table describes some of the context menus available in Plasma."}),"\n",(0,i.jsxs)(n.table,{children:[(0,i.jsx)(n.thead,{children:(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.th,{children:"Context menu"}),(0,i.jsx)(n.th,{children:"Description"})]})}),(0,i.jsxs)(n.tbody,{children:[(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"Bottom panel settings"}),(0,i.jsx)(n.td,{children:"Right-click on an empty space of the bottom panel to open the bottom panel context menu."})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"Widget settings"}),(0,i.jsx)(n.td,{children:"Right-click on any widget in the bottom panel to open the widget context menu."})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"Desktop settings"}),(0,i.jsx)(n.td,{children:"Right-click anywhere on the desktop to open the desktop context menu."})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"File"}),(0,i.jsx)(n.td,{children:"Right-click a file to open the file context menu."})]})]})]})]})}function a(e={}){let{wrapper:n}={...(0,r.a)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(h,{...e})}):h(e)}},34029:function(e,n,s){s.d(n,{Z:function(){return t}});let t=s.p+"assets/images/krunner-03789ddf72481240bd795c70e63e2ab0.png"},50065:function(e,n,s){s.d(n,{Z:function(){return c},a:function(){return d}});var t=s(67294);let i={},r=t.createContext(i);function d(e){let n=t.useContext(r);return t.useMemo(function(){return"function"==typeof e?e(n):{...n,...e}},[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:d(e.components),t.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/2a37c7d8.f8ac206e.js b/assets/js/2a37c7d8.f8ac206e.js deleted file mode 100644 index f8d58503b..000000000 --- a/assets/js/2a37c7d8.f8ac206e.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[9995],{81754:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>l,contentTitle:()=>d,default:()=>a,frontMatter:()=>r,metadata:()=>c,toc:()=>o});var t=s(85893),i=s(11151);const r={title:"Tips and Tricks",summary:"Helpful tips and tricks for using Plasma on Solus."},d="Tips and Tricks",c={id:"user/editions/plasma/tips-and-tricks",title:"Tips and Tricks",description:"Keyboard shortcuts",source:"@site/docs/user/editions/plasma/tips-and-tricks.md",sourceDirName:"user/editions/plasma",slug:"/user/editions/plasma/tips-and-tricks",permalink:"/docs/user/editions/plasma/tips-and-tricks",draft:!1,unlisted:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/editions/plasma/tips-and-tricks.md",tags:[],version:"current",lastUpdatedAt:1732716912e3,frontMatter:{title:"Tips and Tricks",summary:"Helpful tips and tricks for using Plasma on Solus."},sidebar:"userSidebar",previous:{title:"Configuration",permalink:"/docs/user/editions/plasma/configuration"},next:{title:"XFCE",permalink:"/docs/user/editions/xfce/"}},l={},o=[{value:"Keyboard shortcuts",id:"keyboard-shortcuts",level:2},{value:"Using KRunner",id:"using-krunner",level:2},{value:"Dolphin",id:"dolphin",level:2},{value:"Context menu",id:"context-menu",level:2}];function h(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",header:"header",img:"img",li:"li",p:"p",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,i.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.header,{children:(0,t.jsx)(n.h1,{id:"tips-and-tricks",children:"Tips and Tricks"})}),"\n",(0,t.jsx)(n.h2,{id:"keyboard-shortcuts",children:"Keyboard shortcuts"}),"\n",(0,t.jsx)(n.admonition,{type:"tip",children:(0,t.jsxs)(n.p,{children:["To see the complete list of keyboard shortcuts available on your system, open the ",(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.a,{href:"/docs/user/editions/plasma/configuration#opening-system-settings",children:"System Settings"})})," screen, then go to ",(0,t.jsx)(n.strong,{children:"Workspace"})," > ",(0,t.jsx)(n.strong,{children:"Shortcuts"}),"."]})}),"\n",(0,t.jsx)(n.p,{children:"The following table shows some of the keyboard shortcuts available in Solus Plasma."}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Keyboard shortcut"}),(0,t.jsx)(n.th,{children:"Action"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsxs)(n.td,{children:[(0,t.jsx)(n.code,{children:"Alt"})," + ",(0,t.jsx)(n.code,{children:"F2"})]}),(0,t.jsx)(n.td,{children:"Opens KRunner"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsxs)(n.td,{children:[(0,t.jsx)(n.code,{children:"Alt"})," + ",(0,t.jsx)(n.code,{children:"Space"})]}),(0,t.jsx)(n.td,{children:"Opens KRunner"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsxs)(n.td,{children:[(0,t.jsx)(n.code,{children:"Alt"})," + ",(0,t.jsx)(n.code,{children:"F4"})]}),(0,t.jsx)(n.td,{children:"Closes the active window on the desktop"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsxs)(n.td,{children:[(0,t.jsx)(n.code,{children:"Alt"})," + ",(0,t.jsx)(n.code,{children:"Tab"})]}),(0,t.jsx)(n.td,{children:"Opens application switcher, switch to the next application on the list"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsxs)(n.td,{children:[(0,t.jsx)(n.code,{children:"Shift"})," + ",(0,t.jsx)(n.code,{children:"Alt"})," + ",(0,t.jsx)(n.code,{children:"Tab"})]}),(0,t.jsx)(n.td,{children:"Opens application switcher, switch to previous application on the list"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"Super"})}),(0,t.jsx)(n.td,{children:"Opens the application menu"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsxs)(n.td,{children:[(0,t.jsx)(n.code,{children:"Super"})," + ",(0,t.jsx)(n.code,{children:"L"})]}),(0,t.jsx)(n.td,{children:"Locks the screen"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsxs)(n.td,{children:[(0,t.jsx)(n.code,{children:"Super"})," + ",(0,t.jsx)(n.code,{children:"D"})]}),(0,t.jsx)(n.td,{children:"Shows the desktop"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"Print"})}),(0,t.jsx)(n.td,{children:"Opens the screenshot utility (Spectacle)"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsxs)(n.td,{children:[(0,t.jsx)(n.code,{children:"Super"})," + ",(0,t.jsx)(n.code,{children:"Print"})]}),(0,t.jsx)(n.td,{children:"Captures the active window"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsxs)(n.td,{children:[(0,t.jsx)(n.code,{children:"Super"})," + ",(0,t.jsx)(n.code,{children:"Shift"})," + ",(0,t.jsx)(n.code,{children:"Print"})]}),(0,t.jsx)(n.td,{children:"Captures a rectangular region of the screen"})]})]})]}),"\n",(0,t.jsx)(n.h2,{id:"using-krunner",children:"Using KRunner"}),"\n",(0,t.jsx)(n.p,{children:"KRunner is a system-wide desktop search and launcher app available on Solus Plasma. KRunner allows you to perform a variety of actions such as launching apps, executing commands, search files and open open system settings."}),"\n",(0,t.jsxs)(n.p,{children:["Open KRunner by pressing ",(0,t.jsx)(n.code,{children:"Alt"})," + ",(0,t.jsx)(n.code,{children:"F2"})," or ",(0,t.jsx)(n.code,{children:"Alt"})," + ",(0,t.jsx)(n.code,{children:"Space"}),"."]}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"KRunner interface",src:s(71242).Z+"",width:"723",height:"161"})}),"\n",(0,t.jsx)(n.p,{children:"The following table outlines the actions you can perform using KRunner."}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Action"}),(0,t.jsx)(n.th,{children:"Description"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"Open an application"}),(0,t.jsx)(n.td,{children:"Enter the name of the application, then select the application from the list."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"Run a command"}),(0,t.jsxs)(n.td,{children:["Enter the command you want to run and press ",(0,t.jsx)(n.code,{children:"Enter"}),"."]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"See the man pages of a command"}),(0,t.jsxs)(n.td,{children:["Add ",(0,t.jsx)(n.code,{children:"#"})," before a command name and press enter (Example, ",(0,t.jsx)(n.code,{children:"#wget"}),")."]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"Terminate a program"}),(0,t.jsxs)(n.td,{children:["Enter ",(0,t.jsx)(n.code,{children:"kill [application name]"})," and press ",(0,t.jsx)(n.code,{children:"Enter"})," (Example: ",(0,t.jsx)(n.code,{children:"kill firefox"}),")"]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"Do math operations"}),(0,t.jsxs)(n.td,{children:["Enter ",(0,t.jsx)(n.code,{children:"="})," followed by the calculation you want to perform (Examples: ",(0,t.jsx)(n.code,{children:"=2*2"}),", ",(0,t.jsx)(n.code,{children:"=5!"}),", ",(0,t.jsx)(n.code,{children:"=sin(20)"}),")."]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"Unit conversions"}),(0,t.jsxs)(n.td,{children:["Enter ",(0,t.jsx)(n.code,{children:"[measurement] to [destination unit]"})," (Examples: ",(0,t.jsx)(n.code,{children:"200 mi to km"}),")."]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"Currency conversions"}),(0,t.jsxs)(n.td,{children:["Enter ",(0,t.jsx)(n.code,{children:"[amount] to [destination currency]"}),". You can use the ISO code or the name of the currencies to do the conversion (Examples: ",(0,t.jsx)(n.code,{children:"200 CAD to NOK"}),", ",(0,t.jsx)(n.code,{children:"50 koruna to yen"}),")."]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"Check the time of other countries or time zones"}),(0,t.jsxs)(n.td,{children:["Enter ",(0,t.jsx)(n.code,{children:"time [country]"})," or ",(0,t.jsx)(n.code,{children:"time [time zone]"})," (Examples: ",(0,t.jsx)(n.code,{children:"time finland"}),", ",(0,t.jsx)(n.code,{children:"time gmt-1"}),")."]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"Open files and folders"}),(0,t.jsx)(n.td,{children:"Enter the name of a file or folder, then select an entry from the list."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"Switch between windows"}),(0,t.jsxs)(n.td,{children:["Enter the name of an open window and select an entry from the ",(0,t.jsx)(n.strong,{children:"Windows"})," list."]})]})]})]}),"\n",(0,t.jsx)(n.admonition,{type:"info",children:(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["To see a list of the currencies KRunner supports, see ",(0,t.jsx)(n.a,{href:"https://www.ecb.europa.eu/stats/policy_and_exchange_rates/euro_reference_exchange_rates/html/index.en.html",children:"https://www.ecb.europa.eu/stats/policy_and_exchange_rates/euro_reference_exchange_rates/html/index.en.html"}),"."]}),"\n",(0,t.jsxs)(n.li,{children:["Unit and currency conversions do not require the ",(0,t.jsx)(n.code,{children:"="})," symbol."]}),"\n"]})}),"\n",(0,t.jsx)(n.h2,{id:"dolphin",children:"Dolphin"}),"\n",(0,t.jsx)(n.p,{children:"Dolphin is the file manager included by default in Solus Plasma. Dolphin has multiple features, including tabs, split views, integrated terminal, and support for various file formats and protocols."}),"\n",(0,t.jsx)(n.p,{children:"The following table describes some of the keyboard shortcuts you can use in Dolphin."}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Action"}),(0,t.jsx)(n.th,{children:"Description"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"Create a new folder"}),(0,t.jsxs)(n.td,{children:["Press ",(0,t.jsx)(n.code,{children:"F10"})," to create a new folder."]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"Enabling dual-pane mode"}),(0,t.jsxs)(n.td,{children:["Press ",(0,t.jsx)(n.code,{children:"F3"})," to enable dual-pane mode."]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"Open multiple tabs"}),(0,t.jsxs)(n.td,{children:["Press ",(0,t.jsx)(n.code,{children:"Ctrl"})," + ",(0,t.jsx)(n.code,{children:"T"})," to open multiple Dolphin tabs."]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"Open a terminal window in the current location"}),(0,t.jsxs)(n.td,{children:["Press ",(0,t.jsx)(n.code,{children:"Alt"})," + ",(0,t.jsx)(n.code,{children:"Shift"})," + ",(0,t.jsx)(n.code,{children:"F4"})," to open a terminal window in the location you have open."]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"Show/hide hidden files"}),(0,t.jsxs)(n.td,{children:["Press ",(0,t.jsx)(n.code,{children:"Ctrl"})," + ",(0,t.jsx)(n.code,{children:"H"})," to show/hide hidden files."]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"Show/hide the side panel"}),(0,t.jsxs)(n.td,{children:["Press ",(0,t.jsx)(n.code,{children:"F9"})," to show/hide the ",(0,t.jsx)(n.strong,{children:"Places"})," side panel."]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"Switch between the view modes"}),(0,t.jsxs)(n.td,{children:["Press ",(0,t.jsx)(n.code,{children:"Ctrl"})," + ",(0,t.jsx)(n.code,{children:"1"})," to display icons in ",(0,t.jsx)(n.em,{children:"icons"})," view, press ",(0,t.jsx)(n.code,{children:"Ctrl"})," + ",(0,t.jsx)(n.code,{children:"2"})," to display icons in ",(0,t.jsx)(n.em,{children:"compact"})," view, or press ",(0,t.jsx)(n.code,{children:"Ctrl"})," + ",(0,t.jsx)(n.code,{children:"3"})," to display icons in ",(0,t.jsx)(n.em,{children:"details"})," view;"]})]})]})]}),"\n",(0,t.jsx)(n.h2,{id:"context-menu",children:"Context menu"}),"\n",(0,t.jsxs)(n.p,{children:["The ",(0,t.jsx)(n.em,{children:"Plasma"})," desktop provides a variety of context menus. Context menus display options, settings, and actions applicable to the current context or element you select."]}),"\n",(0,t.jsx)(n.p,{children:"The following table describes some of the context menus available in Plasma."}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Context menu"}),(0,t.jsx)(n.th,{children:"Description"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"Bottom panel settings"}),(0,t.jsx)(n.td,{children:"Right-click on an empty space of the bottom panel to open the bottom panel context menu."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"Widget settings"}),(0,t.jsx)(n.td,{children:"Right-click on any widget in the bottom panel to open the widget context menu."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"Desktop settings"}),(0,t.jsx)(n.td,{children:"Right-click anywhere on the desktop to open the desktop context menu."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"File"}),(0,t.jsx)(n.td,{children:"Right-click a file to open the file context menu."})]})]})]})]})}function a(e={}){const{wrapper:n}={...(0,i.a)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(h,{...e})}):h(e)}},71242:(e,n,s)=>{s.d(n,{Z:()=>t});const t=s.p+"assets/images/krunner-03789ddf72481240bd795c70e63e2ab0.png"},11151:(e,n,s)=>{s.d(n,{Z:()=>c,a:()=>d});var t=s(67294);const i={},r=t.createContext(i);function d(e){const n=t.useContext(r);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:d(e.components),t.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/2a9c4f4d.20c74296.js b/assets/js/2a9c4f4d.20c74296.js deleted file mode 100644 index 0886af50b..000000000 --- a/assets/js/2a9c4f4d.20c74296.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[9474],{75994:e=>{e.exports=JSON.parse('{"tag":{"label":"clang","permalink":"/blog/tags/clang","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/clang","page":1,"postsPerPage":1,"totalPages":1,"totalCount":1,"blogDescription":"The Solus Development (b)log!","blogTitle":"Solus DevLog"}}')}}]); \ No newline at end of file diff --git a/assets/js/2a9c4f4d.71209c15.js b/assets/js/2a9c4f4d.71209c15.js new file mode 100644 index 000000000..12b2d3352 --- /dev/null +++ b/assets/js/2a9c4f4d.71209c15.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([["6961"],{91902:function(e){e.exports=JSON.parse('{"tag":{"label":"clang","permalink":"/blog/tags/clang","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/clang","page":1,"postsPerPage":1,"totalPages":1,"totalCount":1,"blogDescription":"The Solus Development (b)log!","blogTitle":"Solus DevLog"}}')}}]); \ No newline at end of file diff --git a/assets/js/2b4abe09.3b9f5715.js b/assets/js/2b4abe09.3b9f5715.js deleted file mode 100644 index 8315f2f84..000000000 --- a/assets/js/2b4abe09.3b9f5715.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[2413],{45427:(e,o,t)=>{t.r(o),t.d(o,{assets:()=>l,contentTitle:()=>r,default:()=>d,frontMatter:()=>i,metadata:()=>a,toc:()=>h});var s=t(85893),n=t(11151);const i={title:"Troubleshooting",summary:"Basic troubleshooting for some of the most common Solus problems."},r="Troubleshooting Common Issues",a={id:"user/troubleshooting/index",title:"Troubleshooting",description:"This guide provides some basic troubleshooting instructions for when you have an issue in Solus. Before reporting bugs, it is important to check that your Solus installation is not missing files, or suffering from a corrupted disk. You should also ensure your system is fully up to date as the bug may have already been fixed.",source:"@site/docs/user/troubleshooting/index.md",sourceDirName:"user/troubleshooting",slug:"/user/troubleshooting/",permalink:"/docs/user/troubleshooting/",draft:!1,unlisted:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/troubleshooting/index.md",tags:[],version:"current",lastUpdatedAt:1732716912e3,frontMatter:{title:"Troubleshooting",summary:"Basic troubleshooting for some of the most common Solus problems."},sidebar:"userSidebar",previous:{title:"Open Broadcaster Software (OBS)",permalink:"/docs/user/software/web/obs"},next:{title:"Boot Rescue",permalink:"/docs/user/troubleshooting/boot-rescue"}},l={},h=[{value:"Issues with Software Center or eopkg",id:"issues-with-software-center-or-eopkg",level:2},{value:"Can't install updates",id:"cant-install-updates",level:3},{value:"eopkg check shows broken packages",id:"eopkg-check-shows-broken-packages",level:3},{value:"Updated system and having issues",id:"updated-system-and-having-issues",level:2},{value:"Broken UI with Chromium applications",id:"broken-ui-with-chromium-applications",level:3},{value:"Boot into previous kernel",id:"boot-into-previous-kernel",level:3},{value:"Reverting updates",id:"reverting-updates",level:3},{value:"Boot failure",id:"boot-failure",level:2},{value:"Display manager won't start",id:"display-manager-wont-start",level:3},{value:"No Solus boot loader",id:"no-solus-boot-loader",level:3},{value:"Long boot time",id:"long-boot-time",level:2},{value:"Timeout on partition mount (90s)",id:"timeout-on-partition-mount-90s",level:3}];function c(e){const o={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",p:"p",pre:"pre",ul:"ul",...(0,n.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(o.header,{children:(0,s.jsx)(o.h1,{id:"troubleshooting-common-issues",children:"Troubleshooting Common Issues"})}),"\n",(0,s.jsx)(o.p,{children:"This guide provides some basic troubleshooting instructions for when you have an issue in Solus. Before reporting bugs, it is important to check that your Solus installation is not missing files, or suffering from a corrupted disk. You should also ensure your system is fully up to date as the bug may have already been fixed."}),"\n",(0,s.jsxs)(o.p,{children:["First, perform a full system update on command line with ",(0,s.jsx)(o.code,{children:"sudo eopkg up"})," (or using the Software Center)."]}),"\n",(0,s.jsx)(o.p,{children:"Next, validate that packages are installed correctly and aren't missing files. Run this once, it will take some time. If there are no broken packages on your system, there will be no output. Otherwise, you will see packages be reinstalled."}),"\n",(0,s.jsx)(o.pre,{children:(0,s.jsx)(o.code,{className:"language-bash",children:"sudo eopkg check | grep Broken | awk '{print $4}' | xargs -r sudo eopkg it --reinstall\n"})}),"\n",(0,s.jsx)(o.p,{children:"Reboot the system and see if the issue is resolved."}),"\n",(0,s.jsx)(o.h2,{id:"issues-with-software-center-or-eopkg",children:"Issues with Software Center or eopkg"}),"\n",(0,s.jsx)(o.h3,{id:"cant-install-updates",children:"Can't install updates"}),"\n",(0,s.jsx)(o.p,{children:"If eopkg is interrupted, the database may become corrupted. When updating you will see a message similar to:"}),"\n",(0,s.jsx)(o.p,{children:(0,s.jsx)(o.code,{children:"30973, 'BDB0087 DB_RUNRECOVERY: Fatal error, run database recovery - BDB0061 PANIC: Invalid argument'"})}),"\n",(0,s.jsxs)(o.p,{children:["To run database recovery, run ",(0,s.jsx)(o.code,{children:"sudo eopkg rdb"})," in the terminal and then updates should function correctly."]}),"\n",(0,s.jsxs)(o.h3,{id:"eopkg-check-shows-broken-packages",children:[(0,s.jsx)(o.code,{children:"eopkg check"})," shows broken packages"]}),"\n",(0,s.jsxs)(o.p,{children:[(0,s.jsx)(o.code,{children:"eopkg check"})," checks the sha256 checksums of files on disk versus what was originally installed by the original ",(0,s.jsx)(o.code,{children:".eopkg"})," file. In some cases (for example ",(0,s.jsx)(o.code,{children:".pyc"})," files), these files will be modified in the normal operation of Solus. If after reinstalling a package it remains broken, then it's likely nothing to worry about (there are no exceptions made in ",(0,s.jsx)(o.code,{children:"eopkg check"})," for files that are expected to change from use). When reinstalling broken packages, (per above) it only needs to be run once."]}),"\n",(0,s.jsx)(o.h2,{id:"updated-system-and-having-issues",children:"Updated system and having issues"}),"\n",(0,s.jsx)(o.h3,{id:"broken-ui-with-chromium-applications",children:"Broken UI with Chromium applications"}),"\n",(0,s.jsxs)(o.p,{children:["There is an ",(0,s.jsx)(o.a,{href:"https://issues.chromium.org/issues/40267041",children:"upstream bug"})," with Chromium that causes it to try to use an invalid shader cache instead of rebuilding it, crashing the GPU process. The issue is now fixed in Chromium, but it may take some time for applications to update their Chromium version."]}),"\n",(0,s.jsx)(o.p,{children:"To fix applications exhibiting this problem, run these commands to remove the shader cache:"}),"\n",(0,s.jsx)(o.pre,{children:(0,s.jsx)(o.code,{className:"language-bash",children:"find ~/.cache -name GPUCache -exec rm -rv {} +\nfind ~/.config -name GPUCache -exec rm -rv {} +\n"})}),"\n",(0,s.jsx)(o.p,{children:"And restart the application."}),"\n",(0,s.jsx)(o.h3,{id:"boot-into-previous-kernel",children:"Boot into previous kernel"}),"\n",(0,s.jsxs)(o.p,{children:[(0,s.jsx)(o.code,{children:"clr-boot-manager"})," by default retains the latest installed kernel, plus the currently running kernel. This means that when you receive a kernel update, there are two kernels to boot into. Sometimes there are regressions that occur in the kernel, so you are able to boot into the previous kernel if the update has caused any hardware issues (for example failing to suspend when it worked previously). When booting via EFI, the boot menu can be shown by hitting space (repeatedly) during boot."]}),"\n",(0,s.jsx)(o.h3,{id:"reverting-updates",children:"Reverting updates"}),"\n",(0,s.jsxs)(o.p,{children:["If booting into the previous kernel doesn't solve the issue, there may be an issue with the package updates. It is possible to ",(0,s.jsx)(o.a,{href:"/docs/user/package-management/history-and-rollback",children:"revert the updates"})," (this would also confirm that the issue is in the selected updates)."]}),"\n",(0,s.jsx)(o.h2,{id:"boot-failure",children:"Boot failure"}),"\n",(0,s.jsxs)(o.p,{children:["If Solus partially boots, you can generally get to a TTY using ",(0,s.jsx)(o.code,{children:"Ctrl+Alt+F2"})," to login and be able to run commands just like using a terminal. This enables you to run some commands to identify or resolve the issue."]}),"\n",(0,s.jsx)(o.h3,{id:"display-manager-wont-start",children:"Display manager won't start"}),"\n",(0,s.jsx)(o.p,{children:"A common cause of not being able to boot is due to installing the NVIDIA drivers, but not booting into the latest kernel (the only kernel which has the drivers installed). Also ensure you have the correct driver version installed for your kernel. You can check if you have booted into the latest kernel by comparing the installed package with the booted kernel (instructions for both kernels)"}),"\n",(0,s.jsx)(o.pre,{children:(0,s.jsx)(o.code,{className:"language-bash",children:"eopkg info linux-lts | head -n2; uname -a\n"})}),"\n",(0,s.jsx)(o.pre,{children:(0,s.jsx)(o.code,{className:"language-bash",children:"eopkg info linux-current | head -n2; uname -a\n"})}),"\n",(0,s.jsx)(o.p,{children:"If the kernel version and release don't match from lines 2 and 3 of the output, then you aren't booting into the latest kernel and this is the likely cause of X not loading (particularly if you just installed the drivers). A couple of common reasons are:"}),"\n",(0,s.jsxs)(o.ul,{children:["\n",(0,s.jsxs)(o.li,{children:["\n",(0,s.jsxs)(o.p,{children:["On a GRUB machine, a common cause for not booting the latest kernel is due to Solus not being the boot loader on the MBR. Make sure you are booting via the Solus boot loader (if possible), or update GRUB on the distro that own the boot loader, see ",(0,s.jsx)(o.a,{href:"/docs/user/troubleshooting/installation#legacybios-installation",children:"Legacy/BIOS installation"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(o.li,{children:["\n",(0,s.jsxs)(o.p,{children:["Another possibility is that the ",(0,s.jsx)(o.code,{children:"ESP"})," has run out of space so the kernel cannot be copied over to it. You can debug why this isn't happening via ",(0,s.jsx)(o.code,{children:"sudo CBM_DEBUG=1 clr-boot-manager update"}),". This will output all information on the process, where it may be failing, or that it is working correctly."]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(o.p,{children:["If these two steps fail, you can't revert the installation of the drivers via ",(0,s.jsx)(o.a,{href:"/docs/user/package-management/history-and-rollback",children:"History and Rollback"})]}),"\n",(0,s.jsx)(o.h3,{id:"no-solus-boot-loader",children:"No Solus boot loader"}),"\n",(0,s.jsxs)(o.p,{children:["If the Solus boot loader is not functioning (this has been known to be broken by the odd update of a certain OS), the boot loader can be recreated via ",(0,s.jsx)(o.a,{href:"/docs/user/troubleshooting/boot-rescue",children:"Boot Rescue"})]}),"\n",(0,s.jsx)(o.h2,{id:"long-boot-time",children:"Long boot time"}),"\n",(0,s.jsx)(o.p,{children:"There are a number of factors that can contribute to a long boot time. The boot up messages can be viewed to look for any timeouts by looking at the timestamped journal."}),"\n",(0,s.jsx)(o.pre,{children:(0,s.jsx)(o.code,{className:"language-bash",children:"sudo journalctl -b\n"})}),"\n",(0,s.jsxs)(o.p,{children:["Notable commands to check the boot time are: ",(0,s.jsx)(o.code,{children:"systemd-analyze"})," (note that the firmware time is prior to Solus boot, so outside of our control) and ",(0,s.jsx)(o.code,{children:"systemd-analyze critical-chain"}),"."]}),"\n",(0,s.jsx)(o.h3,{id:"timeout-on-partition-mount-90s",children:"Timeout on partition mount (90s)"}),"\n",(0,s.jsxs)(o.p,{children:["If information about a device changes (UUID or mount path ",(0,s.jsx)(o.code,{children:"/dev/sda"}),"), this can cause ",(0,s.jsx)(o.code,{children:"systemd"})," to time out for 90 seconds creating a long boot process. Most frequently this happens with the swap file which can be shared across distros. Most of the devices mounted on boot will appear in ",(0,s.jsx)(o.code,{children:"/etc/fstab"})," or be a parameter in a file where configuring resume ",(0,s.jsx)(o.code,{children:"cat /etc/kernel/cmdline.d/*"}),"."]}),"\n",(0,s.jsxs)(o.p,{children:[(0,s.jsx)(o.code,{children:"cat /proc/cmdline"})," will show what parameters the kernel has booted with."]}),"\n",(0,s.jsxs)(o.p,{children:["If the devices don't match up with what's listed in ",(0,s.jsx)(o.code,{children:"ls /dev/disk/*/*"})," then it will cause a 90s timeout while it waits to see if it can be found. To fix this, you will need to remove the reference to the UUID or device path that no longer exists, or correct it to the new UUID label."]})]})}function d(e={}){const{wrapper:o}={...(0,n.a)(),...e.components};return o?(0,s.jsx)(o,{...e,children:(0,s.jsx)(c,{...e})}):c(e)}},11151:(e,o,t)=>{t.d(o,{Z:()=>a,a:()=>r});var s=t(67294);const n={},i=s.createContext(n);function r(e){const o=s.useContext(i);return s.useMemo((function(){return"function"==typeof e?e(o):{...o,...e}}),[o,e])}function a(e){let o;return o=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:r(e.components),s.createElement(i.Provider,{value:o},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/2b4abe09.e29d0b47.js b/assets/js/2b4abe09.e29d0b47.js new file mode 100644 index 000000000..2394593bc --- /dev/null +++ b/assets/js/2b4abe09.e29d0b47.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([["3560"],{20587:function(e,o,t){t.r(o),t.d(o,{metadata:()=>s,contentTitle:()=>a,default:()=>d,assets:()=>l,toc:()=>h,frontMatter:()=>r});var s=JSON.parse('{"id":"user/troubleshooting/index","title":"Troubleshooting","description":"This guide provides some basic troubleshooting instructions for when you have an issue in Solus. Before reporting bugs, it is important to check that your Solus installation is not missing files, or suffering from a corrupted disk. You should also ensure your system is fully up to date as the bug may have already been fixed.","source":"@site/docs/user/troubleshooting/index.md","sourceDirName":"user/troubleshooting","slug":"/user/troubleshooting/","permalink":"/docs/user/troubleshooting/","draft":false,"unlisted":false,"editUrl":"https://github.com/getsolus/help-center-docs/tree/master/docs/user/troubleshooting/index.md","tags":[],"version":"current","lastUpdatedAt":1733757592000,"frontMatter":{"title":"Troubleshooting","summary":"Basic troubleshooting for some of the most common Solus problems."},"sidebar":"userSidebar","previous":{"title":"Open Broadcaster Software (OBS)","permalink":"/docs/user/software/web/obs"},"next":{"title":"Boot Rescue","permalink":"/docs/user/troubleshooting/boot-rescue"}}'),n=t("85893"),i=t("50065");let r={title:"Troubleshooting",summary:"Basic troubleshooting for some of the most common Solus problems."},a="Troubleshooting Common Issues",l={},h=[{value:"Issues with Software Center or eopkg",id:"issues-with-software-center-or-eopkg",level:2},{value:"Can't install updates",id:"cant-install-updates",level:3},{value:"eopkg check shows broken packages",id:"eopkg-check-shows-broken-packages",level:3},{value:"Updated system and having issues",id:"updated-system-and-having-issues",level:2},{value:"Broken UI with Chromium applications",id:"broken-ui-with-chromium-applications",level:3},{value:"Boot into previous kernel",id:"boot-into-previous-kernel",level:3},{value:"Reverting updates",id:"reverting-updates",level:3},{value:"Boot failure",id:"boot-failure",level:2},{value:"Display manager won't start",id:"display-manager-wont-start",level:3},{value:"No Solus boot loader",id:"no-solus-boot-loader",level:3},{value:"Long boot time",id:"long-boot-time",level:2},{value:"Timeout on partition mount (90s)",id:"timeout-on-partition-mount-90s",level:3}];function c(e){let o={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",p:"p",pre:"pre",ul:"ul",...(0,i.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(o.header,{children:(0,n.jsx)(o.h1,{id:"troubleshooting-common-issues",children:"Troubleshooting Common Issues"})}),"\n",(0,n.jsx)(o.p,{children:"This guide provides some basic troubleshooting instructions for when you have an issue in Solus. Before reporting bugs, it is important to check that your Solus installation is not missing files, or suffering from a corrupted disk. You should also ensure your system is fully up to date as the bug may have already been fixed."}),"\n",(0,n.jsxs)(o.p,{children:["First, perform a full system update on command line with ",(0,n.jsx)(o.code,{children:"sudo eopkg up"})," (or using the Software Center)."]}),"\n",(0,n.jsx)(o.p,{children:"Next, validate that packages are installed correctly and aren't missing files. Run this once, it will take some time. If there are no broken packages on your system, there will be no output. Otherwise, you will see packages be reinstalled."}),"\n",(0,n.jsx)(o.pre,{children:(0,n.jsx)(o.code,{className:"language-bash",children:"sudo eopkg check | grep Broken | awk '{print $4}' | xargs -r sudo eopkg it --reinstall\n"})}),"\n",(0,n.jsx)(o.p,{children:"Reboot the system and see if the issue is resolved."}),"\n",(0,n.jsx)(o.h2,{id:"issues-with-software-center-or-eopkg",children:"Issues with Software Center or eopkg"}),"\n",(0,n.jsx)(o.h3,{id:"cant-install-updates",children:"Can't install updates"}),"\n",(0,n.jsx)(o.p,{children:"If eopkg is interrupted, the database may become corrupted. When updating you will see a message similar to:"}),"\n",(0,n.jsx)(o.p,{children:(0,n.jsx)(o.code,{children:"30973, 'BDB0087 DB_RUNRECOVERY: Fatal error, run database recovery - BDB0061 PANIC: Invalid argument'"})}),"\n",(0,n.jsxs)(o.p,{children:["To run database recovery, run ",(0,n.jsx)(o.code,{children:"sudo eopkg rdb"})," in the terminal and then updates should function correctly."]}),"\n",(0,n.jsxs)(o.h3,{id:"eopkg-check-shows-broken-packages",children:[(0,n.jsx)(o.code,{children:"eopkg check"})," shows broken packages"]}),"\n",(0,n.jsxs)(o.p,{children:[(0,n.jsx)(o.code,{children:"eopkg check"})," checks the sha256 checksums of files on disk versus what was originally installed by the original ",(0,n.jsx)(o.code,{children:".eopkg"})," file. In some cases (for example ",(0,n.jsx)(o.code,{children:".pyc"})," files), these files will be modified in the normal operation of Solus. If after reinstalling a package it remains broken, then it's likely nothing to worry about (there are no exceptions made in ",(0,n.jsx)(o.code,{children:"eopkg check"})," for files that are expected to change from use). When reinstalling broken packages, (per above) it only needs to be run once."]}),"\n",(0,n.jsx)(o.h2,{id:"updated-system-and-having-issues",children:"Updated system and having issues"}),"\n",(0,n.jsx)(o.h3,{id:"broken-ui-with-chromium-applications",children:"Broken UI with Chromium applications"}),"\n",(0,n.jsxs)(o.p,{children:["There is an ",(0,n.jsx)(o.a,{href:"https://issues.chromium.org/issues/40267041",children:"upstream bug"})," with Chromium that causes it to try to use an invalid shader cache instead of rebuilding it, crashing the GPU process. The issue is now fixed in Chromium, but it may take some time for applications to update their Chromium version."]}),"\n",(0,n.jsx)(o.p,{children:"To fix applications exhibiting this problem, run these commands to remove the shader cache:"}),"\n",(0,n.jsx)(o.pre,{children:(0,n.jsx)(o.code,{className:"language-bash",children:"find ~/.cache -name GPUCache -exec rm -rv {} +\nfind ~/.config -name GPUCache -exec rm -rv {} +\n"})}),"\n",(0,n.jsx)(o.p,{children:"And restart the application."}),"\n",(0,n.jsx)(o.h3,{id:"boot-into-previous-kernel",children:"Boot into previous kernel"}),"\n",(0,n.jsxs)(o.p,{children:[(0,n.jsx)(o.code,{children:"clr-boot-manager"})," by default retains the latest installed kernel, plus the currently running kernel. This means that when you receive a kernel update, there are two kernels to boot into. Sometimes there are regressions that occur in the kernel, so you are able to boot into the previous kernel if the update has caused any hardware issues (for example failing to suspend when it worked previously). When booting via EFI, the boot menu can be shown by hitting space (repeatedly) during boot."]}),"\n",(0,n.jsx)(o.h3,{id:"reverting-updates",children:"Reverting updates"}),"\n",(0,n.jsxs)(o.p,{children:["If booting into the previous kernel doesn't solve the issue, there may be an issue with the package updates. It is possible to ",(0,n.jsx)(o.a,{href:"/docs/user/package-management/history-and-rollback",children:"revert the updates"})," (this would also confirm that the issue is in the selected updates)."]}),"\n",(0,n.jsx)(o.h2,{id:"boot-failure",children:"Boot failure"}),"\n",(0,n.jsxs)(o.p,{children:["If Solus partially boots, you can generally get to a TTY using ",(0,n.jsx)(o.code,{children:"Ctrl+Alt+F2"})," to login and be able to run commands just like using a terminal. This enables you to run some commands to identify or resolve the issue."]}),"\n",(0,n.jsx)(o.h3,{id:"display-manager-wont-start",children:"Display manager won't start"}),"\n",(0,n.jsx)(o.p,{children:"A common cause of not being able to boot is due to installing the NVIDIA drivers, but not booting into the latest kernel (the only kernel which has the drivers installed). Also ensure you have the correct driver version installed for your kernel. You can check if you have booted into the latest kernel by comparing the installed package with the booted kernel (instructions for both kernels)"}),"\n",(0,n.jsx)(o.pre,{children:(0,n.jsx)(o.code,{className:"language-bash",children:"eopkg info linux-lts | head -n2; uname -a\n"})}),"\n",(0,n.jsx)(o.pre,{children:(0,n.jsx)(o.code,{className:"language-bash",children:"eopkg info linux-current | head -n2; uname -a\n"})}),"\n",(0,n.jsx)(o.p,{children:"If the kernel version and release don't match from lines 2 and 3 of the output, then you aren't booting into the latest kernel and this is the likely cause of X not loading (particularly if you just installed the drivers). A couple of common reasons are:"}),"\n",(0,n.jsxs)(o.ul,{children:["\n",(0,n.jsxs)(o.li,{children:["\n",(0,n.jsxs)(o.p,{children:["On a GRUB machine, a common cause for not booting the latest kernel is due to Solus not being the boot loader on the MBR. Make sure you are booting via the Solus boot loader (if possible), or update GRUB on the distro that own the boot loader, see ",(0,n.jsx)(o.a,{href:"/docs/user/troubleshooting/installation#legacybios-installation",children:"Legacy/BIOS installation"}),"."]}),"\n"]}),"\n",(0,n.jsxs)(o.li,{children:["\n",(0,n.jsxs)(o.p,{children:["Another possibility is that the ",(0,n.jsx)(o.code,{children:"ESP"})," has run out of space so the kernel cannot be copied over to it. You can debug why this isn't happening via ",(0,n.jsx)(o.code,{children:"sudo CBM_DEBUG=1 clr-boot-manager update"}),". This will output all information on the process, where it may be failing, or that it is working correctly."]}),"\n"]}),"\n"]}),"\n",(0,n.jsxs)(o.p,{children:["If these two steps fail, you can't revert the installation of the drivers via ",(0,n.jsx)(o.a,{href:"/docs/user/package-management/history-and-rollback",children:"History and Rollback"})]}),"\n",(0,n.jsx)(o.h3,{id:"no-solus-boot-loader",children:"No Solus boot loader"}),"\n",(0,n.jsxs)(o.p,{children:["If the Solus boot loader is not functioning (this has been known to be broken by the odd update of a certain OS), the boot loader can be recreated via ",(0,n.jsx)(o.a,{href:"/docs/user/troubleshooting/boot-rescue",children:"Boot Rescue"})]}),"\n",(0,n.jsx)(o.h2,{id:"long-boot-time",children:"Long boot time"}),"\n",(0,n.jsx)(o.p,{children:"There are a number of factors that can contribute to a long boot time. The boot up messages can be viewed to look for any timeouts by looking at the timestamped journal."}),"\n",(0,n.jsx)(o.pre,{children:(0,n.jsx)(o.code,{className:"language-bash",children:"sudo journalctl -b\n"})}),"\n",(0,n.jsxs)(o.p,{children:["Notable commands to check the boot time are: ",(0,n.jsx)(o.code,{children:"systemd-analyze"})," (note that the firmware time is prior to Solus boot, so outside of our control) and ",(0,n.jsx)(o.code,{children:"systemd-analyze critical-chain"}),"."]}),"\n",(0,n.jsx)(o.h3,{id:"timeout-on-partition-mount-90s",children:"Timeout on partition mount (90s)"}),"\n",(0,n.jsxs)(o.p,{children:["If information about a device changes (UUID or mount path ",(0,n.jsx)(o.code,{children:"/dev/sda"}),"), this can cause ",(0,n.jsx)(o.code,{children:"systemd"})," to time out for 90 seconds creating a long boot process. Most frequently this happens with the swap file which can be shared across distros. Most of the devices mounted on boot will appear in ",(0,n.jsx)(o.code,{children:"/etc/fstab"})," or be a parameter in a file where configuring resume ",(0,n.jsx)(o.code,{children:"cat /etc/kernel/cmdline.d/*"}),"."]}),"\n",(0,n.jsxs)(o.p,{children:[(0,n.jsx)(o.code,{children:"cat /proc/cmdline"})," will show what parameters the kernel has booted with."]}),"\n",(0,n.jsxs)(o.p,{children:["If the devices don't match up with what's listed in ",(0,n.jsx)(o.code,{children:"ls /dev/disk/*/*"})," then it will cause a 90s timeout while it waits to see if it can be found. To fix this, you will need to remove the reference to the UUID or device path that no longer exists, or correct it to the new UUID label."]})]})}function d(e={}){let{wrapper:o}={...(0,i.a)(),...e.components};return o?(0,n.jsx)(o,{...e,children:(0,n.jsx)(c,{...e})}):c(e)}},50065:function(e,o,t){t.d(o,{Z:function(){return a},a:function(){return r}});var s=t(67294);let n={},i=s.createContext(n);function r(e){let o=s.useContext(i);return s.useMemo(function(){return"function"==typeof e?e(o):{...o,...e}},[o,e])}function a(e){let o;return o=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:r(e.components),s.createElement(i.Provider,{value:o},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/2b61a93c.58316b4c.js b/assets/js/2b61a93c.58316b4c.js new file mode 100644 index 000000000..2b0631597 --- /dev/null +++ b/assets/js/2b61a93c.58316b4c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([["9640"],{21534:function(e,t,n){n.r(t),n.d(t,{metadata:()=>i,contentTitle:()=>d,default:()=>u,assets:()=>a,toc:()=>l,frontMatter:()=>r});var i=JSON.parse('{"id":"user/editions/mate/index","title":"MATE","description":"The MATE Edition is deprecated. XFCE has been included to replace it. See the Solus 4.4 blog post here","source":"@site/docs/user/editions/mate/index.md","sourceDirName":"user/editions/mate","slug":"/user/editions/mate/","permalink":"/docs/user/editions/mate/","draft":false,"unlisted":false,"editUrl":"https://github.com/getsolus/help-center-docs/tree/master/docs/user/editions/mate/index.md","tags":[],"version":"current","lastUpdatedAt":1733757592000,"frontMatter":{"title":"MATE","summary":"A quick introduction to the MATE Edition of Solus"},"sidebar":"userSidebar","previous":{"title":"Tips and Tricks","permalink":"/docs/user/editions/gnome/tips-and-tricks"},"next":{"title":"Configuration","permalink":"/docs/user/editions/mate/configuration"}}'),o=n("85893"),s=n("50065");let r={title:"MATE",summary:"A quick introduction to the MATE Edition of Solus"},d="MATE Desktop",a={},l=[];function c(e){let t={a:"a",admonition:"admonition",blockquote:"blockquote",h1:"h1",header:"header",li:"li",p:"p",ul:"ul",...(0,s.a)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(t.header,{children:(0,o.jsx)(t.h1,{id:"mate-desktop",children:"MATE Desktop"})}),"\n",(0,o.jsx)(t.admonition,{type:"caution",children:(0,o.jsxs)(t.p,{children:["The MATE Edition is deprecated. XFCE has been included to replace it. See the Solus 4.4 blog post ",(0,o.jsx)(t.a,{href:"https://getsol.us/2023/07/08/solus-4-4-released/",children:"here"})]})}),"\n",(0,o.jsx)(t.p,{children:"MATE Desktop is provided by the MATE Edition of Solus. They describe it as:"}),"\n",(0,o.jsxs)(t.blockquote,{children:["\n",(0,o.jsx)(t.p,{children:"The MATE Desktop Environment is the continuation of GNOME 2. It provides an intuitive and attractive desktop environment using traditional metaphors for Linux and other Unix-like operating\xa0systems."}),"\n"]}),"\n",(0,o.jsx)(t.p,{children:"Here are some links related to this project that you may find helpful:"}),"\n",(0,o.jsxs)(t.ul,{children:["\n",(0,o.jsx)(t.li,{children:(0,o.jsx)(t.a,{href:"https://mate-desktop.org/",children:"Homepage"})}),"\n",(0,o.jsx)(t.li,{children:(0,o.jsx)(t.a,{href:"https://mate-desktop.org/blog/",children:"News"})}),"\n",(0,o.jsx)(t.li,{children:(0,o.jsx)(t.a,{href:"https://mate-desktop.org/community/",children:"Support"})}),"\n"]}),"\n",(0,o.jsx)(t.p,{children:(0,o.jsx)(t.a,{href:"configuration",children:"Go to MATE Configuration"})}),"\n",(0,o.jsx)(t.p,{children:(0,o.jsx)(t.a,{href:"tips-and-tricks",children:"Go to MATE Tips and Tricks"})})]})}function u(e={}){let{wrapper:t}={...(0,s.a)(),...e.components};return t?(0,o.jsx)(t,{...e,children:(0,o.jsx)(c,{...e})}):c(e)}},50065:function(e,t,n){n.d(t,{Z:function(){return d},a:function(){return r}});var i=n(67294);let o={},s=i.createContext(o);function r(e){let t=i.useContext(s);return i.useMemo(function(){return"function"==typeof e?e(t):{...t,...e}},[t,e])}function d(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:r(e.components),i.createElement(s.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/2b61a93c.852b4fa1.js b/assets/js/2b61a93c.852b4fa1.js deleted file mode 100644 index fe5b7e7fd..000000000 --- a/assets/js/2b61a93c.852b4fa1.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[9897],{23065:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>a,contentTitle:()=>r,default:()=>u,frontMatter:()=>o,metadata:()=>d,toc:()=>c});var i=n(85893),s=n(11151);const o={title:"MATE",summary:"A quick introduction to the MATE Edition of Solus"},r="MATE Desktop",d={id:"user/editions/mate/index",title:"MATE",description:"The MATE Edition is deprecated. XFCE has been included to replace it. See the Solus 4.4 blog post here",source:"@site/docs/user/editions/mate/index.md",sourceDirName:"user/editions/mate",slug:"/user/editions/mate/",permalink:"/docs/user/editions/mate/",draft:!1,unlisted:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/editions/mate/index.md",tags:[],version:"current",lastUpdatedAt:1732716912e3,frontMatter:{title:"MATE",summary:"A quick introduction to the MATE Edition of Solus"},sidebar:"userSidebar",previous:{title:"Tips and Tricks",permalink:"/docs/user/editions/gnome/tips-and-tricks"},next:{title:"Configuration",permalink:"/docs/user/editions/mate/configuration"}},a={},c=[];function l(e){const t={a:"a",admonition:"admonition",blockquote:"blockquote",h1:"h1",header:"header",li:"li",p:"p",ul:"ul",...(0,s.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(t.header,{children:(0,i.jsx)(t.h1,{id:"mate-desktop",children:"MATE Desktop"})}),"\n",(0,i.jsx)(t.admonition,{type:"caution",children:(0,i.jsxs)(t.p,{children:["The MATE Edition is deprecated. XFCE has been included to replace it. See the Solus 4.4 blog post ",(0,i.jsx)(t.a,{href:"https://getsol.us/2023/07/08/solus-4-4-released/",children:"here"})]})}),"\n",(0,i.jsx)(t.p,{children:"MATE Desktop is provided by the MATE Edition of Solus. They describe it as:"}),"\n",(0,i.jsxs)(t.blockquote,{children:["\n",(0,i.jsx)(t.p,{children:"The MATE Desktop Environment is the continuation of GNOME 2. It provides an intuitive and attractive desktop environment using traditional metaphors for Linux and other Unix-like operating\xa0systems."}),"\n"]}),"\n",(0,i.jsx)(t.p,{children:"Here are some links related to this project that you may find helpful:"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:(0,i.jsx)(t.a,{href:"https://mate-desktop.org/",children:"Homepage"})}),"\n",(0,i.jsx)(t.li,{children:(0,i.jsx)(t.a,{href:"https://mate-desktop.org/blog/",children:"News"})}),"\n",(0,i.jsx)(t.li,{children:(0,i.jsx)(t.a,{href:"https://mate-desktop.org/community/",children:"Support"})}),"\n"]}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.a,{href:"configuration",children:"Go to MATE Configuration"})}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.a,{href:"tips-and-tricks",children:"Go to MATE Tips and Tricks"})})]})}function u(e={}){const{wrapper:t}={...(0,s.a)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(l,{...e})}):l(e)}},11151:(e,t,n)=>{n.d(t,{Z:()=>d,a:()=>r});var i=n(67294);const s={},o=i.createContext(s);function r(e){const t=i.useContext(o);return i.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function d(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:r(e.components),i.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/2c3e84bd.3f7e7e11.js b/assets/js/2c3e84bd.3f7e7e11.js new file mode 100644 index 000000000..d4dd795e3 --- /dev/null +++ b/assets/js/2c3e84bd.3f7e7e11.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([["6133"],{95858:function(e,t,n){n.r(t),n.d(t,{metadata:()=>i,contentTitle:()=>a,default:()=>d,assets:()=>l,toc:()=>u,frontMatter:()=>r});var i=JSON.parse('{"id":"user/quick-start/installation/disks","title":"Disk Partitioning","description":"Solus provides multiple ways you can install onto your system.","source":"@site/docs/user/quick-start/installation/disks.md","sourceDirName":"user/quick-start/installation","slug":"/user/quick-start/installation/disks","permalink":"/docs/user/quick-start/installation/disks","draft":false,"unlisted":false,"editUrl":"https://github.com/getsolus/help-center-docs/tree/master/docs/user/quick-start/installation/disks.md","tags":[],"version":"current","lastUpdatedAt":1733757592000,"frontMatter":{"title":"Disk Partitioning","summary":"Overview of the partitioning that the installer can perform"},"sidebar":"userSidebar","previous":{"title":"Preparing to Install","permalink":"/docs/user/quick-start/installation/"},"next":{"title":"Booting with Secure Boot Enabled","permalink":"/docs/user/quick-start/installation/secure-boot"}}'),s=n("85893"),o=n("50065");let r={title:"Disk Partitioning",summary:"Overview of the partitioning that the installer can perform"},a="Disk Partitioning",l={},u=[{value:"UEFI",id:"uefi",level:2}];function c(e){let t={br:"br",code:"code",em:"em",h1:"h1",h2:"h2",header:"header",li:"li",ol:"ol",p:"p",strong:"strong",ul:"ul",...(0,o.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.header,{children:(0,s.jsx)(t.h1,{id:"disk-partitioning",children:"Disk Partitioning"})}),"\n",(0,s.jsx)(t.p,{children:"Solus provides multiple ways you can install onto your system."}),"\n",(0,s.jsxs)(t.ol,{children:["\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Whole Drive"}),(0,s.jsx)(t.br,{}),"\n","Solus can take up the entire drive, using traditional root partitions, or with LVM-managed root partitions."]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Multi-boot"}),(0,s.jsx)(t.br,{}),"\n","You can install Solus next to your existing operating system, such as Windows. ",(0,s.jsx)(t.em,{children:"If you have multiple operating systems installed, we will choose the largest option."})]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Manual Partitioning"}),(0,s.jsx)(t.br,{}),"\n","You can manually configure your system. This is only recommend for advanced users which may desire to have a dedicated ",(0,s.jsx)(t.code,{children:"/home"})," partition. Note that if you manually configure your system, you will need to restart the Installer for those changes to apply appropriately.\n",(0,s.jsx)(t.strong,{children:"Note:"})," Legacy (BIOS) must use MBR partition table while Unified EFI (UEFI) must use GPT partition table."]}),"\n"]}),"\n",(0,s.jsx)(t.p,{children:"Alongside these options, we also provide the ability to use full-disk encryption. For the obvious reason of it being full-disk, this assumes you are installing Solus onto the entire drive."}),"\n",(0,s.jsx)(t.h2,{id:"uefi",children:"UEFI"}),"\n",(0,s.jsx)(t.p,{children:"If you are using a system with UEFI, you may need to create an EFI System Partition, also referred to as an ESP. This is not necessary if you are enabling Solus to install onto the entire disk."}),"\n",(0,s.jsxs)(t.p,{children:["To create an EFI System Partition, open up GParted and create a FAT32 partition that is 1\xa0GB in size. Next, right-click on the partition and click Manage Flags. On the Manage Flags section, enable the ",(0,s.jsx)(t.code,{children:"boot"})," and ",(0,s.jsx)(t.code,{children:"esp"})," flags."]}),"\n",(0,s.jsx)(t.p,{children:(0,s.jsx)(t.strong,{children:"Notes:"})}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsx)(t.li,{children:'Your system must be booted using Unified EFI (UEFI) mode, as opposed to a "legacy (BIOS) mode".'}),"\n",(0,s.jsx)(t.li,{children:"Your disk is required to be GPT formatted."}),"\n",(0,s.jsx)(t.li,{children:"If you cannot see your SSD drive, set the SATA configuration to AHCI."}),"\n"]})]})}function d(e={}){let{wrapper:t}={...(0,o.a)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(c,{...e})}):c(e)}},50065:function(e,t,n){n.d(t,{Z:function(){return a},a:function(){return r}});var i=n(67294);let s={},o=i.createContext(s);function r(e){let t=i.useContext(o);return i.useMemo(function(){return"function"==typeof e?e(t):{...t,...e}},[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:r(e.components),i.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/2c3e84bd.55228a2e.js b/assets/js/2c3e84bd.55228a2e.js deleted file mode 100644 index 2668a3eb6..000000000 --- a/assets/js/2c3e84bd.55228a2e.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[8157],{12359:(e,t,i)=>{i.r(t),i.d(t,{assets:()=>l,contentTitle:()=>r,default:()=>d,frontMatter:()=>o,metadata:()=>a,toc:()=>c});var n=i(85893),s=i(11151);const o={title:"Disk Partitioning",summary:"Overview of the partitioning that the installer can perform"},r="Disk Partitioning",a={id:"user/quick-start/installation/disks",title:"Disk Partitioning",description:"Solus provides multiple ways you can install onto your system.",source:"@site/docs/user/quick-start/installation/disks.md",sourceDirName:"user/quick-start/installation",slug:"/user/quick-start/installation/disks",permalink:"/docs/user/quick-start/installation/disks",draft:!1,unlisted:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/quick-start/installation/disks.md",tags:[],version:"current",lastUpdatedAt:1732716912e3,frontMatter:{title:"Disk Partitioning",summary:"Overview of the partitioning that the installer can perform"},sidebar:"userSidebar",previous:{title:"Preparing to Install",permalink:"/docs/user/quick-start/installation/"},next:{title:"Booting with Secure Boot Enabled",permalink:"/docs/user/quick-start/installation/secure-boot"}},l={},c=[{value:"UEFI",id:"uefi",level:2}];function u(e){const t={br:"br",code:"code",em:"em",h1:"h1",h2:"h2",header:"header",li:"li",ol:"ol",p:"p",strong:"strong",ul:"ul",...(0,s.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.header,{children:(0,n.jsx)(t.h1,{id:"disk-partitioning",children:"Disk Partitioning"})}),"\n",(0,n.jsx)(t.p,{children:"Solus provides multiple ways you can install onto your system."}),"\n",(0,n.jsxs)(t.ol,{children:["\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Whole Drive"}),(0,n.jsx)(t.br,{}),"\n","Solus can take up the entire drive, using traditional root partitions, or with LVM-managed root partitions."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Multi-boot"}),(0,n.jsx)(t.br,{}),"\n","You can install Solus next to your existing operating system, such as Windows. ",(0,n.jsx)(t.em,{children:"If you have multiple operating systems installed, we will choose the largest option."})]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Manual Partitioning"}),(0,n.jsx)(t.br,{}),"\n","You can manually configure your system. This is only recommend for advanced users which may desire to have a dedicated ",(0,n.jsx)(t.code,{children:"/home"})," partition. Note that if you manually configure your system, you will need to restart the Installer for those changes to apply appropriately.\n",(0,n.jsx)(t.strong,{children:"Note:"})," Legacy (BIOS) must use MBR partition table while Unified EFI (UEFI) must use GPT partition table."]}),"\n"]}),"\n",(0,n.jsx)(t.p,{children:"Alongside these options, we also provide the ability to use full-disk encryption. For the obvious reason of it being full-disk, this assumes you are installing Solus onto the entire drive."}),"\n",(0,n.jsx)(t.h2,{id:"uefi",children:"UEFI"}),"\n",(0,n.jsx)(t.p,{children:"If you are using a system with UEFI, you may need to create an EFI System Partition, also referred to as an ESP. This is not necessary if you are enabling Solus to install onto the entire disk."}),"\n",(0,n.jsxs)(t.p,{children:["To create an EFI System Partition, open up GParted and create a FAT32 partition that is 1\xa0GB in size. Next, right-click on the partition and click Manage Flags. On the Manage Flags section, enable the ",(0,n.jsx)(t.code,{children:"boot"})," and ",(0,n.jsx)(t.code,{children:"esp"})," flags."]}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.strong,{children:"Notes:"})}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsx)(t.li,{children:'Your system must be booted using Unified EFI (UEFI) mode, as opposed to a "legacy (BIOS) mode".'}),"\n",(0,n.jsx)(t.li,{children:"Your disk is required to be GPT formatted."}),"\n",(0,n.jsx)(t.li,{children:"If you cannot see your SSD drive, set the SATA configuration to AHCI."}),"\n"]})]})}function d(e={}){const{wrapper:t}={...(0,s.a)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(u,{...e})}):u(e)}},11151:(e,t,i)=>{i.d(t,{Z:()=>a,a:()=>r});var n=i(67294);const s={},o=n.createContext(s);function r(e){const t=n.useContext(o);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:r(e.components),n.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/3323.3aa8447b.js b/assets/js/3323.3aa8447b.js deleted file mode 100644 index 103794e97..000000000 --- a/assets/js/3323.3aa8447b.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! For license information please see 3323.3aa8447b.js.LICENSE.txt */ -(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[3323],{8417:(e,t,r)=>{"use strict";r.d(t,{Z:()=>oe});var n=function(){function e(e){var t=this;this._insertTag=function(e){var r;r=0===t.tags.length?t.insertionPoint?t.insertionPoint.nextSibling:t.prepend?t.container.firstChild:t.before:t.tags[t.tags.length-1].nextSibling,t.container.insertBefore(e,r),t.tags.push(e)},this.isSpeedy=void 0===e.speedy||e.speedy,this.tags=[],this.ctr=0,this.nonce=e.nonce,this.key=e.key,this.container=e.container,this.prepend=e.prepend,this.insertionPoint=e.insertionPoint,this.before=null}var t=e.prototype;return t.hydrate=function(e){e.forEach(this._insertTag)},t.insert=function(e){this.ctr%(this.isSpeedy?65e3:1)==0&&this._insertTag(function(e){var t=document.createElement("style");return t.setAttribute("data-emotion",e.key),void 0!==e.nonce&&t.setAttribute("nonce",e.nonce),t.appendChild(document.createTextNode("")),t.setAttribute("data-s",""),t}(this));var t=this.tags[this.tags.length-1];if(this.isSpeedy){var r=function(e){if(e.sheet)return e.sheet;for(var t=0;t0?u(x,--b):0,g--,10===v&&(g=1,h--),v}function S(){return v=b2||P(v)>3?"":" "}function R(e,t){for(;--t&&S()&&!(v<48||v>102||v>57&&v<65||v>70&&v<97););return O(e,A()+(t<6&&32==$()&&32==S()))}function j(e){for(;S();)switch(v){case e:return b;case 34:case 39:34!==e&&39!==e&&j(v);break;case 40:41===e&&j(e);break;case 92:S()}return b}function I(e,t){for(;S()&&e+v!==57&&(e+v!==84||47!==$()););return"/*"+O(t,b-1)+"*"+i(47===e?e:S())}function M(e){for(;!P($());)S();return O(e,b)}var z="-ms-",N="-moz-",G="-webkit-",B="comm",L="rule",W="decl",F="@keyframes";function K(e,t){for(var r="",n=p(e),o=0;o0&&f(N)-y&&m(v>32?X(N+";",n,r,y-1):X(c(N," ","")+";",n,r,y-2),p);break;case 59:N+=";";default:if(m(z=V(N,t,r,h,g,o,d,C,_=[],j=[],y),a),123===P)if(0===g)H(N,t,z,z,_,a,y,d,j);else switch(99===b&&110===u(N,3)?100:b){case 100:case 108:case 109:case 115:H(e,z,z,n&&m(V(e,z,z,0,0,o,d,C,o,_=[],y),j),o,j,y,d,n?_:j);break;default:H(N,z,z,z,[""],j,0,d,j)}}h=g=v=0,k=O=1,C=N="",y=s;break;case 58:y=1+f(N),v=x;default:if(k<1)if(123==P)--k;else if(125==P&&0==k++&&125==Z())continue;switch(N+=i(P),P*k){case 38:O=g>0?1:(N+="\f",-1);break;case 44:d[h++]=(f(N)-1)*O,O=1;break;case 64:45===$()&&(N+=T(S())),b=$(),g=y=f(C=N+=M(A())),P++;break;case 45:45===x&&2==f(N)&&(k=0)}}return a}function V(e,t,r,n,i,a,l,u,f,m,h){for(var g=i-1,y=0===i?a:[""],b=p(y),v=0,x=0,w=0;v0?y[Z]+" "+S:c(S,/&\f/g,y[Z])))&&(f[w++]=$);return k(e,t,r,0===i?L:u,f,m,h)}function U(e,t,r){return k(e,t,r,B,i(v),d(e,2,-2),0)}function X(e,t,r,n){return k(e,t,r,W,d(e,0,n),d(e,n+1,-1),n)}var Y=function(e,t,r){for(var n=0,o=0;n=o,o=$(),38===n&&12===o&&(t[r]=1),!P(o);)S();return O(e,b)},J=function(e,t){return _(function(e,t){var r=-1,n=44;do{switch(P(n)){case 0:38===n&&12===$()&&(t[r]=1),e[r]+=Y(b-1,t,r);break;case 2:e[r]+=T(n);break;case 4:if(44===n){e[++r]=58===$()?"&\f":"",t[r]=e[r].length;break}default:e[r]+=i(n)}}while(n=S());return e}(C(e),t))},Q=new WeakMap,ee=function(e){if("rule"===e.type&&e.parent&&!(e.length<1)){for(var t=e.value,r=e.parent,n=e.column===r.column&&e.line===r.line;"rule"!==r.type;)if(!(r=r.parent))return;if((1!==e.props.length||58===t.charCodeAt(0)||Q.get(r))&&!n){Q.set(e,!0);for(var o=[],i=J(t,o),a=r.props,s=0,c=0;s6)switch(u(e,t+1)){case 109:if(45!==u(e,t+4))break;case 102:return c(e,/(.+:)(.+)-([^]+)/,"$1"+G+"$2-$3$1"+N+(108==u(e,t+3)?"$3":"$2-$3"))+e;case 115:return~l(e,"stretch")?re(c(e,"stretch","fill-available"),t)+e:e}break;case 4949:if(115!==u(e,t+1))break;case 6444:switch(u(e,f(e)-3-(~l(e,"!important")&&10))){case 107:return c(e,":",":"+G)+e;case 101:return c(e,/(.+:)([^;!]+)(;|!.+)?/,"$1"+G+(45===u(e,14)?"inline-":"")+"box$3$1"+G+"$2$3$1"+z+"$2box$3")+e}break;case 5936:switch(u(e,t+11)){case 114:return G+e+z+c(e,/[svh]\w+-[tblr]{2}/,"tb")+e;case 108:return G+e+z+c(e,/[svh]\w+-[tblr]{2}/,"tb-rl")+e;case 45:return G+e+z+c(e,/[svh]\w+-[tblr]{2}/,"lr")+e}return G+e+z+e+e}return e}var ne=[function(e,t,r,n){if(e.length>-1&&!e.return)switch(e.type){case W:e.return=re(e.value,e.length);break;case F:return K([w(e,{value:c(e.value,"@","@"+G)})],n);case L:if(e.length)return function(e,t){return e.map(t).join("")}(e.props,(function(t){switch(function(e,t){return(e=t.exec(e))?e[0]:e}(t,/(::plac\w+|:read-\w+)/)){case":read-only":case":read-write":return K([w(e,{props:[c(t,/:(read-\w+)/,":-moz-$1")]})],n);case"::placeholder":return K([w(e,{props:[c(t,/:(plac\w+)/,":"+G+"input-$1")]}),w(e,{props:[c(t,/:(plac\w+)/,":-moz-$1")]}),w(e,{props:[c(t,/:(plac\w+)/,z+"input-$1")]})],n)}return""}))}}],oe=function(e){var t=e.key;if("css"===t){var r=document.querySelectorAll("style[data-emotion]:not([data-s])");Array.prototype.forEach.call(r,(function(e){-1!==e.getAttribute("data-emotion").indexOf(" ")&&(document.head.appendChild(e),e.setAttribute("data-s",""))}))}var o=e.stylisPlugins||ne;var i,a,s={},c=[];i=e.container||document.head,Array.prototype.forEach.call(document.querySelectorAll('style[data-emotion^="'+t+' "]'),(function(e){for(var t=e.getAttribute("data-emotion").split(" "),r=1;r{"use strict";function n(e){var t=Object.create(null);return function(r){return void 0===t[r]&&(t[r]=e(r)),t[r]}}r.d(t,{Z:()=>n})},75260:(e,t,r)=>{"use strict";r.d(t,{T:()=>s,w:()=>a});var n=r(67294),o=r(8417),i=(r(48137),r(27278),n.createContext("undefined"!=typeof HTMLElement?(0,o.Z)({key:"css"}):null));i.Provider;var a=function(e){return(0,n.forwardRef)((function(t,r){var o=(0,n.useContext)(i);return e(t,o,r)}))};var s=n.createContext({})},48137:(e,t,r)=>{"use strict";r.d(t,{O:()=>m});var n={animationIterationCount:1,aspectRatio:1,borderImageOutset:1,borderImageSlice:1,borderImageWidth:1,boxFlex:1,boxFlexGroup:1,boxOrdinalGroup:1,columnCount:1,columns:1,flex:1,flexGrow:1,flexPositive:1,flexShrink:1,flexNegative:1,flexOrder:1,gridRow:1,gridRowEnd:1,gridRowSpan:1,gridRowStart:1,gridColumn:1,gridColumnEnd:1,gridColumnSpan:1,gridColumnStart:1,msGridRow:1,msGridRowSpan:1,msGridColumn:1,msGridColumnSpan:1,fontWeight:1,lineHeight:1,opacity:1,order:1,orphans:1,tabSize:1,widows:1,zIndex:1,zoom:1,WebkitLineClamp:1,fillOpacity:1,floodOpacity:1,stopOpacity:1,strokeDasharray:1,strokeDashoffset:1,strokeMiterlimit:1,strokeOpacity:1,strokeWidth:1},o=r(45042),i=/[A-Z]|^ms/g,a=/_EMO_([^_]+?)_([^]*?)_EMO_/g,s=function(e){return 45===e.charCodeAt(1)},c=function(e){return null!=e&&"boolean"!=typeof e},l=(0,o.Z)((function(e){return s(e)?e:e.replace(i,"-$&").toLowerCase()})),u=function(e,t){switch(e){case"animation":case"animationName":if("string"==typeof t)return t.replace(a,(function(e,t,r){return f={name:t,styles:r,next:f},t}))}return 1===n[e]||s(e)||"number"!=typeof t||0===t?t:t+"px"};function d(e,t,r){if(null==r)return"";if(void 0!==r.__emotion_styles)return r;switch(typeof r){case"boolean":return"";case"object":if(1===r.anim)return f={name:r.name,styles:r.styles,next:f},r.name;if(void 0!==r.styles){var n=r.next;if(void 0!==n)for(;void 0!==n;)f={name:n.name,styles:n.styles,next:f},n=n.next;return r.styles+";"}return function(e,t,r){var n="";if(Array.isArray(r))for(var o=0;o=4;++n,o-=4)t=1540483477*(65535&(t=255&e.charCodeAt(n)|(255&e.charCodeAt(++n))<<8|(255&e.charCodeAt(++n))<<16|(255&e.charCodeAt(++n))<<24))+(59797*(t>>>16)<<16),r=1540483477*(65535&(t^=t>>>24))+(59797*(t>>>16)<<16)^1540483477*(65535&r)+(59797*(r>>>16)<<16);switch(o){case 3:r^=(255&e.charCodeAt(n+2))<<16;case 2:r^=(255&e.charCodeAt(n+1))<<8;case 1:r=1540483477*(65535&(r^=255&e.charCodeAt(n)))+(59797*(r>>>16)<<16)}return(((r=1540483477*(65535&(r^=r>>>13))+(59797*(r>>>16)<<16))^r>>>15)>>>0).toString(36)}(o)+c;return{name:l,styles:o,next:f}}},27278:(e,t,r)=>{"use strict";var n;r.d(t,{L:()=>a});var o=r(67294),i=!!(n||(n=r.t(o,2))).useInsertionEffect&&(n||(n=r.t(o,2))).useInsertionEffect,a=i||function(e){return e()};i||o.useLayoutEffect},64938:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"default",{enumerable:!0,get:function(){return n.createSvgIcon}});var n=r(11602)},51233:(e,t,r)=>{"use strict";r.d(t,{Z:()=>A});var n=r(80102),o=r(83117),i=r(67294),a=r(86010),s=r(59766),c=r(94780),l=r(34867),u=r(13264),d=r(29628),f=r(39707),p=r(66500),m=r(95408),h=r(98700),g=r(85893);const y=["component","direction","spacing","divider","children","className","useFlexGap"],b=(0,p.Z)(),v=(0,u.Z)("div",{name:"MuiStack",slot:"Root",overridesResolver:(e,t)=>t.root});function x(e){return(0,d.Z)({props:e,name:"MuiStack",defaultTheme:b})}function k(e,t){const r=i.Children.toArray(e).filter(Boolean);return r.reduce(((e,n,o)=>(e.push(n),o{let r=(0,o.Z)({display:"flex",flexDirection:"column"},(0,m.k9)({theme:t},(0,m.P$)({values:e.direction,breakpoints:t.breakpoints.values}),(e=>({flexDirection:e}))));if(e.spacing){const n=(0,h.hB)(t),o=Object.keys(t.breakpoints.values).reduce(((t,r)=>(("object"==typeof e.spacing&&null!=e.spacing[r]||"object"==typeof e.direction&&null!=e.direction[r])&&(t[r]=!0),t)),{}),i=(0,m.P$)({values:e.direction,base:o}),a=(0,m.P$)({values:e.spacing,base:o});"object"==typeof i&&Object.keys(i).forEach(((e,t,r)=>{if(!i[e]){const n=t>0?i[r[t-1]]:"column";i[e]=n}}));const c=(t,r)=>{return e.useFlexGap?{gap:(0,h.NA)(n,t)}:{"& > :not(style) ~ :not(style)":{margin:0,[`margin${o=r?i[r]:e.direction,{row:"Left","row-reverse":"Right",column:"Top","column-reverse":"Bottom"}[o]}`]:(0,h.NA)(n,t)}};var o};r=(0,s.Z)(r,(0,m.k9)({theme:t},a,c))}return r=(0,m.dt)(t.breakpoints,r),r};var Z=r(90948),S=r(71657);const $=function(e={}){const{createStyledComponent:t=v,useThemeProps:r=x,componentName:s="MuiStack"}=e,u=t(w),d=i.forwardRef((function(e,t){const i=r(e),d=(0,f.Z)(i),{component:p="div",direction:m="column",spacing:h=0,divider:b,children:v,className:x,useFlexGap:w=!1}=d,Z=(0,n.Z)(d,y),S={direction:m,spacing:h,useFlexGap:w},$=(0,c.Z)({root:["root"]},(e=>(0,l.Z)(s,e)),{});return(0,g.jsx)(u,(0,o.Z)({as:p,ownerState:S,ref:t,className:(0,a.Z)($.root,x)},Z,{children:b?k(v,b):v}))}));return d}({createStyledComponent:(0,Z.ZP)("div",{name:"MuiStack",slot:"Root",overridesResolver:(e,t)=>t.root}),useThemeProps:e=>(0,S.Z)({props:e,name:"MuiStack"})}),A=$},27400:(e,t,r)=>{"use strict";r.d(t,{Z:()=>G});var n=r(83117),o=r(80102),i=r(67294),a=r(86010),s=r(94780),c=r(34867),l=r(18719),u=r(13264),d=r(29628),f=r(96682),p=r(39707),m=r(66500);const h=(e,t,r)=>{const n=e.keys[0];if(Array.isArray(t))t.forEach(((t,n)=>{r(((t,r)=>{n<=e.keys.length-1&&(0===n?Object.assign(t,r):t[e.up(e.keys[n])]=r)}),t)}));else if(t&&"object"==typeof t){(Object.keys(t).length>e.keys.length?e.keys:(o=e.keys,i=Object.keys(t),o.filter((e=>i.includes(e))))).forEach((o=>{if(-1!==e.keys.indexOf(o)){const i=t[o];void 0!==i&&r(((t,r)=>{n===o?Object.assign(t,r):t[e.up(o)]=r}),i)}}))}else"number"!=typeof t&&"string"!=typeof t||r(((e,t)=>{Object.assign(e,t)}),t);var o,i};function g(e){return e?`Level${e}`:""}function y(e){return e.unstable_level>0&&e.container}function b(e){return function(t){return`var(--Grid-${t}Spacing${g(e.unstable_level)})`}}function v(e){return function(t){return 0===e.unstable_level?`var(--Grid-${t}Spacing)`:`var(--Grid-${t}Spacing${g(e.unstable_level-1)})`}}function x(e){return 0===e.unstable_level?"var(--Grid-columns)":`var(--Grid-columns${g(e.unstable_level-1)})`}const k=({theme:e,ownerState:t})=>{const r=b(t),n={};return h(e.breakpoints,t.gridSize,((e,o)=>{let i={};!0===o&&(i={flexBasis:0,flexGrow:1,maxWidth:"100%"}),"auto"===o&&(i={flexBasis:"auto",flexGrow:0,flexShrink:0,maxWidth:"none",width:"auto"}),"number"==typeof o&&(i={flexGrow:0,flexBasis:"auto",width:`calc(100% * ${o} / ${x(t)}${y(t)?` + ${r("column")}`:""})`}),e(n,i)})),n},w=({theme:e,ownerState:t})=>{const r={};return h(e.breakpoints,t.gridOffset,((e,n)=>{let o={};"auto"===n&&(o={marginLeft:"auto"}),"number"==typeof n&&(o={marginLeft:0===n?"0px":`calc(100% * ${n} / ${x(t)})`}),e(r,o)})),r},Z=({theme:e,ownerState:t})=>{if(!t.container)return{};const r=y(t)?{[`--Grid-columns${g(t.unstable_level)}`]:x(t)}:{"--Grid-columns":12};return h(e.breakpoints,t.columns,((e,n)=>{e(r,{[`--Grid-columns${g(t.unstable_level)}`]:n})})),r},S=({theme:e,ownerState:t})=>{if(!t.container)return{};const r=v(t),n=y(t)?{[`--Grid-rowSpacing${g(t.unstable_level)}`]:r("row")}:{};return h(e.breakpoints,t.rowSpacing,((r,o)=>{var i;r(n,{[`--Grid-rowSpacing${g(t.unstable_level)}`]:"string"==typeof o?o:null==(i=e.spacing)?void 0:i.call(e,o)})})),n},$=({theme:e,ownerState:t})=>{if(!t.container)return{};const r=v(t),n=y(t)?{[`--Grid-columnSpacing${g(t.unstable_level)}`]:r("column")}:{};return h(e.breakpoints,t.columnSpacing,((r,o)=>{var i;r(n,{[`--Grid-columnSpacing${g(t.unstable_level)}`]:"string"==typeof o?o:null==(i=e.spacing)?void 0:i.call(e,o)})})),n},A=({theme:e,ownerState:t})=>{if(!t.container)return{};const r={};return h(e.breakpoints,t.direction,((e,t)=>{e(r,{flexDirection:t})})),r},O=({ownerState:e})=>{const t=b(e),r=v(e);return(0,n.Z)({minWidth:0,boxSizing:"border-box"},e.container&&(0,n.Z)({display:"flex",flexWrap:"wrap"},e.wrap&&"wrap"!==e.wrap&&{flexWrap:e.wrap},{margin:`calc(${t("row")} / -2) calc(${t("column")} / -2)`},e.disableEqualOverflow&&{margin:`calc(${t("row")} * -1) 0px 0px calc(${t("column")} * -1)`}),(!e.container||y(e))&&(0,n.Z)({padding:`calc(${r("row")} / 2) calc(${r("column")} / 2)`},(e.disableEqualOverflow||e.parentDisableEqualOverflow)&&{padding:`${r("row")} 0px 0px ${r("column")}`}))},P=e=>{const t=[];return Object.entries(e).forEach((([e,r])=>{!1!==r&&void 0!==r&&t.push(`grid-${e}-${String(r)}`)})),t},C=(e,t="xs")=>{function r(e){return void 0!==e&&("string"==typeof e&&!Number.isNaN(Number(e))||"number"==typeof e&&e>0)}if(r(e))return[`spacing-${t}-${String(e)}`];if("object"==typeof e&&!Array.isArray(e)){const t=[];return Object.entries(e).forEach((([e,n])=>{r(n)&&t.push(`spacing-${e}-${String(n)}`)})),t}return[]},_=e=>void 0===e?[]:"object"==typeof e?Object.entries(e).map((([e,t])=>`direction-${e}-${t}`)):[`direction-xs-${String(e)}`];var T=r(85893);const E=["className","children","columns","container","component","direction","wrap","spacing","rowSpacing","columnSpacing","disableEqualOverflow","unstable_level"],R=(0,m.Z)(),j=(0,u.Z)("div",{name:"MuiGrid",slot:"Root",overridesResolver:(e,t)=>t.root});function I(e){return(0,d.Z)({props:e,name:"MuiGrid",defaultTheme:R})}var M=r(90948),z=r(71657);const N=function(e={}){const{createStyledComponent:t=j,useThemeProps:r=I,componentName:u="MuiGrid"}=e,d=i.createContext(void 0),m=t(Z,$,S,k,A,O,w),h=i.forwardRef((function(e,t){var h,g,y,b,v,x,k,w;const Z=(0,f.Z)(),S=r(e),$=(0,p.Z)(S),A=i.useContext(d),{className:O,children:R,columns:j=12,container:I=!1,component:M="div",direction:z="row",wrap:N="wrap",spacing:G=0,rowSpacing:B=G,columnSpacing:L=G,disableEqualOverflow:W,unstable_level:F=0}=$,K=(0,o.Z)($,E);let q=W;F&&void 0!==W&&(q=e.disableEqualOverflow);const D={},H={},V={};Object.entries(K).forEach((([e,t])=>{void 0!==Z.breakpoints.values[e]?D[e]=t:void 0!==Z.breakpoints.values[e.replace("Offset","")]?H[e.replace("Offset","")]=t:V[e]=t}));const U=null!=(h=e.columns)?h:F?void 0:j,X=null!=(g=e.spacing)?g:F?void 0:G,Y=null!=(y=null!=(b=e.rowSpacing)?b:e.spacing)?y:F?void 0:B,J=null!=(v=null!=(x=e.columnSpacing)?x:e.spacing)?v:F?void 0:L,Q=(0,n.Z)({},$,{level:F,columns:U,container:I,direction:z,wrap:N,spacing:X,rowSpacing:Y,columnSpacing:J,gridSize:D,gridOffset:H,disableEqualOverflow:null!=(k=null!=(w=q)?w:A)&&k,parentDisableEqualOverflow:A}),ee=((e,t)=>{const{container:r,direction:n,spacing:o,wrap:i,gridSize:a}=e,l={root:["root",r&&"container","wrap"!==i&&`wrap-xs-${String(i)}`,..._(n),...P(a),...r?C(o,t.breakpoints.keys[0]):[]]};return(0,s.Z)(l,(e=>(0,c.Z)(u,e)),{})})(Q,Z);let te=(0,T.jsx)(m,(0,n.Z)({ref:t,as:M,ownerState:Q,className:(0,a.Z)(ee.root,O)},V,{children:i.Children.map(R,(e=>{var t;return i.isValidElement(e)&&(0,l.Z)(e,["Grid"])?i.cloneElement(e,{unstable_level:null!=(t=e.props.unstable_level)?t:F+1}):e}))}));return void 0!==q&&q!==(null!=A&&A)&&(te=(0,T.jsx)(d.Provider,{value:q,children:te})),te}));return h.muiName="Grid",h}({createStyledComponent:(0,M.ZP)("div",{name:"MuiGrid2",slot:"Root",overridesResolver:(e,t)=>t.root}),componentName:"MuiGrid2",useThemeProps:e=>(0,z.Z)({props:e,name:"MuiGrid2"})}),G=N},21265:(e,t,r)=>{"use strict";r.d(t,{Z:()=>G});var n=r(83117),o=r(80102),i=r(71387),a=r(59766),s=r(66500),c=r(44920),l=r(86523);var u=r(41796);const d={black:"#000",white:"#fff"},f={50:"#fafafa",100:"#f5f5f5",200:"#eeeeee",300:"#e0e0e0",400:"#bdbdbd",500:"#9e9e9e",600:"#757575",700:"#616161",800:"#424242",900:"#212121",A100:"#f5f5f5",A200:"#eeeeee",A400:"#bdbdbd",A700:"#616161"},p={50:"#f3e5f5",100:"#e1bee7",200:"#ce93d8",300:"#ba68c8",400:"#ab47bc",500:"#9c27b0",600:"#8e24aa",700:"#7b1fa2",800:"#6a1b9a",900:"#4a148c",A100:"#ea80fc",A200:"#e040fb",A400:"#d500f9",A700:"#aa00ff"},m={50:"#ffebee",100:"#ffcdd2",200:"#ef9a9a",300:"#e57373",400:"#ef5350",500:"#f44336",600:"#e53935",700:"#d32f2f",800:"#c62828",900:"#b71c1c",A100:"#ff8a80",A200:"#ff5252",A400:"#ff1744",A700:"#d50000"},h={50:"#fff3e0",100:"#ffe0b2",200:"#ffcc80",300:"#ffb74d",400:"#ffa726",500:"#ff9800",600:"#fb8c00",700:"#f57c00",800:"#ef6c00",900:"#e65100",A100:"#ffd180",A200:"#ffab40",A400:"#ff9100",A700:"#ff6d00"},g={50:"#e3f2fd",100:"#bbdefb",200:"#90caf9",300:"#64b5f6",400:"#42a5f5",500:"#2196f3",600:"#1e88e5",700:"#1976d2",800:"#1565c0",900:"#0d47a1",A100:"#82b1ff",A200:"#448aff",A400:"#2979ff",A700:"#2962ff"},y={50:"#e1f5fe",100:"#b3e5fc",200:"#81d4fa",300:"#4fc3f7",400:"#29b6f6",500:"#03a9f4",600:"#039be5",700:"#0288d1",800:"#0277bd",900:"#01579b",A100:"#80d8ff",A200:"#40c4ff",A400:"#00b0ff",A700:"#0091ea"},b={50:"#e8f5e9",100:"#c8e6c9",200:"#a5d6a7",300:"#81c784",400:"#66bb6a",500:"#4caf50",600:"#43a047",700:"#388e3c",800:"#2e7d32",900:"#1b5e20",A100:"#b9f6ca",A200:"#69f0ae",A400:"#00e676",A700:"#00c853"},v=["mode","contrastThreshold","tonalOffset"],x={text:{primary:"rgba(0, 0, 0, 0.87)",secondary:"rgba(0, 0, 0, 0.6)",disabled:"rgba(0, 0, 0, 0.38)"},divider:"rgba(0, 0, 0, 0.12)",background:{paper:d.white,default:d.white},action:{active:"rgba(0, 0, 0, 0.54)",hover:"rgba(0, 0, 0, 0.04)",hoverOpacity:.04,selected:"rgba(0, 0, 0, 0.08)",selectedOpacity:.08,disabled:"rgba(0, 0, 0, 0.26)",disabledBackground:"rgba(0, 0, 0, 0.12)",disabledOpacity:.38,focus:"rgba(0, 0, 0, 0.12)",focusOpacity:.12,activatedOpacity:.12}},k={text:{primary:d.white,secondary:"rgba(255, 255, 255, 0.7)",disabled:"rgba(255, 255, 255, 0.5)",icon:"rgba(255, 255, 255, 0.5)"},divider:"rgba(255, 255, 255, 0.12)",background:{paper:"#121212",default:"#121212"},action:{active:d.white,hover:"rgba(255, 255, 255, 0.08)",hoverOpacity:.08,selected:"rgba(255, 255, 255, 0.16)",selectedOpacity:.16,disabled:"rgba(255, 255, 255, 0.3)",disabledBackground:"rgba(255, 255, 255, 0.12)",disabledOpacity:.38,focus:"rgba(255, 255, 255, 0.12)",focusOpacity:.12,activatedOpacity:.24}};function w(e,t,r,n){const o=n.light||n,i=n.dark||1.5*n;e[t]||(e.hasOwnProperty(r)?e[t]=e[r]:"light"===t?e.light=(0,u.$n)(e.main,o):"dark"===t&&(e.dark=(0,u._j)(e.main,i)))}function Z(e){const{mode:t="light",contrastThreshold:r=3,tonalOffset:s=.2}=e,c=(0,o.Z)(e,v),l=e.primary||function(e="light"){return"dark"===e?{main:g[200],light:g[50],dark:g[400]}:{main:g[700],light:g[400],dark:g[800]}}(t),Z=e.secondary||function(e="light"){return"dark"===e?{main:p[200],light:p[50],dark:p[400]}:{main:p[500],light:p[300],dark:p[700]}}(t),S=e.error||function(e="light"){return"dark"===e?{main:m[500],light:m[300],dark:m[700]}:{main:m[700],light:m[400],dark:m[800]}}(t),$=e.info||function(e="light"){return"dark"===e?{main:y[400],light:y[300],dark:y[700]}:{main:y[700],light:y[500],dark:y[900]}}(t),A=e.success||function(e="light"){return"dark"===e?{main:b[400],light:b[300],dark:b[700]}:{main:b[800],light:b[500],dark:b[900]}}(t),O=e.warning||function(e="light"){return"dark"===e?{main:h[400],light:h[300],dark:h[700]}:{main:"#ed6c02",light:h[500],dark:h[900]}}(t);function P(e){return(0,u.mi)(e,k.text.primary)>=r?k.text.primary:x.text.primary}const C=({color:e,name:t,mainShade:r=500,lightShade:o=300,darkShade:a=700})=>{if(!(e=(0,n.Z)({},e)).main&&e[r]&&(e.main=e[r]),!e.hasOwnProperty("main"))throw new Error((0,i.Z)(11,t?` (${t})`:"",r));if("string"!=typeof e.main)throw new Error((0,i.Z)(12,t?` (${t})`:"",JSON.stringify(e.main)));return w(e,"light",o,s),w(e,"dark",a,s),e.contrastText||(e.contrastText=P(e.main)),e},_={dark:k,light:x};return(0,a.Z)((0,n.Z)({common:(0,n.Z)({},d),mode:t,primary:C({color:l,name:"primary"}),secondary:C({color:Z,name:"secondary",mainShade:"A400",lightShade:"A200",darkShade:"A700"}),error:C({color:S,name:"error"}),warning:C({color:O,name:"warning"}),info:C({color:$,name:"info"}),success:C({color:A,name:"success"}),grey:f,contrastThreshold:r,getContrastText:P,augmentColor:C,tonalOffset:s},_[t]),c)}const S=["fontFamily","fontSize","fontWeightLight","fontWeightRegular","fontWeightMedium","fontWeightBold","htmlFontSize","allVariants","pxToRem"];const $={textTransform:"uppercase"},A='"Roboto", "Helvetica", "Arial", sans-serif';function O(e,t){const r="function"==typeof t?t(e):t,{fontFamily:i=A,fontSize:s=14,fontWeightLight:c=300,fontWeightRegular:l=400,fontWeightMedium:u=500,fontWeightBold:d=700,htmlFontSize:f=16,allVariants:p,pxToRem:m}=r,h=(0,o.Z)(r,S);const g=s/14,y=m||(e=>e/f*g+"rem"),b=(e,t,r,o,a)=>{return(0,n.Z)({fontFamily:i,fontWeight:e,fontSize:y(t),lineHeight:r},i===A?{letterSpacing:(s=o/t,Math.round(1e5*s)/1e5)+"em"}:{},a,p);var s},v={h1:b(c,96,1.167,-1.5),h2:b(c,60,1.2,-.5),h3:b(l,48,1.167,0),h4:b(l,34,1.235,.25),h5:b(l,24,1.334,0),h6:b(u,20,1.6,.15),subtitle1:b(l,16,1.75,.15),subtitle2:b(u,14,1.57,.1),body1:b(l,16,1.5,.15),body2:b(l,14,1.43,.15),button:b(u,14,1.75,.4,$),caption:b(l,12,1.66,.4),overline:b(l,12,2.66,1,$),inherit:{fontFamily:"inherit",fontWeight:"inherit",fontSize:"inherit",lineHeight:"inherit",letterSpacing:"inherit"}};return(0,a.Z)((0,n.Z)({htmlFontSize:f,pxToRem:y,fontFamily:i,fontSize:s,fontWeightLight:c,fontWeightRegular:l,fontWeightMedium:u,fontWeightBold:d},v),h,{clone:!1})}function P(...e){return[`${e[0]}px ${e[1]}px ${e[2]}px ${e[3]}px rgba(0,0,0,0.2)`,`${e[4]}px ${e[5]}px ${e[6]}px ${e[7]}px rgba(0,0,0,0.14)`,`${e[8]}px ${e[9]}px ${e[10]}px ${e[11]}px rgba(0,0,0,0.12)`].join(",")}const C=["none",P(0,2,1,-1,0,1,1,0,0,1,3,0),P(0,3,1,-2,0,2,2,0,0,1,5,0),P(0,3,3,-2,0,3,4,0,0,1,8,0),P(0,2,4,-1,0,4,5,0,0,1,10,0),P(0,3,5,-1,0,5,8,0,0,1,14,0),P(0,3,5,-1,0,6,10,0,0,1,18,0),P(0,4,5,-2,0,7,10,1,0,2,16,1),P(0,5,5,-3,0,8,10,1,0,3,14,2),P(0,5,6,-3,0,9,12,1,0,3,16,2),P(0,6,6,-3,0,10,14,1,0,4,18,3),P(0,6,7,-4,0,11,15,1,0,4,20,3),P(0,7,8,-4,0,12,17,2,0,5,22,4),P(0,7,8,-4,0,13,19,2,0,5,24,4),P(0,7,9,-4,0,14,21,2,0,5,26,4),P(0,8,9,-5,0,15,22,2,0,6,28,5),P(0,8,10,-5,0,16,24,2,0,6,30,5),P(0,8,11,-5,0,17,26,2,0,6,32,5),P(0,9,11,-5,0,18,28,2,0,7,34,6),P(0,9,12,-6,0,19,29,2,0,7,36,6),P(0,10,13,-6,0,20,31,3,0,8,38,7),P(0,10,13,-6,0,21,33,3,0,8,40,7),P(0,10,14,-6,0,22,35,3,0,8,42,7),P(0,11,14,-7,0,23,36,3,0,9,44,8),P(0,11,15,-7,0,24,38,3,0,9,46,8)],_=["duration","easing","delay"],T={easeInOut:"cubic-bezier(0.4, 0, 0.2, 1)",easeOut:"cubic-bezier(0.0, 0, 0.2, 1)",easeIn:"cubic-bezier(0.4, 0, 1, 1)",sharp:"cubic-bezier(0.4, 0, 0.6, 1)"},E={shortest:150,shorter:200,short:250,standard:300,complex:375,enteringScreen:225,leavingScreen:195};function R(e){return`${Math.round(e)}ms`}function j(e){if(!e)return 0;const t=e/36;return Math.round(10*(4+15*t**.25+t/5))}function I(e){const t=(0,n.Z)({},T,e.easing),r=(0,n.Z)({},E,e.duration);return(0,n.Z)({getAutoHeightDuration:j,create:(e=["all"],n={})=>{const{duration:i=r.standard,easing:a=t.easeInOut,delay:s=0}=n;(0,o.Z)(n,_);return(Array.isArray(e)?e:[e]).map((e=>`${e} ${"string"==typeof i?i:R(i)} ${a} ${"string"==typeof s?s:R(s)}`)).join(",")}},e,{easing:t,duration:r})}const M={mobileStepper:1e3,fab:1050,speedDial:1050,appBar:1100,drawer:1200,modal:1300,snackbar:1400,tooltip:1500},z=["breakpoints","mixins","spacing","palette","transitions","typography","shape"];function N(e={},...t){const{mixins:r={},palette:u={},transitions:d={},typography:f={}}=e,p=(0,o.Z)(e,z);if(e.vars)throw new Error((0,i.Z)(18));const m=Z(u),h=(0,s.Z)(e);let g=(0,a.Z)(h,{mixins:(y=h.breakpoints,b=r,(0,n.Z)({toolbar:{minHeight:56,[y.up("xs")]:{"@media (orientation: landscape)":{minHeight:48}},[y.up("sm")]:{minHeight:64}}},b)),palette:m,shadows:C.slice(),typography:O(m,f),transitions:I(d),zIndex:(0,n.Z)({},M)});var y,b;return g=(0,a.Z)(g,p),g=t.reduce(((e,t)=>(0,a.Z)(e,t)),g),g.unstable_sxConfig=(0,n.Z)({},c.Z,null==p?void 0:p.unstable_sxConfig),g.unstable_sx=function(e){return(0,l.Z)({sx:e,theme:this})},g}const G=N},90247:(e,t,r)=>{"use strict";r.d(t,{Z:()=>n});const n=(0,r(21265).Z)()},10606:(e,t,r)=>{"use strict";r.d(t,{Z:()=>n});const n="$$material"},90948:(e,t,r)=>{"use strict";r.d(t,{FO:()=>a,ZP:()=>s});var n=r(70182),o=r(90247),i=r(10606);const a=e=>(0,n.x9)(e)&&"classes"!==e,s=(0,n.ZP)({themeId:i.Z,defaultTheme:o.Z,rootShouldForwardProp:a})},71657:(e,t,r)=>{"use strict";r.d(t,{Z:()=>a});var n=r(29628),o=r(90247),i=r(10606);function a({props:e,name:t}){return(0,n.Z)({props:e,name:t,defaultTheme:o.Z,themeId:i.Z})}},98216:(e,t,r)=>{"use strict";r.d(t,{Z:()=>n});const n=r(14142).Z},11602:(e,t,r)=>{"use strict";r.r(t),r.d(t,{capitalize:()=>o.Z,createChainedFunction:()=>i,createSvgIcon:()=>w,debounce:()=>Z,deprecatedPropType:()=>S,isMuiElement:()=>$,ownerDocument:()=>O,ownerWindow:()=>P,requirePropFactory:()=>C,setRef:()=>_,unstable_ClassNameGenerator:()=>B,unstable_useEnhancedEffect:()=>T.Z,unstable_useId:()=>j,unsupportedProp:()=>I,useControlled:()=>M,useEventCallback:()=>z.Z,useForkRef:()=>N.Z,useIsFocusVisible:()=>G.Z});var n=r(37078),o=r(98216);const i=function(...e){return e.reduce(((e,t)=>null==t?e:function(...r){e.apply(this,r),t.apply(this,r)}),(()=>{}))};var a=r(83117),s=r(67294),c=r.t(s,2),l=r(80102),u=r(86010),d=r(94780),f=r(71657),p=r(90948),m=r(1588),h=r(34867);function g(e){return(0,h.Z)("MuiSvgIcon",e)}(0,m.Z)("MuiSvgIcon",["root","colorPrimary","colorSecondary","colorAction","colorError","colorDisabled","fontSizeInherit","fontSizeSmall","fontSizeMedium","fontSizeLarge"]);var y=r(85893);const b=["children","className","color","component","fontSize","htmlColor","inheritViewBox","titleAccess","viewBox"],v=(0,p.ZP)("svg",{name:"MuiSvgIcon",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:r}=e;return[t.root,"inherit"!==r.color&&t[`color${(0,o.Z)(r.color)}`],t[`fontSize${(0,o.Z)(r.fontSize)}`]]}})((({theme:e,ownerState:t})=>{var r,n,o,i,a,s,c,l,u,d,f,p,m,h,g,y,b;return{userSelect:"none",width:"1em",height:"1em",display:"inline-block",fill:t.hasSvgAsChild?void 0:"currentColor",flexShrink:0,transition:null==(r=e.transitions)||null==(n=r.create)?void 0:n.call(r,"fill",{duration:null==(o=e.transitions)||null==(i=o.duration)?void 0:i.shorter}),fontSize:{inherit:"inherit",small:(null==(a=e.typography)||null==(s=a.pxToRem)?void 0:s.call(a,20))||"1.25rem",medium:(null==(c=e.typography)||null==(l=c.pxToRem)?void 0:l.call(c,24))||"1.5rem",large:(null==(u=e.typography)||null==(d=u.pxToRem)?void 0:d.call(u,35))||"2.1875rem"}[t.fontSize],color:null!=(f=null==(p=(e.vars||e).palette)||null==(m=p[t.color])?void 0:m.main)?f:{action:null==(h=(e.vars||e).palette)||null==(g=h.action)?void 0:g.active,disabled:null==(y=(e.vars||e).palette)||null==(b=y.action)?void 0:b.disabled,inherit:void 0}[t.color]}})),x=s.forwardRef((function(e,t){const r=(0,f.Z)({props:e,name:"MuiSvgIcon"}),{children:n,className:i,color:c="inherit",component:p="svg",fontSize:m="medium",htmlColor:h,inheritViewBox:x=!1,titleAccess:k,viewBox:w="0 0 24 24"}=r,Z=(0,l.Z)(r,b),S=s.isValidElement(n)&&"svg"===n.type,$=(0,a.Z)({},r,{color:c,component:p,fontSize:m,instanceFontSize:e.fontSize,inheritViewBox:x,viewBox:w,hasSvgAsChild:S}),A={};x||(A.viewBox=w);const O=(e=>{const{color:t,fontSize:r,classes:n}=e,i={root:["root","inherit"!==t&&`color${(0,o.Z)(t)}`,`fontSize${(0,o.Z)(r)}`]};return(0,d.Z)(i,g,n)})($);return(0,y.jsxs)(v,(0,a.Z)({as:p,className:(0,u.Z)(O.root,i),focusable:"false",color:h,"aria-hidden":!k||void 0,role:k?"img":void 0,ref:t},A,Z,S&&n.props,{ownerState:$,children:[S?n.props.children:n,k?(0,y.jsx)("title",{children:k}):null]}))}));x.muiName="SvgIcon";const k=x;function w(e,t){function r(r,n){return(0,y.jsx)(k,(0,a.Z)({"data-testid":`${t}Icon`,ref:n},r,{children:e}))}return r.muiName=k.muiName,s.memo(s.forwardRef(r))}const Z=function(e,t=166){let r;function n(...n){clearTimeout(r),r=setTimeout((()=>{e.apply(this,n)}),t)}return n.clear=()=>{clearTimeout(r)},n};const S=function(e,t){return()=>null};const $=r(18719).Z;function A(e){return e&&e.ownerDocument||document}const O=A;const P=function(e){return A(e).defaultView||window};const C=function(e,t){return()=>null};const _=r(7960).Z;var T=r(58974);let E=0;const R=c["useId".toString()];const j=function(e){if(void 0!==R){const t=R();return null!=e?e:t}return function(e){const[t,r]=s.useState(e),n=e||t;return s.useEffect((()=>{null==t&&(E+=1,r(`mui-${E}`))}),[t]),n}(e)};const I=function(e,t,r,n,o){return null};const M=function({controlled:e,default:t,name:r,state:n="value"}){const{current:o}=s.useRef(void 0!==e),[i,a]=s.useState(t);return[o?e:i,s.useCallback((e=>{o||a(e)}),[])]};var z=r(798),N=r(11467),G=r(18791);const B={configure:e=>{n.Z.configure(e)}}},58974:(e,t,r)=>{"use strict";r.d(t,{Z:()=>n});const n=r(73546).Z},798:(e,t,r)=>{"use strict";r.d(t,{Z:()=>i});var n=r(67294),o=r(73546);const i=function(e){const t=n.useRef(e);return(0,o.Z)((()=>{t.current=e})),n.useCallback(((...e)=>(0,t.current)(...e)),[])}},11467:(e,t,r)=>{"use strict";r.d(t,{Z:()=>i});var n=r(67294),o=r(7960);const i=function(...e){return n.useMemo((()=>e.every((e=>null==e))?null:t=>{e.forEach((e=>{(0,o.Z)(e,t)}))}),e)}},18791:(e,t,r)=>{"use strict";r.d(t,{Z:()=>f});var n=r(67294);let o,i=!0,a=!1;const s={text:!0,search:!0,url:!0,tel:!0,email:!0,password:!0,number:!0,date:!0,month:!0,week:!0,time:!0,datetime:!0,"datetime-local":!0};function c(e){e.metaKey||e.altKey||e.ctrlKey||(i=!0)}function l(){i=!1}function u(){"hidden"===this.visibilityState&&a&&(i=!0)}function d(e){const{target:t}=e;try{return t.matches(":focus-visible")}catch(r){}return i||function(e){const{type:t,tagName:r}=e;return!("INPUT"!==r||!s[t]||e.readOnly)||"TEXTAREA"===r&&!e.readOnly||!!e.isContentEditable}(t)}const f=function(){const e=n.useCallback((e=>{var t;null!=e&&((t=e.ownerDocument).addEventListener("keydown",c,!0),t.addEventListener("mousedown",l,!0),t.addEventListener("pointerdown",l,!0),t.addEventListener("touchstart",l,!0),t.addEventListener("visibilitychange",u,!0))}),[]),t=n.useRef(!1);return{isFocusVisibleRef:t,onFocus:function(e){return!!d(e)&&(t.current=!0,!0)},onBlur:function(){return!!t.current&&(a=!0,window.clearTimeout(o),o=window.setTimeout((()=>{a=!1}),100),t.current=!1,!0)},ref:e}}},62030:(e,t,r)=>{"use strict";r.d(t,{ZP:()=>b,Co:()=>v});var n=r(83117),o=r(67294),i=r(45042),a=/^((children|dangerouslySetInnerHTML|key|ref|autoFocus|defaultValue|defaultChecked|innerHTML|suppressContentEditableWarning|suppressHydrationWarning|valueLink|abbr|accept|acceptCharset|accessKey|action|allow|allowUserMedia|allowPaymentRequest|allowFullScreen|allowTransparency|alt|async|autoComplete|autoPlay|capture|cellPadding|cellSpacing|challenge|charSet|checked|cite|classID|className|cols|colSpan|content|contentEditable|contextMenu|controls|controlsList|coords|crossOrigin|data|dateTime|decoding|default|defer|dir|disabled|disablePictureInPicture|download|draggable|encType|enterKeyHint|form|formAction|formEncType|formMethod|formNoValidate|formTarget|frameBorder|headers|height|hidden|high|href|hrefLang|htmlFor|httpEquiv|id|inputMode|integrity|is|keyParams|keyType|kind|label|lang|list|loading|loop|low|marginHeight|marginWidth|max|maxLength|media|mediaGroup|method|min|minLength|multiple|muted|name|nonce|noValidate|open|optimum|pattern|placeholder|playsInline|poster|preload|profile|radioGroup|readOnly|referrerPolicy|rel|required|reversed|role|rows|rowSpan|sandbox|scope|scoped|scrolling|seamless|selected|shape|size|sizes|slot|span|spellCheck|src|srcDoc|srcLang|srcSet|start|step|style|summary|tabIndex|target|title|translate|type|useMap|value|width|wmode|wrap|about|datatype|inlist|prefix|property|resource|typeof|vocab|autoCapitalize|autoCorrect|autoSave|color|incremental|fallback|inert|itemProp|itemScope|itemType|itemID|itemRef|on|option|results|security|unselectable|accentHeight|accumulate|additive|alignmentBaseline|allowReorder|alphabetic|amplitude|arabicForm|ascent|attributeName|attributeType|autoReverse|azimuth|baseFrequency|baselineShift|baseProfile|bbox|begin|bias|by|calcMode|capHeight|clip|clipPathUnits|clipPath|clipRule|colorInterpolation|colorInterpolationFilters|colorProfile|colorRendering|contentScriptType|contentStyleType|cursor|cx|cy|d|decelerate|descent|diffuseConstant|direction|display|divisor|dominantBaseline|dur|dx|dy|edgeMode|elevation|enableBackground|end|exponent|externalResourcesRequired|fill|fillOpacity|fillRule|filter|filterRes|filterUnits|floodColor|floodOpacity|focusable|fontFamily|fontSize|fontSizeAdjust|fontStretch|fontStyle|fontVariant|fontWeight|format|from|fr|fx|fy|g1|g2|glyphName|glyphOrientationHorizontal|glyphOrientationVertical|glyphRef|gradientTransform|gradientUnits|hanging|horizAdvX|horizOriginX|ideographic|imageRendering|in|in2|intercept|k|k1|k2|k3|k4|kernelMatrix|kernelUnitLength|kerning|keyPoints|keySplines|keyTimes|lengthAdjust|letterSpacing|lightingColor|limitingConeAngle|local|markerEnd|markerMid|markerStart|markerHeight|markerUnits|markerWidth|mask|maskContentUnits|maskUnits|mathematical|mode|numOctaves|offset|opacity|operator|order|orient|orientation|origin|overflow|overlinePosition|overlineThickness|panose1|paintOrder|pathLength|patternContentUnits|patternTransform|patternUnits|pointerEvents|points|pointsAtX|pointsAtY|pointsAtZ|preserveAlpha|preserveAspectRatio|primitiveUnits|r|radius|refX|refY|renderingIntent|repeatCount|repeatDur|requiredExtensions|requiredFeatures|restart|result|rotate|rx|ry|scale|seed|shapeRendering|slope|spacing|specularConstant|specularExponent|speed|spreadMethod|startOffset|stdDeviation|stemh|stemv|stitchTiles|stopColor|stopOpacity|strikethroughPosition|strikethroughThickness|string|stroke|strokeDasharray|strokeDashoffset|strokeLinecap|strokeLinejoin|strokeMiterlimit|strokeOpacity|strokeWidth|surfaceScale|systemLanguage|tableValues|targetX|targetY|textAnchor|textDecoration|textRendering|textLength|to|transform|u1|u2|underlinePosition|underlineThickness|unicode|unicodeBidi|unicodeRange|unitsPerEm|vAlphabetic|vHanging|vIdeographic|vMathematical|values|vectorEffect|version|vertAdvY|vertOriginX|vertOriginY|viewBox|viewTarget|visibility|widths|wordSpacing|writingMode|x|xHeight|x1|x2|xChannelSelector|xlinkActuate|xlinkArcrole|xlinkHref|xlinkRole|xlinkShow|xlinkTitle|xlinkType|xmlBase|xmlns|xmlnsXlink|xmlLang|xmlSpace|y|y1|y2|yChannelSelector|z|zoomAndPan|for|class|autofocus)|(([Dd][Aa][Tt][Aa]|[Aa][Rr][Ii][Aa]|x)-.*))$/,s=(0,i.Z)((function(e){return a.test(e)||111===e.charCodeAt(0)&&110===e.charCodeAt(1)&&e.charCodeAt(2)<91})),c=r(75260);var l=function(e,t,r){var n=e.key+"-"+t.name;!1===r&&void 0===e.registered[n]&&(e.registered[n]=t.styles)},u=r(48137),d=r(27278),f=s,p=function(e){return"theme"!==e},m=function(e){return"string"==typeof e&&e.charCodeAt(0)>96?f:p},h=function(e,t,r){var n;if(t){var o=t.shouldForwardProp;n=e.__emotion_forwardProp&&o?function(t){return e.__emotion_forwardProp(t)&&o(t)}:o}return"function"!=typeof n&&r&&(n=e.__emotion_forwardProp),n},g=function(e){var t=e.cache,r=e.serialized,n=e.isStringTag;return l(t,r,n),(0,d.L)((function(){return function(e,t,r){l(e,t,r);var n=e.key+"-"+t.name;if(void 0===e.inserted[t.name]){var o=t;do{e.insert(t===o?"."+n:"",o,e.sheet,!0),o=o.next}while(void 0!==o)}}(t,r,n)})),null},y=function e(t,r){var i,a,s=t.__emotion_real===t,l=s&&t.__emotion_base||t;void 0!==r&&(i=r.label,a=r.target);var d=h(t,r,s),f=d||m(l),p=!f("as");return function(){var y=arguments,b=s&&void 0!==t.__emotion_styles?t.__emotion_styles.slice(0):[];if(void 0!==i&&b.push("label:"+i+";"),null==y[0]||void 0===y[0].raw)b.push.apply(b,y);else{0,b.push(y[0][0]);for(var v=y.length,x=1;x{Array.isArray(e.__emotion_styles)&&(e.__emotion_styles=t(e.__emotion_styles))}},95408:(e,t,r)=>{"use strict";r.d(t,{L7:()=>c,P$:()=>u,VO:()=>o,W8:()=>s,dt:()=>l,k9:()=>a});var n=r(59766);const o={xs:0,sm:600,md:900,lg:1200,xl:1536},i={keys:["xs","sm","md","lg","xl"],up:e=>`@media (min-width:${o[e]}px)`};function a(e,t,r){const n=e.theme||{};if(Array.isArray(t)){const e=n.breakpoints||i;return t.reduce(((n,o,i)=>(n[e.up(e.keys[i])]=r(t[i]),n)),{})}if("object"==typeof t){const e=n.breakpoints||i;return Object.keys(t).reduce(((n,i)=>{if(-1!==Object.keys(e.values||o).indexOf(i)){n[e.up(i)]=r(t[i],i)}else{const e=i;n[e]=t[e]}return n}),{})}return r(t)}function s(e={}){var t;return(null==(t=e.keys)?void 0:t.reduce(((t,r)=>(t[e.up(r)]={},t)),{}))||{}}function c(e,t){return e.reduce(((e,t)=>{const r=e[t];return(!r||0===Object.keys(r).length)&&delete e[t],e}),t)}function l(e,...t){const r=s(e),o=[r,...t].reduce(((e,t)=>(0,n.Z)(e,t)),{});return c(Object.keys(r),o)}function u({values:e,breakpoints:t,base:r}){const n=r||function(e,t){if("object"!=typeof e)return{};const r={},n=Object.keys(t);return Array.isArray(e)?n.forEach(((t,n)=>{n{null!=e[t]&&(r[t]=!0)})),r}(e,t),o=Object.keys(n);if(0===o.length)return e;let i;return o.reduce(((t,r,n)=>(Array.isArray(e)?(t[r]=null!=e[n]?e[n]:e[i],i=n):"object"==typeof e?(t[r]=null!=e[r]?e[r]:e[i],i=r):t[r]=e,t)),{})}},41796:(e,t,r)=>{"use strict";r.d(t,{$n:()=>d,Fq:()=>l,_j:()=>u,mi:()=>c});var n=r(71387);function o(e,t=0,r=1){return Math.min(Math.max(t,e),r)}function i(e){if(e.type)return e;if("#"===e.charAt(0))return i(function(e){e=e.slice(1);const t=new RegExp(`.{1,${e.length>=6?2:1}}`,"g");let r=e.match(t);return r&&1===r[0].length&&(r=r.map((e=>e+e))),r?`rgb${4===r.length?"a":""}(${r.map(((e,t)=>t<3?parseInt(e,16):Math.round(parseInt(e,16)/255*1e3)/1e3)).join(", ")})`:""}(e));const t=e.indexOf("("),r=e.substring(0,t);if(-1===["rgb","rgba","hsl","hsla","color"].indexOf(r))throw new Error((0,n.Z)(9,e));let o,a=e.substring(t+1,e.length-1);if("color"===r){if(a=a.split(" "),o=a.shift(),4===a.length&&"/"===a[3].charAt(0)&&(a[3]=a[3].slice(1)),-1===["srgb","display-p3","a98-rgb","prophoto-rgb","rec-2020"].indexOf(o))throw new Error((0,n.Z)(10,o))}else a=a.split(",");return a=a.map((e=>parseFloat(e))),{type:r,values:a,colorSpace:o}}function a(e){const{type:t,colorSpace:r}=e;let{values:n}=e;return-1!==t.indexOf("rgb")?n=n.map(((e,t)=>t<3?parseInt(e,10):e)):-1!==t.indexOf("hsl")&&(n[1]=`${n[1]}%`,n[2]=`${n[2]}%`),n=-1!==t.indexOf("color")?`${r} ${n.join(" ")}`:`${n.join(", ")}`,`${t}(${n})`}function s(e){let t="hsl"===(e=i(e)).type||"hsla"===e.type?i(function(e){e=i(e);const{values:t}=e,r=t[0],n=t[1]/100,o=t[2]/100,s=n*Math.min(o,1-o),c=(e,t=(e+r/30)%12)=>o-s*Math.max(Math.min(t-3,9-t,1),-1);let l="rgb";const u=[Math.round(255*c(0)),Math.round(255*c(8)),Math.round(255*c(4))];return"hsla"===e.type&&(l+="a",u.push(t[3])),a({type:l,values:u})}(e)).values:e.values;return t=t.map((t=>("color"!==e.type&&(t/=255),t<=.03928?t/12.92:((t+.055)/1.055)**2.4))),Number((.2126*t[0]+.7152*t[1]+.0722*t[2]).toFixed(3))}function c(e,t){const r=s(e),n=s(t);return(Math.max(r,n)+.05)/(Math.min(r,n)+.05)}function l(e,t){return e=i(e),t=o(t),"rgb"!==e.type&&"hsl"!==e.type||(e.type+="a"),"color"===e.type?e.values[3]=`/${t}`:e.values[3]=t,a(e)}function u(e,t){if(e=i(e),t=o(t),-1!==e.type.indexOf("hsl"))e.values[2]*=1-t;else if(-1!==e.type.indexOf("rgb")||-1!==e.type.indexOf("color"))for(let r=0;r<3;r+=1)e.values[r]*=1-t;return a(e)}function d(e,t){if(e=i(e),t=o(t),-1!==e.type.indexOf("hsl"))e.values[2]+=(100-e.values[2])*t;else if(-1!==e.type.indexOf("rgb"))for(let r=0;r<3;r+=1)e.values[r]+=(255-e.values[r])*t;else if(-1!==e.type.indexOf("color"))for(let r=0;r<3;r+=1)e.values[r]+=(1-e.values[r])*t;return a(e)}},70182:(e,t,r)=>{"use strict";r.d(t,{ZP:()=>v,x9:()=>g});var n=r(80102),o=r(83117),i=r(62030),a=r(66500),s=r(14142);const c=["variant"];function l(e){return 0===e.length}function u(e){const{variant:t}=e,r=(0,n.Z)(e,c);let o=t||"";return Object.keys(r).sort().forEach((t=>{o+="color"===t?l(o)?e[t]:(0,s.Z)(e[t]):`${l(o)?t:(0,s.Z)(t)}${(0,s.Z)(e[t].toString())}`})),o}var d=r(86523);const f=["name","slot","skipVariantsResolver","skipSx","overridesResolver"];const p=(e,t)=>t.components&&t.components[e]&&t.components[e].styleOverrides?t.components[e].styleOverrides:null,m=(e,t)=>{let r=[];t&&t.components&&t.components[e]&&t.components[e].variants&&(r=t.components[e].variants);const n={};return r.forEach((e=>{const t=u(e.props);n[t]=e.style})),n},h=(e,t,r,n)=>{var o,i;const{ownerState:a={}}=e,s=[],c=null==r||null==(o=r.components)||null==(i=o[n])?void 0:i.variants;return c&&c.forEach((r=>{let n=!0;Object.keys(r.props).forEach((t=>{a[t]!==r.props[t]&&e[t]!==r.props[t]&&(n=!1)})),n&&s.push(t[u(r.props)])})),s};function g(e){return"ownerState"!==e&&"theme"!==e&&"sx"!==e&&"as"!==e}const y=(0,a.Z)();function b({defaultTheme:e,theme:t,themeId:r}){return n=t,0===Object.keys(n).length?e:t[r]||t;var n}function v(e={}){const{themeId:t,defaultTheme:r=y,rootShouldForwardProp:a=g,slotShouldForwardProp:s=g}=e,c=e=>(0,d.Z)((0,o.Z)({},e,{theme:b((0,o.Z)({},e,{defaultTheme:r,themeId:t}))}));return c.__mui_systemSx=!0,(e,l={})=>{(0,i.Co)(e,(e=>e.filter((e=>!(null!=e&&e.__mui_systemSx)))));const{name:u,slot:d,skipVariantsResolver:y,skipSx:v,overridesResolver:x}=l,k=(0,n.Z)(l,f),w=void 0!==y?y:d&&"Root"!==d||!1,Z=v||!1;let S=g;"Root"===d?S=a:d?S=s:function(e){return"string"==typeof e&&e.charCodeAt(0)>96}(e)&&(S=void 0);const $=(0,i.ZP)(e,(0,o.Z)({shouldForwardProp:S,label:undefined},k)),A=(n,...i)=>{const a=i?i.map((e=>"function"==typeof e&&e.__emotion_real!==e?n=>e((0,o.Z)({},n,{theme:b((0,o.Z)({},n,{defaultTheme:r,themeId:t}))})):e)):[];let s=n;u&&x&&a.push((e=>{const n=b((0,o.Z)({},e,{defaultTheme:r,themeId:t})),i=p(u,n);if(i){const t={};return Object.entries(i).forEach((([r,i])=>{t[r]="function"==typeof i?i((0,o.Z)({},e,{theme:n})):i})),x(e,t)}return null})),u&&!w&&a.push((e=>{const n=b((0,o.Z)({},e,{defaultTheme:r,themeId:t}));return h(e,m(u,n),n,u)})),Z||a.push(c);const l=a.length-i.length;if(Array.isArray(n)&&l>0){const e=new Array(l).fill("");s=[...n,...e],s.raw=[...n.raw,...e]}else"function"==typeof n&&n.__emotion_real!==n&&(s=e=>n((0,o.Z)({},e,{theme:b((0,o.Z)({},e,{defaultTheme:r,themeId:t}))})));const d=$(s,...a);return e.muiName&&(d.muiName=e.muiName),d};return $.withConfig&&(A.withConfig=$.withConfig),A}}},66500:(e,t,r)=>{"use strict";r.d(t,{Z:()=>p});var n=r(83117),o=r(80102),i=r(59766);const a=["values","unit","step"],s=e=>{const t=Object.keys(e).map((t=>({key:t,val:e[t]})))||[];return t.sort(((e,t)=>e.val-t.val)),t.reduce(((e,t)=>(0,n.Z)({},e,{[t.key]:t.val})),{})};const c={borderRadius:4};var l=r(98700);var u=r(86523),d=r(44920);const f=["breakpoints","palette","spacing","shape"];const p=function(e={},...t){const{breakpoints:r={},palette:p={},spacing:m,shape:h={}}=e,g=(0,o.Z)(e,f),y=function(e){const{values:t={xs:0,sm:600,md:900,lg:1200,xl:1536},unit:r="px",step:i=5}=e,c=(0,o.Z)(e,a),l=s(t),u=Object.keys(l);function d(e){return`@media (min-width:${"number"==typeof t[e]?t[e]:e}${r})`}function f(e){return`@media (max-width:${("number"==typeof t[e]?t[e]:e)-i/100}${r})`}function p(e,n){const o=u.indexOf(n);return`@media (min-width:${"number"==typeof t[e]?t[e]:e}${r}) and (max-width:${(-1!==o&&"number"==typeof t[u[o]]?t[u[o]]:n)-i/100}${r})`}return(0,n.Z)({keys:u,values:l,up:d,down:f,between:p,only:function(e){return u.indexOf(e)+1(0===e.length?[1]:e).map((e=>{const r=t(e);return"number"==typeof r?`${r}px`:r})).join(" ");return r.mui=!0,r}(m);let v=(0,i.Z)({breakpoints:y,direction:"ltr",components:{},palette:(0,n.Z)({mode:"light"},p),spacing:b,shape:(0,n.Z)({},c,h)},g);return v=t.reduce(((e,t)=>(0,i.Z)(e,t)),v),v.unstable_sxConfig=(0,n.Z)({},d.Z,null==g?void 0:g.unstable_sxConfig),v.unstable_sx=function(e){return(0,u.Z)({sx:e,theme:this})},v}},47730:(e,t,r)=>{"use strict";r.d(t,{Z:()=>o});var n=r(59766);const o=function(e,t){return t?(0,n.Z)(e,t,{clone:!1}):e}},98700:(e,t,r)=>{"use strict";r.d(t,{hB:()=>m,eI:()=>p,NA:()=>h,e6:()=>b,o3:()=>v});var n=r(95408),o=r(54844),i=r(47730);const a={m:"margin",p:"padding"},s={t:"Top",r:"Right",b:"Bottom",l:"Left",x:["Left","Right"],y:["Top","Bottom"]},c={marginX:"mx",marginY:"my",paddingX:"px",paddingY:"py"},l=function(e){const t={};return r=>(void 0===t[r]&&(t[r]=e(r)),t[r])}((e=>{if(e.length>2){if(!c[e])return[e];e=c[e]}const[t,r]=e.split(""),n=a[t],o=s[r]||"";return Array.isArray(o)?o.map((e=>n+e)):[n+o]})),u=["m","mt","mr","mb","ml","mx","my","margin","marginTop","marginRight","marginBottom","marginLeft","marginX","marginY","marginInline","marginInlineStart","marginInlineEnd","marginBlock","marginBlockStart","marginBlockEnd"],d=["p","pt","pr","pb","pl","px","py","padding","paddingTop","paddingRight","paddingBottom","paddingLeft","paddingX","paddingY","paddingInline","paddingInlineStart","paddingInlineEnd","paddingBlock","paddingBlockStart","paddingBlockEnd"],f=[...u,...d];function p(e,t,r,n){var i;const a=null!=(i=(0,o.DW)(e,t,!1))?i:r;return"number"==typeof a?e=>"string"==typeof e?e:a*e:Array.isArray(a)?e=>"string"==typeof e?e:a[e]:"function"==typeof a?a:()=>{}}function m(e){return p(e,"spacing",8)}function h(e,t){if("string"==typeof t||null==t)return t;const r=e(Math.abs(t));return t>=0?r:"number"==typeof r?-r:`-${r}`}function g(e,t,r,o){if(-1===t.indexOf(r))return null;const i=function(e,t){return r=>e.reduce(((e,n)=>(e[n]=h(t,r),e)),{})}(l(r),o),a=e[r];return(0,n.k9)(e,a,i)}function y(e,t){const r=m(e.theme);return Object.keys(e).map((n=>g(e,t,n,r))).reduce(i.Z,{})}function b(e){return y(e,u)}function v(e){return y(e,d)}function x(e){return y(e,f)}b.propTypes={},b.filterProps=u,v.propTypes={},v.filterProps=d,x.propTypes={},x.filterProps=f},54844:(e,t,r)=>{"use strict";r.d(t,{DW:()=>i,Jq:()=>a,ZP:()=>s});var n=r(14142),o=r(95408);function i(e,t,r=!0){if(!t||"string"!=typeof t)return null;if(e&&e.vars&&r){const r=`vars.${t}`.split(".").reduce(((e,t)=>e&&e[t]?e[t]:null),e);if(null!=r)return r}return t.split(".").reduce(((e,t)=>e&&null!=e[t]?e[t]:null),e)}function a(e,t,r,n=r){let o;return o="function"==typeof e?e(r):Array.isArray(e)?e[r]||n:i(e,r)||n,t&&(o=t(o,n,e)),o}const s=function(e){const{prop:t,cssProperty:r=e.prop,themeKey:s,transform:c}=e,l=e=>{if(null==e[t])return null;const l=e[t],u=i(e.theme,s)||{};return(0,o.k9)(e,l,(e=>{let o=a(u,c,e);return e===o&&"string"==typeof e&&(o=a(u,c,`${t}${"default"===e?"":(0,n.Z)(e)}`,e)),!1===r?o:{[r]:o}}))};return l.propTypes={},l.filterProps=[t],l}},44920:(e,t,r)=>{"use strict";r.d(t,{Z:()=>T});var n=r(98700),o=r(54844),i=r(47730);const a=function(...e){const t=e.reduce(((e,t)=>(t.filterProps.forEach((r=>{e[r]=t})),e)),{}),r=e=>Object.keys(e).reduce(((r,n)=>t[n]?(0,i.Z)(r,t[n](e)):r),{});return r.propTypes={},r.filterProps=e.reduce(((e,t)=>e.concat(t.filterProps)),[]),r};var s=r(95408);function c(e){return"number"!=typeof e?e:`${e}px solid`}const l=(0,o.ZP)({prop:"border",themeKey:"borders",transform:c}),u=(0,o.ZP)({prop:"borderTop",themeKey:"borders",transform:c}),d=(0,o.ZP)({prop:"borderRight",themeKey:"borders",transform:c}),f=(0,o.ZP)({prop:"borderBottom",themeKey:"borders",transform:c}),p=(0,o.ZP)({prop:"borderLeft",themeKey:"borders",transform:c}),m=(0,o.ZP)({prop:"borderColor",themeKey:"palette"}),h=(0,o.ZP)({prop:"borderTopColor",themeKey:"palette"}),g=(0,o.ZP)({prop:"borderRightColor",themeKey:"palette"}),y=(0,o.ZP)({prop:"borderBottomColor",themeKey:"palette"}),b=(0,o.ZP)({prop:"borderLeftColor",themeKey:"palette"}),v=e=>{if(void 0!==e.borderRadius&&null!==e.borderRadius){const t=(0,n.eI)(e.theme,"shape.borderRadius",4,"borderRadius"),r=e=>({borderRadius:(0,n.NA)(t,e)});return(0,s.k9)(e,e.borderRadius,r)}return null};v.propTypes={},v.filterProps=["borderRadius"];a(l,u,d,f,p,m,h,g,y,b,v);const x=e=>{if(void 0!==e.gap&&null!==e.gap){const t=(0,n.eI)(e.theme,"spacing",8,"gap"),r=e=>({gap:(0,n.NA)(t,e)});return(0,s.k9)(e,e.gap,r)}return null};x.propTypes={},x.filterProps=["gap"];const k=e=>{if(void 0!==e.columnGap&&null!==e.columnGap){const t=(0,n.eI)(e.theme,"spacing",8,"columnGap"),r=e=>({columnGap:(0,n.NA)(t,e)});return(0,s.k9)(e,e.columnGap,r)}return null};k.propTypes={},k.filterProps=["columnGap"];const w=e=>{if(void 0!==e.rowGap&&null!==e.rowGap){const t=(0,n.eI)(e.theme,"spacing",8,"rowGap"),r=e=>({rowGap:(0,n.NA)(t,e)});return(0,s.k9)(e,e.rowGap,r)}return null};w.propTypes={},w.filterProps=["rowGap"];a(x,k,w,(0,o.ZP)({prop:"gridColumn"}),(0,o.ZP)({prop:"gridRow"}),(0,o.ZP)({prop:"gridAutoFlow"}),(0,o.ZP)({prop:"gridAutoColumns"}),(0,o.ZP)({prop:"gridAutoRows"}),(0,o.ZP)({prop:"gridTemplateColumns"}),(0,o.ZP)({prop:"gridTemplateRows"}),(0,o.ZP)({prop:"gridTemplateAreas"}),(0,o.ZP)({prop:"gridArea"}));function Z(e,t){return"grey"===t?t:e}a((0,o.ZP)({prop:"color",themeKey:"palette",transform:Z}),(0,o.ZP)({prop:"bgcolor",cssProperty:"backgroundColor",themeKey:"palette",transform:Z}),(0,o.ZP)({prop:"backgroundColor",themeKey:"palette",transform:Z}));function S(e){return e<=1&&0!==e?100*e+"%":e}const $=(0,o.ZP)({prop:"width",transform:S}),A=e=>{if(void 0!==e.maxWidth&&null!==e.maxWidth){const t=t=>{var r,n,o;return{maxWidth:(null==(r=e.theme)||null==(n=r.breakpoints)||null==(o=n.values)?void 0:o[t])||s.VO[t]||S(t)}};return(0,s.k9)(e,e.maxWidth,t)}return null};A.filterProps=["maxWidth"];const O=(0,o.ZP)({prop:"minWidth",transform:S}),P=(0,o.ZP)({prop:"height",transform:S}),C=(0,o.ZP)({prop:"maxHeight",transform:S}),_=(0,o.ZP)({prop:"minHeight",transform:S}),T=((0,o.ZP)({prop:"size",cssProperty:"width",transform:S}),(0,o.ZP)({prop:"size",cssProperty:"height",transform:S}),a($,A,O,P,C,_,(0,o.ZP)({prop:"boxSizing"})),{border:{themeKey:"borders",transform:c},borderTop:{themeKey:"borders",transform:c},borderRight:{themeKey:"borders",transform:c},borderBottom:{themeKey:"borders",transform:c},borderLeft:{themeKey:"borders",transform:c},borderColor:{themeKey:"palette"},borderTopColor:{themeKey:"palette"},borderRightColor:{themeKey:"palette"},borderBottomColor:{themeKey:"palette"},borderLeftColor:{themeKey:"palette"},borderRadius:{themeKey:"shape.borderRadius",style:v},color:{themeKey:"palette",transform:Z},bgcolor:{themeKey:"palette",cssProperty:"backgroundColor",transform:Z},backgroundColor:{themeKey:"palette",transform:Z},p:{style:n.o3},pt:{style:n.o3},pr:{style:n.o3},pb:{style:n.o3},pl:{style:n.o3},px:{style:n.o3},py:{style:n.o3},padding:{style:n.o3},paddingTop:{style:n.o3},paddingRight:{style:n.o3},paddingBottom:{style:n.o3},paddingLeft:{style:n.o3},paddingX:{style:n.o3},paddingY:{style:n.o3},paddingInline:{style:n.o3},paddingInlineStart:{style:n.o3},paddingInlineEnd:{style:n.o3},paddingBlock:{style:n.o3},paddingBlockStart:{style:n.o3},paddingBlockEnd:{style:n.o3},m:{style:n.e6},mt:{style:n.e6},mr:{style:n.e6},mb:{style:n.e6},ml:{style:n.e6},mx:{style:n.e6},my:{style:n.e6},margin:{style:n.e6},marginTop:{style:n.e6},marginRight:{style:n.e6},marginBottom:{style:n.e6},marginLeft:{style:n.e6},marginX:{style:n.e6},marginY:{style:n.e6},marginInline:{style:n.e6},marginInlineStart:{style:n.e6},marginInlineEnd:{style:n.e6},marginBlock:{style:n.e6},marginBlockStart:{style:n.e6},marginBlockEnd:{style:n.e6},displayPrint:{cssProperty:!1,transform:e=>({"@media print":{display:e}})},display:{},overflow:{},textOverflow:{},visibility:{},whiteSpace:{},flexBasis:{},flexDirection:{},flexWrap:{},justifyContent:{},alignItems:{},alignContent:{},order:{},flex:{},flexGrow:{},flexShrink:{},alignSelf:{},justifyItems:{},justifySelf:{},gap:{style:x},rowGap:{style:w},columnGap:{style:k},gridColumn:{},gridRow:{},gridAutoFlow:{},gridAutoColumns:{},gridAutoRows:{},gridTemplateColumns:{},gridTemplateRows:{},gridTemplateAreas:{},gridArea:{},position:{},zIndex:{themeKey:"zIndex"},top:{},right:{},bottom:{},left:{},boxShadow:{themeKey:"shadows"},width:{transform:S},maxWidth:{style:A},minWidth:{transform:S},height:{transform:S},maxHeight:{transform:S},minHeight:{transform:S},boxSizing:{},fontFamily:{themeKey:"typography"},fontSize:{themeKey:"typography"},fontStyle:{themeKey:"typography"},fontWeight:{themeKey:"typography"},letterSpacing:{},textTransform:{},lineHeight:{},textAlign:{},typography:{cssProperty:!1,themeKey:"typography"}})},39707:(e,t,r)=>{"use strict";r.d(t,{Z:()=>l});var n=r(83117),o=r(80102),i=r(59766),a=r(44920);const s=["sx"],c=e=>{var t,r;const n={systemProps:{},otherProps:{}},o=null!=(t=null==e||null==(r=e.theme)?void 0:r.unstable_sxConfig)?t:a.Z;return Object.keys(e).forEach((t=>{o[t]?n.systemProps[t]=e[t]:n.otherProps[t]=e[t]})),n};function l(e){const{sx:t}=e,r=(0,o.Z)(e,s),{systemProps:a,otherProps:l}=c(r);let u;return u=Array.isArray(t)?[a,...t]:"function"==typeof t?(...e)=>{const r=t(...e);return(0,i.P)(r)?(0,n.Z)({},a,r):a}:(0,n.Z)({},a,t),(0,n.Z)({},l,{sx:u})}},86523:(e,t,r)=>{"use strict";r.d(t,{Z:()=>l});var n=r(14142),o=r(47730),i=r(54844),a=r(95408),s=r(44920);const c=function(){function e(e,t,r,o){const s={[e]:t,theme:r},c=o[e];if(!c)return{[e]:t};const{cssProperty:l=e,themeKey:u,transform:d,style:f}=c;if(null==t)return null;if("typography"===u&&"inherit"===t)return{[e]:t};const p=(0,i.DW)(r,u)||{};if(f)return f(s);return(0,a.k9)(s,t,(t=>{let r=(0,i.Jq)(p,d,t);return t===r&&"string"==typeof t&&(r=(0,i.Jq)(p,d,`${e}${"default"===t?"":(0,n.Z)(t)}`,t)),!1===l?r:{[l]:r}}))}return function t(r){var n;const{sx:i,theme:c={}}=r||{};if(!i)return null;const l=null!=(n=c.unstable_sxConfig)?n:s.Z;function u(r){let n=r;if("function"==typeof r)n=r(c);else if("object"!=typeof r)return r;if(!n)return null;const i=(0,a.W8)(c.breakpoints),s=Object.keys(i);let u=i;return Object.keys(n).forEach((r=>{const i=(s=n[r],d=c,"function"==typeof s?s(d):s);var s,d;if(null!=i)if("object"==typeof i)if(l[r])u=(0,o.Z)(u,e(r,i,c,l));else{const e=(0,a.k9)({theme:c},i,(e=>({[r]:e})));!function(...e){const t=e.reduce(((e,t)=>e.concat(Object.keys(t))),[]),r=new Set(t);return e.every((e=>r.size===Object.keys(e).length))}(e,i)?u=(0,o.Z)(u,e):u[r]=t({sx:i,theme:c})}else u=(0,o.Z)(u,e(r,i,c,l))})),(0,a.L7)(s,u)}return Array.isArray(i)?i.map(u):u(i)}}();c.filterProps=["sx"];const l=c},13264:(e,t,r)=>{"use strict";r.d(t,{Z:()=>n});const n=(0,r(70182).ZP)()},96682:(e,t,r)=>{"use strict";r.d(t,{Z:()=>a});var n=r(66500),o=r(34168);const i=(0,n.Z)();const a=function(e=i){return(0,o.Z)(e)}},20539:(e,t,r)=>{"use strict";r.d(t,{Z:()=>o});var n=r(47925);function o(e){const{theme:t,name:r,props:o}=e;return t&&t.components&&t.components[r]&&t.components[r].defaultProps?(0,n.Z)(t.components[r].defaultProps,o):o}},29628:(e,t,r)=>{"use strict";r.d(t,{Z:()=>i});var n=r(20539),o=r(96682);function i({props:e,name:t,defaultTheme:r,themeId:i}){let a=(0,o.Z)(r);i&&(a=a[i]||a);return(0,n.Z)({theme:a,name:t,props:e})}},34168:(e,t,r)=>{"use strict";r.d(t,{Z:()=>i});var n=r(67294),o=r(75260);const i=function(e=null){const t=n.useContext(o.T);return t&&(r=t,0!==Object.keys(r).length)?t:e;var r}},37078:(e,t,r)=>{"use strict";r.d(t,{Z:()=>o});const n=e=>e,o=(()=>{let e=n;return{configure(t){e=t},generate:t=>e(t),reset(){e=n}}})()},14142:(e,t,r)=>{"use strict";r.d(t,{Z:()=>o});var n=r(71387);function o(e){if("string"!=typeof e)throw new Error((0,n.Z)(7));return e.charAt(0).toUpperCase()+e.slice(1)}},94780:(e,t,r)=>{"use strict";function n(e,t,r=void 0){const n={};return Object.keys(e).forEach((o=>{n[o]=e[o].reduce(((e,n)=>{if(n){const o=t(n);""!==o&&e.push(o),r&&r[n]&&e.push(r[n])}return e}),[]).join(" ")})),n}r.d(t,{Z:()=>n})},59766:(e,t,r)=>{"use strict";r.d(t,{P:()=>o,Z:()=>a});var n=r(83117);function o(e){return null!==e&&"object"==typeof e&&e.constructor===Object}function i(e){if(!o(e))return e;const t={};return Object.keys(e).forEach((r=>{t[r]=i(e[r])})),t}function a(e,t,r={clone:!0}){const s=r.clone?(0,n.Z)({},e):e;return o(e)&&o(t)&&Object.keys(t).forEach((n=>{"__proto__"!==n&&(o(t[n])&&n in e&&o(e[n])?s[n]=a(e[n],t[n],r):r.clone?s[n]=o(t[n])?i(t[n]):t[n]:s[n]=t[n])})),s}},71387:(e,t,r)=>{"use strict";function n(e){let t="https://mui.com/production-error/?code="+e;for(let r=1;rn})},34867:(e,t,r)=>{"use strict";r.d(t,{Z:()=>i});var n=r(37078);const o={active:"active",checked:"checked",completed:"completed",disabled:"disabled",readOnly:"readOnly",error:"error",expanded:"expanded",focused:"focused",focusVisible:"focusVisible",required:"required",selected:"selected"};function i(e,t,r="Mui"){const i=o[t];return i?`${r}-${i}`:`${n.Z.generate(e)}-${t}`}},1588:(e,t,r)=>{"use strict";r.d(t,{Z:()=>o});var n=r(34867);function o(e,t,r="Mui"){const o={};return t.forEach((t=>{o[t]=(0,n.Z)(e,t,r)})),o}},18719:(e,t,r)=>{"use strict";r.d(t,{Z:()=>o});var n=r(67294);function o(e,t){return n.isValidElement(e)&&-1!==t.indexOf(e.type.muiName)}},47925:(e,t,r)=>{"use strict";r.d(t,{Z:()=>o});var n=r(83117);function o(e,t){const r=(0,n.Z)({},t);return Object.keys(e).forEach((i=>{if(i.toString().match(/^(components|slots)$/))r[i]=(0,n.Z)({},e[i],r[i]);else if(i.toString().match(/^(componentsProps|slotProps)$/)){const a=e[i]||{},s=t[i];r[i]={},s&&Object.keys(s)?a&&Object.keys(a)?(r[i]=(0,n.Z)({},s),Object.keys(a).forEach((e=>{r[i][e]=o(a[e],s[e])}))):r[i]=s:r[i]=a}else void 0===r[i]&&(r[i]=e[i])})),r}},7960:(e,t,r)=>{"use strict";function n(e,t){"function"==typeof e?e(t):e&&(e.current=t)}r.d(t,{Z:()=>n})},73546:(e,t,r)=>{"use strict";r.d(t,{Z:()=>o});var n=r(67294);const o="undefined"!=typeof window?n.useLayoutEffect:n.useEffect},86010:(e,t,r)=>{"use strict";function n(e){var t,r,o="";if("string"==typeof e||"number"==typeof e)o+=e;else if("object"==typeof e)if(Array.isArray(e))for(t=0;to});const o=function(){for(var e,t,r=0,o="";r{e.exports=function(e){return e&&e.__esModule?e:{default:e}},e.exports.__esModule=!0,e.exports.default=e.exports}}]); \ No newline at end of file diff --git a/assets/js/3323.3aa8447b.js.LICENSE.txt b/assets/js/3323.3aa8447b.js.LICENSE.txt deleted file mode 100644 index e053db672..000000000 --- a/assets/js/3323.3aa8447b.js.LICENSE.txt +++ /dev/null @@ -1,7 +0,0 @@ -/** - * @mui/styled-engine v5.13.2 - * - * @license MIT - * 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/334da572.22ebc5a0.js b/assets/js/334da572.22ebc5a0.js new file mode 100644 index 000000000..418ba6dd8 --- /dev/null +++ b/assets/js/334da572.22ebc5a0.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([["2654"],{78927:function(e){e.exports=JSON.parse('{"categoryGeneratedIndex":{"title":"Mobile","slug":"/category/mobile","permalink":"/docs/category/mobile","sidebar":"userSidebar","navigation":{"previous":{"title":"WiFi","permalink":"/docs/user/hardware/compatibility/wifi"},"next":{"title":"Android","permalink":"/docs/user/hardware/mobile/android"}}}}')}}]); \ No newline at end of file diff --git a/assets/js/334da572.80ca41d4.js b/assets/js/334da572.80ca41d4.js deleted file mode 100644 index 4ff35d188..000000000 --- a/assets/js/334da572.80ca41d4.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[5900],{70542:e=>{e.exports=JSON.parse('{"categoryGeneratedIndex":{"title":"Mobile","slug":"/category/mobile","permalink":"/docs/category/mobile","sidebar":"userSidebar","navigation":{"previous":{"title":"WiFi","permalink":"/docs/user/hardware/compatibility/wifi"},"next":{"title":"Android","permalink":"/docs/user/hardware/mobile/android"}}}}')}}]); \ No newline at end of file diff --git a/assets/js/33f669c7.8f15dd3d.js b/assets/js/33f669c7.8f15dd3d.js deleted file mode 100644 index d7cc1beae..000000000 --- a/assets/js/33f669c7.8f15dd3d.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[5854],{50536:e=>{e.exports=JSON.parse('{"categoryGeneratedIndex":{"title":"Software","slug":"/category/software","permalink":"/docs/category/software","sidebar":"userSidebar","navigation":{"previous":{"title":"Privacy Policy","permalink":"/docs/user/privacy"},"next":{"title":"Camera","permalink":"/docs/category/camera"}}}}')}}]); \ No newline at end of file diff --git a/assets/js/33f669c7.bb082428.js b/assets/js/33f669c7.bb082428.js new file mode 100644 index 000000000..201463110 --- /dev/null +++ b/assets/js/33f669c7.bb082428.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([["3551"],{22:function(e){e.exports=JSON.parse('{"categoryGeneratedIndex":{"title":"Software","slug":"/category/software","permalink":"/docs/category/software","sidebar":"userSidebar","navigation":{"previous":{"title":"Privacy Policy","permalink":"/docs/user/privacy"},"next":{"title":"Camera","permalink":"/docs/category/camera"}}}}')}}]); \ No newline at end of file diff --git a/assets/js/33fc5bb8.5866e2e2.js b/assets/js/33fc5bb8.5866e2e2.js deleted file mode 100644 index 2cd57782f..000000000 --- a/assets/js/33fc5bb8.5866e2e2.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[8355],{37678:(e,t,s)=>{s.r(t),s.d(t,{default:()=>j});s(67294);var a=s(36905),n=s(96984),r=s(50563),o=s(77514),i=s(38208),l=s(58112),h=s(50429),u=s(17091),g=s(62362),c=s(82957),p=s(68588),d=s(85893);function m(e){let{author:t}=e;const s=(0,o.ds)(t);return(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(n.d,{title:s}),(0,d.jsx)(g.Z,{tag:"blog_authors_posts"})]})}function b(){const{authorsListPath:e}=(0,l.wj)();return(0,d.jsx)(i.Z,{href:e,children:(0,d.jsx)(o.fw,{})})}function x(e){let{author:t,items:s,sidebar:a,listMetadata:n}=e;return(0,d.jsxs)(h.Z,{sidebar:a,children:[(0,d.jsxs)("header",{className:"margin-bottom--xl",children:[(0,d.jsx)(p.Z,{as:"h1",author:t}),t.description&&(0,d.jsx)("p",{children:t.description}),(0,d.jsx)(b,{})]}),(0,d.jsx)("hr",{}),(0,d.jsx)(c.Z,{items:s}),(0,d.jsx)(u.Z,{metadata:n})]})}function j(e){return(0,d.jsxs)(n.FG,{className:(0,a.Z)(r.k.wrapper.blogPages,r.k.page.blogAuthorsPostsPage),children:[(0,d.jsx)(m,{...e}),(0,d.jsx)(x,{...e})]})}},17091:(e,t,s)=>{s.d(t,{Z:()=>o});s(67294);var a=s(55361),n=s(60968),r=s(85893);function o(e){const{metadata:t}=e,{previousPage:s,nextPage:o}=t;return(0,r.jsxs)("nav",{className:"pagination-nav","aria-label":(0,a.I)({id:"theme.blog.paginator.navAriaLabel",message:"Blog list page navigation",description:"The ARIA label for the blog pagination"}),children:[s&&(0,r.jsx)(n.Z,{permalink:s,title:(0,r.jsx)(a.Z,{id:"theme.blog.paginator.newerEntries",description:"The label used to navigate to the newer blog posts page (previous page)",children:"Newer entries"})}),o&&(0,r.jsx)(n.Z,{permalink:o,title:(0,r.jsx)(a.Z,{id:"theme.blog.paginator.olderEntries",description:"The label used to navigate to the older blog posts page (next page)",children:"Older entries"}),isNext:!0})]})}},82957:(e,t,s)=>{s.d(t,{Z:()=>o});s(67294);var a=s(58112),n=s(81782),r=s(85893);function o(e){let{items:t,component:s=n.Z}=e;return(0,r.jsx)(r.Fragment,{children:t.map((e=>{let{content:t}=e;return(0,r.jsx)(a.n4,{content:t,children:(0,r.jsx)(s,{children:(0,r.jsx)(t,{})})},t.metadata.permalink)}))})}},77514:(e,t,s)=>{s.d(t,{HV:()=>h,Wi:()=>i,ds:()=>l,fw:()=>u});s(67294);var a=s(55361),n=s(59676),r=s(85893);function o(){const{selectMessage:e}=(0,n.c)();return t=>e(t,(0,a.I)({id:"theme.blog.post.plurals",description:'Pluralized label for "{count} posts". 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 post|{count} posts"},{count:t}))}function i(e){const t=o();return(0,a.I)({id:"theme.blog.tagTitle",description:"The title of the page for a blog tag",message:'{nPosts} tagged with "{tagName}"'},{nPosts:t(e.count),tagName:e.label})}function l(e){const t=o();return(0,a.I)({id:"theme.blog.author.pageTitle",description:"The title of the page for a blog author",message:"{authorName} - {nPosts}"},{nPosts:t(e.count),authorName:e.name||e.key})}const h=()=>(0,a.I)({id:"theme.blog.authorsList.pageTitle",message:"Authors",description:"The title of the authors page"});function u(){return(0,r.jsx)(a.Z,{id:"theme.blog.authorsList.viewAll",description:"The label of the link targeting the blog authors page",children:"View all authors"})}}}]); \ No newline at end of file diff --git a/assets/js/33fc5bb8.fd781283.js b/assets/js/33fc5bb8.fd781283.js new file mode 100644 index 000000000..f9d4e68f5 --- /dev/null +++ b/assets/js/33fc5bb8.fd781283.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([["9348"],{78979:function(e,t,r){r.r(t),r.d(t,{default:function(){return j}});var n=r(85893);r(67294);var s=r(74904),a=r(81921),l=r(50490),o=r(20332),i=r(27544),u=r(75700),c=r(30928),d=r(40043),h=r(49868),g=r(30955),m=r(91941);function p(e){let{author:t}=e,r=(0,o.ds)(t);return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(a.d,{title:r}),(0,n.jsx)(h.Z,{tag:"blog_authors_posts"})]})}function x(){let{authorsListPath:e}=(0,u.wj)();return(0,n.jsx)(i.Z,{href:e,children:(0,n.jsx)(o.fw,{})})}function f(e){let{author:t,items:r,sidebar:s,listMetadata:a}=e;return(0,n.jsxs)(c.Z,{sidebar:s,children:[(0,n.jsxs)("header",{className:"margin-bottom--xl",children:[(0,n.jsx)(m.Z,{as:"h1",author:t}),t.description&&(0,n.jsx)("p",{children:t.description}),(0,n.jsx)(x,{})]}),0===r.length?(0,n.jsx)("p",{children:(0,n.jsx)(o.J$,{})}):(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)("hr",{}),(0,n.jsx)(g.Z,{items:r}),(0,n.jsx)(d.Z,{metadata:a})]})]})}function j(e){return(0,n.jsxs)(a.FG,{className:(0,s.Z)(l.k.wrapper.blogPages,l.k.page.blogAuthorsPostsPage),children:[(0,n.jsx)(p,{...e}),(0,n.jsx)(f,{...e})]})}},40043:function(e,t,r){r.d(t,{Z:function(){return l}});var n=r(85893);r(67294);var s=r(1822),a=r(15779);function l(e){let{metadata:t}=e,{previousPage:r,nextPage:l}=t;return(0,n.jsxs)("nav",{className:"pagination-nav","aria-label":(0,s.I)({id:"theme.blog.paginator.navAriaLabel",message:"Blog list page navigation",description:"The ARIA label for the blog pagination"}),children:[r&&(0,n.jsx)(a.Z,{permalink:r,title:(0,n.jsx)(s.Z,{id:"theme.blog.paginator.newerEntries",description:"The label used to navigate to the newer blog posts page (previous page)",children:"Newer entries"})}),l&&(0,n.jsx)(a.Z,{permalink:l,title:(0,n.jsx)(s.Z,{id:"theme.blog.paginator.olderEntries",description:"The label used to navigate to the older blog posts page (next page)",children:"Older entries"}),isNext:!0})]})}},35825:function(e,t,r){r.d(t,{Z:()=>I});var n=r("85893");r("67294");var s=r("74904"),a=r("75700");function l(e){let{children:t,className:r}=e;return(0,n.jsx)("article",{className:r,children:t})}var o=r("27544");let i="title_f1Hy";function u(e){let{className:t}=e,{metadata:r,isBlogPostPage:l}=(0,a.nO)(),{permalink:u,title:c}=r;return(0,n.jsx)(l?"h1":"h2",{className:(0,s.Z)(i,t),children:l?c:(0,n.jsx)(o.Z,{to:u,children:c})})}var c=r("1822"),d=r("67984"),h=r("28291");let g="container_mt6G";function m(e){let{readingTime:t}=e,r=function(){let{selectMessage:e}=(0,d.c)();return t=>{let r=Math.ceil(t);return e(r,(0,c.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:r}))}}();return(0,n.jsx)(n.Fragment,{children:r(t)})}function p(e){let{date:t,formattedDate:r}=e;return(0,n.jsx)("time",{dateTime:t,children:r})}function x(){return(0,n.jsx)(n.Fragment,{children:" \xb7 "})}function f(e){let t,{className:r}=e,{metadata:l}=(0,a.nO)(),{date:o,readingTime:i}=l,u=(0,h.P)({day:"numeric",month:"long",year:"numeric",timeZone:"UTC"});return(0,n.jsxs)("div",{className:(0,s.Z)(g,"margin-vert--md",r),children:[(0,n.jsx)(p,{date:o,formattedDate:(t=o,u.format(new Date(t)))}),void 0!==i&&(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(x,{}),(0,n.jsx)(m,{readingTime:i})]})]})}var j=r("91941");let b={authorCol:"authorCol_Hf19",imageOnlyAuthorRow:"imageOnlyAuthorRow_pa_O",imageOnlyAuthorCol:"imageOnlyAuthorCol_G86a"};function v(e){let{className:t}=e,{metadata:{authors:r},assets:l}=(0,a.nO)();if(0===r.length)return null;let o=r.every(e=>{let{name:t}=e;return!t}),i=1===r.length;return(0,n.jsx)("div",{className:(0,s.Z)("margin-top--md margin-bottom--sm",o?b.imageOnlyAuthorRow:"row",t),children:r.map((e,t)=>(0,n.jsx)("div",{className:(0,s.Z)(!o&&(i?"col col--12":"col col--6"),o?b.imageOnlyAuthorCol:b.authorCol),children:(0,n.jsx)(j.Z,{author:{...e,imageURL:l.authorsImageUrls[t]??e.imageURL}})},t))})}function Z(){return(0,n.jsxs)("header",{children:[(0,n.jsx)(u,{}),(0,n.jsx)(f,{}),(0,n.jsx)(v,{})]})}var w=r("3062"),N=r("27913");function T(e){let{children:t,className:r}=e,{isBlogPostPage:l}=(0,a.nO)();return(0,n.jsx)("div",{id:l?w.blogPostContainerID:void 0,className:(0,s.Z)("markdown",r),children:(0,n.jsx)(N.Z,{children:t})})}var y=r("50490"),k=r("57216"),O=r("50905");function _(){return(0,n.jsx)("b",{children:(0,n.jsx)(c.Z,{id:"theme.blog.post.readMore",description:"The label used in blog post item excerpts to link to full blog posts",children:"Read more"})})}function A(e){let{blogPostTitle:t,...r}=e;return(0,n.jsx)(o.Z,{"aria-label":(0,c.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}),...r,children:(0,n.jsx)(_,{})})}function P(){let{metadata:e,isBlogPostPage:t}=(0,a.nO)(),{tags:r,title:l,editUrl:o,hasTruncateMarker:i,lastUpdatedBy:u,lastUpdatedAt:c}=e,d=!t&&i,h=r.length>0;if(!(h||d||o))return null;if(!t)return(0,n.jsxs)("footer",{className:"row docusaurus-mt-lg",children:[h&&(0,n.jsx)("div",{className:(0,s.Z)("col",{"col--9":d}),children:(0,n.jsx)(O.Z,{tags:r})}),d&&(0,n.jsx)("div",{className:(0,s.Z)("col text--right",{"col--3":h}),children:(0,n.jsx)(A,{blogPostTitle:l,to:e.permalink})})]});{let e=!!(o||c||u);return(0,n.jsxs)("footer",{className:"docusaurus-mt-lg",children:[h&&(0,n.jsx)("div",{className:(0,s.Z)("row","margin-top--sm",y.k.blog.blogFooterEditMetaRow),children:(0,n.jsx)("div",{className:"col",children:(0,n.jsx)(O.Z,{tags:r})})}),e&&(0,n.jsx)(k.Z,{className:(0,s.Z)("margin-top--sm",y.k.blog.blogFooterEditMetaRow),editUrl:o,lastUpdatedAt:c,lastUpdatedBy:u})]})}}function I(e){let{children:t,className:r}=e,o=function(){let{isBlogPostPage:e}=(0,a.nO)();return e?void 0:"margin-bottom--xl"}();return(0,n.jsxs)(l,{className:(0,s.Z)(o,r),children:[(0,n.jsx)(Z,{}),(0,n.jsx)(T,{children:t}),(0,n.jsx)(P,{})]})}},30955:function(e,t,r){r.d(t,{Z:function(){return l}});var n=r(85893);r(67294);var s=r(75700),a=r(35825);function l(e){let{items:t,component:r=a.Z}=e;return(0,n.jsx)(n.Fragment,{children:t.map(e=>{let{content:t}=e;return(0,n.jsx)(s.n4,{content:t,children:(0,n.jsx)(r,{children:(0,n.jsx)(t,{})})},t.metadata.permalink)})})}},20332:function(e,t,r){r.d(t,{HV:function(){return u},J$:function(){return d},Wi:function(){return o},ds:function(){return i},fw:function(){return c}});var n=r(85893);r(67294);var s=r(1822),a=r(67984);function l(){let{selectMessage:e}=(0,a.c)();return t=>e(t,(0,s.I)({id:"theme.blog.post.plurals",description:'Pluralized label for "{count} posts". 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 post|{count} posts"},{count:t}))}function o(e){let t=l();return(0,s.I)({id:"theme.blog.tagTitle",description:"The title of the page for a blog tag",message:'{nPosts} tagged with "{tagName}"'},{nPosts:t(e.count),tagName:e.label})}function i(e){let t=l();return(0,s.I)({id:"theme.blog.author.pageTitle",description:"The title of the page for a blog author",message:"{authorName} - {nPosts}"},{nPosts:t(e.count),authorName:e.name||e.key})}let u=()=>(0,s.I)({id:"theme.blog.authorsList.pageTitle",message:"Authors",description:"The title of the authors page"});function c(){return(0,n.jsx)(s.Z,{id:"theme.blog.authorsList.viewAll",description:"The label of the link targeting the blog authors page",children:"View all authors"})}function d(){return(0,n.jsx)(s.Z,{id:"theme.blog.author.noPosts",description:"The text for authors with 0 blog post",children:"This author has not written any posts yet."})}}}]); \ No newline at end of file diff --git a/assets/js/36994c47.55d3f56c.js b/assets/js/36994c47.55d3f56c.js deleted file mode 100644 index 8b0c6dcdd..000000000 --- a/assets/js/36994c47.55d3f56c.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[9208],{94468:e=>{e.exports=JSON.parse('{"name":"docusaurus-plugin-content-blog","id":"default"}')}}]); \ No newline at end of file diff --git a/assets/js/36994c47.8096dd72.js b/assets/js/36994c47.8096dd72.js new file mode 100644 index 000000000..172148b40 --- /dev/null +++ b/assets/js/36994c47.8096dd72.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([["2792"],{17934:function(e){e.exports=JSON.parse('{"name":"docusaurus-plugin-content-blog","id":"default"}')}}]); \ No newline at end of file diff --git a/assets/js/38920c38.71e009d1.js b/assets/js/38920c38.71e009d1.js new file mode 100644 index 000000000..0120838b2 --- /dev/null +++ b/assets/js/38920c38.71e009d1.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([["4151"],{81232:function(e,r,n){n.r(r),n.d(r,{metadata:()=>s,contentTitle:()=>o,default:()=>c,assets:()=>d,toc:()=>h,frontMatter:()=>l});var s=JSON.parse('{"id":"user/hardware/peripherals/printers-and-scanners","title":"Printers and Scanners","description":"Drivers","source":"@site/docs/user/hardware/peripherals/printers-and-scanners.md","sourceDirName":"user/hardware/peripherals","slug":"/user/hardware/peripherals/printers-and-scanners","permalink":"/docs/user/hardware/peripherals/printers-and-scanners","draft":false,"unlisted":false,"editUrl":"https://github.com/getsolus/help-center-docs/tree/master/docs/user/hardware/peripherals/printers-and-scanners.md","tags":[],"version":"current","lastUpdatedAt":1733757592000,"frontMatter":{"title":"Printers and Scanners","summary":"Guide to using printers and scanners on Solus"},"sidebar":"userSidebar","previous":{"title":"MIDI Keyboards","permalink":"/docs/user/hardware/peripherals/midi-keyboard"},"next":{"title":"Package Management","permalink":"/docs/category/package-management"}}'),t=n("85893"),i=n("50065");let l={title:"Printers and Scanners",summary:"Guide to using printers and scanners on Solus"},o="Printers and Scanners",d={},h=[{value:"Drivers",id:"drivers",level:2},{value:"Brother",id:"brother",level:3},{value:"Compatibility",id:"compatibility",level:2},{value:"Brother",id:"brother-1",level:3},{value:"Brother",id:"brother-2",level:2},{value:"Network scanner",id:"network-scanner",level:3}];function a(e){let r={a:"a",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",p:"p",pre:"pre",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,i.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(r.header,{children:(0,t.jsx)(r.h1,{id:"printers-and-scanners",children:"Printers and Scanners"})}),"\n",(0,t.jsx)(r.h1,{id:"printers",children:"Printers"}),"\n",(0,t.jsx)(r.h2,{id:"drivers",children:"Drivers"}),"\n",(0,t.jsx)(r.p,{children:"Many printers will work out-of the box on Solus. If yours doesn't, you should try installing additional drivers."}),"\n",(0,t.jsxs)(r.table,{children:[(0,t.jsx)(r.thead,{children:(0,t.jsxs)(r.tr,{children:[(0,t.jsx)(r.th,{children:"Brand"}),(0,t.jsx)(r.th,{children:"Driver Package(s)"})]})}),(0,t.jsxs)(r.tbody,{children:[(0,t.jsxs)(r.tr,{children:[(0,t.jsx)(r.td,{children:"Canon"}),(0,t.jsx)(r.td,{children:"canon-ufriilt-common"})]}),(0,t.jsxs)(r.tr,{children:[(0,t.jsx)(r.td,{children:"Dymo"}),(0,t.jsx)(r.td,{children:"dymo-cups-driver"})]}),(0,t.jsxs)(r.tr,{children:[(0,t.jsx)(r.td,{children:"Epson"}),(0,t.jsx)(r.td,{children:"epson-inkjet-printer-escpr"})]}),(0,t.jsxs)(r.tr,{children:[(0,t.jsx)(r.td,{children:"HP"}),(0,t.jsx)(r.td,{children:"hplip"})]})]})]}),"\n",(0,t.jsx)(r.h3,{id:"brother",children:"Brother"}),"\n",(0,t.jsxs)(r.p,{children:["The Solus repositories include ",(0,t.jsx)(r.code,{children:"brlaser"}),", an open-source driver for many Brother monochrome laser printers and multi-function devices. Compatible models are listed ",(0,t.jsx)(r.a,{href:"https://github.com/Owl-Maintain/brlaser#supported-printers",children:"here"})]}),"\n",(0,t.jsx)(r.p,{children:"Other Brother drivers are distributed by Brother for a single printer only. Because of this, you will need to install the package for your specific printer."}),"\n",(0,t.jsxs)(r.p,{children:["For example, ",(0,t.jsx)(r.code,{children:"brother-mfc1910w"})," provides drivers for the MFC-1910w."]}),"\n",(0,t.jsx)(r.h2,{id:"compatibility",children:"Compatibility"}),"\n",(0,t.jsx)(r.p,{children:"The following printers have been tested and/or suggested to function correctly by our users."}),"\n",(0,t.jsxs)(r.p,{children:["This list should not suggest that ",(0,t.jsx)(r.em,{children:"only"})," such devices listed below are compatible with Solus, as there may be devices not listed below that are in fact compatible."]}),"\n",(0,t.jsx)(r.h3,{id:"brother-1",children:"Brother"}),"\n",(0,t.jsxs)(r.ul,{children:["\n",(0,t.jsx)(r.li,{children:"Brother DCP-135C"}),"\n",(0,t.jsx)(r.li,{children:"Brother DCP-1510"}),"\n",(0,t.jsx)(r.li,{children:"Brother DCP-1512"}),"\n",(0,t.jsx)(r.li,{children:"Brother DCP-1610W"}),"\n",(0,t.jsx)(r.li,{children:"Brother DCP-7010"}),"\n",(0,t.jsx)(r.li,{children:"Brother DCP-7060D"}),"\n",(0,t.jsx)(r.li,{children:"Brother DCP-L2520DW"}),"\n",(0,t.jsx)(r.li,{children:"Brother HL-1210W"}),"\n",(0,t.jsx)(r.li,{children:"Brother HL-1212W"}),"\n",(0,t.jsx)(r.li,{children:"Brother HL-2220"}),"\n",(0,t.jsx)(r.li,{children:"Brother HL-L2315DW"}),"\n",(0,t.jsx)(r.li,{children:"Brother HL-L2320D"}),"\n",(0,t.jsx)(r.li,{children:"Brother HL-L2360D"}),"\n",(0,t.jsx)(r.li,{children:"Brother HL-L2375DW"}),"\n",(0,t.jsx)(r.li,{children:"Brother MFC-1910W"}),"\n",(0,t.jsx)(r.li,{children:"Brother MFC-440CN"}),"\n",(0,t.jsx)(r.li,{children:"Brother MFC-9130CW"}),"\n",(0,t.jsx)(r.li,{children:"Brother MFC-9330CDW"}),"\n",(0,t.jsx)(r.li,{children:"Brother MFC-J220"}),"\n",(0,t.jsx)(r.li,{children:"Brother MFC-J480DW"}),"\n",(0,t.jsx)(r.li,{children:"Brother MFC-L2700DW"}),"\n",(0,t.jsx)(r.li,{children:"Brother MFC-L2703DW"}),"\n",(0,t.jsx)(r.li,{children:"Brother MFC-L2740DW"}),"\n"]}),"\n",(0,t.jsxs)(r.p,{children:["Should your printer not be on this list, and the generic ",(0,t.jsx)(r.code,{children:"brlaser"})," driver does not work, you can request your printer here for inclusion ",(0,t.jsx)(r.a,{href:"https://github.com/getsolus/packages/issues/212",children:"here"})]}),"\n",(0,t.jsx)(r.h1,{id:"scanners",children:"Scanners"}),"\n",(0,t.jsx)(r.h2,{id:"brother-2",children:"Brother"}),"\n",(0,t.jsxs)(r.p,{children:["You can connect your Brother scanner via USB or LAN to be able to scan. To get newer Brother scanners to work you will have to install the package ",(0,t.jsx)(r.code,{children:"brscan4"})]}),"\n",(0,t.jsx)(r.h3,{id:"network-scanner",children:"Network scanner"}),"\n",(0,t.jsxs)(r.p,{children:["If your scanner is networked, you need to tell ",(0,t.jsx)(r.code,{children:"saned"})," the IP of your printer. It's advised to always give your printer the same IP inside your network (that is, a static IP address). Run the following command to accomplish this:"]}),"\n",(0,t.jsx)(r.pre,{children:(0,t.jsx)(r.code,{className:"language-bash",children:"brsaneconfig4 -a name=SCANNER model=$MODEL ip=$IPOFYOURSCANNER\n"})})]})}function c(e={}){let{wrapper:r}={...(0,i.a)(),...e.components};return r?(0,t.jsx)(r,{...e,children:(0,t.jsx)(a,{...e})}):a(e)}},50065:function(e,r,n){n.d(r,{Z:function(){return o},a:function(){return l}});var s=n(67294);let t={},i=s.createContext(t);function l(e){let r=s.useContext(i);return s.useMemo(function(){return"function"==typeof e?e(r):{...r,...e}},[r,e])}function o(e){let r;return r=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:l(e.components),s.createElement(i.Provider,{value:r},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/38920c38.b46b6d2c.js b/assets/js/38920c38.b46b6d2c.js deleted file mode 100644 index 51af9245f..000000000 --- a/assets/js/38920c38.b46b6d2c.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[5481],{50:(e,r,n)=>{n.r(r),n.d(r,{assets:()=>d,contentTitle:()=>l,default:()=>c,frontMatter:()=>i,metadata:()=>o,toc:()=>h});var s=n(85893),t=n(11151);const i={title:"Printers and Scanners",summary:"Guide to using printers and scanners on Solus"},l="Printers and Scanners",o={id:"user/hardware/peripherals/printers-and-scanners",title:"Printers and Scanners",description:"Drivers",source:"@site/docs/user/hardware/peripherals/printers-and-scanners.md",sourceDirName:"user/hardware/peripherals",slug:"/user/hardware/peripherals/printers-and-scanners",permalink:"/docs/user/hardware/peripherals/printers-and-scanners",draft:!1,unlisted:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/hardware/peripherals/printers-and-scanners.md",tags:[],version:"current",lastUpdatedAt:1732716912e3,frontMatter:{title:"Printers and Scanners",summary:"Guide to using printers and scanners on Solus"},sidebar:"userSidebar",previous:{title:"MIDI Keyboards",permalink:"/docs/user/hardware/peripherals/midi-keyboard"},next:{title:"Package Management",permalink:"/docs/category/package-management"}},d={},h=[{value:"Drivers",id:"drivers",level:2},{value:"Brother",id:"brother",level:3},{value:"Compatibility",id:"compatibility",level:2},{value:"Brother",id:"brother-1",level:3},{value:"Brother",id:"brother-2",level:2},{value:"Network scanner",id:"network-scanner",level:3}];function a(e){const r={a:"a",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",p:"p",pre:"pre",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,t.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(r.header,{children:(0,s.jsx)(r.h1,{id:"printers-and-scanners",children:"Printers and Scanners"})}),"\n",(0,s.jsx)(r.h1,{id:"printers",children:"Printers"}),"\n",(0,s.jsx)(r.h2,{id:"drivers",children:"Drivers"}),"\n",(0,s.jsx)(r.p,{children:"Many printers will work out-of the box on Solus. If yours doesn't, you should try installing additional drivers."}),"\n",(0,s.jsxs)(r.table,{children:[(0,s.jsx)(r.thead,{children:(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.th,{children:"Brand"}),(0,s.jsx)(r.th,{children:"Driver Package(s)"})]})}),(0,s.jsxs)(r.tbody,{children:[(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:"Canon"}),(0,s.jsx)(r.td,{children:"canon-ufriilt-common"})]}),(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:"Dymo"}),(0,s.jsx)(r.td,{children:"dymo-cups-driver"})]}),(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:"Epson"}),(0,s.jsx)(r.td,{children:"epson-inkjet-printer-escpr"})]}),(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:"HP"}),(0,s.jsx)(r.td,{children:"hplip"})]})]})]}),"\n",(0,s.jsx)(r.h3,{id:"brother",children:"Brother"}),"\n",(0,s.jsxs)(r.p,{children:["The Solus repositories include ",(0,s.jsx)(r.code,{children:"brlaser"}),", an open-source driver for many Brother monochrome laser printers and multi-function devices. Compatible models are listed ",(0,s.jsx)(r.a,{href:"https://github.com/Owl-Maintain/brlaser#supported-printers",children:"here"})]}),"\n",(0,s.jsx)(r.p,{children:"Other Brother drivers are distributed by Brother for a single printer only. Because of this, you will need to install the package for your specific printer."}),"\n",(0,s.jsxs)(r.p,{children:["For example, ",(0,s.jsx)(r.code,{children:"brother-mfc1910w"})," provides drivers for the MFC-1910w."]}),"\n",(0,s.jsx)(r.h2,{id:"compatibility",children:"Compatibility"}),"\n",(0,s.jsx)(r.p,{children:"The following printers have been tested and/or suggested to function correctly by our users."}),"\n",(0,s.jsxs)(r.p,{children:["This list should not suggest that ",(0,s.jsx)(r.em,{children:"only"})," such devices listed below are compatible with Solus, as there may be devices not listed below that are in fact compatible."]}),"\n",(0,s.jsx)(r.h3,{id:"brother-1",children:"Brother"}),"\n",(0,s.jsxs)(r.ul,{children:["\n",(0,s.jsx)(r.li,{children:"Brother DCP-135C"}),"\n",(0,s.jsx)(r.li,{children:"Brother DCP-1510"}),"\n",(0,s.jsx)(r.li,{children:"Brother DCP-1512"}),"\n",(0,s.jsx)(r.li,{children:"Brother DCP-1610W"}),"\n",(0,s.jsx)(r.li,{children:"Brother DCP-7010"}),"\n",(0,s.jsx)(r.li,{children:"Brother DCP-7060D"}),"\n",(0,s.jsx)(r.li,{children:"Brother DCP-L2520DW"}),"\n",(0,s.jsx)(r.li,{children:"Brother HL-1210W"}),"\n",(0,s.jsx)(r.li,{children:"Brother HL-1212W"}),"\n",(0,s.jsx)(r.li,{children:"Brother HL-2220"}),"\n",(0,s.jsx)(r.li,{children:"Brother HL-L2315DW"}),"\n",(0,s.jsx)(r.li,{children:"Brother HL-L2320D"}),"\n",(0,s.jsx)(r.li,{children:"Brother HL-L2360D"}),"\n",(0,s.jsx)(r.li,{children:"Brother HL-L2375DW"}),"\n",(0,s.jsx)(r.li,{children:"Brother MFC-1910W"}),"\n",(0,s.jsx)(r.li,{children:"Brother MFC-440CN"}),"\n",(0,s.jsx)(r.li,{children:"Brother MFC-9130CW"}),"\n",(0,s.jsx)(r.li,{children:"Brother MFC-9330CDW"}),"\n",(0,s.jsx)(r.li,{children:"Brother MFC-J220"}),"\n",(0,s.jsx)(r.li,{children:"Brother MFC-J480DW"}),"\n",(0,s.jsx)(r.li,{children:"Brother MFC-L2700DW"}),"\n",(0,s.jsx)(r.li,{children:"Brother MFC-L2703DW"}),"\n",(0,s.jsx)(r.li,{children:"Brother MFC-L2740DW"}),"\n"]}),"\n",(0,s.jsxs)(r.p,{children:["Should your printer not be on this list, and the generic ",(0,s.jsx)(r.code,{children:"brlaser"})," driver does not work, you can request your printer here for inclusion ",(0,s.jsx)(r.a,{href:"https://github.com/getsolus/packages/issues/212",children:"here"})]}),"\n",(0,s.jsx)(r.h1,{id:"scanners",children:"Scanners"}),"\n",(0,s.jsx)(r.h2,{id:"brother-2",children:"Brother"}),"\n",(0,s.jsxs)(r.p,{children:["You can connect your Brother scanner via USB or LAN to be able to scan. To get newer Brother scanners to work you will have to install the package ",(0,s.jsx)(r.code,{children:"brscan4"})]}),"\n",(0,s.jsx)(r.h3,{id:"network-scanner",children:"Network scanner"}),"\n",(0,s.jsxs)(r.p,{children:["If your scanner is networked, you need to tell ",(0,s.jsx)(r.code,{children:"saned"})," the IP of your printer. It's advised to always give your printer the same IP inside your network (that is, a static IP address). Run the following command to accomplish this:"]}),"\n",(0,s.jsx)(r.pre,{children:(0,s.jsx)(r.code,{className:"language-bash",children:"brsaneconfig4 -a name=SCANNER model=$MODEL ip=$IPOFYOURSCANNER\n"})})]})}function c(e={}){const{wrapper:r}={...(0,t.a)(),...e.components};return r?(0,s.jsx)(r,{...e,children:(0,s.jsx)(a,{...e})}):a(e)}},11151:(e,r,n)=>{n.d(r,{Z:()=>o,a:()=>l});var s=n(67294);const t={},i=s.createContext(t);function l(e){const r=s.useContext(i);return s.useMemo((function(){return"function"==typeof e?e(r):{...r,...e}}),[r,e])}function o(e){let r;return r=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:l(e.components),s.createElement(i.Provider,{value:r},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/3899.e1adeb2b.js b/assets/js/3899.e1adeb2b.js new file mode 100644 index 000000000..59e42d940 --- /dev/null +++ b/assets/js/3899.e1adeb2b.js @@ -0,0 +1,74 @@ +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([["3899"],{94229:function(e,t,n){var r=n(29251);t.default=void 0;var o=r(n(64938)),i=n(85893),a=(0,o.default)((0,i.jsx)("path",{d:"M19.14 12.94c.04-.3.06-.61.06-.94 0-.32-.02-.64-.07-.94l2.03-1.58c.18-.14.23-.41.12-.61l-1.92-3.32c-.12-.22-.37-.29-.59-.22l-2.39.96c-.5-.38-1.03-.7-1.62-.94l-.36-2.54c-.04-.24-.24-.41-.48-.41h-3.84c-.24 0-.43.17-.47.41l-.36 2.54c-.59.24-1.13.57-1.62.94l-2.39-.96c-.22-.08-.47 0-.59.22L2.74 8.87c-.12.21-.08.47.12.61l2.03 1.58c-.05.3-.09.63-.09.94s.02.64.07.94l-2.03 1.58c-.18.14-.23.41-.12.61l1.92 3.32c.12.22.37.29.59.22l2.39-.96c.5.38 1.03.7 1.62.94l.36 2.54c.05.24.24.41.48.41h3.84c.24 0 .44-.17.47-.41l.36-2.54c.59-.24 1.13-.56 1.62-.94l2.39.96c.22.08.47 0 .59-.22l1.92-3.32c.12-.22.07-.47-.12-.61l-2.01-1.58zM12 15.6c-1.98 0-3.6-1.62-3.6-3.6s1.62-3.6 3.6-3.6 3.6 1.62 3.6 3.6-1.62 3.6-3.6 3.6z"}),"Settings");t.default=a},39217:function(e,t,n){var r=n(29251);t.default=void 0;var o=r(n(64938)),i=n(85893),a=(0,o.default)((0,i.jsx)("path",{d:"M7 20h4c0 1.1-.9 2-2 2s-2-.9-2-2zm-2-1h8v-2H5v2zm11.5-9.5c0 3.82-2.66 5.86-3.77 6.5H5.27c-1.11-.64-3.77-2.68-3.77-6.5C1.5 5.36 4.86 2 9 2s7.5 3.36 7.5 7.5zm4.87-2.13L20 8l1.37.63L22 10l.63-1.37L24 8l-1.37-.63L22 6l-.63 1.37zM19 6l.94-2.06L22 3l-2.06-.94L19 0l-.94 2.06L16 3l2.06.94L19 6z"}),"TipsAndUpdates");t.default=a},70342:function(e,t,n){n.d(t,{Z:()=>eo});var r=n("12568"),o=n("38557"),i=n("67294"),a=n("86010"),l=n("47925"),s=n("94780"),u=n("41796"),c=n("90948"),d=n("71657"),p=n("41484"),f=n("81725"),h=n("7477"),v=n("70443"),m=n("16019"),g=n("35091");let b=i.createContext(null);function y(e,t){var n=Object.create(null);return e&&i.Children.map(e,function(e){return e}).forEach(function(e){var r;n[e.key]=(r=e,t&&(0,i.isValidElement)(r)?t(r):r)}),n}function w(e,t,n){return null!=n[t]?n[t]:e.props[t]}var S=Object.values||function(e){return Object.keys(e).map(function(t){return e[t]})},x=function(e){function t(t,n){var r,o=(r=e.call(this,t,n)||this).handleExited.bind(function(e){if(void 0===e)throw ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(r));return r.state={contextValue:{isMounting:!0},handleExited:o,firstRender:!0},r}(0,g.Z)(t,e);var n=t.prototype;return n.componentDidMount=function(){this.mounted=!0,this.setState({contextValue:{isMounting:!1}})},n.componentWillUnmount=function(){this.mounted=!1},t.getDerivedStateFromProps=function(e,t){var n,r,o,a,l,s,u,c=t.children,d=t.handleExited;return{children:t.firstRender?(n=e,r=d,y(n.children,function(e){return(0,i.cloneElement)(e,{onExited:r.bind(null,e),in:!0,appear:w(e,"appear",n),enter:w(e,"enter",n),exit:w(e,"exit",n)})})):(o=e,a=c,l=d,Object.keys(u=function(e,t){function n(n){return n in t?t[n]:e[n]}e=e||{},t=t||{};var r,o=Object.create(null),i=[];for(var a in e)a in t?i.length&&(o[a]=i,i=[]):i.push(a);var l={};for(var s in t){if(o[s])for(r=0;re,z,R,k,_,L=M(z||(z=T` + 0% { + transform: scale(0); + opacity: 0.1; + } + + 100% { + transform: scale(1); + opacity: 0.3; + } +`)),$=M(R||(R=T` + 0% { + opacity: 1; + } + + 100% { + opacity: 0; + } +`)),B=M(k||(k=T` + 0% { + transform: scale(1); + } + + 50% { + transform: scale(0.92); + } + + 100% { + transform: scale(1); + } +`)),I=(0,c.ZP)("span",{name:"MuiTouchRipple",slot:"Root"})({overflow:"hidden",pointerEvents:"none",position:"absolute",zIndex:0,top:0,right:0,bottom:0,left:0,borderRadius:"inherit"}),N=(0,c.ZP)(function(e){let{className:t,classes:n,pulsate:r=!1,rippleX:o,rippleY:l,rippleSize:s,in:u,onExited:c,timeout:d}=e,[p,f]=i.useState(!1),h=(0,a.Z)(t,n.ripple,n.rippleVisible,r&&n.ripplePulsate),v=(0,a.Z)(n.child,p&&n.childLeaving,r&&n.childPulsate);return!u&&!p&&f(!0),i.useEffect(()=>{if(!u&&null!=c){let e=setTimeout(c,d);return()=>{clearTimeout(e)}}},[c,u,d]),(0,P.jsx)("span",{className:h,style:{width:s,height:s,top:-(s/2)+l,left:-(s/2)+o},children:(0,P.jsx)("span",{className:v})})},{name:"MuiTouchRipple",slot:"Ripple"})(_||(_=T` + opacity: 0; + position: absolute; + + &.${0} { + opacity: 0.3; + transform: scale(1); + animation-name: ${0}; + animation-duration: ${0}ms; + animation-timing-function: ${0}; + } + + &.${0} { + animation-duration: ${0}ms; + } + + & .${0} { + opacity: 1; + display: block; + width: 100%; + height: 100%; + border-radius: 50%; + background-color: currentColor; + } + + & .${0} { + opacity: 0; + animation-name: ${0}; + animation-duration: ${0}ms; + animation-timing-function: ${0}; + } + + & .${0} { + position: absolute; + /* @noflip */ + left: 0px; + top: 0; + animation-name: ${0}; + animation-duration: 2500ms; + animation-timing-function: ${0}; + animation-iteration-count: infinite; + animation-delay: 200ms; + } +`),j.rippleVisible,L,550,({theme:e})=>e.transitions.easing.easeInOut,j.ripplePulsate,({theme:e})=>e.transitions.duration.shorter,j.child,j.childLeaving,$,550,({theme:e})=>e.transitions.easing.easeInOut,j.childPulsate,B,({theme:e})=>e.transitions.easing.easeInOut),W=i.forwardRef(function(e,t){let n=(0,d.Z)({props:e,name:"MuiTouchRipple"}),{center:l=!1,classes:s={},className:u}=n,c=(0,r.Z)(n,Z),[p,f]=i.useState([]),h=i.useRef(0),v=i.useRef(null);i.useEffect(()=>{v.current&&(v.current(),v.current=null)},[p]);let m=i.useRef(!1),g=i.useRef(0),b=i.useRef(null),y=i.useRef(null);i.useEffect(()=>()=>{g.current&&clearTimeout(g.current)},[]);let w=i.useCallback(e=>{let{pulsate:t,rippleX:n,rippleY:r,rippleSize:o,cb:i}=e;f(e=>[...e,(0,P.jsx)(N,{classes:{ripple:(0,a.Z)(s.ripple,j.ripple),rippleVisible:(0,a.Z)(s.rippleVisible,j.rippleVisible),ripplePulsate:(0,a.Z)(s.ripplePulsate,j.ripplePulsate),child:(0,a.Z)(s.child,j.child),childLeaving:(0,a.Z)(s.childLeaving,j.childLeaving),childPulsate:(0,a.Z)(s.childPulsate,j.childPulsate)},timeout:550,pulsate:t,rippleX:n,rippleY:r,rippleSize:o},h.current)]),h.current+=1,v.current=i},[s]),S=i.useCallback((e={},t={},n=()=>{})=>{let r,o,i;let{pulsate:a=!1,center:s=l||t.pulsate,fakeElement:u=!1}=t;if((null==e?void 0:e.type)==="mousedown"&&m.current){m.current=!1;return}(null==e?void 0:e.type)==="touchstart"&&(m.current=!0);let c=u?null:y.current,d=c?c.getBoundingClientRect():{width:0,height:0,left:0,top:0};if(!s&&void 0!==e&&(0!==e.clientX||0!==e.clientY)&&(e.clientX||e.touches)){let{clientX:t,clientY:n}=e.touches&&e.touches.length>0?e.touches[0]:e;r=Math.round(t-d.left),o=Math.round(n-d.top)}else r=Math.round(d.width/2),o=Math.round(d.height/2);if(s)(i=Math.sqrt((2*d.width**2+d.height**2)/3))%2==0&&(i+=1);else{let e=2*Math.max(Math.abs((c?c.clientWidth:0)-r),r)+2;i=Math.sqrt(e**2+(2*Math.max(Math.abs((c?c.clientHeight:0)-o),o)+2)**2)}null!=e&&e.touches?null===b.current&&(b.current=()=>{w({pulsate:a,rippleX:r,rippleY:o,rippleSize:i,cb:n})},g.current=setTimeout(()=>{b.current&&(b.current(),b.current=null)},80)):w({pulsate:a,rippleX:r,rippleY:o,rippleSize:i,cb:n})},[l,w]),O=i.useCallback(()=>{S({},{pulsate:!0})},[S]),E=i.useCallback((e,t)=>{if(clearTimeout(g.current),(null==e?void 0:e.type)==="touchend"&&b.current){b.current(),b.current=null,g.current=setTimeout(()=>{E(e,t)});return}b.current=null,f(e=>e.length>0?e.slice(1):e),v.current=t},[]);return i.useImperativeHandle(t,()=>({pulsate:O,start:S,stop:E}),[O,S,E]),(0,P.jsx)(I,(0,o.Z)({className:(0,a.Z)(j.root,s.root,u),ref:y},c,{children:(0,P.jsx)(x,{component:null,exit:!0,children:p})}))});var V=n("34867");function D(e){return(0,V.Z)("MuiButtonBase",e)}let H=(0,C.Z)("MuiButtonBase",["root","disabled","focusVisible"]),A=["action","centerRipple","children","className","component","disabled","disableRipple","disableTouchRipple","focusRipple","focusVisibleClassName","LinkComponent","onBlur","onClick","onContextMenu","onDragLeave","onFocus","onFocusVisible","onKeyDown","onKeyUp","onMouseDown","onMouseLeave","onMouseUp","onTouchEnd","onTouchMove","onTouchStart","tabIndex","TouchRippleProps","touchRippleRef","type"],F=e=>{let{disabled:t,focusVisible:n,focusVisibleClassName:r,classes:o}=e,i=(0,s.Z)({root:["root",t&&"disabled",n&&"focusVisible"]},D,o);return n&&r&&(i.root+=` ${r}`),i},q=(0,c.ZP)("button",{name:"MuiButtonBase",slot:"Root",overridesResolver:(e,t)=>t.root})({display:"inline-flex",alignItems:"center",justifyContent:"center",position:"relative",boxSizing:"border-box",WebkitTapHighlightColor:"transparent",backgroundColor:"transparent",outline:0,border:0,margin:0,borderRadius:0,padding:0,cursor:"pointer",userSelect:"none",verticalAlign:"middle",MozAppearance:"none",WebkitAppearance:"none",textDecoration:"none",color:"inherit","&::-moz-focus-inner":{borderStyle:"none"},[`&.${H.disabled}`]:{pointerEvents:"none",cursor:"default"},"@media print":{colorAdjust:"exact"}}),U=i.forwardRef(function(e,t){let n=(0,d.Z)({props:e,name:"MuiButtonBase"}),{action:l,centerRipple:s=!1,children:u,className:c,component:v="button",disabled:m=!1,disableRipple:g=!1,disableTouchRipple:b=!1,focusRipple:y=!1,LinkComponent:w="a",onBlur:S,onClick:x,onContextMenu:O,onDragLeave:E,onFocus:M,onFocusVisible:C,onKeyDown:j,onKeyUp:Z,onMouseDown:T,onMouseLeave:z,onMouseUp:R,onTouchEnd:k,onTouchMove:_,onTouchStart:L,tabIndex:$=0,TouchRippleProps:B,touchRippleRef:I,type:N}=n,V=(0,r.Z)(n,A),D=i.useRef(null),H=i.useRef(null),U=(0,p.Z)(H,I),{isFocusVisibleRef:K,onFocus:G,onBlur:X,ref:Y}=(0,h.Z)(),[J,Q]=i.useState(!1);m&&J&&Q(!1),i.useImperativeHandle(l,()=>({focusVisible:()=>{Q(!0),D.current.focus()}}),[]);let[ee,et]=i.useState(!1);i.useEffect(()=>{et(!0)},[]);let en=ee&&!g&&!m;function er(e,t,n=b){return(0,f.Z)(r=>(t&&t(r),!n&&H.current&&H.current[e](r),!0))}i.useEffect(()=>{J&&y&&!g&&ee&&H.current.pulsate()},[g,y,J,ee]);let eo=er("start",T),ei=er("stop",O),ea=er("stop",E),el=er("stop",R),es=er("stop",e=>{J&&e.preventDefault(),z&&z(e)}),eu=er("start",L),ec=er("stop",k),ed=er("stop",_),ep=er("stop",e=>{X(e),!1===K.current&&Q(!1),S&&S(e)},!1),ef=(0,f.Z)(e=>{!D.current&&(D.current=e.currentTarget),G(e),!0===K.current&&(Q(!0),C&&C(e)),M&&M(e)}),eh=()=>{let e=D.current;return v&&"button"!==v&&!("A"===e.tagName&&e.href)},ev=i.useRef(!1),em=(0,f.Z)(e=>{y&&!ev.current&&J&&H.current&&" "===e.key&&(ev.current=!0,H.current.stop(e,()=>{H.current.start(e)})),e.target===e.currentTarget&&eh()&&" "===e.key&&e.preventDefault(),j&&j(e),e.target===e.currentTarget&&eh()&&"Enter"===e.key&&!m&&(e.preventDefault(),x&&x(e))}),eg=(0,f.Z)(e=>{y&&" "===e.key&&H.current&&J&&!e.defaultPrevented&&(ev.current=!1,H.current.stop(e,()=>{H.current.pulsate(e)})),Z&&Z(e),x&&e.target===e.currentTarget&&eh()&&" "===e.key&&!e.defaultPrevented&&x(e)}),eb=v;"button"===eb&&(V.href||V.to)&&(eb=w);let ey={};"button"===eb?(ey.type=void 0===N?"button":N,ey.disabled=m):(!V.href&&!V.to&&(ey.role="button"),m&&(ey["aria-disabled"]=m));let ew=(0,p.Z)(t,Y,D),eS=(0,o.Z)({},n,{centerRipple:s,component:v,disabled:m,disableRipple:g,disableTouchRipple:b,focusRipple:y,tabIndex:$,focusVisible:J}),ex=F(eS);return(0,P.jsxs)(q,(0,o.Z)({as:eb,className:(0,a.Z)(ex.root,c),ownerState:eS,onBlur:ep,onClick:x,onContextMenu:ei,onFocus:ef,onKeyDown:em,onKeyUp:eg,onMouseDown:eo,onMouseLeave:es,onMouseUp:el,onDragLeave:ea,onTouchEnd:ec,onTouchMove:ed,onTouchStart:eu,ref:ew,tabIndex:m?-1:$,type:N},ey,V,{children:[u,en?(0,P.jsx)(W,(0,o.Z)({ref:U,center:s},B)):null]}))});var K=n("98216");function G(e){return(0,V.Z)("MuiButton",e)}let X=(0,C.Z)("MuiButton",["root","text","textInherit","textPrimary","textSecondary","textSuccess","textError","textInfo","textWarning","outlined","outlinedInherit","outlinedPrimary","outlinedSecondary","outlinedSuccess","outlinedError","outlinedInfo","outlinedWarning","contained","containedInherit","containedPrimary","containedSecondary","containedSuccess","containedError","containedInfo","containedWarning","disableElevation","focusVisible","disabled","colorInherit","textSizeSmall","textSizeMedium","textSizeLarge","outlinedSizeSmall","outlinedSizeMedium","outlinedSizeLarge","containedSizeSmall","containedSizeMedium","containedSizeLarge","sizeMedium","sizeSmall","sizeLarge","fullWidth","startIcon","endIcon","iconSizeSmall","iconSizeMedium","iconSizeLarge"]);var Y=n("98363");let J=["children","color","component","className","disabled","disableElevation","disableFocusRipple","endIcon","focusVisibleClassName","fullWidth","size","startIcon","type","variant"],Q=e=>{let{color:t,disableElevation:n,fullWidth:r,size:i,variant:a,classes:l}=e,u={root:["root",a,`${a}${(0,K.Z)(t)}`,`size${(0,K.Z)(i)}`,`${a}Size${(0,K.Z)(i)}`,"inherit"===t&&"colorInherit",n&&"disableElevation",r&&"fullWidth"],label:["label"],startIcon:["startIcon",`iconSize${(0,K.Z)(i)}`],endIcon:["endIcon",`iconSize${(0,K.Z)(i)}`]},c=(0,s.Z)(u,G,l);return(0,o.Z)({},l,c)},ee=e=>(0,o.Z)({},"small"===e.size&&{"& > *:nth-of-type(1)":{fontSize:18}},"medium"===e.size&&{"& > *:nth-of-type(1)":{fontSize:20}},"large"===e.size&&{"& > *:nth-of-type(1)":{fontSize:22}}),et=(0,c.ZP)(U,{shouldForwardProp:e=>(0,c.FO)(e)||"classes"===e,name:"MuiButton",slot:"Root",overridesResolver:(e,t)=>{let{ownerState:n}=e;return[t.root,t[n.variant],t[`${n.variant}${(0,K.Z)(n.color)}`],t[`size${(0,K.Z)(n.size)}`],t[`${n.variant}Size${(0,K.Z)(n.size)}`],"inherit"===n.color&&t.colorInherit,n.disableElevation&&t.disableElevation,n.fullWidth&&t.fullWidth]}})(({theme:e,ownerState:t})=>{var n,r;let i="light"===e.palette.mode?e.palette.grey[300]:e.palette.grey[800],a="light"===e.palette.mode?e.palette.grey.A100:e.palette.grey[700];return(0,o.Z)({},e.typography.button,{minWidth:64,padding:"6px 16px",borderRadius:(e.vars||e).shape.borderRadius,transition:e.transitions.create(["background-color","box-shadow","border-color","color"],{duration:e.transitions.duration.short}),"&:hover":(0,o.Z)({textDecoration:"none",backgroundColor:e.vars?`rgba(${e.vars.palette.text.primaryChannel} / ${e.vars.palette.action.hoverOpacity})`:(0,u.Fq)(e.palette.text.primary,e.palette.action.hoverOpacity),"@media (hover: none)":{backgroundColor:"transparent"}},"text"===t.variant&&"inherit"!==t.color&&{backgroundColor:e.vars?`rgba(${e.vars.palette[t.color].mainChannel} / ${e.vars.palette.action.hoverOpacity})`:(0,u.Fq)(e.palette[t.color].main,e.palette.action.hoverOpacity),"@media (hover: none)":{backgroundColor:"transparent"}},"outlined"===t.variant&&"inherit"!==t.color&&{border:`1px solid ${(e.vars||e).palette[t.color].main}`,backgroundColor:e.vars?`rgba(${e.vars.palette[t.color].mainChannel} / ${e.vars.palette.action.hoverOpacity})`:(0,u.Fq)(e.palette[t.color].main,e.palette.action.hoverOpacity),"@media (hover: none)":{backgroundColor:"transparent"}},"contained"===t.variant&&{backgroundColor:e.vars?e.vars.palette.Button.inheritContainedHoverBg:a,boxShadow:(e.vars||e).shadows[4],"@media (hover: none)":{boxShadow:(e.vars||e).shadows[2],backgroundColor:(e.vars||e).palette.grey[300]}},"contained"===t.variant&&"inherit"!==t.color&&{backgroundColor:(e.vars||e).palette[t.color].dark,"@media (hover: none)":{backgroundColor:(e.vars||e).palette[t.color].main}}),"&:active":(0,o.Z)({},"contained"===t.variant&&{boxShadow:(e.vars||e).shadows[8]}),[`&.${X.focusVisible}`]:(0,o.Z)({},"contained"===t.variant&&{boxShadow:(e.vars||e).shadows[6]}),[`&.${X.disabled}`]:(0,o.Z)({color:(e.vars||e).palette.action.disabled},"outlined"===t.variant&&{border:`1px solid ${(e.vars||e).palette.action.disabledBackground}`},"contained"===t.variant&&{color:(e.vars||e).palette.action.disabled,boxShadow:(e.vars||e).shadows[0],backgroundColor:(e.vars||e).palette.action.disabledBackground})},"text"===t.variant&&{padding:"6px 8px"},"text"===t.variant&&"inherit"!==t.color&&{color:(e.vars||e).palette[t.color].main},"outlined"===t.variant&&{padding:"5px 15px",border:"1px solid currentColor"},"outlined"===t.variant&&"inherit"!==t.color&&{color:(e.vars||e).palette[t.color].main,border:e.vars?`1px solid rgba(${e.vars.palette[t.color].mainChannel} / 0.5)`:`1px solid ${(0,u.Fq)(e.palette[t.color].main,.5)}`},"contained"===t.variant&&{color:e.vars?e.vars.palette.text.primary:null==(n=(r=e.palette).getContrastText)?void 0:n.call(r,e.palette.grey[300]),backgroundColor:e.vars?e.vars.palette.Button.inheritContainedBg:i,boxShadow:(e.vars||e).shadows[2]},"contained"===t.variant&&"inherit"!==t.color&&{color:(e.vars||e).palette[t.color].contrastText,backgroundColor:(e.vars||e).palette[t.color].main},"inherit"===t.color&&{color:"inherit",borderColor:"currentColor"},"small"===t.size&&"text"===t.variant&&{padding:"4px 5px",fontSize:e.typography.pxToRem(13)},"large"===t.size&&"text"===t.variant&&{padding:"8px 11px",fontSize:e.typography.pxToRem(15)},"small"===t.size&&"outlined"===t.variant&&{padding:"3px 9px",fontSize:e.typography.pxToRem(13)},"large"===t.size&&"outlined"===t.variant&&{padding:"7px 21px",fontSize:e.typography.pxToRem(15)},"small"===t.size&&"contained"===t.variant&&{padding:"4px 10px",fontSize:e.typography.pxToRem(13)},"large"===t.size&&"contained"===t.variant&&{padding:"8px 22px",fontSize:e.typography.pxToRem(15)},t.fullWidth&&{width:"100%"})},({ownerState:e})=>e.disableElevation&&{boxShadow:"none","&:hover":{boxShadow:"none"},[`&.${X.focusVisible}`]:{boxShadow:"none"},"&:active":{boxShadow:"none"},[`&.${X.disabled}`]:{boxShadow:"none"}}),en=(0,c.ZP)("span",{name:"MuiButton",slot:"StartIcon",overridesResolver:(e,t)=>{let{ownerState:n}=e;return[t.startIcon,t[`iconSize${(0,K.Z)(n.size)}`]]}})(({ownerState:e})=>(0,o.Z)({display:"inherit",marginRight:8,marginLeft:-4},"small"===e.size&&{marginLeft:-2},ee(e))),er=(0,c.ZP)("span",{name:"MuiButton",slot:"EndIcon",overridesResolver:(e,t)=>{let{ownerState:n}=e;return[t.endIcon,t[`iconSize${(0,K.Z)(n.size)}`]]}})(({ownerState:e})=>(0,o.Z)({display:"inherit",marginRight:-4,marginLeft:8},"small"===e.size&&{marginRight:-2},ee(e))),eo=i.forwardRef(function(e,t){let n=i.useContext(Y.Z),s=(0,l.Z)(n,e),u=(0,d.Z)({props:s,name:"MuiButton"}),{children:c,color:p="primary",component:f="button",className:h,disabled:v=!1,disableElevation:m=!1,disableFocusRipple:g=!1,endIcon:b,focusVisibleClassName:y,fullWidth:w=!1,size:S="medium",startIcon:x,type:O,variant:E="text"}=u,M=(0,r.Z)(u,J),C=(0,o.Z)({},u,{color:p,component:f,disabled:v,disableElevation:m,disableFocusRipple:g,fullWidth:w,size:S,type:O,variant:E}),j=Q(C),Z=x&&(0,P.jsx)(en,{className:j.startIcon,ownerState:C,children:x}),T=b&&(0,P.jsx)(er,{className:j.endIcon,ownerState:C,children:b});return(0,P.jsxs)(et,(0,o.Z)({ownerState:C,className:(0,a.Z)(n.className,j.root,h),component:f,disabled:v,focusRipple:!g,focusVisibleClassName:(0,a.Z)(j.focusVisible,y),ref:t,type:O},M,{classes:j,children:[Z,c,T]}))})},24434:function(e,t,n){n.d(t,{Z:()=>S});var r=n("12568"),o=n("38557"),i=n("67294"),a=n("86010"),l=n("94780"),s=n("41796"),u=n("98216"),c=n("90948"),d=n("71657"),p=n("1588"),f=n("34867");function h(e){return(0,f.Z)("MuiButtonGroup",e)}let v=(0,p.Z)("MuiButtonGroup",["root","contained","outlined","text","disableElevation","disabled","fullWidth","vertical","grouped","groupedHorizontal","groupedVertical","groupedText","groupedTextHorizontal","groupedTextVertical","groupedTextPrimary","groupedTextSecondary","groupedOutlined","groupedOutlinedHorizontal","groupedOutlinedVertical","groupedOutlinedPrimary","groupedOutlinedSecondary","groupedContained","groupedContainedHorizontal","groupedContainedVertical","groupedContainedPrimary","groupedContainedSecondary"]);var m=n("98363"),g=n("85893");let b=["children","className","color","component","disabled","disableElevation","disableFocusRipple","disableRipple","fullWidth","orientation","size","variant"],y=e=>{let{classes:t,color:n,disabled:r,disableElevation:o,fullWidth:i,orientation:a,variant:s}=e,c={root:["root",s,"vertical"===a&&"vertical",i&&"fullWidth",o&&"disableElevation"],grouped:["grouped",`grouped${(0,u.Z)(a)}`,`grouped${(0,u.Z)(s)}`,`grouped${(0,u.Z)(s)}${(0,u.Z)(a)}`,`grouped${(0,u.Z)(s)}${(0,u.Z)(n)}`,r&&"disabled"]};return(0,l.Z)(c,h,t)},w=(0,c.ZP)("div",{name:"MuiButtonGroup",slot:"Root",overridesResolver:(e,t)=>{let{ownerState:n}=e;return[{[`& .${v.grouped}`]:t.grouped},{[`& .${v.grouped}`]:t[`grouped${(0,u.Z)(n.orientation)}`]},{[`& .${v.grouped}`]:t[`grouped${(0,u.Z)(n.variant)}`]},{[`& .${v.grouped}`]:t[`grouped${(0,u.Z)(n.variant)}${(0,u.Z)(n.orientation)}`]},{[`& .${v.grouped}`]:t[`grouped${(0,u.Z)(n.variant)}${(0,u.Z)(n.color)}`]},t.root,t[n.variant],!0===n.disableElevation&&t.disableElevation,n.fullWidth&&t.fullWidth,"vertical"===n.orientation&&t.vertical]}})(({theme:e,ownerState:t})=>(0,o.Z)({display:"inline-flex",borderRadius:(e.vars||e).shape.borderRadius},"contained"===t.variant&&{boxShadow:(e.vars||e).shadows[2]},t.disableElevation&&{boxShadow:"none"},t.fullWidth&&{width:"100%"},"vertical"===t.orientation&&{flexDirection:"column"},{[`& .${v.grouped}`]:(0,o.Z)({minWidth:40,"&:not(:first-of-type)":(0,o.Z)({},"horizontal"===t.orientation&&{borderTopLeftRadius:0,borderBottomLeftRadius:0},"vertical"===t.orientation&&{borderTopRightRadius:0,borderTopLeftRadius:0},"outlined"===t.variant&&"horizontal"===t.orientation&&{marginLeft:-1},"outlined"===t.variant&&"vertical"===t.orientation&&{marginTop:-1}),"&:not(:last-of-type)":(0,o.Z)({},"horizontal"===t.orientation&&{borderTopRightRadius:0,borderBottomRightRadius:0},"vertical"===t.orientation&&{borderBottomRightRadius:0,borderBottomLeftRadius:0},"text"===t.variant&&"horizontal"===t.orientation&&{borderRight:e.vars?`1px solid rgba(${e.vars.palette.common.onBackgroundChannel} / 0.23)`:`1px solid ${"light"===e.palette.mode?"rgba(0, 0, 0, 0.23)":"rgba(255, 255, 255, 0.23)"}`,[`&.${v.disabled}`]:{borderRight:`1px solid ${(e.vars||e).palette.action.disabled}`}},"text"===t.variant&&"vertical"===t.orientation&&{borderBottom:e.vars?`1px solid rgba(${e.vars.palette.common.onBackgroundChannel} / 0.23)`:`1px solid ${"light"===e.palette.mode?"rgba(0, 0, 0, 0.23)":"rgba(255, 255, 255, 0.23)"}`,[`&.${v.disabled}`]:{borderBottom:`1px solid ${(e.vars||e).palette.action.disabled}`}},"text"===t.variant&&"inherit"!==t.color&&{borderColor:e.vars?`rgba(${e.vars.palette[t.color].mainChannel} / 0.5)`:(0,s.Fq)(e.palette[t.color].main,.5)},"outlined"===t.variant&&"horizontal"===t.orientation&&{borderRightColor:"transparent"},"outlined"===t.variant&&"vertical"===t.orientation&&{borderBottomColor:"transparent"},"contained"===t.variant&&"horizontal"===t.orientation&&{borderRight:`1px solid ${(e.vars||e).palette.grey[400]}`,[`&.${v.disabled}`]:{borderRight:`1px solid ${(e.vars||e).palette.action.disabled}`}},"contained"===t.variant&&"vertical"===t.orientation&&{borderBottom:`1px solid ${(e.vars||e).palette.grey[400]}`,[`&.${v.disabled}`]:{borderBottom:`1px solid ${(e.vars||e).palette.action.disabled}`}},"contained"===t.variant&&"inherit"!==t.color&&{borderColor:(e.vars||e).palette[t.color].dark},{"&:hover":(0,o.Z)({},"outlined"===t.variant&&"horizontal"===t.orientation&&{borderRightColor:"currentColor"},"outlined"===t.variant&&"vertical"===t.orientation&&{borderBottomColor:"currentColor"})}),"&:hover":(0,o.Z)({},"contained"===t.variant&&{boxShadow:"none"})},"contained"===t.variant&&{boxShadow:"none"})})),S=i.forwardRef(function(e,t){let n=(0,d.Z)({props:e,name:"MuiButtonGroup"}),{children:l,className:s,color:u="primary",component:c="div",disabled:p=!1,disableElevation:f=!1,disableFocusRipple:h=!1,disableRipple:v=!1,fullWidth:S=!1,orientation:x="horizontal",size:O="medium",variant:E="outlined"}=n,M=(0,r.Z)(n,b),P=(0,o.Z)({},n,{color:u,component:c,disabled:p,disableElevation:f,disableFocusRipple:h,disableRipple:v,fullWidth:S,orientation:x,size:O,variant:E}),C=y(P),j=i.useMemo(()=>({className:C.grouped,color:u,disabled:p,disableElevation:f,disableFocusRipple:h,disableRipple:v,fullWidth:S,size:O,variant:E}),[u,p,f,h,v,S,O,E,C.grouped]);return(0,g.jsx)(w,(0,o.Z)({as:c,role:"group",className:(0,a.Z)(C.root,s),ref:t,ownerState:P},M,{children:(0,g.jsx)(m.Z.Provider,{value:j,children:l})}))})},98363:function(e,t,n){n.d(t,{Z:function(){return o}});let r=n(67294).createContext({}),o=r},96189:function(e,t,n){n.d(t,{Z:function(){return r}});let r={50:"#eceff1",100:"#cfd8dc",200:"#b0bec5",300:"#90a4ae",400:"#78909c",500:"#607d8b",600:"#546e7a",700:"#455a64",800:"#37474f",900:"#263238",A100:"#cfd8dc",A200:"#b0bec5",A400:"#78909c",A700:"#455a64"}},90706:function(e,t,n){n.d(t,{Z:()=>w});var r=n("38557"),o=n("12568"),i=n("67294"),a=n("35426");let l=i.createContext(null);function s(){let e=i.useContext(l);return e}function u(){return(u=Object.assign?Object.assign.bind():function(e){for(var t=1;t{let e=null===r?n:function(e,t){if("function"==typeof t){let n=t(e);return n}return u({},e,t)}(r,n);return null!=e&&(e[c]=null!==r),e},[n,r]);return(0,d.jsx)(l.Provider,{value:o,children:t})};var f=n("75260"),h=n("34168");let v={};function m(e,t,n,r=!1){return i.useMemo(()=>{let o=e&&t[e]||t;if("function"==typeof n){let i=n(o),l=e?(0,a.Z)({},t,{[e]:i}):i;return r?()=>l:l}return e?(0,a.Z)({},t,{[e]:n}):(0,a.Z)({},t,n)},[e,t,n,r])}let g=function(e){let{children:t,theme:n,themeId:r}=e,o=(0,h.Z)(v),i=s()||v,a=m(r,o,n),l=m(r,i,n,!0);return(0,d.jsx)(p,{theme:l,children:(0,d.jsx)(f.T.Provider,{value:a,children:t})})};var b=n("10606");let y=["theme"];function w(e){let{theme:t}=e,n=(0,o.Z)(e,y),i=t[b.Z];return(0,d.jsx)(g,(0,r.Z)({},n,{themeId:i?b.Z:void 0,theme:i||t}))}},93330:function(e,t,n){n.d(t,{Z:()=>l});var r=n("38557"),o=n("71387");function i(e){return String(parseFloat(e)).length===String(e).length}function a(e){return parseFloat(e)}function l(e,t={}){var n;let{breakpoints:s=["sm","md","lg"],disableAlign:u=!1,factor:c=2,variants:d=["h1","h2","h3","h4","h5","h6","subtitle1","subtitle2","body1","body2","caption","button","overline"]}=t,p=(0,r.Z)({},e);p.typography=(0,r.Z)({},p.typography);let f=p.typography;let h=(n=f.htmlFontSize,(e,t)=>{let r=String(e).match(/[\d.\-+]*\s*(.*)/)[1]||"";if(r===t)return e;let o=a(e);"px"!==r&&("em"===r?o=a(e)*a(n):"rem"===r&&(o=a(e)*a(n)));let i=o;if("px"!==t){if("em"===t)i=o/a(n);else{if("rem"!==t)return e;i=o/a(n)}}return parseFloat(i.toFixed(5))+t}),v=s.map(e=>p.breakpoints.values[e]);return d.forEach(e=>{let t=f[e],n=parseFloat(h(t.fontSize,"rem"));if(n<=1)return;let a=1+(n-1)/c,{lineHeight:l}=t;if(!i(l)&&!u)throw Error((0,o.Z)(6));!i(l)&&(l=parseFloat(h(l,"rem"))/parseFloat(n));let s=null;!u&&(s=e=>(function({size:e,grid:t}){let n=e-e%t,r=n+t;return e-n{let o=t+l*n;null!==i&&(o=i(o)),a[`@media (min-width:${n}px)`]={[e]:`${Math.round(1e4*o)/1e4}${r}`}}),a}({cssProperty:"fontSize",min:a,max:n,unit:"rem",breakpoints:v,transform:s}))}),p}},2734:function(e,t,n){n.d(t,{Z:function(){return a}}),n(67294);var r=n(96682),o=n(90247),i=n(10606);function a(){let e=(0,r.Z)(o.Z);return e[i.Z]||e}},98396:function(e,t,n){n.d(t,{Z:function(){return d}});var r,o=n(67294),i=n(34168),a=n(20539),l=n(58974);function s(e,t,n,r,i){let[a,s]=o.useState(()=>i&&n?n(e).matches:r?r(e).matches:t);return(0,l.Z)(()=>{let t=!0;if(!n)return;let r=n(e),o=()=>{t&&s(r.matches)};return o(),r.addListener(o),()=>{t=!1,r.removeListener(o)}},[e,n]),a}let u=(r||(r=n.t(o,2))).useSyncExternalStore;function c(e,t,n,r,i){let a=o.useCallback(()=>t,[t]),l=o.useMemo(()=>{if(i&&n)return()=>n(e).matches;if(null!==r){let{matches:t}=r(e);return()=>t}return a},[a,e,r,i,n]),[s,c]=o.useMemo(()=>{if(null===n)return[a,()=>()=>{}];let t=n(e);return[()=>t.matches,e=>(t.addListener(e),()=>{t.removeListener(e)})]},[a,n,e]);return u(c,s,l)}function d(e,t={}){let n=(0,i.Z)(),r="undefined"!=typeof window&&void 0!==window.matchMedia,{defaultMatches:o=!1,matchMedia:l=r?window.matchMedia:null,ssrMatchMedia:p=null,noSsr:f=!1}=(0,a.Z)({name:"MuiUseMediaQuery",props:t,theme:n}),h="function"==typeof e?e(n):e;h=h.replace(/^@media( ?)/m,"");let v=(void 0!==u?c:s)(h,o,l,p,f);return v}},58221:function(e,t,n){t.__esModule=!0,t.default=void 0;var r=i(n(67294)),o=i(n(66174));function i(e){return e&&e.__esModule?e:{default:e}}function a(){return(a=Object.assign?Object.assign.bind():function(e){for(var t=1;t1?(0,u.guessMaxImageWidth)(n.state.dimensions):0,supportsWebp:u.supportsWebp}),t=n.props.getUrl,r=t?t(e):e.src,o=n.props.shouldAutoDownload(h(h({},n.state),{},{size:e.size}));n.setState({pickedSrc:e,shouldAutoDownload:o,url:r},function(){o&&n.load(!1)})}}),g(v(n),"onLeave",function(){n.state.loadState===y&&!n.state.userTriggered&&(n.setState({inViewport:!1}),n.cancel(!1))}),n.state={loadState:b,connection:u.nativeConnection?{downlink:navigator.connection.downlink,rtt:navigator.connection.rtt,effectiveType:navigator.connection.effectiveType}:null,onLine:!0,overThreshold:!1,inViewport:!1,userTriggered:!1,possiblySlowNetwork:!1},n}n=t,o=e,n.prototype=Object.create(o.prototype),n.prototype.constructor=n,m(n,o);var n,o,l=t.prototype;return l.componentDidMount=function(){var e=this;u.nativeConnection?(this.updateConnection=function(){navigator.onLine&&e.state.loadState===b&&e.setState({connection:{effectiveType:navigator.connection.effectiveType,downlink:navigator.connection.downlink,rtt:navigator.connection.rtt}})},navigator.connection.addEventListener("onchange",this.updateConnection)):this.props.threshold&&(this.possiblySlowNetworkListener=function(t){if(e.state.loadState===b){var n=t.detail.possiblySlowNetwork;!e.state.possiblySlowNetwork&&n&&e.setState({possiblySlowNetwork:n})}},window.document.addEventListener("possiblySlowNetwork",this.possiblySlowNetworkListener)),this.updateOnlineStatus=function(){return e.setState({onLine:navigator.onLine})},this.updateOnlineStatus(),window.addEventListener("online",this.updateOnlineStatus),window.addEventListener("offline",this.updateOnlineStatus)},l.componentWillUnmount=function(){this.clear(),u.nativeConnection?navigator.connection.removeEventListener("onchange",this.updateConnection):this.props.threshold&&window.document.removeEventListener("possiblySlowNetwork",this.possiblySlowNetworkListener),window.removeEventListener("online",this.updateOnlineStatus),window.removeEventListener("offline",this.updateOnlineStatus)},l.clear=function(){this.loader&&(this.loader.cancel(),this.loader=void 0)},l.cancel=function(e){y===this.state.loadState&&(this.clear(),this.loadStateChange(b,e))},l.loadStateChange=function(e,t,n){void 0===n&&(n=null),this.setState({loadState:e,overThreshold:!1,userTriggered:!!t,loadInfo:n})},l.render=function(){var e=this,t=this.props.getIcon(this.state),n=this.props.getMessage(t,this.state);return r.default.createElement(i.Waypoint,{onEnter:this.onEnter,onLeave:this.onLeave},r.default.createElement(a.default,p({},this.props,(0,u.fallbackParams)(this.props),{onClick:this.onClick,icon:t,src:this.state.url||"",onDimensions:function(t){return e.setState({dimensions:t})},message:n})))},t}(r.Component);t.default=x,g(x,"propTypes",{threshold:o.default.number,getUrl:o.default.func,srcSet:o.default.arrayOf(o.default.shape({width:o.default.number.isRequired,src:o.default.string,size:o.default.number,format:o.default.oneOf(["jpeg","jpg","webp","png","gif"])})).isRequired,shouldAutoDownload:o.default.func,getMessage:o.default.func,getIcon:o.default.func,loader:o.default.oneOf(["image","xhr"]),width:o.default.number.isRequired,height:o.default.number.isRequired,placeholder:o.default.oneOfType([o.default.shape({color:o.default.string.isRequired}),o.default.shape({lqip:o.default.string.isRequired})]).isRequired,icons:o.default.object.isRequired,theme:o.default.object.isRequired}),g(x,"defaultProps",{shouldAutoDownload:function(e){var t=e.connection,n=e.size,r=e.threshold;if(e.possiblySlowNetwork)return!1;if(!t)return!0;var o=t.downlink,i=t.rtt;switch(t.effectiveType){case"slow-2g":case"2g":return!1;case"3g":if(o&&n&&r)return 8*n/(1e3*o)+i1?t.join(" "):t[0],style:e}}},42863:function(e,t){t.__esModule=!0,t.loadStates=t.icons=void 0;var n="loading",r="loaded",o="error";t.icons={load:"load",loading:n,loaded:r,error:o,noicon:"noicon",offline:"offline"};t.loadStates={initial:"initial",loading:n,loaded:r,error:o}},26889:function(e,t){t.__esModule=!0,t.supportsWebp=t.ssr=t.selectSrc=t.nativeConnection=t.guessMaxImageWidth=t.fallbackParams=t.bytesToSize=void 0;var n="undefined"==typeof window||"ReactSnap"===window.navigator.userAgent;t.ssr=n;var r=!n&&!!window.navigator.connection;t.nativeConnection=r;t.guessMaxImageWidth=function(e,t){if(n)return 0;!t&&(t=window);var r,o=e.width,i=t.screen,a=i.width,l=i.height,s=document.documentElement,u=t.innerWidth||s.clientWidth,c=t.innerHeight||s.clientHeight,d=t.devicePixelRatio||1;if(a>u){var p=document.getElementsByTagName("body")[0],f=u-o;r=(p.clientHeight>c||p.clientHeight>l)&&f<=15?a-f:o/u*a}else r=o;return r*d};t.bytesToSize=function(e){var t=["Bytes","KB","MB","GB","TB"];if(0===e)return"n/a";var n=parseInt(Math.floor(Math.log(e)/Math.log(1024)),10);return 0===n?e+" "+t[n]:(e/Math.pow(1024,n)).toFixed(1)+" "+t[n]};var o=function(){if(n)return!1;var e=document.createElement("canvas");return!!(e.getContext&&e.getContext("2d"))&&0===e.toDataURL("image/webp").indexOf("data:image/webp")}();t.supportsWebp=o;var i=function(e){return"webp"===e.format||e.src&&e.src.match(/\.webp($|\?.*)/i)};t.selectSrc=function(e){var t,n,r=e.srcSet,o=e.maxImageWidth,a=e.supportsWebp;if(0===r.length)throw Error("Need at least one item in srcSet");if(a)0===(t=r.filter(i)).length&&(t=r);else if(0===(t=r.filter(function(e){return!i(e)})).length)throw Error("Need at least one supported format item in srcSet");var l=t.filter(function(e){return e.width>=o});return 0===l.length?(l=t,n=Math.max.apply(null,l.map(function(e){return e.width}))):n=Math.min.apply(null,l.map(function(e){return e.width})),t.filter(function(e){return e.width===n})[0]};t.fallbackParams=function(e){var t=e.srcSet,r=e.getUrl;if(!n)return{};var o=t.filter(function(e){return!i(e)}),a=o[0];return{nsSrcSet:o.map(function(e){return(r?r(e):e.src)+" "+e.width+"w"}).join(","),nsSrc:r?r(a):a.src,ssr:n}}},4891:function(e,t,n){t.__esModule=!0,t.default=void 0;var r,o=u(n(58221)),i=u(n(18524)),a=u(n(48551)),l=u(n(15802)),s=n(42863);function u(e){return e&&e.__esModule?e:{default:e}}var c=s.icons.load,d=s.icons.loading,p=s.icons.loaded,f=s.icons.error,h=s.icons.noicon,v=s.icons.offline,m=((r={})[c]=o.default,r[d]=l.default,r[p]=null,r[f]=a.default,r[h]=null,r[v]=i.default,r);t.default=m},85082:function(e,t,n){t.__esModule=!0,t.xhrLoader=t.timeout=t.imageLoader=t.combineCancel=void 0;var r=n(71499);function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function i(e){for(var t=1;tx});var r,o=n("35091"),i=!!("undefined"!=typeof window&&window.document&&window.document.createElement),a=void 0;function l(e){e.handlers===e.nextHandlers&&(e.nextHandlers=e.handlers.slice())}function s(e){this.target=e,this.events={}}s.prototype.getEventHandlers=function(e,t){var n,r=String(e)+" "+String((n=t)?!0===n?100:(n.capture<<0)+(n.passive<<1)+(n.once<<2):0);return!this.events[r]&&(this.events[r]={handlers:[],handleEvent:void 0},this.events[r].nextHandlers=this.events[r].handlers),this.events[r]},s.prototype.handleEvent=function(e,t,n){var r=this.getEventHandlers(e,t);r.handlers=r.nextHandlers,r.handlers.forEach(function(e){e&&e(n)})},s.prototype.add=function(e,t,n){var r=this,o=this.getEventHandlers(e,n);l(o),0===o.nextHandlers.length&&(o.handleEvent=this.handleEvent.bind(this,e,n),this.target.addEventListener(e,o.handleEvent,n)),o.nextHandlers.push(t);var i=!0;return function(){if(!!i){i=!1,l(o);var a=o.nextHandlers.indexOf(t);o.nextHandlers.splice(a,1),0===o.nextHandlers.length&&(r.target&&r.target.removeEventListener(e,o.handleEvent,n),o.handleEvent=void 0)}}};var u="__consolidated_events_handlers__";function c(e,t,n,r){!e[u]&&(e[u]=new s(e));var o,l=(o=r)?(void 0===a&&(a=function(){if(!i||!window.addEventListener||!window.removeEventListener||!Object.defineProperty)return!1;var e=!1;try{var t=Object.defineProperty({},"passive",{get:function(){e=!0}}),n=function(){};window.addEventListener("testPassiveEventSupport",n,t),window.removeEventListener("testPassiveEventSupport",n,t)}catch(e){}return e}()),a)?o:!!o.capture:void 0;return e[u].add(t,n,l)}var d=n("67294"),p=n("59864");function f(e,t){var n,r=!isNaN(parseFloat(n=e))&&isFinite(n)?parseFloat(n):"px"===n.slice(-2)?parseFloat(n.slice(0,-2)):void 0;if("number"==typeof r)return r;var o=function(e){if("%"===e.slice(-1))return parseFloat(e.slice(0,-1))/100}(e);if("number"==typeof o)return o*t}var h="above",v="inside",m="below",g="invisible";function b(e){return"string"==typeof e.type}var y=[];function w(e){y.push(e),!r&&(r=setTimeout(function(){var e;for(r=null;e=y.shift();)e()},0));var t=!0;return function(){if(!t)return;t=!1;var n=y.indexOf(e);if(-1!==n)y.splice(n,1),!y.length&&r&&(clearTimeout(r),r=null)}}var S="undefined"!=typeof window,x=function(e){function t(t){var n;return(n=e.call(this,t)||this).refElement=function(e){n._ref=e},n}(0,o.Z)(t,e);var r=t.prototype;return r.componentDidMount=function(){var e=this;if(!!S)this.cancelOnNextTick=w(function(){e.cancelOnNextTick=null;var t=e.props,n=t.children;t.debug,!function(e,t){if(e&&!b(e)&&!t)throw Error(" needs a DOM element to compute boundaries. The child you passed is neither a DOM element (e.g.
) nor does it use the innerRef prop.\n\nSee https://goo.gl/LrBNgw for more info.")}(n,e._ref),e._handleScroll=e._handleScroll.bind(e),e.scrollableAncestor=e._findScrollableAncestor();e.scrollEventListenerUnsubscribe=c(e.scrollableAncestor,"scroll",e._handleScroll,{passive:!0}),e.resizeEventListenerUnsubscribe=c(window,"resize",e._handleScroll,{passive:!0}),e._handleScroll(null)})},r.componentDidUpdate=function(){var e=this;if(!!S&&!!this.scrollableAncestor&&!this.cancelOnNextTick)this.cancelOnNextTick=w(function(){e.cancelOnNextTick=null,e._handleScroll(null)})},r.componentWillUnmount=function(){if(!!S)this.scrollEventListenerUnsubscribe&&this.scrollEventListenerUnsubscribe(),this.resizeEventListenerUnsubscribe&&this.resizeEventListenerUnsubscribe(),this.cancelOnNextTick&&this.cancelOnNextTick()},r._findScrollableAncestor=function(){var e,t=this.props,r=t.horizontal,o=t.scrollableAncestor;if(o){;return"window"===(e=o)?n.g.window:e}for(var i=this._ref;i.parentNode&&(i=i.parentNode)!==document.body;){;var a=window.getComputedStyle(i),l=(r?a.getPropertyValue("overflow-x"):a.getPropertyValue("overflow-y"))||a.getPropertyValue("overflow");if("auto"===l||"scroll"===l||"overlay"===l)return i}return window},r._handleScroll=function(e){if(!this._ref)return;var t,n=this._getBounds();var r=(t=n).viewportBottom-t.viewportTop==0?g:t.viewportTop<=t.waypointTop&&t.waypointTop<=t.viewportBottom||t.viewportTop<=t.waypointBottom&&t.waypointBottom<=t.viewportBottom||t.waypointTop<=t.viewportTop&&t.viewportBottom<=t.waypointBottom?v:t.viewportBottom({...e,src:e.path})),getMessage:a})}},50065:function(e,t,n){n.d(t,{Z:function(){return l},a:function(){return a}});var r=n(67294);let o={},i=r.createContext(o);function a(e){let t=r.useContext(i);return r.useMemo(function(){return"function"==typeof e?e(t):{...t,...e}},[t,e])}function l(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:a(e.components),r.createElement(i.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/3a2db09e.844e4be4.js b/assets/js/3a2db09e.844e4be4.js deleted file mode 100644 index 1579f695f..000000000 --- a/assets/js/3a2db09e.844e4be4.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[9361],{57588:l=>{l.exports=JSON.parse('{"tags":[{"label":"housekeeping","permalink":"/blog/tags/housekeeping","count":1},{"label":"cleanup","permalink":"/blog/tags/cleanup","count":1},{"label":"devlog","permalink":"/blog/tags/devlog","count":4},{"label":"solus","permalink":"/blog/tags/solus","count":5},{"label":"pgo","permalink":"/blog/tags/pgo","count":1},{"label":"lto","permalink":"/blog/tags/lto","count":1},{"label":"packaging","permalink":"/blog/tags/packaging","count":1},{"label":"optimization","permalink":"/blog/tags/optimization","count":1},{"label":"3","permalink":"/blog/tags/3","count":1},{"label":"clang","permalink":"/blog/tags/clang","count":1},{"label":"gnu","permalink":"/blog/tags/gnu","count":1},{"label":"llvm","permalink":"/blog/tags/llvm","count":1},{"label":"glibc","permalink":"/blog/tags/glibc","count":1},{"label":"hwcaps","permalink":"/blog/tags/hwcaps","count":1},{"label":"x86_64-v3","permalink":"/blog/tags/x-86-64-v-3","count":1},{"label":"MATE","permalink":"/blog/tags/mate","count":1},{"label":"eopkg","permalink":"/blog/tags/eopkg","count":1},{"label":"moss","permalink":"/blog/tags/moss","count":1},{"label":"hello","permalink":"/blog/tags/hello","count":1},{"label":"firstpost","permalink":"/blog/tags/firstpost","count":1}]}')}}]); \ No newline at end of file diff --git a/assets/js/3a2db09e.a7968b65.js b/assets/js/3a2db09e.a7968b65.js new file mode 100644 index 000000000..81b65b649 --- /dev/null +++ b/assets/js/3a2db09e.a7968b65.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([["7143"],{2668:function(l){l.exports=JSON.parse('{"tags":[{"label":"housekeeping","permalink":"/blog/tags/housekeeping","count":1},{"label":"cleanup","permalink":"/blog/tags/cleanup","count":1},{"label":"devlog","permalink":"/blog/tags/devlog","count":4},{"label":"solus","permalink":"/blog/tags/solus","count":5},{"label":"pgo","permalink":"/blog/tags/pgo","count":1},{"label":"lto","permalink":"/blog/tags/lto","count":1},{"label":"packaging","permalink":"/blog/tags/packaging","count":1},{"label":"optimization","permalink":"/blog/tags/optimization","count":1},{"label":"3","permalink":"/blog/tags/3","count":1},{"label":"clang","permalink":"/blog/tags/clang","count":1},{"label":"gnu","permalink":"/blog/tags/gnu","count":1},{"label":"llvm","permalink":"/blog/tags/llvm","count":1},{"label":"glibc","permalink":"/blog/tags/glibc","count":1},{"label":"hwcaps","permalink":"/blog/tags/hwcaps","count":1},{"label":"x86_64-v3","permalink":"/blog/tags/x-86-64-v-3","count":1},{"label":"MATE","permalink":"/blog/tags/mate","count":1},{"label":"eopkg","permalink":"/blog/tags/eopkg","count":1},{"label":"moss","permalink":"/blog/tags/moss","count":1},{"label":"hello","permalink":"/blog/tags/hello","count":1},{"label":"firstpost","permalink":"/blog/tags/firstpost","count":1}]}')}}]); \ No newline at end of file diff --git a/assets/js/3a93f7ba.29317772.js b/assets/js/3a93f7ba.29317772.js new file mode 100644 index 000000000..e1e7c1887 --- /dev/null +++ b/assets/js/3a93f7ba.29317772.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([["3648"],{36444:function(e){e.exports=JSON.parse('{"tag":{"label":"hwcaps","permalink":"/blog/tags/hwcaps","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/hwcaps","page":1,"postsPerPage":1,"totalPages":1,"totalCount":1,"blogDescription":"The Solus Development (b)log!","blogTitle":"Solus DevLog"}}')}}]); \ No newline at end of file diff --git a/assets/js/3a93f7ba.9dba08d8.js b/assets/js/3a93f7ba.9dba08d8.js deleted file mode 100644 index a39424ad5..000000000 --- a/assets/js/3a93f7ba.9dba08d8.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[7422],{76972:e=>{e.exports=JSON.parse('{"tag":{"label":"hwcaps","permalink":"/blog/tags/hwcaps","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/hwcaps","page":1,"postsPerPage":1,"totalPages":1,"totalCount":1,"blogDescription":"The Solus Development (b)log!","blogTitle":"Solus DevLog"}}')}}]); \ No newline at end of file diff --git a/assets/js/3bd0a7e9.6115ca87.js b/assets/js/3bd0a7e9.6115ca87.js new file mode 100644 index 000000000..923f933b7 --- /dev/null +++ b/assets/js/3bd0a7e9.6115ca87.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([["3338"],{68103:function(a){a.exports=JSON.parse('{"categoryGeneratedIndex":{"title":"Advanced Configuration","slug":"/category/advanced-configuration","permalink":"/docs/category/advanced-configuration","sidebar":"packagingSidebar","navigation":{"previous":{"title":"Packaging Changes","permalink":"/docs/packaging/packaging-changes"},"next":{"title":"Eopkg Configuration","permalink":"/docs/packaging/advanced-config/eopkg-configuration"}}}}')}}]); \ No newline at end of file diff --git a/assets/js/3bd0a7e9.b12fda7c.js b/assets/js/3bd0a7e9.b12fda7c.js deleted file mode 100644 index 23093a9c2..000000000 --- a/assets/js/3bd0a7e9.b12fda7c.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[247],{60032:a=>{a.exports=JSON.parse('{"categoryGeneratedIndex":{"title":"Advanced Configuration","slug":"/category/advanced-configuration","permalink":"/docs/category/advanced-configuration","sidebar":"packagingSidebar","navigation":{"previous":{"title":"Packaging Changes","permalink":"/docs/packaging/packaging-changes"},"next":{"title":"Eopkg Configuration","permalink":"/docs/packaging/advanced-config/eopkg-configuration"}}}}')}}]); \ No newline at end of file diff --git a/assets/js/3fdfc7ff.274d8cb8.js b/assets/js/3fdfc7ff.274d8cb8.js new file mode 100644 index 000000000..ee457c48c --- /dev/null +++ b/assets/js/3fdfc7ff.274d8cb8.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([["3755"],{97523:function(e,s,n){n.r(s),n.d(s,{metadata:()=>t,contentTitle:()=>r,default:()=>h,assets:()=>d,toc:()=>i,frontMatter:()=>o});var t=JSON.parse('{"id":"user/package-management/basics","title":"Basics to Package Management","description":"Solus uses the eopkg package manager. You can use eopkg to install, update, and remove software packages on your Solus system.","source":"@site/docs/user/package-management/basics.md","sourceDirName":"user/package-management","slug":"/user/package-management/basics","permalink":"/docs/user/package-management/basics","draft":false,"unlisted":false,"editUrl":"https://github.com/getsolus/help-center-docs/tree/master/docs/user/package-management/basics.md","tags":[],"version":"current","lastUpdatedAt":1733757592000,"frontMatter":{"title":"Basics to Package Management","summary":"Basics to Package Management"},"sidebar":"userSidebar","previous":{"title":"Package Management","permalink":"/docs/category/package-management"},"next":{"title":"History and Software Rollback","permalink":"/docs/user/package-management/history-and-rollback"}}'),a=n("85893"),c=n("50065");let o={title:"Basics to Package Management",summary:"Basics to Package Management"},r="Basics of package management in Solus",d={},i=[];function l(e){let s={code:"code",h1:"h1",header:"header",p:"p",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,c.a)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(s.header,{children:(0,a.jsx)(s.h1,{id:"basics-of-package-management-in-solus",children:"Basics of package management in Solus"})}),"\n",(0,a.jsxs)(s.p,{children:["Solus uses the eopkg package manager. You can use ",(0,a.jsx)(s.code,{children:"eopkg"})," to install, update, and remove software packages on your Solus system."]}),"\n",(0,a.jsxs)(s.p,{children:["The following table lists the most common ",(0,a.jsx)(s.code,{children:"eopkg"})," commands:"]}),"\n",(0,a.jsxs)(s.table,{children:[(0,a.jsx)(s.thead,{children:(0,a.jsxs)(s.tr,{children:[(0,a.jsx)(s.th,{children:"Action"}),(0,a.jsx)(s.th,{children:"Command"}),(0,a.jsx)(s.th,{children:"Example"})]})}),(0,a.jsxs)(s.tbody,{children:[(0,a.jsxs)(s.tr,{children:[(0,a.jsx)(s.td,{children:"Install software"}),(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"sudo eopkg install PACKAGE_NAME"})}),(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"sudo eopkg install gnome-documents gnome-music"})})]}),(0,a.jsxs)(s.tr,{children:[(0,a.jsx)(s.td,{children:"Reinstall software"}),(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"sudo eopkg install --reinstall PACKAGE_NAME"})}),(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"sudo eopkg install --reinstall gnome-documents gnome-music"})})]}),(0,a.jsxs)(s.tr,{children:[(0,a.jsx)(s.td,{children:"Uninstall software"}),(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"sudo eopkg remove PACKAGE_NAME"})}),(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"sudo eopkg remove gnome-documents gnome-music"})})]}),(0,a.jsxs)(s.tr,{children:[(0,a.jsx)(s.td,{children:"Update your system"}),(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"sudo eopkg upgrade"})}),(0,a.jsx)(s.td,{children:"-"})]}),(0,a.jsxs)(s.tr,{children:[(0,a.jsx)(s.td,{children:"Update specific software"}),(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"sudo eopkg upgrade PACKAGE_NAME"})}),(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"sudo eopkg upgrade firefox"})})]}),(0,a.jsxs)(s.tr,{children:[(0,a.jsx)(s.td,{children:"Search for software"}),(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"eopkg search KEYWORD"})}),(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"eopkg search documents"})})]}),(0,a.jsxs)(s.tr,{children:[(0,a.jsx)(s.td,{children:"Get information on software, such as description or version"}),(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"eopkg info PACKAGE_NAME"})}),(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"eopkg info gnome-documents"})})]})]})]})]})}function h(e={}){let{wrapper:s}={...(0,c.a)(),...e.components};return s?(0,a.jsx)(s,{...e,children:(0,a.jsx)(l,{...e})}):l(e)}},50065:function(e,s,n){n.d(s,{Z:function(){return r},a:function(){return o}});var t=n(67294);let a={},c=t.createContext(a);function o(e){let s=t.useContext(c);return t.useMemo(function(){return"function"==typeof e?e(s):{...s,...e}},[s,e])}function r(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:o(e.components),t.createElement(c.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/3fdfc7ff.ec6f3b7c.js b/assets/js/3fdfc7ff.ec6f3b7c.js deleted file mode 100644 index e4586d1fa..000000000 --- a/assets/js/3fdfc7ff.ec6f3b7c.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[4608],{57884:(e,s,n)=>{n.r(s),n.d(s,{assets:()=>d,contentTitle:()=>o,default:()=>h,frontMatter:()=>c,metadata:()=>r,toc:()=>i});var t=n(85893),a=n(11151);const c={title:"Basics to Package Management",summary:"Basics to Package Management"},o="Basics of package management in Solus",r={id:"user/package-management/basics",title:"Basics to Package Management",description:"Solus uses the eopkg package manager. You can use eopkg to install, update, and remove software packages on your Solus system.",source:"@site/docs/user/package-management/basics.md",sourceDirName:"user/package-management",slug:"/user/package-management/basics",permalink:"/docs/user/package-management/basics",draft:!1,unlisted:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/package-management/basics.md",tags:[],version:"current",lastUpdatedAt:1732716912e3,frontMatter:{title:"Basics to Package Management",summary:"Basics to Package Management"},sidebar:"userSidebar",previous:{title:"Package Management",permalink:"/docs/category/package-management"},next:{title:"History and Software Rollback",permalink:"/docs/user/package-management/history-and-rollback"}},d={},i=[];function l(e){const s={code:"code",h1:"h1",header:"header",p:"p",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,a.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(s.header,{children:(0,t.jsx)(s.h1,{id:"basics-of-package-management-in-solus",children:"Basics of package management in Solus"})}),"\n",(0,t.jsxs)(s.p,{children:["Solus uses the eopkg package manager. You can use ",(0,t.jsx)(s.code,{children:"eopkg"})," to install, update, and remove software packages on your Solus system."]}),"\n",(0,t.jsxs)(s.p,{children:["The following table lists the most common ",(0,t.jsx)(s.code,{children:"eopkg"})," commands:"]}),"\n",(0,t.jsxs)(s.table,{children:[(0,t.jsx)(s.thead,{children:(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.th,{children:"Action"}),(0,t.jsx)(s.th,{children:"Command"}),(0,t.jsx)(s.th,{children:"Example"})]})}),(0,t.jsxs)(s.tbody,{children:[(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:"Install software"}),(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"sudo eopkg install PACKAGE_NAME"})}),(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"sudo eopkg install gnome-documents gnome-music"})})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:"Reinstall software"}),(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"sudo eopkg install --reinstall PACKAGE_NAME"})}),(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"sudo eopkg install --reinstall gnome-documents gnome-music"})})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:"Uninstall software"}),(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"sudo eopkg remove PACKAGE_NAME"})}),(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"sudo eopkg remove gnome-documents gnome-music"})})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:"Update your system"}),(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"sudo eopkg upgrade"})}),(0,t.jsx)(s.td,{children:"-"})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:"Update specific software"}),(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"sudo eopkg upgrade PACKAGE_NAME"})}),(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"sudo eopkg upgrade firefox"})})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:"Search for software"}),(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"eopkg search KEYWORD"})}),(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"eopkg search documents"})})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:"Get information on software, such as description or version"}),(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"eopkg info PACKAGE_NAME"})}),(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"eopkg info gnome-documents"})})]})]})]})]})}function h(e={}){const{wrapper:s}={...(0,a.a)(),...e.components};return s?(0,t.jsx)(s,{...e,children:(0,t.jsx)(l,{...e})}):l(e)}},11151:(e,s,n)=>{n.d(s,{Z:()=>r,a:()=>o});var t=n(67294);const a={},c=t.createContext(a);function o(e){const s=t.useContext(c);return t.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function r(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:o(e.components),t.createElement(c.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/3ff05326.1d58d170.js b/assets/js/3ff05326.1d58d170.js new file mode 100644 index 000000000..d67f0d5ff --- /dev/null +++ b/assets/js/3ff05326.1d58d170.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([["1918"],{32551:function(e,s,n){n.r(s),n.d(s,{metadata:()=>i,contentTitle:()=>t,default:()=>a,assets:()=>c,toc:()=>o,frontMatter:()=>l});var i=JSON.parse('{"id":"packaging/package.yml","title":"Package YAML","description":"Each package is generated from a single build file named package.yml. This file is sometimes also called a \\"recipe\\" since it provides steps for building a package. It provides all of the required metadata for the package manager, plus the packaging steps involved to produce a package. This file follows the YAML specification.","source":"@site/docs/packaging/package.yml.md","sourceDirName":"packaging","slug":"/packaging/package.yml","permalink":"/docs/packaging/package.yml","draft":false,"unlisted":false,"editUrl":"https://github.com/getsolus/help-center-docs/tree/master/docs/packaging/package.yml.md","tags":[],"version":"current","lastUpdatedAt":1733757592000,"frontMatter":{"title":"Package YAML","summary":"Learning the package.yml packaging format"},"sidebar":"packagingSidebar","previous":{"title":"Monitoring YAML","permalink":"/docs/packaging/monitoring.yml"},"next":{"title":"Packaging Practices","permalink":"/docs/packaging/packaging-practices"}}'),r=n("85893"),d=n("50065");let l={title:"Package YAML",summary:"Learning the package.yml packaging format"},t="package.yml",c={},o=[{value:"Format",id:"format",level:2},{value:"Keys",id:"keys",level:2},{value:"Mandatory keys",id:"mandatory-keys",level:3},{value:""source" key",id:"source-key",level:4},{value:"Optional, supported keys",id:"optional-supported-keys",level:3},{value:"Packaging step keys, optional",id:"packaging-step-keys-optional",level:3},{value:"Optimize values",id:"optimize-values",level:2},{value:"Macros",id:"macros",level:2},{value:"Usage",id:"usage",level:3},{value:"Actionable macros",id:"actionable-macros",level:3},{value:"Haskell actionable macros",id:"haskell-actionable-macros",level:3},{value:"Ninja actionable macros",id:"ninja-actionable-macros",level:3},{value:"Perl actionable macros",id:"perl-actionable-macros",level:3},{value:"Python actionable macros",id:"python-actionable-macros",level:3},{value:"Ruby actionable macros",id:"ruby-actionable-macros",level:3},{value:"Rust (cargo) actionable macros",id:"rust-cargo-actionable-macros",level:3},{value:"Qt actionable macros",id:"qt-actionable-macros",level:3},{value:"Waf actionable macros",id:"waf-actionable-macros",level:3},{value:"BOLT actionable macros",id:"bolt-actionable-macros",level:3},{value:"Variable macros",id:"variable-macros",level:3},{value:"Variables",id:"variables",level:2},{value:"Types",id:"types",level:2},{value:"string",id:"string",level:3},{value:"string(s)",id:"strings",level:3},{value:"integer",id:"integer",level:3},{value:"list",id:"list",level:3},{value:"dict",id:"dict",level:3},{value:"dict(s)",id:"dicts",level:3},{value:"Packaging practices",id:"packaging-practices",level:2}];function h(e){let s={a:"a",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",h4:"h4",header:"header",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,d.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(s.header,{children:(0,r.jsx)(s.h1,{id:"packageyml",children:(0,r.jsx)(s.code,{children:"package.yml"})})}),"\n",(0,r.jsxs)(s.p,{children:["Each package is generated from a single build file named ",(0,r.jsx)(s.code,{children:"package.yml"}),'. This file is sometimes also called a "recipe" since it provides steps for building a package. It provides all of the required metadata for the package manager, plus the packaging steps involved to produce a package. This file follows the YAML specification.']}),"\n",(0,r.jsx)(s.h2,{id:"format",children:"Format"}),"\n",(0,r.jsxs)(s.p,{children:["All ",(0,r.jsx)(s.code,{children:"package.yml"})," files ",(0,r.jsx)(s.strong,{children:"must"})," be valid YAML."]}),"\n",(0,r.jsxs)(s.p,{children:["The file is organised into a key\u2192value hierarchy. The ",(0,r.jsx)(s.code,{children:"ypkg"})," tool parses a ",(0,r.jsx)(s.code,{children:"package.yml"})," file to build the corresponding package in a declarative manner. As such, most of the keys are simple strings, lists or nested key\u2192value pairs. A special case consists in the packaging steps, which are scripts."]}),"\n",(0,r.jsx)(s.p,{children:"An example file follows:"}),"\n",(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-yaml",children:"name : nano\nversion : 2.9.5\nrelease : 96\nsource :\n - https://www.nano-editor.org/dist/v2.9/nano-2.9.5.tar.xz: 7b8d181cb57f42fa86a380bb9ad46abab859b60383607f731b65a9077f4b4e19\nhomepage : https://www.nano-editor.org\nlicense : GPL-3.0-or-later\nsummary : Small, friendly text editor inspired by Pico\ncomponent : system.devel\ndescription: |\n GNU nano is an easy-to-use text editor originally designed as a replacement for Pico, the ncurses-based editor from the non-free mailer package Pine (itself now available under the Apache License as Alpine).\nsetup : |\n %patch -p1 -i $pkgfiles/0001-Use-a-stateless-configuration.patch\n %reconfigure --enable-utf8 --docdir=/usr/share/doc/nano\nbuild : |\n %make\ninstall : |\n %make_install\n install -D -m 00644 $pkgfiles/nanorc $installdir/usr/share/defaults/nano/nanorc\n install -D -m 00644 $pkgfiles/git.nanorc $installdir/usr/share/nano/git.nanorc\n # https://github.com/scopatz/nanorc\n for rcFile in $pkgfiles/nanorc-extras/*.nanorc; do\n install -m 00644 $rcFile $installdir/usr/share/nano\n done\n"})}),"\n",(0,r.jsx)(s.h2,{id:"keys",children:"Keys"}),"\n",(0,r.jsxs)(s.p,{children:["Not all fields in ",(0,r.jsx)(s.code,{children:"package.yml"})," are mandatory, but a small selection are. Below is the complete list of the available fields."]}),"\n",(0,r.jsx)(s.h3,{id:"mandatory-keys",children:"Mandatory keys"}),"\n",(0,r.jsxs)(s.table,{children:[(0,r.jsx)(s.thead,{children:(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.th,{children:"Key Name"}),(0,r.jsx)(s.th,{children:"Type"}),(0,r.jsx)(s.th,{children:"Description"})]})}),(0,r.jsxs)(s.tbody,{children:[(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.strong,{children:"name"})}),(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"string"})}),(0,r.jsx)(s.td,{children:"The name of the package. This is also used as the base of all sub-package names. Unless unavoidable, this should match the upstream name."})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.strong,{children:"version"})}),(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"string"})}),(0,r.jsx)(s.td,{children:"The version of the currently packaged software. This is taken from the tarball in most cases."})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.strong,{children:"release"})}),(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"integer"})}),(0,r.jsxs)(s.td,{children:["Specifies the current release number. Updates in the package number are based on this ",(0,r.jsx)(s.code,{children:"release"})," number, ",(0,r.jsx)(s.em,{children:"not"})," the ",(0,r.jsx)(s.code,{children:"version"})," number. As such, to release an update to users, this number must be incremented by one."]})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.strong,{children:"source"})}),(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"dict(s)"})}),(0,r.jsxs)(s.td,{children:["See ",(0,r.jsx)(s.a,{href:"/docs/packaging/package.yml#source-key",children:"source key"})," below."]})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.strong,{children:"homepage"})}),(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"string"})}),(0,r.jsx)(s.td,{children:"Provides a link to the package's homepage, used in the Software Center."})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.strong,{children:"license"})}),(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"string(s)"})}),(0,r.jsxs)(s.td,{children:["Valid upstream license(s). Try to ensure these use ",(0,r.jsx)(s.a,{href:"https://spdx.org/licenses/",children:"SPDX identifiers"}),"."]})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.strong,{children:"summary"})}),(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"string"})}),(0,r.jsx)(s.td,{children:"Brief package summary, or display name."})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.strong,{children:"component"})}),(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"string"})}),(0,r.jsxs)(s.td,{children:["Component / group of packages this package belongs to. Check available components via ",(0,r.jsx)(s.code,{children:"eopkg lc"}),"."]})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.strong,{children:"description"})}),(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"string"})}),(0,r.jsx)(s.td,{children:"More extensive description of the software, usually taken from the vendor website."})]})]})]}),"\n",(0,r.jsx)(s.h4,{id:"source-key",children:'"source" key'}),"\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:["Tarball source","\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:['Upstream source URL to the source code archive (often called the "tarball"), followed by the ',(0,r.jsx)(s.code,{children:"sha256sum"})," for the tarball, as a value."]}),"\n",(0,r.jsxs)(s.li,{children:["Example: ",(0,r.jsx)(s.code,{children:"https://www.nano-editor.org/dist/v7/nano-7.2.tar.xz : 86f3442768bd2873cec693f83cdf80b4b444ad3cc14760b74361474fc87a4526"})]}),"\n",(0,r.jsx)(s.li,{children:"Tarball sources are preferred over git sources, whenever possible, because git tags can be changed to point to different commits."}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(s.li,{children:["Git source","\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:["Git repository URL prefixed with ",(0,r.jsx)(s.code,{children:"git|"}),", followed by the git tag or commit hash, as a value."]}),"\n",(0,r.jsxs)(s.li,{children:["Example: ",(0,r.jsx)(s.code,{children:"git|https://github.com/getsolus/solus-sc.git : 6e786b3e86982272717ca4bed4f783fc43a678f3"})]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(s.li,{children:["Multiple sources","\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:["If multiple sources are listed, only the first source will be copied from the ",(0,r.jsx)(s.code,{children:"$sources"})," directory to the ",(0,r.jsx)(s.code,{children:"$workdir"})," directory."]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(s.li,{children:["Renaming sources","\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsx)(s.li,{children:"If the file resulting from the source download needs to be renamed (often to avoid a name that would conflict with another source), add the preferred name to the URL as a URI fragment."}),"\n",(0,r.jsxs)(s.li,{children:["Example: ",(0,r.jsx)(s.code,{children:"https://github.com/docker/cli/archive/refs/tags/v25.0.3.tar.gz#docker-cli.tar.gz : 04ad0cea992a65db20cb1b0dbf6d1ce32c705ce879de51b22095fe8d28030815"})]}),"\n",(0,r.jsxs)(s.li,{children:["This renames the downloaded file from ",(0,r.jsx)(s.code,{children:"v25.0.3.tar.gz"})," to ",(0,r.jsx)(s.code,{children:"docker-cli.tar.gz"}),"."]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(s.li,{children:["SourceForge sources","\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:["A proper SourceForge source looks like this, using ",(0,r.jsx)(s.code,{children:"hplip"})," as an example: ",(0,r.jsx)(s.code,{children:"https://sourceforge.net/projects/hplip/files/hplip/3.24.4/hplip-3.24.4.tar.gz"}),"\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:["This URL begins with ",(0,r.jsx)(s.code,{children:"https://sourceforge.net/"}),", not ",(0,r.jsx)(s.code,{children:"https://downloads.sourceforge.net/"}),", or some other mirror."]}),"\n",(0,r.jsxs)(s.li,{children:["This URL has a path beginning with ",(0,r.jsx)(s.code,{children:"/projects/$project_name/"})]}),"\n",(0,r.jsxs)(s.li,{children:["This URL does ",(0,r.jsx)(s.em,{children:"not"})," have a trailing ",(0,r.jsx)(s.code,{children:"/download"}),", you may have to remove this by hand."]}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(s.li,{children:'The correct SourceForge tarball URLs are found under the "Files" tab, then often within a directory, when starting from a project homepage on SourceForge.'}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(s.h3,{id:"optional-supported-keys",children:"Optional, supported keys"}),"\n",(0,r.jsxs)(s.table,{children:[(0,r.jsx)(s.thead,{children:(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.th,{children:"Key Name"}),(0,r.jsx)(s.th,{children:"Type"}),(0,r.jsx)(s.th,{children:"Description"})]})}),(0,r.jsxs)(s.tbody,{children:[(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.strong,{children:"clang"})}),(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"bool"})}),(0,r.jsxs)(s.td,{children:["Set to ",(0,r.jsx)(s.code,{children:"yes"})," if this package benefits from being built with Clang."]})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.strong,{children:"extract"})}),(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"bool"})}),(0,r.jsxs)(s.td,{children:["Set to ",(0,r.jsx)(s.code,{children:"no"})," to disable automatic source extraction."]})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.strong,{children:"autodep"})}),(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"bool"})}),(0,r.jsxs)(s.td,{children:["Set to ",(0,r.jsx)(s.code,{children:"no"})," to disable automatic binary dependency resolution at build time."]})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.strong,{children:"emul32"})}),(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"bool"})}),(0,r.jsxs)(s.td,{children:["Set to ",(0,r.jsx)(s.code,{children:"yes"})," to enable an ",(0,r.jsx)(s.code,{children:"-m32"})," build (32-bit libs)."]})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.strong,{children:"libsplit"})}),(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"bool"})}),(0,r.jsxs)(s.td,{children:["Set to ",(0,r.jsx)(s.code,{children:"no"})," to disable splitting of libraries into ",(0,r.jsx)(s.code,{children:"devel"})," sub-packages."]})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.strong,{children:"conflicts"})}),(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"string(s)"})}),(0,r.jsx)(s.td,{children:"Specify packages that cannot be installed together with this one."})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.strong,{children:"optimize"})}),(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"list"})}),(0,r.jsxs)(s.td,{children:["Specify preset keys to modify compiler and linker flags during build. You can learn more ",(0,r.jsx)(s.a,{href:"/docs/packaging/package.yml#optimize-values",children:"here"}),"."]})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.strong,{children:"builddeps"})}),(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"list"})}),(0,r.jsxs)(s.td,{children:["Specify build dependencies for the package. You can learn more ",(0,r.jsx)(s.a,{href:"/docs/packaging/packaging-practices#build-dependencies",children:"here"}),"."]})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.strong,{children:"rundeps"})}),(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"dict(s)"})}),(0,r.jsxs)(s.td,{children:["Specify further runtime dependencies for the packages. You can learn more ",(0,r.jsx)(s.a,{href:"/docs/packaging/packaging-practices#runtime-dependencies",children:"here"}),"."]})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.strong,{children:"checkdeps"})}),(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"dict(s)"})}),(0,r.jsxs)(s.td,{children:["Specify build dependencies for the package which will ",(0,r.jsx)(s.em,{children:"not"})," be considered when determining build order for automatic builds. These dependencies should only be used during the ",(0,r.jsx)(s.code,{children:"check"})," build phase. You can learn more ",(0,r.jsx)(s.a,{href:"/docs/packaging/packaging-practices#check-dependencies",children:"here"})]})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.strong,{children:"replaces"})}),(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"dict(s)"})}),(0,r.jsx)(s.td,{children:"Replace one package with another, used when renaming or deprecating packages for clean upgrade paths."})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.strong,{children:"patterns"})}),(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"dict(s)"})}),(0,r.jsxs)(s.td,{children:["Allows fine grained control over file placement within the package or sub-packages. Useful for packages that are development only (i.e. ",(0,r.jsx)(s.code,{children:"/usr/bin"})," files)."]})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.strong,{children:"environment"})}),(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"unicode"})}),(0,r.jsx)(s.td,{children:"Specify code that will be exported to all packaging steps of the build (i.e. exporting variables for the entire build)."})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.strong,{children:"networking"})}),(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"bool"})}),(0,r.jsxs)(s.td,{children:["Set to ",(0,r.jsx)(s.code,{children:"yes"})," to enable networking within solbuild."]})]})]})]}),"\n",(0,r.jsx)(s.h3,{id:"packaging-step-keys-optional",children:"Packaging step keys, optional"}),"\n",(0,r.jsxs)(s.p,{children:["The packaging steps are all considered optional, however the absence of the ",(0,r.jsx)(s.code,{children:"install"})," step will result in no package generated. Each of these keys contains content that will be placed within a script and executed within a controlled environment to perform the package build. For all intents and purposes, they are Bash scripts with a predefined environment."]}),"\n",(0,r.jsxs)(s.table,{children:[(0,r.jsx)(s.thead,{children:(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.th,{children:"Step Name"}),(0,r.jsx)(s.th,{children:"Description"})]})}),(0,r.jsxs)(s.tbody,{children:[(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.strong,{children:"setup"})}),(0,r.jsxs)(s.td,{children:["Performed after the source extraction. This is the correct place to perform any ",(0,r.jsx)(s.code,{children:"configure"})," routine, or to ",(0,r.jsx)(s.code,{children:"patch"})," the sources."]})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.strong,{children:"build"})}),(0,r.jsxs)(s.td,{children:["Use this step to run the build portion, for example, ",(0,r.jsx)(s.code,{children:"make"}),"."]})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.strong,{children:"install"})}),(0,r.jsxs)(s.td,{children:["This is where you should install the files into the final packaging directory, for example, ",(0,r.jsx)(s.code,{children:"make install"}),"."]})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.strong,{children:"check"})}),(0,r.jsxs)(s.td,{children:["This is where tests / checking should occur, for example, ",(0,r.jsx)(s.code,{children:"make check"}),"."]})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.strong,{children:"profile"})}),(0,r.jsxs)(s.td,{children:["This is where profiling tests should be specified. ",(0,r.jsx)(s.code,{children:"ypkg"})," will handle setting flags to generate profiling data and using that data for an optimized build."]})]})]})]}),"\n",(0,r.jsx)(s.h2,{id:"optimize-values",children:"Optimize values"}),"\n",(0,r.jsxs)(s.p,{children:["One or more optimize values can be specified in a list with the ",(0,r.jsx)(s.code,{children:"optimize"})," key in the ",(0,r.jsx)(s.code,{children:"package.yml"})," file. Several values can override or conflict with each other and should be used only where they provide a performance benefit, or fix a bug in the package or build."]}),"\n",(0,r.jsxs)(s.table,{children:[(0,r.jsx)(s.thead,{children:(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.th,{children:"Optimize Value"}),(0,r.jsx)(s.th,{children:"Description"})]})}),(0,r.jsxs)(s.tbody,{children:[(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.strong,{children:"speed"})}),(0,r.jsxs)(s.td,{children:["Optimizes the package for performance ",(0,r.jsx)(s.code,{children:"-O3"})," plus other flags."]})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.strong,{children:"size"})}),(0,r.jsxs)(s.td,{children:["Optimizes the package build to minimize size ",(0,r.jsx)(s.code,{children:"-Os"}),". Not supported with clang."]})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.strong,{children:"no-bind-now"})}),(0,r.jsx)(s.td,{children:"Configures the package to disable certain flags, where RELRO is unsupported."})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.strong,{children:"no-symbolic"})}),(0,r.jsxs)(s.td,{children:["Disables ",(0,r.jsx)(s.code,{children:"-Wl,-Bsymbolic-functions"})," linker flag."]})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.strong,{children:"unroll-loops"})}),(0,r.jsxs)(s.td,{children:["Enables ",(0,r.jsx)(s.code,{children:"-funroll-loops"}),". Use this sparingly, only when it provides proven benefit."]})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.strong,{children:"runpath"})}),(0,r.jsxs)(s.td,{children:["Enables ",(0,r.jsx)(s.code,{children:"-Wl,--enable-new-dtags"})," to make linker use RUNPATH's instead of RPATH's."]})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.strong,{children:"avx256"})}),(0,r.jsxs)(s.td,{children:["Disables ",(0,r.jsx)(s.code,{children:"-mprefer-vector-width=128"})," in avx2 builds."]})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.strong,{children:"thin-lto"})}),(0,r.jsxs)(s.td,{children:["Enables Thin Link Time Optimization ",(0,r.jsx)(s.code,{children:"-flto=thin"})," with a supported linker."]})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.strong,{children:"lto"})}),(0,r.jsxs)(s.td,{children:["Enables Link Time Optimization ",(0,r.jsx)(s.code,{children:"-flto"}),"."]})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.strong,{children:"icf-safe"})}),(0,r.jsxs)(s.td,{children:["Enables safe Identical Cold Folding ",(0,r.jsx)(s.code,{children:"--icf=safe"}),". ",(0,r.jsx)(s.code,{children:"function-sections"})," is recommended when not using clang. Uses gold linker when not using clang."]})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.strong,{children:"icf-all"})}),(0,r.jsxs)(s.td,{children:["Enables Identical Cold Folding ",(0,r.jsx)(s.code,{children:"--icf=all"}),". ",(0,r.jsx)(s.code,{children:"function-sections"})," is recommended when not using clang. Uses gold linker when not using clang."]})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.strong,{children:"polly"})}),(0,r.jsx)(s.td,{children:"Enables polyhedral optimizations for the clang toolchain."})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.strong,{children:"function-sections"})}),(0,r.jsx)(s.td,{children:"Generate a separate ELF section for each function. Recommended with ICF when not using clang."})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.strong,{children:"no-reorder-blocks-partition"})}),(0,r.jsx)(s.td,{children:"Disables block partition reordering with the gcc toolchain. Provided to facilitate BOLT'ed binaries/libraries."})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.strong,{children:"emit-relocs"})}),(0,r.jsx)(s.td,{children:"Instructs the linker to emit relocations. Provided to facilitate BOLT'ed binaries/libraries."})]})]})]}),"\n",(0,r.jsx)(s.h2,{id:"macros",children:"Macros"}),"\n",(0,r.jsx)(s.p,{children:"To further assist in packaging, a number of macros are available. These are simply shorthand ways to perform a normal build operation. They also ensure that the resulting package is consistent. These macros are only available in our packaging steps, as they are substituted within the script before execution."}),"\n",(0,r.jsx)(s.h3,{id:"usage",children:"Usage"}),"\n",(0,r.jsxs)(s.p,{children:["Macros are prefixed with ",(0,r.jsx)(s.code,{children:"%"}),", and are substituted before your script is executed. Macros ending with ",(0,r.jsx)(s.code,{children:"%"})," are used to provide directory names or build values to the script."]}),"\n",(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-bash",children:"# Run the configure macro with the given arguments\n%configure --disable-static\n"})}),"\n",(0,r.jsx)(s.h3,{id:"actionable-macros",children:"Actionable macros"}),"\n",(0,r.jsxs)(s.table,{children:[(0,r.jsx)(s.thead,{children:(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.th,{children:"Macro"}),(0,r.jsx)(s.th,{children:"Description"})]})}),(0,r.jsxs)(s.tbody,{children:[(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.strong,{children:"%autogen"})}),(0,r.jsxs)(s.td,{children:["Runs autogen with our ",(0,r.jsx)(s.code,{children:"%CONFOPTS%"})," to create a configure script then proceeds to run ",(0,r.jsx)(s.code,{children:"%configure"}),"."]})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.strong,{children:"%cmake"})}),(0,r.jsx)(s.td,{children:"Configures a CMake project with the distribution specific options, such as prefix and release type."})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.strong,{children:"%cmake_ninja"})}),(0,r.jsxs)(s.td,{children:["Configures a CMake project with ninja so it can be used with ",(0,r.jsx)(s.code,{children:"%ninja_build"}),", ",(0,r.jsx)(s.code,{children:"%ninja_install"})," and ",(0,r.jsx)(s.code,{children:"%ninja_check"})," macros."]})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.strong,{children:"%configure"})}),(0,r.jsxs)(s.td,{children:["Runs ",(0,r.jsx)(s.code,{children:"./configure"})," with our ",(0,r.jsx)(s.code,{children:"%CONFOPTS%"})," variable macro."]})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.strong,{children:"%configure_no_runstatedir"})}),(0,r.jsxs)(s.td,{children:["Runs ",(0,r.jsx)(s.code,{children:"%configure"})," without the ",(0,r.jsx)(s.code,{children:"--runstatedir"})," option. Use if you encounter ",(0,r.jsx)(s.code,{children:"configure: error: unrecognized option: '--runstatedir=/run'"}),"."]})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.strong,{children:"%make"})}),(0,r.jsxs)(s.td,{children:["Runs the ",(0,r.jsx)(s.code,{children:"make"})," command with the job count specified in ",(0,r.jsx)(s.code,{children:"eopkg.conf"})," (",(0,r.jsx)(s.a,{href:"/docs/packaging/advanced-config/eopkg-configuration",children:"more info"}),")."]})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.strong,{children:"%make_install"})}),(0,r.jsxs)(s.td,{children:["Performs a ",(0,r.jsx)(s.code,{children:"make install"}),", using the ",(0,r.jsx)(s.code,{children:"DESTDIR"})," variant. Should work for the vast majority of packages."]})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.strong,{children:"%patch"})}),(0,r.jsx)(s.td,{children:"Sane patch macro to run in batch mode and not contaminate source tree on failure."})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.strong,{children:"%apply_patches"})}),(0,r.jsxs)(s.td,{children:["Applies all patches listed in the ",(0,r.jsx)(s.code,{children:"series"})," file in ",(0,r.jsx)(s.code,{children:"./files"})," folder."]})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.strong,{children:"%reconfigure"})}),(0,r.jsxs)(s.td,{children:["Updates build scripts such as ",(0,r.jsx)(s.code,{children:"./configure"})," and proceeds to run ",(0,r.jsx)(s.code,{children:"%configure"}),"."]})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.strong,{children:"%symlink_check"})}),(0,r.jsx)(s.td,{children:"Checks for broken symlinks in the install directory and aborts the build if any are found. Must run after install macros."})]})]})]}),"\n",(0,r.jsx)(s.h3,{id:"haskell-actionable-macros",children:"Haskell actionable macros"}),"\n",(0,r.jsxs)(s.table,{children:[(0,r.jsx)(s.thead,{children:(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.th,{children:"Macro"}),(0,r.jsx)(s.th,{children:"Description"})]})}),(0,r.jsxs)(s.tbody,{children:[(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.strong,{children:"%cabal_configure"})}),(0,r.jsx)(s.td,{children:"Configures a Cabal project that requires online dependencies, like a Cargo-style build"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.strong,{children:"%haskell_configure"})}),(0,r.jsxs)(s.td,{children:["Runs ",(0,r.jsx)(s.code,{children:"runhaskell configure"})," with prefix, libdir, etc. and ensures the necessary package.conf.d is copied to the correct location."]})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.strong,{children:"%haskell_build"})}),(0,r.jsxs)(s.td,{children:["Runs ",(0,r.jsx)(s.code,{children:"runhaskell build"})," with ",(0,r.jsx)(s.code,{children:"%JOBS%"}),"."]})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.strong,{children:"%haskell_install"})}),(0,r.jsxs)(s.td,{children:["Runs ",(0,r.jsx)(s.code,{children:"runhaskell copy"})," to ",(0,r.jsx)(s.code,{children:"$installdir"}),"."]})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.strong,{children:"%haskell_register"})}),(0,r.jsxs)(s.td,{children:["Runs ",(0,r.jsx)(s.code,{children:"runhaskell register"})," to generate a pkg-config for package and version, then installs the conf file."]})]})]})]}),"\n",(0,r.jsxs)(s.p,{children:["Existing Haskell packages may use the old ",(0,r.jsx)(s.code,{children:"cabal_build"}),", ",(0,r.jsx)(s.code,{children:"cabal_install"}),", ",(0,r.jsx)(s.code,{children:"cabal_register"})," macros. Please use the new ",(0,r.jsx)(s.code,{children:"haskell_*"})," macros instead."]}),"\n",(0,r.jsx)(s.h3,{id:"ninja-actionable-macros",children:"Ninja actionable macros"}),"\n",(0,r.jsxs)(s.table,{children:[(0,r.jsx)(s.thead,{children:(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.th,{children:"Macro"}),(0,r.jsx)(s.th,{children:"Description"})]})}),(0,r.jsxs)(s.tbody,{children:[(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.strong,{children:"%meson_configure"})}),(0,r.jsxs)(s.td,{children:["Runs ",(0,r.jsx)(s.code,{children:"meson"})," with our CFLAGS and appropriate flags such as ",(0,r.jsx)(s.code,{children:"libdir"}),"."]})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.strong,{children:"%ninja_build"})}),(0,r.jsxs)(s.td,{children:["Runs ",(0,r.jsx)(s.code,{children:"ninja"})," and passes our ",(0,r.jsx)(s.code,{children:"%JOBS%"})," variable. This macro obsoletes ",(0,r.jsx)(s.em,{children:"%meson_build"}),"."]})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.strong,{children:"%ninja_install"})}),(0,r.jsxs)(s.td,{children:["Runs ",(0,r.jsx)(s.code,{children:"ninja install"})," and passes the appropriate ",(0,r.jsx)(s.code,{children:"DESTDIR"})," and ",(0,r.jsx)(s.code,{children:"%JOBS%"})," variable. This macro obsoletes ",(0,r.jsx)(s.em,{children:"%meson_install"}),"."]})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.strong,{children:"%ninja_check"})}),(0,r.jsxs)(s.td,{children:["Runs ",(0,r.jsx)(s.code,{children:"ninja test"})," and passes our ",(0,r.jsx)(s.code,{children:"%JOBS%"})," variable. This macro obsoletes ",(0,r.jsx)(s.em,{children:"%meson_check"}),"."]})]})]})]}),"\n",(0,r.jsx)(s.h3,{id:"perl-actionable-macros",children:"Perl actionable macros"}),"\n",(0,r.jsxs)(s.table,{children:[(0,r.jsx)(s.thead,{children:(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.th,{children:"Macro"}),(0,r.jsx)(s.th,{children:"Description"})]})}),(0,r.jsxs)(s.tbody,{children:[(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.strong,{children:"%perl_setup"})}),(0,r.jsxs)(s.td,{children:["Runs Perl setup scripts ",(0,r.jsx)(s.code,{children:"Build.pl"})," or ",(0,r.jsx)(s.code,{children:"Makefile.pl"})," with the appropriate variable flags."]})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.strong,{children:"%perl_build"})}),(0,r.jsxs)(s.td,{children:["Runs Perl build scripts or attempts ",(0,r.jsx)(s.code,{children:"%make"}),"."]})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.strong,{children:"%perl_install"})}),(0,r.jsxs)(s.td,{children:["Runs Perl install scripts or attempts ",(0,r.jsx)(s.code,{children:"%make_install"}),"."]})]})]})]}),"\n",(0,r.jsx)(s.h3,{id:"python-actionable-macros",children:"Python actionable macros"}),"\n",(0,r.jsxs)(s.table,{children:[(0,r.jsx)(s.thead,{children:(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.th,{children:"Macro"}),(0,r.jsx)(s.th,{children:"Description"})]})}),(0,r.jsxs)(s.tbody,{children:[(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.strong,{children:"%python_setup"})}),(0,r.jsx)(s.td,{children:"Runs the build portion of a setup.py using python2."})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.strong,{children:"%python_install"})}),(0,r.jsx)(s.td,{children:"Runs the install portion of a setup.py, to the appropriate root, using python2."})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.strong,{children:"%python_test"})}),(0,r.jsxs)(s.td,{children:["Without argument, runs the test portion of setup.py. With a ",(0,r.jsx)(s.code,{children:".py"}),' script, execute the script with python2. With something else execute the command "as it is". (',(0,r.jsx)(s.a,{href:"https://github.com/getsolus/ypkg/pull/1",children:"More info"}),")"]})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.strong,{children:"%python_compile"})}),(0,r.jsxs)(s.td,{children:["Compiles ",(0,r.jsx)(s.code,{children:"*.py"})," files using python2. This is only useful where the build doesn't compile them already (indicated by availability of ",(0,r.jsx)(s.code,{children:"*.pyc"})," files)."]})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.strong,{children:"%python3_setup"})}),(0,r.jsx)(s.td,{children:"Runs the build portion of a setup.py using python3."})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.strong,{children:"%python3_install"})}),(0,r.jsx)(s.td,{children:"Runs the install portion of a setup.py, to the appropriate root, using python3."})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.strong,{children:"%python3_test"})}),(0,r.jsxs)(s.td,{children:["Without argument, runs the test portion of setup.py. With a ",(0,r.jsx)(s.code,{children:".py"}),' script, execute the script with python3. With something else execute the command "as it is". (',(0,r.jsx)(s.a,{href:"https://github.com/getsolus/ypkg/pull/1",children:"More info"}),")"]})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.strong,{children:"%python3_compile"})}),(0,r.jsxs)(s.td,{children:["Compiles ",(0,r.jsx)(s.code,{children:"*.py"})," files using python3. This is only useful where the build doesn't compile them already (indicated by availability of ",(0,r.jsx)(s.code,{children:"*.pyc"})," files)."]})]})]})]}),"\n",(0,r.jsx)(s.h3,{id:"ruby-actionable-macros",children:"Ruby actionable macros"}),"\n",(0,r.jsxs)(s.table,{children:[(0,r.jsx)(s.thead,{children:(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.th,{children:"Macro"}),(0,r.jsx)(s.th,{children:"Description"})]})}),(0,r.jsxs)(s.tbody,{children:[(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.strong,{children:"%gem_build"})}),(0,r.jsxs)(s.td,{children:["Runs ",(0,r.jsx)(s.code,{children:"gem build"}),"."]})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.strong,{children:"%gem_install"})}),(0,r.jsxs)(s.td,{children:["Runs ",(0,r.jsx)(s.code,{children:"gem install"})," with the appropriate parameters."]})]})]})]}),"\n",(0,r.jsx)(s.h3,{id:"rust-cargo-actionable-macros",children:"Rust (cargo) actionable macros"}),"\n",(0,r.jsxs)(s.table,{children:[(0,r.jsx)(s.thead,{children:(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.th,{children:"Macro"}),(0,r.jsx)(s.th,{children:"Description"})]})}),(0,r.jsxs)(s.tbody,{children:[(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.strong,{children:"%cargo_fetch"})}),(0,r.jsxs)(s.td,{children:["Runs ",(0,r.jsx)(s.code,{children:"cargo fetch --locked"})," to get dependencies."]})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.strong,{children:"%cargo_build"})}),(0,r.jsxs)(s.td,{children:["Runs ",(0,r.jsx)(s.code,{children:"cargo build"})," with some additional flags."]})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.strong,{children:"%cargo_install"})}),(0,r.jsxs)(s.td,{children:["Installs the built binary to ",(0,r.jsx)(s.code,{children:"/usr/bin/PACKAGE-NAME"}),", OR to ",(0,r.jsx)(s.code,{children:"/usr/bin/ARGUMENT"}),"."]})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.strong,{children:"%cargo_test"})}),(0,r.jsxs)(s.td,{children:["Runs ",(0,r.jsx)(s.code,{children:"cargo test"})," with some additional flags."]})]})]})]}),"\n",(0,r.jsx)(s.h3,{id:"qt-actionable-macros",children:"Qt actionable macros"}),"\n",(0,r.jsxs)(s.table,{children:[(0,r.jsx)(s.thead,{children:(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.th,{children:"Macro"}),(0,r.jsx)(s.th,{children:"Description"})]})}),(0,r.jsxs)(s.tbody,{children:[(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.strong,{children:"%qmake"})}),(0,r.jsxs)(s.td,{children:["Runs ",(0,r.jsx)(s.code,{children:"qmake"})," for Qt5 with the appropriate make flags."]})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.strong,{children:"%qmake4"})}),(0,r.jsxs)(s.td,{children:["Runs ",(0,r.jsx)(s.code,{children:"qmake"})," for Qt4, as well as adding the necessary MOC, RCC, and UIC flags since those Qt4 executables end in -qt4."]})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.strong,{children:"%qml_cache"})}),(0,r.jsxs)(s.td,{children:["Compiles ",(0,r.jsx)(s.code,{children:"*.qml"})," files into ",(0,r.jsx)(s.code,{children:"*.qmlc"})," so they are compiled ahead of time."]})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.strong,{children:"%qml6_cache"})}),(0,r.jsxs)(s.td,{children:["Same as ",(0,r.jsx)(s.code,{children:"%qml_cache"}),", but for Qt6."]})]})]})]}),"\n",(0,r.jsx)(s.h3,{id:"waf-actionable-macros",children:"Waf actionable macros"}),"\n",(0,r.jsxs)(s.table,{children:[(0,r.jsx)(s.thead,{children:(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.th,{children:"Macro"}),(0,r.jsx)(s.th,{children:"Description"})]})}),(0,r.jsxs)(s.tbody,{children:[(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.strong,{children:"%waf_configure"})}),(0,r.jsxs)(s.td,{children:["Runs ",(0,r.jsx)(s.code,{children:"waf configure"})," with prefix."]})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.strong,{children:"%waf_build"})}),(0,r.jsxs)(s.td,{children:["Runs ",(0,r.jsx)(s.code,{children:"waf"})," and passes our ",(0,r.jsx)(s.code,{children:"%JOBS%"})," variable."]})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.strong,{children:"%waf_install"})}),(0,r.jsxs)(s.td,{children:["Runs ",(0,r.jsx)(s.code,{children:"waf install"})," and passes the appropriate ",(0,r.jsx)(s.code,{children:"destdir"})," and ",(0,r.jsx)(s.code,{children:"%JOBS%"})," variable."]})]})]})]}),"\n",(0,r.jsx)(s.h3,{id:"bolt-actionable-macros",children:"BOLT actionable macros"}),"\n",(0,r.jsx)(s.p,{children:"BOLT is a post-link optimizer developed to speed up large applications. You will need to run a workload after instrumenting a binary or library. Think of it as post-link profile guided optimization."}),"\n",(0,r.jsxs)(s.table,{children:[(0,r.jsx)(s.thead,{children:(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.th,{children:"Macro"}),(0,r.jsx)(s.th,{children:"Description"})]})}),(0,r.jsxs)(s.tbody,{children:[(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.strong,{children:"%bolt_instr"})}),(0,r.jsxs)(s.td,{children:["Instrument a binary or library with llvm-bolt. Requires it to be built with ",(0,r.jsx)(s.code,{children:"emit-relocs"}),", as well as ",(0,r.jsx)(s.code,{children:"no-reorder-blocks-partition"})," if not using clang."]})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.strong,{children:"%bolt_merge"})}),(0,r.jsx)(s.td,{children:"Merge fdata profiles into a single file after running a workload with a BOLT instrumented binary."})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.strong,{children:"%bolt_opt"})}),(0,r.jsxs)(s.td,{children:["Optimize a binary using BOLT after running ",(0,r.jsx)(s.code,{children:"%bolt_merge"}),"."]})]})]})]}),"\n",(0,r.jsx)(s.h3,{id:"variable-macros",children:"Variable macros"}),"\n",(0,r.jsxs)(s.table,{children:[(0,r.jsx)(s.thead,{children:(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.th,{children:"Macro"}),(0,r.jsx)(s.th,{children:"Description"})]})}),(0,r.jsxs)(s.tbody,{children:[(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.strong,{children:"%ARCH%"})}),(0,r.jsx)(s.td,{children:"Indicates the current build architecture."})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.strong,{children:"%CC%"})}),(0,r.jsx)(s.td,{children:"C compiler."})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.strong,{children:"%CFLAGS%"})}),(0,r.jsxs)(s.td,{children:["cflags as set in ",(0,r.jsx)(s.code,{children:"eopkg.conf"}),"."]})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.strong,{children:"%CONFOPTS%"})}),(0,r.jsxs)(s.td,{children:["Flags / options for configuration, such as ",(0,r.jsx)(s.code,{children:"--prefix=%PREFIX%"}),". ",(0,r.jsx)(s.a,{href:"https://github.com/getsolus/ypkg/blob/v33/ypkg2/rc.yml#L446-L458",children:"Full List."})]})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.strong,{children:"%CXX%"})}),(0,r.jsx)(s.td,{children:"C++ compiler."})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.strong,{children:"%CXXFLAGS%"})}),(0,r.jsxs)(s.td,{children:["cxxflags as set in ",(0,r.jsx)(s.code,{children:"eopkg.conf"}),"."]})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.strong,{children:"%JOBS%"})}),(0,r.jsxs)(s.td,{children:["jobs, as set in ",(0,r.jsx)(s.code,{children:"eopkg.conf"}),"."]})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.strong,{children:"%LDFLAGS%"})}),(0,r.jsxs)(s.td,{children:["ldflags as set in ",(0,r.jsx)(s.code,{children:"eopkg.conf"}),"."]})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.strong,{children:"%LIBSUFFIX%"})}),(0,r.jsx)(s.td,{children:"Library suffix (either 32 for 32-bit or 64 for 64-bit)."})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.strong,{children:"%PREFIX%"})}),(0,r.jsxs)(s.td,{children:["Hard-coded prefix ",(0,r.jsx)(s.code,{children:"/usr"}),"."]})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.strong,{children:"%YJOBS%"})}),(0,r.jsxs)(s.td,{children:["Job count without ",(0,r.jsx)(s.code,{children:"-j"})," as set in ",(0,r.jsx)(s.code,{children:"eopkg.conf"}),"."]})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.strong,{children:"%installroot%"})}),(0,r.jsx)(s.td,{children:"Hard-coded install directory."})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.strong,{children:"%libdir%"})}),(0,r.jsxs)(s.td,{children:["The distribution\u2019s default library directory, i.e. ",(0,r.jsx)(s.code,{children:"/usr/lib64"})," (Alters for ",(0,r.jsx)(s.code,{children:"emul32"}),")."]})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.strong,{children:"%version%"})}),(0,r.jsxs)(s.td,{children:["Version of the package, as specified in the ",(0,r.jsx)(s.code,{children:"version"})," key."]})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.strong,{children:"%workdir%"})}),(0,r.jsx)(s.td,{children:"Hard-coded work directory (source tree)."})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.strong,{children:"%kernel_version_lts%"})}),(0,r.jsxs)(s.td,{children:["Version of the ",(0,r.jsx)(s.code,{children:"linux-lts"})," kernel."]})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.strong,{children:"%kernel_version_current%"})}),(0,r.jsxs)(s.td,{children:["Version of the ",(0,r.jsx)(s.code,{children:"linux-current"})," kernel."]})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.strong,{children:"%python2_version%"})}),(0,r.jsxs)(s.td,{children:["Version of the ",(0,r.jsx)(s.code,{children:"python"})," (Python 2) distribution."]})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.strong,{children:"%python3_version%"})}),(0,r.jsxs)(s.td,{children:["Version of the ",(0,r.jsx)(s.code,{children:"python3"})," distribution."]})]})]})]}),"\n",(0,r.jsx)(s.h2,{id:"variables",children:"Variables"}),"\n",(0,r.jsx)(s.p,{children:"A set of variables are exported in our build stages. These are used to provide context and structure to the scripts."}),"\n",(0,r.jsxs)(s.table,{children:[(0,r.jsx)(s.thead,{children:(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.th,{children:"Variable"}),(0,r.jsx)(s.th,{children:"Description"})]})}),(0,r.jsxs)(s.tbody,{children:[(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.strong,{children:"$CFLAGS"})}),(0,r.jsxs)(s.td,{children:["cflags as set in ",(0,r.jsx)(s.code,{children:"eopkg.conf"}),"."]})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.strong,{children:"$CXXFLAGS"})}),(0,r.jsxs)(s.td,{children:["cxxflags as set in ",(0,r.jsx)(s.code,{children:"eopkg.conf"}),"."]})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.strong,{children:"$LDFLAGS"})}),(0,r.jsxs)(s.td,{children:["ldflags as set in ",(0,r.jsx)(s.code,{children:"eopkg.conf"}),"."]})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.strong,{children:"$CC"})}),(0,r.jsx)(s.td,{children:"C compiler."})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.strong,{children:"$CXX"})}),(0,r.jsx)(s.td,{children:"C++ compiler."})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.strong,{children:"$EMUL32BUILD"})}),(0,r.jsxs)(s.td,{children:["Set only when compiling in ",(0,r.jsx)(s.code,{children:"emul32"})," mode."]})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.strong,{children:"$AVX2BUILD"})}),(0,r.jsxs)(s.td,{children:["Set only when compiling in ",(0,r.jsx)(s.code,{children:"avx2"})," mode."]})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.strong,{children:"$PGO_GEN_BUILD"})}),(0,r.jsx)(s.td,{children:"Set during the instrumentation phase of a PGO build."})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.strong,{children:"$PGO_USE_BUILD"})}),(0,r.jsx)(s.td,{children:"Set during the use phase of a PGO build."})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.strong,{children:"$installdir"})}),(0,r.jsx)(s.td,{children:"The install directory, i.e. where files are installed to for packaging."})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.strong,{children:"$pkgfiles"})}),(0,r.jsxs)(s.td,{children:["Refers to the ",(0,r.jsx)(s.code,{children:"./files"})," directory relative to the ",(0,r.jsx)(s.code,{children:"package.yml"})," file."]})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.strong,{children:"$sources"})}),(0,r.jsxs)(s.td,{children:["Refers to the directory where your source files are stored, for example, ",(0,r.jsx)(s.code,{children:"$sources/nano.tar.gz"}),"."]})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.strong,{children:"$workdir"})}),(0,r.jsx)(s.td,{children:"The work, or source, directory of the package build."})]})]})]}),"\n",(0,r.jsx)(s.h2,{id:"types",children:"Types"}),"\n",(0,r.jsxs)(s.p,{children:["The ",(0,r.jsx)(s.code,{children:"package.yml"})," file uses native YAML types, however it follows syntactic conventions and may accept multiple value types for a given key."]}),"\n",(0,r.jsx)(s.h3,{id:"string",children:"string"}),"\n",(0,r.jsx)(s.p,{children:"This is simply text, which does not need to be quoted."}),"\n",(0,r.jsx)(s.h3,{id:"strings",children:"string(s)"}),"\n",(0,r.jsxs)(s.p,{children:["Indicates that it is possible to use a ",(0,r.jsx)(s.code,{children:"list"})," of strings, or one single ",(0,r.jsx)(s.code,{children:"string"}),"."]}),"\n",(0,r.jsx)(s.h3,{id:"integer",children:"integer"}),"\n",(0,r.jsxs)(s.p,{children:["Whole, positive number, used in the ",(0,r.jsx)(s.code,{children:"release"})," field."]}),"\n",(0,r.jsx)(s.h3,{id:"list",children:"list"}),"\n",(0,r.jsx)(s.p,{children:"A YAML list (or array) can be expressed in multiple ways. A short array-notation would look like this:"}),"\n",(0,r.jsx)(s.p,{children:(0,r.jsx)(s.code,{children:"[one, two, three]"})}),"\n",(0,r.jsx)(s.p,{children:"They can also be expressed like this:"}),"\n",(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-yaml",children:"- First Value\n- Second Value\n- Third Value\n"})}),"\n",(0,r.jsx)(s.h3,{id:"dict",children:"dict"}),"\n",(0,r.jsxs)(s.p,{children:["Known as an associative array, this is key to value mapping. These are separated by a colon (",(0,r.jsx)(s.code,{children:":"}),"), the token on the left is taken to be a key, and the token on the right is the value."]}),"\n",(0,r.jsx)(s.p,{children:(0,r.jsx)(s.code,{children:"SomeKey: Some Value"})}),"\n",(0,r.jsxs)(s.p,{children:["Note that each ",(0,r.jsx)(s.code,{children:"ypkg key"})," in the YAML file is actually a dict."]}),"\n",(0,r.jsx)(s.h3,{id:"dicts",children:"dict(s)"}),"\n",(0,r.jsxs)(s.p,{children:[(0,r.jsx)(s.code,{children:"dict(s)"})," consists of a list of ",(0,r.jsx)(s.code,{children:"dict"}),"s and some assumptions. We primarily make use of this to express advanced information within the package. These permit you to provide no key, and a value only.\nIn this instance, the key is implicitly assumed to be the package name (for example, ",(0,r.jsx)(s.code,{children:"nano"}),"):"]}),"\n",(0,r.jsx)(s.p,{children:(0,r.jsx)(s.code,{children:"- some value"})}),"\n",(0,r.jsx)(s.p,{children:"An explicit key, usually a sub-package name:"}),"\n",(0,r.jsx)(s.p,{children:(0,r.jsx)(s.code,{children:"- somekey: somevalue"})}),"\n",(0,r.jsx)(s.p,{children:"A mix of both:"}),"\n",(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-yaml",children:"- somevalue\n- somekey: another value\n"})}),"\n",(0,r.jsx)(s.p,{children:"The values may also be expressed in list form, still using the same default key logic:"}),"\n",(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-yaml",children:"- [one, two, three]\n- somekey: [one, two, three]\n- key:\n - value one\n - value two\n - value three\n"})}),"\n",(0,r.jsx)(s.h2,{id:"packaging-practices",children:"Packaging practices"}),"\n",(0,r.jsxs)(s.p,{children:["The concepts in this document merely expose the syntax of a ",(0,r.jsx)(s.code,{children:"package.yml"})," file. Solus adheres to strict packaging practices and conventions which packagers must follow. They are explained in the ",(0,r.jsx)(s.a,{href:"/docs/packaging/packaging-practices",children:"Packaging Practices"})," article."]})]})}function a(e={}){let{wrapper:s}={...(0,d.a)(),...e.components};return s?(0,r.jsx)(s,{...e,children:(0,r.jsx)(h,{...e})}):h(e)}},50065:function(e,s,n){n.d(s,{Z:function(){return t},a:function(){return l}});var i=n(67294);let r={},d=i.createContext(r);function l(e){let s=i.useContext(d);return i.useMemo(function(){return"function"==typeof e?e(s):{...s,...e}},[s,e])}function t(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:l(e.components),i.createElement(d.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/3ff05326.4e90b0e4.js b/assets/js/3ff05326.4e90b0e4.js deleted file mode 100644 index 184b867fc..000000000 --- a/assets/js/3ff05326.4e90b0e4.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[2775],{17430:(e,s,n)=>{n.r(s),n.d(s,{assets:()=>t,contentTitle:()=>l,default:()=>a,frontMatter:()=>d,metadata:()=>c,toc:()=>o});var i=n(85893),r=n(11151);const d={title:"Package YAML",summary:"Learning the package.yml packaging format"},l="package.yml",c={id:"packaging/package.yml",title:"Package YAML",description:'Each package is generated from a single build file named package.yml. This file is sometimes also called a "recipe" since it provides steps for building a package. It provides all of the required metadata for the package manager, plus the packaging steps involved to produce a package. This file follows the YAML specification.',source:"@site/docs/packaging/package.yml.md",sourceDirName:"packaging",slug:"/packaging/package.yml",permalink:"/docs/packaging/package.yml",draft:!1,unlisted:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/packaging/package.yml.md",tags:[],version:"current",lastUpdatedAt:1732716912e3,frontMatter:{title:"Package YAML",summary:"Learning the package.yml packaging format"},sidebar:"packagingSidebar",previous:{title:"Monitoring YAML",permalink:"/docs/packaging/monitoring.yml"},next:{title:"Packaging Practices",permalink:"/docs/packaging/packaging-practices"}},t={},o=[{value:"Format",id:"format",level:2},{value:"Keys",id:"keys",level:2},{value:"Mandatory keys",id:"mandatory-keys",level:3},{value:""source" key",id:"source-key",level:4},{value:"Optional, supported keys",id:"optional-supported-keys",level:3},{value:"Packaging step keys, optional",id:"packaging-step-keys-optional",level:3},{value:"Optimize values",id:"optimize-values",level:2},{value:"Macros",id:"macros",level:2},{value:"Usage",id:"usage",level:3},{value:"Actionable macros",id:"actionable-macros",level:3},{value:"Haskell actionable macros",id:"haskell-actionable-macros",level:3},{value:"Ninja actionable macros",id:"ninja-actionable-macros",level:3},{value:"Perl actionable macros",id:"perl-actionable-macros",level:3},{value:"Python actionable macros",id:"python-actionable-macros",level:3},{value:"Ruby actionable macros",id:"ruby-actionable-macros",level:3},{value:"Rust (cargo) actionable macros",id:"rust-cargo-actionable-macros",level:3},{value:"Qt actionable macros",id:"qt-actionable-macros",level:3},{value:"Waf actionable macros",id:"waf-actionable-macros",level:3},{value:"BOLT actionable macros",id:"bolt-actionable-macros",level:3},{value:"Variable macros",id:"variable-macros",level:3},{value:"Variables",id:"variables",level:2},{value:"Types",id:"types",level:2},{value:"string",id:"string",level:3},{value:"string(s)",id:"strings",level:3},{value:"integer",id:"integer",level:3},{value:"list",id:"list",level:3},{value:"dict",id:"dict",level:3},{value:"dict(s)",id:"dicts",level:3},{value:"Packaging practices",id:"packaging-practices",level:2}];function h(e){const s={a:"a",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",h4:"h4",header:"header",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,r.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(s.header,{children:(0,i.jsx)(s.h1,{id:"packageyml",children:(0,i.jsx)(s.code,{children:"package.yml"})})}),"\n",(0,i.jsxs)(s.p,{children:["Each package is generated from a single build file named ",(0,i.jsx)(s.code,{children:"package.yml"}),'. This file is sometimes also called a "recipe" since it provides steps for building a package. It provides all of the required metadata for the package manager, plus the packaging steps involved to produce a package. This file follows the YAML specification.']}),"\n",(0,i.jsx)(s.h2,{id:"format",children:"Format"}),"\n",(0,i.jsxs)(s.p,{children:["All ",(0,i.jsx)(s.code,{children:"package.yml"})," files ",(0,i.jsx)(s.strong,{children:"must"})," be valid YAML."]}),"\n",(0,i.jsxs)(s.p,{children:["The file is organised into a key\u2192value hierarchy. The ",(0,i.jsx)(s.code,{children:"ypkg"})," tool parses a ",(0,i.jsx)(s.code,{children:"package.yml"})," file to build the corresponding package in a declarative manner. As such, most of the keys are simple strings, lists or nested key\u2192value pairs. A special case consists in the packaging steps, which are scripts."]}),"\n",(0,i.jsx)(s.p,{children:"An example file follows:"}),"\n",(0,i.jsx)(s.pre,{children:(0,i.jsx)(s.code,{className:"language-yaml",children:"name : nano\nversion : 2.9.5\nrelease : 96\nsource :\n - https://www.nano-editor.org/dist/v2.9/nano-2.9.5.tar.xz: 7b8d181cb57f42fa86a380bb9ad46abab859b60383607f731b65a9077f4b4e19\nhomepage : https://www.nano-editor.org\nlicense : GPL-3.0-or-later\nsummary : Small, friendly text editor inspired by Pico\ncomponent : system.devel\ndescription: |\n GNU nano is an easy-to-use text editor originally designed as a replacement for Pico, the ncurses-based editor from the non-free mailer package Pine (itself now available under the Apache License as Alpine).\nsetup : |\n %patch -p1 -i $pkgfiles/0001-Use-a-stateless-configuration.patch\n %reconfigure --enable-utf8 --docdir=/usr/share/doc/nano\nbuild : |\n %make\ninstall : |\n %make_install\n install -D -m 00644 $pkgfiles/nanorc $installdir/usr/share/defaults/nano/nanorc\n install -D -m 00644 $pkgfiles/git.nanorc $installdir/usr/share/nano/git.nanorc\n # https://github.com/scopatz/nanorc\n for rcFile in $pkgfiles/nanorc-extras/*.nanorc; do\n install -m 00644 $rcFile $installdir/usr/share/nano\n done\n"})}),"\n",(0,i.jsx)(s.h2,{id:"keys",children:"Keys"}),"\n",(0,i.jsxs)(s.p,{children:["Not all fields in ",(0,i.jsx)(s.code,{children:"package.yml"})," are mandatory, but a small selection are. Below is the complete list of the available fields."]}),"\n",(0,i.jsx)(s.h3,{id:"mandatory-keys",children:"Mandatory keys"}),"\n",(0,i.jsxs)(s.table,{children:[(0,i.jsx)(s.thead,{children:(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.th,{children:"Key Name"}),(0,i.jsx)(s.th,{children:"Type"}),(0,i.jsx)(s.th,{children:"Description"})]})}),(0,i.jsxs)(s.tbody,{children:[(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.strong,{children:"name"})}),(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"string"})}),(0,i.jsx)(s.td,{children:"The name of the package. This is also used as the base of all sub-package names. Unless unavoidable, this should match the upstream name."})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.strong,{children:"version"})}),(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"string"})}),(0,i.jsx)(s.td,{children:"The version of the currently packaged software. This is taken from the tarball in most cases."})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.strong,{children:"release"})}),(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"integer"})}),(0,i.jsxs)(s.td,{children:["Specifies the current release number. Updates in the package number are based on this ",(0,i.jsx)(s.code,{children:"release"})," number, ",(0,i.jsx)(s.em,{children:"not"})," the ",(0,i.jsx)(s.code,{children:"version"})," number. As such, to release an update to users, this number must be incremented by one."]})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.strong,{children:"source"})}),(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"dict(s)"})}),(0,i.jsxs)(s.td,{children:["See ",(0,i.jsx)(s.a,{href:"/docs/packaging/package.yml#source-key",children:"source key"})," below."]})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.strong,{children:"homepage"})}),(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"string"})}),(0,i.jsx)(s.td,{children:"Provides a link to the package's homepage, used in the Software Center."})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.strong,{children:"license"})}),(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"string(s)"})}),(0,i.jsxs)(s.td,{children:["Valid upstream license(s). Try to ensure these use ",(0,i.jsx)(s.a,{href:"https://spdx.org/licenses/",children:"SPDX identifiers"}),"."]})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.strong,{children:"summary"})}),(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"string"})}),(0,i.jsx)(s.td,{children:"Brief package summary, or display name."})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.strong,{children:"component"})}),(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"string"})}),(0,i.jsxs)(s.td,{children:["Component / group of packages this package belongs to. Check available components via ",(0,i.jsx)(s.code,{children:"eopkg lc"}),"."]})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.strong,{children:"description"})}),(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"string"})}),(0,i.jsx)(s.td,{children:"More extensive description of the software, usually taken from the vendor website."})]})]})]}),"\n",(0,i.jsx)(s.h4,{id:"source-key",children:'"source" key'}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:["Tarball source","\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:['Upstream source URL to the source code archive (often called the "tarball"), followed by the ',(0,i.jsx)(s.code,{children:"sha256sum"})," for the tarball, as a value."]}),"\n",(0,i.jsxs)(s.li,{children:["Example: ",(0,i.jsx)(s.code,{children:"https://www.nano-editor.org/dist/v7/nano-7.2.tar.xz : 86f3442768bd2873cec693f83cdf80b4b444ad3cc14760b74361474fc87a4526"})]}),"\n",(0,i.jsx)(s.li,{children:"Tarball sources are preferred over git sources, whenever possible, because git tags can be changed to point to different commits."}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:["Git source","\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:["Git repository URL prefixed with ",(0,i.jsx)(s.code,{children:"git|"}),", followed by the git tag or commit hash, as a value."]}),"\n",(0,i.jsxs)(s.li,{children:["Example: ",(0,i.jsx)(s.code,{children:"git|https://github.com/getsolus/solus-sc.git : 6e786b3e86982272717ca4bed4f783fc43a678f3"})]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:["Multiple sources","\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:["If multiple sources are listed, only the first source will be copied from the ",(0,i.jsx)(s.code,{children:"$sources"})," directory to the ",(0,i.jsx)(s.code,{children:"$workdir"})," directory."]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:["Renaming sources","\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsx)(s.li,{children:"If the file resulting from the source download needs to be renamed (often to avoid a name that would conflict with another source), add the preferred name to the URL as a URI fragment."}),"\n",(0,i.jsxs)(s.li,{children:["Example: ",(0,i.jsx)(s.code,{children:"https://github.com/docker/cli/archive/refs/tags/v25.0.3.tar.gz#docker-cli.tar.gz : 04ad0cea992a65db20cb1b0dbf6d1ce32c705ce879de51b22095fe8d28030815"})]}),"\n",(0,i.jsxs)(s.li,{children:["This renames the downloaded file from ",(0,i.jsx)(s.code,{children:"v25.0.3.tar.gz"})," to ",(0,i.jsx)(s.code,{children:"docker-cli.tar.gz"}),"."]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:["SourceForge sources","\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:["A proper SourceForge source looks like this, using ",(0,i.jsx)(s.code,{children:"hplip"})," as an example: ",(0,i.jsx)(s.code,{children:"https://sourceforge.net/projects/hplip/files/hplip/3.24.4/hplip-3.24.4.tar.gz"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:["This URL begins with ",(0,i.jsx)(s.code,{children:"https://sourceforge.net/"}),", not ",(0,i.jsx)(s.code,{children:"https://downloads.sourceforge.net/"}),", or some other mirror."]}),"\n",(0,i.jsxs)(s.li,{children:["This URL has a path beginning with ",(0,i.jsx)(s.code,{children:"/projects/$project_name/"})]}),"\n",(0,i.jsxs)(s.li,{children:["This URL does ",(0,i.jsx)(s.em,{children:"not"})," have a trailing ",(0,i.jsx)(s.code,{children:"/download"}),", you may have to remove this by hand."]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(s.li,{children:'The correct SourceForge tarball URLs are found under the "Files" tab, then often within a directory, when starting from a project homepage on SourceForge.'}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(s.h3,{id:"optional-supported-keys",children:"Optional, supported keys"}),"\n",(0,i.jsxs)(s.table,{children:[(0,i.jsx)(s.thead,{children:(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.th,{children:"Key Name"}),(0,i.jsx)(s.th,{children:"Type"}),(0,i.jsx)(s.th,{children:"Description"})]})}),(0,i.jsxs)(s.tbody,{children:[(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.strong,{children:"clang"})}),(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"bool"})}),(0,i.jsxs)(s.td,{children:["Set to ",(0,i.jsx)(s.code,{children:"yes"})," if this package benefits from being built with Clang."]})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.strong,{children:"extract"})}),(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"bool"})}),(0,i.jsxs)(s.td,{children:["Set to ",(0,i.jsx)(s.code,{children:"no"})," to disable automatic source extraction."]})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.strong,{children:"autodep"})}),(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"bool"})}),(0,i.jsxs)(s.td,{children:["Set to ",(0,i.jsx)(s.code,{children:"no"})," to disable automatic binary dependency resolution at build time."]})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.strong,{children:"emul32"})}),(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"bool"})}),(0,i.jsxs)(s.td,{children:["Set to ",(0,i.jsx)(s.code,{children:"yes"})," to enable an ",(0,i.jsx)(s.code,{children:"-m32"})," build (32-bit libs)."]})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.strong,{children:"libsplit"})}),(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"bool"})}),(0,i.jsxs)(s.td,{children:["Set to ",(0,i.jsx)(s.code,{children:"no"})," to disable splitting of libraries into ",(0,i.jsx)(s.code,{children:"devel"})," sub-packages."]})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.strong,{children:"conflicts"})}),(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"string(s)"})}),(0,i.jsx)(s.td,{children:"Specify packages that cannot be installed together with this one."})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.strong,{children:"optimize"})}),(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"list"})}),(0,i.jsxs)(s.td,{children:["Specify preset keys to modify compiler and linker flags during build. You can learn more ",(0,i.jsx)(s.a,{href:"/docs/packaging/package.yml#optimize-values",children:"here"}),"."]})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.strong,{children:"builddeps"})}),(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"list"})}),(0,i.jsxs)(s.td,{children:["Specify build dependencies for the package. You can learn more ",(0,i.jsx)(s.a,{href:"/docs/packaging/packaging-practices#build-dependencies",children:"here"}),"."]})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.strong,{children:"rundeps"})}),(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"dict(s)"})}),(0,i.jsxs)(s.td,{children:["Specify further runtime dependencies for the packages. You can learn more ",(0,i.jsx)(s.a,{href:"/docs/packaging/packaging-practices#runtime-dependencies",children:"here"}),"."]})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.strong,{children:"checkdeps"})}),(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"dict(s)"})}),(0,i.jsxs)(s.td,{children:["Specify build dependencies for the package which will ",(0,i.jsx)(s.em,{children:"not"})," be considered when determining build order for automatic builds. These dependencies should only be used during the ",(0,i.jsx)(s.code,{children:"check"})," build phase. You can learn more ",(0,i.jsx)(s.a,{href:"/docs/packaging/packaging-practices#check-dependencies",children:"here"})]})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.strong,{children:"replaces"})}),(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"dict(s)"})}),(0,i.jsx)(s.td,{children:"Replace one package with another, used when renaming or deprecating packages for clean upgrade paths."})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.strong,{children:"patterns"})}),(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"dict(s)"})}),(0,i.jsxs)(s.td,{children:["Allows fine grained control over file placement within the package or sub-packages. Useful for packages that are development only (i.e. ",(0,i.jsx)(s.code,{children:"/usr/bin"})," files)."]})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.strong,{children:"environment"})}),(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"unicode"})}),(0,i.jsx)(s.td,{children:"Specify code that will be exported to all packaging steps of the build (i.e. exporting variables for the entire build)."})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.strong,{children:"networking"})}),(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"bool"})}),(0,i.jsxs)(s.td,{children:["Set to ",(0,i.jsx)(s.code,{children:"yes"})," to enable networking within solbuild."]})]})]})]}),"\n",(0,i.jsx)(s.h3,{id:"packaging-step-keys-optional",children:"Packaging step keys, optional"}),"\n",(0,i.jsxs)(s.p,{children:["The packaging steps are all considered optional, however the absence of the ",(0,i.jsx)(s.code,{children:"install"})," step will result in no package generated. Each of these keys contains content that will be placed within a script and executed within a controlled environment to perform the package build. For all intents and purposes, they are Bash scripts with a predefined environment."]}),"\n",(0,i.jsxs)(s.table,{children:[(0,i.jsx)(s.thead,{children:(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.th,{children:"Step Name"}),(0,i.jsx)(s.th,{children:"Description"})]})}),(0,i.jsxs)(s.tbody,{children:[(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.strong,{children:"setup"})}),(0,i.jsxs)(s.td,{children:["Performed after the source extraction. This is the correct place to perform any ",(0,i.jsx)(s.code,{children:"configure"})," routine, or to ",(0,i.jsx)(s.code,{children:"patch"})," the sources."]})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.strong,{children:"build"})}),(0,i.jsxs)(s.td,{children:["Use this step to run the build portion, for example, ",(0,i.jsx)(s.code,{children:"make"}),"."]})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.strong,{children:"install"})}),(0,i.jsxs)(s.td,{children:["This is where you should install the files into the final packaging directory, for example, ",(0,i.jsx)(s.code,{children:"make install"}),"."]})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.strong,{children:"check"})}),(0,i.jsxs)(s.td,{children:["This is where tests / checking should occur, for example, ",(0,i.jsx)(s.code,{children:"make check"}),"."]})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.strong,{children:"profile"})}),(0,i.jsxs)(s.td,{children:["This is where profiling tests should be specified. ",(0,i.jsx)(s.code,{children:"ypkg"})," will handle setting flags to generate profiling data and using that data for an optimized build."]})]})]})]}),"\n",(0,i.jsx)(s.h2,{id:"optimize-values",children:"Optimize values"}),"\n",(0,i.jsxs)(s.p,{children:["One or more optimize values can be specified in a list with the ",(0,i.jsx)(s.code,{children:"optimize"})," key in the ",(0,i.jsx)(s.code,{children:"package.yml"})," file. Several values can override or conflict with each other and should be used only where they provide a performance benefit, or fix a bug in the package or build."]}),"\n",(0,i.jsxs)(s.table,{children:[(0,i.jsx)(s.thead,{children:(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.th,{children:"Optimize Value"}),(0,i.jsx)(s.th,{children:"Description"})]})}),(0,i.jsxs)(s.tbody,{children:[(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.strong,{children:"speed"})}),(0,i.jsxs)(s.td,{children:["Optimizes the package for performance ",(0,i.jsx)(s.code,{children:"-O3"})," plus other flags."]})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.strong,{children:"size"})}),(0,i.jsxs)(s.td,{children:["Optimizes the package build to minimize size ",(0,i.jsx)(s.code,{children:"-Os"}),". Not supported with clang."]})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.strong,{children:"no-bind-now"})}),(0,i.jsx)(s.td,{children:"Configures the package to disable certain flags, where RELRO is unsupported."})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.strong,{children:"no-symbolic"})}),(0,i.jsxs)(s.td,{children:["Disables ",(0,i.jsx)(s.code,{children:"-Wl,-Bsymbolic-functions"})," linker flag."]})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.strong,{children:"unroll-loops"})}),(0,i.jsxs)(s.td,{children:["Enables ",(0,i.jsx)(s.code,{children:"-funroll-loops"}),". Use this sparingly, only when it provides proven benefit."]})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.strong,{children:"runpath"})}),(0,i.jsxs)(s.td,{children:["Enables ",(0,i.jsx)(s.code,{children:"-Wl,--enable-new-dtags"})," to make linker use RUNPATH's instead of RPATH's."]})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.strong,{children:"avx256"})}),(0,i.jsxs)(s.td,{children:["Disables ",(0,i.jsx)(s.code,{children:"-mprefer-vector-width=128"})," in avx2 builds."]})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.strong,{children:"thin-lto"})}),(0,i.jsxs)(s.td,{children:["Enables Thin Link Time Optimization ",(0,i.jsx)(s.code,{children:"-flto=thin"})," with a supported linker."]})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.strong,{children:"lto"})}),(0,i.jsxs)(s.td,{children:["Enables Link Time Optimization ",(0,i.jsx)(s.code,{children:"-flto"}),"."]})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.strong,{children:"icf-safe"})}),(0,i.jsxs)(s.td,{children:["Enables safe Identical Cold Folding ",(0,i.jsx)(s.code,{children:"--icf=safe"}),". ",(0,i.jsx)(s.code,{children:"function-sections"})," is recommended when not using clang. Uses gold linker when not using clang."]})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.strong,{children:"icf-all"})}),(0,i.jsxs)(s.td,{children:["Enables Identical Cold Folding ",(0,i.jsx)(s.code,{children:"--icf=all"}),". ",(0,i.jsx)(s.code,{children:"function-sections"})," is recommended when not using clang. Uses gold linker when not using clang."]})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.strong,{children:"polly"})}),(0,i.jsx)(s.td,{children:"Enables polyhedral optimizations for the clang toolchain."})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.strong,{children:"function-sections"})}),(0,i.jsx)(s.td,{children:"Generate a separate ELF section for each function. Recommended with ICF when not using clang."})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.strong,{children:"no-reorder-blocks-partition"})}),(0,i.jsx)(s.td,{children:"Disables block partition reordering with the gcc toolchain. Provided to facilitate BOLT'ed binaries/libraries."})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.strong,{children:"emit-relocs"})}),(0,i.jsx)(s.td,{children:"Instructs the linker to emit relocations. Provided to facilitate BOLT'ed binaries/libraries."})]})]})]}),"\n",(0,i.jsx)(s.h2,{id:"macros",children:"Macros"}),"\n",(0,i.jsx)(s.p,{children:"To further assist in packaging, a number of macros are available. These are simply shorthand ways to perform a normal build operation. They also ensure that the resulting package is consistent. These macros are only available in our packaging steps, as they are substituted within the script before execution."}),"\n",(0,i.jsx)(s.h3,{id:"usage",children:"Usage"}),"\n",(0,i.jsxs)(s.p,{children:["Macros are prefixed with ",(0,i.jsx)(s.code,{children:"%"}),", and are substituted before your script is executed. Macros ending with ",(0,i.jsx)(s.code,{children:"%"})," are used to provide directory names or build values to the script."]}),"\n",(0,i.jsx)(s.pre,{children:(0,i.jsx)(s.code,{className:"language-bash",children:"# Run the configure macro with the given arguments\n%configure --disable-static\n"})}),"\n",(0,i.jsx)(s.h3,{id:"actionable-macros",children:"Actionable macros"}),"\n",(0,i.jsxs)(s.table,{children:[(0,i.jsx)(s.thead,{children:(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.th,{children:"Macro"}),(0,i.jsx)(s.th,{children:"Description"})]})}),(0,i.jsxs)(s.tbody,{children:[(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.strong,{children:"%autogen"})}),(0,i.jsxs)(s.td,{children:["Runs autogen with our ",(0,i.jsx)(s.code,{children:"%CONFOPTS%"})," to create a configure script then proceeds to run ",(0,i.jsx)(s.code,{children:"%configure"}),"."]})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.strong,{children:"%cmake"})}),(0,i.jsx)(s.td,{children:"Configures a CMake project with the distribution specific options, such as prefix and release type."})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.strong,{children:"%cmake_ninja"})}),(0,i.jsxs)(s.td,{children:["Configures a CMake project with ninja so it can be used with ",(0,i.jsx)(s.code,{children:"%ninja_build"}),", ",(0,i.jsx)(s.code,{children:"%ninja_install"})," and ",(0,i.jsx)(s.code,{children:"%ninja_check"})," macros."]})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.strong,{children:"%configure"})}),(0,i.jsxs)(s.td,{children:["Runs ",(0,i.jsx)(s.code,{children:"./configure"})," with our ",(0,i.jsx)(s.code,{children:"%CONFOPTS%"})," variable macro."]})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.strong,{children:"%configure_no_runstatedir"})}),(0,i.jsxs)(s.td,{children:["Runs ",(0,i.jsx)(s.code,{children:"%configure"})," without the ",(0,i.jsx)(s.code,{children:"--runstatedir"})," option. Use if you encounter ",(0,i.jsx)(s.code,{children:"configure: error: unrecognized option: '--runstatedir=/run'"}),"."]})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.strong,{children:"%make"})}),(0,i.jsxs)(s.td,{children:["Runs the ",(0,i.jsx)(s.code,{children:"make"})," command with the job count specified in ",(0,i.jsx)(s.code,{children:"eopkg.conf"})," (",(0,i.jsx)(s.a,{href:"/docs/packaging/advanced-config/eopkg-configuration",children:"more info"}),")."]})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.strong,{children:"%make_install"})}),(0,i.jsxs)(s.td,{children:["Performs a ",(0,i.jsx)(s.code,{children:"make install"}),", using the ",(0,i.jsx)(s.code,{children:"DESTDIR"})," variant. Should work for the vast majority of packages."]})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.strong,{children:"%patch"})}),(0,i.jsx)(s.td,{children:"Sane patch macro to run in batch mode and not contaminate source tree on failure."})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.strong,{children:"%apply_patches"})}),(0,i.jsxs)(s.td,{children:["Applies all patches listed in the ",(0,i.jsx)(s.code,{children:"series"})," file in ",(0,i.jsx)(s.code,{children:"./files"})," folder."]})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.strong,{children:"%reconfigure"})}),(0,i.jsxs)(s.td,{children:["Updates build scripts such as ",(0,i.jsx)(s.code,{children:"./configure"})," and proceeds to run ",(0,i.jsx)(s.code,{children:"%configure"}),"."]})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.strong,{children:"%symlink_check"})}),(0,i.jsx)(s.td,{children:"Checks for broken symlinks in the install directory and aborts the build if any are found. Must run after install macros."})]})]})]}),"\n",(0,i.jsx)(s.h3,{id:"haskell-actionable-macros",children:"Haskell actionable macros"}),"\n",(0,i.jsxs)(s.table,{children:[(0,i.jsx)(s.thead,{children:(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.th,{children:"Macro"}),(0,i.jsx)(s.th,{children:"Description"})]})}),(0,i.jsxs)(s.tbody,{children:[(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.strong,{children:"%cabal_configure"})}),(0,i.jsx)(s.td,{children:"Configures a Cabal project that requires online dependencies, like a Cargo-style build"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.strong,{children:"%haskell_configure"})}),(0,i.jsxs)(s.td,{children:["Runs ",(0,i.jsx)(s.code,{children:"runhaskell configure"})," with prefix, libdir, etc. and ensures the necessary package.conf.d is copied to the correct location."]})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.strong,{children:"%haskell_build"})}),(0,i.jsxs)(s.td,{children:["Runs ",(0,i.jsx)(s.code,{children:"runhaskell build"})," with ",(0,i.jsx)(s.code,{children:"%JOBS%"}),"."]})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.strong,{children:"%haskell_install"})}),(0,i.jsxs)(s.td,{children:["Runs ",(0,i.jsx)(s.code,{children:"runhaskell copy"})," to ",(0,i.jsx)(s.code,{children:"$installdir"}),"."]})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.strong,{children:"%haskell_register"})}),(0,i.jsxs)(s.td,{children:["Runs ",(0,i.jsx)(s.code,{children:"runhaskell register"})," to generate a pkg-config for package and version, then installs the conf file."]})]})]})]}),"\n",(0,i.jsxs)(s.p,{children:["Existing Haskell packages may use the old ",(0,i.jsx)(s.code,{children:"cabal_build"}),", ",(0,i.jsx)(s.code,{children:"cabal_install"}),", ",(0,i.jsx)(s.code,{children:"cabal_register"})," macros. Please use the new ",(0,i.jsx)(s.code,{children:"haskell_*"})," macros instead."]}),"\n",(0,i.jsx)(s.h3,{id:"ninja-actionable-macros",children:"Ninja actionable macros"}),"\n",(0,i.jsxs)(s.table,{children:[(0,i.jsx)(s.thead,{children:(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.th,{children:"Macro"}),(0,i.jsx)(s.th,{children:"Description"})]})}),(0,i.jsxs)(s.tbody,{children:[(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.strong,{children:"%meson_configure"})}),(0,i.jsxs)(s.td,{children:["Runs ",(0,i.jsx)(s.code,{children:"meson"})," with our CFLAGS and appropriate flags such as ",(0,i.jsx)(s.code,{children:"libdir"}),"."]})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.strong,{children:"%ninja_build"})}),(0,i.jsxs)(s.td,{children:["Runs ",(0,i.jsx)(s.code,{children:"ninja"})," and passes our ",(0,i.jsx)(s.code,{children:"%JOBS%"})," variable. This macro obsoletes ",(0,i.jsx)(s.em,{children:"%meson_build"}),"."]})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.strong,{children:"%ninja_install"})}),(0,i.jsxs)(s.td,{children:["Runs ",(0,i.jsx)(s.code,{children:"ninja install"})," and passes the appropriate ",(0,i.jsx)(s.code,{children:"DESTDIR"})," and ",(0,i.jsx)(s.code,{children:"%JOBS%"})," variable. This macro obsoletes ",(0,i.jsx)(s.em,{children:"%meson_install"}),"."]})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.strong,{children:"%ninja_check"})}),(0,i.jsxs)(s.td,{children:["Runs ",(0,i.jsx)(s.code,{children:"ninja test"})," and passes our ",(0,i.jsx)(s.code,{children:"%JOBS%"})," variable. This macro obsoletes ",(0,i.jsx)(s.em,{children:"%meson_check"}),"."]})]})]})]}),"\n",(0,i.jsx)(s.h3,{id:"perl-actionable-macros",children:"Perl actionable macros"}),"\n",(0,i.jsxs)(s.table,{children:[(0,i.jsx)(s.thead,{children:(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.th,{children:"Macro"}),(0,i.jsx)(s.th,{children:"Description"})]})}),(0,i.jsxs)(s.tbody,{children:[(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.strong,{children:"%perl_setup"})}),(0,i.jsxs)(s.td,{children:["Runs Perl setup scripts ",(0,i.jsx)(s.code,{children:"Build.pl"})," or ",(0,i.jsx)(s.code,{children:"Makefile.pl"})," with the appropriate variable flags."]})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.strong,{children:"%perl_build"})}),(0,i.jsxs)(s.td,{children:["Runs Perl build scripts or attempts ",(0,i.jsx)(s.code,{children:"%make"}),"."]})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.strong,{children:"%perl_install"})}),(0,i.jsxs)(s.td,{children:["Runs Perl install scripts or attempts ",(0,i.jsx)(s.code,{children:"%make_install"}),"."]})]})]})]}),"\n",(0,i.jsx)(s.h3,{id:"python-actionable-macros",children:"Python actionable macros"}),"\n",(0,i.jsxs)(s.table,{children:[(0,i.jsx)(s.thead,{children:(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.th,{children:"Macro"}),(0,i.jsx)(s.th,{children:"Description"})]})}),(0,i.jsxs)(s.tbody,{children:[(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.strong,{children:"%python_setup"})}),(0,i.jsx)(s.td,{children:"Runs the build portion of a setup.py using python2."})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.strong,{children:"%python_install"})}),(0,i.jsx)(s.td,{children:"Runs the install portion of a setup.py, to the appropriate root, using python2."})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.strong,{children:"%python_test"})}),(0,i.jsxs)(s.td,{children:["Without argument, runs the test portion of setup.py. With a ",(0,i.jsx)(s.code,{children:".py"}),' script, execute the script with python2. With something else execute the command "as it is". (',(0,i.jsx)(s.a,{href:"https://github.com/getsolus/ypkg/pull/1",children:"More info"}),")"]})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.strong,{children:"%python_compile"})}),(0,i.jsxs)(s.td,{children:["Compiles ",(0,i.jsx)(s.code,{children:"*.py"})," files using python2. This is only useful where the build doesn't compile them already (indicated by availability of ",(0,i.jsx)(s.code,{children:"*.pyc"})," files)."]})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.strong,{children:"%python3_setup"})}),(0,i.jsx)(s.td,{children:"Runs the build portion of a setup.py using python3."})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.strong,{children:"%python3_install"})}),(0,i.jsx)(s.td,{children:"Runs the install portion of a setup.py, to the appropriate root, using python3."})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.strong,{children:"%python3_test"})}),(0,i.jsxs)(s.td,{children:["Without argument, runs the test portion of setup.py. With a ",(0,i.jsx)(s.code,{children:".py"}),' script, execute the script with python3. With something else execute the command "as it is". (',(0,i.jsx)(s.a,{href:"https://github.com/getsolus/ypkg/pull/1",children:"More info"}),")"]})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.strong,{children:"%python3_compile"})}),(0,i.jsxs)(s.td,{children:["Compiles ",(0,i.jsx)(s.code,{children:"*.py"})," files using python3. This is only useful where the build doesn't compile them already (indicated by availability of ",(0,i.jsx)(s.code,{children:"*.pyc"})," files)."]})]})]})]}),"\n",(0,i.jsx)(s.h3,{id:"ruby-actionable-macros",children:"Ruby actionable macros"}),"\n",(0,i.jsxs)(s.table,{children:[(0,i.jsx)(s.thead,{children:(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.th,{children:"Macro"}),(0,i.jsx)(s.th,{children:"Description"})]})}),(0,i.jsxs)(s.tbody,{children:[(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.strong,{children:"%gem_build"})}),(0,i.jsxs)(s.td,{children:["Runs ",(0,i.jsx)(s.code,{children:"gem build"}),"."]})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.strong,{children:"%gem_install"})}),(0,i.jsxs)(s.td,{children:["Runs ",(0,i.jsx)(s.code,{children:"gem install"})," with the appropriate parameters."]})]})]})]}),"\n",(0,i.jsx)(s.h3,{id:"rust-cargo-actionable-macros",children:"Rust (cargo) actionable macros"}),"\n",(0,i.jsxs)(s.table,{children:[(0,i.jsx)(s.thead,{children:(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.th,{children:"Macro"}),(0,i.jsx)(s.th,{children:"Description"})]})}),(0,i.jsxs)(s.tbody,{children:[(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.strong,{children:"%cargo_fetch"})}),(0,i.jsxs)(s.td,{children:["Runs ",(0,i.jsx)(s.code,{children:"cargo fetch --locked"})," to get dependencies."]})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.strong,{children:"%cargo_build"})}),(0,i.jsxs)(s.td,{children:["Runs ",(0,i.jsx)(s.code,{children:"cargo build"})," with some additional flags."]})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.strong,{children:"%cargo_install"})}),(0,i.jsxs)(s.td,{children:["Installs the built binary to ",(0,i.jsx)(s.code,{children:"/usr/bin/PACKAGE-NAME"}),", OR to ",(0,i.jsx)(s.code,{children:"/usr/bin/ARGUMENT"}),"."]})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.strong,{children:"%cargo_test"})}),(0,i.jsxs)(s.td,{children:["Runs ",(0,i.jsx)(s.code,{children:"cargo test"})," with some additional flags."]})]})]})]}),"\n",(0,i.jsx)(s.h3,{id:"qt-actionable-macros",children:"Qt actionable macros"}),"\n",(0,i.jsxs)(s.table,{children:[(0,i.jsx)(s.thead,{children:(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.th,{children:"Macro"}),(0,i.jsx)(s.th,{children:"Description"})]})}),(0,i.jsxs)(s.tbody,{children:[(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.strong,{children:"%qmake"})}),(0,i.jsxs)(s.td,{children:["Runs ",(0,i.jsx)(s.code,{children:"qmake"})," for Qt5 with the appropriate make flags."]})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.strong,{children:"%qmake4"})}),(0,i.jsxs)(s.td,{children:["Runs ",(0,i.jsx)(s.code,{children:"qmake"})," for Qt4, as well as adding the necessary MOC, RCC, and UIC flags since those Qt4 executables end in -qt4."]})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.strong,{children:"%qml_cache"})}),(0,i.jsxs)(s.td,{children:["Compiles ",(0,i.jsx)(s.code,{children:"*.qml"})," files into ",(0,i.jsx)(s.code,{children:"*.qmlc"})," so they are compiled ahead of time."]})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.strong,{children:"%qml6_cache"})}),(0,i.jsxs)(s.td,{children:["Same as ",(0,i.jsx)(s.code,{children:"%qml_cache"}),", but for Qt6."]})]})]})]}),"\n",(0,i.jsx)(s.h3,{id:"waf-actionable-macros",children:"Waf actionable macros"}),"\n",(0,i.jsxs)(s.table,{children:[(0,i.jsx)(s.thead,{children:(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.th,{children:"Macro"}),(0,i.jsx)(s.th,{children:"Description"})]})}),(0,i.jsxs)(s.tbody,{children:[(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.strong,{children:"%waf_configure"})}),(0,i.jsxs)(s.td,{children:["Runs ",(0,i.jsx)(s.code,{children:"waf configure"})," with prefix."]})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.strong,{children:"%waf_build"})}),(0,i.jsxs)(s.td,{children:["Runs ",(0,i.jsx)(s.code,{children:"waf"})," and passes our ",(0,i.jsx)(s.code,{children:"%JOBS%"})," variable."]})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.strong,{children:"%waf_install"})}),(0,i.jsxs)(s.td,{children:["Runs ",(0,i.jsx)(s.code,{children:"waf install"})," and passes the appropriate ",(0,i.jsx)(s.code,{children:"destdir"})," and ",(0,i.jsx)(s.code,{children:"%JOBS%"})," variable."]})]})]})]}),"\n",(0,i.jsx)(s.h3,{id:"bolt-actionable-macros",children:"BOLT actionable macros"}),"\n",(0,i.jsx)(s.p,{children:"BOLT is a post-link optimizer developed to speed up large applications. You will need to run a workload after instrumenting a binary or library. Think of it as post-link profile guided optimization."}),"\n",(0,i.jsxs)(s.table,{children:[(0,i.jsx)(s.thead,{children:(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.th,{children:"Macro"}),(0,i.jsx)(s.th,{children:"Description"})]})}),(0,i.jsxs)(s.tbody,{children:[(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.strong,{children:"%bolt_instr"})}),(0,i.jsxs)(s.td,{children:["Instrument a binary or library with llvm-bolt. Requires it to be built with ",(0,i.jsx)(s.code,{children:"emit-relocs"}),", as well as ",(0,i.jsx)(s.code,{children:"no-reorder-blocks-partition"})," if not using clang."]})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.strong,{children:"%bolt_merge"})}),(0,i.jsx)(s.td,{children:"Merge fdata profiles into a single file after running a workload with a BOLT instrumented binary."})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.strong,{children:"%bolt_opt"})}),(0,i.jsxs)(s.td,{children:["Optimize a binary using BOLT after running ",(0,i.jsx)(s.code,{children:"%bolt_merge"}),"."]})]})]})]}),"\n",(0,i.jsx)(s.h3,{id:"variable-macros",children:"Variable macros"}),"\n",(0,i.jsxs)(s.table,{children:[(0,i.jsx)(s.thead,{children:(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.th,{children:"Macro"}),(0,i.jsx)(s.th,{children:"Description"})]})}),(0,i.jsxs)(s.tbody,{children:[(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.strong,{children:"%ARCH%"})}),(0,i.jsx)(s.td,{children:"Indicates the current build architecture."})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.strong,{children:"%CC%"})}),(0,i.jsx)(s.td,{children:"C compiler."})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.strong,{children:"%CFLAGS%"})}),(0,i.jsxs)(s.td,{children:["cflags as set in ",(0,i.jsx)(s.code,{children:"eopkg.conf"}),"."]})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.strong,{children:"%CONFOPTS%"})}),(0,i.jsxs)(s.td,{children:["Flags / options for configuration, such as ",(0,i.jsx)(s.code,{children:"--prefix=%PREFIX%"}),". ",(0,i.jsx)(s.a,{href:"https://github.com/getsolus/ypkg/blob/v33/ypkg2/rc.yml#L446-L458",children:"Full List."})]})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.strong,{children:"%CXX%"})}),(0,i.jsx)(s.td,{children:"C++ compiler."})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.strong,{children:"%CXXFLAGS%"})}),(0,i.jsxs)(s.td,{children:["cxxflags as set in ",(0,i.jsx)(s.code,{children:"eopkg.conf"}),"."]})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.strong,{children:"%JOBS%"})}),(0,i.jsxs)(s.td,{children:["jobs, as set in ",(0,i.jsx)(s.code,{children:"eopkg.conf"}),"."]})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.strong,{children:"%LDFLAGS%"})}),(0,i.jsxs)(s.td,{children:["ldflags as set in ",(0,i.jsx)(s.code,{children:"eopkg.conf"}),"."]})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.strong,{children:"%LIBSUFFIX%"})}),(0,i.jsx)(s.td,{children:"Library suffix (either 32 for 32-bit or 64 for 64-bit)."})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.strong,{children:"%PREFIX%"})}),(0,i.jsxs)(s.td,{children:["Hard-coded prefix ",(0,i.jsx)(s.code,{children:"/usr"}),"."]})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.strong,{children:"%YJOBS%"})}),(0,i.jsxs)(s.td,{children:["Job count without ",(0,i.jsx)(s.code,{children:"-j"})," as set in ",(0,i.jsx)(s.code,{children:"eopkg.conf"}),"."]})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.strong,{children:"%installroot%"})}),(0,i.jsx)(s.td,{children:"Hard-coded install directory."})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.strong,{children:"%libdir%"})}),(0,i.jsxs)(s.td,{children:["The distribution\u2019s default library directory, i.e. ",(0,i.jsx)(s.code,{children:"/usr/lib64"})," (Alters for ",(0,i.jsx)(s.code,{children:"emul32"}),")."]})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.strong,{children:"%version%"})}),(0,i.jsxs)(s.td,{children:["Version of the package, as specified in the ",(0,i.jsx)(s.code,{children:"version"})," key."]})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.strong,{children:"%workdir%"})}),(0,i.jsx)(s.td,{children:"Hard-coded work directory (source tree)."})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.strong,{children:"%kernel_version_lts%"})}),(0,i.jsxs)(s.td,{children:["Version of the ",(0,i.jsx)(s.code,{children:"linux-lts"})," kernel."]})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.strong,{children:"%kernel_version_current%"})}),(0,i.jsxs)(s.td,{children:["Version of the ",(0,i.jsx)(s.code,{children:"linux-current"})," kernel."]})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.strong,{children:"%python2_version%"})}),(0,i.jsxs)(s.td,{children:["Version of the ",(0,i.jsx)(s.code,{children:"python"})," (Python 2) distribution."]})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.strong,{children:"%python3_version%"})}),(0,i.jsxs)(s.td,{children:["Version of the ",(0,i.jsx)(s.code,{children:"python3"})," distribution."]})]})]})]}),"\n",(0,i.jsx)(s.h2,{id:"variables",children:"Variables"}),"\n",(0,i.jsx)(s.p,{children:"A set of variables are exported in our build stages. These are used to provide context and structure to the scripts."}),"\n",(0,i.jsxs)(s.table,{children:[(0,i.jsx)(s.thead,{children:(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.th,{children:"Variable"}),(0,i.jsx)(s.th,{children:"Description"})]})}),(0,i.jsxs)(s.tbody,{children:[(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.strong,{children:"$CFLAGS"})}),(0,i.jsxs)(s.td,{children:["cflags as set in ",(0,i.jsx)(s.code,{children:"eopkg.conf"}),"."]})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.strong,{children:"$CXXFLAGS"})}),(0,i.jsxs)(s.td,{children:["cxxflags as set in ",(0,i.jsx)(s.code,{children:"eopkg.conf"}),"."]})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.strong,{children:"$LDFLAGS"})}),(0,i.jsxs)(s.td,{children:["ldflags as set in ",(0,i.jsx)(s.code,{children:"eopkg.conf"}),"."]})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.strong,{children:"$CC"})}),(0,i.jsx)(s.td,{children:"C compiler."})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.strong,{children:"$CXX"})}),(0,i.jsx)(s.td,{children:"C++ compiler."})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.strong,{children:"$EMUL32BUILD"})}),(0,i.jsxs)(s.td,{children:["Set only when compiling in ",(0,i.jsx)(s.code,{children:"emul32"})," mode."]})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.strong,{children:"$AVX2BUILD"})}),(0,i.jsxs)(s.td,{children:["Set only when compiling in ",(0,i.jsx)(s.code,{children:"avx2"})," mode."]})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.strong,{children:"$PGO_GEN_BUILD"})}),(0,i.jsx)(s.td,{children:"Set during the instrumentation phase of a PGO build."})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.strong,{children:"$PGO_USE_BUILD"})}),(0,i.jsx)(s.td,{children:"Set during the use phase of a PGO build."})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.strong,{children:"$installdir"})}),(0,i.jsx)(s.td,{children:"The install directory, i.e. where files are installed to for packaging."})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.strong,{children:"$pkgfiles"})}),(0,i.jsxs)(s.td,{children:["Refers to the ",(0,i.jsx)(s.code,{children:"./files"})," directory relative to the ",(0,i.jsx)(s.code,{children:"package.yml"})," file."]})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.strong,{children:"$sources"})}),(0,i.jsxs)(s.td,{children:["Refers to the directory where your source files are stored, for example, ",(0,i.jsx)(s.code,{children:"$sources/nano.tar.gz"}),"."]})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.strong,{children:"$workdir"})}),(0,i.jsx)(s.td,{children:"The work, or source, directory of the package build."})]})]})]}),"\n",(0,i.jsx)(s.h2,{id:"types",children:"Types"}),"\n",(0,i.jsxs)(s.p,{children:["The ",(0,i.jsx)(s.code,{children:"package.yml"})," file uses native YAML types, however it follows syntactic conventions and may accept multiple value types for a given key."]}),"\n",(0,i.jsx)(s.h3,{id:"string",children:"string"}),"\n",(0,i.jsx)(s.p,{children:"This is simply text, which does not need to be quoted."}),"\n",(0,i.jsx)(s.h3,{id:"strings",children:"string(s)"}),"\n",(0,i.jsxs)(s.p,{children:["Indicates that it is possible to use a ",(0,i.jsx)(s.code,{children:"list"})," of strings, or one single ",(0,i.jsx)(s.code,{children:"string"}),"."]}),"\n",(0,i.jsx)(s.h3,{id:"integer",children:"integer"}),"\n",(0,i.jsxs)(s.p,{children:["Whole, positive number, used in the ",(0,i.jsx)(s.code,{children:"release"})," field."]}),"\n",(0,i.jsx)(s.h3,{id:"list",children:"list"}),"\n",(0,i.jsx)(s.p,{children:"A YAML list (or array) can be expressed in multiple ways. A short array-notation would look like this:"}),"\n",(0,i.jsx)(s.p,{children:(0,i.jsx)(s.code,{children:"[one, two, three]"})}),"\n",(0,i.jsx)(s.p,{children:"They can also be expressed like this:"}),"\n",(0,i.jsx)(s.pre,{children:(0,i.jsx)(s.code,{className:"language-yaml",children:"- First Value\n- Second Value\n- Third Value\n"})}),"\n",(0,i.jsx)(s.h3,{id:"dict",children:"dict"}),"\n",(0,i.jsxs)(s.p,{children:["Known as an associative array, this is key to value mapping. These are separated by a colon (",(0,i.jsx)(s.code,{children:":"}),"), the token on the left is taken to be a key, and the token on the right is the value."]}),"\n",(0,i.jsx)(s.p,{children:(0,i.jsx)(s.code,{children:"SomeKey: Some Value"})}),"\n",(0,i.jsxs)(s.p,{children:["Note that each ",(0,i.jsx)(s.code,{children:"ypkg key"})," in the YAML file is actually a dict."]}),"\n",(0,i.jsx)(s.h3,{id:"dicts",children:"dict(s)"}),"\n",(0,i.jsxs)(s.p,{children:[(0,i.jsx)(s.code,{children:"dict(s)"})," consists of a list of ",(0,i.jsx)(s.code,{children:"dict"}),"s and some assumptions. We primarily make use of this to express advanced information within the package. These permit you to provide no key, and a value only.\nIn this instance, the key is implicitly assumed to be the package name (for example, ",(0,i.jsx)(s.code,{children:"nano"}),"):"]}),"\n",(0,i.jsx)(s.p,{children:(0,i.jsx)(s.code,{children:"- some value"})}),"\n",(0,i.jsx)(s.p,{children:"An explicit key, usually a sub-package name:"}),"\n",(0,i.jsx)(s.p,{children:(0,i.jsx)(s.code,{children:"- somekey: somevalue"})}),"\n",(0,i.jsx)(s.p,{children:"A mix of both:"}),"\n",(0,i.jsx)(s.pre,{children:(0,i.jsx)(s.code,{className:"language-yaml",children:"- somevalue\n- somekey: another value\n"})}),"\n",(0,i.jsx)(s.p,{children:"The values may also be expressed in list form, still using the same default key logic:"}),"\n",(0,i.jsx)(s.pre,{children:(0,i.jsx)(s.code,{className:"language-yaml",children:"- [one, two, three]\n- somekey: [one, two, three]\n- key:\n - value one\n - value two\n - value three\n"})}),"\n",(0,i.jsx)(s.h2,{id:"packaging-practices",children:"Packaging practices"}),"\n",(0,i.jsxs)(s.p,{children:["The concepts in this document merely expose the syntax of a ",(0,i.jsx)(s.code,{children:"package.yml"})," file. Solus adheres to strict packaging practices and conventions which packagers must follow. They are explained in the ",(0,i.jsx)(s.a,{href:"/docs/packaging/packaging-practices",children:"Packaging Practices"})," article."]})]})}function a(e={}){const{wrapper:s}={...(0,r.a)(),...e.components};return s?(0,i.jsx)(s,{...e,children:(0,i.jsx)(h,{...e})}):h(e)}},11151:(e,s,n)=>{n.d(s,{Z:()=>c,a:()=>l});var i=n(67294);const r={},d=i.createContext(r);function l(e){const s=i.useContext(d);return i.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function c(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:l(e.components),i.createElement(d.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/418a6276.42385bff.js b/assets/js/418a6276.42385bff.js deleted file mode 100644 index 13ead6417..000000000 --- a/assets/js/418a6276.42385bff.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[6160],{71697:(e,o,t)=>{t.r(o),t.d(o,{assets:()=>r,contentTitle:()=>a,default:()=>p,frontMatter:()=>l,metadata:()=>i,toc:()=>g});var s=t(85893),n=t(11151);const l={title:"eopkg is dead, long live eopkg",slug:"eopkg-is-dead-long-live-eopkg",authors:"david",tags:["eopkg","devlog","moss","solus"],hide_table_of_contents:!1},a=void 0,i={permalink:"/blog/eopkg-is-dead-long-live-eopkg",source:"@site/devlog/2024-01-19-eopkg-is-dead.md",title:"eopkg is dead, long live eopkg",description:"Close watchers of our packages repository may have noticed some strange looking items:",date:"2024-01-19T00:00:00.000Z",tags:[{inline:!0,label:"eopkg",permalink:"/blog/tags/eopkg"},{inline:!0,label:"devlog",permalink:"/blog/tags/devlog"},{inline:!0,label:"moss",permalink:"/blog/tags/moss"},{inline:!0,label:"solus",permalink:"/blog/tags/solus"}],readingTime:1.645,hasTruncateMarker:!0,authors:[{name:"David Harder",title:"Solus Staff",page:{permalink:"/blog/authors/david"},socials:{github:"https://github.com/davidjharder"},imageURL:"https://avatars.githubusercontent.com/u/23007135",key:"david"}],frontMatter:{title:"eopkg is dead, long live eopkg",slug:"eopkg-is-dead-long-live-eopkg",authors:"david",tags:["eopkg","devlog","moss","solus"],hide_table_of_contents:!1},unlisted:!1,prevItem:{title:"Don't call me MATE, pal!",permalink:"/blog/don't-call-me-mate-pal"},nextItem:{title:"Welcome to the Solus Devlog",permalink:"/blog/welcome-solus-devlog-v1"}},r={authorsImageUrls:[void 0]},g=[];function c(e){const o={a:"a",li:"li",p:"p",ul:"ul",...(0,n.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsxs)(o.p,{children:["Close watchers of our ",(0,s.jsx)(o.a,{href:"https://github.com/getsolus/packages",children:"packages repository"})," may have noticed some strange looking items:"]}),"\n",(0,s.jsxs)(o.ul,{children:["\n",(0,s.jsx)(o.li,{children:(0,s.jsx)(o.a,{href:"https://github.com/getsolus/packages/pull/1305",children:"Initial inclusion of eopkg4-bin"})}),"\n",(0,s.jsxs)(o.li,{children:[(0,s.jsx)(o.a,{href:"https://github.com/getsolus/packages/issues/1316",children:"Testing the eopkg4-bin package"})," Warning: Minions GIF"]}),"\n"]}),"\n",(0,s.jsx)(o.p,{children:"It's a long story."})]})}function p(e={}){const{wrapper:o}={...(0,n.a)(),...e.components};return o?(0,s.jsx)(o,{...e,children:(0,s.jsx)(c,{...e})}):c(e)}},11151:(e,o,t)=>{t.d(o,{Z:()=>i,a:()=>a});var s=t(67294);const n={},l=s.createContext(n);function a(e){const o=s.useContext(l);return s.useMemo((function(){return"function"==typeof e?e(o):{...o,...e}}),[o,e])}function i(e){let o;return o=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:a(e.components),s.createElement(l.Provider,{value:o},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/418a6276.8e4d12df.js b/assets/js/418a6276.8e4d12df.js new file mode 100644 index 000000000..6b96600af --- /dev/null +++ b/assets/js/418a6276.8e4d12df.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([["8761"],{28645:function(e,t,o){o.r(t),o.d(t,{assets:function(){return r},contentTitle:function(){return a},default:function(){return c},frontMatter:function(){return i},metadata:function(){return n},toc:function(){return u}});var n=o(39756),s=o(85893),l=o(50065);let i={title:"eopkg is dead, long live eopkg",slug:"eopkg-is-dead-long-live-eopkg",authors:"david",tags:["eopkg","devlog","moss","solus"],hide_table_of_contents:!1},a=void 0,r={authorsImageUrls:[void 0]},u=[];function g(e){let t={a:"a",li:"li",p:"p",ul:"ul",...(0,l.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsxs)(t.p,{children:["Close watchers of our ",(0,s.jsx)(t.a,{href:"https://github.com/getsolus/packages",children:"packages repository"})," may have noticed some strange looking items:"]}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"https://github.com/getsolus/packages/pull/1305",children:"Initial inclusion of eopkg4-bin"})}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.a,{href:"https://github.com/getsolus/packages/issues/1316",children:"Testing the eopkg4-bin package"})," Warning: Minions GIF"]}),"\n"]}),"\n",(0,s.jsx)(t.p,{children:"It's a long story."})]})}function c(e={}){let{wrapper:t}={...(0,l.a)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(g,{...e})}):g(e)}},50065:function(e,t,o){o.d(t,{Z:function(){return a},a:function(){return i}});var n=o(67294);let s={},l=n.createContext(s);function i(e){let t=n.useContext(l);return n.useMemo(function(){return"function"==typeof e?e(t):{...t,...e}},[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:i(e.components),n.createElement(l.Provider,{value:t},e.children)}},39756:function(e){e.exports=JSON.parse('{"permalink":"/blog/eopkg-is-dead-long-live-eopkg","source":"@site/devlog/2024-01-19-eopkg-is-dead.md","title":"eopkg is dead, long live eopkg","description":"Close watchers of our packages repository may have noticed some strange looking items:","date":"2024-01-19T00:00:00.000Z","tags":[{"inline":true,"label":"eopkg","permalink":"/blog/tags/eopkg"},{"inline":true,"label":"devlog","permalink":"/blog/tags/devlog"},{"inline":true,"label":"moss","permalink":"/blog/tags/moss"},{"inline":true,"label":"solus","permalink":"/blog/tags/solus"}],"readingTime":1.645,"hasTruncateMarker":true,"authors":[{"name":"David Harder","title":"Solus Staff","page":{"permalink":"/blog/authors/david"},"socials":{"github":"https://github.com/davidjharder"},"imageURL":"https://avatars.githubusercontent.com/u/23007135","key":"david"}],"frontMatter":{"title":"eopkg is dead, long live eopkg","slug":"eopkg-is-dead-long-live-eopkg","authors":"david","tags":["eopkg","devlog","moss","solus"],"hide_table_of_contents":false},"unlisted":false,"prevItem":{"title":"Don\'t call me MATE, pal!","permalink":"/blog/don\'t-call-me-mate-pal"},"nextItem":{"title":"Welcome to the Solus Devlog","permalink":"/blog/welcome-solus-devlog-v1"}}')}}]); \ No newline at end of file diff --git a/assets/js/41a4de91.77cea898.js b/assets/js/41a4de91.77cea898.js new file mode 100644 index 000000000..a3630fe0b --- /dev/null +++ b/assets/js/41a4de91.77cea898.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([["881"],{39485:function(e,s,o){o.r(s),o.d(s,{metadata:()=>r,contentTitle:()=>a,default:()=>c,assets:()=>d,toc:()=>l,frontMatter:()=>i});var r=JSON.parse('{"id":"user/software/third-party/index","title":"Third Party","description":"The following applications are provided via our 3rd Party Repository to facilitate the installation and usage of them. These applications cannot be included in the primary repository due to licensing issues.","source":"@site/docs/user/software/third-party/index.md","sourceDirName":"user/software/third-party","slug":"/user/software/third-party/","permalink":"/docs/user/software/third-party/","draft":false,"unlisted":false,"editUrl":"https://github.com/getsolus/help-center-docs/tree/master/docs/user/software/third-party/index.md","tags":[],"version":"current","lastUpdatedAt":1733757592000,"frontMatter":{"title":"Third Party","summary":"Quick Installation guide for all of the Third Party applications Solus can help you install"},"sidebar":"userSidebar","previous":{"title":"Sound","permalink":"/docs/user/software/sound/"},"next":{"title":"Snap","permalink":"/docs/user/software/third-party/snap"}}'),n=o("85893"),t=o("50065");let i={title:"Third Party",summary:"Quick Installation guide for all of the Third Party applications Solus can help you install"},a="Third Party",d={},l=[{value:"Browsers",id:"browsers",level:2},{value:"Google Chrome",id:"google-chrome",level:3},{value:"Google Chrome (Beta)",id:"google-chrome-beta",level:3},{value:"Google Chrome (Dev/Unstable)",id:"google-chrome-devunstable",level:3},{value:"Communication",id:"communication",level:2},{value:"Franz",id:"franz",level:3},{value:"Slack",id:"slack",level:3},{value:"Viber",id:"viber",level:3},{value:"Multimedia",id:"multimedia",level:2},{value:"Bitwig Studio",id:"bitwig-studio",level:3},{value:"Ocenaudio",id:"ocenaudio",level:3},{value:"Plex Media Server",id:"plex-media-server",level:3},{value:"SunVox",id:"sunvox",level:3},{value:"Spotify",id:"spotify",level:3},{value:"Network",id:"network",level:2},{value:"AnyDesk",id:"anydesk",level:3},{value:"Insync",id:"insync",level:3},{value:"Spideroak",id:"spideroak",level:3},{value:"Synology Cloud Station Drive",id:"synology-cloud-station-drive",level:3},{value:"TeamViewer",id:"teamviewer",level:3},{value:"Office",id:"office",level:2},{value:"Mendeley Desktop",id:"mendeley-desktop",level:3},{value:"Microsoft Core Fonts",id:"microsoft-core-fonts",level:3},{value:"Moneydance",id:"moneydance",level:3},{value:"PomoDoneApp",id:"pomodoneapp",level:3},{value:"Scrivener",id:"scrivener",level:3},{value:"Programming",id:"programming",level:2},{value:"Android Studio",id:"android-studio",level:3},{value:"CLion",id:"clion",level:3},{value:"DataGrip",id:"datagrip",level:3},{value:"GitKraken",id:"gitkraken",level:3},{value:"IDEA",id:"idea",level:3},{value:"PhpStorm",id:"phpstorm",level:3},{value:"PyCharm",id:"pycharm",level:3},{value:"Rider",id:"rider",level:3},{value:"RubyMine",id:"rubymine",level:3},{value:"Sublime Text",id:"sublime-text",level:3},{value:"WebStorm",id:"webstorm",level:3},{value:"Security",id:"security",level:2},{value:"Enpass",id:"enpass",level:3},{value:"Other",id:"other",level:2},{value:"Google Earth",id:"google-earth",level:3}];function p(e){let s={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",p:"p",pre:"pre",strong:"strong",...(0,t.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(s.header,{children:(0,n.jsx)(s.h1,{id:"third-party",children:"Third Party"})}),"\n",(0,n.jsx)(s.p,{children:"The following applications are provided via our 3rd Party Repository to facilitate the installation and usage of them. These applications cannot be included in the primary repository due to licensing issues."}),"\n",(0,n.jsx)(s.p,{children:"Alongside the following commands, you may also find some of these applications via the Third Party section on our Software Center."}),"\n",(0,n.jsxs)(s.p,{children:["If these instructions fail to work please ",(0,n.jsx)(s.a,{href:"https://github.com/getsolus/3rd-party/issues",children:"file an issue"}),". To upgrade once installed simply run the commands again. If there is a new version it will be installed."]}),"\n",(0,n.jsx)(s.h2,{id:"browsers",children:"Browsers"}),"\n",(0,n.jsx)(s.h3,{id:"google-chrome",children:"Google Chrome"}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-bash",children:"sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/network/web/browser/google-chrome-stable/pspec.xml\nsudo eopkg it google-chrome-*.eopkg;sudo rm google-chrome-*.eopkg\n"})}),"\n",(0,n.jsx)(s.h3,{id:"google-chrome-beta",children:"Google Chrome (Beta)"}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-bash",children:"sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/network/web/browser/google-chrome-beta/pspec.xml\nsudo eopkg it google-chrome-*.eopkg;sudo rm google-chrome-*.eopkg\n"})}),"\n",(0,n.jsx)(s.h3,{id:"google-chrome-devunstable",children:"Google Chrome (Dev/Unstable)"}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-bash",children:"sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/network/web/browser/google-chrome-unstable/pspec.xml\nsudo eopkg it google-chrome-*.eopkg;sudo rm google-chrome-*.eopkg\n"})}),"\n",(0,n.jsx)(s.h2,{id:"communication",children:"Communication"}),"\n",(0,n.jsx)(s.h3,{id:"franz",children:"Franz"}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-bash",children:"sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/network/im/franz/pspec.xml\nsudo eopkg it franz*.eopkg;sudo rm franz*.eopkg\n"})}),"\n",(0,n.jsx)(s.h3,{id:"slack",children:"Slack"}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-bash",children:"sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/network/im/slack-desktop/pspec.xml\nsudo eopkg it slack-desktop*.eopkg;sudo rm slack-desktop*.eopkg\n"})}),"\n",(0,n.jsx)(s.h3,{id:"viber",children:"Viber"}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-bash",children:"sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/network/im/viber/pspec.xml\nsudo eopkg it viber*.eopkg;sudo rm *.eopkg\n"})}),"\n",(0,n.jsx)(s.h2,{id:"multimedia",children:"Multimedia"}),"\n",(0,n.jsx)(s.h3,{id:"bitwig-studio",children:"Bitwig Studio"}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-bash",children:"sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/multimedia/music/bitwig-studio/pspec.xml\nsudo eopkg it bitwig-studio*.eopkg;sudo rm bitwig-studio*.eopkg\n"})}),"\n",(0,n.jsx)(s.h3,{id:"ocenaudio",children:"Ocenaudio"}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-bash",children:"sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/multimedia/music/ocenaudio/pspec.xml\nsudo eopkg it ocenaudio*.eopkg;sudo rm ocenaudio*.eopkg\n"})}),"\n",(0,n.jsx)(s.h3,{id:"plex-media-server",children:"Plex Media Server"}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-bash",children:"sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/multimedia/video/plexmediaserver/pspec.xml\nsudo eopkg it plexmediaserver-*.eopkg;sudo rm plexmediaserver-*.eopkg\nsudo systemd-tmpfiles --create\nsudo systemctl start plexmediaserver.service\n"})}),"\n",(0,n.jsxs)(s.p,{children:[(0,n.jsx)(s.strong,{children:"Note:"})," Optionally have it start on boot:"]}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-bash",children:"sudo systemctl enable plexmediaserver.service\n"})}),"\n",(0,n.jsx)(s.h3,{id:"sunvox",children:"SunVox"}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-bash",children:"sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/multimedia/music/sunvox/pspec.xml\nsudo eopkg it sunvox*.eopkg;sudo rm sunvox*.eopkg\n"})}),"\n",(0,n.jsx)(s.h3,{id:"spotify",children:"Spotify"}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-bash",children:"sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/multimedia/music/spotify/pspec.xml\nsudo eopkg it spotify*.eopkg;sudo rm spotify*.eopkg\n"})}),"\n",(0,n.jsx)(s.h2,{id:"network",children:"Network"}),"\n",(0,n.jsx)(s.h3,{id:"anydesk",children:"AnyDesk"}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-bash",children:"sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/network/util/anydesk/pspec.xml\nsudo eopkg it anydesk*.eopkg;sudo rm anydesk*.eopkg\n"})}),"\n",(0,n.jsx)(s.h3,{id:"insync",children:"Insync"}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-bash",children:"sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/network/download/insync/pspec.xml\nsudo eopkg it insync*.eopkg;sudo rm insync*.eopkg\n"})}),"\n",(0,n.jsx)(s.h3,{id:"spideroak",children:"Spideroak"}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-bash",children:"sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/network/download/spideroak/pspec.xml\nsudo eopkg it spideroak*.eopkg;sudo rm spideroak*.eopkg\n"})}),"\n",(0,n.jsx)(s.h3,{id:"synology-cloud-station-drive",children:"Synology Cloud Station Drive"}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-bash",children:"sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/network/download/synology-cloud-station-drive/pspec.xml\nsudo eopkg it synology-cloud-station-drive*.eopkg;sudo rm synology-cloud-station-drive*.eopkg\n"})}),"\n",(0,n.jsx)(s.h3,{id:"teamviewer",children:"TeamViewer"}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-bash",children:"sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/network/util/teamviewer/pspec.xml\nsudo eopkg it teamviewer*.eopkg;sudo rm teamviewer*.eopkg\nsudo systemctl start teamviewerd.service\n"})}),"\n",(0,n.jsx)(s.h2,{id:"office",children:"Office"}),"\n",(0,n.jsx)(s.h3,{id:"mendeley-desktop",children:"Mendeley Desktop"}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-bash",children:"sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/office/mendeleydesktop/pspec.xml\nsudo eopkg it mendeleydesktop*.eopkg;sudo rm mendeleydesktop*.eopkg\n"})}),"\n",(0,n.jsx)(s.h3,{id:"microsoft-core-fonts",children:"Microsoft Core Fonts"}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-bash",children:"sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/desktop/font/mscorefonts/pspec.xml\nsudo eopkg it mscorefonts*.eopkg;sudo rm mscorefonts*.eopkg\n"})}),"\n",(0,n.jsx)(s.h3,{id:"moneydance",children:"Moneydance"}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-bash",children:"sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/office/moneydance/pspec.xml\nsudo eopkg it moneydance*.eopkg;sudo rm moneydance*.eopkg\n"})}),"\n",(0,n.jsx)(s.h3,{id:"pomodoneapp",children:"PomoDoneApp"}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-bash",children:"sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/office/pomodoneapp/pspec.xml\nsudo eopkg it pomodoneapp*.eopkg;sudo rm pomodoneapp*.eopkg\n"})}),"\n",(0,n.jsx)(s.h3,{id:"scrivener",children:"Scrivener"}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-bash",children:"sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/office/scrivener/pspec.xml\nsudo eopkg it scrivener*.eopkg;sudo rm scrivener*.eopkg\n"})}),"\n",(0,n.jsx)(s.h2,{id:"programming",children:"Programming"}),"\n",(0,n.jsx)(s.h3,{id:"android-studio",children:"Android Studio"}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-bash",children:"sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/programming/android-studio/pspec.xml\nsudo eopkg it android-studio*.eopkg;sudo rm android-studio*.eopkg\n"})}),"\n",(0,n.jsx)(s.h3,{id:"clion",children:"CLion"}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-bash",children:"sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/programming/clion/pspec.xml\nsudo eopkg it clion*.eopkg;sudo rm clion*.eopkg\n"})}),"\n",(0,n.jsx)(s.h3,{id:"datagrip",children:"DataGrip"}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-bash",children:"sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/programming/datagrip/pspec.xml\nsudo eopkg it datagrip*.eopkg;sudo rm datagrip*.eopkg\n"})}),"\n",(0,n.jsx)(s.h3,{id:"gitkraken",children:"GitKraken"}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-bash",children:"sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/programming/gitkraken/pspec.xml\nsudo eopkg it gitkraken*.eopkg;sudo rm gitkraken*.eopkg\n"})}),"\n",(0,n.jsx)(s.h3,{id:"idea",children:"IDEA"}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-bash",children:"sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/programming/idea/pspec.xml\nsudo eopkg it idea*.eopkg;sudo rm idea*.eopkg\n"})}),"\n",(0,n.jsx)(s.h3,{id:"phpstorm",children:"PhpStorm"}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-bash",children:"sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/programming/phpstorm/pspec.xml\nsudo eopkg it phpstorm*.eopkg;sudo rm phpstorm*.eopkg\n"})}),"\n",(0,n.jsx)(s.h3,{id:"pycharm",children:"PyCharm"}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-bash",children:"sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/programming/pycharm/pspec.xml\nsudo eopkg it pycharm*.eopkg;sudo rm pycharm*.eopkg\n"})}),"\n",(0,n.jsx)(s.h3,{id:"rider",children:"Rider"}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-bash",children:"sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/programming/rider/pspec.xml\nsudo eopkg it rider*.eopkg;sudo rm rider*.eopkg\n"})}),"\n",(0,n.jsx)(s.h3,{id:"rubymine",children:"RubyMine"}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-bash",children:"sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/programming/rubymine/pspec.xml\nsudo eopkg it rubymine*.eopkg;sudo rm rubymine*.eopkg\n"})}),"\n",(0,n.jsx)(s.h3,{id:"sublime-text",children:"Sublime Text"}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-bash",children:"sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/programming/sublime-text/pspec.xml\nsudo eopkg it sublime*.eopkg;sudo rm sublime*.eopkg\n"})}),"\n",(0,n.jsx)(s.h3,{id:"webstorm",children:"WebStorm"}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-bash",children:"sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/programming/webstorm/pspec.xml\nsudo eopkg it webstorm*.eopkg;sudo rm webstorm*.eopkg\n"})}),"\n",(0,n.jsx)(s.h2,{id:"security",children:"Security"}),"\n",(0,n.jsx)(s.h3,{id:"enpass",children:"Enpass"}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-bash",children:"sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/security/enpass/pspec.xml\nsudo eopkg it enpass*.eopkg;sudo rm enpass*.eopkg\n"})}),"\n",(0,n.jsx)(s.h2,{id:"other",children:"Other"}),"\n",(0,n.jsx)(s.h3,{id:"google-earth",children:"Google Earth"}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-bash",children:"sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/network/web/google-earth/pspec.xml\nsudo eopkg it google-earth*.eopkg;sudo rm google-earth*.eopkg\n"})})]})}function c(e={}){let{wrapper:s}={...(0,t.a)(),...e.components};return s?(0,n.jsx)(s,{...e,children:(0,n.jsx)(p,{...e})}):p(e)}},50065:function(e,s,o){o.d(s,{Z:function(){return a},a:function(){return i}});var r=o(67294);let n={},t=r.createContext(n);function i(e){let s=r.useContext(t);return r.useMemo(function(){return"function"==typeof e?e(s):{...s,...e}},[s,e])}function a(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:i(e.components),r.createElement(t.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/41a4de91.cff75d56.js b/assets/js/41a4de91.cff75d56.js deleted file mode 100644 index 6e126a456..000000000 --- a/assets/js/41a4de91.cff75d56.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[7682],{31593:(e,s,o)=>{o.r(s),o.d(s,{assets:()=>d,contentTitle:()=>i,default:()=>c,frontMatter:()=>t,metadata:()=>a,toc:()=>l});var r=o(85893),n=o(11151);const t={title:"Third Party",summary:"Quick Installation guide for all of the Third Party applications Solus can help you install"},i="Third Party",a={id:"user/software/third-party/index",title:"Third Party",description:"The following applications are provided via our 3rd Party Repository to facilitate the installation and usage of them. These applications cannot be included in the primary repository due to licensing issues.",source:"@site/docs/user/software/third-party/index.md",sourceDirName:"user/software/third-party",slug:"/user/software/third-party/",permalink:"/docs/user/software/third-party/",draft:!1,unlisted:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/software/third-party/index.md",tags:[],version:"current",lastUpdatedAt:1732716912e3,frontMatter:{title:"Third Party",summary:"Quick Installation guide for all of the Third Party applications Solus can help you install"},sidebar:"userSidebar",previous:{title:"Sound",permalink:"/docs/user/software/sound/"},next:{title:"Snap",permalink:"/docs/user/software/third-party/snap"}},d={},l=[{value:"Browsers",id:"browsers",level:2},{value:"Google Chrome",id:"google-chrome",level:3},{value:"Google Chrome (Beta)",id:"google-chrome-beta",level:3},{value:"Google Chrome (Dev/Unstable)",id:"google-chrome-devunstable",level:3},{value:"Communication",id:"communication",level:2},{value:"Franz",id:"franz",level:3},{value:"Slack",id:"slack",level:3},{value:"Viber",id:"viber",level:3},{value:"Multimedia",id:"multimedia",level:2},{value:"Bitwig Studio",id:"bitwig-studio",level:3},{value:"Ocenaudio",id:"ocenaudio",level:3},{value:"Plex Media Server",id:"plex-media-server",level:3},{value:"SunVox",id:"sunvox",level:3},{value:"Spotify",id:"spotify",level:3},{value:"Network",id:"network",level:2},{value:"AnyDesk",id:"anydesk",level:3},{value:"Insync",id:"insync",level:3},{value:"Spideroak",id:"spideroak",level:3},{value:"Synology Cloud Station Drive",id:"synology-cloud-station-drive",level:3},{value:"TeamViewer",id:"teamviewer",level:3},{value:"Office",id:"office",level:2},{value:"Mendeley Desktop",id:"mendeley-desktop",level:3},{value:"Microsoft Core Fonts",id:"microsoft-core-fonts",level:3},{value:"Moneydance",id:"moneydance",level:3},{value:"PomoDoneApp",id:"pomodoneapp",level:3},{value:"Scrivener",id:"scrivener",level:3},{value:"Programming",id:"programming",level:2},{value:"Android Studio",id:"android-studio",level:3},{value:"CLion",id:"clion",level:3},{value:"DataGrip",id:"datagrip",level:3},{value:"GitKraken",id:"gitkraken",level:3},{value:"IDEA",id:"idea",level:3},{value:"PhpStorm",id:"phpstorm",level:3},{value:"PyCharm",id:"pycharm",level:3},{value:"Rider",id:"rider",level:3},{value:"RubyMine",id:"rubymine",level:3},{value:"Sublime Text",id:"sublime-text",level:3},{value:"WebStorm",id:"webstorm",level:3},{value:"Security",id:"security",level:2},{value:"Enpass",id:"enpass",level:3},{value:"Other",id:"other",level:2},{value:"Google Earth",id:"google-earth",level:3}];function p(e){const s={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",p:"p",pre:"pre",strong:"strong",...(0,n.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(s.header,{children:(0,r.jsx)(s.h1,{id:"third-party",children:"Third Party"})}),"\n",(0,r.jsx)(s.p,{children:"The following applications are provided via our 3rd Party Repository to facilitate the installation and usage of them. These applications cannot be included in the primary repository due to licensing issues."}),"\n",(0,r.jsx)(s.p,{children:"Alongside the following commands, you may also find some of these applications via the Third Party section on our Software Center."}),"\n",(0,r.jsxs)(s.p,{children:["If these instructions fail to work please ",(0,r.jsx)(s.a,{href:"https://github.com/getsolus/3rd-party/issues",children:"file an issue"}),". To upgrade once installed simply run the commands again. If there is a new version it will be installed."]}),"\n",(0,r.jsx)(s.h2,{id:"browsers",children:"Browsers"}),"\n",(0,r.jsx)(s.h3,{id:"google-chrome",children:"Google Chrome"}),"\n",(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-bash",children:"sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/network/web/browser/google-chrome-stable/pspec.xml\nsudo eopkg it google-chrome-*.eopkg;sudo rm google-chrome-*.eopkg\n"})}),"\n",(0,r.jsx)(s.h3,{id:"google-chrome-beta",children:"Google Chrome (Beta)"}),"\n",(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-bash",children:"sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/network/web/browser/google-chrome-beta/pspec.xml\nsudo eopkg it google-chrome-*.eopkg;sudo rm google-chrome-*.eopkg\n"})}),"\n",(0,r.jsx)(s.h3,{id:"google-chrome-devunstable",children:"Google Chrome (Dev/Unstable)"}),"\n",(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-bash",children:"sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/network/web/browser/google-chrome-unstable/pspec.xml\nsudo eopkg it google-chrome-*.eopkg;sudo rm google-chrome-*.eopkg\n"})}),"\n",(0,r.jsx)(s.h2,{id:"communication",children:"Communication"}),"\n",(0,r.jsx)(s.h3,{id:"franz",children:"Franz"}),"\n",(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-bash",children:"sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/network/im/franz/pspec.xml\nsudo eopkg it franz*.eopkg;sudo rm franz*.eopkg\n"})}),"\n",(0,r.jsx)(s.h3,{id:"slack",children:"Slack"}),"\n",(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-bash",children:"sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/network/im/slack-desktop/pspec.xml\nsudo eopkg it slack-desktop*.eopkg;sudo rm slack-desktop*.eopkg\n"})}),"\n",(0,r.jsx)(s.h3,{id:"viber",children:"Viber"}),"\n",(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-bash",children:"sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/network/im/viber/pspec.xml\nsudo eopkg it viber*.eopkg;sudo rm *.eopkg\n"})}),"\n",(0,r.jsx)(s.h2,{id:"multimedia",children:"Multimedia"}),"\n",(0,r.jsx)(s.h3,{id:"bitwig-studio",children:"Bitwig Studio"}),"\n",(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-bash",children:"sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/multimedia/music/bitwig-studio/pspec.xml\nsudo eopkg it bitwig-studio*.eopkg;sudo rm bitwig-studio*.eopkg\n"})}),"\n",(0,r.jsx)(s.h3,{id:"ocenaudio",children:"Ocenaudio"}),"\n",(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-bash",children:"sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/multimedia/music/ocenaudio/pspec.xml\nsudo eopkg it ocenaudio*.eopkg;sudo rm ocenaudio*.eopkg\n"})}),"\n",(0,r.jsx)(s.h3,{id:"plex-media-server",children:"Plex Media Server"}),"\n",(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-bash",children:"sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/multimedia/video/plexmediaserver/pspec.xml\nsudo eopkg it plexmediaserver-*.eopkg;sudo rm plexmediaserver-*.eopkg\nsudo systemd-tmpfiles --create\nsudo systemctl start plexmediaserver.service\n"})}),"\n",(0,r.jsxs)(s.p,{children:[(0,r.jsx)(s.strong,{children:"Note:"})," Optionally have it start on boot:"]}),"\n",(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-bash",children:"sudo systemctl enable plexmediaserver.service\n"})}),"\n",(0,r.jsx)(s.h3,{id:"sunvox",children:"SunVox"}),"\n",(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-bash",children:"sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/multimedia/music/sunvox/pspec.xml\nsudo eopkg it sunvox*.eopkg;sudo rm sunvox*.eopkg\n"})}),"\n",(0,r.jsx)(s.h3,{id:"spotify",children:"Spotify"}),"\n",(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-bash",children:"sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/multimedia/music/spotify/pspec.xml\nsudo eopkg it spotify*.eopkg;sudo rm spotify*.eopkg\n"})}),"\n",(0,r.jsx)(s.h2,{id:"network",children:"Network"}),"\n",(0,r.jsx)(s.h3,{id:"anydesk",children:"AnyDesk"}),"\n",(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-bash",children:"sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/network/util/anydesk/pspec.xml\nsudo eopkg it anydesk*.eopkg;sudo rm anydesk*.eopkg\n"})}),"\n",(0,r.jsx)(s.h3,{id:"insync",children:"Insync"}),"\n",(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-bash",children:"sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/network/download/insync/pspec.xml\nsudo eopkg it insync*.eopkg;sudo rm insync*.eopkg\n"})}),"\n",(0,r.jsx)(s.h3,{id:"spideroak",children:"Spideroak"}),"\n",(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-bash",children:"sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/network/download/spideroak/pspec.xml\nsudo eopkg it spideroak*.eopkg;sudo rm spideroak*.eopkg\n"})}),"\n",(0,r.jsx)(s.h3,{id:"synology-cloud-station-drive",children:"Synology Cloud Station Drive"}),"\n",(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-bash",children:"sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/network/download/synology-cloud-station-drive/pspec.xml\nsudo eopkg it synology-cloud-station-drive*.eopkg;sudo rm synology-cloud-station-drive*.eopkg\n"})}),"\n",(0,r.jsx)(s.h3,{id:"teamviewer",children:"TeamViewer"}),"\n",(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-bash",children:"sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/network/util/teamviewer/pspec.xml\nsudo eopkg it teamviewer*.eopkg;sudo rm teamviewer*.eopkg\nsudo systemctl start teamviewerd.service\n"})}),"\n",(0,r.jsx)(s.h2,{id:"office",children:"Office"}),"\n",(0,r.jsx)(s.h3,{id:"mendeley-desktop",children:"Mendeley Desktop"}),"\n",(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-bash",children:"sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/office/mendeleydesktop/pspec.xml\nsudo eopkg it mendeleydesktop*.eopkg;sudo rm mendeleydesktop*.eopkg\n"})}),"\n",(0,r.jsx)(s.h3,{id:"microsoft-core-fonts",children:"Microsoft Core Fonts"}),"\n",(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-bash",children:"sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/desktop/font/mscorefonts/pspec.xml\nsudo eopkg it mscorefonts*.eopkg;sudo rm mscorefonts*.eopkg\n"})}),"\n",(0,r.jsx)(s.h3,{id:"moneydance",children:"Moneydance"}),"\n",(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-bash",children:"sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/office/moneydance/pspec.xml\nsudo eopkg it moneydance*.eopkg;sudo rm moneydance*.eopkg\n"})}),"\n",(0,r.jsx)(s.h3,{id:"pomodoneapp",children:"PomoDoneApp"}),"\n",(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-bash",children:"sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/office/pomodoneapp/pspec.xml\nsudo eopkg it pomodoneapp*.eopkg;sudo rm pomodoneapp*.eopkg\n"})}),"\n",(0,r.jsx)(s.h3,{id:"scrivener",children:"Scrivener"}),"\n",(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-bash",children:"sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/office/scrivener/pspec.xml\nsudo eopkg it scrivener*.eopkg;sudo rm scrivener*.eopkg\n"})}),"\n",(0,r.jsx)(s.h2,{id:"programming",children:"Programming"}),"\n",(0,r.jsx)(s.h3,{id:"android-studio",children:"Android Studio"}),"\n",(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-bash",children:"sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/programming/android-studio/pspec.xml\nsudo eopkg it android-studio*.eopkg;sudo rm android-studio*.eopkg\n"})}),"\n",(0,r.jsx)(s.h3,{id:"clion",children:"CLion"}),"\n",(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-bash",children:"sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/programming/clion/pspec.xml\nsudo eopkg it clion*.eopkg;sudo rm clion*.eopkg\n"})}),"\n",(0,r.jsx)(s.h3,{id:"datagrip",children:"DataGrip"}),"\n",(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-bash",children:"sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/programming/datagrip/pspec.xml\nsudo eopkg it datagrip*.eopkg;sudo rm datagrip*.eopkg\n"})}),"\n",(0,r.jsx)(s.h3,{id:"gitkraken",children:"GitKraken"}),"\n",(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-bash",children:"sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/programming/gitkraken/pspec.xml\nsudo eopkg it gitkraken*.eopkg;sudo rm gitkraken*.eopkg\n"})}),"\n",(0,r.jsx)(s.h3,{id:"idea",children:"IDEA"}),"\n",(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-bash",children:"sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/programming/idea/pspec.xml\nsudo eopkg it idea*.eopkg;sudo rm idea*.eopkg\n"})}),"\n",(0,r.jsx)(s.h3,{id:"phpstorm",children:"PhpStorm"}),"\n",(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-bash",children:"sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/programming/phpstorm/pspec.xml\nsudo eopkg it phpstorm*.eopkg;sudo rm phpstorm*.eopkg\n"})}),"\n",(0,r.jsx)(s.h3,{id:"pycharm",children:"PyCharm"}),"\n",(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-bash",children:"sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/programming/pycharm/pspec.xml\nsudo eopkg it pycharm*.eopkg;sudo rm pycharm*.eopkg\n"})}),"\n",(0,r.jsx)(s.h3,{id:"rider",children:"Rider"}),"\n",(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-bash",children:"sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/programming/rider/pspec.xml\nsudo eopkg it rider*.eopkg;sudo rm rider*.eopkg\n"})}),"\n",(0,r.jsx)(s.h3,{id:"rubymine",children:"RubyMine"}),"\n",(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-bash",children:"sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/programming/rubymine/pspec.xml\nsudo eopkg it rubymine*.eopkg;sudo rm rubymine*.eopkg\n"})}),"\n",(0,r.jsx)(s.h3,{id:"sublime-text",children:"Sublime Text"}),"\n",(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-bash",children:"sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/programming/sublime-text/pspec.xml\nsudo eopkg it sublime*.eopkg;sudo rm sublime*.eopkg\n"})}),"\n",(0,r.jsx)(s.h3,{id:"webstorm",children:"WebStorm"}),"\n",(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-bash",children:"sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/programming/webstorm/pspec.xml\nsudo eopkg it webstorm*.eopkg;sudo rm webstorm*.eopkg\n"})}),"\n",(0,r.jsx)(s.h2,{id:"security",children:"Security"}),"\n",(0,r.jsx)(s.h3,{id:"enpass",children:"Enpass"}),"\n",(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-bash",children:"sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/security/enpass/pspec.xml\nsudo eopkg it enpass*.eopkg;sudo rm enpass*.eopkg\n"})}),"\n",(0,r.jsx)(s.h2,{id:"other",children:"Other"}),"\n",(0,r.jsx)(s.h3,{id:"google-earth",children:"Google Earth"}),"\n",(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-bash",children:"sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/network/web/google-earth/pspec.xml\nsudo eopkg it google-earth*.eopkg;sudo rm google-earth*.eopkg\n"})})]})}function c(e={}){const{wrapper:s}={...(0,n.a)(),...e.components};return s?(0,r.jsx)(s,{...e,children:(0,r.jsx)(p,{...e})}):p(e)}},11151:(e,s,o)=>{o.d(s,{Z:()=>a,a:()=>i});var r=o(67294);const n={},t=r.createContext(n);function i(e){const s=r.useContext(t);return r.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function a(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:i(e.components),r.createElement(t.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/424f562c.6f9228c4.js b/assets/js/424f562c.6f9228c4.js new file mode 100644 index 000000000..dbf3f4500 --- /dev/null +++ b/assets/js/424f562c.6f9228c4.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([["4629"],{96389:function(e,t,n){n.r(t),n.d(t,{assets:function(){return r},contentTitle:function(){return s},default:function(){return p},frontMatter:function(){return i},metadata:function(){return o},toc:function(){return c}});var o=n(56021),l=n(85893),a=n(50065);let i={title:"Intro to Optimizing Packages on Solus",description:"Explore how to employ advanced compiler techniques such as PGO, BOLT & Glibc HWCaps to squeeze extra performance from packages using libwebp as a test vehicle",slug:"solus-optimizing-packages",authors:"joey",tags:["pgo","lto","solus","packaging","optimization",3,"clang","gnu","llvm","glibc","hwcaps","x86_64-v3"],hide_table_of_contents:!1},s=void 0,r={authorsImageUrls:[void 0]},c=[];function u(e){let t={code:"code",p:"p",...(0,a.a)(),...e.components};return(0,l.jsxs)(t.p,{children:["We'll explore how to build packages with advanced compiler techniques in order to squeeze more performance out of the box for packages in Solus. We'll be using the story of how ",(0,l.jsx)(t.code,{children:"libwebp"})," was optimized for and how it led to an unexpected side quest."]})}function p(e={}){let{wrapper:t}={...(0,a.a)(),...e.components};return t?(0,l.jsx)(t,{...e,children:(0,l.jsx)(u,{...e})}):u(e)}},50065:function(e,t,n){n.d(t,{Z:function(){return s},a:function(){return i}});var o=n(67294);let l={},a=o.createContext(l);function i(e){let t=o.useContext(a);return o.useMemo(function(){return"function"==typeof e?e(t):{...t,...e}},[t,e])}function s(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(l):e.components||l:i(e.components),o.createElement(a.Provider,{value:t},e.children)}},56021:function(e){e.exports=JSON.parse('{"permalink":"/blog/solus-optimizing-packages","source":"@site/devlog/2024-02-09-Intro-to-optimizing-packages-on-solus.md","title":"Intro to Optimizing Packages on Solus","description":"Explore how to employ advanced compiler techniques such as PGO, BOLT & Glibc HWCaps to squeeze extra performance from packages using libwebp as a test vehicle","date":"2024-02-09T00:00:00.000Z","tags":[{"inline":true,"label":"pgo","permalink":"/blog/tags/pgo"},{"inline":true,"label":"lto","permalink":"/blog/tags/lto"},{"inline":true,"label":"solus","permalink":"/blog/tags/solus"},{"inline":true,"label":"packaging","permalink":"/blog/tags/packaging"},{"inline":true,"label":"optimization","permalink":"/blog/tags/optimization"},{"inline":true,"label":"3","permalink":"/blog/tags/3"},{"inline":true,"label":"clang","permalink":"/blog/tags/clang"},{"inline":true,"label":"gnu","permalink":"/blog/tags/gnu"},{"inline":true,"label":"llvm","permalink":"/blog/tags/llvm"},{"inline":true,"label":"glibc","permalink":"/blog/tags/glibc"},{"inline":true,"label":"hwcaps","permalink":"/blog/tags/hwcaps"},{"inline":true,"label":"x86_64-v3","permalink":"/blog/tags/x-86-64-v-3"}],"readingTime":22.32,"hasTruncateMarker":true,"authors":[{"name":"Joey Riches","title":"Solus Staff","page":{"permalink":"/blog/authors/joey"},"socials":{"github":"https://github.com/joebonrichie"},"imageURL":"https://avatars.githubusercontent.com/u/5338090","key":"joey"}],"frontMatter":{"title":"Intro to Optimizing Packages on Solus","description":"Explore how to employ advanced compiler techniques such as PGO, BOLT & Glibc HWCaps to squeeze extra performance from packages using libwebp as a test vehicle","slug":"solus-optimizing-packages","authors":"joey","tags":["pgo","lto","solus","packaging","optimization","3","clang","gnu","llvm","glibc","hwcaps","x86_64-v3"],"hide_table_of_contents":false},"unlisted":false,"prevItem":{"title":"Clean, clean, clean!","permalink":"/blog/clean-clean-clean"},"nextItem":{"title":"Don\'t call me MATE, pal!","permalink":"/blog/don\'t-call-me-mate-pal"}}')}}]); \ No newline at end of file diff --git a/assets/js/424f562c.af0382ed.js b/assets/js/424f562c.af0382ed.js deleted file mode 100644 index cdbc99440..000000000 --- a/assets/js/424f562c.af0382ed.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[3122],{15054:(e,t,o)=>{o.r(t),o.d(t,{assets:()=>c,contentTitle:()=>i,default:()=>g,frontMatter:()=>n,metadata:()=>s,toc:()=>p});var l=o(85893),a=o(11151);const n={title:"Intro to Optimizing Packages on Solus",description:"Explore how to employ advanced compiler techniques such as PGO, BOLT & Glibc HWCaps to squeeze extra performance from packages using libwebp as a test vehicle",slug:"solus-optimizing-packages",authors:"joey",tags:["pgo","lto","solus","packaging","optimization",3,"clang","gnu","llvm","glibc","hwcaps","x86_64-v3"],hide_table_of_contents:!1},i=void 0,s={permalink:"/blog/solus-optimizing-packages",source:"@site/devlog/2024-02-09-Intro-to-optimizing-packages-on-solus.md",title:"Intro to Optimizing Packages on Solus",description:"Explore how to employ advanced compiler techniques such as PGO, BOLT & Glibc HWCaps to squeeze extra performance from packages using libwebp as a test vehicle",date:"2024-02-09T00:00:00.000Z",tags:[{inline:!0,label:"pgo",permalink:"/blog/tags/pgo"},{inline:!0,label:"lto",permalink:"/blog/tags/lto"},{inline:!0,label:"solus",permalink:"/blog/tags/solus"},{inline:!0,label:"packaging",permalink:"/blog/tags/packaging"},{inline:!0,label:"optimization",permalink:"/blog/tags/optimization"},{inline:!0,label:"3",permalink:"/blog/tags/3"},{inline:!0,label:"clang",permalink:"/blog/tags/clang"},{inline:!0,label:"gnu",permalink:"/blog/tags/gnu"},{inline:!0,label:"llvm",permalink:"/blog/tags/llvm"},{inline:!0,label:"glibc",permalink:"/blog/tags/glibc"},{inline:!0,label:"hwcaps",permalink:"/blog/tags/hwcaps"},{inline:!0,label:"x86_64-v3",permalink:"/blog/tags/x-86-64-v-3"}],readingTime:22.32,hasTruncateMarker:!0,authors:[{name:"Joey Riches",title:"Solus Staff",page:{permalink:"/blog/authors/joey"},socials:{github:"https://github.com/joebonrichie"},imageURL:"https://avatars.githubusercontent.com/u/5338090",key:"joey"}],frontMatter:{title:"Intro to Optimizing Packages on Solus",description:"Explore how to employ advanced compiler techniques such as PGO, BOLT & Glibc HWCaps to squeeze extra performance from packages using libwebp as a test vehicle",slug:"solus-optimizing-packages",authors:"joey",tags:["pgo","lto","solus","packaging","optimization","3","clang","gnu","llvm","glibc","hwcaps","x86_64-v3"],hide_table_of_contents:!1},unlisted:!1,prevItem:{title:"Clean, clean, clean!",permalink:"/blog/clean-clean-clean"},nextItem:{title:"Don't call me MATE, pal!",permalink:"/blog/don't-call-me-mate-pal"}},c={authorsImageUrls:[void 0]},p=[];function r(e){const t={code:"code",p:"p",...(0,a.a)(),...e.components};return(0,l.jsxs)(t.p,{children:["We'll explore how to build packages with advanced compiler techniques in order to squeeze more performance out of the box for packages in Solus. We'll be using the story of how ",(0,l.jsx)(t.code,{children:"libwebp"})," was optimized for and how it led to an unexpected side quest."]})}function g(e={}){const{wrapper:t}={...(0,a.a)(),...e.components};return t?(0,l.jsx)(t,{...e,children:(0,l.jsx)(r,{...e})}):r(e)}},11151:(e,t,o)=>{o.d(t,{Z:()=>s,a:()=>i});var l=o(67294);const a={},n=l.createContext(a);function i(e){const t=l.useContext(n);return l.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function s(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:i(e.components),l.createElement(n.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/439d6d8d.3bacfc95.js b/assets/js/439d6d8d.3bacfc95.js new file mode 100644 index 000000000..a51fd907c --- /dev/null +++ b/assets/js/439d6d8d.3bacfc95.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([["369"],{52001:function(e){e.exports=JSON.parse('{"tag":{"label":"MATE","permalink":"/blog/tags/mate","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/mate","page":1,"postsPerPage":1,"totalPages":1,"totalCount":1,"blogDescription":"The Solus Development (b)log!","blogTitle":"Solus DevLog"}}')}}]); \ No newline at end of file diff --git a/assets/js/439d6d8d.c4a508f4.js b/assets/js/439d6d8d.c4a508f4.js deleted file mode 100644 index 7a710e71b..000000000 --- a/assets/js/439d6d8d.c4a508f4.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[4374],{4915:e=>{e.exports=JSON.parse('{"tag":{"label":"MATE","permalink":"/blog/tags/mate","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/mate","page":1,"postsPerPage":1,"totalPages":1,"totalCount":1,"blogDescription":"The Solus Development (b)log!","blogTitle":"Solus DevLog"}}')}}]); \ No newline at end of file diff --git a/assets/js/43d43a8f.4eecf98a.js b/assets/js/43d43a8f.4eecf98a.js deleted file mode 100644 index 9c28d6000..000000000 --- a/assets/js/43d43a8f.4eecf98a.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[9156],{5410:e=>{e.exports=JSON.parse('{"categoryGeneratedIndex":{"title":"Localization","slug":"/category/localization","permalink":"/docs/category/localization","sidebar":"userSidebar","navigation":{"previous":{"title":"Gaming","permalink":"/docs/user/software/gaming/"},"next":{"title":"IBus","permalink":"/docs/user/software/localization/ibus"}}}}')}}]); \ No newline at end of file diff --git a/assets/js/43d43a8f.a9272102.js b/assets/js/43d43a8f.a9272102.js new file mode 100644 index 000000000..0d2d9e824 --- /dev/null +++ b/assets/js/43d43a8f.a9272102.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([["735"],{29264:function(e){e.exports=JSON.parse('{"categoryGeneratedIndex":{"title":"Localization","slug":"/category/localization","permalink":"/docs/category/localization","sidebar":"userSidebar","navigation":{"previous":{"title":"Gaming","permalink":"/docs/user/software/gaming/"},"next":{"title":"IBus","permalink":"/docs/user/software/localization/ibus"}}}}')}}]); \ No newline at end of file diff --git a/assets/js/45e9d313.2336280a.js b/assets/js/45e9d313.2336280a.js new file mode 100644 index 000000000..7a6fb0a12 --- /dev/null +++ b/assets/js/45e9d313.2336280a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([["5568"],{96479:function(e,t,a){a.r(t),a.d(t,{metadata:()=>s,contentTitle:()=>r,default:()=>u,assets:()=>l,toc:()=>c,frontMatter:()=>o});var s=JSON.parse('{"id":"packaging/testing-a-package","title":"Testing a Package","description":"After building a package, it must be tested against the unstable repository before a pull request can be submitted. Each pull request requires you to explain how you tested the package to make sure things work as expected.","source":"@site/docs/packaging/testing-a-package.md","sourceDirName":"packaging","slug":"/packaging/testing-a-package","permalink":"/docs/packaging/testing-a-package","draft":false,"unlisted":false,"editUrl":"https://github.com/getsolus/help-center-docs/tree/master/docs/packaging/testing-a-package.md","tags":[],"version":"current","lastUpdatedAt":1733757592000,"sidebarPosition":5,"frontMatter":{"title":"Testing a Package","summary":"Testing a Package","sidebar_position":5},"sidebar":"packagingSidebar","previous":{"title":"Updating an Existing Package","permalink":"/docs/packaging/updating-an-existing-package"},"next":{"title":"Submitting a Pull Request for Review","permalink":"/docs/packaging/submitting-a-pull-request"}}'),n=a("85893"),i=a("50065");let o={title:"Testing a Package",summary:"Testing a Package",sidebar_position:5},r="Testing a Package",l={},c=[{value:"Install the .eopkg files",id:"install-the-eopkg-files",level:2},{value:"For updated packages: Return to the repository version",id:"for-updated-packages-return-to-the-repository-version",level:2},{value:"Remove the .eopkg files",id:"remove-the-eopkg-files",level:2}];function d(e){let t={code:"code",h1:"h1",h2:"h2",header:"header",p:"p",pre:"pre",strong:"strong",...(0,i.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.header,{children:(0,n.jsx)(t.h1,{id:"testing-a-package",children:"Testing a Package"})}),"\n",(0,n.jsx)(t.p,{children:"After building a package, it must be tested against the unstable repository before a pull request can be submitted. Each pull request requires you to explain how you tested the package to make sure things work as expected."}),"\n",(0,n.jsxs)(t.p,{children:["You will use the ",(0,n.jsx)(t.code,{children:".eopkg"})," file(s) created by the build process for testing."]}),"\n",(0,n.jsxs)(t.h2,{id:"install-the-eopkg-files",children:["Install the ",(0,n.jsx)(t.code,{children:".eopkg"})," files"]}),"\n",(0,n.jsxs)(t.p,{children:["To install your new package, run the following command in the directory where you built the package. Include ",(0,n.jsx)(t.strong,{children:"all"})," ",(0,n.jsx)(t.code,{children:".eopkg"})," files that were built."]}),"\n",(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-bash",children:"sudo eopkg it *.eopkg\n"})}),"\n",(0,n.jsx)(t.p,{children:"Testing need not be very complicated. The goal is to ensure the package will reliably work for our users. Testing effort will depend on how complex the software is. At minimum, you want to ensure the application launches, and performs basic functionality as expected."}),"\n",(0,n.jsx)(t.p,{children:"For example, if you were updating a text editor, you would want to make sure you can open, create and save files. If you know of issues the package has had in the past, it's a good idea to test that as well to make sure there are no regressions. There are plenty of historical pull requests to review if you want more detail."}),"\n",(0,n.jsx)(t.h2,{id:"for-updated-packages-return-to-the-repository-version",children:"For updated packages: Return to the repository version"}),"\n",(0,n.jsxs)(t.p,{children:["It is a good idea to uninstall the package you built, and return to the repository version, once you are done testing. To do this, run the following command on the main application. For example, if you just built and tested ",(0,n.jsx)(t.code,{children:"tree"}),":"]}),"\n",(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-bash",children:"sudo eopkg it --reinstall tree\n"})}),"\n",(0,n.jsxs)(t.h2,{id:"remove-the-eopkg-files",children:["Remove the ",(0,n.jsx)(t.code,{children:".eopkg"})," files"]}),"\n",(0,n.jsxs)(t.p,{children:["Before you can submit your pull request, you need to remove the ",(0,n.jsx)(t.code,{children:".eopkg"})," files. All repository packages are built by a dedicated build server from the source files provided in your pull request."]}),"\n",(0,n.jsx)(t.p,{children:"To remove these files, run:"}),"\n",(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-bash",children:"go-task clean\n"})})]})}function u(e={}){let{wrapper:t}={...(0,i.a)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(d,{...e})}):d(e)}},50065:function(e,t,a){a.d(t,{Z:function(){return r},a:function(){return o}});var s=a(67294);let n={},i=s.createContext(n);function o(e){let t=s.useContext(i);return s.useMemo(function(){return"function"==typeof e?e(t):{...t,...e}},[t,e])}function r(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:o(e.components),s.createElement(i.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/45e9d313.a04ba549.js b/assets/js/45e9d313.a04ba549.js deleted file mode 100644 index fead6649d..000000000 --- a/assets/js/45e9d313.a04ba549.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[6114],{47124:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>u,frontMatter:()=>o,metadata:()=>r,toc:()=>c});var s=a(85893),n=a(11151);const o={title:"Testing a Package",summary:"Testing a Package",sidebar_position:5},i="Testing a Package",r={id:"packaging/testing-a-package",title:"Testing a Package",description:"After building a package, it must be tested against the unstable repository before a pull request can be submitted. Each pull request requires you to explain how you tested the package to make sure things work as expected.",source:"@site/docs/packaging/testing-a-package.md",sourceDirName:"packaging",slug:"/packaging/testing-a-package",permalink:"/docs/packaging/testing-a-package",draft:!1,unlisted:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/packaging/testing-a-package.md",tags:[],version:"current",lastUpdatedAt:1732716912e3,sidebarPosition:5,frontMatter:{title:"Testing a Package",summary:"Testing a Package",sidebar_position:5},sidebar:"packagingSidebar",previous:{title:"Updating an Existing Package",permalink:"/docs/packaging/updating-an-existing-package"},next:{title:"Submitting a Pull Request for Review",permalink:"/docs/packaging/submitting-a-pull-request"}},l={},c=[{value:"Install the .eopkg files",id:"install-the-eopkg-files",level:2},{value:"For updated packages: Return to the repository version",id:"for-updated-packages-return-to-the-repository-version",level:2},{value:"Remove the .eopkg files",id:"remove-the-eopkg-files",level:2}];function d(e){const t={code:"code",h1:"h1",h2:"h2",header:"header",p:"p",pre:"pre",strong:"strong",...(0,n.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.header,{children:(0,s.jsx)(t.h1,{id:"testing-a-package",children:"Testing a Package"})}),"\n",(0,s.jsx)(t.p,{children:"After building a package, it must be tested against the unstable repository before a pull request can be submitted. Each pull request requires you to explain how you tested the package to make sure things work as expected."}),"\n",(0,s.jsxs)(t.p,{children:["You will use the ",(0,s.jsx)(t.code,{children:".eopkg"})," file(s) created by the build process for testing."]}),"\n",(0,s.jsxs)(t.h2,{id:"install-the-eopkg-files",children:["Install the ",(0,s.jsx)(t.code,{children:".eopkg"})," files"]}),"\n",(0,s.jsxs)(t.p,{children:["To install your new package, run the following command in the directory where you built the package. Include ",(0,s.jsx)(t.strong,{children:"all"})," ",(0,s.jsx)(t.code,{children:".eopkg"})," files that were built."]}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-bash",children:"sudo eopkg it *.eopkg\n"})}),"\n",(0,s.jsx)(t.p,{children:"Testing need not be very complicated. The goal is to ensure the package will reliably work for our users. Testing effort will depend on how complex the software is. At minimum, you want to ensure the application launches, and performs basic functionality as expected."}),"\n",(0,s.jsx)(t.p,{children:"For example, if you were updating a text editor, you would want to make sure you can open, create and save files. If you know of issues the package has had in the past, it's a good idea to test that as well to make sure there are no regressions. There are plenty of historical pull requests to review if you want more detail."}),"\n",(0,s.jsx)(t.h2,{id:"for-updated-packages-return-to-the-repository-version",children:"For updated packages: Return to the repository version"}),"\n",(0,s.jsxs)(t.p,{children:["It is a good idea to uninstall the package you built, and return to the repository version, once you are done testing. To do this, run the following command on the main application. For example, if you just built and tested ",(0,s.jsx)(t.code,{children:"tree"}),":"]}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-bash",children:"sudo eopkg it --reinstall tree\n"})}),"\n",(0,s.jsxs)(t.h2,{id:"remove-the-eopkg-files",children:["Remove the ",(0,s.jsx)(t.code,{children:".eopkg"})," files"]}),"\n",(0,s.jsxs)(t.p,{children:["Before you can submit your pull request, you need to remove the ",(0,s.jsx)(t.code,{children:".eopkg"})," files. All repository packages are built by a dedicated build server from the source files provided in your pull request."]}),"\n",(0,s.jsx)(t.p,{children:"To remove these files, run:"}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-bash",children:"go-task clean\n"})})]})}function u(e={}){const{wrapper:t}={...(0,n.a)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(d,{...e})}):d(e)}},11151:(e,t,a)=>{a.d(t,{Z:()=>r,a:()=>i});var s=a(67294);const n={},o=s.createContext(n);function i(e){const t=s.useContext(o);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function r(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:i(e.components),s.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/46a65d96.32f1bce3.js b/assets/js/46a65d96.32f1bce3.js deleted file mode 100644 index 012db6205..000000000 --- a/assets/js/46a65d96.32f1bce3.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[8092],{82758:(e,s,r)=>{r.r(s),r.d(s,{assets:()=>i,contentTitle:()=>d,default:()=>h,frontMatter:()=>n,metadata:()=>a,toc:()=>c});var o=r(85893),t=r(11151);const n={title:"Repository Management",summary:"Repository Management"},d="Repository management",a={id:"user/package-management/repo-management",title:"Repository Management",description:"Solus offers two main software sources: stable (shannon) and unstable. The eopkg package manager can use multiple sources on your system, which is helpful if you use a source provided by another vendor.",source:"@site/docs/user/package-management/repo-management.md",sourceDirName:"user/package-management",slug:"/user/package-management/repo-management",permalink:"/docs/user/package-management/repo-management",draft:!1,unlisted:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/package-management/repo-management.md",tags:[],version:"current",lastUpdatedAt:1732716912e3,frontMatter:{title:"Repository Management",summary:"Repository Management"},sidebar:"userSidebar",previous:{title:"History and Software Rollback",permalink:"/docs/user/package-management/history-and-rollback"},next:{title:"Privacy Policy",permalink:"/docs/user/privacy"}},i={},c=[{value:"Official repositories",id:"official-repositories",level:2},{value:"Repository management commands",id:"repository-management-commands",level:2}];function l(e){const s={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",header:"header",p:"p",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,t.a)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(s.header,{children:(0,o.jsx)(s.h1,{id:"repository-management",children:"Repository management"})}),"\n",(0,o.jsxs)(s.p,{children:["Solus offers two main software sources: stable (shannon) and unstable. The ",(0,o.jsx)(s.code,{children:"eopkg"})," package manager can use multiple sources on your system, which is helpful if you use a source provided by another vendor."]}),"\n",(0,o.jsx)(s.h2,{id:"official-repositories",children:"Official repositories"}),"\n",(0,o.jsx)(s.p,{children:"The official Solus repositories are:"}),"\n",(0,o.jsxs)(s.table,{children:[(0,o.jsx)(s.thead,{children:(0,o.jsxs)(s.tr,{children:[(0,o.jsx)(s.th,{children:"Repository"}),(0,o.jsx)(s.th,{children:"URL"}),(0,o.jsx)(s.th,{children:"Notes"})]})}),(0,o.jsxs)(s.tbody,{children:[(0,o.jsxs)(s.tr,{children:[(0,o.jsx)(s.td,{children:"Stable (shannon)"}),(0,o.jsx)(s.td,{children:(0,o.jsx)(s.code,{children:"https://cdn.getsol.us/repo/shannon/eopkg-index.xml.xz"})}),(0,o.jsx)(s.td,{children:"Default software source."})]}),(0,o.jsxs)(s.tr,{children:[(0,o.jsx)(s.td,{children:"Unstable"}),(0,o.jsx)(s.td,{children:(0,o.jsx)(s.code,{children:"https://cdn.getsol.us/repo/unstable/eopkg-index.xml.xz"})}),(0,o.jsx)(s.td,{children:"Only use this source if build Solus packages or you test new software before it moves to the stable source."})]})]})]}),"\n",(0,o.jsxs)(s.admonition,{type:"danger",children:[(0,o.jsxs)(s.p,{children:["Updating your system while using the ",(0,o.jsx)(s.strong,{children:"unstable"})," source might be risky."]}),(0,o.jsxs)(s.p,{children:["Before updating, check the ",(0,o.jsx)(s.a,{href:"https://matrix.to/#/#solus-packaging:matrix.org",children:"#solus-packaging"})," Matrix room."]})]}),"\n",(0,o.jsx)(s.h2,{id:"repository-management-commands",children:"Repository management commands"}),"\n",(0,o.jsxs)(s.p,{children:["The following table lists the ",(0,o.jsx)(s.code,{children:"eopkg"})," commands you can use to manage your software sources."]}),"\n",(0,o.jsxs)(s.table,{children:[(0,o.jsx)(s.thead,{children:(0,o.jsxs)(s.tr,{children:[(0,o.jsx)(s.th,{children:"Action"}),(0,o.jsx)(s.th,{children:"Command"}),(0,o.jsx)(s.th,{children:"Example"})]})}),(0,o.jsxs)(s.tbody,{children:[(0,o.jsxs)(s.tr,{children:[(0,o.jsx)(s.td,{children:"Add a repository"}),(0,o.jsx)(s.td,{children:(0,o.jsx)(s.code,{children:"sudo eopkg add-repo NAME URL"})}),(0,o.jsx)(s.td,{children:(0,o.jsx)(s.code,{children:"sudo eopkg add-repo Example https://example.com/repo/eopkg-index.xml.xz"})})]}),(0,o.jsxs)(s.tr,{children:[(0,o.jsx)(s.td,{children:"Remove a repository"}),(0,o.jsx)(s.td,{children:(0,o.jsx)(s.code,{children:"sudo eopkg remove-repo NAME"})}),(0,o.jsx)(s.td,{children:(0,o.jsx)(s.code,{children:"sudo eopkg remove-repo Example"})})]}),(0,o.jsxs)(s.tr,{children:[(0,o.jsx)(s.td,{children:"Enable a repository"}),(0,o.jsx)(s.td,{children:(0,o.jsx)(s.code,{children:"sudo eopkg enable-repo NAME"})}),(0,o.jsx)(s.td,{children:(0,o.jsx)(s.code,{children:"sudo eopkg enable-repo Example"})})]}),(0,o.jsxs)(s.tr,{children:[(0,o.jsx)(s.td,{children:"Disable a repository"}),(0,o.jsx)(s.td,{children:(0,o.jsx)(s.code,{children:"sudo eopkg disable-repo NAME"})}),(0,o.jsx)(s.td,{children:(0,o.jsx)(s.code,{children:"sudo eopkg disable-repo Example"})})]}),(0,o.jsxs)(s.tr,{children:[(0,o.jsx)(s.td,{children:"Update a repository"}),(0,o.jsx)(s.td,{children:(0,o.jsx)(s.code,{children:"sudo eopkg update-repo NAME"})}),(0,o.jsx)(s.td,{children:(0,o.jsx)(s.code,{children:"sudo eopkg update-repo Example"})})]}),(0,o.jsxs)(s.tr,{children:[(0,o.jsx)(s.td,{children:"Update all repositories"}),(0,o.jsx)(s.td,{children:(0,o.jsx)(s.code,{children:"sudo eopkg update-repo"})}),(0,o.jsx)(s.td,{children:(0,o.jsx)(s.code,{children:"sudo eopkg update-repo"})})]}),(0,o.jsxs)(s.tr,{children:[(0,o.jsx)(s.td,{children:"List repositories added to your system"}),(0,o.jsx)(s.td,{children:(0,o.jsx)(s.code,{children:"eopkg list-repo"})}),(0,o.jsx)(s.td,{children:(0,o.jsx)(s.code,{children:"eopkg list-repo"})})]})]})]})]})}function h(e={}){const{wrapper:s}={...(0,t.a)(),...e.components};return s?(0,o.jsx)(s,{...e,children:(0,o.jsx)(l,{...e})}):l(e)}},11151:(e,s,r)=>{r.d(s,{Z:()=>a,a:()=>d});var o=r(67294);const t={},n=o.createContext(t);function d(e){const s=o.useContext(n);return o.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function a(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:d(e.components),o.createElement(n.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/46a65d96.d66cb6de.js b/assets/js/46a65d96.d66cb6de.js new file mode 100644 index 000000000..7c03c6a9d --- /dev/null +++ b/assets/js/46a65d96.d66cb6de.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([["9906"],{1658:function(e,s,r){r.r(s),r.d(s,{metadata:()=>t,contentTitle:()=>a,default:()=>h,assets:()=>i,toc:()=>c,frontMatter:()=>d});var t=JSON.parse('{"id":"user/package-management/repo-management","title":"Repository Management","description":"Solus offers two main software sources: stable (shannon) and unstable. The eopkg package manager can use multiple sources on your system, which is helpful if you use a source provided by another vendor.","source":"@site/docs/user/package-management/repo-management.md","sourceDirName":"user/package-management","slug":"/user/package-management/repo-management","permalink":"/docs/user/package-management/repo-management","draft":false,"unlisted":false,"editUrl":"https://github.com/getsolus/help-center-docs/tree/master/docs/user/package-management/repo-management.md","tags":[],"version":"current","lastUpdatedAt":1733757592000,"frontMatter":{"title":"Repository Management","summary":"Repository Management"},"sidebar":"userSidebar","previous":{"title":"History and Software Rollback","permalink":"/docs/user/package-management/history-and-rollback"},"next":{"title":"Privacy Policy","permalink":"/docs/user/privacy"}}'),n=r("85893"),o=r("50065");let d={title:"Repository Management",summary:"Repository Management"},a="Repository management",i={},c=[{value:"Official repositories",id:"official-repositories",level:2},{value:"Repository management commands",id:"repository-management-commands",level:2}];function l(e){let s={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",header:"header",p:"p",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,o.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(s.header,{children:(0,n.jsx)(s.h1,{id:"repository-management",children:"Repository management"})}),"\n",(0,n.jsxs)(s.p,{children:["Solus offers two main software sources: stable (shannon) and unstable. The ",(0,n.jsx)(s.code,{children:"eopkg"})," package manager can use multiple sources on your system, which is helpful if you use a source provided by another vendor."]}),"\n",(0,n.jsx)(s.h2,{id:"official-repositories",children:"Official repositories"}),"\n",(0,n.jsx)(s.p,{children:"The official Solus repositories are:"}),"\n",(0,n.jsxs)(s.table,{children:[(0,n.jsx)(s.thead,{children:(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.th,{children:"Repository"}),(0,n.jsx)(s.th,{children:"URL"}),(0,n.jsx)(s.th,{children:"Notes"})]})}),(0,n.jsxs)(s.tbody,{children:[(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"Stable (shannon)"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"https://cdn.getsol.us/repo/shannon/eopkg-index.xml.xz"})}),(0,n.jsx)(s.td,{children:"Default software source."})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"Unstable"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"https://cdn.getsol.us/repo/unstable/eopkg-index.xml.xz"})}),(0,n.jsx)(s.td,{children:"Only use this source if build Solus packages or you test new software before it moves to the stable source."})]})]})]}),"\n",(0,n.jsxs)(s.admonition,{type:"danger",children:[(0,n.jsxs)(s.p,{children:["Updating your system while using the ",(0,n.jsx)(s.strong,{children:"unstable"})," source might be risky."]}),(0,n.jsxs)(s.p,{children:["Before updating, check the ",(0,n.jsx)(s.a,{href:"https://matrix.to/#/#solus-packaging:matrix.org",children:"#solus-packaging"})," Matrix room."]})]}),"\n",(0,n.jsx)(s.h2,{id:"repository-management-commands",children:"Repository management commands"}),"\n",(0,n.jsxs)(s.p,{children:["The following table lists the ",(0,n.jsx)(s.code,{children:"eopkg"})," commands you can use to manage your software sources."]}),"\n",(0,n.jsxs)(s.table,{children:[(0,n.jsx)(s.thead,{children:(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.th,{children:"Action"}),(0,n.jsx)(s.th,{children:"Command"}),(0,n.jsx)(s.th,{children:"Example"})]})}),(0,n.jsxs)(s.tbody,{children:[(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"Add a repository"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"sudo eopkg add-repo NAME URL"})}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"sudo eopkg add-repo Example https://example.com/repo/eopkg-index.xml.xz"})})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"Remove a repository"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"sudo eopkg remove-repo NAME"})}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"sudo eopkg remove-repo Example"})})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"Enable a repository"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"sudo eopkg enable-repo NAME"})}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"sudo eopkg enable-repo Example"})})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"Disable a repository"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"sudo eopkg disable-repo NAME"})}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"sudo eopkg disable-repo Example"})})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"Update a repository"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"sudo eopkg update-repo NAME"})}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"sudo eopkg update-repo Example"})})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"Update all repositories"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"sudo eopkg update-repo"})}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"sudo eopkg update-repo"})})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"List repositories added to your system"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"eopkg list-repo"})}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"eopkg list-repo"})})]})]})]})]})}function h(e={}){let{wrapper:s}={...(0,o.a)(),...e.components};return s?(0,n.jsx)(s,{...e,children:(0,n.jsx)(l,{...e})}):l(e)}},50065:function(e,s,r){r.d(s,{Z:function(){return a},a:function(){return d}});var t=r(67294);let n={},o=t.createContext(n);function d(e){let s=t.useContext(o);return t.useMemo(function(){return"function"==typeof e?e(s):{...s,...e}},[s,e])}function a(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:d(e.components),t.createElement(o.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/47b97f63.a5802b6e.js b/assets/js/47b97f63.a5802b6e.js new file mode 100644 index 000000000..fdb183e92 --- /dev/null +++ b/assets/js/47b97f63.a5802b6e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([["4842"],{40552:function(e){e.exports=JSON.parse('{"categoryGeneratedIndex":{"title":"Compatibility","slug":"/category/compatibility","permalink":"/docs/category/compatibility","sidebar":"userSidebar","navigation":{"previous":{"title":"Hardware","permalink":"/docs/user/hardware/"},"next":{"title":"Laptops","permalink":"/docs/user/hardware/compatibility/laptops"}}}}')}}]); \ No newline at end of file diff --git a/assets/js/47b97f63.dbbcd3f9.js b/assets/js/47b97f63.dbbcd3f9.js deleted file mode 100644 index 3eb259341..000000000 --- a/assets/js/47b97f63.dbbcd3f9.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[834],{54517:e=>{e.exports=JSON.parse('{"categoryGeneratedIndex":{"title":"Compatibility","slug":"/category/compatibility","permalink":"/docs/category/compatibility","sidebar":"userSidebar","navigation":{"previous":{"title":"Hardware","permalink":"/docs/user/hardware/"},"next":{"title":"Laptops","permalink":"/docs/user/hardware/compatibility/laptops"}}}}')}}]); \ No newline at end of file diff --git a/assets/js/4802fa93.68b985c8.js b/assets/js/4802fa93.68b985c8.js deleted file mode 100644 index 4503975c0..000000000 --- a/assets/js/4802fa93.68b985c8.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[1774],{48815:(e,t,o)=>{o.r(t),o.d(t,{assets:()=>r,contentTitle:()=>a,default:()=>c,frontMatter:()=>i,metadata:()=>l,toc:()=>h});var n=o(85893),s=o(11151);const i={title:"Don't call me MATE, pal!",slug:"don't-call-me-mate-pal",authors:"david",tags:["MATE","devlog","solus"],hide_table_of_contents:!1},a=void 0,l={permalink:"/blog/don't-call-me-mate-pal",source:"@site/devlog/2024-01-29-dont-call-me-mate.md",title:"Don't call me MATE, pal!",description:"Back in our 4.4 release post we announced that Solus would stop shipping a MATE ISO, mostly because MATE showed no signs of moving away from X11 and towards wayland. At the beginning of this year, we shipped our new XFCE ISO as a beta. And now we're getting ready to ship the Solus MATE Transition Tool to move existing users off of MATE.",date:"2024-01-29T00:00:00.000Z",tags:[{inline:!0,label:"MATE",permalink:"/blog/tags/mate"},{inline:!0,label:"devlog",permalink:"/blog/tags/devlog"},{inline:!0,label:"solus",permalink:"/blog/tags/solus"}],readingTime:2.645,hasTruncateMarker:!0,authors:[{name:"David Harder",title:"Solus Staff",page:{permalink:"/blog/authors/david"},socials:{github:"https://github.com/davidjharder"},imageURL:"https://avatars.githubusercontent.com/u/23007135",key:"david"}],frontMatter:{title:"Don't call me MATE, pal!",slug:"don't-call-me-mate-pal",authors:"david",tags:["MATE","devlog","solus"],hide_table_of_contents:!1},unlisted:!1,prevItem:{title:"Intro to Optimizing Packages on Solus",permalink:"/blog/solus-optimizing-packages"},nextItem:{title:"eopkg is dead, long live eopkg",permalink:"/blog/eopkg-is-dead-long-live-eopkg"}},r={authorsImageUrls:[void 0]},h=[{value:"The problem",id:"the-problem",level:2},{value:"Introducing the Solus MATE Transition Tool",id:"introducing-the-solus-mate-transition-tool",level:2},{value:"How the Mate Transition Tool is actually part of our Python2 work",id:"how-the-mate-transition-tool-is-actually-part-of-our-python2-work",level:2}];function d(e){const t={a:"a",admonition:"admonition",code:"code",em:"em",h2:"h2",img:"img",li:"li",ol:"ol",p:"p",...(0,s.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)(t.p,{children:["Back in our ",(0,n.jsx)(t.a,{href:"https://getsol.us/2023/07/08/solus-4-4-released/",children:"4.4 release post"})," we announced that Solus would stop shipping a MATE ISO, mostly because MATE showed no signs of moving away from X11 and towards wayland. At the beginning of this year, we shipped our new XFCE ISO as a beta. And now we're getting ready to ship the ",(0,n.jsx)(t.em,{children:"Solus MATE Transition Tool"})," to move existing users off of MATE."]}),"\n",(0,n.jsx)(t.h2,{id:"the-problem",children:"The problem"}),"\n",(0,n.jsxs)(t.p,{children:["MATE and XFCE are similar enough that eager Solusians can, and have, installed XCFE on their MATE machines with nothing more than a couple of ",(0,n.jsx)(t.code,{children:"eopkg"})," commands. We're pretty sure our resident ",(0,n.jsx)(t.code,{children:"bash"})," script enthusiast (ermo) could hammer out a working transition script in an evening. But we want a more polished experience. We know ",(0,n.jsx)(t.em,{children:"you"})," follow Solus news; after all, you're reading this. However, we assume there are users who dutifully update their systems, but have no interest in keeping up with our blog posts. How do we get their attention and prompt them to move away from MATE?"]}),"\n",(0,n.jsx)(t.h2,{id:"introducing-the-solus-mate-transition-tool",children:"Introducing the Solus MATE Transition Tool"}),"\n",(0,n.jsxs)(t.p,{children:["We're pleased to show off the ",(0,n.jsx)(t.em,{children:"MATE Transition Tool"}),", which we plan to include in normal updates to MATE systems in the coming weeks. Most of the work on this tool was done by Joey; more on his efforts in the section below. Here's how MATE users will encounter the tool:"]}),"\n",(0,n.jsx)(t.admonition,{type:"note",children:(0,n.jsx)(t.p,{children:"These screenshots are current as of the publishing of this post, we may change things as we continue testing."})}),"\n",(0,n.jsxs)(t.ol,{children:["\n",(0,n.jsx)(t.li,{children:"Users will get a notification on every start-up informing them that they need to transition away from MATE."}),"\n"]}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.img,{alt:"Notification: Solus Transition Service",src:o(64792).Z+"",width:"812",height:"333"})}),"\n",(0,n.jsxs)(t.ol,{start:"2",children:["\n",(0,n.jsx)(t.li,{children:"Clicking on that notification will launch the Solus MATE Transition Tool."}),"\n"]}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.img,{alt:"MATE Transition Tool Launch",src:o(46311).Z+"",width:"1134",height:"673"})}),"\n",(0,n.jsxs)(t.ol,{start:"3",children:["\n",(0,n.jsx)(t.li,{children:"Users select either Solus Budgie or Solus XFCE. The tool installs the selected edition, removes MATE, and prompts for a reboot"}),"\n",(0,n.jsx)(t.li,{children:"The tool removes itself after a successful transition."}),"\n"]}),"\n",(0,n.jsx)(t.p,{children:"Simple. At least, that's what we want users to think."}),"\n",(0,n.jsx)(t.h2,{id:"how-the-mate-transition-tool-is-actually-part-of-our-python2-work",children:"How the Mate Transition Tool is actually part of our Python2 work"}),"\n",(0,n.jsxs)(t.p,{children:["The story of the MATE Transition Tool is actually tied up in our fight to drag ",(0,n.jsx)(t.code,{children:"eopkg"})," into the current decade. As I wrote previously, we're somewhat embarrassed by the amount of Solus tooling which ",(0,n.jsx)(t.em,{children:"still"})," relies on Python2. One such tool is the Solus Software Center ",(0,n.jsx)(t.code,{children:"solus-sc"}),". A while back, the team decided the sane thing to do was to ditch ",(0,n.jsx)(t.code,{children:"solus-sc"})," in favor of ",(0,n.jsx)(t.em,{children:"KDE Discover"})," and ",(0,n.jsx)(t.em,{children:"GNOME Software"})," . This would have the additional benefit of promoting flatpak applications to first-class citizens. The problem is ",(0,n.jsx)(t.em,{children:"Discover"})," and ",(0,n.jsx)(t.em,{children:"Software"})," have no way to talk to our package manager ",(0,n.jsx)(t.code,{children:"eopkg"}),". We need an API. Luckily, other projects have encountered the same issue, leading to ",(0,n.jsx)(t.a,{href:"https://www.freedesktop.org/software/PackageKit/pk-intro.html",children:(0,n.jsx)(t.code,{children:"packagekit"})}),"."]}),"\n",(0,n.jsxs)(t.p,{children:["Joey has been doing the dirty work of bolting ",(0,n.jsx)(t.code,{children:"packagekit"})," support onto ",(0,n.jsx)(t.code,{children:"eopkg"}),", and saw an opportunity: If ",(0,n.jsx)(t.code,{children:"eopkg"})," could be upgraded to understand some of ",(0,n.jsx)(t.code,{children:"packagekit"}),", then he could write a special-purpose application to move users off MATE without asking them to run scary bash scripts (sorry ermo). We're rather pleased with this solution. MATE users get a simple transition and Solus gets closer to checking ",(0,n.jsx)(t.code,{children:"solus-sc"})," off ",(0,n.jsx)(t.a,{href:"https://github.com/getsolus/packages/issues/270",children:"the list."})]})]})}function c(e={}){const{wrapper:t}={...(0,s.a)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(d,{...e})}):d(e)}},46311:(e,t,o)=>{o.d(t,{Z:()=>n});const n=o.p+"assets/images/MTT-launch-9408fee2f5bfdf5d356638dab8047dd0.png"},64792:(e,t,o)=>{o.d(t,{Z:()=>n});const n=o.p+"assets/images/notification-1be98b16b9621bf36eac8d89defb71e6.png"},11151:(e,t,o)=>{o.d(t,{Z:()=>l,a:()=>a});var n=o(67294);const s={},i=n.createContext(s);function a(e){const t=n.useContext(i);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function l(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:a(e.components),n.createElement(i.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/4802fa93.ee0589fc.js b/assets/js/4802fa93.ee0589fc.js new file mode 100644 index 000000000..dc3d4c425 --- /dev/null +++ b/assets/js/4802fa93.ee0589fc.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([["8397"],{13955:function(e,t,o){o.r(t),o.d(t,{assets:function(){return l},contentTitle:function(){return r},default:function(){return d},frontMatter:function(){return a},metadata:function(){return n},toc:function(){return h}});var n=o(82417),s=o(85893),i=o(50065);let a={title:"Don't call me MATE, pal!",slug:"don't-call-me-mate-pal",authors:"david",tags:["MATE","devlog","solus"],hide_table_of_contents:!1},r=void 0,l={authorsImageUrls:[void 0]},h=[{value:"The problem",id:"the-problem",level:2},{value:"Introducing the Solus MATE Transition Tool",id:"introducing-the-solus-mate-transition-tool",level:2},{value:"How the Mate Transition Tool is actually part of our Python2 work",id:"how-the-mate-transition-tool-is-actually-part-of-our-python2-work",level:2}];function c(e){let t={a:"a",admonition:"admonition",code:"code",em:"em",h2:"h2",img:"img",li:"li",ol:"ol",p:"p",...(0,i.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsxs)(t.p,{children:["Back in our ",(0,s.jsx)(t.a,{href:"https://getsol.us/2023/07/08/solus-4-4-released/",children:"4.4 release post"})," we announced that Solus would stop shipping a MATE ISO, mostly because MATE showed no signs of moving away from X11 and towards wayland. At the beginning of this year, we shipped our new XFCE ISO as a beta. And now we're getting ready to ship the ",(0,s.jsx)(t.em,{children:"Solus MATE Transition Tool"})," to move existing users off of MATE."]}),"\n",(0,s.jsx)(t.h2,{id:"the-problem",children:"The problem"}),"\n",(0,s.jsxs)(t.p,{children:["MATE and XFCE are similar enough that eager Solusians can, and have, installed XCFE on their MATE machines with nothing more than a couple of ",(0,s.jsx)(t.code,{children:"eopkg"})," commands. We're pretty sure our resident ",(0,s.jsx)(t.code,{children:"bash"})," script enthusiast (ermo) could hammer out a working transition script in an evening. But we want a more polished experience. We know ",(0,s.jsx)(t.em,{children:"you"})," follow Solus news; after all, you're reading this. However, we assume there are users who dutifully update their systems, but have no interest in keeping up with our blog posts. How do we get their attention and prompt them to move away from MATE?"]}),"\n",(0,s.jsx)(t.h2,{id:"introducing-the-solus-mate-transition-tool",children:"Introducing the Solus MATE Transition Tool"}),"\n",(0,s.jsxs)(t.p,{children:["We're pleased to show off the ",(0,s.jsx)(t.em,{children:"MATE Transition Tool"}),", which we plan to include in normal updates to MATE systems in the coming weeks. Most of the work on this tool was done by Joey; more on his efforts in the section below. Here's how MATE users will encounter the tool:"]}),"\n",(0,s.jsx)(t.admonition,{type:"note",children:(0,s.jsx)(t.p,{children:"These screenshots are current as of the publishing of this post, we may change things as we continue testing."})}),"\n",(0,s.jsxs)(t.ol,{children:["\n",(0,s.jsx)(t.li,{children:"Users will get a notification on every start-up informing them that they need to transition away from MATE."}),"\n"]}),"\n",(0,s.jsx)(t.p,{children:(0,s.jsx)(t.img,{alt:"Notification: Solus Transition Service",src:o(35922).Z+"",width:"812",height:"333"})}),"\n",(0,s.jsxs)(t.ol,{start:"2",children:["\n",(0,s.jsx)(t.li,{children:"Clicking on that notification will launch the Solus MATE Transition Tool."}),"\n"]}),"\n",(0,s.jsx)(t.p,{children:(0,s.jsx)(t.img,{alt:"MATE Transition Tool Launch",src:o(34898).Z+"",width:"1134",height:"673"})}),"\n",(0,s.jsxs)(t.ol,{start:"3",children:["\n",(0,s.jsx)(t.li,{children:"Users select either Solus Budgie or Solus XFCE. The tool installs the selected edition, removes MATE, and prompts for a reboot"}),"\n",(0,s.jsx)(t.li,{children:"The tool removes itself after a successful transition."}),"\n"]}),"\n",(0,s.jsx)(t.p,{children:"Simple. At least, that's what we want users to think."}),"\n",(0,s.jsx)(t.h2,{id:"how-the-mate-transition-tool-is-actually-part-of-our-python2-work",children:"How the Mate Transition Tool is actually part of our Python2 work"}),"\n",(0,s.jsxs)(t.p,{children:["The story of the MATE Transition Tool is actually tied up in our fight to drag ",(0,s.jsx)(t.code,{children:"eopkg"})," into the current decade. As I wrote previously, we're somewhat embarrassed by the amount of Solus tooling which ",(0,s.jsx)(t.em,{children:"still"})," relies on Python2. One such tool is the Solus Software Center ",(0,s.jsx)(t.code,{children:"solus-sc"}),". A while back, the team decided the sane thing to do was to ditch ",(0,s.jsx)(t.code,{children:"solus-sc"})," in favor of ",(0,s.jsx)(t.em,{children:"KDE Discover"})," and ",(0,s.jsx)(t.em,{children:"GNOME Software"})," . This would have the additional benefit of promoting flatpak applications to first-class citizens. The problem is ",(0,s.jsx)(t.em,{children:"Discover"})," and ",(0,s.jsx)(t.em,{children:"Software"})," have no way to talk to our package manager ",(0,s.jsx)(t.code,{children:"eopkg"}),". We need an API. Luckily, other projects have encountered the same issue, leading to ",(0,s.jsx)(t.a,{href:"https://www.freedesktop.org/software/PackageKit/pk-intro.html",children:(0,s.jsx)(t.code,{children:"packagekit"})}),"."]}),"\n",(0,s.jsxs)(t.p,{children:["Joey has been doing the dirty work of bolting ",(0,s.jsx)(t.code,{children:"packagekit"})," support onto ",(0,s.jsx)(t.code,{children:"eopkg"}),", and saw an opportunity: If ",(0,s.jsx)(t.code,{children:"eopkg"})," could be upgraded to understand some of ",(0,s.jsx)(t.code,{children:"packagekit"}),", then he could write a special-purpose application to move users off MATE without asking them to run scary bash scripts (sorry ermo). We're rather pleased with this solution. MATE users get a simple transition and Solus gets closer to checking ",(0,s.jsx)(t.code,{children:"solus-sc"})," off ",(0,s.jsx)(t.a,{href:"https://github.com/getsolus/packages/issues/270",children:"the list."})]})]})}function d(e={}){let{wrapper:t}={...(0,i.a)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(c,{...e})}):c(e)}},34898:function(e,t,o){o.d(t,{Z:function(){return n}});let n=o.p+"assets/images/MTT-launch-9408fee2f5bfdf5d356638dab8047dd0.png"},35922:function(e,t,o){o.d(t,{Z:function(){return n}});let n=o.p+"assets/images/notification-1be98b16b9621bf36eac8d89defb71e6.png"},50065:function(e,t,o){o.d(t,{Z:function(){return r},a:function(){return a}});var n=o(67294);let s={},i=n.createContext(s);function a(e){let t=n.useContext(i);return n.useMemo(function(){return"function"==typeof e?e(t):{...t,...e}},[t,e])}function r(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:a(e.components),n.createElement(i.Provider,{value:t},e.children)}},82417:function(e){e.exports=JSON.parse('{"permalink":"/blog/don\'t-call-me-mate-pal","source":"@site/devlog/2024-01-29-dont-call-me-mate.md","title":"Don\'t call me MATE, pal!","description":"Back in our 4.4 release post we announced that Solus would stop shipping a MATE ISO, mostly because MATE showed no signs of moving away from X11 and towards wayland. At the beginning of this year, we shipped our new XFCE ISO as a beta. And now we\'re getting ready to ship the Solus MATE Transition Tool to move existing users off of MATE.","date":"2024-01-29T00:00:00.000Z","tags":[{"inline":true,"label":"MATE","permalink":"/blog/tags/mate"},{"inline":true,"label":"devlog","permalink":"/blog/tags/devlog"},{"inline":true,"label":"solus","permalink":"/blog/tags/solus"}],"readingTime":2.645,"hasTruncateMarker":true,"authors":[{"name":"David Harder","title":"Solus Staff","page":{"permalink":"/blog/authors/david"},"socials":{"github":"https://github.com/davidjharder"},"imageURL":"https://avatars.githubusercontent.com/u/23007135","key":"david"}],"frontMatter":{"title":"Don\'t call me MATE, pal!","slug":"don\'t-call-me-mate-pal","authors":"david","tags":["MATE","devlog","solus"],"hide_table_of_contents":false},"unlisted":false,"prevItem":{"title":"Intro to Optimizing Packages on Solus","permalink":"/blog/solus-optimizing-packages"},"nextItem":{"title":"eopkg is dead, long live eopkg","permalink":"/blog/eopkg-is-dead-long-live-eopkg"}}')}}]); \ No newline at end of file diff --git a/assets/js/49b71c16.970cd721.js b/assets/js/49b71c16.970cd721.js new file mode 100644 index 000000000..e1af8ca82 --- /dev/null +++ b/assets/js/49b71c16.970cd721.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([["545"],{2872:function(e,n,i){i.r(n),i.d(n,{metadata:()=>s,contentTitle:()=>l,default:()=>h,assets:()=>d,toc:()=>r,frontMatter:()=>t});var s=JSON.parse('{"id":"packaging/packaging-practices","title":"Packaging Practices","description":"The primary goal of ypkg is ease of maintenance. In order to do so we ensure packages in the binary repository adhere to a strict set of conventions and practices.","source":"@site/docs/packaging/packaging-practices.md","sourceDirName":"packaging","slug":"/packaging/packaging-practices","permalink":"/docs/packaging/packaging-practices","draft":false,"unlisted":false,"editUrl":"https://github.com/getsolus/help-center-docs/tree/master/docs/packaging/packaging-practices.md","tags":[],"version":"current","lastUpdatedAt":1733757592000,"frontMatter":{"title":"Packaging Practices","summary":"Learning the best packaging practices"},"sidebar":"packagingSidebar","previous":{"title":"Package YAML","permalink":"/docs/packaging/package.yml"},"next":{"title":"Procedures","permalink":"/docs/category/procedures"}}'),a=i("85893"),c=i("50065");let t={title:"Packaging Practices",summary:"Learning the best packaging practices"},l="Packaging Practices",d={},r=[{value:"Package naming",id:"package-naming",level:2},{value:"The devel subpackage",id:"the-devel-subpackage",level:3},{value:"The docs subpackage",id:"the-docs-subpackage",level:3},{value:"The 32bit subpackage",id:"the-32bit-subpackage",level:3},{value:"The utils subpackage",id:"the-utils-subpackage",level:3},{value:"Maintenance",id:"maintenance",level:2},{value:"Licenses",id:"licenses",level:2},{value:"Build dependencies",id:"build-dependencies",level:2},{value:"Background",id:"background",level:3},{value:"Finding what package provides a pkgconfig dependency (if any)",id:"finding-what-package-provides-a-pkgconfig-dependency-if-any",level:3},{value:"Using pkgconfig dependencies",id:"using-pkgconfig-dependencies",level:3},{value:"Using explicitly named dependencies",id:"using-explicitly-named-dependencies",level:3},{value:"Runtime dependencies",id:"runtime-dependencies",level:2},{value:"Check dependencies",id:"check-dependencies",level:2},{value:"Example",id:"example",level:3},{value:"Patching / extra files",id:"patching--extra-files",level:2},{value:"Applying a patch",id:"applying-a-patch",level:3},{value:"Handling multiple patches",id:"handling-multiple-patches",level:4},{value:"Installing extra files",id:"installing-extra-files",level:2},{value:"Patterns",id:"patterns",level:2},{value:"Replace / rename",id:"replace--rename",level:2}];function o(e){let n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",header:"header",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,c.a)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(n.header,{children:(0,a.jsx)(n.h1,{id:"packaging-practices",children:"Packaging Practices"})}),"\n",(0,a.jsxs)(n.p,{children:["The primary goal of ",(0,a.jsx)(n.code,{children:"ypkg"})," is ease of maintenance. In order to do so we ensure packages in the binary repository adhere to a strict set of conventions and practices."]}),"\n",(0,a.jsx)(n.p,{children:"The next few sections will detail these."}),"\n",(0,a.jsx)(n.h2,{id:"package-naming",children:"Package naming"}),"\n",(0,a.jsxs)(n.p,{children:["The ",(0,a.jsx)(n.code,{children:"ypkg"})," tool does not allow for custom subpackages or subpackage naming, and will enforce its own policy. This can be eased somewhat through the use of ",(0,a.jsx)(n.code,{children:"patterns"}),", however the available subpackage names are limited."]}),"\n",(0,a.jsxs)(n.p,{children:["We request you use (where possible) the upstream source name for your package. Subpackage names (when generated) are constructed by using the ",(0,a.jsx)(n.code,{children:"name"})," value first, then applying the subpackage name as such:"]}),"\n",(0,a.jsx)(n.p,{children:(0,a.jsx)(n.code,{children:"pkgname-$subpackage"})}),"\n",(0,a.jsxs)(n.p,{children:["Subpackages are fully automatic with ",(0,a.jsx)(n.code,{children:"ypkg"}),", and are created based on file patterns. All subpackages automatically depend on the main package, to ensure correct operation. In the following explanations, ",(0,a.jsx)(n.code,{children:"$lib"})," is used to refer to the host library directory, i.e. ",(0,a.jsx)(n.code,{children:"lib"})," or ",(0,a.jsx)(n.code,{children:"lib64"})," (or ",(0,a.jsx)(n.code,{children:"lib32"})," on ",(0,a.jsx)(n.code,{children:"emul32"})," builds)."]}),"\n",(0,a.jsx)(n.p,{children:"For the libraries / packages of the following programming languages, you should typically use the following template for it."}),"\n",(0,a.jsxs)(n.table,{children:[(0,a.jsx)(n.thead,{children:(0,a.jsxs)(n.tr,{children:[(0,a.jsx)(n.th,{children:"Language"}),(0,a.jsx)(n.th,{children:"Prefix"}),(0,a.jsx)(n.th,{children:"Example"})]})}),(0,a.jsxs)(n.tbody,{children:[(0,a.jsxs)(n.tr,{children:[(0,a.jsx)(n.td,{children:"Haskell"}),(0,a.jsx)(n.td,{children:(0,a.jsx)(n.code,{children:"haskell-"})}),(0,a.jsxs)(n.td,{children:[(0,a.jsx)(n.code,{children:"text-binary"})," would be ",(0,a.jsx)(n.code,{children:"haskell-text-binary"})]})]}),(0,a.jsxs)(n.tr,{children:[(0,a.jsx)(n.td,{children:"Perl"}),(0,a.jsx)(n.td,{children:(0,a.jsx)(n.code,{children:"perl-"})}),(0,a.jsxs)(n.td,{children:[(0,a.jsx)(n.code,{children:"algorithm-diff"})," would be ",(0,a.jsx)(n.code,{children:"perl-algorithm-diff"})]})]}),(0,a.jsxs)(n.tr,{children:[(0,a.jsx)(n.td,{children:"Python"}),(0,a.jsx)(n.td,{children:(0,a.jsx)(n.code,{children:"python-"})}),(0,a.jsxs)(n.td,{children:[(0,a.jsx)(n.code,{children:"wikipedia"})," would be ",(0,a.jsx)(n.code,{children:"python-wikipedia"})," ",(0,a.jsx)(n.strong,{children:"even if only Python3 is enabled"})]})]}),(0,a.jsxs)(n.tr,{children:[(0,a.jsx)(n.td,{children:"Ruby"}),(0,a.jsx)(n.td,{children:(0,a.jsx)(n.code,{children:"ruby-"})}),(0,a.jsxs)(n.td,{children:[(0,a.jsx)(n.code,{children:"gssapi"})," would be ",(0,a.jsx)(n.code,{children:"ruby-gssapi"})]})]})]})]}),"\n",(0,a.jsx)(n.h3,{id:"the-devel-subpackage",children:"The devel subpackage"}),"\n",(0,a.jsxs)(n.p,{children:["This is invariably created for packages that provide libraries and development headers. The following rules will result in files being placed in a ",(0,a.jsx)(n.code,{children:"devel"})," subpackage:"]}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{children:"/usr/include\n/usr/$lib/lib*.so\n/usr/$lib/lib*.a\n/usr/share/man/man3\n/usr/share/pkgconfig\n/usr/$lib/pkgconfig\n/usr/share/cmake\n/usr/share/vala\n"})}),"\n",(0,a.jsxs)(n.p,{children:["Note that for some packages, ",(0,a.jsx)(n.code,{children:"/usr/$lib/lib*.so"})," files are not symlinks. In this instance, the main package will be broken with no library files present. This can quickly be determined by looking at the resulting ",(0,a.jsx)(n.code,{children:"pspec_*.xml"})," file generated after running the build.\nIf this happens, simply override with ",(0,a.jsx)(n.code,{children:"patterns"})," or set ",(0,a.jsx)(n.code,{children:"libsplit"})," to \u201Cno\u201D."]}),"\n",(0,a.jsxs)(n.p,{children:[(0,a.jsx)(n.strong,{children:"A note on static archives"}),": Unless it is absolutely unavoidable, you should disable static libraries within your build. This is usually fixed by adding ",(0,a.jsx)(n.code,{children:"--disable-static"})," to your configure routine. If ",(0,a.jsx)(n.code,{children:"*.a"})," files are shown in your packaging request, it will be questioned, as they can pose a greater security risk if packages link against these static archives."]}),"\n",(0,a.jsx)(n.h3,{id:"the-docs-subpackage",children:"The docs subpackage"}),"\n",(0,a.jsxs)(n.p,{children:["Currently there is only one pattern which is forced into a ",(0,a.jsx)(n.code,{children:"docs"})," subpackage:"]}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{children:"/usr/share/gtk-doc/html\n"})}),"\n",(0,a.jsxs)(n.p,{children:["If required, you can use ",(0,a.jsx)(n.code,{children:"patterns"})," to move other files into the ",(0,a.jsx)(n.code,{children:"docs"})," subpackage, reducing the size of the main package."]}),"\n",(0,a.jsx)(n.h3,{id:"the-32bit-subpackage",children:"The 32bit subpackage"}),"\n",(0,a.jsxs)(n.p,{children:["This subpackage is only generated during an ",(0,a.jsx)(n.code,{children:"emul32"})," build. The following paths will automatically be placed into a ",(0,a.jsx)(n.code,{children:"32bit"})," subpackage"]}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{children:"/usr/lib32/lib*.so\n/usr/lib32/lib*.so.*\n/usr/lib32/lib*.a\n"})}),"\n",(0,a.jsxs)(n.p,{children:["Note the same static archive rules apply to ",(0,a.jsx)(n.code,{children:"32bit"})," packages. These packages aren\u2019t as heavily split as we try to discourage their use, though they must be provided in some instances."]}),"\n",(0,a.jsx)(n.h3,{id:"the-utils-subpackage",children:"The utils subpackage"}),"\n",(0,a.jsxs)(n.p,{children:["This is not an automatic subpackage, you must use ",(0,a.jsx)(n.code,{children:"patterns"})," to utilize it. It is provided for instances that it may not be suitable to have binaries present, i.e. for a library package."]}),"\n",(0,a.jsx)(n.h2,{id:"maintenance",children:"Maintenance"}),"\n",(0,a.jsxs)(n.p,{children:["When submitting a changed ",(0,a.jsx)(n.code,{children:"package.yml"}),", it must be accompanied by its corresponding ",(0,a.jsx)(n.code,{children:"pspec_*.xml"})," file, which was generated at build time. This machine file allows the repository maintainers to evaluate the package condition."]}),"\n",(0,a.jsxs)(n.p,{children:["When providing a new version of a package, or a fix, always ensure you increment the ",(0,a.jsx)(n.code,{children:"release"})," number by 1. This ensures that users of your package are correctly updated to the latest version."]}),"\n",(0,a.jsxs)(n.p,{children:["Never submit a package without having first tested it, and ensuring it builds within ",(0,a.jsx)(n.code,{children:"solbuild"}),", a clean chroot environment."]}),"\n",(0,a.jsx)(n.h2,{id:"licenses",children:"Licenses"}),"\n",(0,a.jsxs)(n.p,{children:["All new packages or updates to packages should abide by the ",(0,a.jsx)(n.a,{href:"https://spdx.org/licenses/",children:"SPDX 3.x"})," definitions, with the following policy:"]}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"-only"})," licenses, such as ",(0,a.jsx)(n.code,{children:"GPL-2.0-only"}),", should ",(0,a.jsx)(n.strong,{children:"only be declared"}),' as such when the upstream explicitly states "only", otherwise it should always be ',(0,a.jsx)(n.code,{children:"-or-later"}),"."]}),"\n"]}),"\n",(0,a.jsx)(n.h2,{id:"build-dependencies",children:"Build dependencies"}),"\n",(0,a.jsxs)(n.admonition,{type:"note",children:[(0,a.jsxs)(n.p,{children:["Build dependencies should be ordered according to the following rules in ",(0,a.jsx)(n.code,{children:"package.yml"}),":"]}),(0,a.jsxs)(n.ol,{children:["\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"pkgconfig"})," dependencies before explicitly named dependencies"]}),"\n",(0,a.jsxs)(n.li,{children:["Each of these two groups in so-called ASCIIbetical order (that is, alphabetical order with all uppercase letters before lowercase letters, and digits/punctuation before letters, ",(0,a.jsx)(n.a,{href:"https://en.wikipedia.org/wiki/ASCII#Character_order",children:"see here"}),")"]}),"\n"]}),(0,a.jsx)(n.p,{children:"Example:"}),(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-yaml",children:"builddeps :\n - pkgconfig(MYGUI)\n - pkgconfig(Qt5Core)\n - pkgconfig(ayatana-appindicator-0.1)\n - pkgconfig(dri)\n - pkgconfig(gtk+-3.0)\n - The-Powder-Toy\n - abcMIDI\n - abcm2ps\n - git\n - python-poetry\n - swig\n"})})]}),"\n",(0,a.jsx)(n.h3,{id:"background",children:"Background"}),"\n",(0,a.jsx)(n.p,{children:"Most software packages that you build will, in one way or another, depend on another software package to provide specific functionality. This is usually achieved by using a library."}),"\n",(0,a.jsx)(n.p,{children:"Any package that is submitted to our repositories is always built in a clean chroot environment. Therefore, any dependencies required to build that package in a reproducible and sane fashion must be listed."}),"\n",(0,a.jsxs)(n.p,{children:["This is achieved by populating the ",(0,a.jsx)(n.code,{children:"builddeps"})," key with a list of build dependencies. We support two kinds of build dependencies: explicitly named, or ",(0,a.jsx)(n.code,{children:"pkgconfig"})," dependencies."]}),"\n",(0,a.jsxs)(n.p,{children:["We prefer the use of ",(0,a.jsx)(n.code,{children:"pkgconfig"})," dependencies. Most modern software will use the ",(0,a.jsx)(n.code,{children:"pkg-config"})," tool (package configuration) to determine which files are required to build the current software. This may include compiler flags, library to link against and where the package headers are located."]}),"\n",(0,a.jsxs)(n.p,{children:["An obvious advantage to supporting ",(0,a.jsx)(n.code,{children:"pkgconfig"})," dependencies is that there is a 1:1 mapping between the name requested by the build and the name used within the ",(0,a.jsx)(n.code,{children:"package.yml"}),". Instead of trying to hunt down the package providing that dependency, you simply list the same name. Any package in the repository will export information about the ",(0,a.jsx)(n.code,{children:".pc"})," files (for ",(0,a.jsx)(n.code,{children:"pkg-config"}),") it contains, enabling you to use those as a build dependency."]}),"\n",(0,a.jsxs)(n.p,{children:["A secondary advantage is that this allows for easily switching or replacing a providing package. When no ",(0,a.jsx)(n.code,{children:"pkgconfig"})," name is available (some packages do not provide these, or it doesn\u2019t make sense for them to), you may use the explicit package name. Always ensure you select the correct package, i.e. the ",(0,a.jsx)(n.code,{children:"-devel"})," subpackage. This provides the necessary symlinks and headers to build packages."]}),"\n",(0,a.jsx)(n.h3,{id:"finding-what-package-provides-a-pkgconfig-dependency-if-any",children:"Finding what package provides a pkgconfig dependency (if any)"}),"\n",(0,a.jsxs)(n.p,{children:["You can use ",(0,a.jsx)(n.code,{children:"go-task"})," to find packages that satisfy ",(0,a.jsx)(n.code,{children:"pkgconfig"})," dependencies. It can search for multiple dependencies at once."]}),"\n",(0,a.jsxs)(n.p,{children:["As an example, if you know a package has the build dependencies ",(0,a.jsx)(n.code,{children:"Qt5Core"})," and ",(0,a.jsx)(n.code,{children:"Qt6Core"}),", you would run:"]}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"go-task pkgconfig -- Qt5Core Qt6Core\n"})}),"\n",(0,a.jsx)(n.p,{children:"This will output:"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"pkgconfig(Qt5Core) found in: qt5-base-devel\npkgconfig(Qt6Core) found in: qt6-base-devel\n"})}),"\n",(0,a.jsxs)(n.p,{children:["You can also determine if there are ",(0,a.jsx)(n.code,{children:"pkgconfigs"})," available from a ",(0,a.jsx)(n.code,{children:"-devel"})," package by doing ",(0,a.jsx)(n.code,{children:"eopkg info (name)"})," and looking for the ",(0,a.jsx)(n.code,{children:"Provides"})," key."]}),"\n",(0,a.jsx)(n.p,{children:"Example:"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"eopkg info libgtk-3-devel\n"})}),"\n",(0,a.jsx)(n.p,{children:"In output:"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"Provides: pkgconfig(gtk+-3.0) pkgconfig(gdk-3.0) pkgconfig(gdk-wayland-3.0) pkgconfig(gail-3.0) pkgconfig(gdk-x11-3.0) pkgconfig(gtk+-unix-print-3.0)\npkgconfig(gtk+-wayland-3.0) pkgconfig(gtk+-x11-3.0)\n"})}),"\n",(0,a.jsx)(n.h3,{id:"using-pkgconfig-dependencies",children:"Using pkgconfig dependencies"}),"\n",(0,a.jsxs)(n.p,{children:["In the ",(0,a.jsx)(n.code,{children:"builddeps"})," list, use the ",(0,a.jsx)(n.code,{children:"pkgconfig(name)"})," syntax. For example, to add ",(0,a.jsx)(n.code,{children:"gtk+-3.0"})," to the build dependencies, you would do the following:"]}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-yaml",children:"builddeps:\n - pkgconfig(gtk+-3.0)\n"})}),"\n",(0,a.jsxs)(n.p,{children:["At build time the appropriate provider package is selected, in this instance ",(0,a.jsx)(n.code,{children:"libgtk-3-devel"})]}),"\n",(0,a.jsx)(n.h3,{id:"using-explicitly-named-dependencies",children:"Using explicitly named dependencies"}),"\n",(0,a.jsxs)(n.p,{children:["When there is not a ",(0,a.jsx)(n.code,{children:"pkgconfig"})," dependency available, use an explicitly named dependency.\nSimply list the package name."]}),"\n",(0,a.jsx)(n.admonition,{type:"note",children:(0,a.jsxs)(n.p,{children:["When a ",(0,a.jsx)(n.code,{children:"pkgconfig"})," dependency is available you will be asked to use that instead."]})}),"\n",(0,a.jsx)(n.p,{children:"Example:"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-yaml",children:"builddeps:\n - stk-devel\n"})}),"\n",(0,a.jsx)(n.h2,{id:"runtime-dependencies",children:"Runtime dependencies"}),"\n",(0,a.jsxs)(n.p,{children:["Runtime dependencies are extra packages that a package needs in order to function correctly. A common example of this is other libraries. Solus ",(0,a.jsx)(n.code,{children:"eopkg"})," packages will automatically add any binary dependencies at runtime, so that you do not have to."]}),"\n",(0,a.jsxs)(n.p,{children:["All ",(0,a.jsx)(n.code,{children:"devel"})," subpackages automatically depend on their parent package. On top of this, if they provide a ",(0,a.jsx)(n.code,{children:".pc"})," pkg-config file, we export this information, and automatically determine the packages this particular package would need to be able to build against correctly. As such, the majority of dependencies for builds are automatically resolved."]}),"\n",(0,a.jsx)(n.p,{children:"In certain instances, binary dependencies aren\u2019t enough. An example of this might be an extra Python package, or a font, something that is not accounted for by binary checks."}),"\n",(0,a.jsxs)(n.p,{children:["To account for this, you may add extra explicit runtime dependencies to your package. These are taken from the optional ",(0,a.jsx)(n.code,{children:"rundeps"})," ypkg key."]}),"\n",(0,a.jsxs)(n.p,{children:["This key uses the ",(0,a.jsx)(n.code,{children:"dict(s)"})," type, and the default key is the current package ",(0,a.jsx)(n.code,{children:"name"}),". You may express a different subpackage to apply dependencies to by using that name as a key, i.e. ",(0,a.jsx)(n.code,{children:"devel"}),", or ",(0,a.jsx)(n.code,{children:"docs"}),"."]}),"\n",(0,a.jsx)(n.p,{children:"This would add the \u201Cpython-gobject\u201D runtime dependency to the main package:"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-yaml",children:"rundeps:\n - python-gobject\n"})}),"\n",(0,a.jsxs)(n.p,{children:["This would add the same dependency, as well as adding it to the ",(0,a.jsx)(n.code,{children:"devel"})," subpackage:"]}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-yaml",children:"rundeps:\n - python-gobject\n - devel: python-gobject\n"})}),"\n",(0,a.jsxs)(n.p,{children:["Remember this uses the ",(0,a.jsx)(n.code,{children:"dict(s)"})," type, which is very flexible. You can equally express this as follows (adding more deps as an example):"]}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-yaml",children:"rundeps:\n - python-gobject\n - devel:\n - somepackage\n - someotherpackage\n"})}),"\n",(0,a.jsx)(n.h2,{id:"check-dependencies",children:"Check dependencies"}),"\n",(0,a.jsxs)(n.p,{children:["Check dependencies are a special kind of build dependency reserved for automatic package testing by ",(0,a.jsx)(n.code,{children:"solbuild"}),". Check dependencies should only be used during the ",(0,a.jsx)(n.code,{children:"check"})," build phase.\nWhen a package is part of an automatic build sequence, these dependencies will ",(0,a.jsx)(n.strong,{children:"not"})," be considered when determining build order."]}),"\n",(0,a.jsx)(n.h3,{id:"example",children:"Example"}),"\n",(0,a.jsxs)(n.p,{children:["The package ",(0,a.jsx)(n.code,{children:"cbindgen"})," includes ",(0,a.jsx)(n.code,{children:"cython"})," in ",(0,a.jsx)(n.code,{children:"checkdeps"})," to run tests in the ",(0,a.jsx)(n.code,{children:"check"})," phase."]}),"\n",(0,a.jsx)(n.p,{children:(0,a.jsx)(n.a,{href:"https://github.com/getsolus/packages/blob/main/packages/c/cbindgen/package.yml",children:"cbindgen package.yml file"})}),"\n",(0,a.jsx)(n.h2,{id:"patching--extra-files",children:"Patching / extra files"}),"\n",(0,a.jsxs)(n.p,{children:["Files that may be required during the build can be accessed via the ",(0,a.jsx)(n.code,{children:"$pkgfiles"})," variable. Note that you must store your files in the ",(0,a.jsx)(n.code,{children:"./files"})," directory relative to your ",(0,a.jsx)(n.code,{children:"package.yml"})]}),"\n",(0,a.jsxs)(n.p,{children:["Both patches and extra files (such as systemd units) are stored in this directory. Note that if your patch is to address a ",(0,a.jsx)(n.strong,{children:"CVE"}),", you must use the following naming scheme: ",(0,a.jsx)(n.code,{children:"./files/security/cve-xxxx-xxxx.patch"})]}),"\n",(0,a.jsxs)(n.p,{children:["Where ",(0,a.jsx)(n.code,{children:"xxxx-xxxx"})," is replaced with the full CVE ID. Complying with this simple rule ensures that we can know at any time the security status of packages when using tools such as ",(0,a.jsx)(n.code,{children:"cve-check-tool"}),"\nkept\nSolus tooling allows the use of ",(0,a.jsx)(n.code,{children:"./files/security/cve-xxxx-xxxx.nopatch"})," (which isn't applied in the build) to indicate that a CVE has been validated as not applicable to the Solus package. This can be because another patch resolves this CVE, or there is a false positive via ",(0,a.jsx)(n.code,{children:"cve-check-tool"}),". The contents of the file can describe why it doesn't apply without requiring a patch (i.e. Resolved by cve-xxxx-xxxx.patch)."]}),"\n",(0,a.jsx)(n.h3,{id:"applying-a-patch",children:"Applying a patch"}),"\n",(0,a.jsxs)(n.p,{children:["It is common practice to apply the patch file(s) within the ",(0,a.jsx)(n.code,{children:"setup"})," section of your build staging. We can achieve this using the ",(0,a.jsx)(n.code,{children:"%patch"})," macro, and the ",(0,a.jsx)(n.code,{children:"$pkgfiles"})," variable. In this example, the required file is located at ",(0,a.jsx)(n.code,{children:"./files/0002-Sample-commit-2.patch"})]}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"%patch -p1 -i $pkgfiles/0002-Sample-commit-2.patch\n"})}),"\n",(0,a.jsxs)(n.p,{children:["Note you use the macro as you would normally use the ",(0,a.jsx)(n.code,{children:"patch"})," command, however use of the macro ensures it performs a clean batch-mode patch."]}),"\n",(0,a.jsxs)(n.p,{children:["If you are using compressed patches, i.e. for the ",(0,a.jsx)(n.code,{children:"bash"})," or ",(0,a.jsx)(n.code,{children:"readline"})," packages, you can pipe the call through ",(0,a.jsx)(n.code,{children:"zcat"})," or similar:"]}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"zcat $pkgfiles/bash43-032.gz | %patch -p0\n"})}),"\n",(0,a.jsx)(n.h4,{id:"handling-multiple-patches",children:"Handling multiple patches"}),"\n",(0,a.jsxs)(n.p,{children:["In the event you need to apply multiple patches, such as a multitude of CVE patches, it may be sensible to use our ",(0,a.jsx)(n.code,{children:"%apply_patches"})," macro, which will apply all the patches listed in a ",(0,a.jsx)(n.code,{children:"series"})," file in your package's ",(0,a.jsx)(n.code,{children:"./files"})," folder. Example below:"]}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"security/cve-xxxx-xxxx.patch\nfix-silliness.patch\n"})}),"\n",(0,a.jsxs)(n.p,{children:["Both of the files above will be applied using stripping number ",(0,a.jsx)(n.code,{children:"-p1"}),". If you need to use a different stripping number, like ",(0,a.jsx)(n.code,{children:"-p4"}),", you can write:"]}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"security/cve-xxxx-xxxx.patch -p4\nfix-silliness.patch\n"})}),"\n",(0,a.jsx)(n.h2,{id:"installing-extra-files",children:"Installing extra files"}),"\n",(0,a.jsxs)(n.p,{children:["We recommend using patches where possible first, as they ensure correct maintenance and will be updated across package versions. If you must install extra files into the directory, please use the ",(0,a.jsx)(n.code,{children:"install"})," command, ensuring you set the correct permissions. Again, files are accessible from the ",(0,a.jsx)(n.code,{children:"./files"})," directory, relative to ",(0,a.jsx)(n.code,{children:"package.yml"}),"."]}),"\n",(0,a.jsxs)(n.p,{children:["This is an example of installing a custom profile file, seen in the ",(0,a.jsx)(n.code,{children:"bash"})," package:"]}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"install -m 0644 $pkgfiles/profile $installdir/etc/profile\n"})}),"\n",(0,a.jsx)(n.h2,{id:"patterns",children:"Patterns"}),"\n",(0,a.jsxs)(n.p,{children:["In most instances, ",(0,a.jsx)(n.code,{children:"ypkg"})," will assign the correct location for files, whether it be in the main ",(0,a.jsx)(n.code,{children:"name"})," package, or a subpackage. However there may be instances where the default does not match the intended behaviour."]}),"\n",(0,a.jsx)(n.p,{children:"In these instances it is possible to override the default assignment by way of patterns. These are simply a list of paths or globs to ensure a particular file, or set of files, end up in the desired location."}),"\n",(0,a.jsxs)(n.p,{children:["The ",(0,a.jsx)(n.code,{children:"patterns"})," key expects a ",(0,a.jsx)(n.code,{children:"dict(s)"})," argument. The default key for each pattern is assumed to be the ",(0,a.jsx)(n.code,{children:"name"})," of the package, so omitting the name would place files into the main package. The value should be a path or pattern you wish to match, ensuring files go to a specific location."]}),"\n",(0,a.jsxs)(n.p,{children:["In this example from ",(0,a.jsx)(n.code,{children:"libjpeg-turbo"}),", we move all documentation into the ",(0,a.jsx)(n.code,{children:"docs"})," subpackage:"]}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{children:"patterns:\n - docs: [/usr/share/man]\n"})}),"\n",(0,a.jsxs)(n.p,{children:["This example, taken from the ",(0,a.jsx)(n.code,{children:"wayland"})," package, ensures the binaries from ",(0,a.jsx)(n.code,{children:"/usr/bin"})," and the directory ",(0,a.jsx)(n.code,{children:"/usr/share/wayland"})," are located in the ",(0,a.jsx)(n.code,{children:"devel"})," subpackage:"]}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{children:"patterns:\n - devel:\n - /usr/bin\n - /usr/share/wayland\n"})}),"\n",(0,a.jsx)(n.h2,{id:"replace--rename",children:"Replace / rename"}),"\n",(0,a.jsxs)(n.p,{children:["In some situations, it may be required to replace one package with another, or to rename an existing package. In these instances you should coordinate with a repository maintainer to ensure the replaced package is marked ",(0,a.jsx)(n.strong,{children:"Obsolete"})," within the index. This will ensure correct upgrade paths for users."]}),"\n",(0,a.jsxs)(n.p,{children:["Note that to retire a package, you must also coordinate with a repository maintainer. An ",(0,a.jsx)(n.strong,{children:"Obsolete"})," package is removed by the package manager when the user upgrades. As such, correct upgrade paths need to be established."]}),"\n",(0,a.jsxs)(n.p,{children:["The ",(0,a.jsx)(n.code,{children:"replaces"})," ypkg key uses the ",(0,a.jsx)(n.code,{children:"dict(s)"})," type, and the default key is assumed to be the current package ",(0,a.jsx)(n.code,{children:"name"}),"."]}),"\n",(0,a.jsxs)(n.p,{children:["In this example, we rename the ",(0,a.jsx)(n.code,{children:"libgeoclue*"})," packages to use the correct names, and ensure a working upgrade path."]}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{children:"replaces:\n - devel: libgeoclue-devel\n - libgeoclue\n"})}),"\n",(0,a.jsxs)(n.p,{children:["The ",(0,a.jsx)(n.code,{children:"name"})," of this package is ",(0,a.jsx)(n.code,{children:"geoclue"}),", and the new package names are now:"]}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsx)(n.li,{children:(0,a.jsx)(n.code,{children:"geoclue"})}),"\n",(0,a.jsx)(n.li,{children:(0,a.jsx)(n.code,{children:"geoclue-devel"})}),"\n"]}),"\n",(0,a.jsxs)(n.p,{children:["Given the ",(0,a.jsx)(n.code,{children:"replaces"})," values above, ",(0,a.jsx)(n.code,{children:"geoclue"})," now replaces ",(0,a.jsx)(n.code,{children:"libgeoclue"}),", and ",(0,a.jsx)(n.code,{children:"geoclue-devel"})," replaces ",(0,a.jsx)(n.code,{children:"libgeoclue-devel"}),". This is entirely transparent to the user, with a seamless update replacing the old packages with the new renamed packages."]}),"\n",(0,a.jsxs)(n.p,{children:["The repository maintainer marked the old names as ",(0,a.jsx)(n.strong,{children:"Obsolete"})," in the index."]})]})}function h(e={}){let{wrapper:n}={...(0,c.a)(),...e.components};return n?(0,a.jsx)(n,{...e,children:(0,a.jsx)(o,{...e})}):o(e)}},50065:function(e,n,i){i.d(n,{Z:function(){return l},a:function(){return t}});var s=i(67294);let a={},c=s.createContext(a);function t(e){let n=s.useContext(c);return s.useMemo(function(){return"function"==typeof e?e(n):{...n,...e}},[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:t(e.components),s.createElement(c.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/49b71c16.eabd15cf.js b/assets/js/49b71c16.eabd15cf.js deleted file mode 100644 index 5a1c46c15..000000000 --- a/assets/js/49b71c16.eabd15cf.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[3783],{99937:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>l,contentTitle:()=>t,default:()=>h,frontMatter:()=>c,metadata:()=>d,toc:()=>r});var s=i(85893),a=i(11151);const c={title:"Packaging Practices",summary:"Learning the best packaging practices"},t="Packaging Practices",d={id:"packaging/packaging-practices",title:"Packaging Practices",description:"The primary goal of ypkg is ease of maintenance. In order to do so we ensure packages in the binary repository adhere to a strict set of conventions and practices.",source:"@site/docs/packaging/packaging-practices.md",sourceDirName:"packaging",slug:"/packaging/packaging-practices",permalink:"/docs/packaging/packaging-practices",draft:!1,unlisted:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/packaging/packaging-practices.md",tags:[],version:"current",lastUpdatedAt:1732716912e3,frontMatter:{title:"Packaging Practices",summary:"Learning the best packaging practices"},sidebar:"packagingSidebar",previous:{title:"Package YAML",permalink:"/docs/packaging/package.yml"},next:{title:"Procedures",permalink:"/docs/category/procedures"}},l={},r=[{value:"Package naming",id:"package-naming",level:2},{value:"The devel subpackage",id:"the-devel-subpackage",level:3},{value:"The docs subpackage",id:"the-docs-subpackage",level:3},{value:"The 32bit subpackage",id:"the-32bit-subpackage",level:3},{value:"The utils subpackage",id:"the-utils-subpackage",level:3},{value:"Maintenance",id:"maintenance",level:2},{value:"Licenses",id:"licenses",level:2},{value:"Build dependencies",id:"build-dependencies",level:2},{value:"Background",id:"background",level:3},{value:"Finding what package provides a pkgconfig dependency (if any)",id:"finding-what-package-provides-a-pkgconfig-dependency-if-any",level:3},{value:"Using pkgconfig dependencies",id:"using-pkgconfig-dependencies",level:3},{value:"Using explicitly named dependencies",id:"using-explicitly-named-dependencies",level:3},{value:"Runtime dependencies",id:"runtime-dependencies",level:2},{value:"Check dependencies",id:"check-dependencies",level:2},{value:"Example",id:"example",level:3},{value:"Patching / extra files",id:"patching--extra-files",level:2},{value:"Applying a patch",id:"applying-a-patch",level:3},{value:"Handling multiple patches",id:"handling-multiple-patches",level:4},{value:"Installing extra files",id:"installing-extra-files",level:2},{value:"Patterns",id:"patterns",level:2},{value:"Replace / rename",id:"replace--rename",level:2}];function o(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",header:"header",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,a.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.header,{children:(0,s.jsx)(n.h1,{id:"packaging-practices",children:"Packaging Practices"})}),"\n",(0,s.jsxs)(n.p,{children:["The primary goal of ",(0,s.jsx)(n.code,{children:"ypkg"})," is ease of maintenance. In order to do so we ensure packages in the binary repository adhere to a strict set of conventions and practices."]}),"\n",(0,s.jsx)(n.p,{children:"The next few sections will detail these."}),"\n",(0,s.jsx)(n.h2,{id:"package-naming",children:"Package naming"}),"\n",(0,s.jsxs)(n.p,{children:["The ",(0,s.jsx)(n.code,{children:"ypkg"})," tool does not allow for custom subpackages or subpackage naming, and will enforce its own policy. This can be eased somewhat through the use of ",(0,s.jsx)(n.code,{children:"patterns"}),", however the available subpackage names are limited."]}),"\n",(0,s.jsxs)(n.p,{children:["We request you use (where possible) the upstream source name for your package. Subpackage names (when generated) are constructed by using the ",(0,s.jsx)(n.code,{children:"name"})," value first, then applying the subpackage name as such:"]}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.code,{children:"pkgname-$subpackage"})}),"\n",(0,s.jsxs)(n.p,{children:["Subpackages are fully automatic with ",(0,s.jsx)(n.code,{children:"ypkg"}),", and are created based on file patterns. All subpackages automatically depend on the main package, to ensure correct operation. In the following explanations, ",(0,s.jsx)(n.code,{children:"$lib"})," is used to refer to the host library directory, i.e. ",(0,s.jsx)(n.code,{children:"lib"})," or ",(0,s.jsx)(n.code,{children:"lib64"})," (or ",(0,s.jsx)(n.code,{children:"lib32"})," on ",(0,s.jsx)(n.code,{children:"emul32"})," builds)."]}),"\n",(0,s.jsx)(n.p,{children:"For the libraries / packages of the following programming languages, you should typically use the following template for it."}),"\n",(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{children:"Language"}),(0,s.jsx)(n.th,{children:"Prefix"}),(0,s.jsx)(n.th,{children:"Example"})]})}),(0,s.jsxs)(n.tbody,{children:[(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Haskell"}),(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"haskell-"})}),(0,s.jsxs)(n.td,{children:[(0,s.jsx)(n.code,{children:"text-binary"})," would be ",(0,s.jsx)(n.code,{children:"haskell-text-binary"})]})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Perl"}),(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"perl-"})}),(0,s.jsxs)(n.td,{children:[(0,s.jsx)(n.code,{children:"algorithm-diff"})," would be ",(0,s.jsx)(n.code,{children:"perl-algorithm-diff"})]})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Python"}),(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"python-"})}),(0,s.jsxs)(n.td,{children:[(0,s.jsx)(n.code,{children:"wikipedia"})," would be ",(0,s.jsx)(n.code,{children:"python-wikipedia"})," ",(0,s.jsx)(n.strong,{children:"even if only Python3 is enabled"})]})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Ruby"}),(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"ruby-"})}),(0,s.jsxs)(n.td,{children:[(0,s.jsx)(n.code,{children:"gssapi"})," would be ",(0,s.jsx)(n.code,{children:"ruby-gssapi"})]})]})]})]}),"\n",(0,s.jsx)(n.h3,{id:"the-devel-subpackage",children:"The devel subpackage"}),"\n",(0,s.jsxs)(n.p,{children:["This is invariably created for packages that provide libraries and development headers. The following rules will result in files being placed in a ",(0,s.jsx)(n.code,{children:"devel"})," subpackage:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{children:"/usr/include\n/usr/$lib/lib*.so\n/usr/$lib/lib*.a\n/usr/share/man/man3\n/usr/share/pkgconfig\n/usr/$lib/pkgconfig\n/usr/share/cmake\n/usr/share/vala\n"})}),"\n",(0,s.jsxs)(n.p,{children:["Note that for some packages, ",(0,s.jsx)(n.code,{children:"/usr/$lib/lib*.so"})," files are not symlinks. In this instance, the main package will be broken with no library files present. This can quickly be determined by looking at the resulting ",(0,s.jsx)(n.code,{children:"pspec_*.xml"})," file generated after running the build.\nIf this happens, simply override with ",(0,s.jsx)(n.code,{children:"patterns"})," or set ",(0,s.jsx)(n.code,{children:"libsplit"})," to \u201cno\u201d."]}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"A note on static archives"}),": Unless it is absolutely unavoidable, you should disable static libraries within your build. This is usually fixed by adding ",(0,s.jsx)(n.code,{children:"--disable-static"})," to your configure routine. If ",(0,s.jsx)(n.code,{children:"*.a"})," files are shown in your packaging request, it will be questioned, as they can pose a greater security risk if packages link against these static archives."]}),"\n",(0,s.jsx)(n.h3,{id:"the-docs-subpackage",children:"The docs subpackage"}),"\n",(0,s.jsxs)(n.p,{children:["Currently there is only one pattern which is forced into a ",(0,s.jsx)(n.code,{children:"docs"})," subpackage:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{children:"/usr/share/gtk-doc/html\n"})}),"\n",(0,s.jsxs)(n.p,{children:["If required, you can use ",(0,s.jsx)(n.code,{children:"patterns"})," to move other files into the ",(0,s.jsx)(n.code,{children:"docs"})," subpackage, reducing the size of the main package."]}),"\n",(0,s.jsx)(n.h3,{id:"the-32bit-subpackage",children:"The 32bit subpackage"}),"\n",(0,s.jsxs)(n.p,{children:["This subpackage is only generated during an ",(0,s.jsx)(n.code,{children:"emul32"})," build. The following paths will automatically be placed into a ",(0,s.jsx)(n.code,{children:"32bit"})," subpackage"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{children:"/usr/lib32/lib*.so\n/usr/lib32/lib*.so.*\n/usr/lib32/lib*.a\n"})}),"\n",(0,s.jsxs)(n.p,{children:["Note the same static archive rules apply to ",(0,s.jsx)(n.code,{children:"32bit"})," packages. These packages aren\u2019t as heavily split as we try to discourage their use, though they must be provided in some instances."]}),"\n",(0,s.jsx)(n.h3,{id:"the-utils-subpackage",children:"The utils subpackage"}),"\n",(0,s.jsxs)(n.p,{children:["This is not an automatic subpackage, you must use ",(0,s.jsx)(n.code,{children:"patterns"})," to utilize it. It is provided for instances that it may not be suitable to have binaries present, i.e. for a library package."]}),"\n",(0,s.jsx)(n.h2,{id:"maintenance",children:"Maintenance"}),"\n",(0,s.jsxs)(n.p,{children:["When submitting a changed ",(0,s.jsx)(n.code,{children:"package.yml"}),", it must be accompanied by its corresponding ",(0,s.jsx)(n.code,{children:"pspec_*.xml"})," file, which was generated at build time. This machine file allows the repository maintainers to evaluate the package condition."]}),"\n",(0,s.jsxs)(n.p,{children:["When providing a new version of a package, or a fix, always ensure you increment the ",(0,s.jsx)(n.code,{children:"release"})," number by 1. This ensures that users of your package are correctly updated to the latest version."]}),"\n",(0,s.jsxs)(n.p,{children:["Never submit a package without having first tested it, and ensuring it builds within ",(0,s.jsx)(n.code,{children:"solbuild"}),", a clean chroot environment."]}),"\n",(0,s.jsx)(n.h2,{id:"licenses",children:"Licenses"}),"\n",(0,s.jsxs)(n.p,{children:["All new packages or updates to packages should abide by the ",(0,s.jsx)(n.a,{href:"https://spdx.org/licenses/",children:"SPDX 3.x"})," definitions, with the following policy:"]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"-only"})," licenses, such as ",(0,s.jsx)(n.code,{children:"GPL-2.0-only"}),", should ",(0,s.jsx)(n.strong,{children:"only be declared"}),' as such when the upstream explicitly states "only", otherwise it should always be ',(0,s.jsx)(n.code,{children:"-or-later"}),"."]}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"build-dependencies",children:"Build dependencies"}),"\n",(0,s.jsxs)(n.admonition,{type:"note",children:[(0,s.jsxs)(n.p,{children:["Build dependencies should be ordered according to the following rules in ",(0,s.jsx)(n.code,{children:"package.yml"}),":"]}),(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"pkgconfig"})," dependencies before explicitly named dependencies"]}),"\n",(0,s.jsxs)(n.li,{children:["Each of these two groups in so-called ASCIIbetical order (that is, alphabetical order with all uppercase letters before lowercase letters, and digits/punctuation before letters, ",(0,s.jsx)(n.a,{href:"https://en.wikipedia.org/wiki/ASCII#Character_order",children:"see here"}),")"]}),"\n"]}),(0,s.jsx)(n.p,{children:"Example:"}),(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"builddeps :\n - pkgconfig(MYGUI)\n - pkgconfig(Qt5Core)\n - pkgconfig(ayatana-appindicator-0.1)\n - pkgconfig(dri)\n - pkgconfig(gtk+-3.0)\n - The-Powder-Toy\n - abcMIDI\n - abcm2ps\n - git\n - python-poetry\n - swig\n"})})]}),"\n",(0,s.jsx)(n.h3,{id:"background",children:"Background"}),"\n",(0,s.jsx)(n.p,{children:"Most software packages that you build will, in one way or another, depend on another software package to provide specific functionality. This is usually achieved by using a library."}),"\n",(0,s.jsx)(n.p,{children:"Any package that is submitted to our repositories is always built in a clean chroot environment. Therefore, any dependencies required to build that package in a reproducible and sane fashion must be listed."}),"\n",(0,s.jsxs)(n.p,{children:["This is achieved by populating the ",(0,s.jsx)(n.code,{children:"builddeps"})," key with a list of build dependencies. We support two kinds of build dependencies: explicitly named, or ",(0,s.jsx)(n.code,{children:"pkgconfig"})," dependencies."]}),"\n",(0,s.jsxs)(n.p,{children:["We prefer the use of ",(0,s.jsx)(n.code,{children:"pkgconfig"})," dependencies. Most modern software will use the ",(0,s.jsx)(n.code,{children:"pkg-config"})," tool (package configuration) to determine which files are required to build the current software. This may include compiler flags, library to link against and where the package headers are located."]}),"\n",(0,s.jsxs)(n.p,{children:["An obvious advantage to supporting ",(0,s.jsx)(n.code,{children:"pkgconfig"})," dependencies is that there is a 1:1 mapping between the name requested by the build and the name used within the ",(0,s.jsx)(n.code,{children:"package.yml"}),". Instead of trying to hunt down the package providing that dependency, you simply list the same name. Any package in the repository will export information about the ",(0,s.jsx)(n.code,{children:".pc"})," files (for ",(0,s.jsx)(n.code,{children:"pkg-config"}),") it contains, enabling you to use those as a build dependency."]}),"\n",(0,s.jsxs)(n.p,{children:["A secondary advantage is that this allows for easily switching or replacing a providing package. When no ",(0,s.jsx)(n.code,{children:"pkgconfig"})," name is available (some packages do not provide these, or it doesn\u2019t make sense for them to), you may use the explicit package name. Always ensure you select the correct package, i.e. the ",(0,s.jsx)(n.code,{children:"-devel"})," subpackage. This provides the necessary symlinks and headers to build packages."]}),"\n",(0,s.jsx)(n.h3,{id:"finding-what-package-provides-a-pkgconfig-dependency-if-any",children:"Finding what package provides a pkgconfig dependency (if any)"}),"\n",(0,s.jsxs)(n.p,{children:["You can use ",(0,s.jsx)(n.code,{children:"go-task"})," to find packages that satisfy ",(0,s.jsx)(n.code,{children:"pkgconfig"})," dependencies. It can search for multiple dependencies at once."]}),"\n",(0,s.jsxs)(n.p,{children:["As an example, if you know a package has the build dependencies ",(0,s.jsx)(n.code,{children:"Qt5Core"})," and ",(0,s.jsx)(n.code,{children:"Qt6Core"}),", you would run:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"go-task pkgconfig -- Qt5Core Qt6Core\n"})}),"\n",(0,s.jsx)(n.p,{children:"This will output:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"pkgconfig(Qt5Core) found in: qt5-base-devel\npkgconfig(Qt6Core) found in: qt6-base-devel\n"})}),"\n",(0,s.jsxs)(n.p,{children:["You can also determine if there are ",(0,s.jsx)(n.code,{children:"pkgconfigs"})," available from a ",(0,s.jsx)(n.code,{children:"-devel"})," package by doing ",(0,s.jsx)(n.code,{children:"eopkg info (name)"})," and looking for the ",(0,s.jsx)(n.code,{children:"Provides"})," key."]}),"\n",(0,s.jsx)(n.p,{children:"Example:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"eopkg info libgtk-3-devel\n"})}),"\n",(0,s.jsx)(n.p,{children:"In output:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"Provides: pkgconfig(gtk+-3.0) pkgconfig(gdk-3.0) pkgconfig(gdk-wayland-3.0) pkgconfig(gail-3.0) pkgconfig(gdk-x11-3.0) pkgconfig(gtk+-unix-print-3.0)\npkgconfig(gtk+-wayland-3.0) pkgconfig(gtk+-x11-3.0)\n"})}),"\n",(0,s.jsx)(n.h3,{id:"using-pkgconfig-dependencies",children:"Using pkgconfig dependencies"}),"\n",(0,s.jsxs)(n.p,{children:["In the ",(0,s.jsx)(n.code,{children:"builddeps"})," list, use the ",(0,s.jsx)(n.code,{children:"pkgconfig(name)"})," syntax. For example, to add ",(0,s.jsx)(n.code,{children:"gtk+-3.0"})," to the build dependencies, you would do the following:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"builddeps:\n - pkgconfig(gtk+-3.0)\n"})}),"\n",(0,s.jsxs)(n.p,{children:["At build time the appropriate provider package is selected, in this instance ",(0,s.jsx)(n.code,{children:"libgtk-3-devel"})]}),"\n",(0,s.jsx)(n.h3,{id:"using-explicitly-named-dependencies",children:"Using explicitly named dependencies"}),"\n",(0,s.jsxs)(n.p,{children:["When there is not a ",(0,s.jsx)(n.code,{children:"pkgconfig"})," dependency available, use an explicitly named dependency.\nSimply list the package name."]}),"\n",(0,s.jsx)(n.admonition,{type:"note",children:(0,s.jsxs)(n.p,{children:["When a ",(0,s.jsx)(n.code,{children:"pkgconfig"})," dependency is available you will be asked to use that instead."]})}),"\n",(0,s.jsx)(n.p,{children:"Example:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"builddeps:\n - stk-devel\n"})}),"\n",(0,s.jsx)(n.h2,{id:"runtime-dependencies",children:"Runtime dependencies"}),"\n",(0,s.jsxs)(n.p,{children:["Runtime dependencies are extra packages that a package needs in order to function correctly. A common example of this is other libraries. Solus ",(0,s.jsx)(n.code,{children:"eopkg"})," packages will automatically add any binary dependencies at runtime, so that you do not have to."]}),"\n",(0,s.jsxs)(n.p,{children:["All ",(0,s.jsx)(n.code,{children:"devel"})," subpackages automatically depend on their parent package. On top of this, if they provide a ",(0,s.jsx)(n.code,{children:".pc"})," pkg-config file, we export this information, and automatically determine the packages this particular package would need to be able to build against correctly. As such, the majority of dependencies for builds are automatically resolved."]}),"\n",(0,s.jsx)(n.p,{children:"In certain instances, binary dependencies aren\u2019t enough. An example of this might be an extra Python package, or a font, something that is not accounted for by binary checks."}),"\n",(0,s.jsxs)(n.p,{children:["To account for this, you may add extra explicit runtime dependencies to your package. These are taken from the optional ",(0,s.jsx)(n.code,{children:"rundeps"})," ypkg key."]}),"\n",(0,s.jsxs)(n.p,{children:["This key uses the ",(0,s.jsx)(n.code,{children:"dict(s)"})," type, and the default key is the current package ",(0,s.jsx)(n.code,{children:"name"}),". You may express a different subpackage to apply dependencies to by using that name as a key, i.e. ",(0,s.jsx)(n.code,{children:"devel"}),", or ",(0,s.jsx)(n.code,{children:"docs"}),"."]}),"\n",(0,s.jsx)(n.p,{children:"This would add the \u201cpython-gobject\u201d runtime dependency to the main package:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"rundeps:\n - python-gobject\n"})}),"\n",(0,s.jsxs)(n.p,{children:["This would add the same dependency, as well as adding it to the ",(0,s.jsx)(n.code,{children:"devel"})," subpackage:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"rundeps:\n - python-gobject\n - devel: python-gobject\n"})}),"\n",(0,s.jsxs)(n.p,{children:["Remember this uses the ",(0,s.jsx)(n.code,{children:"dict(s)"})," type, which is very flexible. You can equally express this as follows (adding more deps as an example):"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"rundeps:\n - python-gobject\n - devel:\n - somepackage\n - someotherpackage\n"})}),"\n",(0,s.jsx)(n.h2,{id:"check-dependencies",children:"Check dependencies"}),"\n",(0,s.jsxs)(n.p,{children:["Check dependencies are a special kind of build dependency reserved for automatic package testing by ",(0,s.jsx)(n.code,{children:"solbuild"}),". Check dependencies should only be used during the ",(0,s.jsx)(n.code,{children:"check"})," build phase.\nWhen a package is part of an automatic build sequence, these dependencies will ",(0,s.jsx)(n.strong,{children:"not"})," be considered when determining build order."]}),"\n",(0,s.jsx)(n.h3,{id:"example",children:"Example"}),"\n",(0,s.jsxs)(n.p,{children:["The package ",(0,s.jsx)(n.code,{children:"cbindgen"})," includes ",(0,s.jsx)(n.code,{children:"cython"})," in ",(0,s.jsx)(n.code,{children:"checkdeps"})," to run tests in the ",(0,s.jsx)(n.code,{children:"check"})," phase."]}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.a,{href:"https://github.com/getsolus/packages/blob/main/packages/c/cbindgen/package.yml",children:"cbindgen package.yml file"})}),"\n",(0,s.jsx)(n.h2,{id:"patching--extra-files",children:"Patching / extra files"}),"\n",(0,s.jsxs)(n.p,{children:["Files that may be required during the build can be accessed via the ",(0,s.jsx)(n.code,{children:"$pkgfiles"})," variable. Note that you must store your files in the ",(0,s.jsx)(n.code,{children:"./files"})," directory relative to your ",(0,s.jsx)(n.code,{children:"package.yml"})]}),"\n",(0,s.jsxs)(n.p,{children:["Both patches and extra files (such as systemd units) are stored in this directory. Note that if your patch is to address a ",(0,s.jsx)(n.strong,{children:"CVE"}),", you must use the following naming scheme: ",(0,s.jsx)(n.code,{children:"./files/security/cve-xxxx-xxxx.patch"})]}),"\n",(0,s.jsxs)(n.p,{children:["Where ",(0,s.jsx)(n.code,{children:"xxxx-xxxx"})," is replaced with the full CVE ID. Complying with this simple rule ensures that we can know at any time the security status of packages when using tools such as ",(0,s.jsx)(n.code,{children:"cve-check-tool"}),"\nkept\nSolus tooling allows the use of ",(0,s.jsx)(n.code,{children:"./files/security/cve-xxxx-xxxx.nopatch"})," (which isn't applied in the build) to indicate that a CVE has been validated as not applicable to the Solus package. This can be because another patch resolves this CVE, or there is a false positive via ",(0,s.jsx)(n.code,{children:"cve-check-tool"}),". The contents of the file can describe why it doesn't apply without requiring a patch (i.e. Resolved by cve-xxxx-xxxx.patch)."]}),"\n",(0,s.jsx)(n.h3,{id:"applying-a-patch",children:"Applying a patch"}),"\n",(0,s.jsxs)(n.p,{children:["It is common practice to apply the patch file(s) within the ",(0,s.jsx)(n.code,{children:"setup"})," section of your build staging. We can achieve this using the ",(0,s.jsx)(n.code,{children:"%patch"})," macro, and the ",(0,s.jsx)(n.code,{children:"$pkgfiles"})," variable. In this example, the required file is located at ",(0,s.jsx)(n.code,{children:"./files/0002-Sample-commit-2.patch"})]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"%patch -p1 -i $pkgfiles/0002-Sample-commit-2.patch\n"})}),"\n",(0,s.jsxs)(n.p,{children:["Note you use the macro as you would normally use the ",(0,s.jsx)(n.code,{children:"patch"})," command, however use of the macro ensures it performs a clean batch-mode patch."]}),"\n",(0,s.jsxs)(n.p,{children:["If you are using compressed patches, i.e. for the ",(0,s.jsx)(n.code,{children:"bash"})," or ",(0,s.jsx)(n.code,{children:"readline"})," packages, you can pipe the call through ",(0,s.jsx)(n.code,{children:"zcat"})," or similar:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"zcat $pkgfiles/bash43-032.gz | %patch -p0\n"})}),"\n",(0,s.jsx)(n.h4,{id:"handling-multiple-patches",children:"Handling multiple patches"}),"\n",(0,s.jsxs)(n.p,{children:["In the event you need to apply multiple patches, such as a multitude of CVE patches, it may be sensible to use our ",(0,s.jsx)(n.code,{children:"%apply_patches"})," macro, which will apply all the patches listed in a ",(0,s.jsx)(n.code,{children:"series"})," file in your package's ",(0,s.jsx)(n.code,{children:"./files"})," folder. Example below:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"security/cve-xxxx-xxxx.patch\nfix-silliness.patch\n"})}),"\n",(0,s.jsxs)(n.p,{children:["Both of the files above will be applied using stripping number ",(0,s.jsx)(n.code,{children:"-p1"}),". If you need to use a different stripping number, like ",(0,s.jsx)(n.code,{children:"-p4"}),", you can write:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"security/cve-xxxx-xxxx.patch -p4\nfix-silliness.patch\n"})}),"\n",(0,s.jsx)(n.h2,{id:"installing-extra-files",children:"Installing extra files"}),"\n",(0,s.jsxs)(n.p,{children:["We recommend using patches where possible first, as they ensure correct maintenance and will be updated across package versions. If you must install extra files into the directory, please use the ",(0,s.jsx)(n.code,{children:"install"})," command, ensuring you set the correct permissions. Again, files are accessible from the ",(0,s.jsx)(n.code,{children:"./files"})," directory, relative to ",(0,s.jsx)(n.code,{children:"package.yml"}),"."]}),"\n",(0,s.jsxs)(n.p,{children:["This is an example of installing a custom profile file, seen in the ",(0,s.jsx)(n.code,{children:"bash"})," package:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"install -m 0644 $pkgfiles/profile $installdir/etc/profile\n"})}),"\n",(0,s.jsx)(n.h2,{id:"patterns",children:"Patterns"}),"\n",(0,s.jsxs)(n.p,{children:["In most instances, ",(0,s.jsx)(n.code,{children:"ypkg"})," will assign the correct location for files, whether it be in the main ",(0,s.jsx)(n.code,{children:"name"})," package, or a subpackage. However there may be instances where the default does not match the intended behaviour."]}),"\n",(0,s.jsx)(n.p,{children:"In these instances it is possible to override the default assignment by way of patterns. These are simply a list of paths or globs to ensure a particular file, or set of files, end up in the desired location."}),"\n",(0,s.jsxs)(n.p,{children:["The ",(0,s.jsx)(n.code,{children:"patterns"})," key expects a ",(0,s.jsx)(n.code,{children:"dict(s)"})," argument. The default key for each pattern is assumed to be the ",(0,s.jsx)(n.code,{children:"name"})," of the package, so omitting the name would place files into the main package. The value should be a path or pattern you wish to match, ensuring files go to a specific location."]}),"\n",(0,s.jsxs)(n.p,{children:["In this example from ",(0,s.jsx)(n.code,{children:"libjpeg-turbo"}),", we move all documentation into the ",(0,s.jsx)(n.code,{children:"docs"})," subpackage:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{children:"patterns:\n - docs: [/usr/share/man]\n"})}),"\n",(0,s.jsxs)(n.p,{children:["This example, taken from the ",(0,s.jsx)(n.code,{children:"wayland"})," package, ensures the binaries from ",(0,s.jsx)(n.code,{children:"/usr/bin"})," and the directory ",(0,s.jsx)(n.code,{children:"/usr/share/wayland"})," are located in the ",(0,s.jsx)(n.code,{children:"devel"})," subpackage:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{children:"patterns:\n - devel:\n - /usr/bin\n - /usr/share/wayland\n"})}),"\n",(0,s.jsx)(n.h2,{id:"replace--rename",children:"Replace / rename"}),"\n",(0,s.jsxs)(n.p,{children:["In some situations, it may be required to replace one package with another, or to rename an existing package. In these instances you should coordinate with a repository maintainer to ensure the replaced package is marked ",(0,s.jsx)(n.strong,{children:"Obsolete"})," within the index. This will ensure correct upgrade paths for users."]}),"\n",(0,s.jsxs)(n.p,{children:["Note that to retire a package, you must also coordinate with a repository maintainer. An ",(0,s.jsx)(n.strong,{children:"Obsolete"})," package is removed by the package manager when the user upgrades. As such, correct upgrade paths need to be established."]}),"\n",(0,s.jsxs)(n.p,{children:["The ",(0,s.jsx)(n.code,{children:"replaces"})," ypkg key uses the ",(0,s.jsx)(n.code,{children:"dict(s)"})," type, and the default key is assumed to be the current package ",(0,s.jsx)(n.code,{children:"name"}),"."]}),"\n",(0,s.jsxs)(n.p,{children:["In this example, we rename the ",(0,s.jsx)(n.code,{children:"libgeoclue*"})," packages to use the correct names, and ensure a working upgrade path."]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{children:"replaces:\n - devel: libgeoclue-devel\n - libgeoclue\n"})}),"\n",(0,s.jsxs)(n.p,{children:["The ",(0,s.jsx)(n.code,{children:"name"})," of this package is ",(0,s.jsx)(n.code,{children:"geoclue"}),", and the new package names are now:"]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.code,{children:"geoclue"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.code,{children:"geoclue-devel"})}),"\n"]}),"\n",(0,s.jsxs)(n.p,{children:["Given the ",(0,s.jsx)(n.code,{children:"replaces"})," values above, ",(0,s.jsx)(n.code,{children:"geoclue"})," now replaces ",(0,s.jsx)(n.code,{children:"libgeoclue"}),", and ",(0,s.jsx)(n.code,{children:"geoclue-devel"})," replaces ",(0,s.jsx)(n.code,{children:"libgeoclue-devel"}),". This is entirely transparent to the user, with a seamless update replacing the old packages with the new renamed packages."]}),"\n",(0,s.jsxs)(n.p,{children:["The repository maintainer marked the old names as ",(0,s.jsx)(n.strong,{children:"Obsolete"})," in the index."]})]})}function h(e={}){const{wrapper:n}={...(0,a.a)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(o,{...e})}):o(e)}},11151:(e,n,i)=>{i.d(n,{Z:()=>d,a:()=>t});var s=i(67294);const a={},c=s.createContext(a);function t(e){const n=s.useContext(c);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function d(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:t(e.components),s.createElement(c.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/4e87380c.14c405d8.js b/assets/js/4e87380c.14c405d8.js new file mode 100644 index 000000000..00de37691 --- /dev/null +++ b/assets/js/4e87380c.14c405d8.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([["8570"],{90906:function(e){e.exports=JSON.parse('{"tag":{"label":"gnu","permalink":"/blog/tags/gnu","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/gnu","page":1,"postsPerPage":1,"totalPages":1,"totalCount":1,"blogDescription":"The Solus Development (b)log!","blogTitle":"Solus DevLog"}}')}}]); \ No newline at end of file diff --git a/assets/js/4e87380c.a121e477.js b/assets/js/4e87380c.a121e477.js deleted file mode 100644 index 609cb7bc1..000000000 --- a/assets/js/4e87380c.a121e477.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[2585],{68801:e=>{e.exports=JSON.parse('{"tag":{"label":"gnu","permalink":"/blog/tags/gnu","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/gnu","page":1,"postsPerPage":1,"totalPages":1,"totalCount":1,"blogDescription":"The Solus Development (b)log!","blogTitle":"Solus DevLog"}}')}}]); \ No newline at end of file diff --git a/assets/js/513b6405.64a20a0d.js b/assets/js/513b6405.64a20a0d.js deleted file mode 100644 index ae3355abe..000000000 --- a/assets/js/513b6405.64a20a0d.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[4278],{38033:(e,i,s)=>{s.r(i),s.d(i,{assets:()=>l,contentTitle:()=>r,default:()=>h,frontMatter:()=>o,metadata:()=>a,toc:()=>c});var t=s(85893),n=s(11151);const o={title:"Prepare for Packaging",summary:"Quick guide on getting your system set up for packaging on Solus",sidebar_position:1},r="Prepare for packaging",a={id:"packaging/prepare-for-packaging",title:"Prepare for Packaging",description:"Switch to the Unstable repository",source:"@site/docs/packaging/prepare-for-packaging.md",sourceDirName:"packaging",slug:"/packaging/prepare-for-packaging",permalink:"/docs/packaging/prepare-for-packaging",draft:!1,unlisted:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/packaging/prepare-for-packaging.md",tags:[],version:"current",lastUpdatedAt:1732716912e3,sidebarPosition:1,frontMatter:{title:"Prepare for Packaging",summary:"Quick guide on getting your system set up for packaging on Solus",sidebar_position:1},sidebar:"packagingSidebar",previous:{title:"Packaging Overview",permalink:"/docs/packaging/"},next:{title:"Update Your Development Environment",permalink:"/docs/packaging/update-dev-environment"}},l={},c=[{value:"Switch to the Unstable repository",id:"switch-to-the-unstable-repository",level:2},{value:"Setting up the packager file",id:"setting-up-the-packager-file",level:2},{value:"Installing development tools",id:"installing-development-tools",level:2},{value:"Setting up a GitHub account and Git",id:"setting-up-a-github-account-and-git",level:2},{value:"Configure github-cli.",id:"configure-github-cli",level:3},{value:"Git identity setup",id:"git-identity-setup",level:3},{value:"Setting up solbuild",id:"setting-up-solbuild",level:2},{value:"Updating solbuild",id:"updating-solbuild",level:3},{value:"Fork the getsolus/packages repository",id:"fork-the-getsoluspackages-repository",level:2},{value:"Clone your forked package repository",id:"clone-your-forked-package-repository",level:2},{value:"Initialize git hooks",id:"initialize-git-hooks",level:2},{value:"Set up repository helper functions (optional)",id:"set-up-repository-helper-functions-optional",level:2},{value:"bash",id:"bash",level:3},{value:"fish",id:"fish",level:3},{value:"zsh",id:"zsh",level:3},{value:"Building packages",id:"building-packages",level:2}];function d(e){const i={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",hr:"hr",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,n.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(i.header,{children:(0,t.jsx)(i.h1,{id:"prepare-for-packaging",children:"Prepare for packaging"})}),"\n",(0,t.jsx)(i.h2,{id:"switch-to-the-unstable-repository",children:"Switch to the Unstable repository"}),"\n",(0,t.jsx)(i.p,{children:'Packages need to be built and tested against the "unstable" repository. If you don\'t want to switch your primary system to unstable, you can do your packaging work in a VM. We have Virtual Machine Manager and other similar tools in the Solus repository.'}),"\n",(0,t.jsxs)(i.p,{children:["Refer to ",(0,t.jsx)(i.a,{href:"/docs/user/package-management/repo-management",children:"Repository Management"})," to see how to add and switch to unstable."]}),"\n",(0,t.jsx)(i.h2,{id:"setting-up-the-packager-file",children:"Setting up the packager file"}),"\n",(0,t.jsx)(i.p,{children:"In order to utilize the build system, you must first set up a configuration file that has your packager details."}),"\n",(0,t.jsxs)(i.p,{children:["This file lives in the ",(0,t.jsx)(i.code,{children:".config/solus"})," folder of your home directory. You will need to create the ",(0,t.jsx)(i.code,{children:".config/solus"})," folder as well as the inner ",(0,t.jsx)(i.code,{children:"packager"})," file. Inside the packager file, you need two keys, ",(0,t.jsx)(i.code,{children:"Name"})," and ",(0,t.jsx)(i.code,{children:"Email"}),". This is used when generating the machine file so that the packager details are stored within the resulting binary package."]}),"\n",(0,t.jsxs)(i.p,{children:["Name and email address are mandatory. You must use your real first and last name(s) for accountability purposes.\nA ",(0,t.jsx)(i.a,{href:"/docs/user/contributing/getting-involved#matrix-chat",children:"Matrix"})," contact is optional but recommended."]}),"\n",(0,t.jsx)(i.pre,{children:(0,t.jsx)(i.code,{className:"language-ini",children:"[Packager]\nName=Your Name Here\nEmail=your.email@address\nMatrix=@username:matrix.org\n"})}),"\n",(0,t.jsx)(i.h2,{id:"installing-development-tools",children:"Installing development tools"}),"\n",(0,t.jsx)(i.p,{children:"We need to install a few things in order to get started with packaging:"}),"\n",(0,t.jsxs)(i.ul,{children:["\n",(0,t.jsxs)(i.li,{children:[(0,t.jsx)(i.code,{children:"ent"})," is used by the ",(0,t.jsx)(i.code,{children:"go-task updatecheck"})," command to check for updated versions of packaged software"]}),"\n",(0,t.jsxs)(i.li,{children:[(0,t.jsx)(i.code,{children:"git"})," is used for version control of the Solus sources"]}),"\n",(0,t.jsxs)(i.li,{children:[(0,t.jsx)(i.code,{children:"github-cli"})," is used to make working with GitHub easier"]}),"\n",(0,t.jsxs)(i.li,{children:[(0,t.jsx)(i.code,{children:"go-task"})," is used by our build tools for scripting"]}),"\n",(0,t.jsxs)(i.li,{children:[(0,t.jsx)(i.code,{children:"jq"})," is used by our optional ",(0,t.jsx)(i.a,{href:"#set-up-repository-helper-functions-optional",children:"Helper Functions"})]}),"\n",(0,t.jsxs)(i.li,{children:[(0,t.jsx)(i.code,{children:"solbuild"})," is a lightweight container environment for building packages repeatably"]}),"\n",(0,t.jsxs)(i.li,{children:[(0,t.jsx)(i.code,{children:"solbuild-config-unstable"})," sets up solbuild for working with the ",(0,t.jsx)(i.code,{children:"unstable"})," repository"]}),"\n",(0,t.jsxs)(i.li,{children:[(0,t.jsx)(i.code,{children:"ypkg"})," is the program that actually builds packages"]}),"\n",(0,t.jsxs)(i.li,{children:[(0,t.jsx)(i.code,{children:"yq"})," is used by the ",(0,t.jsx)(i.code,{children:"go-task add-monitoring"})," command to create new ",(0,t.jsx)(i.a,{href:"/docs/packaging/monitoring.yml",children:(0,t.jsx)(i.code,{children:"monitoring.yml"})})," files"]}),"\n"]}),"\n",(0,t.jsx)(i.pre,{children:(0,t.jsx)(i.code,{className:"language-bash",children:"sudo eopkg it ent git github-cli go-task jq solbuild solbuild-config-unstable ypkg yq\n"})}),"\n",(0,t.jsx)(i.h2,{id:"setting-up-a-github-account-and-git",children:"Setting up a GitHub account and Git"}),"\n",(0,t.jsxs)(i.p,{children:["The Solus source repositories for the package repository currently reside on ",(0,t.jsx)(i.a,{href:"https://github.com/getsolus/packages",children:"github.com/getsolus/packages"}),". You will need a GitHub account to submit patches and file issues. You can create a GitHub account ",(0,t.jsx)(i.a,{href:"https://github.com/signup",children:"here"}),". Note that you will also need to set up ",(0,t.jsx)(i.a,{href:"https://docs.github.com/en/authentication/securing-your-account-with-two-factor-authentication-2fa",children:"2FA"})," (two-factor authentication) for your account."]}),"\n",(0,t.jsxs)(i.h3,{id:"configure-github-cli",children:["Configure ",(0,t.jsx)(i.code,{children:"github-cli"}),"."]}),"\n",(0,t.jsxs)(i.p,{children:["Once you have a GitHub account, you need to configure ",(0,t.jsx)(i.code,{children:"github-cli"})," to work with it. At minimum, you need to run ",(0,t.jsx)(i.code,{children:"gh auth login"}),". Have your GitHub credentials and 2FA (two-factor authentication) mechanism at hand."]}),"\n",(0,t.jsxs)(i.p,{children:["See the ",(0,t.jsx)(i.a,{href:"https://docs.github.com/en/github-cli/github-cli/quickstart",children:"GitHub CLI quickstart"})," for some common uses of the tool."]}),"\n",(0,t.jsx)(i.h3,{id:"git-identity-setup",children:"Git identity setup"}),"\n",(0,t.jsxs)(i.p,{children:["If you have not used git before, you should set your git identity in your global git config file (",(0,t.jsx)(i.code,{children:"~/.gitconfig"}),"). Use the following commands:"]}),"\n",(0,t.jsx)(i.pre,{children:(0,t.jsx)(i.code,{className:"language-bash",children:'git config --global user.name "John Doe"\ngit config --global user.email johndoe@example.com\n'})}),"\n",(0,t.jsxs)(i.p,{children:["See the ",(0,t.jsx)(i.a,{href:"https://git-scm.com/book/en/v2/Getting-Started-First-Time-Git-Setup",children:"Git Book"})," for more first-time setup options."]}),"\n",(0,t.jsx)(i.h2,{id:"setting-up-solbuild",children:"Setting up solbuild"}),"\n",(0,t.jsxs)(i.p,{children:["The ",(0,t.jsx)(i.code,{children:"solbuild"})," tool must first be initialized with a base image. All builds thereafter will use this as a base, and construct a temporary overlay root to save on time and disk space in builds."]}),"\n",(0,t.jsx)(i.p,{children:"Initialize solbuild via:"}),"\n",(0,t.jsx)(i.pre,{children:(0,t.jsx)(i.code,{className:"language-bash",children:"sudo solbuild init\n"})}),"\n",(0,t.jsx)(i.p,{children:"This will take some time as it downloads and prepares the image."}),"\n",(0,t.jsx)(i.h3,{id:"updating-solbuild",children:"Updating solbuild"}),"\n",(0,t.jsx)(i.p,{children:"It is a good idea to keep the base image updated. It will help reduce build times by not having to repeatedly download updates to packages in the base image, and will strictly need to pull down the packages your build needs."}),"\n",(0,t.jsx)(i.p,{children:"To update solbuild, run:"}),"\n",(0,t.jsx)(i.pre,{children:(0,t.jsx)(i.code,{className:"language-bash",children:"sudo solbuild update\n"})}),"\n",(0,t.jsx)(i.h2,{id:"fork-the-getsoluspackages-repository",children:"Fork the getsolus/packages repository"}),"\n",(0,t.jsxs)(i.p,{children:["Create your own fork of ",(0,t.jsx)(i.a,{href:"https://github.com/getsolus/packages",children:"getsolus/packages"})," using the GitHub web UI or ",(0,t.jsxs)(i.a,{href:"https://cli.github.com/manual/gh_repo_fork",children:[(0,t.jsx)(i.code,{children:"gh"})," cli tool"]})," from the ",(0,t.jsx)(i.code,{children:"github-cli"})," package. It will be forked to ",(0,t.jsx)(i.code,{children:"github.com/yourgithubaccount/packages"}),"."]}),"\n",(0,t.jsx)(i.h2,{id:"clone-your-forked-package-repository",children:"Clone your forked package repository"}),"\n",(0,t.jsxs)(i.p,{children:["Create a local clone of the package repository you just forked. Here we are using the name ",(0,t.jsx)(i.code,{children:"solus-packages"})," and cloning it into our home directoy. The rest of the documentation will presume this structure. You can choose a different name and path but will have to make sure to replace it in every command that refers to the ",(0,t.jsx)(i.code,{children:"solus-packages"})," directory."]}),"\n",(0,t.jsx)(i.pre,{children:(0,t.jsx)(i.code,{className:"language-bash",children:"gh repo clone packages ~/solus-packages\n"})}),"\n",(0,t.jsx)(i.h2,{id:"initialize-git-hooks",children:"Initialize git hooks"}),"\n",(0,t.jsx)(i.p,{children:"Initialize Git hooks for working with the repository by running:"}),"\n",(0,t.jsx)(i.pre,{children:(0,t.jsx)(i.code,{children:"go-task -d ~/solus-packages init\n"})}),"\n",(0,t.jsx)(i.p,{children:"This makes it easy to create commits in the correct format, and will warn you about issues with changes you commit."}),"\n",(0,t.jsx)(i.h2,{id:"set-up-repository-helper-functions-optional",children:"Set up repository helper functions (optional)"}),"\n",(0,t.jsx)(i.p,{children:"The helper functions are a collection of shell scripts that help you navigate the packages repository more quickly, and perform some specialized searches."}),"\n",(0,t.jsx)(i.p,{children:"After cloning your repository, create a symlink to source the helper functions for your shell. Then, start a new instance of the shell."}),"\n",(0,t.jsx)(i.h3,{id:"bash",children:"bash"}),"\n",(0,t.jsx)(i.pre,{children:(0,t.jsx)(i.code,{className:"language-bash",children:"mkdir -p ~/.bashrc.d\nln -s ~/solus-packages/common/Scripts/helpers.sh ~/.bashrc.d/solus-monorepo-helpers.sh\n"})}),"\n",(0,t.jsx)(i.h3,{id:"fish",children:"fish"}),"\n",(0,t.jsx)(i.pre,{children:(0,t.jsx)(i.code,{className:"language-bash",children:"mkdir -p ~/.config/fish/conf.d\nln -s ~/solus-packages/common/Scripts/helpers.fish ~/.config/fish/conf.d/solus.fish\n"})}),"\n",(0,t.jsx)(i.h3,{id:"zsh",children:"zsh"}),"\n",(0,t.jsx)(i.pre,{children:(0,t.jsx)(i.code,{className:"language-bash",children:'mkdir -p ~/.zshrc.d\nprintf "\\nfpath=(~/.zshrc.d \\$fpath)" >> ~/.zshrc\nsource ~/.zshrc\nln -s ~/solus-packages/common/Scripts/helpers.zsh ~/.zshrc.d/solus-monorepo-helpers.zsh\n'})}),"\n",(0,t.jsx)(i.hr,{}),"\n",(0,t.jsx)(i.p,{children:"You should now have the following available from your shell:"}),"\n",(0,t.jsxs)(i.table,{children:[(0,t.jsx)(i.thead,{children:(0,t.jsxs)(i.tr,{children:[(0,t.jsx)(i.th,{children:"Function"}),(0,t.jsx)(i.th,{children:"Description"}),(0,t.jsx)(i.th,{children:"Usage"})]})}),(0,t.jsxs)(i.tbody,{children:[(0,t.jsxs)(i.tr,{children:[(0,t.jsx)(i.td,{children:(0,t.jsx)(i.strong,{children:"cpesearch"})}),(0,t.jsxs)(i.td,{children:["Search for CPE Names for packages. For use when writing the ",(0,t.jsx)(i.a,{href:"/docs/packaging/monitoring.yml",children:(0,t.jsx)(i.code,{children:"monitoring.yml"})})," file for a package"]}),(0,t.jsx)(i.td,{children:(0,t.jsx)(i.code,{children:"cpesearch search-term"})})]}),(0,t.jsxs)(i.tr,{children:[(0,t.jsx)(i.td,{children:(0,t.jsx)(i.strong,{children:"goroot"})}),(0,t.jsx)(i.td,{children:"When in the Solus packages repository, change directory to the root directory."}),(0,t.jsx)(i.td,{children:(0,t.jsx)(i.code,{children:"goroot"})})]}),(0,t.jsxs)(i.tr,{children:[(0,t.jsx)(i.td,{children:(0,t.jsx)(i.strong,{children:"gotopkg"})}),(0,t.jsxs)(i.td,{children:["Change directory to any Solus package. You can type part of the package name then double press ",(0,t.jsx)(i.code,{children:"Tab"})," to get autocompletion for this function."]}),(0,t.jsx)(i.td,{children:(0,t.jsx)(i.code,{children:"gotopkg firefox"})})]}),(0,t.jsxs)(i.tr,{children:[(0,t.jsx)(i.td,{children:(0,t.jsx)(i.strong,{children:"gotosoluspkgs"})}),(0,t.jsx)(i.td,{children:"Change directory to the Solus packages repository from anywhere on the filesystem."}),(0,t.jsx)(i.td,{children:(0,t.jsx)(i.code,{children:"gotosoluspkgs"})})]}),(0,t.jsxs)(i.tr,{children:[(0,t.jsx)(i.td,{children:(0,t.jsx)(i.strong,{children:"whatprovides"})}),(0,t.jsxs)(i.td,{children:["Find out what package provides a library by reading the ",(0,t.jsx)(i.code,{children:"abi_libs"})," files."]}),(0,t.jsx)(i.td,{children:(0,t.jsx)(i.code,{children:"whatprovides libfoobar.so.1"})})]}),(0,t.jsxs)(i.tr,{children:[(0,t.jsx)(i.td,{children:(0,t.jsx)(i.strong,{children:"whatuses"})}),(0,t.jsxs)(i.td,{children:["Find out what packages use a library by reading the ",(0,t.jsx)(i.code,{children:"abi_used_libs"})," files."]}),(0,t.jsx)(i.td,{children:(0,t.jsx)(i.code,{children:"whatuses libfoobar.so.1"})})]})]})]}),"\n",(0,t.jsx)(i.h2,{id:"building-packages",children:"Building packages"}),"\n",(0,t.jsxs)(i.p,{children:["Your system is now set up for package work.\nIf you are new to packaging, see ",(0,t.jsx)(i.a,{href:"/docs/packaging/your-first-package-update",children:"Your First Package Update"}),"."]})]})}function h(e={}){const{wrapper:i}={...(0,n.a)(),...e.components};return i?(0,t.jsx)(i,{...e,children:(0,t.jsx)(d,{...e})}):d(e)}},11151:(e,i,s)=>{s.d(i,{Z:()=>a,a:()=>r});var t=s(67294);const n={},o=t.createContext(n);function r(e){const i=t.useContext(o);return t.useMemo((function(){return"function"==typeof e?e(i):{...i,...e}}),[i,e])}function a(e){let i;return i=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:r(e.components),t.createElement(o.Provider,{value:i},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/513b6405.6e1fe729.js b/assets/js/513b6405.6e1fe729.js new file mode 100644 index 000000000..ced5b5d8a --- /dev/null +++ b/assets/js/513b6405.6e1fe729.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([["4064"],{86663:function(e,i,s){s.r(i),s.d(i,{metadata:()=>t,contentTitle:()=>a,default:()=>h,assets:()=>l,toc:()=>c,frontMatter:()=>r});var t=JSON.parse('{"id":"packaging/prepare-for-packaging","title":"Prepare for Packaging","description":"Switch to the Unstable repository","source":"@site/docs/packaging/prepare-for-packaging.md","sourceDirName":"packaging","slug":"/packaging/prepare-for-packaging","permalink":"/docs/packaging/prepare-for-packaging","draft":false,"unlisted":false,"editUrl":"https://github.com/getsolus/help-center-docs/tree/master/docs/packaging/prepare-for-packaging.md","tags":[],"version":"current","lastUpdatedAt":1733757592000,"sidebarPosition":1,"frontMatter":{"title":"Prepare for Packaging","summary":"Quick guide on getting your system set up for packaging on Solus","sidebar_position":1},"sidebar":"packagingSidebar","previous":{"title":"Packaging Overview","permalink":"/docs/packaging/"},"next":{"title":"Update Your Development Environment","permalink":"/docs/packaging/update-dev-environment"}}'),n=s("85893"),o=s("50065");let r={title:"Prepare for Packaging",summary:"Quick guide on getting your system set up for packaging on Solus",sidebar_position:1},a="Prepare for packaging",l={},c=[{value:"Switch to the Unstable repository",id:"switch-to-the-unstable-repository",level:2},{value:"Setting up the packager file",id:"setting-up-the-packager-file",level:2},{value:"Installing development tools",id:"installing-development-tools",level:2},{value:"Setting up a GitHub account and Git",id:"setting-up-a-github-account-and-git",level:2},{value:"Configure github-cli.",id:"configure-github-cli",level:3},{value:"Git identity setup",id:"git-identity-setup",level:3},{value:"Setting up solbuild",id:"setting-up-solbuild",level:2},{value:"Updating solbuild",id:"updating-solbuild",level:3},{value:"Fork the getsolus/packages repository",id:"fork-the-getsoluspackages-repository",level:2},{value:"Clone your forked package repository",id:"clone-your-forked-package-repository",level:2},{value:"Initialize git hooks",id:"initialize-git-hooks",level:2},{value:"Set up repository helper functions (optional)",id:"set-up-repository-helper-functions-optional",level:2},{value:"bash",id:"bash",level:3},{value:"fish",id:"fish",level:3},{value:"zsh",id:"zsh",level:3},{value:"Building packages",id:"building-packages",level:2}];function d(e){let i={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",hr:"hr",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,o.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(i.header,{children:(0,n.jsx)(i.h1,{id:"prepare-for-packaging",children:"Prepare for packaging"})}),"\n",(0,n.jsx)(i.h2,{id:"switch-to-the-unstable-repository",children:"Switch to the Unstable repository"}),"\n",(0,n.jsx)(i.p,{children:'Packages need to be built and tested against the "unstable" repository. If you don\'t want to switch your primary system to unstable, you can do your packaging work in a VM. We have Virtual Machine Manager and other similar tools in the Solus repository.'}),"\n",(0,n.jsxs)(i.p,{children:["Refer to ",(0,n.jsx)(i.a,{href:"/docs/user/package-management/repo-management",children:"Repository Management"})," to see how to add and switch to unstable."]}),"\n",(0,n.jsx)(i.h2,{id:"setting-up-the-packager-file",children:"Setting up the packager file"}),"\n",(0,n.jsx)(i.p,{children:"In order to utilize the build system, you must first set up a configuration file that has your packager details."}),"\n",(0,n.jsxs)(i.p,{children:["This file lives in the ",(0,n.jsx)(i.code,{children:".config/solus"})," folder of your home directory. You will need to create the ",(0,n.jsx)(i.code,{children:".config/solus"})," folder as well as the inner ",(0,n.jsx)(i.code,{children:"packager"})," file. Inside the packager file, you need two keys, ",(0,n.jsx)(i.code,{children:"Name"})," and ",(0,n.jsx)(i.code,{children:"Email"}),". This is used when generating the machine file so that the packager details are stored within the resulting binary package."]}),"\n",(0,n.jsxs)(i.p,{children:["Name and email address are mandatory. You must use your real first and last name(s) for accountability purposes.\nA ",(0,n.jsx)(i.a,{href:"/docs/user/contributing/getting-involved#matrix-chat",children:"Matrix"})," contact is optional but recommended."]}),"\n",(0,n.jsx)(i.pre,{children:(0,n.jsx)(i.code,{className:"language-ini",children:"[Packager]\nName=Your Name Here\nEmail=your.email@address\nMatrix=@username:matrix.org\n"})}),"\n",(0,n.jsx)(i.h2,{id:"installing-development-tools",children:"Installing development tools"}),"\n",(0,n.jsx)(i.p,{children:"We need to install a few things in order to get started with packaging:"}),"\n",(0,n.jsxs)(i.ul,{children:["\n",(0,n.jsxs)(i.li,{children:[(0,n.jsx)(i.code,{children:"ent"})," is used by the ",(0,n.jsx)(i.code,{children:"go-task updatecheck"})," command to check for updated versions of packaged software"]}),"\n",(0,n.jsxs)(i.li,{children:[(0,n.jsx)(i.code,{children:"git"})," is used for version control of the Solus sources"]}),"\n",(0,n.jsxs)(i.li,{children:[(0,n.jsx)(i.code,{children:"github-cli"})," is used to make working with GitHub easier"]}),"\n",(0,n.jsxs)(i.li,{children:[(0,n.jsx)(i.code,{children:"go-task"})," is used by our build tools for scripting"]}),"\n",(0,n.jsxs)(i.li,{children:[(0,n.jsx)(i.code,{children:"jq"})," is used by our optional ",(0,n.jsx)(i.a,{href:"#set-up-repository-helper-functions-optional",children:"Helper Functions"})]}),"\n",(0,n.jsxs)(i.li,{children:[(0,n.jsx)(i.code,{children:"solbuild"})," is a lightweight container environment for building packages repeatably"]}),"\n",(0,n.jsxs)(i.li,{children:[(0,n.jsx)(i.code,{children:"solbuild-config-unstable"})," sets up solbuild for working with the ",(0,n.jsx)(i.code,{children:"unstable"})," repository"]}),"\n",(0,n.jsxs)(i.li,{children:[(0,n.jsx)(i.code,{children:"ypkg"})," is the program that actually builds packages"]}),"\n",(0,n.jsxs)(i.li,{children:[(0,n.jsx)(i.code,{children:"yq"})," is used by the ",(0,n.jsx)(i.code,{children:"go-task add-monitoring"})," command to create new ",(0,n.jsx)(i.a,{href:"/docs/packaging/monitoring.yml",children:(0,n.jsx)(i.code,{children:"monitoring.yml"})})," files"]}),"\n"]}),"\n",(0,n.jsx)(i.pre,{children:(0,n.jsx)(i.code,{className:"language-bash",children:"sudo eopkg it ent git github-cli go-task jq solbuild solbuild-config-unstable ypkg yq\n"})}),"\n",(0,n.jsx)(i.h2,{id:"setting-up-a-github-account-and-git",children:"Setting up a GitHub account and Git"}),"\n",(0,n.jsxs)(i.p,{children:["The Solus source repositories for the package repository currently reside on ",(0,n.jsx)(i.a,{href:"https://github.com/getsolus/packages",children:"github.com/getsolus/packages"}),". You will need a GitHub account to submit patches and file issues. You can create a GitHub account ",(0,n.jsx)(i.a,{href:"https://github.com/signup",children:"here"}),". Note that you will also need to set up ",(0,n.jsx)(i.a,{href:"https://docs.github.com/en/authentication/securing-your-account-with-two-factor-authentication-2fa",children:"2FA"})," (two-factor authentication) for your account."]}),"\n",(0,n.jsxs)(i.h3,{id:"configure-github-cli",children:["Configure ",(0,n.jsx)(i.code,{children:"github-cli"}),"."]}),"\n",(0,n.jsxs)(i.p,{children:["Once you have a GitHub account, you need to configure ",(0,n.jsx)(i.code,{children:"github-cli"})," to work with it. At minimum, you need to run ",(0,n.jsx)(i.code,{children:"gh auth login"}),". Have your GitHub credentials and 2FA (two-factor authentication) mechanism at hand."]}),"\n",(0,n.jsxs)(i.p,{children:["See the ",(0,n.jsx)(i.a,{href:"https://docs.github.com/en/github-cli/github-cli/quickstart",children:"GitHub CLI quickstart"})," for some common uses of the tool."]}),"\n",(0,n.jsx)(i.h3,{id:"git-identity-setup",children:"Git identity setup"}),"\n",(0,n.jsxs)(i.p,{children:["If you have not used git before, you should set your git identity in your global git config file (",(0,n.jsx)(i.code,{children:"~/.gitconfig"}),"). Use the following commands:"]}),"\n",(0,n.jsx)(i.pre,{children:(0,n.jsx)(i.code,{className:"language-bash",children:'git config --global user.name "John Doe"\ngit config --global user.email johndoe@example.com\n'})}),"\n",(0,n.jsxs)(i.p,{children:["See the ",(0,n.jsx)(i.a,{href:"https://git-scm.com/book/en/v2/Getting-Started-First-Time-Git-Setup",children:"Git Book"})," for more first-time setup options."]}),"\n",(0,n.jsx)(i.h2,{id:"setting-up-solbuild",children:"Setting up solbuild"}),"\n",(0,n.jsxs)(i.p,{children:["The ",(0,n.jsx)(i.code,{children:"solbuild"})," tool must first be initialized with a base image. All builds thereafter will use this as a base, and construct a temporary overlay root to save on time and disk space in builds."]}),"\n",(0,n.jsx)(i.p,{children:"Initialize solbuild via:"}),"\n",(0,n.jsx)(i.pre,{children:(0,n.jsx)(i.code,{className:"language-bash",children:"sudo solbuild init\n"})}),"\n",(0,n.jsx)(i.p,{children:"This will take some time as it downloads and prepares the image."}),"\n",(0,n.jsx)(i.h3,{id:"updating-solbuild",children:"Updating solbuild"}),"\n",(0,n.jsx)(i.p,{children:"It is a good idea to keep the base image updated. It will help reduce build times by not having to repeatedly download updates to packages in the base image, and will strictly need to pull down the packages your build needs."}),"\n",(0,n.jsx)(i.p,{children:"To update solbuild, run:"}),"\n",(0,n.jsx)(i.pre,{children:(0,n.jsx)(i.code,{className:"language-bash",children:"sudo solbuild update\n"})}),"\n",(0,n.jsx)(i.h2,{id:"fork-the-getsoluspackages-repository",children:"Fork the getsolus/packages repository"}),"\n",(0,n.jsxs)(i.p,{children:["Create your own fork of ",(0,n.jsx)(i.a,{href:"https://github.com/getsolus/packages",children:"getsolus/packages"})," using the GitHub web UI or ",(0,n.jsxs)(i.a,{href:"https://cli.github.com/manual/gh_repo_fork",children:[(0,n.jsx)(i.code,{children:"gh"})," cli tool"]})," from the ",(0,n.jsx)(i.code,{children:"github-cli"})," package. It will be forked to ",(0,n.jsx)(i.code,{children:"github.com/yourgithubaccount/packages"}),"."]}),"\n",(0,n.jsx)(i.h2,{id:"clone-your-forked-package-repository",children:"Clone your forked package repository"}),"\n",(0,n.jsxs)(i.p,{children:["Create a local clone of the package repository you just forked. Here we are using the name ",(0,n.jsx)(i.code,{children:"solus-packages"})," and cloning it into our home directoy. The rest of the documentation will presume this structure. You can choose a different name and path but will have to make sure to replace it in every command that refers to the ",(0,n.jsx)(i.code,{children:"solus-packages"})," directory."]}),"\n",(0,n.jsx)(i.pre,{children:(0,n.jsx)(i.code,{className:"language-bash",children:"gh repo clone packages ~/solus-packages\n"})}),"\n",(0,n.jsx)(i.h2,{id:"initialize-git-hooks",children:"Initialize git hooks"}),"\n",(0,n.jsx)(i.p,{children:"Initialize Git hooks for working with the repository by running:"}),"\n",(0,n.jsx)(i.pre,{children:(0,n.jsx)(i.code,{children:"go-task -d ~/solus-packages init\n"})}),"\n",(0,n.jsx)(i.p,{children:"This makes it easy to create commits in the correct format, and will warn you about issues with changes you commit."}),"\n",(0,n.jsx)(i.h2,{id:"set-up-repository-helper-functions-optional",children:"Set up repository helper functions (optional)"}),"\n",(0,n.jsx)(i.p,{children:"The helper functions are a collection of shell scripts that help you navigate the packages repository more quickly, and perform some specialized searches."}),"\n",(0,n.jsx)(i.p,{children:"After cloning your repository, create a symlink to source the helper functions for your shell. Then, start a new instance of the shell."}),"\n",(0,n.jsx)(i.h3,{id:"bash",children:"bash"}),"\n",(0,n.jsx)(i.pre,{children:(0,n.jsx)(i.code,{className:"language-bash",children:"mkdir -p ~/.bashrc.d\nln -s ~/solus-packages/common/Scripts/helpers.sh ~/.bashrc.d/solus-monorepo-helpers.sh\n"})}),"\n",(0,n.jsx)(i.h3,{id:"fish",children:"fish"}),"\n",(0,n.jsx)(i.pre,{children:(0,n.jsx)(i.code,{className:"language-bash",children:"mkdir -p ~/.config/fish/conf.d\nln -s ~/solus-packages/common/Scripts/helpers.fish ~/.config/fish/conf.d/solus.fish\n"})}),"\n",(0,n.jsx)(i.h3,{id:"zsh",children:"zsh"}),"\n",(0,n.jsx)(i.pre,{children:(0,n.jsx)(i.code,{className:"language-bash",children:'mkdir -p ~/.zshrc.d\nprintf "\\nfpath=(~/.zshrc.d \\$fpath)" >> ~/.zshrc\nsource ~/.zshrc\nln -s ~/solus-packages/common/Scripts/helpers.zsh ~/.zshrc.d/solus-monorepo-helpers.zsh\n'})}),"\n",(0,n.jsx)(i.hr,{}),"\n",(0,n.jsx)(i.p,{children:"You should now have the following available from your shell:"}),"\n",(0,n.jsxs)(i.table,{children:[(0,n.jsx)(i.thead,{children:(0,n.jsxs)(i.tr,{children:[(0,n.jsx)(i.th,{children:"Function"}),(0,n.jsx)(i.th,{children:"Description"}),(0,n.jsx)(i.th,{children:"Usage"})]})}),(0,n.jsxs)(i.tbody,{children:[(0,n.jsxs)(i.tr,{children:[(0,n.jsx)(i.td,{children:(0,n.jsx)(i.strong,{children:"cpesearch"})}),(0,n.jsxs)(i.td,{children:["Search for CPE Names for packages. For use when writing the ",(0,n.jsx)(i.a,{href:"/docs/packaging/monitoring.yml",children:(0,n.jsx)(i.code,{children:"monitoring.yml"})})," file for a package"]}),(0,n.jsx)(i.td,{children:(0,n.jsx)(i.code,{children:"cpesearch search-term"})})]}),(0,n.jsxs)(i.tr,{children:[(0,n.jsx)(i.td,{children:(0,n.jsx)(i.strong,{children:"goroot"})}),(0,n.jsx)(i.td,{children:"When in the Solus packages repository, change directory to the root directory."}),(0,n.jsx)(i.td,{children:(0,n.jsx)(i.code,{children:"goroot"})})]}),(0,n.jsxs)(i.tr,{children:[(0,n.jsx)(i.td,{children:(0,n.jsx)(i.strong,{children:"gotopkg"})}),(0,n.jsxs)(i.td,{children:["Change directory to any Solus package. You can type part of the package name then double press ",(0,n.jsx)(i.code,{children:"Tab"})," to get autocompletion for this function."]}),(0,n.jsx)(i.td,{children:(0,n.jsx)(i.code,{children:"gotopkg firefox"})})]}),(0,n.jsxs)(i.tr,{children:[(0,n.jsx)(i.td,{children:(0,n.jsx)(i.strong,{children:"gotosoluspkgs"})}),(0,n.jsx)(i.td,{children:"Change directory to the Solus packages repository from anywhere on the filesystem."}),(0,n.jsx)(i.td,{children:(0,n.jsx)(i.code,{children:"gotosoluspkgs"})})]}),(0,n.jsxs)(i.tr,{children:[(0,n.jsx)(i.td,{children:(0,n.jsx)(i.strong,{children:"whatprovides"})}),(0,n.jsxs)(i.td,{children:["Find out what package provides a library by reading the ",(0,n.jsx)(i.code,{children:"abi_libs"})," files."]}),(0,n.jsx)(i.td,{children:(0,n.jsx)(i.code,{children:"whatprovides libfoobar.so.1"})})]}),(0,n.jsxs)(i.tr,{children:[(0,n.jsx)(i.td,{children:(0,n.jsx)(i.strong,{children:"whatuses"})}),(0,n.jsxs)(i.td,{children:["Find out what packages use a library by reading the ",(0,n.jsx)(i.code,{children:"abi_used_libs"})," files."]}),(0,n.jsx)(i.td,{children:(0,n.jsx)(i.code,{children:"whatuses libfoobar.so.1"})})]})]})]}),"\n",(0,n.jsx)(i.h2,{id:"building-packages",children:"Building packages"}),"\n",(0,n.jsxs)(i.p,{children:["Your system is now set up for package work.\nIf you are new to packaging, see ",(0,n.jsx)(i.a,{href:"/docs/packaging/your-first-package-update",children:"Your First Package Update"}),"."]})]})}function h(e={}){let{wrapper:i}={...(0,o.a)(),...e.components};return i?(0,n.jsx)(i,{...e,children:(0,n.jsx)(d,{...e})}):d(e)}},50065:function(e,i,s){s.d(i,{Z:function(){return a},a:function(){return r}});var t=s(67294);let n={},o=t.createContext(n);function r(e){let i=t.useContext(o);return t.useMemo(function(){return"function"==typeof e?e(i):{...i,...e}},[i,e])}function a(e){let i;return i=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:r(e.components),t.createElement(o.Provider,{value:i},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/528b6a6b.ddf2f8d1.js b/assets/js/528b6a6b.ddf2f8d1.js new file mode 100644 index 000000000..68dfdbc58 --- /dev/null +++ b/assets/js/528b6a6b.ddf2f8d1.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([["9492"],{87049:function(e,s,t){t.r(s),t.d(s,{metadata:()=>r,contentTitle:()=>i,default:()=>c,assets:()=>u,toc:()=>l,frontMatter:()=>o});var r=JSON.parse('{"id":"user/software/utilities/ksysguard","title":"KSysGuard","description":"KSysGuard, also known as KDE System Guard and KDE System Monitor, is designed to make simple process control available to a user without needing to do any special setup.","source":"@site/docs/user/software/utilities/ksysguard.md","sourceDirName":"user/software/utilities","slug":"/user/software/utilities/ksysguard","permalink":"/docs/user/software/utilities/ksysguard","draft":false,"unlisted":false,"editUrl":"https://github.com/getsolus/help-center-docs/tree/master/docs/user/software/utilities/ksysguard.md","tags":[],"version":"current","lastUpdatedAt":1733757592000,"frontMatter":{"title":"KSysGuard","summary":"Quick Start guide to KSysGuard on Solus"},"sidebar":"userSidebar","previous":{"title":"Utilities","permalink":"/docs/category/utilities"},"next":{"title":"KDE Wallet","permalink":"/docs/user/software/utilities/kwallet"}}'),a=t("85893"),n=t("50065");let o={title:"KSysGuard",summary:"Quick Start guide to KSysGuard on Solus"},i="KSysGuard",u={},l=[{value:"Installation",id:"installation",level:2},{value:"Use KSysGuard as a non-root user",id:"use-ksysguard-as-a-non-root-user",level:2},{value:"Usage",id:"usage",level:2}];function d(e){let s={a:"a",code:"code",h1:"h1",h2:"h2",header:"header",p:"p",pre:"pre",...(0,n.a)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(s.header,{children:(0,a.jsx)(s.h1,{id:"ksysguard",children:"KSysGuard"})}),"\n",(0,a.jsxs)(s.p,{children:[(0,a.jsx)(s.a,{href:"https://userbase.kde.org/KSysGuard",children:"KSysGuard"}),", also known as KDE System Guard and KDE System Monitor, is designed to make simple process control available to a user without needing to do any special setup."]}),"\n",(0,a.jsx)(s.h2,{id:"installation",children:"Installation"}),"\n",(0,a.jsx)(s.p,{children:"KSysGuard is usually installed as part of the KDE Plasma Desktop environment, but can be installed from the Software Center or via terminal:"}),"\n",(0,a.jsx)(s.pre,{children:(0,a.jsx)(s.code,{className:"language-bash",children:"sudo eopkg it ksysguard\n"})}),"\n",(0,a.jsx)(s.h2,{id:"use-ksysguard-as-a-non-root-user",children:"Use KSysGuard as a non-root user"}),"\n",(0,a.jsx)(s.p,{children:"The per process networking plugin requires elevated access to your system. To enable the plugin as non-root user, execute these commands:"}),"\n",(0,a.jsx)(s.pre,{children:(0,a.jsx)(s.code,{className:"language-bash",children:'sudo setcap "CAP_NET_RAW=+ep" "/usr/lib64/kf5/ksysguard/ksgrd_network_helper"\n'})}),"\n",(0,a.jsx)(s.h2,{id:"usage",children:"Usage"}),"\n",(0,a.jsxs)(s.p,{children:["KSysGuard ",(0,a.jsx)(s.a,{href:"https://userbase.kde.org/KSysGuard",children:"User\u2019s Guide"})," or the KDE Help Centre (open khelp on your Plasma Desktop)."]})]})}function c(e={}){let{wrapper:s}={...(0,n.a)(),...e.components};return s?(0,a.jsx)(s,{...e,children:(0,a.jsx)(d,{...e})}):d(e)}},50065:function(e,s,t){t.d(s,{Z:function(){return i},a:function(){return o}});var r=t(67294);let a={},n=r.createContext(a);function o(e){let s=r.useContext(n);return r.useMemo(function(){return"function"==typeof e?e(s):{...s,...e}},[s,e])}function i(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:o(e.components),r.createElement(n.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/528b6a6b.f7c0a1da.js b/assets/js/528b6a6b.f7c0a1da.js deleted file mode 100644 index 04b6fc7d0..000000000 --- a/assets/js/528b6a6b.f7c0a1da.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[7822],{61661:(e,s,t)=>{t.r(s),t.d(s,{assets:()=>u,contentTitle:()=>o,default:()=>c,frontMatter:()=>n,metadata:()=>i,toc:()=>l});var r=t(85893),a=t(11151);const n={title:"KSysGuard",summary:"Quick Start guide to KSysGuard on Solus"},o="KSysGuard",i={id:"user/software/utilities/ksysguard",title:"KSysGuard",description:"KSysGuard, also known as KDE System Guard and KDE System Monitor, is designed to make simple process control available to a user without needing to do any special setup.",source:"@site/docs/user/software/utilities/ksysguard.md",sourceDirName:"user/software/utilities",slug:"/user/software/utilities/ksysguard",permalink:"/docs/user/software/utilities/ksysguard",draft:!1,unlisted:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/software/utilities/ksysguard.md",tags:[],version:"current",lastUpdatedAt:1732716912e3,frontMatter:{title:"KSysGuard",summary:"Quick Start guide to KSysGuard on Solus"},sidebar:"userSidebar",previous:{title:"Utilities",permalink:"/docs/category/utilities"},next:{title:"KDE Wallet",permalink:"/docs/user/software/utilities/kwallet"}},u={},l=[{value:"Installation",id:"installation",level:2},{value:"Use KSysGuard as a non-root user",id:"use-ksysguard-as-a-non-root-user",level:2},{value:"Usage",id:"usage",level:2}];function d(e){const s={a:"a",code:"code",h1:"h1",h2:"h2",header:"header",p:"p",pre:"pre",...(0,a.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(s.header,{children:(0,r.jsx)(s.h1,{id:"ksysguard",children:"KSysGuard"})}),"\n",(0,r.jsxs)(s.p,{children:[(0,r.jsx)(s.a,{href:"https://userbase.kde.org/KSysGuard",children:"KSysGuard"}),", also known as KDE System Guard and KDE System Monitor, is designed to make simple process control available to a user without needing to do any special setup."]}),"\n",(0,r.jsx)(s.h2,{id:"installation",children:"Installation"}),"\n",(0,r.jsx)(s.p,{children:"KSysGuard is usually installed as part of the KDE Plasma Desktop environment, but can be installed from the Software Center or via terminal:"}),"\n",(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-bash",children:"sudo eopkg it ksysguard\n"})}),"\n",(0,r.jsx)(s.h2,{id:"use-ksysguard-as-a-non-root-user",children:"Use KSysGuard as a non-root user"}),"\n",(0,r.jsx)(s.p,{children:"The per process networking plugin requires elevated access to your system. To enable the plugin as non-root user, execute these commands:"}),"\n",(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-bash",children:'sudo setcap "CAP_NET_RAW=+ep" "/usr/lib64/kf5/ksysguard/ksgrd_network_helper"\n'})}),"\n",(0,r.jsx)(s.h2,{id:"usage",children:"Usage"}),"\n",(0,r.jsxs)(s.p,{children:["KSysGuard ",(0,r.jsx)(s.a,{href:"https://userbase.kde.org/KSysGuard",children:"User\u2019s Guide"})," or the KDE Help Centre (open khelp on your Plasma Desktop)."]})]})}function c(e={}){const{wrapper:s}={...(0,a.a)(),...e.components};return s?(0,r.jsx)(s,{...e,children:(0,r.jsx)(d,{...e})}):d(e)}},11151:(e,s,t)=>{t.d(s,{Z:()=>i,a:()=>o});var r=t(67294);const a={},n=r.createContext(a);function o(e){const s=r.useContext(n);return r.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function i(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:o(e.components),r.createElement(n.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/533eefa9.13c88c49.js b/assets/js/533eefa9.13c88c49.js new file mode 100644 index 000000000..57c00963a --- /dev/null +++ b/assets/js/533eefa9.13c88c49.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([["6813"],{64176:function(e,i,n){n.r(i),n.d(i,{metadata:()=>s,contentTitle:()=>o,default:()=>c,assets:()=>d,toc:()=>a,frontMatter:()=>r});var s=JSON.parse('{"id":"user/quick-start/installation/index","title":"Preparing to Install","description":"Before you start, make sure your system meets the minimum requirements.","source":"@site/docs/user/quick-start/installation/index.md","sourceDirName":"user/quick-start/installation","slug":"/user/quick-start/installation/","permalink":"/docs/user/quick-start/installation/","draft":false,"unlisted":false,"editUrl":"https://github.com/getsolus/help-center-docs/tree/master/docs/user/quick-start/installation/index.md","tags":[],"version":"current","lastUpdatedAt":1733757592000,"frontMatter":{"title":"Preparing to Install","summary":"Installation Guide for multiple operating systems"},"sidebar":"userSidebar","previous":{"title":"Default Applications","permalink":"/docs/user/quick-start/default-applications"},"next":{"title":"Disk Partitioning","permalink":"/docs/user/quick-start/installation/disks"}}'),t=n("85893"),l=n("50065");let r={title:"Preparing to Install",summary:"Installation Guide for multiple operating systems"},o="Preparing to install",d={},a=[{value:"Getting the ISO",id:"getting-the-iso",level:2},{value:"Verifying the ISO",id:"verifying-the-iso",level:2},{value:"Linux and macOS",id:"linux-and-macos",level:3},{value:"Verifying the SHA256SUMS file signature",id:"verifying-the-sha256sums-file-signature",level:4},{value:"Verifying the ISO checksum",id:"verifying-the-iso-checksum",level:4},{value:"Windows",id:"windows",level:3},{value:"Verifying signed SHA256SUM file",id:"verifying-signed-sha256sum-file",level:4},{value:"Verifying the ISO checksum",id:"verifying-the-iso-checksum-1",level:4},{value:"Creating bootable media",id:"creating-bootable-media",level:2},{value:"Linux",id:"linux",level:3},{value:"DVD",id:"dvd",level:4},{value:"USB",id:"usb",level:4},{value:"GNOME MultiWriter",id:"gnome-multiwriter",level:5},{value:"KDE ISO Image Writer",id:"kde-iso-image-writer",level:4},{value:"Command-line",id:"command-line",level:5},{value:"Windows",id:"windows-1",level:3},{value:"DVD",id:"dvd-1",level:4},{value:"USB",id:"usb-1",level:4},{value:"macOS",id:"macos",level:3},{value:"DVD",id:"dvd-2",level:4},{value:"USB",id:"usb-2",level:4},{value:"Graphical tool",id:"graphical-tool",level:5},{value:"Command-line",id:"command-line-1",level:5},{value:"Boot the media",id:"boot-the-media",level:2}];function h(e){let i={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",h4:"h4",h5:"h5",header:"header",img:"img",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",...(0,l.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(i.header,{children:(0,t.jsx)(i.h1,{id:"preparing-to-install",children:"Preparing to install"})}),"\n",(0,t.jsxs)(i.p,{children:["Before you start, make sure your system meets the ",(0,t.jsx)(i.a,{href:"/docs/user/quick-start/installation/system-requirements",children:"minimum requirements"}),"."]}),"\n",(0,t.jsx)(i.p,{children:"The first step to installing Solus is getting the correct media. The Solus Project provides ISO images, which contain the contents of Solus for installing."}),"\n",(0,t.jsx)(i.h2,{id:"getting-the-iso",children:"Getting the ISO"}),"\n",(0,t.jsxs)(i.p,{children:["Download a Solus ISO by going to our ",(0,t.jsx)(i.a,{href:"https://getsol.us/download",children:"Download page"})," and picking an edition."]}),"\n",(0,t.jsx)(i.h2,{id:"verifying-the-iso",children:"Verifying the ISO"}),"\n",(0,t.jsx)(i.h3,{id:"linux-and-macos",children:"Linux and macOS"}),"\n",(0,t.jsxs)(i.p,{children:["Download the SHA256SUMS files for your chosen ISO edition: ",(0,t.jsx)(i.em,{children:"File"}),", ",(0,t.jsx)(i.em,{children:"Signed File"})," and ",(0,t.jsx)(i.em,{children:"Public Key"})," from the links next to the ",(0,t.jsx)(i.em,{children:"Download"})," buttons on our ",(0,t.jsx)(i.a,{href:"https://getsol.us/download",children:"Download page"}),"."]}),"\n",(0,t.jsxs)(i.p,{children:[(0,t.jsx)(i.strong,{children:"Note:"})," You should download all these files to the same directory."]}),"\n",(0,t.jsx)(i.h4,{id:"verifying-the-sha256sums-file-signature",children:"Verifying the SHA256SUMS file signature"}),"\n",(0,t.jsx)(i.p,{children:"Import the Solus public key:"}),"\n",(0,t.jsx)(i.pre,{children:(0,t.jsx)(i.code,{className:"language-bash",children:"cd ~/path/to/download/directory\ngpg --import solus-releng-pub.gpg\n"})}),"\n",(0,t.jsx)(i.p,{children:"Verify the signed checksum file:"}),"\n",(0,t.jsx)(i.pre,{children:(0,t.jsx)(i.code,{className:"language-bash",children:"gpg --verify Solus-Budgie-Release-2024-10-14.iso.sha256sum.sign Solus-Budgie-Release-2024-10-14.iso.sha256sum\n"})}),"\n",(0,t.jsx)(i.h4,{id:"verifying-the-iso-checksum",children:"Verifying the ISO checksum"}),"\n",(0,t.jsx)(i.p,{children:"Check that the computed hash of the downloaded ISO file matches the hash supplied by Solus:"}),"\n",(0,t.jsx)(i.pre,{children:(0,t.jsx)(i.code,{className:"language-bash",children:"sha256sum -c Solus-Budgie-Release-2024-10-14.iso.sha256sum | grep OK\n"})}),"\n",(0,t.jsx)(i.h3,{id:"windows",children:"Windows"}),"\n",(0,t.jsx)(i.h4,{id:"verifying-signed-sha256sum-file",children:"Verifying signed SHA256SUM file"}),"\n",(0,t.jsxs)(i.p,{children:["On Windows, first install ",(0,t.jsx)(i.a,{href:"https://www.gpg4win.org/",children:"Gpg4win"}),"."]}),"\n",(0,t.jsxs)(i.p,{children:["Now you can run the same ",(0,t.jsx)(i.code,{children:"gpg"})," commands from the the ",(0,t.jsx)(i.a,{href:"/docs/user/quick-start/installation/#verifying-the-sha256sums-file-signature",children:(0,t.jsx)(i.em,{children:"Verifyng the SHA256SUMS file signature"})})," section above."]}),"\n",(0,t.jsx)(i.h4,{id:"verifying-the-iso-checksum-1",children:"Verifying the ISO checksum"}),"\n",(0,t.jsx)(i.p,{children:"Launch powershell and compute the hash of the ISO file you just downloaded. You will have to manually compare the result to the hash in the SHA256SUMS file."}),"\n",(0,t.jsx)(i.pre,{children:(0,t.jsx)(i.code,{className:"language-powershell",children:"Get-FileHash C:\\path\\to\\Solus-Budgie-Release-2024-10-14.iso\ncat C:\\path\\to\\Solus-Budgie-Release-2024-10-14.iso.sha256sum\n"})}),"\n",(0,t.jsxs)(i.p,{children:["Alternatively, you can use a graphical program that can calculate SHA256 hashes like ",(0,t.jsx)(i.em,{children:"Rufus"})," or ",(0,t.jsx)(i.em,{children:"7-Zip"}),"."]}),"\n",(0,t.jsx)(i.h2,{id:"creating-bootable-media",children:"Creating bootable media"}),"\n",(0,t.jsx)(i.p,{children:"To make boot media, you will need:"}),"\n",(0,t.jsxs)(i.ol,{children:["\n",(0,t.jsx)(i.li,{children:"Either a blank DVD or a USB drive larger than 2 GB."}),"\n",(0,t.jsx)(i.li,{children:"If using a USB, the ability to boot from the USB."}),"\n",(0,t.jsxs)(i.li,{children:["ISO file from the ",(0,t.jsx)(i.a,{href:"#getting-the-iso",children:"Getting the ISO"})," section."]}),"\n"]}),"\n",(0,t.jsx)(i.p,{children:"There are many tools which can write our ISO image to DVDs or USB thumb drives. Chose from an option below."}),"\n",(0,t.jsx)(i.h3,{id:"linux",children:"Linux"}),"\n",(0,t.jsx)(i.h4,{id:"dvd",children:"DVD"}),"\n",(0,t.jsxs)(i.p,{children:["We recommend using ",(0,t.jsx)(i.a,{href:"https://wiki.gnome.org/Apps/Brasero",children:"Brasero"})," for writing the ISO to a DVD."]}),"\n",(0,t.jsxs)(i.ol,{children:["\n",(0,t.jsx)(i.li,{children:"Insert blank DVD (DVD-R or DVD+RW is suitable) into your DVD writer."}),"\n",(0,t.jsx)(i.li,{children:"Open Brasero."}),"\n",(0,t.jsx)(i.li,{children:"Select the option \u201CBurn image\u201D."}),"\n",(0,t.jsx)(i.li,{children:"Click the \u201CClick here to select a disc image\u201D button and using the file dialog, choose the ISO."}),"\n",(0,t.jsx)(i.li,{children:"Ensure the correct DVD is selected in the \u201CSelect a disc to write to\u201D."}),"\n",(0,t.jsx)(i.li,{children:'Click "Burn" and wait.'}),"\n",(0,t.jsx)(i.li,{children:'Upon seeing \u201CImage successfully burned to DVD\u201D, click "Close".'}),"\n"]}),"\n",(0,t.jsx)(i.h4,{id:"usb",children:"USB"}),"\n",(0,t.jsxs)(i.p,{children:["We recommend using ",(0,t.jsx)(i.a,{href:"https://wiki.gnome.org/Apps/MultiWriter",children:"GNOME MultiWriter"})," or ",(0,t.jsx)(i.a,{href:"https://apps.kde.org/isoimagewriter/",children:"ISO Image Writer"})," for KDE. Please note that UNetbootin will ",(0,t.jsx)(i.strong,{children:"not"})," work."]}),"\n",(0,t.jsx)(i.h5,{id:"gnome-multiwriter",children:"GNOME MultiWriter"}),"\n",(0,t.jsx)(i.p,{children:"Upon opening GNOME MultiWriter, you will likely be shown a window similar to the one below, if your USB drive is already plugged in and mounted."}),"\n",(0,t.jsx)(i.admonition,{type:"warning",children:(0,t.jsxs)(i.p,{children:["The ISO image will be written to ",(0,t.jsx)(i.em,{children:"all mounted USB drives"}),". Ensure that the only USB drive that is connected is the one you wish to write the ISO to."]})}),"\n",(0,t.jsx)(i.p,{children:(0,t.jsx)(i.img,{alt:"MultiWriter Start",src:n(9581).Z+"",width:"706",height:"156"})}),"\n",(0,t.jsx)(i.p,{children:"If your USB drive is not mounted, you will be prompted with an image indicating to plug it in."}),"\n",(0,t.jsx)(i.p,{children:'Next, click the "Start Copying" button, and you will be prompted to select the ISO. Choose the ISO you downloaded in the "Getting the ISO" section. The USB will automatically be written to.'}),"\n",(0,t.jsx)(i.p,{children:(0,t.jsx)(i.img,{alt:"MultiWriter Writing",src:n(65870).Z+"",width:"706",height:"156"})}),"\n",(0,t.jsx)(i.p,{children:"Upon completion, you will be prompted with the following dialog and your USB is now ready for use."}),"\n",(0,t.jsx)(i.p,{children:(0,t.jsx)(i.img,{alt:"MultiWriter Done",src:n(65492).Z+"",width:"706",height:"156"})}),"\n",(0,t.jsx)(i.h4,{id:"kde-iso-image-writer",children:"KDE ISO Image Writer"}),"\n",(0,t.jsx)(i.admonition,{type:"info",children:(0,t.jsx)(i.p,{children:"You will need both the ISO and sha256sums file for it saved in the same directory."})}),"\n",(0,t.jsx)(i.p,{children:"When you open ISO Image Writer, you will see a window similar to the one below, if your USB drive is already plugged in and mounted."}),"\n",(0,t.jsx)(i.p,{children:(0,t.jsx)(i.img,{alt:"ImageWriter Start",src:n(74071).Z+"",width:"585",height:"446"})}),"\n",(0,t.jsx)(i.p,{children:"If there is no USB drive mounted, the USB drive field will be greyed out. Simply plug in the USB drive you want to use for the ISO, it will be auto-detected."}),"\n",(0,t.jsx)(i.p,{children:'Click on the top field "Write this ISO image:". Select the ISO image you downloaded in the "Getting the ISO" section.'}),"\n",(0,t.jsx)(i.p,{children:'You may see "Downloading ISO image". When this is done, click the Create button.'}),"\n",(0,t.jsx)(i.p,{children:(0,t.jsx)(i.img,{alt:"ImageWriter Writing",src:n(64595).Z+"",width:"551",height:"430"})}),"\n",(0,t.jsx)(i.p,{children:"When the operation is finished, you will see the confirmation dialog. Your USB is now ready for use."}),"\n",(0,t.jsx)(i.p,{children:(0,t.jsx)(i.img,{alt:"ImageWriter Done",src:n(56443).Z+"",width:"585",height:"446"})}),"\n",(0,t.jsx)(i.h5,{id:"command-line",children:"Command-line"}),"\n",(0,t.jsxs)(i.p,{children:["For those comfortable with the command-line / terminal, we will walk you through using ",(0,t.jsx)(i.code,{children:"dd"}),"."]}),"\n",(0,t.jsxs)(i.p,{children:["First, insert the USB drive into your computer and open your Terminal. Proceed to type ",(0,t.jsx)(i.code,{children:"lsblk"})," into your Terminal. It should output something along the lines of:"]}),"\n",(0,t.jsx)(i.pre,{children:(0,t.jsx)(i.code,{className:"language-bash",children:"NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT\nsda 8:0 0 111.8G 0 disk\n\u251C\u2500sda1 8:1 0 350M 0 part\n\u251C\u2500sda2 8:2 0 39.7G 0 part\n\u2514\u2500sda3 8:3 0 71.8G 0 part /\nsdb 8:64 1 7.5G 0 disk\n\u251C\u2500sdb1 8:65 1 712M 0 part\n\u2514\u2500sdb2 8:66 1 17.2M 0 part\n"})}),"\n",(0,t.jsxs)(i.p,{children:["You will see one disk, in this case ",(0,t.jsx)(i.code,{children:"/dev/sdb"}),", that is roughly the size of the USB drive. Yours should be similar (difference being in size). Write this device down somewhere."]}),"\n",(0,t.jsxs)(i.p,{children:["Next, locate the downloaded ISO. It will most likely be in your Downloads folder. In the event that it is, type: ",(0,t.jsx)(i.code,{children:"cd ~/Downloads"})]}),"\n",(0,t.jsxs)(i.p,{children:["If it is ",(0,t.jsx)(i.strong,{children:"not"})," in your Downloads folder, use ",(0,t.jsx)(i.code,{children:"cd"})," to navigate to the correct directory."]}),"\n",(0,t.jsx)(i.admonition,{type:"danger",children:(0,t.jsxs)(i.p,{children:["This is where we overwrite the contents of your USB drive so please ensure you identified the correct drive in the ",(0,t.jsx)(i.code,{children:"lsblk"})," stage above. Selecting the wrong drive here will lead to its contents being overwritten. An example command is below, however you may need to replace ",(0,t.jsx)(i.code,{children:"sdb"})," with the drive we located above:"]})}),"\n",(0,t.jsx)(i.pre,{children:(0,t.jsx)(i.code,{className:"language-bash",children:"sudo dd if=Solus-Budgie-Release-2024-10-14.iso of=/dev/sdb bs=4M status=progress oflag=sync && sudo eject /dev/sdb\n"})}),"\n",(0,t.jsx)(i.p,{children:"This will write the contents of the ISO to the thumb drive so you can boot it and also make sure the data is synchronized so you can eject the USB safely."}),"\n",(0,t.jsx)(i.h3,{id:"windows-1",children:"Windows"}),"\n",(0,t.jsx)(i.h4,{id:"dvd-1",children:"DVD"}),"\n",(0,t.jsx)(i.p,{children:"You can easily burn an ISO image to a DVD, on Windows 7 and newer, by using Window's built-in file manager (Explorer)."}),"\n",(0,t.jsxs)(i.ol,{children:["\n",(0,t.jsx)(i.li,{children:"Open Windows' built-in file manager (Explorer)."}),"\n",(0,t.jsx)(i.li,{children:'Right click on the ISO image file and click "Burn disk image".'}),"\n",(0,t.jsx)(i.li,{children:"Select the correct disc burner."}),"\n",(0,t.jsx)(i.li,{children:'Click "Burn".'}),"\n"]}),"\n",(0,t.jsx)(i.h4,{id:"usb-1",children:"USB"}),"\n",(0,t.jsxs)(i.p,{children:["You can easily burn an ISO image to a USB by using graphical tool ",(0,t.jsx)(i.a,{href:"https://rufus.ie/",children:"Rufus"}),"."]}),"\n",(0,t.jsxs)(i.ol,{children:["\n",(0,t.jsx)(i.li,{children:"Open Rufus."}),"\n",(0,t.jsx)(i.li,{children:"Ensure your device is correct by checking the contents of the Device dropdown."}),"\n",(0,t.jsx)(i.li,{children:"Click the CD icon found in the image below, and select the ISO."}),"\n",(0,t.jsx)(i.li,{children:'Untick all options except "Create a bootable disk using" and use the dropdown to select "DD Image".'}),"\n",(0,t.jsx)(i.li,{children:'Click "Start".'}),"\n"]}),"\n",(0,t.jsx)(i.p,{children:(0,t.jsx)(i.img,{alt:"Rufus",src:n(3259).Z+"",width:"365",height:"518"})}),"\n",(0,t.jsx)(i.h3,{id:"macos",children:"macOS"}),"\n",(0,t.jsx)(i.h4,{id:"dvd-2",children:"DVD"}),"\n",(0,t.jsx)(i.p,{children:"Since OS X El Capitan (10.11), the easiest way to burn a DVD is:"}),"\n",(0,t.jsxs)(i.ol,{children:["\n",(0,t.jsx)(i.li,{children:"Insert your DVD and open Finder."}),"\n",(0,t.jsx)(i.li,{children:"Right click on the ISO image."}),"\n",(0,t.jsx)(i.li,{children:"Click on \u201CBurn Disk Image \u2018Solus-Budgie-Release-2024-10-14.iso\u2019 to Disc\u2026\u201D"}),"\n",(0,t.jsx)(i.li,{children:"Then click \u201CBurn\u201D."}),"\n"]}),"\n",(0,t.jsx)(i.p,{children:(0,t.jsx)(i.img,{alt:"macOS Burn DVD",src:n(87340).Z+"",width:"638",height:"343"})}),"\n",(0,t.jsx)(i.h4,{id:"usb-2",children:"USB"}),"\n",(0,t.jsx)(i.h5,{id:"graphical-tool",children:"Graphical tool"}),"\n",(0,t.jsxs)(i.p,{children:["One of the easiest ways to burn an ISO image to a USB thumb drive is by using a graphical tool called ",(0,t.jsx)(i.a,{href:"https://etcher.balena.io/",children:"Etcher"}),"."]}),"\n",(0,t.jsxs)(i.ol,{children:["\n",(0,t.jsx)(i.li,{children:"Open Etcher."}),"\n",(0,t.jsx)(i.li,{children:"Click on \u201CSelect image\u201D and then select the ISO and click \u201COpen\u201D."}),"\n",(0,t.jsx)(i.li,{children:"Etcher will automatically select your USB drive. If it has selected the wrong one, click \u201CChange\u201D and select the correct one."}),"\n",(0,t.jsx)(i.li,{children:"Click \u201CFlash!\u201D."}),"\n",(0,t.jsx)(i.li,{children:"You may be prompted for your macOS user password."}),"\n",(0,t.jsx)(i.li,{children:"Once Etcher has finished it is safe to remove the USB drive."}),"\n"]}),"\n",(0,t.jsx)(i.p,{children:"You may see a message stating \u201CThe disk you inserted was not readable by this computer.\u201D once Etcher finishes. This can be ignored."}),"\n",(0,t.jsx)(i.p,{children:(0,t.jsx)(i.img,{alt:"macOS Etcher",src:n(61575).Z+"",width:"800",height:"380"})}),"\n",(0,t.jsx)(i.h5,{id:"command-line-1",children:"Command-line"}),"\n",(0,t.jsxs)(i.p,{children:["For those comfortable with the macOS Terminal app, we will walk you through using ",(0,t.jsx)(i.code,{children:"dd"}),"."]}),"\n",(0,t.jsx)(i.p,{children:"First, insert the USB drive into your computer and open Terminal (found in Applications/Utilities)."}),"\n",(0,t.jsx)(i.p,{children:"Now you'll need to identify your USB drive by listing your storage devices with the following command:"}),"\n",(0,t.jsx)(i.pre,{children:(0,t.jsx)(i.code,{className:"language-bash",children:"diskutil list\n"})}),"\n",(0,t.jsx)(i.p,{children:"You should see output similar to this:"}),"\n",(0,t.jsx)(i.pre,{children:(0,t.jsx)(i.code,{className:"language-bash",children:"/dev/disk0 (internal, physical):\n #: TYPE NAME SIZE IDENTIFIER\n 0: GUID_partition_scheme *1.0 TB disk0\n 1: EFI EFI 209.7 MB disk0s1\n 2: Apple_HFS Macintosh HD 999.3 GB disk0s2\n 3: Apple_Boot Recovery HD 650.0 MB disk0s3\n\n/dev/disk1 (external, physical):\n #: TYPE NAME SIZE IDENTIFIER\n 0: GUID_partition_scheme *15.6 GB disk1\n 1: EFI EFI 209.7 MB disk1s1\n 2: Apple_HFS Ultra 15.3 GB disk1s2\n"})}),"\n",(0,t.jsxs)(i.p,{children:["From this output, we can see the USB drive is listed as ",(0,t.jsx)(i.code,{children:"/dev/disk1 (external, physical)"}),". In this example, the IDENTIFIER is ",(0,t.jsx)(i.code,{children:"disk1"}),". Please note, your USB drive may have a different identifier. You should be able to tell which is your USB drive by checking the name and size."]}),"\n",(0,t.jsxs)(i.p,{children:["macOS usually auto-mounts USB drives so you\u2019ll need to unmount it first before proceeding. Use the following command and replace ",(0,t.jsx)(i.code,{children:"IDENTIFIER"})," with the correct identifier we found in the ",(0,t.jsx)(i.code,{children:"diskutil list"})," step."]}),"\n",(0,t.jsx)(i.pre,{children:(0,t.jsx)(i.code,{className:"language-bash",children:"diskutil unmountDisk /dev/IDENTIFIER\n"})}),"\n",(0,t.jsx)(i.p,{children:"Now navigate to the folder that has the downloaded ISO. This could be your Mac\u2019s Downloads folder. The following command will get you there:"}),"\n",(0,t.jsx)(i.pre,{children:(0,t.jsx)(i.code,{className:"language-bash",children:"cd ~/Downloads\n"})}),"\n",(0,t.jsx)(i.admonition,{type:"danger",children:(0,t.jsx)(i.p,{children:(0,t.jsx)(i.strong,{children:"This next step is dangerous. Using the wrong drive identifier could result in data loss."})})}),"\n",(0,t.jsxs)(i.p,{children:["We will use the ",(0,t.jsx)(i.code,{children:"dd"})," command to write the contents of the ISO to the thumb drive. Replace ",(0,t.jsx)(i.code,{children:"IDENTIFIER"})," in the command below with your drive identifier. Note the extra ",(0,t.jsx)(i.code,{children:"r"})," before the identifier (i.e ",(0,t.jsx)(i.code,{children:"rdisk1"}),"). This is for raw mode, which along with bs=1m, makes the transfer faster."]}),"\n",(0,t.jsx)(i.pre,{children:(0,t.jsx)(i.code,{className:"language-bash",children:"sudo dd if=Solus-Budgie-Release-2024-10-14.iso of=/dev/rIDENTIFIER bs=1m\n"})}),"\n",(0,t.jsx)(i.p,{children:"Be patient! After a few minutes you\u2019ll receive a message saying how much data was transferred. You can now safely eject the usb drive."}),"\n",(0,t.jsx)(i.pre,{children:(0,t.jsx)(i.code,{className:"language-bash",children:"diskutil eject /dev/IDENTIFIER\n"})}),"\n",(0,t.jsx)(i.h2,{id:"boot-the-media",children:"Boot the media"}),"\n",(0,t.jsx)(i.p,{children:"Now it is time to restart your computer to boot the DVD or USB. Most computers will automatically boot from DVDs and USB, however if you experience issues booting the media, you may need to select to boot from DVD or USB."}),"\n",(0,t.jsxs)(i.p,{children:["This is usually accessible by pressing ",(0,t.jsx)(i.code,{children:"F9"})," or ",(0,t.jsx)(i.code,{children:"F12"})," while your computer is booting. On some devices it may also be ",(0,t.jsx)(i.code,{children:"ESC"}),"."]}),"\n",(0,t.jsx)(i.p,{children:'Macs will boot to the "Startup Manager" by holding down the Option (Alt) key. The DVD or USB drive will most likely show up as "EFI Boot".'})]})}function c(e={}){let{wrapper:i}={...(0,l.a)(),...e.components};return i?(0,t.jsx)(i,{...e,children:(0,t.jsx)(h,{...e})}):h(e)}},65492:function(e,i,n){n.d(i,{Z:function(){return s}});let s=n.p+"assets/images/gmw_done-fdbb3bda7061afd0ca7f97b85c1cef18.jpg"},9581:function(e,i,n){n.d(i,{Z:function(){return s}});let s=n.p+"assets/images/gmw_start-c8e10b8e6f627b862f8f6344260db698.jpg"},65870:function(e,i,n){n.d(i,{Z:function(){return s}});let s=n.p+"assets/images/gmw_writing-1a2eb065ba3c61dd1371f89b2ab9f7c1.jpg"},74071:function(e,i,n){n.d(i,{Z:function(){return s}});let s=n.p+"assets/images/iiw_1_start-0457fdcee59f063744233653c88022f7.png"},64595:function(e,i,n){n.d(i,{Z:function(){return s}});let s=n.p+"assets/images/iiw_2_writing-61d90705ea2038df803e806657f7e20f.png"},56443:function(e,i,n){n.d(i,{Z:function(){return s}});let s=n.p+"assets/images/iiw_3_done-de4e8501e47d1073f945ae1aceb13995.png"},87340:function(e,i,n){n.d(i,{Z:function(){return s}});let s=n.p+"assets/images/mac-burn-dvd-0bef9578a58d61610854fc7c25e3496f.jpg"},61575:function(e,i,n){n.d(i,{Z:function(){return s}});let s=n.p+"assets/images/mac-etcher-2d28aaeb19eda12c960c6b09e81eceb2.jpg"},3259:function(e,i,n){n.d(i,{Z:function(){return s}});let s=n.p+"assets/images/rufus-6f16a561298400882bff901d61064e58.jpg"},50065:function(e,i,n){n.d(i,{Z:function(){return o},a:function(){return r}});var s=n(67294);let t={},l=s.createContext(t);function r(e){let i=s.useContext(l);return s.useMemo(function(){return"function"==typeof e?e(i):{...i,...e}},[i,e])}function o(e){let i;return i=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:r(e.components),s.createElement(l.Provider,{value:i},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/533eefa9.b522d5bf.js b/assets/js/533eefa9.b522d5bf.js deleted file mode 100644 index 9bca00793..000000000 --- a/assets/js/533eefa9.b522d5bf.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[4002],{99023:(e,i,n)=>{n.r(i),n.d(i,{assets:()=>d,contentTitle:()=>r,default:()=>c,frontMatter:()=>l,metadata:()=>o,toc:()=>a});var s=n(85893),t=n(11151);const l={title:"Preparing to Install",summary:"Installation Guide for multiple operating systems"},r="Preparing to install",o={id:"user/quick-start/installation/index",title:"Preparing to Install",description:"Before you start, make sure your system meets the minimum requirements.",source:"@site/docs/user/quick-start/installation/index.md",sourceDirName:"user/quick-start/installation",slug:"/user/quick-start/installation/",permalink:"/docs/user/quick-start/installation/",draft:!1,unlisted:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/quick-start/installation/index.md",tags:[],version:"current",lastUpdatedAt:1732716912e3,frontMatter:{title:"Preparing to Install",summary:"Installation Guide for multiple operating systems"},sidebar:"userSidebar",previous:{title:"Default Applications",permalink:"/docs/user/quick-start/default-applications"},next:{title:"Disk Partitioning",permalink:"/docs/user/quick-start/installation/disks"}},d={},a=[{value:"Getting the ISO",id:"getting-the-iso",level:2},{value:"Verifying the ISO",id:"verifying-the-iso",level:2},{value:"Linux and macOS",id:"linux-and-macos",level:3},{value:"Verifying the SHA256SUMS file signature",id:"verifying-the-sha256sums-file-signature",level:4},{value:"Verifying the ISO checksum",id:"verifying-the-iso-checksum",level:4},{value:"Windows",id:"windows",level:3},{value:"Verifying signed SHA256SUM file",id:"verifying-signed-sha256sum-file",level:4},{value:"Verifying the ISO checksum",id:"verifying-the-iso-checksum-1",level:4},{value:"Creating bootable media",id:"creating-bootable-media",level:2},{value:"Linux",id:"linux",level:3},{value:"DVD",id:"dvd",level:4},{value:"USB",id:"usb",level:4},{value:"GNOME MultiWriter",id:"gnome-multiwriter",level:5},{value:"KDE ISO Image Writer",id:"kde-iso-image-writer",level:4},{value:"Command-line",id:"command-line",level:5},{value:"Windows",id:"windows-1",level:3},{value:"DVD",id:"dvd-1",level:4},{value:"USB",id:"usb-1",level:4},{value:"macOS",id:"macos",level:3},{value:"DVD",id:"dvd-2",level:4},{value:"USB",id:"usb-2",level:4},{value:"Graphical tool",id:"graphical-tool",level:5},{value:"Command-line",id:"command-line-1",level:5},{value:"Boot the media",id:"boot-the-media",level:2}];function h(e){const i={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",h4:"h4",h5:"h5",header:"header",img:"img",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",...(0,t.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(i.header,{children:(0,s.jsx)(i.h1,{id:"preparing-to-install",children:"Preparing to install"})}),"\n",(0,s.jsxs)(i.p,{children:["Before you start, make sure your system meets the ",(0,s.jsx)(i.a,{href:"/docs/user/quick-start/installation/system-requirements",children:"minimum requirements"}),"."]}),"\n",(0,s.jsx)(i.p,{children:"The first step to installing Solus is getting the correct media. The Solus Project provides ISO images, which contain the contents of Solus for installing."}),"\n",(0,s.jsx)(i.h2,{id:"getting-the-iso",children:"Getting the ISO"}),"\n",(0,s.jsxs)(i.p,{children:["Download a Solus ISO by going to our ",(0,s.jsx)(i.a,{href:"https://getsol.us/download",children:"Download page"})," and picking an edition."]}),"\n",(0,s.jsx)(i.h2,{id:"verifying-the-iso",children:"Verifying the ISO"}),"\n",(0,s.jsx)(i.h3,{id:"linux-and-macos",children:"Linux and macOS"}),"\n",(0,s.jsxs)(i.p,{children:["Download the SHA256SUMS files for your chosen ISO edition: ",(0,s.jsx)(i.em,{children:"File"}),", ",(0,s.jsx)(i.em,{children:"Signed File"})," and ",(0,s.jsx)(i.em,{children:"Public Key"})," from the links next to the ",(0,s.jsx)(i.em,{children:"Download"})," buttons on our ",(0,s.jsx)(i.a,{href:"https://getsol.us/download",children:"Download page"}),"."]}),"\n",(0,s.jsxs)(i.p,{children:[(0,s.jsx)(i.strong,{children:"Note:"})," You should download all these files to the same directory."]}),"\n",(0,s.jsx)(i.h4,{id:"verifying-the-sha256sums-file-signature",children:"Verifying the SHA256SUMS file signature"}),"\n",(0,s.jsx)(i.p,{children:"Import the Solus public key:"}),"\n",(0,s.jsx)(i.pre,{children:(0,s.jsx)(i.code,{className:"language-bash",children:"cd ~/path/to/download/directory\ngpg --import solus-releng-pub.gpg\n"})}),"\n",(0,s.jsx)(i.p,{children:"Verify the signed checksum file:"}),"\n",(0,s.jsx)(i.pre,{children:(0,s.jsx)(i.code,{className:"language-bash",children:"gpg --verify Solus-Budgie-Release-2024-10-14.iso.sha256sum.sign Solus-Budgie-Release-2024-10-14.iso.sha256sum\n"})}),"\n",(0,s.jsx)(i.h4,{id:"verifying-the-iso-checksum",children:"Verifying the ISO checksum"}),"\n",(0,s.jsx)(i.p,{children:"Check that the computed hash of the downloaded ISO file matches the hash supplied by Solus:"}),"\n",(0,s.jsx)(i.pre,{children:(0,s.jsx)(i.code,{className:"language-bash",children:"sha256sum -c Solus-Budgie-Release-2024-10-14.iso.sha256sum | grep OK\n"})}),"\n",(0,s.jsx)(i.h3,{id:"windows",children:"Windows"}),"\n",(0,s.jsx)(i.h4,{id:"verifying-signed-sha256sum-file",children:"Verifying signed SHA256SUM file"}),"\n",(0,s.jsxs)(i.p,{children:["On Windows, first install ",(0,s.jsx)(i.a,{href:"https://www.gpg4win.org/",children:"Gpg4win"}),"."]}),"\n",(0,s.jsxs)(i.p,{children:["Now you can run the same ",(0,s.jsx)(i.code,{children:"gpg"})," commands from the the ",(0,s.jsx)(i.a,{href:"/docs/user/quick-start/installation/#verifying-the-sha256sums-file-signature",children:(0,s.jsx)(i.em,{children:"Verifyng the SHA256SUMS file signature"})})," section above."]}),"\n",(0,s.jsx)(i.h4,{id:"verifying-the-iso-checksum-1",children:"Verifying the ISO checksum"}),"\n",(0,s.jsx)(i.p,{children:"Launch powershell and compute the hash of the ISO file you just downloaded. You will have to manually compare the result to the hash in the SHA256SUMS file."}),"\n",(0,s.jsx)(i.pre,{children:(0,s.jsx)(i.code,{className:"language-powershell",children:"Get-FileHash C:\\path\\to\\Solus-Budgie-Release-2024-10-14.iso\ncat C:\\path\\to\\Solus-Budgie-Release-2024-10-14.iso.sha256sum\n"})}),"\n",(0,s.jsxs)(i.p,{children:["Alternatively, you can use a graphical program that can calculate SHA256 hashes like ",(0,s.jsx)(i.em,{children:"Rufus"})," or ",(0,s.jsx)(i.em,{children:"7-Zip"}),"."]}),"\n",(0,s.jsx)(i.h2,{id:"creating-bootable-media",children:"Creating bootable media"}),"\n",(0,s.jsx)(i.p,{children:"To make boot media, you will need:"}),"\n",(0,s.jsxs)(i.ol,{children:["\n",(0,s.jsx)(i.li,{children:"Either a blank DVD or a USB drive larger than 2 GB."}),"\n",(0,s.jsx)(i.li,{children:"If using a USB, the ability to boot from the USB."}),"\n",(0,s.jsxs)(i.li,{children:["ISO file from the ",(0,s.jsx)(i.a,{href:"#getting-the-iso",children:"Getting the ISO"})," section."]}),"\n"]}),"\n",(0,s.jsx)(i.p,{children:"There are many tools which can write our ISO image to DVDs or USB thumb drives. Chose from an option below."}),"\n",(0,s.jsx)(i.h3,{id:"linux",children:"Linux"}),"\n",(0,s.jsx)(i.h4,{id:"dvd",children:"DVD"}),"\n",(0,s.jsxs)(i.p,{children:["We recommend using ",(0,s.jsx)(i.a,{href:"https://wiki.gnome.org/Apps/Brasero",children:"Brasero"})," for writing the ISO to a DVD."]}),"\n",(0,s.jsxs)(i.ol,{children:["\n",(0,s.jsx)(i.li,{children:"Insert blank DVD (DVD-R or DVD+RW is suitable) into your DVD writer."}),"\n",(0,s.jsx)(i.li,{children:"Open Brasero."}),"\n",(0,s.jsx)(i.li,{children:"Select the option \u201cBurn image\u201d."}),"\n",(0,s.jsx)(i.li,{children:"Click the \u201cClick here to select a disc image\u201d button and using the file dialog, choose the ISO."}),"\n",(0,s.jsx)(i.li,{children:"Ensure the correct DVD is selected in the \u201cSelect a disc to write to\u201d."}),"\n",(0,s.jsx)(i.li,{children:'Click "Burn" and wait.'}),"\n",(0,s.jsx)(i.li,{children:'Upon seeing \u201cImage successfully burned to DVD\u201d, click "Close".'}),"\n"]}),"\n",(0,s.jsx)(i.h4,{id:"usb",children:"USB"}),"\n",(0,s.jsxs)(i.p,{children:["We recommend using ",(0,s.jsx)(i.a,{href:"https://wiki.gnome.org/Apps/MultiWriter",children:"GNOME MultiWriter"})," or ",(0,s.jsx)(i.a,{href:"https://apps.kde.org/isoimagewriter/",children:"ISO Image Writer"})," for KDE. Please note that UNetbootin will ",(0,s.jsx)(i.strong,{children:"not"})," work."]}),"\n",(0,s.jsx)(i.h5,{id:"gnome-multiwriter",children:"GNOME MultiWriter"}),"\n",(0,s.jsx)(i.p,{children:"Upon opening GNOME MultiWriter, you will likely be shown a window similar to the one below, if your USB drive is already plugged in and mounted."}),"\n",(0,s.jsx)(i.admonition,{type:"warning",children:(0,s.jsxs)(i.p,{children:["The ISO image will be written to ",(0,s.jsx)(i.em,{children:"all mounted USB drives"}),". Ensure that the only USB drive that is connected is the one you wish to write the ISO to."]})}),"\n",(0,s.jsx)(i.p,{children:(0,s.jsx)(i.img,{alt:"MultiWriter Start",src:n(7173).Z+"",width:"706",height:"156"})}),"\n",(0,s.jsx)(i.p,{children:"If your USB drive is not mounted, you will be prompted with an image indicating to plug it in."}),"\n",(0,s.jsx)(i.p,{children:'Next, click the "Start Copying" button, and you will be prompted to select the ISO. Choose the ISO you downloaded in the "Getting the ISO" section. The USB will automatically be written to.'}),"\n",(0,s.jsx)(i.p,{children:(0,s.jsx)(i.img,{alt:"MultiWriter Writing",src:n(39115).Z+"",width:"706",height:"156"})}),"\n",(0,s.jsx)(i.p,{children:"Upon completion, you will be prompted with the following dialog and your USB is now ready for use."}),"\n",(0,s.jsx)(i.p,{children:(0,s.jsx)(i.img,{alt:"MultiWriter Done",src:n(69064).Z+"",width:"706",height:"156"})}),"\n",(0,s.jsx)(i.h4,{id:"kde-iso-image-writer",children:"KDE ISO Image Writer"}),"\n",(0,s.jsx)(i.admonition,{type:"info",children:(0,s.jsx)(i.p,{children:"You will need both the ISO and sha256sums file for it saved in the same directory."})}),"\n",(0,s.jsx)(i.p,{children:"When you open ISO Image Writer, you will see a window similar to the one below, if your USB drive is already plugged in and mounted."}),"\n",(0,s.jsx)(i.p,{children:(0,s.jsx)(i.img,{alt:"ImageWriter Start",src:n(8234).Z+"",width:"585",height:"446"})}),"\n",(0,s.jsx)(i.p,{children:"If there is no USB drive mounted, the USB drive field will be greyed out. Simply plug in the USB drive you want to use for the ISO, it will be auto-detected."}),"\n",(0,s.jsx)(i.p,{children:'Click on the top field "Write this ISO image:". Select the ISO image you downloaded in the "Getting the ISO" section.'}),"\n",(0,s.jsx)(i.p,{children:'You may see "Downloading ISO image". When this is done, click the Create button.'}),"\n",(0,s.jsx)(i.p,{children:(0,s.jsx)(i.img,{alt:"ImageWriter Writing",src:n(51213).Z+"",width:"551",height:"430"})}),"\n",(0,s.jsx)(i.p,{children:"When the operation is finished, you will see the confirmation dialog. Your USB is now ready for use."}),"\n",(0,s.jsx)(i.p,{children:(0,s.jsx)(i.img,{alt:"ImageWriter Done",src:n(46368).Z+"",width:"585",height:"446"})}),"\n",(0,s.jsx)(i.h5,{id:"command-line",children:"Command-line"}),"\n",(0,s.jsxs)(i.p,{children:["For those comfortable with the command-line / terminal, we will walk you through using ",(0,s.jsx)(i.code,{children:"dd"}),"."]}),"\n",(0,s.jsxs)(i.p,{children:["First, insert the USB drive into your computer and open your Terminal. Proceed to type ",(0,s.jsx)(i.code,{children:"lsblk"})," into your Terminal. It should output something along the lines of:"]}),"\n",(0,s.jsx)(i.pre,{children:(0,s.jsx)(i.code,{className:"language-bash",children:"NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT\nsda 8:0 0 111.8G 0 disk\n\u251c\u2500sda1 8:1 0 350M 0 part\n\u251c\u2500sda2 8:2 0 39.7G 0 part\n\u2514\u2500sda3 8:3 0 71.8G 0 part /\nsdb 8:64 1 7.5G 0 disk\n\u251c\u2500sdb1 8:65 1 712M 0 part\n\u2514\u2500sdb2 8:66 1 17.2M 0 part\n"})}),"\n",(0,s.jsxs)(i.p,{children:["You will see one disk, in this case ",(0,s.jsx)(i.code,{children:"/dev/sdb"}),", that is roughly the size of the USB drive. Yours should be similar (difference being in size). Write this device down somewhere."]}),"\n",(0,s.jsxs)(i.p,{children:["Next, locate the downloaded ISO. It will most likely be in your Downloads folder. In the event that it is, type: ",(0,s.jsx)(i.code,{children:"cd ~/Downloads"})]}),"\n",(0,s.jsxs)(i.p,{children:["If it is ",(0,s.jsx)(i.strong,{children:"not"})," in your Downloads folder, use ",(0,s.jsx)(i.code,{children:"cd"})," to navigate to the correct directory."]}),"\n",(0,s.jsx)(i.admonition,{type:"danger",children:(0,s.jsxs)(i.p,{children:["This is where we overwrite the contents of your USB drive so please ensure you identified the correct drive in the ",(0,s.jsx)(i.code,{children:"lsblk"})," stage above. Selecting the wrong drive here will lead to its contents being overwritten. An example command is below, however you may need to replace ",(0,s.jsx)(i.code,{children:"sdb"})," with the drive we located above:"]})}),"\n",(0,s.jsx)(i.pre,{children:(0,s.jsx)(i.code,{className:"language-bash",children:"sudo dd if=Solus-Budgie-Release-2024-10-14.iso of=/dev/sdb bs=4M status=progress oflag=sync && sudo eject /dev/sdb\n"})}),"\n",(0,s.jsx)(i.p,{children:"This will write the contents of the ISO to the thumb drive so you can boot it and also make sure the data is synchronized so you can eject the USB safely."}),"\n",(0,s.jsx)(i.h3,{id:"windows-1",children:"Windows"}),"\n",(0,s.jsx)(i.h4,{id:"dvd-1",children:"DVD"}),"\n",(0,s.jsx)(i.p,{children:"You can easily burn an ISO image to a DVD, on Windows 7 and newer, by using Window's built-in file manager (Explorer)."}),"\n",(0,s.jsxs)(i.ol,{children:["\n",(0,s.jsx)(i.li,{children:"Open Windows' built-in file manager (Explorer)."}),"\n",(0,s.jsx)(i.li,{children:'Right click on the ISO image file and click "Burn disk image".'}),"\n",(0,s.jsx)(i.li,{children:"Select the correct disc burner."}),"\n",(0,s.jsx)(i.li,{children:'Click "Burn".'}),"\n"]}),"\n",(0,s.jsx)(i.h4,{id:"usb-1",children:"USB"}),"\n",(0,s.jsxs)(i.p,{children:["You can easily burn an ISO image to a USB by using graphical tool ",(0,s.jsx)(i.a,{href:"https://rufus.ie/",children:"Rufus"}),"."]}),"\n",(0,s.jsxs)(i.ol,{children:["\n",(0,s.jsx)(i.li,{children:"Open Rufus."}),"\n",(0,s.jsx)(i.li,{children:"Ensure your device is correct by checking the contents of the Device dropdown."}),"\n",(0,s.jsx)(i.li,{children:"Click the CD icon found in the image below, and select the ISO."}),"\n",(0,s.jsx)(i.li,{children:'Untick all options except "Create a bootable disk using" and use the dropdown to select "DD Image".'}),"\n",(0,s.jsx)(i.li,{children:'Click "Start".'}),"\n"]}),"\n",(0,s.jsx)(i.p,{children:(0,s.jsx)(i.img,{alt:"Rufus",src:n(93093).Z+"",width:"365",height:"518"})}),"\n",(0,s.jsx)(i.h3,{id:"macos",children:"macOS"}),"\n",(0,s.jsx)(i.h4,{id:"dvd-2",children:"DVD"}),"\n",(0,s.jsx)(i.p,{children:"Since OS X El Capitan (10.11), the easiest way to burn a DVD is:"}),"\n",(0,s.jsxs)(i.ol,{children:["\n",(0,s.jsx)(i.li,{children:"Insert your DVD and open Finder."}),"\n",(0,s.jsx)(i.li,{children:"Right click on the ISO image."}),"\n",(0,s.jsx)(i.li,{children:"Click on \u201cBurn Disk Image \u2018Solus-Budgie-Release-2024-10-14.iso\u2019 to Disc\u2026\u201d"}),"\n",(0,s.jsx)(i.li,{children:"Then click \u201cBurn\u201d."}),"\n"]}),"\n",(0,s.jsx)(i.p,{children:(0,s.jsx)(i.img,{alt:"macOS Burn DVD",src:n(54725).Z+"",width:"638",height:"343"})}),"\n",(0,s.jsx)(i.h4,{id:"usb-2",children:"USB"}),"\n",(0,s.jsx)(i.h5,{id:"graphical-tool",children:"Graphical tool"}),"\n",(0,s.jsxs)(i.p,{children:["One of the easiest ways to burn an ISO image to a USB thumb drive is by using a graphical tool called ",(0,s.jsx)(i.a,{href:"https://etcher.balena.io/",children:"Etcher"}),"."]}),"\n",(0,s.jsxs)(i.ol,{children:["\n",(0,s.jsx)(i.li,{children:"Open Etcher."}),"\n",(0,s.jsx)(i.li,{children:"Click on \u201cSelect image\u201d and then select the ISO and click \u201cOpen\u201d."}),"\n",(0,s.jsx)(i.li,{children:"Etcher will automatically select your USB drive. If it has selected the wrong one, click \u201cChange\u201d and select the correct one."}),"\n",(0,s.jsx)(i.li,{children:"Click \u201cFlash!\u201d."}),"\n",(0,s.jsx)(i.li,{children:"You may be prompted for your macOS user password."}),"\n",(0,s.jsx)(i.li,{children:"Once Etcher has finished it is safe to remove the USB drive."}),"\n"]}),"\n",(0,s.jsx)(i.p,{children:"You may see a message stating \u201cThe disk you inserted was not readable by this computer.\u201d once Etcher finishes. This can be ignored."}),"\n",(0,s.jsx)(i.p,{children:(0,s.jsx)(i.img,{alt:"macOS Etcher",src:n(74020).Z+"",width:"800",height:"380"})}),"\n",(0,s.jsx)(i.h5,{id:"command-line-1",children:"Command-line"}),"\n",(0,s.jsxs)(i.p,{children:["For those comfortable with the macOS Terminal app, we will walk you through using ",(0,s.jsx)(i.code,{children:"dd"}),"."]}),"\n",(0,s.jsx)(i.p,{children:"First, insert the USB drive into your computer and open Terminal (found in Applications/Utilities)."}),"\n",(0,s.jsx)(i.p,{children:"Now you'll need to identify your USB drive by listing your storage devices with the following command:"}),"\n",(0,s.jsx)(i.pre,{children:(0,s.jsx)(i.code,{className:"language-bash",children:"diskutil list\n"})}),"\n",(0,s.jsx)(i.p,{children:"You should see output similar to this:"}),"\n",(0,s.jsx)(i.pre,{children:(0,s.jsx)(i.code,{className:"language-bash",children:"/dev/disk0 (internal, physical):\n #: TYPE NAME SIZE IDENTIFIER\n 0: GUID_partition_scheme *1.0 TB disk0\n 1: EFI EFI 209.7 MB disk0s1\n 2: Apple_HFS Macintosh HD 999.3 GB disk0s2\n 3: Apple_Boot Recovery HD 650.0 MB disk0s3\n\n/dev/disk1 (external, physical):\n #: TYPE NAME SIZE IDENTIFIER\n 0: GUID_partition_scheme *15.6 GB disk1\n 1: EFI EFI 209.7 MB disk1s1\n 2: Apple_HFS Ultra 15.3 GB disk1s2\n"})}),"\n",(0,s.jsxs)(i.p,{children:["From this output, we can see the USB drive is listed as ",(0,s.jsx)(i.code,{children:"/dev/disk1 (external, physical)"}),". In this example, the IDENTIFIER is ",(0,s.jsx)(i.code,{children:"disk1"}),". Please note, your USB drive may have a different identifier. You should be able to tell which is your USB drive by checking the name and size."]}),"\n",(0,s.jsxs)(i.p,{children:["macOS usually auto-mounts USB drives so you\u2019ll need to unmount it first before proceeding. Use the following command and replace ",(0,s.jsx)(i.code,{children:"IDENTIFIER"})," with the correct identifier we found in the ",(0,s.jsx)(i.code,{children:"diskutil list"})," step."]}),"\n",(0,s.jsx)(i.pre,{children:(0,s.jsx)(i.code,{className:"language-bash",children:"diskutil unmountDisk /dev/IDENTIFIER\n"})}),"\n",(0,s.jsx)(i.p,{children:"Now navigate to the folder that has the downloaded ISO. This could be your Mac\u2019s Downloads folder. The following command will get you there:"}),"\n",(0,s.jsx)(i.pre,{children:(0,s.jsx)(i.code,{className:"language-bash",children:"cd ~/Downloads\n"})}),"\n",(0,s.jsx)(i.admonition,{type:"danger",children:(0,s.jsx)(i.p,{children:(0,s.jsx)(i.strong,{children:"This next step is dangerous. Using the wrong drive identifier could result in data loss."})})}),"\n",(0,s.jsxs)(i.p,{children:["We will use the ",(0,s.jsx)(i.code,{children:"dd"})," command to write the contents of the ISO to the thumb drive. Replace ",(0,s.jsx)(i.code,{children:"IDENTIFIER"})," in the command below with your drive identifier. Note the extra ",(0,s.jsx)(i.code,{children:"r"})," before the identifier (i.e ",(0,s.jsx)(i.code,{children:"rdisk1"}),"). This is for raw mode, which along with bs=1m, makes the transfer faster."]}),"\n",(0,s.jsx)(i.pre,{children:(0,s.jsx)(i.code,{className:"language-bash",children:"sudo dd if=Solus-Budgie-Release-2024-10-14.iso of=/dev/rIDENTIFIER bs=1m\n"})}),"\n",(0,s.jsx)(i.p,{children:"Be patient! After a few minutes you\u2019ll receive a message saying how much data was transferred. You can now safely eject the usb drive."}),"\n",(0,s.jsx)(i.pre,{children:(0,s.jsx)(i.code,{className:"language-bash",children:"diskutil eject /dev/IDENTIFIER\n"})}),"\n",(0,s.jsx)(i.h2,{id:"boot-the-media",children:"Boot the media"}),"\n",(0,s.jsx)(i.p,{children:"Now it is time to restart your computer to boot the DVD or USB. Most computers will automatically boot from DVDs and USB, however if you experience issues booting the media, you may need to select to boot from DVD or USB."}),"\n",(0,s.jsxs)(i.p,{children:["This is usually accessible by pressing ",(0,s.jsx)(i.code,{children:"F9"})," or ",(0,s.jsx)(i.code,{children:"F12"})," while your computer is booting. On some devices it may also be ",(0,s.jsx)(i.code,{children:"ESC"}),"."]}),"\n",(0,s.jsx)(i.p,{children:'Macs will boot to the "Startup Manager" by holding down the Option (Alt) key. The DVD or USB drive will most likely show up as "EFI Boot".'})]})}function c(e={}){const{wrapper:i}={...(0,t.a)(),...e.components};return i?(0,s.jsx)(i,{...e,children:(0,s.jsx)(h,{...e})}):h(e)}},69064:(e,i,n)=>{n.d(i,{Z:()=>s});const s=n.p+"assets/images/gmw_done-fdbb3bda7061afd0ca7f97b85c1cef18.jpg"},7173:(e,i,n)=>{n.d(i,{Z:()=>s});const s=n.p+"assets/images/gmw_start-c8e10b8e6f627b862f8f6344260db698.jpg"},39115:(e,i,n)=>{n.d(i,{Z:()=>s});const s=n.p+"assets/images/gmw_writing-1a2eb065ba3c61dd1371f89b2ab9f7c1.jpg"},8234:(e,i,n)=>{n.d(i,{Z:()=>s});const s=n.p+"assets/images/iiw_1_start-0457fdcee59f063744233653c88022f7.png"},51213:(e,i,n)=>{n.d(i,{Z:()=>s});const s=n.p+"assets/images/iiw_2_writing-61d90705ea2038df803e806657f7e20f.png"},46368:(e,i,n)=>{n.d(i,{Z:()=>s});const s=n.p+"assets/images/iiw_3_done-de4e8501e47d1073f945ae1aceb13995.png"},54725:(e,i,n)=>{n.d(i,{Z:()=>s});const s=n.p+"assets/images/mac-burn-dvd-0bef9578a58d61610854fc7c25e3496f.jpg"},74020:(e,i,n)=>{n.d(i,{Z:()=>s});const s=n.p+"assets/images/mac-etcher-2d28aaeb19eda12c960c6b09e81eceb2.jpg"},93093:(e,i,n)=>{n.d(i,{Z:()=>s});const s=n.p+"assets/images/rufus-6f16a561298400882bff901d61064e58.jpg"},11151:(e,i,n)=>{n.d(i,{Z:()=>o,a:()=>r});var s=n(67294);const t={},l=s.createContext(t);function r(e){const i=s.useContext(l);return s.useMemo((function(){return"function"==typeof e?e(i):{...i,...e}}),[i,e])}function o(e){let i;return i=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:r(e.components),s.createElement(l.Provider,{value:i},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/5685b4d8.92a85a9a.js b/assets/js/5685b4d8.92a85a9a.js new file mode 100644 index 000000000..8974d6e6a --- /dev/null +++ b/assets/js/5685b4d8.92a85a9a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([["709"],{29137:function(e,n,t){t.r(n),t.d(n,{metadata:()=>i,contentTitle:()=>c,default:()=>d,assets:()=>u,toc:()=>a,frontMatter:()=>s});var i=JSON.parse('{"id":"user/editions/xfce/configuration","title":"Configuration","description":"TODO: Add configuration snippets for XFCE","source":"@site/docs/user/editions/xfce/configuration.md","sourceDirName":"user/editions/xfce","slug":"/user/editions/xfce/configuration","permalink":"/docs/user/editions/xfce/configuration","draft":false,"unlisted":false,"editUrl":"https://github.com/getsolus/help-center-docs/tree/master/docs/user/editions/xfce/configuration.md","tags":[],"version":"current","lastUpdatedAt":1733757592000,"frontMatter":{"title":"Configuration","summary":"Help for configuring XFCE on Solus"},"sidebar":"userSidebar","previous":{"title":"XFCE","permalink":"/docs/user/editions/xfce/"},"next":{"title":"Tips and Tricks","permalink":"/docs/user/editions/xfce/tips-and-tricks"}}'),o=t("85893"),r=t("50065");let s={title:"Configuration",summary:"Help for configuring XFCE on Solus"},c="Configuration",u={},a=[];function f(e){let n={h1:"h1",header:"header",p:"p",...(0,r.a)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(n.header,{children:(0,o.jsx)(n.h1,{id:"configuration",children:"Configuration"})}),"\n",(0,o.jsx)(n.p,{children:"TODO: Add configuration snippets for XFCE"})]})}function d(e={}){let{wrapper:n}={...(0,r.a)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(f,{...e})}):f(e)}},50065:function(e,n,t){t.d(n,{Z:function(){return c},a:function(){return s}});var i=t(67294);let o={},r=i.createContext(o);function s(e){let n=i.useContext(r);return i.useMemo(function(){return"function"==typeof e?e(n):{...n,...e}},[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:s(e.components),i.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/5685b4d8.fffedb97.js b/assets/js/5685b4d8.fffedb97.js deleted file mode 100644 index 3cc7833b1..000000000 --- a/assets/js/5685b4d8.fffedb97.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[1540],{17599:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>u,contentTitle:()=>s,default:()=>f,frontMatter:()=>r,metadata:()=>c,toc:()=>a});var o=t(85893),i=t(11151);const r={title:"Configuration",summary:"Help for configuring XFCE on Solus"},s="Configuration",c={id:"user/editions/xfce/configuration",title:"Configuration",description:"TODO: Add configuration snippets for XFCE",source:"@site/docs/user/editions/xfce/configuration.md",sourceDirName:"user/editions/xfce",slug:"/user/editions/xfce/configuration",permalink:"/docs/user/editions/xfce/configuration",draft:!1,unlisted:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/editions/xfce/configuration.md",tags:[],version:"current",lastUpdatedAt:1732716912e3,frontMatter:{title:"Configuration",summary:"Help for configuring XFCE on Solus"},sidebar:"userSidebar",previous:{title:"XFCE",permalink:"/docs/user/editions/xfce/"},next:{title:"Tips and Tricks",permalink:"/docs/user/editions/xfce/tips-and-tricks"}},u={},a=[];function d(e){const n={h1:"h1",header:"header",p:"p",...(0,i.a)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(n.header,{children:(0,o.jsx)(n.h1,{id:"configuration",children:"Configuration"})}),"\n",(0,o.jsx)(n.p,{children:"TODO: Add configuration snippets for XFCE"})]})}function f(e={}){const{wrapper:n}={...(0,i.a)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(d,{...e})}):d(e)}},11151:(e,n,t)=>{t.d(n,{Z:()=>c,a:()=>s});var o=t(67294);const i={},r=o.createContext(i);function s(e){const n=o.useContext(r);return o.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:s(e.components),o.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/5966.bb6949e9.js b/assets/js/5966.bb6949e9.js deleted file mode 100644 index a518abfa5..000000000 --- a/assets/js/5966.bb6949e9.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[5966],{58112:(e,t,a)=>{a.d(t,{n4:()=>c,Ne:()=>C,ci:()=>_,CS:()=>f,wj:()=>i,nO:()=>u,iZ:()=>x,cH:()=>M});var n=a(67294),s=a(20585),r=a(3675),l=a(85893);function i(){const e=(0,r.Z)(),t=e?.data?.blogMetadata;if(!t)throw new Error("useBlogMetadata() can't be called on the current route because the blog metadata could not be found in route context");return t}const o=n.createContext(null);function c(e){let{children:t,content:a,isBlogPostPage:s=!1}=e;const r=function(e){let{content:t,isBlogPostPage:a}=e;return(0,n.useMemo)((()=>({metadata:t.metadata,frontMatter:t.frontMatter,assets:t.assets,toc:t.toc,isBlogPostPage:a})),[t,a])}({content:a,isBlogPostPage:s});return(0,l.jsx)(o.Provider,{value:r,children:t})}function u(){const e=(0,n.useContext)(o);if(null===e)throw new s.i6("BlogPostProvider");return e}var m=a(23466),h=a(75276);const d=e=>new Date(e).toISOString();function g(e){const t=e.map(v);return{author:1===t.length?t[0]:t}}function p(e,t,a){return e?{image:j({imageUrl:t(e,{absolute:!0}),caption:`title image for the blog post: ${a}`})}:{}}function f(e){const{siteConfig:t}=(0,h.Z)(),{withBaseUrl:a}=(0,m.Cg)(),{metadata:{blogDescription:n,blogTitle:s,permalink:r}}=e,l=`${t.url}${r}`;return{"@context":"https://schema.org","@type":"Blog","@id":l,mainEntityOfPage:l,headline:s,description:n,blogPost:e.items.map((e=>function(e,t,a){const{assets:n,frontMatter:s,metadata:r}=e,{date:l,title:i,description:o,lastUpdatedAt:c}=r,u=n.image??s.image,m=s.keywords??[],h=`${t.url}${r.permalink}`,f=c?d(c):void 0;return{"@type":"BlogPosting","@id":h,mainEntityOfPage:h,url:h,headline:i,name:i,description:o,datePublished:l,...f?{dateModified:f}:{},...g(r.authors),...p(u,a,i),...m?{keywords:m}:{}}}(e.content,t,a)))}}function x(){const e=i(),{assets:t,metadata:a}=u(),{siteConfig:n}=(0,h.Z)(),{withBaseUrl:s}=(0,m.Cg)(),{date:r,title:l,description:o,frontMatter:c,lastUpdatedAt:f}=a,x=t.image??c.image,v=c.keywords??[],j=f?d(f):void 0,b=`${n.url}${a.permalink}`;return{"@context":"https://schema.org","@type":"BlogPosting","@id":b,mainEntityOfPage:b,url:b,headline:l,name:l,description:o,datePublished:r,...j?{dateModified:j}:{},...g(a.authors),...p(x,s,l),...v?{keywords:v}:{},isPartOf:{"@type":"Blog","@id":`${n.url}${e.blogBasePath}`,name:e.blogTitle}}}function v(e){return{"@type":"Person",...e.name?{name:e.name}:{},...e.title?{description:e.title}:{},...e.url?{url:e.url}:{},...e.email?{email:e.email}:{},...e.imageURL?{image:e.imageURL}:{}}}function j(e){let{imageUrl:t,caption:a}=e;return{"@type":"ImageObject","@id":t,url:t,contentUrl:t,caption:a}}var b=a(16550),w=a(38208),N=a(79113),k=a(51997);function M(e){const{pathname:t}=(0,b.TH)();return(0,n.useMemo)((()=>e.filter((e=>function(e,t){return!(e.unlisted&&!(0,k.Mg)(e.permalink,t))}(e,t)))),[e,t])}function _(e){const t=(0,N.vM)(e,(e=>`${new Date(e.date).getFullYear()}`)),a=Object.entries(t);return a.reverse(),a}function C(e){let{items:t,ulClassName:a,liClassName:n,linkClassName:s,linkActiveClassName:r}=e;return(0,l.jsx)("ul",{className:a,children:t.map((e=>(0,l.jsx)("li",{className:n,children:(0,l.jsx)(w.Z,{isNavLink:!0,to:e.permalink,className:s,activeClassName:r,children:e.title})},e.permalink)))})}},68588:(e,t,a)=>{a.d(t,{Z:()=>j});a(67294);var n=a(36905),s=a(38208),r=a(85893);const l="githubSvg_Uu4N";const i="xSvg_y3PF";const o=function(e){return(0,r.jsxs)("svg",{xmlns:"http://www.w3.org/2000/svg",width:"1em",height:"1em",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",...e,children:[(0,r.jsx)("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),(0,r.jsx)("path",{d:"M3 12a9 9 0 1 0 18 0a9 9 0 0 0 -18 0"}),(0,r.jsx)("path",{d:"M3.6 9h16.8"}),(0,r.jsx)("path",{d:"M3.6 15h16.8"}),(0,r.jsx)("path",{d:"M11.5 3a17 17 0 0 0 0 18"}),(0,r.jsx)("path",{d:"M12.5 3a17 17 0 0 1 0 18"})]})},c={authorSocials:"authorSocials_rSDt",authorSocialLink:"authorSocialLink_owbf",authorSocialIcon:"authorSocialIcon_XYv3"},u={twitter:{Icon:function(e){return(0,r.jsx)("svg",{viewBox:"0 0 256 209",width:"1em",height:"1em",xmlns:"http://www.w3.org/2000/svg",preserveAspectRatio:"xMidYMid",...e,children:(0,r.jsx)("path",{d:"M256 25.45c-9.42 4.177-19.542 7-30.166 8.27 10.845-6.5 19.172-16.793 23.093-29.057a105.183 105.183 0 0 1-33.351 12.745C205.995 7.201 192.346.822 177.239.822c-29.006 0-52.523 23.516-52.523 52.52 0 4.117.465 8.125 1.36 11.97-43.65-2.191-82.35-23.1-108.255-54.876-4.52 7.757-7.11 16.78-7.11 26.404 0 18.222 9.273 34.297 23.365 43.716a52.312 52.312 0 0 1-23.79-6.57c-.003.22-.003.44-.003.661 0 25.447 18.104 46.675 42.13 51.5a52.592 52.592 0 0 1-23.718.9c6.683 20.866 26.08 36.05 49.062 36.475-17.975 14.086-40.622 22.483-65.228 22.483-4.24 0-8.42-.249-12.529-.734 23.243 14.902 50.85 23.597 80.51 23.597 96.607 0 149.434-80.031 149.434-149.435 0-2.278-.05-4.543-.152-6.795A106.748 106.748 0 0 0 256 25.45",fill:"#55acee"})})},label:"Twitter"},github:{Icon:function(e){return(0,r.jsx)("svg",{viewBox:"0 0 256 250",width:"1em",height:"1em",...e,className:(0,n.Z)(e.className,l),xmlns:"http://www.w3.org/2000/svg",style:{"--dark":"#000","--light":"#fff"},preserveAspectRatio:"xMidYMid",children:(0,r.jsx)("path",{d:"M128.001 0C57.317 0 0 57.307 0 128.001c0 56.554 36.676 104.535 87.535 121.46 6.397 1.185 8.746-2.777 8.746-6.158 0-3.052-.12-13.135-.174-23.83-35.61 7.742-43.124-15.103-43.124-15.103-5.823-14.795-14.213-18.73-14.213-18.73-11.613-7.944.876-7.78.876-7.78 12.853.902 19.621 13.19 19.621 13.19 11.417 19.568 29.945 13.911 37.249 10.64 1.149-8.272 4.466-13.92 8.127-17.116-28.431-3.236-58.318-14.212-58.318-63.258 0-13.975 5-25.394 13.188-34.358-1.329-3.224-5.71-16.242 1.24-33.874 0 0 10.749-3.44 35.21 13.121 10.21-2.836 21.16-4.258 32.038-4.307 10.878.049 21.837 1.47 32.066 4.307 24.431-16.56 35.165-13.12 35.165-13.12 6.967 17.63 2.584 30.65 1.255 33.873 8.207 8.964 13.173 20.383 13.173 34.358 0 49.163-29.944 59.988-58.447 63.157 4.591 3.972 8.682 11.762 8.682 23.704 0 17.126-.148 30.91-.148 35.126 0 3.407 2.304 7.398 8.792 6.14C219.37 232.5 256 184.537 256 128.002 256 57.307 198.691 0 128.001 0Zm-80.06 182.34c-.282.636-1.283.827-2.194.39-.929-.417-1.45-1.284-1.15-1.922.276-.655 1.279-.838 2.205-.399.93.418 1.46 1.293 1.139 1.931Zm6.296 5.618c-.61.566-1.804.303-2.614-.591-.837-.892-.994-2.086-.375-2.66.63-.566 1.787-.301 2.626.591.838.903 1 2.088.363 2.66Zm4.32 7.188c-.785.545-2.067.034-2.86-1.104-.784-1.138-.784-2.503.017-3.05.795-.547 2.058-.055 2.861 1.075.782 1.157.782 2.522-.019 3.08Zm7.304 8.325c-.701.774-2.196.566-3.29-.49-1.119-1.032-1.43-2.496-.726-3.27.71-.776 2.213-.558 3.315.49 1.11 1.03 1.45 2.505.701 3.27Zm9.442 2.81c-.31 1.003-1.75 1.459-3.199 1.033-1.448-.439-2.395-1.613-2.103-2.626.301-1.01 1.747-1.484 3.207-1.028 1.446.436 2.396 1.602 2.095 2.622Zm10.744 1.193c.036 1.055-1.193 1.93-2.715 1.95-1.53.034-2.769-.82-2.786-1.86 0-1.065 1.202-1.932 2.733-1.958 1.522-.03 2.768.818 2.768 1.868Zm10.555-.405c.182 1.03-.875 2.088-2.387 2.37-1.485.271-2.861-.365-3.05-1.386-.184-1.056.893-2.114 2.376-2.387 1.514-.263 2.868.356 3.061 1.403Z"})})},label:"GitHub"},stackoverflow:{Icon:function(e){return(0,r.jsxs)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 169.61 200",width:"1em",height:"1em",...e,children:[(0,r.jsx)("path",{d:"M140.44 178.38v-48.65h21.61V200H0v-70.27h21.61v48.65z",fill:"#bcbbbb"}),(0,r.jsx)("path",{d:"M124.24 140.54l4.32-16.22-86.97-17.83-3.78 17.83zM49.7 82.16L130.72 120l7.56-16.22-81.02-37.83zm22.68-40l68.06 57.3 11.35-13.51-68.6-57.3-11.35 13.51zM116.14 0l-14.59 10.81 53.48 71.89 14.58-10.81zM37.81 162.16h86.43v-16.21H37.81z",fill:"#f48024"})]})},label:"Stack Overflow"},linkedin:{Icon:function(e){return(0,r.jsx)("svg",{width:"1em",height:"1em",xmlns:"http://www.w3.org/2000/svg",preserveAspectRatio:"xMidYMid",viewBox:"0 0 256 256",...e,children:(0,r.jsx)("path",{d:"M218.123 218.127h-37.931v-59.403c0-14.165-.253-32.4-19.728-32.4-19.756 0-22.779 15.434-22.779 31.369v60.43h-37.93V95.967h36.413v16.694h.51a39.907 39.907 0 0 1 35.928-19.733c38.445 0 45.533 25.288 45.533 58.186l-.016 67.013ZM56.955 79.27c-12.157.002-22.014-9.852-22.016-22.009-.002-12.157 9.851-22.014 22.008-22.016 12.157-.003 22.014 9.851 22.016 22.008A22.013 22.013 0 0 1 56.955 79.27m18.966 138.858H37.95V95.967h37.97v122.16ZM237.033.018H18.89C8.58-.098.125 8.161-.001 18.471v219.053c.122 10.315 8.576 18.582 18.89 18.474h218.144c10.336.128 18.823-8.139 18.966-18.474V18.454c-.147-10.33-8.635-18.588-18.966-18.453",fill:"#0A66C2"})})},label:"LinkedIn"},x:{Icon:function(e){return(0,r.jsx)("svg",{xmlns:"http://www.w3.org/2000/svg",width:"1em",height:"1em",fill:"none",viewBox:"0 0 1200 1227",...e,className:(0,n.Z)(e.className,i),style:{"--dark":"#000","--light":"#fff"},children:(0,r.jsx)("path",{d:"M714.163 519.284 1160.89 0h-105.86L667.137 450.887 357.328 0H0l468.492 681.821L0 1226.37h105.866l409.625-476.152 327.181 476.152H1200L714.137 519.284h.026ZM569.165 687.828l-47.468-67.894-377.686-540.24h162.604l304.797 435.991 47.468 67.894 396.2 566.721H892.476L569.165 687.854v-.026Z"})})},label:"X"}};function m(e){let{platform:t,link:a}=e;const{Icon:l,label:i}=u[m=t]??{Icon:o,label:m};var m;return(0,r.jsx)(s.Z,{className:c.authorSocialLink,href:a,title:i,children:(0,r.jsx)(l,{className:(0,n.Z)(c.authorSocialLink)})})}function h(e){let{author:t}=e;const a=Object.entries(t.socials??{});return(0,r.jsx)("div",{className:c.authorSocials,children:a.map((e=>{let[t,a]=e;return(0,r.jsx)(m,{platform:t,link:a},t)}))})}var d=a(42704);const g={authorImage:"authorImage_XqGP","author-as-h1":"author-as-h1_n9oJ","author-as-h2":"author-as-h2_gXvM",authorDetails:"authorDetails_lV9A",authorName:"authorName_yefp",authorTitle:"authorTitle_nd0D",authorBlogPostCount:"authorBlogPostCount_iiJ5"};function p(e){return e.href?(0,r.jsx)(s.Z,{...e}):(0,r.jsx)(r.Fragment,{children:e.children})}function f(e){let{title:t}=e;return(0,r.jsx)("small",{className:g.authorTitle,title:t,children:t})}function x(e){let{name:t,as:a}=e;return a?(0,r.jsx)(d.Z,{as:a,className:g.authorName,children:t}):(0,r.jsx)("span",{className:g.authorName,children:t})}function v(e){let{count:t}=e;return(0,r.jsx)("span",{className:(0,n.Z)(g.authorBlogPostCount),children:t})}function j(e){let{as:t,author:a,className:s,count:l}=e;const{name:i,title:o,url:c,imageURL:u,email:m,page:d}=a,j=d?.permalink||c||m&&`mailto:${m}`||void 0;return(0,r.jsxs)("div",{className:(0,n.Z)("avatar margin-bottom--sm",s,g[`author-as-${t}`]),children:[u&&(0,r.jsx)(p,{href:j,className:"avatar__photo-link",children:(0,r.jsx)("img",{className:(0,n.Z)("avatar__photo",g.authorImage),src:u,alt:i})}),(i||o)&&(0,r.jsxs)("div",{className:(0,n.Z)("avatar__intro",g.authorDetails),children:[(0,r.jsxs)("div",{className:"avatar__name",children:[i&&(0,r.jsx)(p,{href:j,children:(0,r.jsx)(x,{name:i,as:t})}),l&&(0,r.jsx)(v,{count:l})]}),!!o&&(0,r.jsx)(f,{title:o}),(0,r.jsx)(h,{author:a})]})]})}},50429:(e,t,a)=>{a.d(t,{Z:()=>L});var n=a(67294),s=a(36905),r=a(48714),l=a(62550),i=a(55361),o=a(58112),c=a(39581),u=a(42704),m=a(85893);function h(e){let{year:t,yearGroupHeadingClassName:a,children:n}=e;return(0,m.jsxs)("div",{role:"group",children:[(0,m.jsx)(u.Z,{as:"h3",className:a,children:t}),n]})}function d(e){let{items:t,yearGroupHeadingClassName:a,ListComponent:n}=e;if((0,c.L)().blog.sidebar.groupByYear){const e=(0,o.ci)(t);return(0,m.jsx)(m.Fragment,{children:e.map((e=>{let[t,s]=e;return(0,m.jsx)(h,{year:t,yearGroupHeadingClassName:a,children:(0,m.jsx)(n,{items:s})},t)}))})}return(0,m.jsx)(n,{items:t})}const g=(0,n.memo)(d),p="sidebar_re4s",f="sidebarItemTitle_pO2u",x="sidebarItemList_Yudw",v="sidebarItem__DBe",j="sidebarItemLink_mo7H",b="sidebarItemLinkActive_I1ZP",w="yearGroupHeading_rMGB",N=e=>{let{items:t}=e;return(0,m.jsx)(o.Ne,{items:t,ulClassName:(0,s.Z)(x,"clean-list"),liClassName:v,linkClassName:j,linkActiveClassName:b})};function k(e){let{sidebar:t}=e;const a=(0,o.cH)(t.items);return(0,m.jsx)("aside",{className:"col col--3",children:(0,m.jsxs)("nav",{className:(0,s.Z)(p,"thin-scrollbar"),"aria-label":(0,i.I)({id:"theme.blog.sidebar.navAriaLabel",message:"Blog recent posts navigation",description:"The ARIA label for recent posts in the blog sidebar"}),children:[(0,m.jsx)("div",{className:(0,s.Z)(f,"margin-bottom--md"),children:t.title}),(0,m.jsx)(g,{items:a,ListComponent:N,yearGroupHeadingClassName:w})]})})}const M=(0,n.memo)(k);var _=a(5689);const C={yearGroupHeading:"yearGroupHeading_QT03"},Z=e=>{let{items:t}=e;return(0,m.jsx)(o.Ne,{items:t,ulClassName:"menu__list",liClassName:"menu__list-item",linkClassName:"menu__link",linkActiveClassName:"menu__link--active"})};function y(e){let{sidebar:t}=e;const a=(0,o.cH)(t.items);return(0,m.jsx)(g,{items:a,ListComponent:Z,yearGroupHeadingClassName:C.yearGroupHeading})}function P(e){return(0,m.jsx)(_.Zo,{component:y,props:e})}const B=(0,n.memo)(P);function I(e){let{sidebar:t}=e;const a=(0,l.i)();return t?.items.length?"mobile"===a?(0,m.jsx)(B,{sidebar:t}):(0,m.jsx)(M,{sidebar:t}):null}function L(e){const{sidebar:t,toc:a,children:n,...l}=e,i=t&&t.items.length>0;return(0,m.jsx)(r.Z,{...l,children:(0,m.jsx)("div",{className:"container margin-vert--lg",children:(0,m.jsxs)("div",{className:"row",children:[(0,m.jsx)(I,{sidebar:t}),(0,m.jsx)("main",{className:(0,s.Z)("col",{"col--7":i,"col--9 col--offset-1":!i}),children:n}),a&&(0,m.jsx)("div",{className:"col col--2",children:a})]})})})}},59676:(e,t,a)=>{a.d(t,{c:()=>c});var n=a(67294),s=a(75276);const r=["zero","one","two","few","many","other"];function l(e){return r.filter((t=>e.includes(t)))}const i={locale:"en",pluralForms:l(["one","other"]),select:e=>1===e?"one":"other"};function o(){const{i18n:{currentLocale:e}}=(0,s.Z)();return(0,n.useMemo)((()=>{try{return function(e){const t=new Intl.PluralRules(e);return{locale:e,pluralForms:l(t.resolvedOptions().pluralCategories),select:e=>t.select(e)}}(e)}catch(t){return console.error(`Failed to use Intl.PluralRules for locale "${e}".\nDocusaurus will fallback to the default (English) implementation.\nError: ${t.message}\n`),i}}),[e])}function c(){const e=o();return{selectMessage:(t,a)=>function(e,t,a){const n=e.split("|");if(1===n.length)return n[0];n.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 ${n.length}: ${e}`);const s=a.select(t),r=a.pluralForms.indexOf(s);return n[Math.min(r,n.length-1)]}(a,t,e)}}}}]); \ No newline at end of file diff --git a/assets/js/5b7f3753.8147221e.js b/assets/js/5b7f3753.8147221e.js deleted file mode 100644 index 538d9e7a9..000000000 --- a/assets/js/5b7f3753.8147221e.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[6413],{47512:(e,i,n)=>{n.r(i),n.d(i,{assets:()=>o,contentTitle:()=>r,default:()=>d,frontMatter:()=>a,metadata:()=>c,toc:()=>h});var t=n(85893),s=n(11151);const a={title:"Git Basics",summary:"Basic git commands for packaging"},r="Git Basics",c={id:"packaging/git-basics",title:"Git Basics",description:"Working with branches",source:"@site/docs/packaging/git-basics.md",sourceDirName:"packaging",slug:"/packaging/git-basics",permalink:"/docs/packaging/git-basics",draft:!1,unlisted:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/packaging/git-basics.md",tags:[],version:"current",lastUpdatedAt:1732716912e3,frontMatter:{title:"Git Basics",summary:"Basic git commands for packaging"},sidebar:"packagingSidebar",previous:{title:"Appstream Metainfo",permalink:"/docs/packaging/appstream-metainfo"},next:{title:"Monitoring YAML",permalink:"/docs/packaging/monitoring.yml"}},o={},h=[{value:"Working with branches",id:"working-with-branches",level:2},{value:"Keeping your branch up to date with the main branch",id:"keeping-your-branch-up-to-date-with-the-main-branch",level:2},{value:"Adding files",id:"adding-files",level:2},{value:"Removing files",id:"removing-files",level:2},{value:"Renaming files",id:"renaming-files",level:2},{value:"Check the changes in your files",id:"check-the-changes-in-your-files",level:2},{value:"Commit your changes",id:"commit-your-changes",level:2},{value:"Deleting your branch after a pull request is merged",id:"deleting-your-branch-after-a-pull-request-is-merged",level:2}];function l(e){const i={a:"a",code:"code",h1:"h1",h2:"h2",header:"header",p:"p",pre:"pre",strong:"strong",...(0,s.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(i.header,{children:(0,t.jsx)(i.h1,{id:"git-basics",children:"Git Basics"})}),"\n",(0,t.jsx)(i.h2,{id:"working-with-branches",children:"Working with branches"}),"\n",(0,t.jsxs)(i.p,{children:["The recommended way to switch branches is ",(0,t.jsx)(i.code,{children:"git switch"}),".\nTo create a new branch use ",(0,t.jsx)(i.code,{children:"git switch -c"}),"."]}),"\n",(0,t.jsx)(i.h2,{id:"keeping-your-branch-up-to-date-with-the-main-branch",children:"Keeping your branch up to date with the main branch"}),"\n",(0,t.jsxs)(i.p,{children:["If there any new changes to the repository whilst you are still working on your branch you need to ",(0,t.jsx)(i.a,{href:"https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/working-with-forks/syncing-a-fork",children:"sync your fork"}),".\nRun ",(0,t.jsx)(i.code,{children:"git fetch"}),", and ",(0,t.jsx)(i.code,{children:"git rebase origin/main"})," to pull the changes in.\nYou will need to fix any conflicts manually.\nYou can check your branch against main with ",(0,t.jsx)(i.code,{children:"git diff origin/main..my-branch"}),"."]}),"\n",(0,t.jsx)(i.h2,{id:"adding-files",children:"Adding files"}),"\n",(0,t.jsxs)(i.p,{children:["For every file you change or add, you must let git know about it: ",(0,t.jsx)(i.code,{children:"git add someFile"})]}),"\n",(0,t.jsx)(i.h2,{id:"removing-files",children:"Removing files"}),"\n",(0,t.jsxs)(i.p,{children:["For files that need to be removed, you must do so using git: ",(0,t.jsx)(i.code,{children:"git rm someFile"})]}),"\n",(0,t.jsx)(i.h2,{id:"renaming-files",children:"Renaming files"}),"\n",(0,t.jsxs)(i.p,{children:["Likewise, for renaming a file, you must do so via git: ",(0,t.jsx)(i.code,{children:"git mv someFile someFileName2"})]}),"\n",(0,t.jsx)(i.h2,{id:"check-the-changes-in-your-files",children:"Check the changes in your files"}),"\n",(0,t.jsx)(i.p,{children:"It's a good idea to review the changes you have made to each file. This is to make sure you're committing what you intend and to make sure it looks good. Do this before adding changed files."}),"\n",(0,t.jsxs)(i.p,{children:["To diff them all at once, useful for small changes, use ",(0,t.jsx)(i.code,{children:"git diff"}),".\nTo diff each file one at a time run ",(0,t.jsx)(i.code,{children:"git diff filename"})," on each one."]}),"\n",(0,t.jsx)(i.h2,{id:"commit-your-changes",children:"Commit your changes"}),"\n",(0,t.jsx)(i.p,{children:(0,t.jsx)(i.strong,{children:"Check your branch"})}),"\n",(0,t.jsxs)(i.p,{children:["Get the status of the branch with ",(0,t.jsx)(i.code,{children:"git status"}),". Make sure all the files you changed are staged, and that there are no untracked files. The git status should say your branch is clean."]}),"\n",(0,t.jsxs)(i.p,{children:["Now that you've tested and reviewed your change, when you're happy with it, it's time to commit your changes with ",(0,t.jsx)(i.code,{children:"git commit"}),"."]}),"\n",(0,t.jsx)(i.h2,{id:"deleting-your-branch-after-a-pull-request-is-merged",children:"Deleting your branch after a pull request is merged"}),"\n",(0,t.jsx)(i.p,{children:"Once your pull request has been accepted you can delete your working branches.\nFirst, change to the package directory, switch to the main branch, then delete your local and the remote branches."}),"\n",(0,t.jsx)(i.pre,{children:(0,t.jsx)(i.code,{className:"language-bash",children:"cd ~/solus-packages\ngit switch main\ngit branch -D my-branch\ngit push -d origin my-branch\n"})})]})}function d(e={}){const{wrapper:i}={...(0,s.a)(),...e.components};return i?(0,t.jsx)(i,{...e,children:(0,t.jsx)(l,{...e})}):l(e)}},11151:(e,i,n)=>{n.d(i,{Z:()=>c,a:()=>r});var t=n(67294);const s={},a=t.createContext(s);function r(e){const i=t.useContext(a);return t.useMemo((function(){return"function"==typeof e?e(i):{...i,...e}}),[i,e])}function c(e){let i;return i=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:r(e.components),t.createElement(a.Provider,{value:i},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/5b7f3753.8b669d2a.js b/assets/js/5b7f3753.8b669d2a.js new file mode 100644 index 000000000..44f9964c0 --- /dev/null +++ b/assets/js/5b7f3753.8b669d2a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([["1157"],{76571:function(e,i,n){n.r(i),n.d(i,{metadata:()=>t,contentTitle:()=>c,default:()=>d,assets:()=>o,toc:()=>h,frontMatter:()=>r});var t=JSON.parse('{"id":"packaging/git-basics","title":"Git Basics","description":"Working with branches","source":"@site/docs/packaging/git-basics.md","sourceDirName":"packaging","slug":"/packaging/git-basics","permalink":"/docs/packaging/git-basics","draft":false,"unlisted":false,"editUrl":"https://github.com/getsolus/help-center-docs/tree/master/docs/packaging/git-basics.md","tags":[],"version":"current","lastUpdatedAt":1733757592000,"frontMatter":{"title":"Git Basics","summary":"Basic git commands for packaging"},"sidebar":"packagingSidebar","previous":{"title":"Appstream Metainfo","permalink":"/docs/packaging/appstream-metainfo"},"next":{"title":"Monitoring YAML","permalink":"/docs/packaging/monitoring.yml"}}'),s=n("85893"),a=n("50065");let r={title:"Git Basics",summary:"Basic git commands for packaging"},c="Git Basics",o={},h=[{value:"Working with branches",id:"working-with-branches",level:2},{value:"Keeping your branch up to date with the main branch",id:"keeping-your-branch-up-to-date-with-the-main-branch",level:2},{value:"Adding files",id:"adding-files",level:2},{value:"Removing files",id:"removing-files",level:2},{value:"Renaming files",id:"renaming-files",level:2},{value:"Check the changes in your files",id:"check-the-changes-in-your-files",level:2},{value:"Commit your changes",id:"commit-your-changes",level:2},{value:"Deleting your branch after a pull request is merged",id:"deleting-your-branch-after-a-pull-request-is-merged",level:2}];function l(e){let i={a:"a",code:"code",h1:"h1",h2:"h2",header:"header",p:"p",pre:"pre",strong:"strong",...(0,a.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(i.header,{children:(0,s.jsx)(i.h1,{id:"git-basics",children:"Git Basics"})}),"\n",(0,s.jsx)(i.h2,{id:"working-with-branches",children:"Working with branches"}),"\n",(0,s.jsxs)(i.p,{children:["The recommended way to switch branches is ",(0,s.jsx)(i.code,{children:"git switch"}),".\nTo create a new branch use ",(0,s.jsx)(i.code,{children:"git switch -c"}),"."]}),"\n",(0,s.jsx)(i.h2,{id:"keeping-your-branch-up-to-date-with-the-main-branch",children:"Keeping your branch up to date with the main branch"}),"\n",(0,s.jsxs)(i.p,{children:["If there any new changes to the repository whilst you are still working on your branch you need to ",(0,s.jsx)(i.a,{href:"https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/working-with-forks/syncing-a-fork",children:"sync your fork"}),".\nRun ",(0,s.jsx)(i.code,{children:"git fetch"}),", and ",(0,s.jsx)(i.code,{children:"git rebase origin/main"})," to pull the changes in.\nYou will need to fix any conflicts manually.\nYou can check your branch against main with ",(0,s.jsx)(i.code,{children:"git diff origin/main..my-branch"}),"."]}),"\n",(0,s.jsx)(i.h2,{id:"adding-files",children:"Adding files"}),"\n",(0,s.jsxs)(i.p,{children:["For every file you change or add, you must let git know about it: ",(0,s.jsx)(i.code,{children:"git add someFile"})]}),"\n",(0,s.jsx)(i.h2,{id:"removing-files",children:"Removing files"}),"\n",(0,s.jsxs)(i.p,{children:["For files that need to be removed, you must do so using git: ",(0,s.jsx)(i.code,{children:"git rm someFile"})]}),"\n",(0,s.jsx)(i.h2,{id:"renaming-files",children:"Renaming files"}),"\n",(0,s.jsxs)(i.p,{children:["Likewise, for renaming a file, you must do so via git: ",(0,s.jsx)(i.code,{children:"git mv someFile someFileName2"})]}),"\n",(0,s.jsx)(i.h2,{id:"check-the-changes-in-your-files",children:"Check the changes in your files"}),"\n",(0,s.jsx)(i.p,{children:"It's a good idea to review the changes you have made to each file. This is to make sure you're committing what you intend and to make sure it looks good. Do this before adding changed files."}),"\n",(0,s.jsxs)(i.p,{children:["To diff them all at once, useful for small changes, use ",(0,s.jsx)(i.code,{children:"git diff"}),".\nTo diff each file one at a time run ",(0,s.jsx)(i.code,{children:"git diff filename"})," on each one."]}),"\n",(0,s.jsx)(i.h2,{id:"commit-your-changes",children:"Commit your changes"}),"\n",(0,s.jsx)(i.p,{children:(0,s.jsx)(i.strong,{children:"Check your branch"})}),"\n",(0,s.jsxs)(i.p,{children:["Get the status of the branch with ",(0,s.jsx)(i.code,{children:"git status"}),". Make sure all the files you changed are staged, and that there are no untracked files. The git status should say your branch is clean."]}),"\n",(0,s.jsxs)(i.p,{children:["Now that you've tested and reviewed your change, when you're happy with it, it's time to commit your changes with ",(0,s.jsx)(i.code,{children:"git commit"}),"."]}),"\n",(0,s.jsx)(i.h2,{id:"deleting-your-branch-after-a-pull-request-is-merged",children:"Deleting your branch after a pull request is merged"}),"\n",(0,s.jsx)(i.p,{children:"Once your pull request has been accepted you can delete your working branches.\nFirst, change to the package directory, switch to the main branch, then delete your local and the remote branches."}),"\n",(0,s.jsx)(i.pre,{children:(0,s.jsx)(i.code,{className:"language-bash",children:"cd ~/solus-packages\ngit switch main\ngit branch -D my-branch\ngit push -d origin my-branch\n"})})]})}function d(e={}){let{wrapper:i}={...(0,a.a)(),...e.components};return i?(0,s.jsx)(i,{...e,children:(0,s.jsx)(l,{...e})}):l(e)}},50065:function(e,i,n){n.d(i,{Z:function(){return c},a:function(){return r}});var t=n(67294);let s={},a=t.createContext(s);function r(e){let i=t.useContext(a);return t.useMemo(function(){return"function"==typeof e?e(i):{...i,...e}},[i,e])}function c(e){let i;return i=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:r(e.components),t.createElement(a.Provider,{value:i},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/5e95c892.0f0e0eb4.js b/assets/js/5e95c892.0f0e0eb4.js deleted file mode 100644 index 9ae6450cf..000000000 --- a/assets/js/5e95c892.0f0e0eb4.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[9661],{14399:(e,s,r)=>{r.r(s),r.d(s,{default:()=>h});r(67294);var u=r(36905),c=r(96984),l=r(50563),n=r(18790),t=r(48714),a=r(85893);function h(e){return(0,a.jsx)(c.FG,{className:(0,u.Z)(l.k.wrapper.docsPages),children:(0,a.jsx)(t.Z,{children:(0,n.H)(e.route.routes)})})}}}]); \ No newline at end of file diff --git a/assets/js/5e95c892.c55661b1.js b/assets/js/5e95c892.c55661b1.js new file mode 100644 index 000000000..eff172831 --- /dev/null +++ b/assets/js/5e95c892.c55661b1.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([["3432"],{1532:function(e,r,s){s.r(r),s.d(r,{default:function(){return o}});var n=s(85893);s(67294);var u=s(74904),c=s(81921),t=s(50490),l=s(18790),a=s(99757);function o(e){return(0,n.jsx)(c.FG,{className:(0,u.Z)(t.k.wrapper.docsPages),children:(0,n.jsx)(a.Z,{children:(0,l.H)(e.route.routes)})})}}}]); \ No newline at end of file diff --git a/assets/js/5efe994e.c42eb5a5.js b/assets/js/5efe994e.c42eb5a5.js new file mode 100644 index 000000000..3325bf591 --- /dev/null +++ b/assets/js/5efe994e.c42eb5a5.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([["5015"],{35568:function(l){l.exports=JSON.parse('{"tag":{"label":"llvm","permalink":"/blog/tags/llvm","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/llvm","page":1,"postsPerPage":1,"totalPages":1,"totalCount":1,"blogDescription":"The Solus Development (b)log!","blogTitle":"Solus DevLog"}}')}}]); \ No newline at end of file diff --git a/assets/js/5efe994e.eb5044e0.js b/assets/js/5efe994e.eb5044e0.js deleted file mode 100644 index 17acc9e4a..000000000 --- a/assets/js/5efe994e.eb5044e0.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[1598],{83532:l=>{l.exports=JSON.parse('{"tag":{"label":"llvm","permalink":"/blog/tags/llvm","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/llvm","page":1,"postsPerPage":1,"totalPages":1,"totalCount":1,"blogDescription":"The Solus Development (b)log!","blogTitle":"Solus DevLog"}}')}}]); \ No newline at end of file diff --git a/assets/js/5f194406.500d2564.js b/assets/js/5f194406.500d2564.js deleted file mode 100644 index c80ea5306..000000000 --- a/assets/js/5f194406.500d2564.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[7607],{77882:(e,i,n)=>{n.r(i),n.d(i,{assets:()=>l,contentTitle:()=>r,default:()=>c,frontMatter:()=>o,metadata:()=>a,toc:()=>d});var s=n(85893),t=n(11151);const o={title:"Community Guidelines",summary:"Community Guidelines"},r="Community guidelines",a={id:"user/contributing/community-guidelines",title:"Community Guidelines",description:"Solus enforces a set of community guidelines to maintain a family-friendly, respectful, and professional environment.",source:"@site/docs/user/contributing/community-guidelines.md",sourceDirName:"user/contributing",slug:"/user/contributing/community-guidelines",permalink:"/docs/user/contributing/community-guidelines",draft:!1,unlisted:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/contributing/community-guidelines.md",tags:[],version:"current",lastUpdatedAt:1732716912e3,frontMatter:{title:"Community Guidelines",summary:"Community Guidelines"},sidebar:"userSidebar",previous:{title:"Contributing",permalink:"/docs/category/contributing"},next:{title:"Getting Involved",permalink:"/docs/user/contributing/getting-involved"}},l={},d=[{value:"General guidelines",id:"general-guidelines",level:2},{value:"Harassment",id:"harassment",level:3},{value:"Language",id:"language",level:3},{value:"Media sharing",id:"media-sharing",level:3},{value:"Observe topic guidance",id:"observe-topic-guidance",level:3},{value:"Other",id:"other",level:3},{value:"Service-specific guidelines",id:"service-specific-guidelines",level:2},{value:"Repositories and issue trackers",id:"repositories-and-issue-trackers",level:3}];function u(e){const i={a:"a",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",p:"p",ul:"ul",...(0,t.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(i.header,{children:(0,s.jsx)(i.h1,{id:"community-guidelines",children:"Community guidelines"})}),"\n",(0,s.jsx)(i.p,{children:"Solus enforces a set of community guidelines to maintain a family-friendly, respectful, and professional environment."}),"\n",(0,s.jsx)(i.p,{children:"Our guidelines apply to all services offered or used by the project, in addition to any terms of service of third-party services used by the project. Solus Staff reserves the right to either ban or terminate access, on a temporary or permanent basis, to members of the community which are found to be violating our guidelines."}),"\n",(0,s.jsx)(i.h2,{id:"general-guidelines",children:"General guidelines"}),"\n",(0,s.jsx)(i.p,{children:"The guidelines laid out in this section apply to all services offered or used by the project, such as (but not limited to):"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsx)(i.li,{children:"Our package issue tracker"}),"\n",(0,s.jsx)(i.li,{children:"Any and all forums or organized communities, e.g. our Flarum forums or subreddit"}),"\n",(0,s.jsx)(i.li,{children:"Matrix, IRC, or any other officially supported means of communicating with the project and community members in real-time"}),"\n",(0,s.jsx)(i.li,{children:"Postings to social media pages / properties owned or used by the project."}),"\n"]}),"\n",(0,s.jsx)(i.h3,{id:"harassment",children:"Harassment"}),"\n",(0,s.jsx)(i.p,{children:"The project condemns any and all forms of harassment. Harassment by individuals in our community, whether in public (on services provided by or used by the project) or private (e.g. direct messages), to other members in our community, will result in the temporary or permanent banning of such individuals across any and all services provided by or used by the project."}),"\n",(0,s.jsx)(i.p,{children:"This extends to any and all events / venues sponsored or otherwise supported by the project. Harassment in such events or venues will result in the permanent banning of such individuals from future events and if necessary, the immediate removal of such individuals from any current events / venues."}),"\n",(0,s.jsx)(i.p,{children:"You are encouraged to reach out to a member of the Solus Staff should you be harassed by any member of our community so such matters may be addressed immediately."}),"\n",(0,s.jsx)(i.h3,{id:"language",children:"Language"}),"\n",(0,s.jsx)(i.p,{children:"Members of the community are expected to engage in a manner which is respectful and avoids the use of language which is hateful, derogatory, or otherwise intentionally degrading. This includes (but is not limited to) language which could be classified as:"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:["Hateful towards individuals or groups based on:","\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsx)(i.li,{children:"Disabilities"}),"\n",(0,s.jsx)(i.li,{children:"Gender or gender identity"}),"\n",(0,s.jsx)(i.li,{children:"Religious beliefs"}),"\n",(0,s.jsx)(i.li,{children:"Sexual orientation"}),"\n",(0,s.jsx)(i.li,{children:"Race or nationality"}),"\n",(0,s.jsx)(i.li,{children:"Political affiliation"}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(i.li,{children:"Sexual or otherwise lewd in nature"}),"\n"]}),"\n",(0,s.jsx)(i.p,{children:"Profane language which is not derogatory, hateful, or sexual in nature may be allowed in specific off-topic rooms or other locations permitted by the project. However, the Solus Staff moderation team reserves the right to request the immediate ceasing of the use of such language by any individual if it is deemed to be derogatory, hateful, sexual, or in a manner which is otherwise distasteful."}),"\n",(0,s.jsx)(i.h3,{id:"media-sharing",children:"Media sharing"}),"\n",(0,s.jsx)(i.p,{children:"Members of the community shall not link / share media which is illegal, pornographic / sexual, or otherwise offensive in nature. This extends to sharing media which shows any illegal or otherwise harmful acts, such as acts of violence."}),"\n",(0,s.jsx)(i.h3,{id:"observe-topic-guidance",children:"Observe topic guidance"}),"\n",(0,s.jsx)(i.p,{children:"Members of the community should attempt to observe topic guidance when participating in various services offered or used by the project, such as:"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsx)(i.li,{children:"Ensuring support-related rooms / mediums remain free of development and off-topic discussions to maximize the community and Solus Staff\u2019s ability to respond and address issues or support requests."}),"\n",(0,s.jsx)(i.li,{children:"Ensuring development rooms / mediums remain free of off-topic discussions which are not relevant to the development or progression of various development items relating to Solus."}),"\n",(0,s.jsx)(i.li,{children:"Ensuring off-topic rooms / mediums remain free of heated discussions of polarizing issues or current events in order to keep these spaces inviting and enjoyable."}),"\n"]}),"\n",(0,s.jsx)(i.h3,{id:"other",children:"Other"}),"\n",(0,s.jsx)(i.p,{children:"The below guidelines do not fall into any specific category but should be observed by members of the community:"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsx)(i.li,{children:"Continual repetition and/or advertisement of any products, services, or projects is not allowed."}),"\n",(0,s.jsx)(i.li,{children:"Using bots or other automated ways of interaction, unless explicitly permitted by the project, is not allowed."}),"\n",(0,s.jsx)(i.li,{children:"No spamming or flooding. This may result in temporary removals (for example: kicks in Matrix) or warnings, to prevent the continued spamming or flooding."}),"\n",(0,s.jsx)(i.li,{children:"Promotion of unofficial Solus communities or communication channels without prior permission is not allowed."}),"\n"]}),"\n",(0,s.jsx)(i.h2,{id:"service-specific-guidelines",children:"Service-specific guidelines"}),"\n",(0,s.jsx)(i.p,{children:"The below mentioned guidelines apply to individual services provided or used by the project."}),"\n",(0,s.jsx)(i.h3,{id:"repositories-and-issue-trackers",children:"Repositories and issue trackers"}),"\n",(0,s.jsx)(i.p,{children:"Solus utilizes a number of repositories and issue trackers to facilitate the development of various items in our project and to address issues raised by our community through tasks / issue reports. These include, but are not limited to:"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:["Our ",(0,s.jsx)(i.a,{href:"https://github.com/getsolus/",children:"Documentation, Package, Software Center, and various tooling repositories"})]}),"\n",(0,s.jsxs)(i.li,{children:["Our package ",(0,s.jsx)(i.a,{href:"https://github.com/getsolus/packages/issues",children:"issue tracker"})]}),"\n",(0,s.jsx)(i.li,{children:"All other issue trackers utilized by the project across repositories hosted in our GitHub organizations"}),"\n"]}),"\n",(0,s.jsx)(i.p,{children:"Members of the community are expected to:"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsx)(i.li,{children:"Maintain on-topic discussions as relevant to each individual task"}),"\n",(0,s.jsx)(i.li,{children:"Not engage in disruptive behavior such as the modification of tasks or task information which are not owned or assigned to the user. Please leave the general maintenance of tasks or requesting of specific information to individuals which are assigned to the task, or Solus Staff"}),"\n",(0,s.jsx)(i.li,{children:"Refrain from using the Development Tracker for general support queries, such as (but not limited to): installation assistance, package installation assistance, etc."}),"\n"]}),"\n",(0,s.jsx)(i.p,{children:"Members of the community should remain mindful that all contributors to the project do so on a voluntary basis, in their free time, and should refrain from making demands or engaging in behavior which is not respectful."}),"\n",(0,s.jsx)(i.p,{children:"Solus Staff reserves the rights to:"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsx)(i.li,{children:"Close or lock tasks on a temporary or permanent basis"}),"\n",(0,s.jsx)(i.li,{children:"Disable the account of individuals which violate either general guidelines or \u201cDevelopment / Issue Trackers\u201d-specific guidelines."}),"\n",(0,s.jsx)(i.li,{children:"Make any finalized decisions in the interest of the project, continuation of our vision / objectives for the project or various software which we develop or support."}),"\n"]})]})}function c(e={}){const{wrapper:i}={...(0,t.a)(),...e.components};return i?(0,s.jsx)(i,{...e,children:(0,s.jsx)(u,{...e})}):u(e)}},11151:(e,i,n)=>{n.d(i,{Z:()=>a,a:()=>r});var s=n(67294);const t={},o=s.createContext(t);function r(e){const i=s.useContext(o);return s.useMemo((function(){return"function"==typeof e?e(i):{...i,...e}}),[i,e])}function a(e){let i;return i=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:r(e.components),s.createElement(o.Provider,{value:i},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/5f194406.6e7ff150.js b/assets/js/5f194406.6e7ff150.js new file mode 100644 index 000000000..9727b59c7 --- /dev/null +++ b/assets/js/5f194406.6e7ff150.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([["1862"],{57999:function(e,i,n){n.r(i),n.d(i,{metadata:()=>s,contentTitle:()=>a,default:()=>c,assets:()=>l,toc:()=>u,frontMatter:()=>o});var s=JSON.parse('{"id":"user/contributing/community-guidelines","title":"Community Guidelines","description":"Solus enforces a set of community guidelines to maintain a family-friendly, respectful, and professional environment.","source":"@site/docs/user/contributing/community-guidelines.md","sourceDirName":"user/contributing","slug":"/user/contributing/community-guidelines","permalink":"/docs/user/contributing/community-guidelines","draft":false,"unlisted":false,"editUrl":"https://github.com/getsolus/help-center-docs/tree/master/docs/user/contributing/community-guidelines.md","tags":[],"version":"current","lastUpdatedAt":1733757592000,"frontMatter":{"title":"Community Guidelines","summary":"Community Guidelines"},"sidebar":"userSidebar","previous":{"title":"Contributing","permalink":"/docs/category/contributing"},"next":{"title":"Getting Involved","permalink":"/docs/user/contributing/getting-involved"}}'),t=n("85893"),r=n("50065");let o={title:"Community Guidelines",summary:"Community Guidelines"},a="Community guidelines",l={},u=[{value:"General guidelines",id:"general-guidelines",level:2},{value:"Harassment",id:"harassment",level:3},{value:"Language",id:"language",level:3},{value:"Media sharing",id:"media-sharing",level:3},{value:"Observe topic guidance",id:"observe-topic-guidance",level:3},{value:"Other",id:"other",level:3},{value:"Service-specific guidelines",id:"service-specific-guidelines",level:2},{value:"Repositories and issue trackers",id:"repositories-and-issue-trackers",level:3}];function d(e){let i={a:"a",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",p:"p",ul:"ul",...(0,r.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(i.header,{children:(0,t.jsx)(i.h1,{id:"community-guidelines",children:"Community guidelines"})}),"\n",(0,t.jsx)(i.p,{children:"Solus enforces a set of community guidelines to maintain a family-friendly, respectful, and professional environment."}),"\n",(0,t.jsx)(i.p,{children:"Our guidelines apply to all services offered or used by the project, in addition to any terms of service of third-party services used by the project. Solus Staff reserves the right to either ban or terminate access, on a temporary or permanent basis, to members of the community which are found to be violating our guidelines."}),"\n",(0,t.jsx)(i.h2,{id:"general-guidelines",children:"General guidelines"}),"\n",(0,t.jsx)(i.p,{children:"The guidelines laid out in this section apply to all services offered or used by the project, such as (but not limited to):"}),"\n",(0,t.jsxs)(i.ul,{children:["\n",(0,t.jsx)(i.li,{children:"Our package issue tracker"}),"\n",(0,t.jsx)(i.li,{children:"Any and all forums or organized communities, e.g. our Flarum forums or subreddit"}),"\n",(0,t.jsx)(i.li,{children:"Matrix, IRC, or any other officially supported means of communicating with the project and community members in real-time"}),"\n",(0,t.jsx)(i.li,{children:"Postings to social media pages / properties owned or used by the project."}),"\n"]}),"\n",(0,t.jsx)(i.h3,{id:"harassment",children:"Harassment"}),"\n",(0,t.jsx)(i.p,{children:"The project condemns any and all forms of harassment. Harassment by individuals in our community, whether in public (on services provided by or used by the project) or private (e.g. direct messages), to other members in our community, will result in the temporary or permanent banning of such individuals across any and all services provided by or used by the project."}),"\n",(0,t.jsx)(i.p,{children:"This extends to any and all events / venues sponsored or otherwise supported by the project. Harassment in such events or venues will result in the permanent banning of such individuals from future events and if necessary, the immediate removal of such individuals from any current events / venues."}),"\n",(0,t.jsx)(i.p,{children:"You are encouraged to reach out to a member of the Solus Staff should you be harassed by any member of our community so such matters may be addressed immediately."}),"\n",(0,t.jsx)(i.h3,{id:"language",children:"Language"}),"\n",(0,t.jsx)(i.p,{children:"Members of the community are expected to engage in a manner which is respectful and avoids the use of language which is hateful, derogatory, or otherwise intentionally degrading. This includes (but is not limited to) language which could be classified as:"}),"\n",(0,t.jsxs)(i.ul,{children:["\n",(0,t.jsxs)(i.li,{children:["Hateful towards individuals or groups based on:","\n",(0,t.jsxs)(i.ul,{children:["\n",(0,t.jsx)(i.li,{children:"Disabilities"}),"\n",(0,t.jsx)(i.li,{children:"Gender or gender identity"}),"\n",(0,t.jsx)(i.li,{children:"Religious beliefs"}),"\n",(0,t.jsx)(i.li,{children:"Sexual orientation"}),"\n",(0,t.jsx)(i.li,{children:"Race or nationality"}),"\n",(0,t.jsx)(i.li,{children:"Political affiliation"}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(i.li,{children:"Sexual or otherwise lewd in nature"}),"\n"]}),"\n",(0,t.jsx)(i.p,{children:"Profane language which is not derogatory, hateful, or sexual in nature may be allowed in specific off-topic rooms or other locations permitted by the project. However, the Solus Staff moderation team reserves the right to request the immediate ceasing of the use of such language by any individual if it is deemed to be derogatory, hateful, sexual, or in a manner which is otherwise distasteful."}),"\n",(0,t.jsx)(i.h3,{id:"media-sharing",children:"Media sharing"}),"\n",(0,t.jsx)(i.p,{children:"Members of the community shall not link / share media which is illegal, pornographic / sexual, or otherwise offensive in nature. This extends to sharing media which shows any illegal or otherwise harmful acts, such as acts of violence."}),"\n",(0,t.jsx)(i.h3,{id:"observe-topic-guidance",children:"Observe topic guidance"}),"\n",(0,t.jsx)(i.p,{children:"Members of the community should attempt to observe topic guidance when participating in various services offered or used by the project, such as:"}),"\n",(0,t.jsxs)(i.ul,{children:["\n",(0,t.jsx)(i.li,{children:"Ensuring support-related rooms / mediums remain free of development and off-topic discussions to maximize the community and Solus Staff\u2019s ability to respond and address issues or support requests."}),"\n",(0,t.jsx)(i.li,{children:"Ensuring development rooms / mediums remain free of off-topic discussions which are not relevant to the development or progression of various development items relating to Solus."}),"\n",(0,t.jsx)(i.li,{children:"Ensuring off-topic rooms / mediums remain free of heated discussions of polarizing issues or current events in order to keep these spaces inviting and enjoyable."}),"\n"]}),"\n",(0,t.jsx)(i.h3,{id:"other",children:"Other"}),"\n",(0,t.jsx)(i.p,{children:"The below guidelines do not fall into any specific category but should be observed by members of the community:"}),"\n",(0,t.jsxs)(i.ul,{children:["\n",(0,t.jsx)(i.li,{children:"Continual repetition and/or advertisement of any products, services, or projects is not allowed."}),"\n",(0,t.jsx)(i.li,{children:"Using bots or other automated ways of interaction, unless explicitly permitted by the project, is not allowed."}),"\n",(0,t.jsx)(i.li,{children:"No spamming or flooding. This may result in temporary removals (for example: kicks in Matrix) or warnings, to prevent the continued spamming or flooding."}),"\n",(0,t.jsx)(i.li,{children:"Promotion of unofficial Solus communities or communication channels without prior permission is not allowed."}),"\n"]}),"\n",(0,t.jsx)(i.h2,{id:"service-specific-guidelines",children:"Service-specific guidelines"}),"\n",(0,t.jsx)(i.p,{children:"The below mentioned guidelines apply to individual services provided or used by the project."}),"\n",(0,t.jsx)(i.h3,{id:"repositories-and-issue-trackers",children:"Repositories and issue trackers"}),"\n",(0,t.jsx)(i.p,{children:"Solus utilizes a number of repositories and issue trackers to facilitate the development of various items in our project and to address issues raised by our community through tasks / issue reports. These include, but are not limited to:"}),"\n",(0,t.jsxs)(i.ul,{children:["\n",(0,t.jsxs)(i.li,{children:["Our ",(0,t.jsx)(i.a,{href:"https://github.com/getsolus/",children:"Documentation, Package, Software Center, and various tooling repositories"})]}),"\n",(0,t.jsxs)(i.li,{children:["Our package ",(0,t.jsx)(i.a,{href:"https://github.com/getsolus/packages/issues",children:"issue tracker"})]}),"\n",(0,t.jsx)(i.li,{children:"All other issue trackers utilized by the project across repositories hosted in our GitHub organizations"}),"\n"]}),"\n",(0,t.jsx)(i.p,{children:"Members of the community are expected to:"}),"\n",(0,t.jsxs)(i.ul,{children:["\n",(0,t.jsx)(i.li,{children:"Maintain on-topic discussions as relevant to each individual task"}),"\n",(0,t.jsx)(i.li,{children:"Not engage in disruptive behavior such as the modification of tasks or task information which are not owned or assigned to the user. Please leave the general maintenance of tasks or requesting of specific information to individuals which are assigned to the task, or Solus Staff"}),"\n",(0,t.jsx)(i.li,{children:"Refrain from using the Development Tracker for general support queries, such as (but not limited to): installation assistance, package installation assistance, etc."}),"\n"]}),"\n",(0,t.jsx)(i.p,{children:"Members of the community should remain mindful that all contributors to the project do so on a voluntary basis, in their free time, and should refrain from making demands or engaging in behavior which is not respectful."}),"\n",(0,t.jsx)(i.p,{children:"Solus Staff reserves the rights to:"}),"\n",(0,t.jsxs)(i.ul,{children:["\n",(0,t.jsx)(i.li,{children:"Close or lock tasks on a temporary or permanent basis"}),"\n",(0,t.jsx)(i.li,{children:"Disable the account of individuals which violate either general guidelines or \u201CDevelopment / Issue Trackers\u201D-specific guidelines."}),"\n",(0,t.jsx)(i.li,{children:"Make any finalized decisions in the interest of the project, continuation of our vision / objectives for the project or various software which we develop or support."}),"\n"]})]})}function c(e={}){let{wrapper:i}={...(0,r.a)(),...e.components};return i?(0,t.jsx)(i,{...e,children:(0,t.jsx)(d,{...e})}):d(e)}},50065:function(e,i,n){n.d(i,{Z:function(){return a},a:function(){return o}});var s=n(67294);let t={},r=s.createContext(t);function o(e){let i=s.useContext(r);return s.useMemo(function(){return"function"==typeof e?e(i):{...i,...e}},[i,e])}function a(e){let i;return i=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:o(e.components),s.createElement(r.Provider,{value:i},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/6146d358.6a1e8ad3.js b/assets/js/6146d358.6a1e8ad3.js deleted file mode 100644 index a2b31ce15..000000000 --- a/assets/js/6146d358.6a1e8ad3.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[7798],{90800:e=>{e.exports=JSON.parse('{"categoryGeneratedIndex":{"title":"Contributing","slug":"/category/contributing","permalink":"/docs/category/contributing","sidebar":"userSidebar","navigation":{"previous":{"title":"Software Center","permalink":"/docs/user/quick-start/software-center/"},"next":{"title":"Community Guidelines","permalink":"/docs/user/contributing/community-guidelines"}}}}')}}]); \ No newline at end of file diff --git a/assets/js/6146d358.f47249dd.js b/assets/js/6146d358.f47249dd.js new file mode 100644 index 000000000..9f20e979c --- /dev/null +++ b/assets/js/6146d358.f47249dd.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([["2149"],{26527:function(e){e.exports=JSON.parse('{"categoryGeneratedIndex":{"title":"Contributing","slug":"/category/contributing","permalink":"/docs/category/contributing","sidebar":"userSidebar","navigation":{"previous":{"title":"Software Center","permalink":"/docs/user/quick-start/software-center/"},"next":{"title":"Community Guidelines","permalink":"/docs/user/contributing/community-guidelines"}}}}')}}]); \ No newline at end of file diff --git a/assets/js/619.680b2fd2.js b/assets/js/619.680b2fd2.js new file mode 100644 index 000000000..8c3d7f6a9 --- /dev/null +++ b/assets/js/619.680b2fd2.js @@ -0,0 +1 @@ +(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([["619"],{83550:function(e,t,r){"use strict";r.d(t,{Z:()=>U});var n=function(){function e(e){var t=this;this._insertTag=function(e){var r;r=0===t.tags.length?t.insertionPoint?t.insertionPoint.nextSibling:t.prepend?t.container.firstChild:t.before:t.tags[t.tags.length-1].nextSibling,t.container.insertBefore(e,r),t.tags.push(e)},this.isSpeedy=void 0===e.speedy||e.speedy,this.tags=[],this.ctr=0,this.nonce=e.nonce,this.key=e.key,this.container=e.container,this.prepend=e.prepend,this.insertionPoint=e.insertionPoint,this.before=null}var t=e.prototype;return t.hydrate=function(e){e.forEach(this._insertTag)},t.insert=function(e){if(this.ctr%(this.isSpeedy?65e3:1)==0){var t,r;this._insertTag((t=this,(r=document.createElement("style")).setAttribute("data-emotion",t.key),void 0!==t.nonce&&r.setAttribute("nonce",t.nonce),r.appendChild(document.createTextNode("")),r.setAttribute("data-s",""),r))}var n=this.tags[this.tags.length-1];if(this.isSpeedy){var i=function(e){if(e.sheet)return e.sheet;for(var t=0;t0?h[x]+" "+Z:s(Z,/&\f/g,h[x])).trim())c[v++]=w;return k(e,t,r,0===o?I:u,c,d,p)}function L(e,t,r,n){return k(e,t,r,M,f(e,0,n),f(e,n+1,-1),n)}var K=function(e,t,r){for(var n=0,i=0;n=i,i=S(),38===n&&12===i&&(t[r]=1),!A(i);){;w()}return f(x,e,b)},W=function(e,t){var r=-1,n=44;do switch(A(n)){case 0:38===n&&12===S()&&(t[r]=1),e[r]+=K(b-1,t,r);break;case 2:e[r]+=_(n);break;case 4:if(44===n){e[++r]=58===S()?"&\f":"",t[r]=e[r].length;break}default:e[r]+=o(n)}while(n=w());return e},F=function(e,t){var r;return r=W(P(e),t),x="",r},q=new WeakMap,D=function(e){if("rule"!==e.type||!e.parent||e.length<1)return;for(var t=e.value,r=e.parent,n=e.column===r.column&&e.line===r.line;"rule"!==r.type;)if(!(r=r.parent))return;if((1!==e.props.length||58===t.charCodeAt(0)||!!q.get(r))&&!n){q.set(e,!0);for(var i=[],o=F(t,i),a=r.props,l=0,s=0;l-1&&!e.return)switch(e.type){case M:e.return=function e(t,r){var n,i;switch(n=t,i=r,45^c(n,0)?(((i<<2^c(n,0))<<2^c(n,1))<<2^c(n,2))<<2^c(n,3):0){case 5103:return R+"print-"+t+t;case 5737:case 4201:case 3177:case 3433:case 1641:case 4457:case 2921:case 5572:case 6356:case 5844:case 3191:case 6645:case 3005:case 6391:case 5879:case 5623:case 6135:case 4599:case 4855:case 4215:case 6389:case 5109:case 5365:case 5621:case 3829:return R+t+t;case 5349:case 4246:case 4810:case 6968:case 2756:return R+t+E+t+j+t+t;case 6828:case 4268:return R+t+j+t+t;case 6165:return R+t+j+"flex-"+t+t;case 5187:return R+t+s(t,/(\w+).+(:[^]+)/,R+"box-$1$2"+j+"flex-$1$2")+t;case 5443:return R+t+j+"flex-item-"+s(t,/flex-|-self/,"")+t;case 4675:return R+t+j+"flex-line-pack"+s(t,/align-content|flex-|-self/,"")+t;case 5548:return R+t+j+s(t,"shrink","negative")+t;case 5292:return R+t+j+s(t,"basis","preferred-size")+t;case 6060:return R+"box-"+s(t,"-grow","")+R+t+j+s(t,"grow","positive")+t;case 4554:return R+s(t,/([^-])(transform)/g,"$1"+R+"$2")+t;case 6187:return s(s(s(t,/(zoom-|grab)/,R+"$1"),/(image-set)/,R+"$1"),t,"")+t;case 5495:case 3959:return s(t,/(image-set\([^]*)/,R+"$1$`$1");case 4968:return s(s(t,/(.+:)(flex-)?(.*)/,R+"box-pack:$3"+j+"flex-pack:$3"),/s.+-b[^;]+/,"justify")+R+t+t;case 4095:case 3583:case 4068:case 2532:return s(t,/(.+)-inline(.+)/,R+"$1$2")+t;case 8116:case 7059:case 5753:case 5535:case 5445:case 5701:case 4933:case 4677:case 5533:case 5789:case 5021:case 4765:if(d(t)-1-r>6)switch(c(t,r+1)){case 109:if(45!==c(t,r+4))break;case 102:return s(t,/(.+:)(.+)-([^]+)/,"$1"+R+"$2-$3$1"+E+(108==c(t,r+3)?"$3":"$2-$3"))+t;case 115:return~u(t,"stretch")?e(s(t,"stretch","fill-available"),r)+t:t}break;case 4949:if(115!==c(t,r+1))break;case 6444:switch(c(t,d(t)-3-(~u(t,"!important")&&10))){case 107:return s(t,":",":"+R)+t;case 101:return s(t,/(.+:)([^;!]+)(;|!.+)?/,"$1"+R+(45===c(t,14)?"inline-":"")+"box$3$1"+R+"$2$3$1"+j+"$2box$3")+t}break;case 5936:switch(c(t,r+11)){case 114:return R+t+j+s(t,/[svh]\w+-[tblr]{2}/,"tb")+t;case 108:return R+t+j+s(t,/[svh]\w+-[tblr]{2}/,"tb-rl")+t;case 45:return R+t+j+s(t,/[svh]\w+-[tblr]{2}/,"lr")+t}return R+t+j+t+t}return t}(e.value,e.length);break;case G:return z([Z(e,{value:s(e.value,"@","@"+R)})],n);case I:if(e.length){var i,o;return i=e.props,o=function(t){var r;switch(r=t,(r=/(::plac\w+|:read-\w+)/.exec(r))?r[0]:r){case":read-only":case":read-write":return z([Z(e,{props:[s(t,/:(read-\w+)/,":"+E+"$1")]})],n);case"::placeholder":return z([Z(e,{props:[s(t,/:(plac\w+)/,":"+R+"input-$1")]}),Z(e,{props:[s(t,/:(plac\w+)/,":"+E+"$1")]}),Z(e,{props:[s(t,/:(plac\w+)/,j+"input-$1")]})],n)}return""},i.map(o).join("")}}}],U=function(e){var t,r,i,a,l=e.key;if("css"===l){var p=document.querySelectorAll("style[data-emotion]:not([data-s])");Array.prototype.forEach.call(p,function(e){if(-1!==e.getAttribute("data-emotion").indexOf(" "))document.head.appendChild(e),e.setAttribute("data-s","")})}var y=e.stylisPlugins||V,Z={},$=[];r=e.container||document.head,Array.prototype.forEach.call(document.querySelectorAll('style[data-emotion^="'+l+' "]'),function(e){for(var t=e.getAttribute("data-emotion").split(" "),r=1;r2||A(v)>3?"":" "}(E);break;case 92:F+=function(e,t){for(var r,n;--t&&w()&&!(v<48)&&!(v>102)&&(!(v>57)||!(v<65))&&(!(v>70)||!(v<97)););return r=e,n=b+(t<6&&32==S()&&32==w()),f(x,r,n)}(b-1,7);continue;case 47:switch(S()){case 42:case 47:m(function(e,t,r){return k(e,t,r,T,o(v),f(e,2,-2),0)}(function(e,t){for(;w();)if(e+v===57)break;else if(e+v===84&&47===S())break;return"/*"+f(x,t,b-1)+"*"+o(47===e?e:w())}(w(),b),r,n),Z);break;default:F+="/"}break;case 123*R:y[$++]=d(F)*M;case 125*R:case 59:case 0:switch(G){case 0:case 125:I=0;case 59+O:-1==M&&(F=s(F,/\f/g,"")),j>0&&d(F)-P&&m(j>32?L(F+";",i,n,P-1):L(s(F," ","")+";",i,n,P-2),Z);break;case 59:F+=";";default:if(m(W=B(F,r,n,$,O,a,y,z,N=[],K=[],P),l),123===G){if(0===O)e(F,r,W,W,N,l,P,y,K);else switch(99===C&&110===c(F,3)?100:C){case 100:case 108:case 109:case 115:e(t,W,W,i&&m(B(t,W,W,0,0,a,y,z,a,N=[],P),K),a,K,P,y,i?N:K);break;default:e(F,W,W,W,[""],K,0,y,K)}}}$=O=j=0,R=M=1,z=F="",P=p;break;case 58:P=1+d(F),j=E;default:if(R<1){if(123==G)--R;else if(125==G&&0==R++&&125==(v=b>0?c(x,--b):0,g--,10===v&&(g=1,h--),v))continue}switch(F+=o(G),G*R){case 38:M=O>0?1:(F+="\f",-1);break;case 44:y[$++]=(d(F)-1)*M,M=1;break;case 64:45===S()&&(F+=_(w())),C=S(),O=P=d(z=F+=function(e){for(;!A(S());)w();return f(x,e,b)}(b)),G++;break;case 45:45===E&&2==d(F)&&(R=0)}}return l}("",null,null,null,[""],t=P(t=e),0,[0],t),x="",r),O)};i=function(e,t,r,n){a=r;C(e?e+"{"+t.styles+"}":t.styles),n&&(j.inserted[t.name]=!0)};var j={key:l,sheet:new n({key:l,container:r,nonce:e.nonce,speedy:e.speedy,prepend:e.prepend,insertionPoint:e.insertionPoint}),nonce:e.nonce,inserted:Z,registered:{},insert:i};return j.sheet.hydrate($),j}},45042:function(e,t,r){"use strict";function n(e){var t=Object.create(null);return function(r){return void 0===t[r]&&(t[r]=e(r)),t[r]}}r.d(t,{Z:function(){return n}})},75260:function(e,t,r){"use strict";r.d(t,{T:function(){return l},w:function(){return a}});var n=r(67294),i=r(83550);r(41582),r(27278);var o=n.createContext("undefined"!=typeof HTMLElement?(0,i.Z)({key:"css"}):null);o.Provider;var a=function(e){return(0,n.forwardRef)(function(t,r){return e(t,(0,n.useContext)(o),r)})},l=n.createContext({})},41582:function(e,t,r){"use strict";r.d(t,{O:()=>m});var n,i={animationIterationCount:1,aspectRatio:1,borderImageOutset:1,borderImageSlice:1,borderImageWidth:1,boxFlex:1,boxFlexGroup:1,boxOrdinalGroup:1,columnCount:1,columns:1,flex:1,flexGrow:1,flexPositive:1,flexShrink:1,flexNegative:1,flexOrder:1,gridRow:1,gridRowEnd:1,gridRowSpan:1,gridRowStart:1,gridColumn:1,gridColumnEnd:1,gridColumnSpan:1,gridColumnStart:1,msGridRow:1,msGridRowSpan:1,msGridColumn:1,msGridColumnSpan:1,fontWeight:1,lineHeight:1,opacity:1,order:1,orphans:1,tabSize:1,widows:1,zIndex:1,zoom:1,WebkitLineClamp:1,fillOpacity:1,floodOpacity:1,stopOpacity:1,strokeDasharray:1,strokeDashoffset:1,strokeMiterlimit:1,strokeOpacity:1,strokeWidth:1},o=r("45042"),a=/[A-Z]|^ms/g,l=/_EMO_([^_]+?)_([^]*?)_EMO_/g,s=function(e){return 45===e.charCodeAt(1)},u=function(e){return null!=e&&"boolean"!=typeof e},c=(0,o.Z)(function(e){return s(e)?e:e.replace(a,"-$&").toLowerCase()}),f=function(e,t){switch(e){case"animation":case"animationName":if("string"==typeof t)return t.replace(l,function(e,t,r){return n={name:t,styles:r,next:n},t})}return 1===i[e]||s(e)||"number"!=typeof t||0===t?t:t+"px"};function d(e,t,r){if(null==r)return"";if(void 0!==r.__emotion_styles)return r;switch(typeof r){case"boolean":return"";case"object":if(1===r.anim)return n={name:r.name,styles:r.styles,next:n},r.name;if(void 0!==r.styles){var i=r.next;if(void 0!==i)for(;void 0!==i;)n={name:i.name,styles:i.styles,next:n},i=i.next;var o=r.styles+";";return o}return function(e,t,r){var n="";if(Array.isArray(r))for(var i=0;i=4;++n,i-=4)r=(65535&(r=255&e.charCodeAt(n)|(255&e.charCodeAt(++n))<<8|(255&e.charCodeAt(++n))<<16|(255&e.charCodeAt(++n))<<24))*0x5bd1e995+((r>>>16)*59797<<16),r^=r>>>24,t=(65535&r)*0x5bd1e995+((r>>>16)*59797<<16)^(65535&t)*0x5bd1e995+((t>>>16)*59797<<16);switch(i){case 3:t^=(255&e.charCodeAt(n+2))<<16;case 2:t^=(255&e.charCodeAt(n+1))<<8;case 1:t^=255&e.charCodeAt(n),t=(65535&t)*0x5bd1e995+((t>>>16)*59797<<16)}return t^=t>>>13,(((t=(65535&t)*0x5bd1e995+((t>>>16)*59797<<16))^t>>>15)>>>0).toString(36)}(a)+u;return{name:c,styles:a,next:n}}},27278:function(e,t,r){"use strict";r.d(t,{L:function(){return a}});var n,i=r(67294),o=!!(n||(n=r.t(i,2))).useInsertionEffect&&(n||(n=r.t(i,2))).useInsertionEffect,a=o||function(e){return e()};o||i.useLayoutEffect},64938:function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"default",{enumerable:!0,get:function(){return n.createSvgIcon}});var n=r(30378)},10727:function(e,t,r){"use strict";r.d(t,{Z:()=>$});var n=r("53517"),i=r("35426"),o=r("67294"),a=r("86010"),l=r("59766"),s=r("94780"),u=r("34867"),c=r("13264"),f=r("29628"),d=r("39707"),p=r("63425"),m=r("95408"),h=r("57042"),g=r("85893");let y=["component","direction","spacing","divider","children","className","useFlexGap"],b=(0,p.Z)(),v=(0,c.Z)("div",{name:"MuiStack",slot:"Root",overridesResolver:(e,t)=>t.root});function x(e){return(0,f.Z)({props:e,name:"MuiStack",defaultTheme:b})}let k=e=>({row:"Left","row-reverse":"Right",column:"Top","column-reverse":"Bottom"})[e],Z=({ownerState:e,theme:t})=>{let r=(0,i.Z)({display:"flex",flexDirection:"column"},(0,m.k9)({theme:t},(0,m.P$)({values:e.direction,breakpoints:t.breakpoints.values}),e=>({flexDirection:e})));if(e.spacing){let n=(0,h.hB)(t),i=Object.keys(t.breakpoints.values).reduce((t,r)=>(("object"==typeof e.spacing&&null!=e.spacing[r]||"object"==typeof e.direction&&null!=e.direction[r])&&(t[r]=!0),t),{}),o=(0,m.P$)({values:e.direction,base:i}),a=(0,m.P$)({values:e.spacing,base:i});"object"==typeof o&&Object.keys(o).forEach((e,t,r)=>{if(!o[e]){let n=t>0?o[r[t-1]]:"column";o[e]=n}});r=(0,l.Z)(r,(0,m.k9)({theme:t},a,(t,r)=>e.useFlexGap?{gap:(0,h.NA)(n,t)}:{"& > :not(style) ~ :not(style)":{margin:0,[`margin${k(r?o[r]:e.direction)}`]:(0,h.NA)(n,t)}}))}return r=(0,m.dt)(t.breakpoints,r)};var w=r("90948"),S=r("71657");let $=function(e={}){let{createStyledComponent:t=v,useThemeProps:r=x,componentName:l="MuiStack"}=e,c=()=>(0,s.Z)({root:["root"]},e=>(0,u.Z)(l,e),{}),f=t(Z);return o.forwardRef(function(e,t){let l=r(e),s=(0,d.Z)(l),{component:u="div",direction:p="column",spacing:m=0,divider:h,children:b,className:v,useFlexGap:x=!1}=s,k=(0,n.Z)(s,y),Z=c();return(0,g.jsx)(f,(0,i.Z)({as:u,ownerState:{direction:p,spacing:m,useFlexGap:x},ref:t,className:(0,a.Z)(Z.root,v)},k,{children:h?function(e,t){let r=o.Children.toArray(e).filter(Boolean);return r.reduce((e,n,i)=>(e.push(n),it.root}),useThemeProps:e=>(0,S.Z)({props:e,name:"MuiStack"})})},79931:function(e,t,r){"use strict";r.d(t,{Z:()=>N});var n=r("35426"),i=r("53517"),o=r("67294"),a=r("86010"),l=r("94780"),s=r("34867"),u=r("18719"),c=r("13264"),f=r("29628"),d=r("96682"),p=r("39707"),m=r("63425");let h=(e,t)=>e.filter(e=>t.includes(e)),g=(e,t,r)=>{let n=e.keys[0];Array.isArray(t)?t.forEach((t,n)=>{r((t,r)=>{n<=e.keys.length-1&&(0===n?Object.assign(t,r):t[e.up(e.keys[n])]=r)},t)}):t&&"object"==typeof t?(Object.keys(t).length>e.keys.length?e.keys:h(e.keys,Object.keys(t))).forEach(i=>{if(-1!==e.keys.indexOf(i)){let o=t[i];void 0!==o&&r((t,r)=>{n===i?Object.assign(t,r):t[e.up(i)]=r},o)}}):("number"==typeof t||"string"==typeof t)&&r((e,t)=>{Object.assign(e,t)},t)};function y(e){return e?`Level${e}`:""}function b(e){return e.unstable_level>0&&e.container}function v(e){return function(t){return`var(--Grid-${t}Spacing${y(e.unstable_level)})`}}function x(e){return function(t){return 0===e.unstable_level?`var(--Grid-${t}Spacing)`:`var(--Grid-${t}Spacing${y(e.unstable_level-1)})`}}function k(e){return 0===e.unstable_level?"var(--Grid-columns)":`var(--Grid-columns${y(e.unstable_level-1)})`}let Z=({theme:e,ownerState:t})=>{let r=v(t),n={};return g(e.breakpoints,t.gridSize,(e,i)=>{let o={};!0===i&&(o={flexBasis:0,flexGrow:1,maxWidth:"100%"}),"auto"===i&&(o={flexBasis:"auto",flexGrow:0,flexShrink:0,maxWidth:"none",width:"auto"}),"number"==typeof i&&(o={flexGrow:0,flexBasis:"auto",width:`calc(100% * ${i} / ${k(t)}${b(t)?` + ${r("column")}`:""})`}),e(n,o)}),n},w=({theme:e,ownerState:t})=>{let r={};return g(e.breakpoints,t.gridOffset,(e,n)=>{let i={};"auto"===n&&(i={marginLeft:"auto"}),"number"==typeof n&&(i={marginLeft:0===n?"0px":`calc(100% * ${n} / ${k(t)})`}),e(r,i)}),r},S=({theme:e,ownerState:t})=>{if(!t.container)return{};let r=b(t)?{[`--Grid-columns${y(t.unstable_level)}`]:k(t)}:{"--Grid-columns":12};return g(e.breakpoints,t.columns,(e,n)=>{e(r,{[`--Grid-columns${y(t.unstable_level)}`]:n})}),r},$=({theme:e,ownerState:t})=>{if(!t.container)return{};let r=x(t),n=b(t)?{[`--Grid-rowSpacing${y(t.unstable_level)}`]:r("row")}:{};return g(e.breakpoints,t.rowSpacing,(r,i)=>{var o;r(n,{[`--Grid-rowSpacing${y(t.unstable_level)}`]:"string"==typeof i?i:null==(o=e.spacing)?void 0:o.call(e,i)})}),n},O=({theme:e,ownerState:t})=>{if(!t.container)return{};let r=x(t),n=b(t)?{[`--Grid-columnSpacing${y(t.unstable_level)}`]:r("column")}:{};return g(e.breakpoints,t.columnSpacing,(r,i)=>{var o;r(n,{[`--Grid-columnSpacing${y(t.unstable_level)}`]:"string"==typeof i?i:null==(o=e.spacing)?void 0:o.call(e,i)})}),n},A=({theme:e,ownerState:t})=>{if(!t.container)return{};let r={};return g(e.breakpoints,t.direction,(e,t)=>{e(r,{flexDirection:t})}),r},P=({ownerState:e})=>{let t=v(e),r=x(e);return(0,n.Z)({minWidth:0,boxSizing:"border-box"},e.container&&(0,n.Z)({display:"flex",flexWrap:"wrap"},e.wrap&&"wrap"!==e.wrap&&{flexWrap:e.wrap},{margin:`calc(${t("row")} / -2) calc(${t("column")} / -2)`},e.disableEqualOverflow&&{margin:`calc(${t("row")} * -1) 0px 0px calc(${t("column")} * -1)`}),(!e.container||b(e))&&(0,n.Z)({padding:`calc(${r("row")} / 2) calc(${r("column")} / 2)`},(e.disableEqualOverflow||e.parentDisableEqualOverflow)&&{padding:`${r("row")} 0px 0px ${r("column")}`}))},C=e=>{let t=[];return Object.entries(e).forEach(([e,r])=>{!1!==r&&void 0!==r&&t.push(`grid-${e}-${String(r)}`)}),t},_=(e,t="xs")=>{function r(e){return void 0!==e&&("string"==typeof e&&!Number.isNaN(Number(e))||"number"==typeof e&&e>0)}if(r(e))return[`spacing-${t}-${String(e)}`];if("object"==typeof e&&!Array.isArray(e)){let t=[];return Object.entries(e).forEach(([e,n])=>{r(n)&&t.push(`spacing-${e}-${String(n)}`)}),t}return[]},j=e=>void 0===e?[]:"object"==typeof e?Object.entries(e).map(([e,t])=>`direction-${e}-${t}`):[`direction-xs-${String(e)}`];var E=r("85893");let R=["className","children","columns","container","component","direction","wrap","spacing","rowSpacing","columnSpacing","disableEqualOverflow","unstable_level"],T=(0,m.Z)(),I=(0,c.Z)("div",{name:"MuiGrid",slot:"Root",overridesResolver:(e,t)=>t.root});function M(e){return(0,f.Z)({props:e,name:"MuiGrid",defaultTheme:T})}var G=r("90948"),z=r("71657");let N=function(e={}){let{createStyledComponent:t=I,useThemeProps:r=M,componentName:c="MuiGrid"}=e,f=o.createContext(void 0),m=(e,t)=>{let{container:r,direction:n,spacing:i,wrap:o,gridSize:a}=e,u={root:["root",r&&"container","wrap"!==o&&`wrap-xs-${String(o)}`,...j(n),...C(a),...r?_(i,t.breakpoints.keys[0]):[]]};return(0,l.Z)(u,e=>(0,s.Z)(c,e),{})},h=t(S,O,$,Z,A,P,w),g=o.forwardRef(function(e,t){var l,s,c,g,y,b,v,x;let k=(0,d.Z)(),Z=r(e),w=(0,p.Z)(Z),S=o.useContext(f),{className:$,children:O,columns:A=12,container:P=!1,component:C="div",direction:_="row",wrap:j="wrap",spacing:T=0,rowSpacing:I=T,columnSpacing:M=T,disableEqualOverflow:G,unstable_level:z=0}=w,N=(0,i.Z)(w,R),B=G;z&&void 0!==G&&(B=e.disableEqualOverflow);let L={},K={},W={};Object.entries(N).forEach(([e,t])=>{void 0!==k.breakpoints.values[e]?L[e]=t:void 0!==k.breakpoints.values[e.replace("Offset","")]?K[e.replace("Offset","")]=t:W[e]=t});let F=null!=(l=e.columns)?l:z?void 0:A,q=null!=(s=e.spacing)?s:z?void 0:T,D=null!=(c=null!=(g=e.rowSpacing)?g:e.spacing)?c:z?void 0:I,H=null!=(y=null!=(b=e.columnSpacing)?b:e.spacing)?y:z?void 0:M,V=(0,n.Z)({},w,{level:z,columns:F,container:P,direction:_,wrap:j,spacing:q,rowSpacing:D,columnSpacing:H,gridSize:L,gridOffset:K,disableEqualOverflow:null!=(v=null!=(x=B)?x:S)&&v,parentDisableEqualOverflow:S}),U=m(V,k),X=(0,E.jsx)(h,(0,n.Z)({ref:t,as:C,ownerState:V,className:(0,a.Z)(U.root,$)},W,{children:o.Children.map(O,e=>{if(o.isValidElement(e)&&(0,u.Z)(e,["Grid"])){var t;return o.cloneElement(e,{unstable_level:null!=(t=e.props.unstable_level)?t:z+1})}return e})}));return void 0!==B&&B!==(null!=S&&S)&&(X=(0,E.jsx)(f.Provider,{value:B,children:X})),X});return g.muiName="Grid",g}({createStyledComponent:(0,G.ZP)("div",{name:"MuiGrid2",slot:"Root",overridesResolver:(e,t)=>t.root}),componentName:"MuiGrid2",useThemeProps:e=>(0,z.Z)({props:e,name:"MuiGrid2"})})},6656:function(e,t,r){"use strict";r.d(t,{Z:()=>I});var n=r("38557"),i=r("12568"),o=r("71387"),a=r("59766"),l=r("63425"),s=r("4448"),u=r("86523"),c=r("41796");let f={black:"#000",white:"#fff"},d={50:"#fafafa",100:"#f5f5f5",200:"#eeeeee",300:"#e0e0e0",400:"#bdbdbd",500:"#9e9e9e",600:"#757575",700:"#616161",800:"#424242",900:"#212121",A100:"#f5f5f5",A200:"#eeeeee",A400:"#bdbdbd",A700:"#616161"},p={50:"#f3e5f5",100:"#e1bee7",200:"#ce93d8",300:"#ba68c8",400:"#ab47bc",500:"#9c27b0",600:"#8e24aa",700:"#7b1fa2",800:"#6a1b9a",900:"#4a148c",A100:"#ea80fc",A200:"#e040fb",A400:"#d500f9",A700:"#aa00ff"},m={50:"#ffebee",100:"#ffcdd2",200:"#ef9a9a",300:"#e57373",400:"#ef5350",500:"#f44336",600:"#e53935",700:"#d32f2f",800:"#c62828",900:"#b71c1c",A100:"#ff8a80",A200:"#ff5252",A400:"#ff1744",A700:"#d50000"},h={50:"#fff3e0",100:"#ffe0b2",200:"#ffcc80",300:"#ffb74d",400:"#ffa726",500:"#ff9800",600:"#fb8c00",700:"#f57c00",800:"#ef6c00",900:"#e65100",A100:"#ffd180",A200:"#ffab40",A400:"#ff9100",A700:"#ff6d00"},g={50:"#e3f2fd",100:"#bbdefb",200:"#90caf9",300:"#64b5f6",400:"#42a5f5",500:"#2196f3",600:"#1e88e5",700:"#1976d2",800:"#1565c0",900:"#0d47a1",A100:"#82b1ff",A200:"#448aff",A400:"#2979ff",A700:"#2962ff"},y={50:"#e1f5fe",100:"#b3e5fc",200:"#81d4fa",300:"#4fc3f7",400:"#29b6f6",500:"#03a9f4",600:"#039be5",700:"#0288d1",800:"#0277bd",900:"#01579b",A100:"#80d8ff",A200:"#40c4ff",A400:"#00b0ff",A700:"#0091ea"},b={50:"#e8f5e9",100:"#c8e6c9",200:"#a5d6a7",300:"#81c784",400:"#66bb6a",500:"#4caf50",600:"#43a047",700:"#388e3c",800:"#2e7d32",900:"#1b5e20",A100:"#b9f6ca",A200:"#69f0ae",A400:"#00e676",A700:"#00c853"},v=["mode","contrastThreshold","tonalOffset"],x={text:{primary:"rgba(0, 0, 0, 0.87)",secondary:"rgba(0, 0, 0, 0.6)",disabled:"rgba(0, 0, 0, 0.38)"},divider:"rgba(0, 0, 0, 0.12)",background:{paper:f.white,default:f.white},action:{active:"rgba(0, 0, 0, 0.54)",hover:"rgba(0, 0, 0, 0.04)",hoverOpacity:.04,selected:"rgba(0, 0, 0, 0.08)",selectedOpacity:.08,disabled:"rgba(0, 0, 0, 0.26)",disabledBackground:"rgba(0, 0, 0, 0.12)",disabledOpacity:.38,focus:"rgba(0, 0, 0, 0.12)",focusOpacity:.12,activatedOpacity:.12}},k={text:{primary:f.white,secondary:"rgba(255, 255, 255, 0.7)",disabled:"rgba(255, 255, 255, 0.5)",icon:"rgba(255, 255, 255, 0.5)"},divider:"rgba(255, 255, 255, 0.12)",background:{paper:"#121212",default:"#121212"},action:{active:f.white,hover:"rgba(255, 255, 255, 0.08)",hoverOpacity:.08,selected:"rgba(255, 255, 255, 0.16)",selectedOpacity:.16,disabled:"rgba(255, 255, 255, 0.3)",disabledBackground:"rgba(255, 255, 255, 0.12)",disabledOpacity:.38,focus:"rgba(255, 255, 255, 0.12)",focusOpacity:.12,activatedOpacity:.24}};function Z(e,t,r,n){let i=n.light||n,o=n.dark||1.5*n;!e[t]&&(e.hasOwnProperty(r)?e[t]=e[r]:"light"===t?e.light=(0,c.$n)(e.main,i):"dark"===t&&(e.dark=(0,c._j)(e.main,o)))}let w=["fontFamily","fontSize","fontWeightLight","fontWeightRegular","fontWeightMedium","fontWeightBold","htmlFontSize","allVariants","pxToRem"],S={textTransform:"uppercase"},$='"Roboto", "Helvetica", "Arial", sans-serif';function O(...e){return`${e[0]}px ${e[1]}px ${e[2]}px ${e[3]}px rgba(0,0,0,0.2),${e[4]}px ${e[5]}px ${e[6]}px ${e[7]}px rgba(0,0,0,0.14),${e[8]}px ${e[9]}px ${e[10]}px ${e[11]}px rgba(0,0,0,0.12)`}let A=["none",O(0,2,1,-1,0,1,1,0,0,1,3,0),O(0,3,1,-2,0,2,2,0,0,1,5,0),O(0,3,3,-2,0,3,4,0,0,1,8,0),O(0,2,4,-1,0,4,5,0,0,1,10,0),O(0,3,5,-1,0,5,8,0,0,1,14,0),O(0,3,5,-1,0,6,10,0,0,1,18,0),O(0,4,5,-2,0,7,10,1,0,2,16,1),O(0,5,5,-3,0,8,10,1,0,3,14,2),O(0,5,6,-3,0,9,12,1,0,3,16,2),O(0,6,6,-3,0,10,14,1,0,4,18,3),O(0,6,7,-4,0,11,15,1,0,4,20,3),O(0,7,8,-4,0,12,17,2,0,5,22,4),O(0,7,8,-4,0,13,19,2,0,5,24,4),O(0,7,9,-4,0,14,21,2,0,5,26,4),O(0,8,9,-5,0,15,22,2,0,6,28,5),O(0,8,10,-5,0,16,24,2,0,6,30,5),O(0,8,11,-5,0,17,26,2,0,6,32,5),O(0,9,11,-5,0,18,28,2,0,7,34,6),O(0,9,12,-6,0,19,29,2,0,7,36,6),O(0,10,13,-6,0,20,31,3,0,8,38,7),O(0,10,13,-6,0,21,33,3,0,8,40,7),O(0,10,14,-6,0,22,35,3,0,8,42,7),O(0,11,14,-7,0,23,36,3,0,9,44,8),O(0,11,15,-7,0,24,38,3,0,9,46,8)],P=["duration","easing","delay"],C={easeInOut:"cubic-bezier(0.4, 0, 0.2, 1)",easeOut:"cubic-bezier(0.0, 0, 0.2, 1)",easeIn:"cubic-bezier(0.4, 0, 1, 1)",sharp:"cubic-bezier(0.4, 0, 0.6, 1)"},_={shortest:150,shorter:200,short:250,standard:300,complex:375,enteringScreen:225,leavingScreen:195};function j(e){return`${Math.round(e)}ms`}function E(e){if(!e)return 0;let t=e/36;return Math.round((4+15*t**.25+t/5)*10)}let R={mobileStepper:1e3,fab:1050,speedDial:1050,appBar:1100,drawer:1200,modal:1300,snackbar:1400,tooltip:1500},T=["breakpoints","mixins","spacing","palette","transitions","typography","shape"],I=function(e={},...t){var r,O;let{mixins:I={},palette:M={},transitions:G={},typography:z={}}=e,N=(0,i.Z)(e,T);if(e.vars)throw Error((0,o.Z)(18));let B=function(e){let{mode:t="light",contrastThreshold:r=3,tonalOffset:l=.2}=e,s=(0,i.Z)(e,v),u=e.primary||function(e="light"){return"dark"===e?{main:g["200"],light:g["50"],dark:g["400"]}:{main:g["700"],light:g["400"],dark:g["800"]}}(t),w=e.secondary||function(e="light"){return"dark"===e?{main:p["200"],light:p["50"],dark:p["400"]}:{main:p["500"],light:p["300"],dark:p["700"]}}(t),S=e.error||function(e="light"){return"dark"===e?{main:m["500"],light:m["300"],dark:m["700"]}:{main:m["700"],light:m["400"],dark:m["800"]}}(t),$=e.info||function(e="light"){return"dark"===e?{main:y["400"],light:y["300"],dark:y["700"]}:{main:y["700"],light:y["500"],dark:y["900"]}}(t),O=e.success||function(e="light"){return"dark"===e?{main:b["400"],light:b["300"],dark:b["700"]}:{main:b["800"],light:b["500"],dark:b["900"]}}(t),A=e.warning||function(e="light"){return"dark"===e?{main:h["400"],light:h["300"],dark:h["700"]}:{main:"#ed6c02",light:h["500"],dark:h["900"]}}(t);function P(e){let t=(0,c.mi)(e,k.text.primary)>=r?k.text.primary:x.text.primary;return t}let C=({color:e,name:t,mainShade:r=500,lightShade:i=300,darkShade:a=700})=>{if(!(e=(0,n.Z)({},e)).main&&e[r]&&(e.main=e[r]),!e.hasOwnProperty("main"))throw Error((0,o.Z)(11,t?` (${t})`:"",r));if("string"!=typeof e.main)throw Error((0,o.Z)(12,t?` (${t})`:"",JSON.stringify(e.main)));return Z(e,"light",i,l),Z(e,"dark",a,l),!e.contrastText&&(e.contrastText=P(e.main)),e};return(0,a.Z)((0,n.Z)({common:(0,n.Z)({},f),mode:t,primary:C({color:u,name:"primary"}),secondary:C({color:w,name:"secondary",mainShade:"A400",lightShade:"A200",darkShade:"A700"}),error:C({color:S,name:"error"}),warning:C({color:A,name:"warning"}),info:C({color:$,name:"info"}),success:C({color:O,name:"success"}),grey:d,contrastThreshold:r,getContrastText:P,augmentColor:C,tonalOffset:l},{dark:k,light:x}[t]),s)}(M),L=(0,l.Z)(e);let K=(0,a.Z)(L,{mixins:(r=L.breakpoints,O=I,(0,n.Z)({toolbar:{minHeight:56,[r.up("xs")]:{"@media (orientation: landscape)":{minHeight:48}},[r.up("sm")]:{minHeight:64}}},O)),palette:B,shadows:A.slice(),typography:function(e,t){let r="function"==typeof t?t(e):t,{fontFamily:o=$,fontSize:l=14,fontWeightLight:s=300,fontWeightRegular:u=400,fontWeightMedium:c=500,fontWeightBold:f=700,htmlFontSize:d=16,allVariants:p,pxToRem:m}=r,h=(0,i.Z)(r,w),g=l/14,y=m||(e=>`${e/d*g}rem`),b=(e,t,r,i,a)=>(0,n.Z)({fontFamily:o,fontWeight:e,fontSize:y(t),lineHeight:r},o===$?{letterSpacing:`${Math.round(i/t*1e5)/1e5}em`}:{},a,p),v={h1:b(s,96,1.167,-1.5),h2:b(s,60,1.2,-.5),h3:b(u,48,1.167,0),h4:b(u,34,1.235,.25),h5:b(u,24,1.334,0),h6:b(c,20,1.6,.15),subtitle1:b(u,16,1.75,.15),subtitle2:b(c,14,1.57,.1),body1:b(u,16,1.5,.15),body2:b(u,14,1.43,.15),button:b(c,14,1.75,.4,S),caption:b(u,12,1.66,.4),overline:b(u,12,2.66,1,S),inherit:{fontFamily:"inherit",fontWeight:"inherit",fontSize:"inherit",lineHeight:"inherit",letterSpacing:"inherit"}};return(0,a.Z)((0,n.Z)({htmlFontSize:d,pxToRem:y,fontFamily:o,fontSize:l,fontWeightLight:s,fontWeightRegular:u,fontWeightMedium:c,fontWeightBold:f},v),h,{clone:!1})}(B,z),transitions:function(e){let t=(0,n.Z)({},C,e.easing),r=(0,n.Z)({},_,e.duration);return(0,n.Z)({getAutoHeightDuration:E,create:(e=["all"],n={})=>{let{duration:o=r.standard,easing:a=t.easeInOut,delay:l=0}=n;return(0,i.Z)(n,P),(Array.isArray(e)?e:[e]).map(e=>`${e} ${"string"==typeof o?o:j(o)} ${a} ${"string"==typeof l?l:j(l)}`).join(",")}},e,{easing:t,duration:r})}(G),zIndex:(0,n.Z)({},R)});return K=(0,a.Z)(K,N),K=t.reduce((e,t)=>(0,a.Z)(e,t),K),K.unstable_sxConfig=(0,n.Z)({},s.Z,null==N?void 0:N.unstable_sxConfig),K.unstable_sx=function(e){return(0,u.Z)({sx:e,theme:this})},K}},90247:function(e,t,r){"use strict";r.d(t,{Z:function(){return n}});let n=(0,r(6656).Z)()},10606:function(e,t,r){"use strict";r.d(t,{Z:function(){return n}});let n="$$material"},90948:function(e,t,r){"use strict";r.d(t,{FO:function(){return a},ZP:function(){return l}});var n=r(86717),i=r(90247),o=r(10606);let a=e=>(0,n.x9)(e)&&"classes"!==e,l=(0,n.ZP)({themeId:o.Z,defaultTheme:i.Z,rootShouldForwardProp:a})},71657:function(e,t,r){"use strict";r.d(t,{Z:function(){return a}});var n=r(29628),i=r(90247),o=r(10606);function a({props:e,name:t}){return(0,n.Z)({props:e,name:t,defaultTheme:i.Z,themeId:o.Z})}},98216:function(e,t,r){"use strict";r.d(t,{Z:function(){return n}});let n=r(14142).Z},30378:function(e,t,r){"use strict";r.r(t),r.d(t,{unstable_useEnhancedEffect:()=>j.Z,unstable_useId:()=>T,useEventCallback:()=>G.Z,debounce:()=>w,ownerWindow:()=>P,createChainedFunction:()=>o,useControlled:()=>M,capitalize:()=>i.Z,unsupportedProp:()=>I,setRef:()=>_,useForkRef:()=>z.Z,requirePropFactory:()=>C,useIsFocusVisible:()=>N.Z,ownerDocument:()=>A,isMuiElement:()=>$,unstable_ClassNameGenerator:()=>B,createSvgIcon:()=>Z,deprecatedPropType:()=>S});var n=r("37078"),i=r("98216");let o=function(...e){return e.reduce((e,t)=>null==t?e:function(...r){e.apply(this,r),t.apply(this,r)},()=>{})};var a=r("38557"),l=r("67294"),s=r.t(l,2),u=r("12568"),c=r("86010"),f=r("94780"),d=r("71657"),p=r("90948"),m=r("1588"),h=r("34867");function g(e){return(0,h.Z)("MuiSvgIcon",e)}(0,m.Z)("MuiSvgIcon",["root","colorPrimary","colorSecondary","colorAction","colorError","colorDisabled","fontSizeInherit","fontSizeSmall","fontSizeMedium","fontSizeLarge"]);var y=r("85893");let b=["children","className","color","component","fontSize","htmlColor","inheritViewBox","titleAccess","viewBox"],v=e=>{let{color:t,fontSize:r,classes:n}=e,o={root:["root","inherit"!==t&&`color${(0,i.Z)(t)}`,`fontSize${(0,i.Z)(r)}`]};return(0,f.Z)(o,g,n)},x=(0,p.ZP)("svg",{name:"MuiSvgIcon",slot:"Root",overridesResolver:(e,t)=>{let{ownerState:r}=e;return[t.root,"inherit"!==r.color&&t[`color${(0,i.Z)(r.color)}`],t[`fontSize${(0,i.Z)(r.fontSize)}`]]}})(({theme:e,ownerState:t})=>{var r,n,i,o,a,l,s,u,c,f,d,p,m,h,g,y,b;return{userSelect:"none",width:"1em",height:"1em",display:"inline-block",fill:t.hasSvgAsChild?void 0:"currentColor",flexShrink:0,transition:null==(r=e.transitions)?void 0:null==(n=r.create)?void 0:n.call(r,"fill",{duration:null==(i=e.transitions)?void 0:null==(o=i.duration)?void 0:o.shorter}),fontSize:({inherit:"inherit",small:(null==(a=e.typography)?void 0:null==(l=a.pxToRem)?void 0:l.call(a,20))||"1.25rem",medium:(null==(s=e.typography)?void 0:null==(u=s.pxToRem)?void 0:u.call(s,24))||"1.5rem",large:(null==(c=e.typography)?void 0:null==(f=c.pxToRem)?void 0:f.call(c,35))||"2.1875rem"})[t.fontSize],color:null!=(d=null==(p=(e.vars||e).palette)?void 0:null==(m=p[t.color])?void 0:m.main)?d:({action:null==(h=(e.vars||e).palette)?void 0:null==(g=h.action)?void 0:g.active,disabled:null==(y=(e.vars||e).palette)?void 0:null==(b=y.action)?void 0:b.disabled,inherit:void 0})[t.color]}}),k=l.forwardRef(function(e,t){let r=(0,d.Z)({props:e,name:"MuiSvgIcon"}),{children:n,className:i,color:o="inherit",component:s="svg",fontSize:f="medium",htmlColor:p,inheritViewBox:m=!1,titleAccess:h,viewBox:g="0 0 24 24"}=r,k=(0,u.Z)(r,b),Z=l.isValidElement(n)&&"svg"===n.type,w=(0,a.Z)({},r,{color:o,component:s,fontSize:f,instanceFontSize:e.fontSize,inheritViewBox:m,viewBox:g,hasSvgAsChild:Z}),S={};!m&&(S.viewBox=g);let $=v(w);return(0,y.jsxs)(x,(0,a.Z)({as:s,className:(0,c.Z)($.root,i),focusable:"false",color:p,"aria-hidden":!h||void 0,role:h?"img":void 0,ref:t},S,k,Z&&n.props,{ownerState:w,children:[Z?n.props.children:n,h?(0,y.jsx)("title",{children:h}):null]}))});k.muiName="SvgIcon";function Z(e,t){function r(r,n){return(0,y.jsx)(k,(0,a.Z)({"data-testid":`${t}Icon`,ref:n},r,{children:e}))}return r.muiName=k.muiName,l.memo(l.forwardRef(r))}let w=function(e,t=166){let r;function n(...i){clearTimeout(r),r=setTimeout(()=>{e.apply(this,i)},t)}return n.clear=()=>{clearTimeout(r)},n},S=function(e,t){return()=>null},$=r("18719").Z;function O(e){return e&&e.ownerDocument||document}let A=O,P=function(e){return O(e).defaultView||window};r("74625");let C=function(e,t){return()=>null},_=r("7960").Z;var j=r("58974");let E=0,R=s["useId".toString()],T=function(e){if(void 0!==R){let t=R();return null!=e?e:t}return function(e){let[t,r]=l.useState(e),n=e||t;return l.useEffect(()=>{null==t&&(E+=1,r(`mui-${E}`))},[t]),n}(e)},I=function(e,t,r,n,i){return null},M=function({controlled:e,default:t,name:r,state:n="value"}){let{current:i}=l.useRef(void 0!==e),[o,a]=l.useState(t),s=l.useCallback(e=>{!i&&a(e)},[]);return[i?e:o,s]};var G=r("81725"),z=r("41484"),N=r("7477");let B={configure:e=>{n.Z.configure(e)}}},58974:function(e,t,r){"use strict";r.d(t,{Z:function(){return n}});let n=r(73546).Z},81725:function(e,t,r){"use strict";r.d(t,{Z:()=>o});var n=r("67294"),i=r("73546");let o=function(e){let t=n.useRef(e);return(0,i.Z)(()=>{t.current=e}),n.useCallback((...e)=>(0,t.current)(...e),[])}},41484:function(e,t,r){"use strict";r.d(t,{Z:()=>o});var n=r("67294"),i=r("7960");let o=function(...e){return n.useMemo(()=>e.every(e=>null==e)?null:t=>{e.forEach(e=>{(0,i.Z)(e,t)})},e)}},7477:function(e,t,r){"use strict";let n;r.d(t,{Z:()=>f});var i=r("67294");let o=!0,a=!1,l={text:!0,search:!0,url:!0,tel:!0,email:!0,password:!0,number:!0,date:!0,month:!0,week:!0,time:!0,datetime:!0,"datetime-local":!0};function s(e){if(!e.metaKey&&!e.altKey&&!e.ctrlKey)o=!0}function u(){o=!1}function c(){"hidden"===this.visibilityState&&a&&(o=!0)}let f=function(){let e=i.useCallback(e=>{if(null!=e){var t;(t=e.ownerDocument).addEventListener("keydown",s,!0),t.addEventListener("mousedown",u,!0),t.addEventListener("pointerdown",u,!0),t.addEventListener("touchstart",u,!0),t.addEventListener("visibilitychange",c,!0)}},[]),t=i.useRef(!1);return{isFocusVisibleRef:t,onFocus:function(e){return!!function(e){let{target:t}=e;try{return t.matches(":focus-visible")}catch(e){}return o||function(e){let{type:t,tagName:r}=e;return"INPUT"===r&&!!l[t]&&!e.readOnly||"TEXTAREA"===r&&!e.readOnly||!!e.isContentEditable||!1}(t)}(e)&&(t.current=!0,!0)},onBlur:function(){return!!t.current&&(a=!0,window.clearTimeout(n),n=window.setTimeout(()=>{a=!1},100),t.current=!1,!0)},ref:e}}},7078:function(e,t,r){"use strict";r.d(t,{ZP:()=>b,Co:()=>v});var n=r("16019"),i=r("67294"),o=r("45042"),a=/^((children|dangerouslySetInnerHTML|key|ref|autoFocus|defaultValue|defaultChecked|innerHTML|suppressContentEditableWarning|suppressHydrationWarning|valueLink|abbr|accept|acceptCharset|accessKey|action|allow|allowUserMedia|allowPaymentRequest|allowFullScreen|allowTransparency|alt|async|autoComplete|autoPlay|capture|cellPadding|cellSpacing|challenge|charSet|checked|cite|classID|className|cols|colSpan|content|contentEditable|contextMenu|controls|controlsList|coords|crossOrigin|data|dateTime|decoding|default|defer|dir|disabled|disablePictureInPicture|download|draggable|encType|enterKeyHint|form|formAction|formEncType|formMethod|formNoValidate|formTarget|frameBorder|headers|height|hidden|high|href|hrefLang|htmlFor|httpEquiv|id|inputMode|integrity|is|keyParams|keyType|kind|label|lang|list|loading|loop|low|marginHeight|marginWidth|max|maxLength|media|mediaGroup|method|min|minLength|multiple|muted|name|nonce|noValidate|open|optimum|pattern|placeholder|playsInline|poster|preload|profile|radioGroup|readOnly|referrerPolicy|rel|required|reversed|role|rows|rowSpan|sandbox|scope|scoped|scrolling|seamless|selected|shape|size|sizes|slot|span|spellCheck|src|srcDoc|srcLang|srcSet|start|step|style|summary|tabIndex|target|title|translate|type|useMap|value|width|wmode|wrap|about|datatype|inlist|prefix|property|resource|typeof|vocab|autoCapitalize|autoCorrect|autoSave|color|incremental|fallback|inert|itemProp|itemScope|itemType|itemID|itemRef|on|option|results|security|unselectable|accentHeight|accumulate|additive|alignmentBaseline|allowReorder|alphabetic|amplitude|arabicForm|ascent|attributeName|attributeType|autoReverse|azimuth|baseFrequency|baselineShift|baseProfile|bbox|begin|bias|by|calcMode|capHeight|clip|clipPathUnits|clipPath|clipRule|colorInterpolation|colorInterpolationFilters|colorProfile|colorRendering|contentScriptType|contentStyleType|cursor|cx|cy|d|decelerate|descent|diffuseConstant|direction|display|divisor|dominantBaseline|dur|dx|dy|edgeMode|elevation|enableBackground|end|exponent|externalResourcesRequired|fill|fillOpacity|fillRule|filter|filterRes|filterUnits|floodColor|floodOpacity|focusable|fontFamily|fontSize|fontSizeAdjust|fontStretch|fontStyle|fontVariant|fontWeight|format|from|fr|fx|fy|g1|g2|glyphName|glyphOrientationHorizontal|glyphOrientationVertical|glyphRef|gradientTransform|gradientUnits|hanging|horizAdvX|horizOriginX|ideographic|imageRendering|in|in2|intercept|k|k1|k2|k3|k4|kernelMatrix|kernelUnitLength|kerning|keyPoints|keySplines|keyTimes|lengthAdjust|letterSpacing|lightingColor|limitingConeAngle|local|markerEnd|markerMid|markerStart|markerHeight|markerUnits|markerWidth|mask|maskContentUnits|maskUnits|mathematical|mode|numOctaves|offset|opacity|operator|order|orient|orientation|origin|overflow|overlinePosition|overlineThickness|panose1|paintOrder|pathLength|patternContentUnits|patternTransform|patternUnits|pointerEvents|points|pointsAtX|pointsAtY|pointsAtZ|preserveAlpha|preserveAspectRatio|primitiveUnits|r|radius|refX|refY|renderingIntent|repeatCount|repeatDur|requiredExtensions|requiredFeatures|restart|result|rotate|rx|ry|scale|seed|shapeRendering|slope|spacing|specularConstant|specularExponent|speed|spreadMethod|startOffset|stdDeviation|stemh|stemv|stitchTiles|stopColor|stopOpacity|strikethroughPosition|strikethroughThickness|string|stroke|strokeDasharray|strokeDashoffset|strokeLinecap|strokeLinejoin|strokeMiterlimit|strokeOpacity|strokeWidth|surfaceScale|systemLanguage|tableValues|targetX|targetY|textAnchor|textDecoration|textRendering|textLength|to|transform|u1|u2|underlinePosition|underlineThickness|unicode|unicodeBidi|unicodeRange|unitsPerEm|vAlphabetic|vHanging|vIdeographic|vMathematical|values|vectorEffect|version|vertAdvY|vertOriginX|vertOriginY|viewBox|viewTarget|visibility|widths|wordSpacing|writingMode|x|xHeight|x1|x2|xChannelSelector|xlinkActuate|xlinkArcrole|xlinkHref|xlinkRole|xlinkShow|xlinkTitle|xlinkType|xmlBase|xmlns|xmlnsXlink|xmlLang|xmlSpace|y|y1|y2|yChannelSelector|z|zoomAndPan|for|class|autofocus)|(([Dd][Aa][Tt][Aa]|[Aa][Rr][Ii][Aa]|x)-.*))$/,l=(0,o.Z)(function(e){return a.test(e)||111===e.charCodeAt(0)&&110===e.charCodeAt(1)&&91>e.charCodeAt(2)}),s=r("75260"),u=function(e,t,r){var n=e.key+"-"+t.name;!1===r&&void 0===e.registered[n]&&(e.registered[n]=t.styles)},c=function(e,t,r){u(e,t,r);var n=e.key+"-"+t.name;if(void 0===e.inserted[t.name]){var i=t;do e.insert(t===i?"."+n:"",i,e.sheet,!0),i=i.next;while(void 0!==i)}},f=r("41582"),d=r("27278"),p=function(e){return"theme"!==e},m=function(e){return"string"==typeof e&&e.charCodeAt(0)>96?l:p},h=function(e,t,r){var n;if(t){var i=t.shouldForwardProp;n=e.__emotion_forwardProp&&i?function(t){return e.__emotion_forwardProp(t)&&i(t)}:i}return"function"!=typeof n&&r&&(n=e.__emotion_forwardProp),n},g=function(e){var t=e.cache,r=e.serialized,n=e.isStringTag;return u(t,r,n),(0,d.L)(function(){return c(t,r,n)}),null},y=(function e(t,r){var o,a,l=t.__emotion_real===t,u=l&&t.__emotion_base||t;void 0!==r&&(o=r.label,a=r.target);var c=h(t,r,l),d=c||m(u),p=!d("as");return function(){var y=arguments,b=l&&void 0!==t.__emotion_styles?t.__emotion_styles.slice(0):[];if(void 0!==o&&b.push("label:"+o+";"),null==y[0]||void 0===y[0].raw)b.push.apply(b,y);else{b.push(y[0][0]);for(var v=y.length,x=1;x{Array.isArray(e.__emotion_styles)&&(e.__emotion_styles=t(e.__emotion_styles))}},95408:function(e,t,r){"use strict";r.d(t,{L7:function(){return s},P$:function(){return c},VO:function(){return i},W8:function(){return l},dt:function(){return u},k9:function(){return a}});var n=r(59766);let i={xs:0,sm:600,md:900,lg:1200,xl:1536},o={keys:["xs","sm","md","lg","xl"],up:e=>`@media (min-width:${i[e]}px)`};function a(e,t,r){let n=e.theme||{};if(Array.isArray(t)){let e=n.breakpoints||o;return t.reduce((n,i,o)=>(n[e.up(e.keys[o])]=r(t[o]),n),{})}if("object"==typeof t){let e=n.breakpoints||o;return Object.keys(t).reduce((n,o)=>(-1!==Object.keys(e.values||i).indexOf(o)?n[e.up(o)]=r(t[o],o):n[o]=t[o],n),{})}return r(t)}function l(e={}){var t;return(null==(t=e.keys)?void 0:t.reduce((t,r)=>(t[e.up(r)]={},t),{}))||{}}function s(e,t){return e.reduce((e,t)=>{let r=e[t];return(!r||0===Object.keys(r).length)&&delete e[t],e},t)}function u(e,...t){let r=l(e),i=[r,...t].reduce((e,t)=>(0,n.Z)(e,t),{});return s(Object.keys(r),i)}function c({values:e,breakpoints:t,base:r}){let n;let i=Object.keys(r||function(e,t){if("object"!=typeof e)return{};let r={},n=Object.keys(t);return Array.isArray(e)?n.forEach((t,n)=>{n{null!=e[t]&&(r[t]=!0)}),r}(e,t));return 0===i.length?e:i.reduce((t,r,i)=>(Array.isArray(e)?(t[r]=null!=e[i]?e[i]:e[n],n=i):"object"==typeof e?(t[r]=null!=e[r]?e[r]:e[n],n=r):t[r]=e,t),{})}},41796:function(e,t,r){"use strict";r.d(t,{$n:function(){return f},Fq:function(){return u},_j:function(){return c},mi:function(){return s}});var n=r(71387);function i(e,t=0,r=1){return Math.min(Math.max(t,e),r)}function o(e){let t;if(e.type)return e;if("#"===e.charAt(0))return o(function(e){e=e.slice(1);let t=RegExp(`.{1,${e.length>=6?2:1}}`,"g"),r=e.match(t);return r&&1===r[0].length&&(r=r.map(e=>e+e)),r?`rgb${4===r.length?"a":""}(${r.map((e,t)=>t<3?parseInt(e,16):Math.round(parseInt(e,16)/255*1e3)/1e3).join(", ")})`:""}(e));let r=e.indexOf("("),i=e.substring(0,r);if(-1===["rgb","rgba","hsl","hsla","color"].indexOf(i))throw Error((0,n.Z)(9,e));let a=e.substring(r+1,e.length-1);if("color"===i){if(t=(a=a.split(" ")).shift(),4===a.length&&"/"===a[3].charAt(0)&&(a[3]=a[3].slice(1)),-1===["srgb","display-p3","a98-rgb","prophoto-rgb","rec-2020"].indexOf(t))throw Error((0,n.Z)(10,t))}else a=a.split(",");return{type:i,values:a=a.map(e=>parseFloat(e)),colorSpace:t}}function a(e){let{type:t,colorSpace:r}=e,{values:n}=e;return -1!==t.indexOf("rgb")?n=n.map((e,t)=>t<3?parseInt(e,10):e):-1!==t.indexOf("hsl")&&(n[1]=`${n[1]}%`,n[2]=`${n[2]}%`),n=-1!==t.indexOf("color")?`${r} ${n.join(" ")}`:`${n.join(", ")}`,`${t}(${n})`}function l(e){let t="hsl"===(e=o(e)).type||"hsla"===e.type?o(function(e){let{values:t}=e=o(e),r=t[0],n=t[1]/100,i=t[2]/100,l=n*Math.min(i,1-i),s=(e,t=(e+r/30)%12)=>i-l*Math.max(Math.min(t-3,9-t,1),-1),u="rgb",c=[Math.round(255*s(0)),Math.round(255*s(8)),Math.round(255*s(4))];return"hsla"===e.type&&(u+="a",c.push(t[3])),a({type:u,values:c})}(e)).values:e.values;return Number((.2126*(t=t.map(t=>("color"!==e.type&&(t/=255),t<=.03928?t/12.92:((t+.055)/1.055)**2.4)))[0]+.7152*t[1]+.0722*t[2]).toFixed(3))}function s(e,t){let r=l(e),n=l(t);return(Math.max(r,n)+.05)/(Math.min(r,n)+.05)}function u(e,t){return e=o(e),t=i(t),("rgb"===e.type||"hsl"===e.type)&&(e.type+="a"),"color"===e.type?e.values[3]=`/${t}`:e.values[3]=t,a(e)}function c(e,t){if(e=o(e),t=i(t),-1!==e.type.indexOf("hsl"))e.values[2]*=1-t;else if(-1!==e.type.indexOf("rgb")||-1!==e.type.indexOf("color"))for(let r=0;r<3;r+=1)e.values[r]*=1-t;return a(e)}function f(e,t){if(e=o(e),t=i(t),-1!==e.type.indexOf("hsl"))e.values[2]+=(100-e.values[2])*t;else if(-1!==e.type.indexOf("rgb"))for(let r=0;r<3;r+=1)e.values[r]+=(255-e.values[r])*t;else if(-1!==e.type.indexOf("color"))for(let r=0;r<3;r+=1)e.values[r]+=(1-e.values[r])*t;return a(e)}},86717:function(e,t,r){"use strict";r.d(t,{ZP:()=>v,x9:()=>g});var n=r("53517"),i=r("35426"),o=r("7078"),a=r("63425"),l=r("14142");let s=["variant"];function u(e){return 0===e.length}function c(e){let{variant:t}=e,r=(0,n.Z)(e,s),i=t||"";return Object.keys(r).sort().forEach(t=>{"color"===t?i+=u(i)?e[t]:(0,l.Z)(e[t]):i+=`${u(i)?t:(0,l.Z)(t)}${(0,l.Z)(e[t].toString())}`}),i}var f=r("86523");let d=["name","slot","skipVariantsResolver","skipSx","overridesResolver"],p=(e,t)=>t.components&&t.components[e]&&t.components[e].styleOverrides?t.components[e].styleOverrides:null,m=(e,t)=>{let r=[];t&&t.components&&t.components[e]&&t.components[e].variants&&(r=t.components[e].variants);let n={};return r.forEach(e=>{n[c(e.props)]=e.style}),n},h=(e,t,r,n)=>{var i,o;let{ownerState:a={}}=e,l=[],s=null==r?void 0:null==(i=r.components)?void 0:null==(o=i[n])?void 0:o.variants;return s&&s.forEach(r=>{let n=!0;Object.keys(r.props).forEach(t=>{a[t]!==r.props[t]&&e[t]!==r.props[t]&&(n=!1)}),n&&l.push(t[c(r.props)])}),l};function g(e){return"ownerState"!==e&&"theme"!==e&&"sx"!==e&&"as"!==e}let y=(0,a.Z)();function b({defaultTheme:e,theme:t,themeId:r}){return 0===Object.keys(t).length?e:t[r]||t}function v(e={}){let{themeId:t,defaultTheme:r=y,rootShouldForwardProp:a=g,slotShouldForwardProp:l=g}=e,s=e=>(0,f.Z)((0,i.Z)({},e,{theme:b((0,i.Z)({},e,{defaultTheme:r,themeId:t}))}));return s.__mui_systemSx=!0,(e,u={})=>{let c;(0,o.Co)(e,e=>e.filter(e=>!(null!=e&&e.__mui_systemSx)));let{name:f,slot:y,skipVariantsResolver:v,skipSx:x,overridesResolver:k}=u,Z=(0,n.Z)(u,d),w=void 0!==v?v:y&&"Root"!==y||!1,S=x||!1,$=g;if("Root"===y)$=a;else if(y)$=l;else{var O;if("string"==typeof(O=e)&&O.charCodeAt(0)>96)$=void 0}let A=(0,o.ZP)(e,(0,i.Z)({shouldForwardProp:$,label:c},Z)),P=(n,...o)=>{let a=o?o.map(e=>"function"==typeof e&&e.__emotion_real!==e?n=>e((0,i.Z)({},n,{theme:b((0,i.Z)({},n,{defaultTheme:r,themeId:t}))})):e):[],l=n;f&&k&&a.push(e=>{let n=b((0,i.Z)({},e,{defaultTheme:r,themeId:t})),o=p(f,n);if(o){let t={};return Object.entries(o).forEach(([r,o])=>{t[r]="function"==typeof o?o((0,i.Z)({},e,{theme:n})):o}),k(e,t)}return null}),f&&!w&&a.push(e=>{let n=b((0,i.Z)({},e,{defaultTheme:r,themeId:t}));return h(e,m(f,n),n,f)}),!S&&a.push(s);let u=a.length-o.length;if(Array.isArray(n)&&u>0){let e=Array(u).fill("");(l=[...n,...e]).raw=[...n.raw,...e]}else"function"==typeof n&&n.__emotion_real!==n&&(l=e=>n((0,i.Z)({},e,{theme:b((0,i.Z)({},e,{defaultTheme:r,themeId:t}))})));let c=A(l,...a);return e.muiName&&(c.muiName=e.muiName),c};return A.withConfig&&(P.withConfig=A.withConfig),P}}},63425:function(e,t,r){"use strict";r.d(t,{Z:()=>p});var n=r("35426"),i=r("53517"),o=r("59766");let a=["values","unit","step"],l=e=>{let t=Object.keys(e).map(t=>({key:t,val:e[t]}))||[];return t.sort((e,t)=>e.val-t.val),t.reduce((e,t)=>(0,n.Z)({},e,{[t.key]:t.val}),{})},s={borderRadius:4};var u=r("57042"),c=r("86523"),f=r("4448");let d=["breakpoints","palette","spacing","shape"],p=function(e={},...t){let{breakpoints:r={},palette:p={},spacing:m,shape:h={}}=e,g=(0,i.Z)(e,d),y=function(e){let{values:t={xs:0,sm:600,md:900,lg:1200,xl:1536},unit:r="px",step:o=5}=e,s=(0,i.Z)(e,a),u=l(t),c=Object.keys(u);function f(e){let n="number"==typeof t[e]?t[e]:e;return`@media (min-width:${n}${r})`}function d(e){let n="number"==typeof t[e]?t[e]:e;return`@media (max-width:${n-o/100}${r})`}function p(e,n){let i=c.indexOf(n);return`@media (min-width:${"number"==typeof t[e]?t[e]:e}${r}) and (max-width:${(-1!==i&&"number"==typeof t[c[i]]?t[c[i]]:n)-o/100}${r})`}return(0,n.Z)({keys:c,values:u,up:f,down:d,between:p,only:function(e){return c.indexOf(e)+1(0===e.length?[1]:e).map(e=>{let r=t(e);return"number"==typeof r?`${r}px`:r}).join(" ");return r.mui=!0,r}(m),v=(0,o.Z)({breakpoints:y,direction:"ltr",components:{},palette:(0,n.Z)({mode:"light"},p),spacing:b,shape:(0,n.Z)({},s,h)},g);return(v=t.reduce((e,t)=>(0,o.Z)(e,t),v)).unstable_sxConfig=(0,n.Z)({},f.Z,null==g?void 0:g.unstable_sxConfig),v.unstable_sx=function(e){return(0,c.Z)({sx:e,theme:this})},v}},47730:function(e,t,r){"use strict";r.d(t,{Z:function(){return i}});var n=r(59766);let i=function(e,t){return t?(0,n.Z)(e,t,{clone:!1}):e}},57042:function(e,t,r){"use strict";r.d(t,{e6:()=>y,o3:()=>b,hB:()=>m,eI:()=>p,NA:()=>h});var n=r("95408"),i=r("54844"),o=r("47730");let a={m:"margin",p:"padding"},l={t:"Top",r:"Right",b:"Bottom",l:"Left",x:["Left","Right"],y:["Top","Bottom"]},s={marginX:"mx",marginY:"my",paddingX:"px",paddingY:"py"},u=function(e){let t={};return r=>(void 0===t[r]&&(t[r]=e(r)),t[r])}(e=>{if(e.length>2){if(!s[e])return[e];e=s[e]}let[t,r]=e.split(""),n=a[t],i=l[r]||"";return Array.isArray(i)?i.map(e=>n+e):[n+i]}),c=["m","mt","mr","mb","ml","mx","my","margin","marginTop","marginRight","marginBottom","marginLeft","marginX","marginY","marginInline","marginInlineStart","marginInlineEnd","marginBlock","marginBlockStart","marginBlockEnd"],f=["p","pt","pr","pb","pl","px","py","padding","paddingTop","paddingRight","paddingBottom","paddingLeft","paddingX","paddingY","paddingInline","paddingInlineStart","paddingInlineEnd","paddingBlock","paddingBlockStart","paddingBlockEnd"],d=[...c,...f];function p(e,t,r,n){var o;let a=null!=(o=(0,i.DW)(e,t,!1))?o:r;return"number"==typeof a?e=>"string"==typeof e?e:a*e:Array.isArray(a)?e=>"string"==typeof e?e:a[e]:"function"==typeof a?a:()=>void 0}function m(e){return p(e,"spacing",8,"spacing")}function h(e,t){if("string"==typeof t||null==t)return t;let r=e(Math.abs(t));return t>=0?r:"number"==typeof r?-r:`-${r}`}function g(e,t){let r=m(e.theme);return Object.keys(e).map(i=>(function(e,t,r,i){var o,a;if(-1===t.indexOf(r))return null;let l=(o=u(r),a=i,e=>o.reduce((t,r)=>(t[r]=h(a,e),t),{})),s=e[r];return(0,n.k9)(e,s,l)})(e,t,i,r)).reduce(o.Z,{})}function y(e){return g(e,c)}function b(e){return g(e,f)}function v(e){return g(e,d)}y.propTypes={},y.filterProps=c,b.propTypes={},b.filterProps=f,v.propTypes={},v.filterProps=d},54844:function(e,t,r){"use strict";r.d(t,{DW:function(){return o},Jq:function(){return a},ZP:function(){return l}});var n=r(14142),i=r(95408);function o(e,t,r=!0){if(!t||"string"!=typeof t)return null;if(e&&e.vars&&r){let r=`vars.${t}`.split(".").reduce((e,t)=>e&&e[t]?e[t]:null,e);if(null!=r)return r}return t.split(".").reduce((e,t)=>e&&null!=e[t]?e[t]:null,e)}function a(e,t,r,n=r){let i;return i="function"==typeof e?e(r):Array.isArray(e)?e[r]||n:o(e,r)||n,t&&(i=t(i,n,e)),i}let l=function(e){let{prop:t,cssProperty:r=e.prop,themeKey:l,transform:s}=e,u=e=>{if(null==e[t])return null;let u=e[t],c=o(e.theme,l)||{};return(0,i.k9)(e,u,e=>{let i=a(c,s,e);return(e===i&&"string"==typeof e&&(i=a(c,s,`${t}${"default"===e?"":(0,n.Z)(e)}`,e)),!1===r)?i:{[r]:i}})};return u.propTypes={},u.filterProps=[t],u}},4448:function(e,t,r){"use strict";r.d(t,{Z:()=>L});var n=r("57042"),i=r("54844"),o=r("47730");let a=function(...e){let t=e.reduce((e,t)=>(t.filterProps.forEach(r=>{e[r]=t}),e),{}),r=e=>Object.keys(e).reduce((r,n)=>t[n]?(0,o.Z)(r,t[n](e)):r,{});return r.propTypes={},r.filterProps=e.reduce((e,t)=>e.concat(t.filterProps),[]),r};var l=r("95408");function s(e){return"number"!=typeof e?e:`${e}px solid`}let u=(0,i.ZP)({prop:"border",themeKey:"borders",transform:s}),c=(0,i.ZP)({prop:"borderTop",themeKey:"borders",transform:s}),f=(0,i.ZP)({prop:"borderRight",themeKey:"borders",transform:s}),d=(0,i.ZP)({prop:"borderBottom",themeKey:"borders",transform:s}),p=(0,i.ZP)({prop:"borderLeft",themeKey:"borders",transform:s}),m=(0,i.ZP)({prop:"borderColor",themeKey:"palette"}),h=(0,i.ZP)({prop:"borderTopColor",themeKey:"palette"}),g=(0,i.ZP)({prop:"borderRightColor",themeKey:"palette"}),y=(0,i.ZP)({prop:"borderBottomColor",themeKey:"palette"}),b=(0,i.ZP)({prop:"borderLeftColor",themeKey:"palette"}),v=e=>{if(void 0!==e.borderRadius&&null!==e.borderRadius){let t=(0,n.eI)(e.theme,"shape.borderRadius",4,"borderRadius");return(0,l.k9)(e,e.borderRadius,e=>({borderRadius:(0,n.NA)(t,e)}))}return null};v.propTypes={},v.filterProps=["borderRadius"],a(u,c,f,d,p,m,h,g,y,b,v);let x=e=>{if(void 0!==e.gap&&null!==e.gap){let t=(0,n.eI)(e.theme,"spacing",8,"gap");return(0,l.k9)(e,e.gap,e=>({gap:(0,n.NA)(t,e)}))}return null};x.propTypes={},x.filterProps=["gap"];let k=e=>{if(void 0!==e.columnGap&&null!==e.columnGap){let t=(0,n.eI)(e.theme,"spacing",8,"columnGap");return(0,l.k9)(e,e.columnGap,e=>({columnGap:(0,n.NA)(t,e)}))}return null};k.propTypes={},k.filterProps=["columnGap"];let Z=e=>{if(void 0!==e.rowGap&&null!==e.rowGap){let t=(0,n.eI)(e.theme,"spacing",8,"rowGap");return(0,l.k9)(e,e.rowGap,e=>({rowGap:(0,n.NA)(t,e)}))}return null};Z.propTypes={},Z.filterProps=["rowGap"];let w=(0,i.ZP)({prop:"gridColumn"}),S=(0,i.ZP)({prop:"gridRow"}),$=(0,i.ZP)({prop:"gridAutoFlow"}),O=(0,i.ZP)({prop:"gridAutoColumns"}),A=(0,i.ZP)({prop:"gridAutoRows"}),P=(0,i.ZP)({prop:"gridTemplateColumns"}),C=(0,i.ZP)({prop:"gridTemplateRows"}),_=(0,i.ZP)({prop:"gridTemplateAreas"});function j(e,t){return"grey"===t?t:e}a(x,k,Z,w,S,$,O,A,P,C,_,(0,i.ZP)({prop:"gridArea"}));let E=(0,i.ZP)({prop:"color",themeKey:"palette",transform:j}),R=(0,i.ZP)({prop:"bgcolor",cssProperty:"backgroundColor",themeKey:"palette",transform:j});function T(e){return e<=1&&0!==e?`${100*e}%`:e}a(E,R,(0,i.ZP)({prop:"backgroundColor",themeKey:"palette",transform:j}));let I=(0,i.ZP)({prop:"width",transform:T}),M=e=>void 0!==e.maxWidth&&null!==e.maxWidth?(0,l.k9)(e,e.maxWidth,t=>{var r,n,i;return{maxWidth:(null==(r=e.theme)?void 0:null==(n=r.breakpoints)?void 0:null==(i=n.values)?void 0:i[t])||l.VO[t]||T(t)}}):null;M.filterProps=["maxWidth"];let G=(0,i.ZP)({prop:"minWidth",transform:T}),z=(0,i.ZP)({prop:"height",transform:T}),N=(0,i.ZP)({prop:"maxHeight",transform:T}),B=(0,i.ZP)({prop:"minHeight",transform:T});(0,i.ZP)({prop:"size",cssProperty:"width",transform:T}),(0,i.ZP)({prop:"size",cssProperty:"height",transform:T}),a(I,M,G,z,N,B,(0,i.ZP)({prop:"boxSizing"}));let L={border:{themeKey:"borders",transform:s},borderTop:{themeKey:"borders",transform:s},borderRight:{themeKey:"borders",transform:s},borderBottom:{themeKey:"borders",transform:s},borderLeft:{themeKey:"borders",transform:s},borderColor:{themeKey:"palette"},borderTopColor:{themeKey:"palette"},borderRightColor:{themeKey:"palette"},borderBottomColor:{themeKey:"palette"},borderLeftColor:{themeKey:"palette"},borderRadius:{themeKey:"shape.borderRadius",style:v},color:{themeKey:"palette",transform:j},bgcolor:{themeKey:"palette",cssProperty:"backgroundColor",transform:j},backgroundColor:{themeKey:"palette",transform:j},p:{style:n.o3},pt:{style:n.o3},pr:{style:n.o3},pb:{style:n.o3},pl:{style:n.o3},px:{style:n.o3},py:{style:n.o3},padding:{style:n.o3},paddingTop:{style:n.o3},paddingRight:{style:n.o3},paddingBottom:{style:n.o3},paddingLeft:{style:n.o3},paddingX:{style:n.o3},paddingY:{style:n.o3},paddingInline:{style:n.o3},paddingInlineStart:{style:n.o3},paddingInlineEnd:{style:n.o3},paddingBlock:{style:n.o3},paddingBlockStart:{style:n.o3},paddingBlockEnd:{style:n.o3},m:{style:n.e6},mt:{style:n.e6},mr:{style:n.e6},mb:{style:n.e6},ml:{style:n.e6},mx:{style:n.e6},my:{style:n.e6},margin:{style:n.e6},marginTop:{style:n.e6},marginRight:{style:n.e6},marginBottom:{style:n.e6},marginLeft:{style:n.e6},marginX:{style:n.e6},marginY:{style:n.e6},marginInline:{style:n.e6},marginInlineStart:{style:n.e6},marginInlineEnd:{style:n.e6},marginBlock:{style:n.e6},marginBlockStart:{style:n.e6},marginBlockEnd:{style:n.e6},displayPrint:{cssProperty:!1,transform:e=>({"@media print":{display:e}})},display:{},overflow:{},textOverflow:{},visibility:{},whiteSpace:{},flexBasis:{},flexDirection:{},flexWrap:{},justifyContent:{},alignItems:{},alignContent:{},order:{},flex:{},flexGrow:{},flexShrink:{},alignSelf:{},justifyItems:{},justifySelf:{},gap:{style:x},rowGap:{style:Z},columnGap:{style:k},gridColumn:{},gridRow:{},gridAutoFlow:{},gridAutoColumns:{},gridAutoRows:{},gridTemplateColumns:{},gridTemplateRows:{},gridTemplateAreas:{},gridArea:{},position:{},zIndex:{themeKey:"zIndex"},top:{},right:{},bottom:{},left:{},boxShadow:{themeKey:"shadows"},width:{transform:T},maxWidth:{style:M},minWidth:{transform:T},height:{transform:T},maxHeight:{transform:T},minHeight:{transform:T},boxSizing:{},fontFamily:{themeKey:"typography"},fontSize:{themeKey:"typography"},fontStyle:{themeKey:"typography"},fontWeight:{themeKey:"typography"},letterSpacing:{},textTransform:{},lineHeight:{},textAlign:{},typography:{cssProperty:!1,themeKey:"typography"}}},39707:function(e,t,r){"use strict";r.d(t,{Z:function(){return u}});var n=r(35426),i=r(53517),o=r(59766),a=r(4448);let l=["sx"],s=e=>{var t,r;let n={systemProps:{},otherProps:{}},i=null!=(t=null==e?void 0:null==(r=e.theme)?void 0:r.unstable_sxConfig)?t:a.Z;return Object.keys(e).forEach(t=>{i[t]?n.systemProps[t]=e[t]:n.otherProps[t]=e[t]}),n};function u(e){let t;let{sx:r}=e,{systemProps:a,otherProps:u}=s((0,i.Z)(e,l));return t=Array.isArray(r)?[a,...r]:"function"==typeof r?(...e)=>{let t=r(...e);return(0,o.P)(t)?(0,n.Z)({},a,t):a}:(0,n.Z)({},a,r),(0,n.Z)({},u,{sx:t})}},86523:function(e,t,r){"use strict";r.d(t,{Z:function(){return u}});var n=r(14142),i=r(47730),o=r(54844),a=r(95408),l=r(4448);let s=function(){function e(e,t,r,i){let l={[e]:t,theme:r},s=i[e];if(!s)return{[e]:t};let{cssProperty:u=e,themeKey:c,transform:f,style:d}=s;if(null==t)return null;if("typography"===c&&"inherit"===t)return{[e]:t};let p=(0,o.DW)(r,c)||{};return d?d(l):(0,a.k9)(l,t,t=>{let r=(0,o.Jq)(p,f,t);return(t===r&&"string"==typeof t&&(r=(0,o.Jq)(p,f,`${e}${"default"===t?"":(0,n.Z)(t)}`,t)),!1===u)?r:{[u]:r}})}return function t(r){var n;let{sx:o,theme:s={}}=r||{};if(!o)return null;let u=null!=(n=s.unstable_sxConfig)?n:l.Z;function c(r){let n=r;if("function"==typeof r)n=r(s);else if("object"!=typeof r)return r;if(!n)return null;let o=(0,a.W8)(s.breakpoints),l=Object.keys(o),c=o;return Object.keys(n).forEach(r=>{var o,l;let f=(o=n[r],l=s,"function"==typeof o?o(l):o);if(null!=f){if("object"==typeof f){if(u[r])c=(0,i.Z)(c,e(r,f,s,u));else{let e=(0,a.k9)({theme:s},f,e=>({[r]:e}));(function(...e){let t=new Set(e.reduce((e,t)=>e.concat(Object.keys(t)),[]));return e.every(e=>t.size===Object.keys(e).length)})(e,f)?c[r]=t({sx:f,theme:s}):c=(0,i.Z)(c,e)}}else c=(0,i.Z)(c,e(r,f,s,u))}}),(0,a.L7)(l,c)}return Array.isArray(o)?o.map(c):c(o)}}();s.filterProps=["sx"];let u=s},13264:function(e,t,r){"use strict";r.d(t,{Z:function(){return n}});let n=(0,r(86717).ZP)()},96682:function(e,t,r){"use strict";r.d(t,{Z:function(){return a}});var n=r(63425),i=r(34168);let o=(0,n.Z)(),a=function(e=o){return(0,i.Z)(e)}},20539:function(e,t,r){"use strict";r.d(t,{Z:function(){return i}});var n=r(47925);function i(e){let{theme:t,name:r,props:i}=e;return t&&t.components&&t.components[r]&&t.components[r].defaultProps?(0,n.Z)(t.components[r].defaultProps,i):i}},29628:function(e,t,r){"use strict";r.d(t,{Z:function(){return o}});var n=r(20539),i=r(96682);function o({props:e,name:t,defaultTheme:r,themeId:o}){let a=(0,i.Z)(r);return o&&(a=a[o]||a),(0,n.Z)({theme:a,name:t,props:e})}},34168:function(e,t,r){"use strict";r.d(t,{Z:function(){return o}});var n=r(67294),i=r(75260);let o=function(e=null){let t=n.useContext(i.T);return t&&0!==Object.keys(t).length?t:e}},37078:function(e,t,r){"use strict";let n;r.d(t,{Z:function(){return o}});let i=e=>e;let o=(n=i,{configure(e){n=e},generate:e=>n(e),reset(){n=i}})},14142:function(e,t,r){"use strict";r.d(t,{Z:function(){return i}});var n=r(71387);function i(e){if("string"!=typeof e)throw Error((0,n.Z)(7));return e.charAt(0).toUpperCase()+e.slice(1)}},94780:function(e,t,r){"use strict";function n(e,t,r){let n={};return Object.keys(e).forEach(i=>{n[i]=e[i].reduce((e,n)=>{if(n){let i=t(n);""!==i&&e.push(i),r&&r[n]&&e.push(r[n])}return e},[]).join(" ")}),n}r.d(t,{Z:function(){return n}})},59766:function(e,t,r){"use strict";r.d(t,{P:function(){return i},Z:function(){return function e(t,r,o={clone:!0}){let a=o.clone?(0,n.Z)({},t):t;return i(t)&&i(r)&&Object.keys(r).forEach(n=>{if("__proto__"!==n)i(r[n])&&n in t&&i(t[n])?a[n]=e(t[n],r[n],o):o.clone?a[n]=i(r[n])?function e(t){if(!i(t))return t;let r={};return Object.keys(t).forEach(n=>{r[n]=e(t[n])}),r}(r[n]):r[n]:a[n]=r[n]}),a}}});var n=r(74625);function i(e){return null!==e&&"object"==typeof e&&e.constructor===Object}},71387:function(e,t,r){"use strict";function n(e){let t="https://mui.com/production-error/?code="+e;for(let e=1;e{o[t]=(0,n.Z)(e,t,r)}),o}},18719:function(e,t,r){"use strict";r.d(t,{Z:function(){return i}});var n=r(67294);function i(e,t){return n.isValidElement(e)&&-1!==t.indexOf(e.type.muiName)}},47925:function(e,t,r){"use strict";r.d(t,{Z:function(){return function e(t,r){let i=(0,n.Z)({},r);return Object.keys(t).forEach(o=>{if(o.toString().match(/^(components|slots)$/))i[o]=(0,n.Z)({},t[o],i[o]);else if(o.toString().match(/^(componentsProps|slotProps)$/)){let a=t[o]||{},l=r[o];i[o]={},l&&Object.keys(l)?a&&Object.keys(a)?(i[o]=(0,n.Z)({},l),Object.keys(a).forEach(t=>{i[o][t]=e(a[t],l[t])})):i[o]=l:i[o]=a}else void 0===i[o]&&(i[o]=t[o])}),i}}});var n=r(74625)},7960:function(e,t,r){"use strict";function n(e,t){"function"==typeof e?e(t):e&&(e.current=t)}r.d(t,{Z:function(){return n}})},73546:function(e,t,r){"use strict";r.d(t,{Z:function(){return i}});var n=r(67294);let i="undefined"!=typeof window?n.useLayoutEffect:n.useEffect},86010:function(e,t,r){"use strict";r.d(t,{Z:function(){return n}});let n=function(){for(var e,t,r=0,n="";r=0)&&(i[r]=e[r]);return i}r.d(t,{Z:function(){return n}})},35426:function(e,t,r){"use strict";function n(){return(n=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0)&&(i[r]=e[r]);return i}r.d(t,{Z:function(){return n}})},74625:function(e,t,r){"use strict";function n(){return(n=Object.assign?Object.assign.bind():function(e){for(var t=1;tn,contentTitle:()=>o,default:()=>h,assets:()=>c,toc:()=>d,frontMatter:()=>r});var n=JSON.parse('{"id":"packaging/procedures/maintainership","title":"Maintainership","description":"The role of a maintainer is to update package(s) on a regular basis, while following Solus packaging and consistency standards.","source":"@site/docs/packaging/procedures/maintainership.md","sourceDirName":"packaging/procedures","slug":"/packaging/procedures/maintainership","permalink":"/docs/packaging/procedures/maintainership","draft":false,"unlisted":false,"editUrl":"https://github.com/getsolus/help-center-docs/tree/master/docs/packaging/procedures/maintainership.md","tags":[],"version":"current","lastUpdatedAt":1733757592000,"frontMatter":{"title":"Maintainership","summary":"Package maintainership"},"sidebar":"packagingSidebar","previous":{"title":"Procedures","permalink":"/docs/category/procedures"},"next":{"title":"Package Inclusion Policy","permalink":"/docs/packaging/procedures/package-inclusion"}}'),t=i("85893"),s=i("50065");let r={title:"Maintainership",summary:"Package maintainership"},o="Maintainership",c={},d=[{value:"Commitment",id:"commitment",level:2},{value:"Stepping in",id:"stepping-in",level:2},{value:"Updating a maintained package",id:"updating-a-maintained-package",level:2},{value:"Maintainers",id:"maintainers",level:3},{value:"Non-maintainers",id:"non-maintainers",level:3},{value:"Template for the MAINTAINERS.md file",id:"template-for-the-maintainersmd-file",level:2}];function l(e){let a={a:"a",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",p:"p",pre:"pre",ul:"ul",...(0,s.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(a.header,{children:(0,t.jsx)(a.h1,{id:"maintainership",children:"Maintainership"})}),"\n",(0,t.jsx)(a.p,{children:"The role of a maintainer is to update package(s) on a regular basis, while following Solus packaging and consistency standards."}),"\n",(0,t.jsx)(a.h2,{id:"commitment",children:"Commitment"}),"\n",(0,t.jsx)(a.p,{children:"Each new package which is going to land in the Solus repository must have one or more maintainers. These individuals commit to:"}),"\n",(0,t.jsxs)(a.ul,{children:["\n",(0,t.jsx)(a.li,{children:"Update the package reasonably regularly, unless there are valid reasons to hold it back"}),"\n",(0,t.jsxs)(a.li,{children:["Ensure the ",(0,t.jsx)(a.a,{href:"/docs/packaging/package.yml",children:"packaging file"})," adheres to the Solus ",(0,t.jsx)(a.a,{href:"/docs/packaging/packaging-practices",children:"standards"})]}),"\n",(0,t.jsx)(a.li,{children:"Ensure the application or library is consistent with the Operating System aesthetics, file system conventions and the Solus philosophy in general"}),"\n"]}),"\n",(0,t.jsxs)(a.p,{children:["On the Solus side however, the community must not forget that maintainers are volunteers, which may or may not have a technical background. More experienced users are to engage new maintainers in a welcoming manner, e.g. by listing their errors and inviting them to fix them. (More on this in the ",(0,t.jsx)(a.a,{href:"/docs/user/contributing/community-guidelines#repositories-and-issue-trackers",children:"community guidelines"}),")"]}),"\n",(0,t.jsx)(a.p,{children:"The Solus Staff have the right to enforce certain practices, even when in contrast with maintainers' vision. It also has the right to ultimately accept or reject a patch."}),"\n",(0,t.jsx)(a.h2,{id:"stepping-in",children:"Stepping in"}),"\n",(0,t.jsxs)(a.p,{children:["To officially step in as the maintainer of a package, a ",(0,t.jsx)(a.code,{children:"MAINTAINERS.md"})," file must be provided for accepted packages that are not yet included in the repository, or if the package predates the policy of requiring one. Instead, if a previously maintained package is marked by Solus Staff as needing a new maintainer, the ",(0,t.jsx)(a.code,{children:"MAINTAINERS.md"})," file must be updated."]}),"\n",(0,t.jsx)(a.h2,{id:"updating-a-maintained-package",children:"Updating a maintained package"}),"\n",(0,t.jsx)(a.p,{children:"The procedure varies depending on whether or not the individual is the maintainer."}),"\n",(0,t.jsx)(a.h3,{id:"maintainers",children:"Maintainers"}),"\n",(0,t.jsxs)(a.p,{children:["Maintainers are free to ",(0,t.jsx)(a.a,{href:"/docs/packaging/updating-an-existing-package",children:"update a package"})," at their will, unless otherwise indicated by Solus Staff."]}),"\n",(0,t.jsx)(a.h3,{id:"non-maintainers",children:"Non-maintainers"}),"\n",(0,t.jsxs)(a.p,{children:["If a package is actively maintained, modifications should not occur and the individual should exercise patience when it comes to updates. In some cases, a maintainer may intentionally be holding back a package, or has simply not updated yet. If pertinent, the individual should file a ",(0,t.jsx)(a.a,{href:"/docs/packaging/procedures/request-a-package-update",children:"package update request"}),". Alternatively, the individual can reach the maintainers or Solus Staff via the Solus Packaging room on ",(0,t.jsx)(a.a,{href:"/docs/user/contributing/getting-involved#matrix-chat",children:"Matrix"})," and ask permission to update the package. It is also possible to submit an update and attach a message to it clarifying the intention of updating the package, although this is a special case reserved to e.g. security updates."]}),"\n",(0,t.jsxs)(a.h2,{id:"template-for-the-maintainersmd-file",children:["Template for the ",(0,t.jsx)(a.code,{children:"MAINTAINERS.md"})," file"]}),"\n",(0,t.jsxs)(a.p,{children:["Presented here is the ",(0,t.jsx)(a.code,{children:"MAINTAINERS.md"})," file. This file must be provided verbatim alongside the other patch contents, and filled in with the maintainers' personal information. A ",(0,t.jsx)(a.a,{href:"/docs/user/contributing/getting-involved#matrix-chat",children:"Matrix"})," contact is optional but recommended, while an email address is mandatory. Similar to the ",(0,t.jsx)(a.code,{children:".solus/packager"})," file used for packaging, the maintainers listed in ",(0,t.jsx)(a.code,{children:"MAINTAINERS.md"})," must use their real first and last name(s) for accountability purposes."]}),"\n",(0,t.jsxs)(a.p,{children:["The contact information section is a YAML list. If needed, more elements may be added, each per maintainer. Do not edit the file in any other way, including spacing, except ",(0,t.jsx)(a.em,{children:"Name"}),", ",(0,t.jsx)(a.em,{children:"Surname"})," and ",(0,t.jsx)(a.em,{children:"REPLACEME"})," placeholders."]}),"\n",(0,t.jsx)(a.pre,{children:(0,t.jsx)(a.code,{children:"This file is used to indicate primary maintainership for this package. A package may list more than one maintainer to avoid bus factor issues. People on this list may be considered \u201Csubject-matter experts\u201D. Please note that Solus Staff may need to perform necessary rebuilds, upgrades, or security fixes as part of the normal maintenance of the Solus package repository. If you believe this package requires an update, follow documentation from https://help.getsol.us/docs/packaging/procedures/request-a-package-update. In the event that this package becomes insufficiently maintained, the Solus Staff reserves the right to request a new maintainer, or deprecate and remove this package from the repository entirely.\n\n- Name Surname\n - Matrix: REPLACEME\n - Email: REPLACEME\n"})})]})}function h(e={}){let{wrapper:a}={...(0,s.a)(),...e.components};return a?(0,t.jsx)(a,{...e,children:(0,t.jsx)(l,{...e})}):l(e)}},50065:function(e,a,i){i.d(a,{Z:function(){return o},a:function(){return r}});var n=i(67294);let t={},s=n.createContext(t);function r(e){let a=n.useContext(s);return n.useMemo(function(){return"function"==typeof e?e(a):{...a,...e}},[a,e])}function o(e){let a;return a=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:r(e.components),n.createElement(s.Provider,{value:a},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/61c953b4.7b785f4a.js b/assets/js/61c953b4.7b785f4a.js deleted file mode 100644 index 4881ff611..000000000 --- a/assets/js/61c953b4.7b785f4a.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[8032],{18421:(e,a,i)=>{i.r(a),i.d(a,{assets:()=>c,contentTitle:()=>r,default:()=>h,frontMatter:()=>s,metadata:()=>o,toc:()=>d});var n=i(85893),t=i(11151);const s={title:"Maintainership",summary:"Package maintainership"},r="Maintainership",o={id:"packaging/procedures/maintainership",title:"Maintainership",description:"The role of a maintainer is to update package(s) on a regular basis, while following Solus packaging and consistency standards.",source:"@site/docs/packaging/procedures/maintainership.md",sourceDirName:"packaging/procedures",slug:"/packaging/procedures/maintainership",permalink:"/docs/packaging/procedures/maintainership",draft:!1,unlisted:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/packaging/procedures/maintainership.md",tags:[],version:"current",lastUpdatedAt:1732716912e3,frontMatter:{title:"Maintainership",summary:"Package maintainership"},sidebar:"packagingSidebar",previous:{title:"Procedures",permalink:"/docs/category/procedures"},next:{title:"Package Inclusion Policy",permalink:"/docs/packaging/procedures/package-inclusion"}},c={},d=[{value:"Commitment",id:"commitment",level:2},{value:"Stepping in",id:"stepping-in",level:2},{value:"Updating a maintained package",id:"updating-a-maintained-package",level:2},{value:"Maintainers",id:"maintainers",level:3},{value:"Non-maintainers",id:"non-maintainers",level:3},{value:"Template for the MAINTAINERS.md file",id:"template-for-the-maintainersmd-file",level:2}];function l(e){const a={a:"a",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",p:"p",pre:"pre",ul:"ul",...(0,t.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(a.header,{children:(0,n.jsx)(a.h1,{id:"maintainership",children:"Maintainership"})}),"\n",(0,n.jsx)(a.p,{children:"The role of a maintainer is to update package(s) on a regular basis, while following Solus packaging and consistency standards."}),"\n",(0,n.jsx)(a.h2,{id:"commitment",children:"Commitment"}),"\n",(0,n.jsx)(a.p,{children:"Each new package which is going to land in the Solus repository must have one or more maintainers. These individuals commit to:"}),"\n",(0,n.jsxs)(a.ul,{children:["\n",(0,n.jsx)(a.li,{children:"Update the package reasonably regularly, unless there are valid reasons to hold it back"}),"\n",(0,n.jsxs)(a.li,{children:["Ensure the ",(0,n.jsx)(a.a,{href:"/docs/packaging/package.yml",children:"packaging file"})," adheres to the Solus ",(0,n.jsx)(a.a,{href:"/docs/packaging/packaging-practices",children:"standards"})]}),"\n",(0,n.jsx)(a.li,{children:"Ensure the application or library is consistent with the Operating System aesthetics, file system conventions and the Solus philosophy in general"}),"\n"]}),"\n",(0,n.jsxs)(a.p,{children:["On the Solus side however, the community must not forget that maintainers are volunteers, which may or may not have a technical background. More experienced users are to engage new maintainers in a welcoming manner, e.g. by listing their errors and inviting them to fix them. (More on this in the ",(0,n.jsx)(a.a,{href:"/docs/user/contributing/community-guidelines#repositories-and-issue-trackers",children:"community guidelines"}),")"]}),"\n",(0,n.jsx)(a.p,{children:"The Solus Staff have the right to enforce certain practices, even when in contrast with maintainers' vision. It also has the right to ultimately accept or reject a patch."}),"\n",(0,n.jsx)(a.h2,{id:"stepping-in",children:"Stepping in"}),"\n",(0,n.jsxs)(a.p,{children:["To officially step in as the maintainer of a package, a ",(0,n.jsx)(a.code,{children:"MAINTAINERS.md"})," file must be provided for accepted packages that are not yet included in the repository, or if the package predates the policy of requiring one. Instead, if a previously maintained package is marked by Solus Staff as needing a new maintainer, the ",(0,n.jsx)(a.code,{children:"MAINTAINERS.md"})," file must be updated."]}),"\n",(0,n.jsx)(a.h2,{id:"updating-a-maintained-package",children:"Updating a maintained package"}),"\n",(0,n.jsx)(a.p,{children:"The procedure varies depending on whether or not the individual is the maintainer."}),"\n",(0,n.jsx)(a.h3,{id:"maintainers",children:"Maintainers"}),"\n",(0,n.jsxs)(a.p,{children:["Maintainers are free to ",(0,n.jsx)(a.a,{href:"/docs/packaging/updating-an-existing-package",children:"update a package"})," at their will, unless otherwise indicated by Solus Staff."]}),"\n",(0,n.jsx)(a.h3,{id:"non-maintainers",children:"Non-maintainers"}),"\n",(0,n.jsxs)(a.p,{children:["If a package is actively maintained, modifications should not occur and the individual should exercise patience when it comes to updates. In some cases, a maintainer may intentionally be holding back a package, or has simply not updated yet. If pertinent, the individual should file a ",(0,n.jsx)(a.a,{href:"/docs/packaging/procedures/request-a-package-update",children:"package update request"}),". Alternatively, the individual can reach the maintainers or Solus Staff via the Solus Packaging room on ",(0,n.jsx)(a.a,{href:"/docs/user/contributing/getting-involved#matrix-chat",children:"Matrix"})," and ask permission to update the package. It is also possible to submit an update and attach a message to it clarifying the intention of updating the package, although this is a special case reserved to e.g. security updates."]}),"\n",(0,n.jsxs)(a.h2,{id:"template-for-the-maintainersmd-file",children:["Template for the ",(0,n.jsx)(a.code,{children:"MAINTAINERS.md"})," file"]}),"\n",(0,n.jsxs)(a.p,{children:["Presented here is the ",(0,n.jsx)(a.code,{children:"MAINTAINERS.md"})," file. This file must be provided verbatim alongside the other patch contents, and filled in with the maintainers' personal information. A ",(0,n.jsx)(a.a,{href:"/docs/user/contributing/getting-involved#matrix-chat",children:"Matrix"})," contact is optional but recommended, while an email address is mandatory. Similar to the ",(0,n.jsx)(a.code,{children:".solus/packager"})," file used for packaging, the maintainers listed in ",(0,n.jsx)(a.code,{children:"MAINTAINERS.md"})," must use their real first and last name(s) for accountability purposes."]}),"\n",(0,n.jsxs)(a.p,{children:["The contact information section is a YAML list. If needed, more elements may be added, each per maintainer. Do not edit the file in any other way, including spacing, except ",(0,n.jsx)(a.em,{children:"Name"}),", ",(0,n.jsx)(a.em,{children:"Surname"})," and ",(0,n.jsx)(a.em,{children:"REPLACEME"})," placeholders."]}),"\n",(0,n.jsx)(a.pre,{children:(0,n.jsx)(a.code,{children:"This file is used to indicate primary maintainership for this package. A package may list more than one maintainer to avoid bus factor issues. People on this list may be considered \u201csubject-matter experts\u201d. Please note that Solus Staff may need to perform necessary rebuilds, upgrades, or security fixes as part of the normal maintenance of the Solus package repository. If you believe this package requires an update, follow documentation from https://help.getsol.us/docs/packaging/procedures/request-a-package-update. In the event that this package becomes insufficiently maintained, the Solus Staff reserves the right to request a new maintainer, or deprecate and remove this package from the repository entirely.\n\n- Name Surname\n - Matrix: REPLACEME\n - Email: REPLACEME\n"})})]})}function h(e={}){const{wrapper:a}={...(0,t.a)(),...e.components};return a?(0,n.jsx)(a,{...e,children:(0,n.jsx)(l,{...e})}):l(e)}},11151:(e,a,i)=>{i.d(a,{Z:()=>o,a:()=>r});var n=i(67294);const t={},s=n.createContext(t);function r(e){const a=n.useContext(s);return n.useMemo((function(){return"function"==typeof e?e(a):{...a,...e}}),[a,e])}function o(e){let a;return a=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:r(e.components),n.createElement(s.Provider,{value:a},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/621db11d.87a9b056.js b/assets/js/621db11d.87a9b056.js new file mode 100644 index 000000000..53451ce37 --- /dev/null +++ b/assets/js/621db11d.87a9b056.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([["9854"],{52273:function(t,e,s){s.r(e),s.d(e,{default:()=>f});var r=s("85893");s("67294");var o=s("74904"),a=s("81921"),n=s("50490"),l=s("20332"),u=s("30928"),i=s("49868"),h=s("52068"),c=s("91941");let g={authorListItem:"authorListItem_n3yI"};function p(t){let{author:e}=t;return(0,r.jsx)("li",{className:g.authorListItem,children:(0,r.jsx)(c.Z,{as:"h2",author:e,count:e.count})})}function d(t){let{authors:e}=t;return(0,r.jsx)("section",{className:(0,o.Z)("margin-vert--lg",g.authorsListSection),children:(0,r.jsx)("ul",{children:e.map(t=>(0,r.jsx)(p,{author:t},t.key))})})}function f(t){let{authors:e,sidebar:s}=t,c=(0,l.HV)();return(0,r.jsxs)(a.FG,{className:(0,o.Z)(n.k.wrapper.blogPages,n.k.page.blogAuthorsListPage),children:[(0,r.jsx)(a.d,{title:c}),(0,r.jsx)(i.Z,{tag:"blog_authors_list"}),(0,r.jsxs)(u.Z,{sidebar:s,children:[(0,r.jsx)(h.Z,{as:"h1",children:c}),(0,r.jsx)(d,{authors:e})]})]})}},20332:function(t,e,s){s.d(e,{HV:function(){return i},J$:function(){return c},Wi:function(){return l},ds:function(){return u},fw:function(){return h}});var r=s(85893);s(67294);var o=s(1822),a=s(67984);function n(){let{selectMessage:t}=(0,a.c)();return e=>t(e,(0,o.I)({id:"theme.blog.post.plurals",description:'Pluralized label for "{count} posts". 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 post|{count} posts"},{count:e}))}function l(t){let e=n();return(0,o.I)({id:"theme.blog.tagTitle",description:"The title of the page for a blog tag",message:'{nPosts} tagged with "{tagName}"'},{nPosts:e(t.count),tagName:t.label})}function u(t){let e=n();return(0,o.I)({id:"theme.blog.author.pageTitle",description:"The title of the page for a blog author",message:"{authorName} - {nPosts}"},{nPosts:e(t.count),authorName:t.name||t.key})}let i=()=>(0,o.I)({id:"theme.blog.authorsList.pageTitle",message:"Authors",description:"The title of the authors page"});function h(){return(0,r.jsx)(o.Z,{id:"theme.blog.authorsList.viewAll",description:"The label of the link targeting the blog authors page",children:"View all authors"})}function c(){return(0,r.jsx)(o.Z,{id:"theme.blog.author.noPosts",description:"The text for authors with 0 blog post",children:"This author has not written any posts yet."})}}}]); \ No newline at end of file diff --git a/assets/js/621db11d.e79b5237.js b/assets/js/621db11d.e79b5237.js deleted file mode 100644 index 9f61dd4db..000000000 --- a/assets/js/621db11d.e79b5237.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[3940],{44995:(t,e,s)=>{s.r(e),s.d(e,{default:()=>m});s(67294);var a=s(36905),o=s(96984),r=s(50563),l=s(77514),n=s(50429),u=s(62362),i=s(42704),h=s(68588);const c={authorListItem:"authorListItem_n3yI"};var g=s(85893);function p(t){let{author:e}=t;return(0,g.jsx)("li",{className:c.authorListItem,children:(0,g.jsx)(h.Z,{as:"h2",author:e,count:e.count})})}function d(t){let{authors:e}=t;return(0,g.jsx)("section",{className:(0,a.Z)("margin-vert--lg",c.authorsListSection),children:(0,g.jsx)("ul",{children:e.map((t=>(0,g.jsx)(p,{author:t},t.key)))})})}function m(t){let{authors:e,sidebar:s}=t;const h=(0,l.HV)();return(0,g.jsxs)(o.FG,{className:(0,a.Z)(r.k.wrapper.blogPages,r.k.page.blogAuthorsListPage),children:[(0,g.jsx)(o.d,{title:h}),(0,g.jsx)(u.Z,{tag:"blog_authors_list"}),(0,g.jsxs)(n.Z,{sidebar:s,children:[(0,g.jsx)(i.Z,{as:"h1",children:h}),(0,g.jsx)(d,{authors:e})]})]})}},77514:(t,e,s)=>{s.d(e,{HV:()=>i,Wi:()=>n,ds:()=>u,fw:()=>h});s(67294);var a=s(55361),o=s(59676),r=s(85893);function l(){const{selectMessage:t}=(0,o.c)();return e=>t(e,(0,a.I)({id:"theme.blog.post.plurals",description:'Pluralized label for "{count} posts". 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 post|{count} posts"},{count:e}))}function n(t){const e=l();return(0,a.I)({id:"theme.blog.tagTitle",description:"The title of the page for a blog tag",message:'{nPosts} tagged with "{tagName}"'},{nPosts:e(t.count),tagName:t.label})}function u(t){const e=l();return(0,a.I)({id:"theme.blog.author.pageTitle",description:"The title of the page for a blog author",message:"{authorName} - {nPosts}"},{nPosts:e(t.count),authorName:t.name||t.key})}const i=()=>(0,a.I)({id:"theme.blog.authorsList.pageTitle",message:"Authors",description:"The title of the authors page"});function h(){return(0,r.jsx)(a.Z,{id:"theme.blog.authorsList.viewAll",description:"The label of the link targeting the blog authors page",children:"View all authors"})}}}]); \ No newline at end of file diff --git a/assets/js/62d70de2.11c6a7b7.js b/assets/js/62d70de2.11c6a7b7.js deleted file mode 100644 index aafec698e..000000000 --- a/assets/js/62d70de2.11c6a7b7.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[818],{5230:e=>{e.exports=JSON.parse('{"categoryGeneratedIndex":{"title":"Virtualization","slug":"/category/virtualization","permalink":"/docs/category/virtualization","sidebar":"userSidebar","navigation":{"previous":{"title":"KDE Wallet","permalink":"/docs/user/software/utilities/kwallet"},"next":{"title":"VirtualBox","permalink":"/docs/user/software/virtualization/virtualbox"}}}}')}}]); \ No newline at end of file diff --git a/assets/js/62d70de2.347fe47c.js b/assets/js/62d70de2.347fe47c.js new file mode 100644 index 000000000..14dcaee70 --- /dev/null +++ b/assets/js/62d70de2.347fe47c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([["3372"],{18119:function(e){e.exports=JSON.parse('{"categoryGeneratedIndex":{"title":"Virtualization","slug":"/category/virtualization","permalink":"/docs/category/virtualization","sidebar":"userSidebar","navigation":{"previous":{"title":"KDE Wallet","permalink":"/docs/user/software/utilities/kwallet"},"next":{"title":"VirtualBox","permalink":"/docs/user/software/virtualization/virtualbox"}}}}')}}]); \ No newline at end of file diff --git a/assets/js/633d53d7.7abdbd1e.js b/assets/js/633d53d7.7abdbd1e.js new file mode 100644 index 000000000..029280cfc --- /dev/null +++ b/assets/js/633d53d7.7abdbd1e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([["8011"],{68574:function(e){e.exports=JSON.parse('{"categoryGeneratedIndex":{"title":"Procedures","slug":"/category/procedures","permalink":"/docs/category/procedures","sidebar":"packagingSidebar","navigation":{"previous":{"title":"Packaging Practices","permalink":"/docs/packaging/packaging-practices"},"next":{"title":"Maintainership","permalink":"/docs/packaging/procedures/maintainership"}}}}')}}]); \ No newline at end of file diff --git a/assets/js/633d53d7.9280c3c1.js b/assets/js/633d53d7.9280c3c1.js deleted file mode 100644 index 9009f4225..000000000 --- a/assets/js/633d53d7.9280c3c1.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[425],{30080:e=>{e.exports=JSON.parse('{"categoryGeneratedIndex":{"title":"Procedures","slug":"/category/procedures","permalink":"/docs/category/procedures","sidebar":"packagingSidebar","navigation":{"previous":{"title":"Packaging Practices","permalink":"/docs/packaging/packaging-practices"},"next":{"title":"Maintainership","permalink":"/docs/packaging/procedures/maintainership"}}}}')}}]); \ No newline at end of file diff --git a/assets/js/64699048.6d2870b9.js b/assets/js/64699048.6d2870b9.js new file mode 100644 index 000000000..943673218 --- /dev/null +++ b/assets/js/64699048.6d2870b9.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([["9311"],{27444:function(e,n,t){t.r(n),t.d(n,{metadata:()=>s,contentTitle:()=>i,default:()=>u,assets:()=>a,toc:()=>d,frontMatter:()=>l});var s=JSON.parse('{"id":"user/software/development/index","title":"Development","description":"Solus provides a stable foundation for creating, testing, and deploying applications.","source":"@site/docs/user/software/development/index.md","sourceDirName":"user/software/development","slug":"/user/software/development/","permalink":"/docs/user/software/development/","draft":false,"unlisted":false,"editUrl":"https://github.com/getsolus/help-center-docs/tree/master/docs/user/software/development/index.md","tags":[],"version":"current","lastUpdatedAt":1733757592000,"frontMatter":{"title":"Development","summary":"Installation of development software on Solus"},"sidebar":"userSidebar","previous":{"title":"Desktops","permalink":"/docs/user/software/desktops/"},"next":{"title":"Containers","permalink":"/docs/user/software/development/containers"}}'),o=t("85893"),r=t("50065");let l={title:"Development",summary:"Installation of development software on Solus"},i="Development",a={},d=[{value:"Getting started",id:"getting-started",level:2}];function c(e){let n={a:"a",code:"code",h1:"h1",h2:"h2",header:"header",hr:"hr",p:"p",pre:"pre",strong:"strong",...(0,r.a)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(n.header,{children:(0,o.jsx)(n.h1,{id:"development",children:"Development"})}),"\n",(0,o.jsx)(n.p,{children:"Solus provides a stable foundation for creating, testing, and deploying applications."}),"\n",(0,o.jsx)(n.p,{children:"You can install tools such as text editors, programming languages, compilers, and version control systems. Solus also supports containerization and virtualization technologies."}),"\n",(0,o.jsx)(n.h2,{id:"getting-started",children:"Getting started"}),"\n",(0,o.jsxs)(n.p,{children:["If you want to compile and develop software using Solus, we recommend installing the ",(0,o.jsx)(n.code,{children:"system.devel"})," component."]}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-bash",children:"sudo eopkg install -c system.devel\n"})}),"\n",(0,o.jsxs)(n.p,{children:["The ",(0,o.jsx)(n.code,{children:"system.devel"})," component installs libraries and packages for software development, such as ",(0,o.jsx)(n.code,{children:"clang"}),", ",(0,o.jsx)(n.code,{children:"gcc"}),", and ",(0,o.jsx)(n.code,{children:"make"}),"."]}),"\n",(0,o.jsx)(n.hr,{}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.a,{href:"containers",children:(0,o.jsx)(n.strong,{children:"Containers"})})}),"\n",(0,o.jsx)(n.p,{children:"Install and configure containerization software on Solus."}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.a,{href:"java",children:(0,o.jsx)(n.strong,{children:"Java"})})}),"\n",(0,o.jsx)(n.p,{children:"Learn how to install, run, and manage Java on Solus."}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.a,{href:"postgresql",children:(0,o.jsx)(n.strong,{children:"PostgreSQL"})})}),"\n",(0,o.jsx)(n.p,{children:"A quick guide to using PostgreSQL on Solus."}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.a,{href:"r-and-rstudio",children:(0,o.jsx)(n.strong,{children:"R and RStudio"})})}),"\n",(0,o.jsx)(n.p,{children:"Quick start guide for R and RStudio on Solus."}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.a,{href:"rust",children:(0,o.jsx)(n.strong,{children:"Rust"})})}),"\n",(0,o.jsx)(n.p,{children:"A quick guide to getting set up for Rust development on Solus."}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.a,{href:"web",children:(0,o.jsx)(n.strong,{children:"Web Development"})})}),"\n",(0,o.jsx)(n.p,{children:"Install and configure different web development tools on Solus."})]})}function u(e={}){let{wrapper:n}={...(0,r.a)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(c,{...e})}):c(e)}},50065:function(e,n,t){t.d(n,{Z:function(){return i},a:function(){return l}});var s=t(67294);let o={},r=s.createContext(o);function l(e){let n=s.useContext(r);return s.useMemo(function(){return"function"==typeof e?e(n):{...n,...e}},[n,e])}function i(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:l(e.components),s.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/64699048.80dc9cf5.js b/assets/js/64699048.80dc9cf5.js deleted file mode 100644 index 97d1e28b4..000000000 --- a/assets/js/64699048.80dc9cf5.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[2151],{87063:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>a,contentTitle:()=>l,default:()=>p,frontMatter:()=>r,metadata:()=>i,toc:()=>d});var s=t(85893),o=t(11151);const r={title:"Development",summary:"Installation of development software on Solus"},l="Development",i={id:"user/software/development/index",title:"Development",description:"Solus provides a stable foundation for creating, testing, and deploying applications.",source:"@site/docs/user/software/development/index.md",sourceDirName:"user/software/development",slug:"/user/software/development/",permalink:"/docs/user/software/development/",draft:!1,unlisted:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/software/development/index.md",tags:[],version:"current",lastUpdatedAt:1732716912e3,frontMatter:{title:"Development",summary:"Installation of development software on Solus"},sidebar:"userSidebar",previous:{title:"Desktops",permalink:"/docs/user/software/desktops/"},next:{title:"Containers",permalink:"/docs/user/software/development/containers"}},a={},d=[{value:"Getting started",id:"getting-started",level:2}];function c(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",header:"header",hr:"hr",p:"p",pre:"pre",strong:"strong",...(0,o.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.header,{children:(0,s.jsx)(n.h1,{id:"development",children:"Development"})}),"\n",(0,s.jsx)(n.p,{children:"Solus provides a stable foundation for creating, testing, and deploying applications."}),"\n",(0,s.jsx)(n.p,{children:"You can install tools such as text editors, programming languages, compilers, and version control systems. Solus also supports containerization and virtualization technologies."}),"\n",(0,s.jsx)(n.h2,{id:"getting-started",children:"Getting started"}),"\n",(0,s.jsxs)(n.p,{children:["If you want to compile and develop software using Solus, we recommend installing the ",(0,s.jsx)(n.code,{children:"system.devel"})," component."]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"sudo eopkg install -c system.devel\n"})}),"\n",(0,s.jsxs)(n.p,{children:["The ",(0,s.jsx)(n.code,{children:"system.devel"})," component installs libraries and packages for software development, such as ",(0,s.jsx)(n.code,{children:"clang"}),", ",(0,s.jsx)(n.code,{children:"gcc"}),", and ",(0,s.jsx)(n.code,{children:"make"}),"."]}),"\n",(0,s.jsx)(n.hr,{}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.a,{href:"containers",children:(0,s.jsx)(n.strong,{children:"Containers"})})}),"\n",(0,s.jsx)(n.p,{children:"Install and configure containerization software on Solus."}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.a,{href:"java",children:(0,s.jsx)(n.strong,{children:"Java"})})}),"\n",(0,s.jsx)(n.p,{children:"Learn how to install, run, and manage Java on Solus."}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.a,{href:"postgresql",children:(0,s.jsx)(n.strong,{children:"PostgreSQL"})})}),"\n",(0,s.jsx)(n.p,{children:"A quick guide to using PostgreSQL on Solus."}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.a,{href:"r-and-rstudio",children:(0,s.jsx)(n.strong,{children:"R and RStudio"})})}),"\n",(0,s.jsx)(n.p,{children:"Quick start guide for R and RStudio on Solus."}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.a,{href:"rust",children:(0,s.jsx)(n.strong,{children:"Rust"})})}),"\n",(0,s.jsx)(n.p,{children:"A quick guide to getting set up for Rust development on Solus."}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.a,{href:"web",children:(0,s.jsx)(n.strong,{children:"Web Development"})})}),"\n",(0,s.jsx)(n.p,{children:"Install and configure different web development tools on Solus."})]})}function p(e={}){const{wrapper:n}={...(0,o.a)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(c,{...e})}):c(e)}},11151:(e,n,t)=>{t.d(n,{Z:()=>i,a:()=>l});var s=t(67294);const o={},r=s.createContext(o);function l(e){const n=s.useContext(r);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function i(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:l(e.components),s.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/6614.fed91556.js b/assets/js/6614.fed91556.js deleted file mode 100644 index e76878b01..000000000 --- a/assets/js/6614.fed91556.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[6614],{81782:(e,t,a)=>{a.d(t,{Z:()=>P});a(67294);var s=a(36905),n=a(58112),l=a(85893);function r(e){let{children:t,className:a}=e;return(0,l.jsx)("article",{className:a,children:t})}var i=a(38208);const o={title:"title_f1Hy"};function c(e){let{className:t}=e;const{metadata:a,isBlogPostPage:r}=(0,n.nO)(),{permalink:c,title:d}=a,u=r?"h1":"h2";return(0,l.jsx)(u,{className:(0,s.Z)(o.title,t),children:r?d:(0,l.jsx)(i.Z,{to:c,children:d})})}var d=a(55361),u=a(59676),m=a(14852);const h={container:"container_mt6G"};function g(e){let{readingTime:t}=e;const a=function(){const{selectMessage:e}=(0,u.c)();return t=>{const a=Math.ceil(t);return e(a,(0,d.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(0,l.jsx)(l.Fragment,{children:a(t)})}function p(e){let{date:t,formattedDate:a}=e;return(0,l.jsx)("time",{dateTime:t,children:a})}function x(){return(0,l.jsx)(l.Fragment,{children:" \xb7 "})}function j(e){let{className:t}=e;const{metadata:a}=(0,n.nO)(),{date:r,readingTime:i}=a,o=(0,m.P)({day:"numeric",month:"long",year:"numeric",timeZone:"UTC"});return(0,l.jsxs)("div",{className:(0,s.Z)(h.container,"margin-vert--md",t),children:[(0,l.jsx)(p,{date:r,formattedDate:(c=r,o.format(new Date(c)))}),void 0!==i&&(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)(x,{}),(0,l.jsx)(g,{readingTime:i})]})]});var c}var f=a(68588);const v={authorCol:"authorCol_Hf19",imageOnlyAuthorRow:"imageOnlyAuthorRow_pa_O",imageOnlyAuthorCol:"imageOnlyAuthorCol_G86a"};function Z(e){let{className:t}=e;const{metadata:{authors:a},assets:r}=(0,n.nO)();if(0===a.length)return null;const i=a.every((e=>{let{name:t}=e;return!t})),o=1===a.length;return(0,l.jsx)("div",{className:(0,s.Z)("margin-top--md margin-bottom--sm",i?v.imageOnlyAuthorRow:"row",t),children:a.map(((e,t)=>(0,l.jsx)("div",{className:(0,s.Z)(!i&&(o?"col col--12":"col col--6"),i?v.imageOnlyAuthorCol:v.authorCol),children:(0,l.jsx)(f.Z,{author:{...e,imageURL:r.authorsImageUrls[t]??e.imageURL}})},t)))})}function b(){return(0,l.jsxs)("header",{children:[(0,l.jsx)(c,{}),(0,l.jsx)(j,{}),(0,l.jsx)(Z,{})]})}var N=a(48820),y=a(38507);function U(e){let{children:t,className:a}=e;const{isBlogPostPage:r}=(0,n.nO)();return(0,l.jsx)("div",{id:r?N.uR:void 0,className:(0,s.Z)("markdown",a),children:(0,l.jsx)(y.Z,{children:t})})}var _=a(50563),w=a(62978),T=a(32223);function k(){return(0,l.jsx)("b",{children:(0,l.jsx)(d.Z,{id:"theme.blog.post.readMore",description:"The label used in blog post item excerpts to link to full blog posts",children:"Read more"})})}function C(e){const{blogPostTitle:t,...a}=e;return(0,l.jsx)(i.Z,{"aria-label":(0,d.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,children:(0,l.jsx)(k,{})})}function A(){const{metadata:e,isBlogPostPage:t}=(0,n.nO)(),{tags:a,title:r,editUrl:i,hasTruncateMarker:o,lastUpdatedBy:c,lastUpdatedAt:d}=e,u=!t&&o,m=a.length>0;if(!(m||u||i))return null;if(t){const e=!!(i||d||c);return(0,l.jsxs)("footer",{className:"docusaurus-mt-lg",children:[m&&(0,l.jsx)("div",{className:(0,s.Z)("row","margin-top--sm",_.k.blog.blogFooterEditMetaRow),children:(0,l.jsx)("div",{className:"col",children:(0,l.jsx)(T.Z,{tags:a})})}),e&&(0,l.jsx)(w.Z,{className:(0,s.Z)("margin-top--sm",_.k.blog.blogFooterEditMetaRow),editUrl:i,lastUpdatedAt:d,lastUpdatedBy:c})]})}return(0,l.jsxs)("footer",{className:"row docusaurus-mt-lg",children:[m&&(0,l.jsx)("div",{className:(0,s.Z)("col",{"col--9":u}),children:(0,l.jsx)(T.Z,{tags:a})}),u&&(0,l.jsx)("div",{className:(0,s.Z)("col text--right",{"col--3":m}),children:(0,l.jsx)(C,{blogPostTitle:r,to:e.permalink})})]})}function P(e){let{children:t,className:a}=e;const i=function(){const{isBlogPostPage:e}=(0,n.nO)();return e?void 0:"margin-bottom--xl"}();return(0,l.jsxs)(r,{className:(0,s.Z)(i,a),children:[(0,l.jsx)(b,{}),(0,l.jsx)(U,{children:t}),(0,l.jsx)(A,{})]})}},62978:(e,t,a)=>{a.d(t,{Z:()=>x});a(67294);var s=a(36905),n=a(55361),l=a(50563),r=a(38208);const i={iconEdit:"iconEdit_Z9Sw"};var o=a(85893);function c(e){let{className:t,...a}=e;return(0,o.jsx)("svg",{fill:"currentColor",height:"20",width:"20",viewBox:"0 0 40 40",className:(0,s.Z)(i.iconEdit,t),"aria-hidden":"true",...a,children:(0,o.jsx)("g",{children:(0,o.jsx)("path",{d:"m34.5 11.7l-3 3.1-6.3-6.3 3.1-3q0.5-0.5 1.2-0.5t1.1 0.5l3.9 3.9q0.5 0.4 0.5 1.1t-0.5 1.2z m-29.5 17.1l18.4-18.5 6.3 6.3-18.4 18.4h-6.3v-6.2z"})})})}function d(e){let{editUrl:t}=e;return(0,o.jsxs)(r.Z,{to:t,className:l.k.common.editThisPage,children:[(0,o.jsx)(c,{}),(0,o.jsx)(n.Z,{id:"theme.common.editThisPage",description:"The link label to edit the current page",children:"Edit this page"})]})}var u=a(14852);function m(e){let{lastUpdatedAt:t}=e;const a=new Date(t),s=(0,u.P)({day:"numeric",month:"short",year:"numeric",timeZone:"UTC"}).format(a);return(0,o.jsx)(n.Z,{id:"theme.lastUpdated.atDate",description:"The words used to describe on which date a page has been last updated",values:{date:(0,o.jsx)("b",{children:(0,o.jsx)("time",{dateTime:a.toISOString(),itemProp:"dateModified",children:s})})},children:" on {date}"})}function h(e){let{lastUpdatedBy:t}=e;return(0,o.jsx)(n.Z,{id:"theme.lastUpdated.byUser",description:"The words used to describe by who the page has been last updated",values:{user:(0,o.jsx)("b",{children:t})},children:" by {user}"})}function g(e){let{lastUpdatedAt:t,lastUpdatedBy:a}=e;return(0,o.jsxs)("span",{className:l.k.common.lastUpdated,children:[(0,o.jsx)(n.Z,{id:"theme.lastUpdated.lastUpdatedAtBy",description:"The sentence used to display when a page has been last updated, and by who",values:{atDate:t?(0,o.jsx)(m,{lastUpdatedAt:t}):"",byUser:a?(0,o.jsx)(h,{lastUpdatedBy:a}):""},children:"Last updated{atDate}{byUser}"}),!1]})}const p={lastUpdated:"lastUpdated_JAkA"};function x(e){let{className:t,editUrl:a,lastUpdatedAt:n,lastUpdatedBy:l}=e;return(0,o.jsxs)("div",{className:(0,s.Z)("row",t),children:[(0,o.jsx)("div",{className:"col",children:a&&(0,o.jsx)(d,{editUrl:a})}),(0,o.jsx)("div",{className:(0,s.Z)("col",p.lastUpdated),children:(n||l)&&(0,o.jsx)(g,{lastUpdatedAt:n,lastUpdatedBy:l})})]})}},38507:(e,t,a)=>{a.d(t,{Z:()=>A});var s=a(67294),n=a(11151),l=a(79722),r=a(17573),i=a(85893);function o(e){return(0,i.jsx)("code",{...e})}var c=a(38208);var d=a(36905),u=a(788),m=a(79202),h=a(45025),g=a(93841);const p={details:"details_lb9f",isBrowser:"isBrowser_bmU9",collapsibleContent:"collapsibleContent_i85q"};function x(e){return!!e&&("SUMMARY"===e.tagName||x(e.parentElement))}function j(e,t){return!!e&&(e===t||j(e.parentElement,t))}function f(e){let{summary:t,children:a,...n}=e;(0,m.Z)().collectAnchor(n.id);const l=(0,h.Z)(),r=(0,s.useRef)(null),{collapsed:o,setCollapsed:c}=(0,g.u)({initialState:!n.open}),[d,f]=(0,s.useState)(n.open),v=s.isValidElement(t)?t:(0,i.jsx)("summary",{children:t??"Details"});return(0,i.jsxs)("details",{...n,ref:r,open:d,"data-collapsed":o,className:(0,u.Z)(p.details,l&&p.isBrowser,n.className),onMouseDown:e=>{x(e.target)&&e.detail>1&&e.preventDefault()},onClick:e=>{e.stopPropagation();const t=e.target;x(t)&&j(t,r.current)&&(e.preventDefault(),o?(c(!1),f(!0)):c(!0))},children:[v,(0,i.jsx)(g.z,{lazy:!1,collapsed:o,disableSSRStyle:!0,onCollapseTransitionEnd:e=>{c(e),f(!e)},children:(0,i.jsx)("div",{className:p.collapsibleContent,children:a})})]})}const v={details:"details_b_Ee"},Z="alert alert--info";function b(e){let{...t}=e;return(0,i.jsx)(f,{...t,className:(0,d.Z)(Z,v.details,t.className)})}function N(e){const t=s.Children.toArray(e.children),a=t.find((e=>s.isValidElement(e)&&"summary"===e.type)),n=(0,i.jsx)(i.Fragment,{children:t.filter((e=>e!==a))});return(0,i.jsx)(b,{...e,summary:a,children:n})}var y=a(42704);function U(e){return(0,i.jsx)(y.Z,{...e})}const _={containsTaskList:"containsTaskList_mC6p"};function w(e){if(void 0!==e)return(0,d.Z)(e,e?.includes("contains-task-list")&&_.containsTaskList)}const T={img:"img_ev3q"};var k=a(20906);const C={Head:l.Z,details:N,Details:N,code:function(e){return function(e){return void 0!==e.children&&s.Children.toArray(e.children).every((e=>"string"==typeof e&&!e.includes("\n")))}(e)?(0,i.jsx)(o,{...e}):(0,i.jsx)(r.Z,{...e})},a:function(e){return(0,i.jsx)(c.Z,{...e})},pre:function(e){return(0,i.jsx)(i.Fragment,{children:e.children})},ul:function(e){return(0,i.jsx)("ul",{...e,className:w(e.className)})},li:function(e){return(0,m.Z)().collectAnchor(e.id),(0,i.jsx)("li",{...e})},img:function(e){return(0,i.jsx)("img",{decoding:"async",loading:"lazy",...e,className:(t=e.className,(0,d.Z)(t,T.img))});var t},h1:e=>(0,i.jsx)(U,{as:"h1",...e}),h2:e=>(0,i.jsx)(U,{as:"h2",...e}),h3:e=>(0,i.jsx)(U,{as:"h3",...e}),h4:e=>(0,i.jsx)(U,{as:"h4",...e}),h5:e=>(0,i.jsx)(U,{as:"h5",...e}),h6:e=>(0,i.jsx)(U,{as:"h6",...e}),admonition:k.Z,mermaid:()=>null};function A(e){let{children:t}=e;return(0,i.jsx)(n.Z,{components:C,children:t})}},60968:(e,t,a)=>{a.d(t,{Z:()=>r});a(67294);var s=a(36905),n=a(38208),l=a(85893);function r(e){const{permalink:t,title:a,subLabel:r,isNext:i}=e;return(0,l.jsxs)(n.Z,{className:(0,s.Z)("pagination-nav__link",i?"pagination-nav__link--next":"pagination-nav__link--prev"),to:t,children:[r&&(0,l.jsx)("div",{className:"pagination-nav__sublabel",children:r}),(0,l.jsx)("div",{className:"pagination-nav__label",children:a})]})}},96194:(e,t,a)=>{a.d(t,{Z:()=>i});a(67294);var s=a(36905),n=a(38208);const l={tag:"tag_zVej",tagRegular:"tagRegular_sFm0",tagWithCount:"tagWithCount_h2kH"};var r=a(85893);function i(e){let{permalink:t,label:a,count:i,description:o}=e;return(0,r.jsxs)(n.Z,{href:t,title:o,className:(0,s.Z)(l.tag,i?l.tagWithCount:l.tagRegular),children:[a,i&&(0,r.jsx)("span",{children:i})]})}},32223:(e,t,a)=>{a.d(t,{Z:()=>o});a(67294);var s=a(36905),n=a(55361),l=a(96194);const r={tags:"tags_jXut",tag:"tag_QGVx"};var i=a(85893);function o(e){let{tags:t}=e;return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)("b",{children:(0,i.jsx)(n.Z,{id:"theme.tags.tagsListLabel",description:"The label alongside a tag list",children:"Tags:"})}),(0,i.jsx)("ul",{className:(0,s.Z)(r.tags,"padding--none","margin-left--sm"),children:t.map((e=>(0,i.jsx)("li",{className:r.tag,children:(0,i.jsx)(l.Z,{...e})},e.permalink)))})]})}},14852:(e,t,a)=>{a.d(t,{P:()=>n});var s=a(75276);function n(e){void 0===e&&(e={});const{i18n:{currentLocale:t}}=(0,s.Z)(),a=function(){const{i18n:{currentLocale:e,localeConfigs:t}}=(0,s.Z)();return t[e].calendar}();return new Intl.DateTimeFormat(t,{calendar:a,...e})}}}]); \ No newline at end of file diff --git a/assets/js/6787574e.5501c302.js b/assets/js/6787574e.5501c302.js new file mode 100644 index 000000000..8011de9ba --- /dev/null +++ b/assets/js/6787574e.5501c302.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([["7192"],{99023:function(e,t,s){s.r(t),s.d(t,{metadata:()=>r,contentTitle:()=>d,default:()=>l,assets:()=>a,toc:()=>c,frontMatter:()=>i});var r=JSON.parse('{"id":"user/intro","title":"Welcome","description":"Solus is committed to helping users get the most out of their systems. We designed the help center to introduce our ecosystem and guide you through typical tasks you might need help with.","source":"@site/docs/user/intro.md","sourceDirName":"user","slug":"/user/intro","permalink":"/docs/user/intro","draft":false,"unlisted":false,"editUrl":"https://github.com/getsolus/help-center-docs/tree/master/docs/user/intro.md","tags":[],"version":"current","lastUpdatedAt":1733757592000,"sidebarPosition":0,"frontMatter":{"title":"Welcome","summary":"Front page of the Help Center","sidebar_position":0},"sidebar":"userSidebar","next":{"title":"Quick Start","permalink":"/docs/category/quick-start"}}'),n=s("85893"),o=s("50065");let i={title:"Welcome",summary:"Front page of the Help Center",sidebar_position:0},d="Welcome",a={},c=[{value:"Table of contents",id:"table-of-contents",level:2},{value:"Support channels",id:"support-channels",level:2}];function h(e){let t={a:"a",admonition:"admonition",h1:"h1",h2:"h2",header:"header",p:"p",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,o.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.header,{children:(0,n.jsx)(t.h1,{id:"welcome",children:"Welcome"})}),"\n",(0,n.jsx)(t.p,{children:"Solus is committed to helping users get the most out of their systems. We designed the help center to introduce our ecosystem and guide you through typical tasks you might need help with."}),"\n",(0,n.jsx)(t.h2,{id:"table-of-contents",children:"Table of contents"}),"\n",(0,n.jsx)(t.p,{children:"We organized the help center into sections to help you navigate the contents easily:"}),"\n",(0,n.jsxs)(t.table,{children:[(0,n.jsx)(t.thead,{children:(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.th,{children:"Section"}),(0,n.jsx)(t.th,{children:"Description"})]})}),(0,n.jsxs)(t.tbody,{children:[(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.a,{href:"/docs/category/quick-start",children:"Quick Start"})}),(0,n.jsx)(t.td,{children:"If you're new to Solus, this section will set you on the right track. Find documentation on system requirements, installing Solus, software management, the boot process, and troubleshooting."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.a,{href:"/docs/category/contributing",children:"Contributing"})}),(0,n.jsx)(t.td,{children:"Find how you can contribute to Solus, whether you're a beginner or an experienced Linux and Solus user."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.a,{href:"/docs/user/editions/",children:"Editions"})}),(0,n.jsx)(t.td,{children:"Understand the different editions of Solus: differences between editions, configuration tasks, and helpful tips and tricks."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.a,{href:"/docs/user/hardware/",children:"Hardware"})}),(0,n.jsx)(t.td,{children:"Solus supports most hardware out-of-the-box, but there are exceptions. This section focuses on those exceptions and how to get the most out of your hardware."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.a,{href:"/docs/category/package-management/",children:"Package management"})}),(0,n.jsx)(t.td,{children:"Learn how to install software and manage the repositories of your Solus system."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.a,{href:"/docs/user/privacy",children:"Privacy policy"})}),(0,n.jsx)(t.td,{children:"Understand our privacy policy: Learn how we handle your data, and how to contact us for privacy concerns."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.a,{href:"/docs/category/software/",children:"Software"})}),(0,n.jsx)(t.td,{children:"Getting started and configuration guides for the software packages included in Solus."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.a,{href:"/docs/user/troubleshooting/",children:"Troubleshooting"})}),(0,n.jsx)(t.td,{children:"Learn how to diagnose and fix problems you might have with Solus."})]})]})]}),"\n",(0,n.jsx)(t.h2,{id:"support-channels",children:"Support channels"}),"\n",(0,n.jsx)(t.p,{children:"If you need help with something not covered in the help center, there are various channels where you can seek support from the Solus team or other Solus users."}),"\n",(0,n.jsxs)(t.table,{children:[(0,n.jsx)(t.thead,{children:(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.th,{children:"Channel"}),(0,n.jsx)(t.th,{children:"Description"})]})}),(0,n.jsxs)(t.tbody,{children:[(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.a,{href:"https://discuss.getsol.us",children:"Forums"})}),(0,n.jsx)(t.td,{children:"Our Flarum-powered forums are easy to use from any device and are a great resource for getting support."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.a,{href:"https://matrix.to/#/#solus:matrix.org",children:"Matrix"})}),(0,n.jsxs)(t.td,{children:["Matrix is a great way to discuss issues and development in real-time. Learn how to access Solus' Matrix space ",(0,n.jsx)(t.a,{href:"/docs/user/contributing/getting-involved#matrix-chat",children:"here"}),"."]})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.a,{href:"https://www.reddit.com/r/SolusProject",children:"Reddit"})}),(0,n.jsx)(t.td,{children:"If you are a Redditor, our subreddit has a similar purpose to the forums."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.a,{href:"https://issues.getsol.us",children:"Issue tracker"})}),(0,n.jsx)(t.td,{children:"If you have issues with your Solus system, or any of our software packages doesn't work as expected, consider filing a bug report on our issue tracker."})]})]})]}),"\n",(0,n.jsx)(t.admonition,{title:"Important",type:"caution",children:(0,n.jsx)(t.p,{children:"Volunteers around the world build and maintain Solus. Due to time zone differences there might not always be people to answer your questions immediately."})})]})}function l(e={}){let{wrapper:t}={...(0,o.a)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(h,{...e})}):h(e)}},50065:function(e,t,s){s.d(t,{Z:function(){return d},a:function(){return i}});var r=s(67294);let n={},o=r.createContext(n);function i(e){let t=r.useContext(o);return r.useMemo(function(){return"function"==typeof e?e(t):{...t,...e}},[t,e])}function d(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:i(e.components),r.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/6787574e.ccc44262.js b/assets/js/6787574e.ccc44262.js deleted file mode 100644 index cd70006f9..000000000 --- a/assets/js/6787574e.ccc44262.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[4500],{26240:(e,t,s)=>{s.r(t),s.d(t,{assets:()=>a,contentTitle:()=>i,default:()=>l,frontMatter:()=>o,metadata:()=>d,toc:()=>c});var r=s(85893),n=s(11151);const o={title:"Welcome",summary:"Front page of the Help Center",sidebar_position:0},i="Welcome",d={id:"user/intro",title:"Welcome",description:"Solus is committed to helping users get the most out of their systems. We designed the help center to introduce our ecosystem and guide you through typical tasks you might need help with.",source:"@site/docs/user/intro.md",sourceDirName:"user",slug:"/user/intro",permalink:"/docs/user/intro",draft:!1,unlisted:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/intro.md",tags:[],version:"current",lastUpdatedAt:1732716912e3,sidebarPosition:0,frontMatter:{title:"Welcome",summary:"Front page of the Help Center",sidebar_position:0},sidebar:"userSidebar",next:{title:"Quick Start",permalink:"/docs/category/quick-start"}},a={},c=[{value:"Table of contents",id:"table-of-contents",level:2},{value:"Support channels",id:"support-channels",level:2}];function h(e){const t={a:"a",admonition:"admonition",h1:"h1",h2:"h2",header:"header",p:"p",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,n.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.header,{children:(0,r.jsx)(t.h1,{id:"welcome",children:"Welcome"})}),"\n",(0,r.jsx)(t.p,{children:"Solus is committed to helping users get the most out of their systems. We designed the help center to introduce our ecosystem and guide you through typical tasks you might need help with."}),"\n",(0,r.jsx)(t.h2,{id:"table-of-contents",children:"Table of contents"}),"\n",(0,r.jsx)(t.p,{children:"We organized the help center into sections to help you navigate the contents easily:"}),"\n",(0,r.jsxs)(t.table,{children:[(0,r.jsx)(t.thead,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.th,{children:"Section"}),(0,r.jsx)(t.th,{children:"Description"})]})}),(0,r.jsxs)(t.tbody,{children:[(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:(0,r.jsx)(t.a,{href:"/docs/category/quick-start",children:"Quick Start"})}),(0,r.jsx)(t.td,{children:"If you're new to Solus, this section will set you on the right track. Find documentation on system requirements, installing Solus, software management, the boot process, and troubleshooting."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:(0,r.jsx)(t.a,{href:"/docs/category/contributing",children:"Contributing"})}),(0,r.jsx)(t.td,{children:"Find how you can contribute to Solus, whether you're a beginner or an experienced Linux and Solus user."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:(0,r.jsx)(t.a,{href:"/docs/user/editions/",children:"Editions"})}),(0,r.jsx)(t.td,{children:"Understand the different editions of Solus: differences between editions, configuration tasks, and helpful tips and tricks."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:(0,r.jsx)(t.a,{href:"/docs/user/hardware/",children:"Hardware"})}),(0,r.jsx)(t.td,{children:"Solus supports most hardware out-of-the-box, but there are exceptions. This section focuses on those exceptions and how to get the most out of your hardware."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:(0,r.jsx)(t.a,{href:"/docs/category/package-management/",children:"Package management"})}),(0,r.jsx)(t.td,{children:"Learn how to install software and manage the repositories of your Solus system."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:(0,r.jsx)(t.a,{href:"/docs/user/privacy",children:"Privacy policy"})}),(0,r.jsx)(t.td,{children:"Understand our privacy policy: Learn how we handle your data, and how to contact us for privacy concerns."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:(0,r.jsx)(t.a,{href:"/docs/category/software/",children:"Software"})}),(0,r.jsx)(t.td,{children:"Getting started and configuration guides for the software packages included in Solus."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:(0,r.jsx)(t.a,{href:"/docs/user/troubleshooting/",children:"Troubleshooting"})}),(0,r.jsx)(t.td,{children:"Learn how to diagnose and fix problems you might have with Solus."})]})]})]}),"\n",(0,r.jsx)(t.h2,{id:"support-channels",children:"Support channels"}),"\n",(0,r.jsx)(t.p,{children:"If you need help with something not covered in the help center, there are various channels where you can seek support from the Solus team or other Solus users."}),"\n",(0,r.jsxs)(t.table,{children:[(0,r.jsx)(t.thead,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.th,{children:"Channel"}),(0,r.jsx)(t.th,{children:"Description"})]})}),(0,r.jsxs)(t.tbody,{children:[(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:(0,r.jsx)(t.a,{href:"https://discuss.getsol.us",children:"Forums"})}),(0,r.jsx)(t.td,{children:"Our Flarum-powered forums are easy to use from any device and are a great resource for getting support."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:(0,r.jsx)(t.a,{href:"https://matrix.to/#/#solus:matrix.org",children:"Matrix"})}),(0,r.jsxs)(t.td,{children:["Matrix is a great way to discuss issues and development in real-time. Learn how to access Solus' Matrix space ",(0,r.jsx)(t.a,{href:"/docs/user/contributing/getting-involved#matrix-chat",children:"here"}),"."]})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:(0,r.jsx)(t.a,{href:"https://www.reddit.com/r/SolusProject",children:"Reddit"})}),(0,r.jsx)(t.td,{children:"If you are a Redditor, our subreddit has a similar purpose to the forums."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:(0,r.jsx)(t.a,{href:"https://issues.getsol.us",children:"Issue tracker"})}),(0,r.jsx)(t.td,{children:"If you have issues with your Solus system, or any of our software packages doesn't work as expected, consider filing a bug report on our issue tracker."})]})]})]}),"\n",(0,r.jsx)(t.admonition,{title:"Important",type:"caution",children:(0,r.jsx)(t.p,{children:"Volunteers around the world build and maintain Solus. Due to time zone differences there might not always be people to answer your questions immediately."})})]})}function l(e={}){const{wrapper:t}={...(0,n.a)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(h,{...e})}):h(e)}},11151:(e,t,s)=>{s.d(t,{Z:()=>d,a:()=>i});var r=s(67294);const n={},o=r.createContext(n);function i(e){const t=r.useContext(o);return r.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function d(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:i(e.components),r.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/6873f895.b8b4b2c1.js b/assets/js/6873f895.b8b4b2c1.js deleted file mode 100644 index 6c7463a2d..000000000 --- a/assets/js/6873f895.b8b4b2c1.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[8849],{83781:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>d,contentTitle:()=>o,default:()=>h,frontMatter:()=>r,metadata:()=>l,toc:()=>a});var s=t(85893),i=t(11151);const r={title:"Solus Style Guide",summary:"Guidance for writing Solus content"},o="Solus style guide",l={id:"user/contributing/style",title:"Solus Style Guide",description:"Solus needs a style guide to give clarity to our contributors and a consistent experience for readers. But we don't want to write our own! We surveyed existing style guides, and we picked parts that were more suitable for our content.",source:"@site/docs/user/contributing/style.md",sourceDirName:"user/contributing",slug:"/user/contributing/style",permalink:"/docs/user/contributing/style",draft:!1,unlisted:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/contributing/style.md",tags:[],version:"current",lastUpdatedAt:1732716912e3,frontMatter:{title:"Solus Style Guide",summary:"Guidance for writing Solus content"},sidebar:"userSidebar",previous:{title:"Getting Involved",permalink:"/docs/user/contributing/getting-involved"},next:{title:"Testing an ISO",permalink:"/docs/user/contributing/testing-an-iso"}},d={},a=[{value:"General writing style",id:"general-writing-style",level:2},{value:"Linux-specific terms",id:"linux-specific-terms",level:2},{value:"Specific guidance",id:"specific-guidance",level:2},{value:"Admonitions",id:"admonitions",level:3},{value:"Code blocks",id:"code-blocks",level:2},{value:"Commands",id:"commands",level:3},{value:"Common Solus terms",id:"common-solus-terms",level:3},{value:"Markdown formatting",id:"markdown-formatting",level:3},{value:"Package names",id:"package-names",level:2},{value:"Spelling",id:"spelling",level:3}];function c(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",p:"p",pre:"pre",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,i.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.header,{children:(0,s.jsx)(n.h1,{id:"solus-style-guide",children:"Solus style guide"})}),"\n",(0,s.jsx)(n.p,{children:"Solus needs a style guide to give clarity to our contributors and a consistent experience for readers. But we don't want to write our own! We surveyed existing style guides, and we picked parts that were more suitable for our content."}),"\n",(0,s.jsx)(n.admonition,{type:"note",children:(0,s.jsx)(n.p,{children:"Existing help center topics might not follow our style guide yet."})}),"\n",(0,s.jsx)(n.h2,{id:"general-writing-style",children:"General writing style"}),"\n",(0,s.jsxs)(n.p,{children:["Use the ",(0,s.jsx)(n.a,{href:"https://developers.google.com/style",children:"Google developer documentation style guide"})," for general writing style, grammar, and formatting."]}),"\n",(0,s.jsx)(n.p,{children:"Some useful pages:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://developers.google.com/style/text-formatting",children:"Text formatting summary"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://developers.google.com/style/procedures",children:"Procedures"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://developers.google.com/style/timeless-documentation",children:"Timeless documentation"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://developers.google.com/style/word-list",children:"Word list"})}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"linux-specific-terms",children:"Linux-specific terms"}),"\n",(0,s.jsxs)(n.p,{children:["If you are unsure of how to use a common Linux term, refer to the ",(0,s.jsx)(n.a,{href:"https://redhat-documentation.github.io/supplementary-style-guide/#glossary-terms-conventions",children:"Glossary of terms and conventions"})," from the ",(0,s.jsx)(n.em,{children:"Red Hat supplementary style guide for documentation"})]}),"\n",(0,s.jsx)(n.h2,{id:"specific-guidance",children:"Specific guidance"}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.em,{children:"In alphabetical order, not order of importance."})}),"\n",(0,s.jsx)(n.h3,{id:"admonitions",children:"Admonitions"}),"\n",(0,s.jsxs)(n.p,{children:["This section is based on the ",(0,s.jsx)(n.a,{href:"https://redhat-documentation.github.io/supplementary-style-guide/#admonitions",children:"Red Hat supplementary style guide"}),"."]}),"\n",(0,s.jsxs)(n.p,{children:["Admonitions should draw the reader\u2019s attention to certain information. Keep admonitions to a minimum, and avoid placing multiple admonitions close to one another. If multiple admonitions are necessary, restructure the information by moving the less-important statements into the flow of the main content. See the ",(0,s.jsx)(n.a,{href:"https://docusaurus.io/docs/markdown-features/admonitions",children:"Docusaurus documentation"})," to learn the correct syntax."]}),"\n",(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{children:"Type"}),(0,s.jsx)(n.th,{children:"Description"})]})}),(0,s.jsxs)(n.tbody,{children:[(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Note"}),(0,s.jsx)(n.td,{children:"Additional guidance or advice that improves product configuration, performance, or supportability"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Tip"}),(0,s.jsx)(n.td,{children:"Recommendations, suggestions, and alternative methods that might not be obvious. Tips are not essential to using the product."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Info"}),(0,s.jsx)(n.td,{children:"General information about the topic at hand that may be useful or relevant to user."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Important"}),(0,s.jsx)(n.td,{children:"Advisory information essential to the completion of a task or default configuration settings. Users must not disregard this information."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Warning"}),(0,s.jsx)(n.td,{children:"Information that warns the user to proceed with caution. Warning emphasizes a course of action\u2019s potential downsides."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Danger"}),(0,s.jsx)(n.td,{children:"Information about imminent system damage, data loss, or a support-related issue if the user disregards this admonition. If available, offer information to avoid the problem in the future or state where to find more information."})]})]})]}),"\n",(0,s.jsx)(n.h2,{id:"code-blocks",children:"Code blocks"}),"\n",(0,s.jsx)(n.p,{children:"Code blocks must indicate the programming language of the code snippet."}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-md",children:'```js\nconsole.log("Hello, world!");\n```\n'})}),"\n",(0,s.jsx)(n.h3,{id:"commands",children:"Commands"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Commands as part of procedures must be inside code blocks with ",(0,s.jsx)(n.code,{children:"bash"}),' as the language type. This ensures users get a "copy to clipboard" button.']}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"When needed, indicate the directory where users need to move before executing the command."}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-md",children:"```bash\ncd ~/path/to/directory\nsudo somecommand\n```\n"})}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"common-solus-terms",children:"Common Solus terms"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["Solus","\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["Prefer ",(0,s.jsx)(n.em,{children:"Solus"})," rather than ",(0,s.jsx)(n.em,{children:"Solus Project"}),". Don't use ",(0,s.jsx)(n.em,{children:"Solus OS"})," or ",(0,s.jsx)(n.em,{children:"Solus Linux"}),"."]}),"\n",(0,s.jsxs)(n.li,{children:["The names of the different editions of Solus are:","\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Solus Budgie"}),"\n",(0,s.jsx)(n.li,{children:"Solus GNOME"}),"\n",(0,s.jsx)(n.li,{children:"Solus Plasma"}),"\n",(0,s.jsx)(n.li,{children:"Solus XFCE"}),"\n"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["Repositories","\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["Avoid using terms such as ",(0,s.jsx)(n.em,{children:"repo"}),", or ",(0,s.jsx)(n.em,{children:"monorepo"}),", use the specific repository name instead."]}),"\n",(0,s.jsx)(n.li,{children:'Example: "The packages repository", instead of "The monorepo".'}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["Dev Tracker","\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["Avoid using the term ",(0,s.jsx)(n.em,{children:"Dev Tracker"}),"."]}),"\n",(0,s.jsx)(n.li,{children:'Example: "The packages issue tracker", instead of "The dev tracker"'}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["eopkg","\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["If you're referring to the application or package, use \"",(0,s.jsx)(n.code,{children:"eopkg"}),'" with inline code formatting (see below)']}),"\n",(0,s.jsxs)(n.li,{children:["If you're referring to package files, use \"",(0,s.jsx)(n.code,{children:".eopkg"}),'" with inline code formatting, including the period but no wildcard']}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"markdown-formatting",children:"Markdown formatting"}),"\n",(0,s.jsxs)(n.p,{children:["Write content using ",(0,s.jsx)(n.a,{href:"https://www.markdownguide.org/cheat-sheet/",children:"Markdown formatting"}),", use ",(0,s.jsx)(n.a,{href:"https://prettier.io/",children:"Prettier"})," to enforce consistent formatting."]}),"\n",(0,s.jsx)(n.h2,{id:"package-names",children:"Package names"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"The name of packages in the Solus repository must use inline code formatting."}),"\n"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-md",children:"To install `caddy`, use the Software Center or execute the following command:\n"})}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"When referring to the name of a product or project, use the name the authors use."}),"\n"]}),"\n",(0,s.jsxs)(n.p,{children:["Examples: ",(0,s.jsx)(n.em,{children:"RetroArch"}),", and ",(0,s.jsx)(n.em,{children:"Code::Blocks"})]}),"\n",(0,s.jsx)(n.h3,{id:"spelling",children:"Spelling"}),"\n",(0,s.jsxs)(n.p,{children:["We prefer American spelling over British spelling. When in doubt about the spelling of a word, see the ",(0,s.jsx)(n.a,{href:"https://www.merriam-webster.com/",children:"Merriam-Webster dictionary"}),"."]})]})}function h(e={}){const{wrapper:n}={...(0,i.a)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(c,{...e})}):c(e)}},11151:(e,n,t)=>{t.d(n,{Z:()=>l,a:()=>o});var s=t(67294);const i={},r=s.createContext(i);function o(e){const n=s.useContext(r);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:o(e.components),s.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/6873f895.cdfc1918.js b/assets/js/6873f895.cdfc1918.js new file mode 100644 index 000000000..6b7b5ec51 --- /dev/null +++ b/assets/js/6873f895.cdfc1918.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([["5243"],{34479:function(e,n,t){t.r(n),t.d(n,{metadata:()=>s,contentTitle:()=>l,default:()=>h,assets:()=>d,toc:()=>a,frontMatter:()=>o});var s=JSON.parse('{"id":"user/contributing/style","title":"Solus Style Guide","description":"Solus needs a style guide to give clarity to our contributors and a consistent experience for readers. But we don\'t want to write our own! We surveyed existing style guides, and we picked parts that were more suitable for our content.","source":"@site/docs/user/contributing/style.md","sourceDirName":"user/contributing","slug":"/user/contributing/style","permalink":"/docs/user/contributing/style","draft":false,"unlisted":false,"editUrl":"https://github.com/getsolus/help-center-docs/tree/master/docs/user/contributing/style.md","tags":[],"version":"current","lastUpdatedAt":1733757592000,"frontMatter":{"title":"Solus Style Guide","summary":"Guidance for writing Solus content"},"sidebar":"userSidebar","previous":{"title":"Getting Involved","permalink":"/docs/user/contributing/getting-involved"},"next":{"title":"Testing an ISO","permalink":"/docs/user/contributing/testing-an-iso"}}'),i=t("85893"),r=t("50065");let o={title:"Solus Style Guide",summary:"Guidance for writing Solus content"},l="Solus style guide",d={},a=[{value:"General writing style",id:"general-writing-style",level:2},{value:"Linux-specific terms",id:"linux-specific-terms",level:2},{value:"Specific guidance",id:"specific-guidance",level:2},{value:"Admonitions",id:"admonitions",level:3},{value:"Code blocks",id:"code-blocks",level:2},{value:"Commands",id:"commands",level:3},{value:"Common Solus terms",id:"common-solus-terms",level:3},{value:"Markdown formatting",id:"markdown-formatting",level:3},{value:"Package names",id:"package-names",level:2},{value:"Spelling",id:"spelling",level:3}];function c(e){let n={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",p:"p",pre:"pre",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,r.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.header,{children:(0,i.jsx)(n.h1,{id:"solus-style-guide",children:"Solus style guide"})}),"\n",(0,i.jsx)(n.p,{children:"Solus needs a style guide to give clarity to our contributors and a consistent experience for readers. But we don't want to write our own! We surveyed existing style guides, and we picked parts that were more suitable for our content."}),"\n",(0,i.jsx)(n.admonition,{type:"note",children:(0,i.jsx)(n.p,{children:"Existing help center topics might not follow our style guide yet."})}),"\n",(0,i.jsx)(n.h2,{id:"general-writing-style",children:"General writing style"}),"\n",(0,i.jsxs)(n.p,{children:["Use the ",(0,i.jsx)(n.a,{href:"https://developers.google.com/style",children:"Google developer documentation style guide"})," for general writing style, grammar, and formatting."]}),"\n",(0,i.jsx)(n.p,{children:"Some useful pages:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"https://developers.google.com/style/text-formatting",children:"Text formatting summary"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"https://developers.google.com/style/procedures",children:"Procedures"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"https://developers.google.com/style/timeless-documentation",children:"Timeless documentation"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"https://developers.google.com/style/word-list",children:"Word list"})}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"linux-specific-terms",children:"Linux-specific terms"}),"\n",(0,i.jsxs)(n.p,{children:["If you are unsure of how to use a common Linux term, refer to the ",(0,i.jsx)(n.a,{href:"https://redhat-documentation.github.io/supplementary-style-guide/#glossary-terms-conventions",children:"Glossary of terms and conventions"})," from the ",(0,i.jsx)(n.em,{children:"Red Hat supplementary style guide for documentation"})]}),"\n",(0,i.jsx)(n.h2,{id:"specific-guidance",children:"Specific guidance"}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.em,{children:"In alphabetical order, not order of importance."})}),"\n",(0,i.jsx)(n.h3,{id:"admonitions",children:"Admonitions"}),"\n",(0,i.jsxs)(n.p,{children:["This section is based on the ",(0,i.jsx)(n.a,{href:"https://redhat-documentation.github.io/supplementary-style-guide/#admonitions",children:"Red Hat supplementary style guide"}),"."]}),"\n",(0,i.jsxs)(n.p,{children:["Admonitions should draw the reader\u2019s attention to certain information. Keep admonitions to a minimum, and avoid placing multiple admonitions close to one another. If multiple admonitions are necessary, restructure the information by moving the less-important statements into the flow of the main content. See the ",(0,i.jsx)(n.a,{href:"https://docusaurus.io/docs/markdown-features/admonitions",children:"Docusaurus documentation"})," to learn the correct syntax."]}),"\n",(0,i.jsxs)(n.table,{children:[(0,i.jsx)(n.thead,{children:(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.th,{children:"Type"}),(0,i.jsx)(n.th,{children:"Description"})]})}),(0,i.jsxs)(n.tbody,{children:[(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"Note"}),(0,i.jsx)(n.td,{children:"Additional guidance or advice that improves product configuration, performance, or supportability"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"Tip"}),(0,i.jsx)(n.td,{children:"Recommendations, suggestions, and alternative methods that might not be obvious. Tips are not essential to using the product."})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"Info"}),(0,i.jsx)(n.td,{children:"General information about the topic at hand that may be useful or relevant to user."})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"Important"}),(0,i.jsx)(n.td,{children:"Advisory information essential to the completion of a task or default configuration settings. Users must not disregard this information."})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"Warning"}),(0,i.jsx)(n.td,{children:"Information that warns the user to proceed with caution. Warning emphasizes a course of action\u2019s potential downsides."})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"Danger"}),(0,i.jsx)(n.td,{children:"Information about imminent system damage, data loss, or a support-related issue if the user disregards this admonition. If available, offer information to avoid the problem in the future or state where to find more information."})]})]})]}),"\n",(0,i.jsx)(n.h2,{id:"code-blocks",children:"Code blocks"}),"\n",(0,i.jsx)(n.p,{children:"Code blocks must indicate the programming language of the code snippet."}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-md",children:'```js\nconsole.log("Hello, world!");\n```\n'})}),"\n",(0,i.jsx)(n.h3,{id:"commands",children:"Commands"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["Commands as part of procedures must be inside code blocks with ",(0,i.jsx)(n.code,{children:"bash"}),' as the language type. This ensures users get a "copy to clipboard" button.']}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"When needed, indicate the directory where users need to move before executing the command."}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-md",children:"```bash\ncd ~/path/to/directory\nsudo somecommand\n```\n"})}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"common-solus-terms",children:"Common Solus terms"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Solus","\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Prefer ",(0,i.jsx)(n.em,{children:"Solus"})," rather than ",(0,i.jsx)(n.em,{children:"Solus Project"}),". Don't use ",(0,i.jsx)(n.em,{children:"Solus OS"})," or ",(0,i.jsx)(n.em,{children:"Solus Linux"}),"."]}),"\n",(0,i.jsxs)(n.li,{children:["The names of the different editions of Solus are:","\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Solus Budgie"}),"\n",(0,i.jsx)(n.li,{children:"Solus GNOME"}),"\n",(0,i.jsx)(n.li,{children:"Solus Plasma"}),"\n",(0,i.jsx)(n.li,{children:"Solus XFCE"}),"\n"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["Repositories","\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Avoid using terms such as ",(0,i.jsx)(n.em,{children:"repo"}),", or ",(0,i.jsx)(n.em,{children:"monorepo"}),", use the specific repository name instead."]}),"\n",(0,i.jsx)(n.li,{children:'Example: "The packages repository", instead of "The monorepo".'}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["Dev Tracker","\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Avoid using the term ",(0,i.jsx)(n.em,{children:"Dev Tracker"}),"."]}),"\n",(0,i.jsx)(n.li,{children:'Example: "The packages issue tracker", instead of "The dev tracker"'}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["eopkg","\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["If you're referring to the application or package, use \"",(0,i.jsx)(n.code,{children:"eopkg"}),'" with inline code formatting (see below)']}),"\n",(0,i.jsxs)(n.li,{children:["If you're referring to package files, use \"",(0,i.jsx)(n.code,{children:".eopkg"}),'" with inline code formatting, including the period but no wildcard']}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"markdown-formatting",children:"Markdown formatting"}),"\n",(0,i.jsxs)(n.p,{children:["Write content using ",(0,i.jsx)(n.a,{href:"https://www.markdownguide.org/cheat-sheet/",children:"Markdown formatting"}),", use ",(0,i.jsx)(n.a,{href:"https://prettier.io/",children:"Prettier"})," to enforce consistent formatting."]}),"\n",(0,i.jsx)(n.h2,{id:"package-names",children:"Package names"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"The name of packages in the Solus repository must use inline code formatting."}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-md",children:"To install `caddy`, use the Software Center or execute the following command:\n"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"When referring to the name of a product or project, use the name the authors use."}),"\n"]}),"\n",(0,i.jsxs)(n.p,{children:["Examples: ",(0,i.jsx)(n.em,{children:"RetroArch"}),", and ",(0,i.jsx)(n.em,{children:"Code::Blocks"})]}),"\n",(0,i.jsx)(n.h3,{id:"spelling",children:"Spelling"}),"\n",(0,i.jsxs)(n.p,{children:["We prefer American spelling over British spelling. When in doubt about the spelling of a word, see the ",(0,i.jsx)(n.a,{href:"https://www.merriam-webster.com/",children:"Merriam-Webster dictionary"}),"."]})]})}function h(e={}){let{wrapper:n}={...(0,r.a)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(c,{...e})}):c(e)}},50065:function(e,n,t){t.d(n,{Z:function(){return l},a:function(){return o}});var s=t(67294);let i={},r=s.createContext(i);function o(e){let n=s.useContext(r);return s.useMemo(function(){return"function"==typeof e?e(n):{...n,...e}},[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:o(e.components),s.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/6875c492.49d5c80f.js b/assets/js/6875c492.49d5c80f.js new file mode 100644 index 000000000..c63532201 --- /dev/null +++ b/assets/js/6875c492.49d5c80f.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([["83"],{40043:function(e,t,n){n.d(t,{Z:function(){return a}});var r=n(85893);n(67294);var i=n(1822),s=n(15779);function a(e){let{metadata:t}=e,{previousPage:n,nextPage:a}=t;return(0,r.jsxs)("nav",{className:"pagination-nav","aria-label":(0,i.I)({id:"theme.blog.paginator.navAriaLabel",message:"Blog list page navigation",description:"The ARIA label for the blog pagination"}),children:[n&&(0,r.jsx)(s.Z,{permalink:n,title:(0,r.jsx)(i.Z,{id:"theme.blog.paginator.newerEntries",description:"The label used to navigate to the newer blog posts page (previous page)",children:"Newer entries"})}),a&&(0,r.jsx)(s.Z,{permalink:a,title:(0,r.jsx)(i.Z,{id:"theme.blog.paginator.olderEntries",description:"The label used to navigate to the older blog posts page (next page)",children:"Older entries"}),isNext:!0})]})}},35825:function(e,t,n){n.d(t,{Z:()=>I});var r=n("85893");n("67294");var i=n("74904"),s=n("75700");function a(e){let{children:t,className:n}=e;return(0,r.jsx)("article",{className:n,children:t})}var l=n("27544");let o="title_f1Hy";function c(e){let{className:t}=e,{metadata:n,isBlogPostPage:a}=(0,s.nO)(),{permalink:c,title:u}=n;return(0,r.jsx)(a?"h1":"h2",{className:(0,i.Z)(o,t),children:a?u:(0,r.jsx)(l.Z,{to:c,children:u})})}var u=n("1822"),d=n("67984"),h=n("28291");let g="container_mt6G";function m(e){let{readingTime:t}=e,n=function(){let{selectMessage:e}=(0,d.c)();return t=>{let n=Math.ceil(t);return e(n,(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:n}))}}();return(0,r.jsx)(r.Fragment,{children:n(t)})}function p(e){let{date:t,formattedDate:n}=e;return(0,r.jsx)("time",{dateTime:t,children:n})}function f(){return(0,r.jsx)(r.Fragment,{children:" \xb7 "})}function x(e){let t,{className:n}=e,{metadata:a}=(0,s.nO)(),{date:l,readingTime:o}=a,c=(0,h.P)({day:"numeric",month:"long",year:"numeric",timeZone:"UTC"});return(0,r.jsxs)("div",{className:(0,i.Z)(g,"margin-vert--md",n),children:[(0,r.jsx)(p,{date:l,formattedDate:(t=l,c.format(new Date(t)))}),void 0!==o&&(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(f,{}),(0,r.jsx)(m,{readingTime:o})]})]})}var j=n("91941");let b={authorCol:"authorCol_Hf19",imageOnlyAuthorRow:"imageOnlyAuthorRow_pa_O",imageOnlyAuthorCol:"imageOnlyAuthorCol_G86a"};function Z(e){let{className:t}=e,{metadata:{authors:n},assets:a}=(0,s.nO)();if(0===n.length)return null;let l=n.every(e=>{let{name:t}=e;return!t}),o=1===n.length;return(0,r.jsx)("div",{className:(0,i.Z)("margin-top--md margin-bottom--sm",l?b.imageOnlyAuthorRow:"row",t),children:n.map((e,t)=>(0,r.jsx)("div",{className:(0,i.Z)(!l&&(o?"col col--12":"col col--6"),l?b.imageOnlyAuthorCol:b.authorCol),children:(0,r.jsx)(j.Z,{author:{...e,imageURL:a.authorsImageUrls[t]??e.imageURL}})},t))})}function v(){return(0,r.jsxs)("header",{children:[(0,r.jsx)(c,{}),(0,r.jsx)(x,{}),(0,r.jsx)(Z,{})]})}var T=n("3062"),w=n("27913");function y(e){let{children:t,className:n}=e,{isBlogPostPage:a}=(0,s.nO)();return(0,r.jsx)("div",{id:a?T.blogPostContainerID:void 0,className:(0,i.Z)("markdown",n),children:(0,r.jsx)(w.Z,{children:t})})}var N=n("50490"),k=n("57216"),O=n("50905");function _(){return(0,r.jsx)("b",{children:(0,r.jsx)(u.Z,{id:"theme.blog.post.readMore",description:"The label used in blog post item excerpts to link to full blog posts",children:"Read more"})})}function A(e){let{blogPostTitle:t,...n}=e;return(0,r.jsx)(l.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}),...n,children:(0,r.jsx)(_,{})})}function P(){let{metadata:e,isBlogPostPage:t}=(0,s.nO)(),{tags:n,title:a,editUrl:l,hasTruncateMarker:o,lastUpdatedBy:c,lastUpdatedAt:u}=e,d=!t&&o,h=n.length>0;if(!(h||d||l))return null;if(!t)return(0,r.jsxs)("footer",{className:"row docusaurus-mt-lg",children:[h&&(0,r.jsx)("div",{className:(0,i.Z)("col",{"col--9":d}),children:(0,r.jsx)(O.Z,{tags:n})}),d&&(0,r.jsx)("div",{className:(0,i.Z)("col text--right",{"col--3":h}),children:(0,r.jsx)(A,{blogPostTitle:a,to:e.permalink})})]});{let e=!!(l||u||c);return(0,r.jsxs)("footer",{className:"docusaurus-mt-lg",children:[h&&(0,r.jsx)("div",{className:(0,i.Z)("row","margin-top--sm",N.k.blog.blogFooterEditMetaRow),children:(0,r.jsx)("div",{className:"col",children:(0,r.jsx)(O.Z,{tags:n})})}),e&&(0,r.jsx)(k.Z,{className:(0,i.Z)("margin-top--sm",N.k.blog.blogFooterEditMetaRow),editUrl:l,lastUpdatedAt:u,lastUpdatedBy:c})]})}}function I(e){let{children:t,className:n}=e,l=function(){let{isBlogPostPage:e}=(0,s.nO)();return e?void 0:"margin-bottom--xl"}();return(0,r.jsxs)(a,{className:(0,i.Z)(l,n),children:[(0,r.jsx)(v,{}),(0,r.jsx)(y,{children:t}),(0,r.jsx)(P,{})]})}},30955:function(e,t,n){n.d(t,{Z:function(){return a}});var r=n(85893);n(67294);var i=n(75700),s=n(35825);function a(e){let{items:t,component:n=s.Z}=e;return(0,r.jsx)(r.Fragment,{children:t.map(e=>{let{content:t}=e;return(0,r.jsx)(i.n4,{content:t,children:(0,r.jsx)(n,{children:(0,r.jsx)(t,{})})},t.metadata.permalink)})})}},97559:function(e,t,n){n.r(t),n.d(t,{default:function(){return j}});var r=n(85893);n(67294);var i=n(74904),s=n(1822),a=n(81921),l=n(50490),o=n(20332),c=n(27544),u=n(30928),d=n(40043),h=n(49868),g=n(30955),m=n(43672),p=n(52068);function f(e){let{tag:t}=e,n=(0,o.Wi)(t);return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(a.d,{title:n,description:t.description}),(0,r.jsx)(h.Z,{tag:"blog_tags_posts"})]})}function x(e){let{tag:t,items:n,sidebar:i,listMetadata:a}=e,l=(0,o.Wi)(t);return(0,r.jsxs)(u.Z,{sidebar:i,children:[t.unlisted&&(0,r.jsx)(m.Z,{}),(0,r.jsxs)("header",{className:"margin-bottom--xl",children:[(0,r.jsx)(p.Z,{as:"h1",children:l}),t.description&&(0,r.jsx)("p",{children:t.description}),(0,r.jsx)(c.Z,{href:t.allTagsPath,children:(0,r.jsx)(s.Z,{id:"theme.tags.tagsPageLink",description:"The label of the link targeting the tag list page",children:"View All Tags"})})]}),(0,r.jsx)(g.Z,{items:n}),(0,r.jsx)(d.Z,{metadata:a})]})}function j(e){return(0,r.jsxs)(a.FG,{className:(0,i.Z)(l.k.wrapper.blogPages,l.k.page.blogTagPostListPage),children:[(0,r.jsx)(f,{...e}),(0,r.jsx)(x,{...e})]})}},43672:function(e,t,n){n.d(t,{Z:function(){return c}});var r=n(85893);n(67294);var i=n(74904),s=n(72372),a=n(50490),l=n(77793);function o(e){let{className:t}=e;return(0,r.jsx)(l.Z,{type:"caution",title:(0,r.jsx)(s.cI,{}),className:(0,i.Z)(t,a.k.common.unlistedBanner),children:(0,r.jsx)(s.eU,{})})}function c(e){return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(s.T$,{}),(0,r.jsx)(o,{...e})]})}},20332:function(e,t,n){n.d(t,{HV:function(){return c},J$:function(){return d},Wi:function(){return l},ds:function(){return o},fw:function(){return u}});var r=n(85893);n(67294);var i=n(1822),s=n(67984);function a(){let{selectMessage:e}=(0,s.c)();return t=>e(t,(0,i.I)({id:"theme.blog.post.plurals",description:'Pluralized label for "{count} posts". 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 post|{count} posts"},{count:t}))}function l(e){let t=a();return(0,i.I)({id:"theme.blog.tagTitle",description:"The title of the page for a blog tag",message:'{nPosts} tagged with "{tagName}"'},{nPosts:t(e.count),tagName:e.label})}function o(e){let t=a();return(0,i.I)({id:"theme.blog.author.pageTitle",description:"The title of the page for a blog author",message:"{authorName} - {nPosts}"},{nPosts:t(e.count),authorName:e.name||e.key})}let c=()=>(0,i.I)({id:"theme.blog.authorsList.pageTitle",message:"Authors",description:"The title of the authors page"});function u(){return(0,r.jsx)(i.Z,{id:"theme.blog.authorsList.viewAll",description:"The label of the link targeting the blog authors page",children:"View all authors"})}function d(){return(0,r.jsx)(i.Z,{id:"theme.blog.author.noPosts",description:"The text for authors with 0 blog post",children:"This author has not written any posts yet."})}},72372:function(e,t,n){n.d(t,{T$:function(){return o},cI:function(){return a},eU:function(){return l},ht:function(){return c},xo:function(){return u}});var r=n(85893);n(67294);var i=n(1822),s=n(50777);function a(){return(0,r.jsx)(i.Z,{id:"theme.contentVisibility.unlistedBanner.title",description:"The unlisted content banner title",children:"Unlisted page"})}function l(){return(0,r.jsx)(i.Z,{id:"theme.contentVisibility.unlistedBanner.message",description:"The unlisted content banner message",children:"This page is unlisted. Search engines will not index it, and only users having a direct link can access it."})}function o(){return(0,r.jsx)(s.Z,{children:(0,r.jsx)("meta",{name:"robots",content:"noindex, nofollow"})})}function c(){return(0,r.jsx)(i.Z,{id:"theme.contentVisibility.draftBanner.title",description:"The draft content banner title",children:"Draft page"})}function u(){return(0,r.jsx)(i.Z,{id:"theme.contentVisibility.draftBanner.message",description:"The draft content banner message",children:"This page is a draft. It will only be visible in dev and be excluded from the production build."})}}}]); \ No newline at end of file diff --git a/assets/js/6875c492.b58fb002.js b/assets/js/6875c492.b58fb002.js deleted file mode 100644 index c51cb6547..000000000 --- a/assets/js/6875c492.b58fb002.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[8610],{17091:(e,t,n)=>{n.d(t,{Z:()=>r});n(67294);var s=n(55361),i=n(60968),a=n(85893);function r(e){const{metadata:t}=e,{previousPage:n,nextPage:r}=t;return(0,a.jsxs)("nav",{className:"pagination-nav","aria-label":(0,s.I)({id:"theme.blog.paginator.navAriaLabel",message:"Blog list page navigation",description:"The ARIA label for the blog pagination"}),children:[n&&(0,a.jsx)(i.Z,{permalink:n,title:(0,a.jsx)(s.Z,{id:"theme.blog.paginator.newerEntries",description:"The label used to navigate to the newer blog posts page (previous page)",children:"Newer entries"})}),r&&(0,a.jsx)(i.Z,{permalink:r,title:(0,a.jsx)(s.Z,{id:"theme.blog.paginator.olderEntries",description:"The label used to navigate to the older blog posts page (next page)",children:"Older entries"}),isNext:!0})]})}},82957:(e,t,n)=>{n.d(t,{Z:()=>r});n(67294);var s=n(58112),i=n(81782),a=n(85893);function r(e){let{items:t,component:n=i.Z}=e;return(0,a.jsx)(a.Fragment,{children:t.map((e=>{let{content:t}=e;return(0,a.jsx)(s.n4,{content:t,children:(0,a.jsx)(n,{children:(0,a.jsx)(t,{})})},t.metadata.permalink)}))})}},23966:(e,t,n)=>{n.r(t),n.d(t,{default:()=>f});n(67294);var s=n(36905),i=n(55361),a=n(96984),r=n(50563),l=n(77514),o=n(38208),c=n(50429),d=n(17091),g=n(62362),h=n(82957),u=n(40591),p=n(42704),m=n(85893);function x(e){let{tag:t}=e;const n=(0,l.Wi)(t);return(0,m.jsxs)(m.Fragment,{children:[(0,m.jsx)(a.d,{title:n,description:t.description}),(0,m.jsx)(g.Z,{tag:"blog_tags_posts"})]})}function b(e){let{tag:t,items:n,sidebar:s,listMetadata:a}=e;const r=(0,l.Wi)(t);return(0,m.jsxs)(c.Z,{sidebar:s,children:[t.unlisted&&(0,m.jsx)(u.Z,{}),(0,m.jsxs)("header",{className:"margin-bottom--xl",children:[(0,m.jsx)(p.Z,{as:"h1",children:r}),t.description&&(0,m.jsx)("p",{children:t.description}),(0,m.jsx)(o.Z,{href:t.allTagsPath,children:(0,m.jsx)(i.Z,{id:"theme.tags.tagsPageLink",description:"The label of the link targeting the tag list page",children:"View All Tags"})})]}),(0,m.jsx)(h.Z,{items:n}),(0,m.jsx)(d.Z,{metadata:a})]})}function f(e){return(0,m.jsxs)(a.FG,{className:(0,s.Z)(r.k.wrapper.blogPages,r.k.page.blogTagPostListPage),children:[(0,m.jsx)(x,{...e}),(0,m.jsx)(b,{...e})]})}},40591:(e,t,n)=>{n.d(t,{Z:()=>c});n(67294);var s=n(36905),i=n(64827),a=n(50563),r=n(20906),l=n(85893);function o(e){let{className:t}=e;return(0,l.jsx)(r.Z,{type:"caution",title:(0,l.jsx)(i.cI,{}),className:(0,s.Z)(t,a.k.common.unlistedBanner),children:(0,l.jsx)(i.eU,{})})}function c(e){return(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)(i.T$,{}),(0,l.jsx)(o,{...e})]})}},77514:(e,t,n)=>{n.d(t,{HV:()=>c,Wi:()=>l,ds:()=>o,fw:()=>d});n(67294);var s=n(55361),i=n(59676),a=n(85893);function r(){const{selectMessage:e}=(0,i.c)();return t=>e(t,(0,s.I)({id:"theme.blog.post.plurals",description:'Pluralized label for "{count} posts". 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 post|{count} posts"},{count:t}))}function l(e){const t=r();return(0,s.I)({id:"theme.blog.tagTitle",description:"The title of the page for a blog tag",message:'{nPosts} tagged with "{tagName}"'},{nPosts:t(e.count),tagName:e.label})}function o(e){const t=r();return(0,s.I)({id:"theme.blog.author.pageTitle",description:"The title of the page for a blog author",message:"{authorName} - {nPosts}"},{nPosts:t(e.count),authorName:e.name||e.key})}const c=()=>(0,s.I)({id:"theme.blog.authorsList.pageTitle",message:"Authors",description:"The title of the authors page"});function d(){return(0,a.jsx)(s.Z,{id:"theme.blog.authorsList.viewAll",description:"The label of the link targeting the blog authors page",children:"View all authors"})}},64827:(e,t,n)=>{n.d(t,{T$:()=>o,cI:()=>r,eU:()=>l,ht:()=>c,xo:()=>d});n(67294);var s=n(55361),i=n(79722),a=n(85893);function r(){return(0,a.jsx)(s.Z,{id:"theme.contentVisibility.unlistedBanner.title",description:"The unlisted content banner title",children:"Unlisted page"})}function l(){return(0,a.jsx)(s.Z,{id:"theme.contentVisibility.unlistedBanner.message",description:"The unlisted content banner message",children:"This page is unlisted. Search engines will not index it, and only users having a direct link can access it."})}function o(){return(0,a.jsx)(i.Z,{children:(0,a.jsx)("meta",{name:"robots",content:"noindex, nofollow"})})}function c(){return(0,a.jsx)(s.Z,{id:"theme.contentVisibility.draftBanner.title",description:"The draft content banner title",children:"Draft page"})}function d(){return(0,a.jsx)(s.Z,{id:"theme.contentVisibility.draftBanner.message",description:"The draft content banner message",children:"This page is a draft. It will only be visible in dev and be excluded from the production build."})}}}]); \ No newline at end of file diff --git a/assets/js/6937.dcb23d21.js b/assets/js/6937.dcb23d21.js deleted file mode 100644 index a00b5ee72..000000000 --- a/assets/js/6937.dcb23d21.js +++ /dev/null @@ -1 +0,0 @@ -(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[6937],{20906:(e,t,n)=>{"use strict";n.d(t,{Z:()=>I});var o=n(67294),s=n(85893);function c(e){const{mdxAdmonitionTitle:t,rest:n}=function(e){const t=o.Children.toArray(e),n=t.find((e=>o.isValidElement(e)&&"mdxAdmonitionTitle"===e.type)),c=t.filter((e=>e!==n)),r=n?.props.children;return{mdxAdmonitionTitle:r,rest:c.length>0?(0,s.jsx)(s.Fragment,{children:c}):null}}(e.children),c=e.title??t;return{...e,...c&&{title:c},children:n}}var r=n(36905),a=n(55361),i=n(50563);const l={admonition:"admonition_xJq3",admonitionHeading:"admonitionHeading_Gvgb",admonitionIcon:"admonitionIcon_Rf37",admonitionContent:"admonitionContent_BuS1"};function d(e){let{type:t,className:n,children:o}=e;return(0,s.jsx)("div",{className:(0,r.Z)(i.k.common.admonition,i.k.common.admonitionType(t),l.admonition,n),children:o})}function u(e){let{icon:t,title:n}=e;return(0,s.jsxs)("div",{className:l.admonitionHeading,children:[(0,s.jsx)("span",{className:l.admonitionIcon,children:t}),n]})}function m(e){let{children:t}=e;return t?(0,s.jsx)("div",{className:l.admonitionContent,children:t}):null}function h(e){const{type:t,icon:n,title:o,children:c,className:r}=e;return(0,s.jsxs)(d,{type:t,className:r,children:[o||n?(0,s.jsx)(u,{title:o,icon:n}):null,(0,s.jsx)(m,{children:c})]})}function p(e){return(0,s.jsx)("svg",{viewBox:"0 0 14 16",...e,children:(0,s.jsx)("path",{fillRule:"evenodd",d:"M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"})})}const f={icon:(0,s.jsx)(p,{}),title:(0,s.jsx)(a.Z,{id:"theme.admonition.note",description:"The default label used for the Note admonition (:::note)",children:"note"})};function b(e){return(0,s.jsx)(h,{...f,...e,className:(0,r.Z)("alert alert--secondary",e.className),children:e.children})}function g(e){return(0,s.jsx)("svg",{viewBox:"0 0 12 16",...e,children:(0,s.jsx)("path",{fillRule:"evenodd",d:"M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"})})}const x={icon:(0,s.jsx)(g,{}),title:(0,s.jsx)(a.Z,{id:"theme.admonition.tip",description:"The default label used for the Tip admonition (:::tip)",children:"tip"})};function j(e){return(0,s.jsx)(h,{...x,...e,className:(0,r.Z)("alert alert--success",e.className),children:e.children})}function v(e){return(0,s.jsx)("svg",{viewBox:"0 0 14 16",...e,children:(0,s.jsx)("path",{fillRule:"evenodd",d:"M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"})})}const k={icon:(0,s.jsx)(v,{}),title:(0,s.jsx)(a.Z,{id:"theme.admonition.info",description:"The default label used for the Info admonition (:::info)",children:"info"})};function N(e){return(0,s.jsx)(h,{...k,...e,className:(0,r.Z)("alert alert--info",e.className),children:e.children})}function y(e){return(0,s.jsx)("svg",{viewBox:"0 0 16 16",...e,children:(0,s.jsx)("path",{fillRule:"evenodd",d:"M8.893 1.5c-.183-.31-.52-.5-.887-.5s-.703.19-.886.5L.138 13.499a.98.98 0 0 0 0 1.001c.193.31.53.501.886.501h13.964c.367 0 .704-.19.877-.5a1.03 1.03 0 0 0 .01-1.002L8.893 1.5zm.133 11.497H6.987v-2.003h2.039v2.003zm0-3.004H6.987V5.987h2.039v4.006z"})})}const B={icon:(0,s.jsx)(y,{}),title:(0,s.jsx)(a.Z,{id:"theme.admonition.warning",description:"The default label used for the Warning admonition (:::warning)",children:"warning"})};function C(e){return(0,s.jsx)("svg",{viewBox:"0 0 12 16",...e,children:(0,s.jsx)("path",{fillRule:"evenodd",d:"M5.05.31c.81 2.17.41 3.38-.52 4.31C3.55 5.67 1.98 6.45.9 7.98c-1.45 2.05-1.7 6.53 3.53 7.7-2.2-1.16-2.67-4.52-.3-6.61-.61 2.03.53 3.33 1.94 2.86 1.39-.47 2.3.53 2.27 1.67-.02.78-.31 1.44-1.13 1.81 3.42-.59 4.78-3.42 4.78-5.56 0-2.84-2.53-3.22-1.25-5.61-1.52.13-2.03 1.13-1.89 2.75.09 1.08-1.02 1.8-1.86 1.33-.67-.41-.66-1.19-.06-1.78C8.18 5.31 8.68 2.45 5.05.32L5.03.3l.02.01z"})})}const w={icon:(0,s.jsx)(C,{}),title:(0,s.jsx)(a.Z,{id:"theme.admonition.danger",description:"The default label used for the Danger admonition (:::danger)",children:"danger"})};const L={icon:(0,s.jsx)(y,{}),title:(0,s.jsx)(a.Z,{id:"theme.admonition.caution",description:"The default label used for the Caution admonition (:::caution)",children:"caution"})};const E={...{note:b,tip:j,info:N,warning:function(e){return(0,s.jsx)(h,{...B,...e,className:(0,r.Z)("alert alert--warning",e.className),children:e.children})},danger:function(e){return(0,s.jsx)(h,{...w,...e,className:(0,r.Z)("alert alert--danger",e.className),children:e.children})}},...{secondary:e=>(0,s.jsx)(b,{title:"secondary",...e}),important:e=>(0,s.jsx)(N,{title:"important",...e}),success:e=>(0,s.jsx)(j,{title:"success",...e}),caution:function(e){return(0,s.jsx)(h,{...L,...e,className:(0,r.Z)("alert alert--warning",e.className),children:e.children})}}};function I(e){const t=c(e),n=(o=t.type,E[o]||(console.warn(`No admonition component found for admonition type "${o}". Using Info as fallback.`),E.info));var o;return(0,s.jsx)(n,{...t})}},17573:(e,t,n)=>{"use strict";n.d(t,{Z:()=>R});var o=n(67294),s=n(45025),c=n(36905),r=n(61503),a=n(39581);function i(){const{prism:e}=(0,a.L)(),{colorMode:t}=(0,r.I)(),n=e.theme,o=e.darkTheme||n;return"dark"===t?o:n}var l=n(50563),d=n(87594),u=n.n(d);const m=/title=(?["'])(?.*?)\1/,h=/\{(?<range>[\d,-]+)\}/,p={js:{start:"\\/\\/",end:""},jsBlock:{start:"\\/\\*",end:"\\*\\/"},jsx:{start:"\\{\\s*\\/\\*",end:"\\*\\/\\s*\\}"},bash:{start:"#",end:""},html:{start:"\x3c!--",end:"--\x3e"}},f={...p,lua:{start:"--",end:""},wasm:{start:"\\;\\;",end:""},tex:{start:"%",end:""},vb:{start:"['\u2018\u2019]",end:""},vbnet:{start:"(?:_\\s*)?['\u2018\u2019]",end:""},rem:{start:"[Rr][Ee][Mm]\\b",end:""},f90:{start:"!",end:""},ml:{start:"\\(\\*",end:"\\*\\)"},cobol:{start:"\\*>",end:""}},b=Object.keys(p);function g(e,t){const n=e.map((e=>{const{start:n,end:o}=f[e];return`(?:${n}\\s*(${t.flatMap((e=>[e.line,e.block?.start,e.block?.end].filter(Boolean))).join("|")})\\s*${o})`})).join("|");return new RegExp(`^\\s*(?:${n})\\s*$`)}function x(e,t){let n=e.replace(/\n$/,"");const{language:o,magicComments:s,metastring:c}=t;if(c&&h.test(c)){const e=c.match(h).groups.range;if(0===s.length)throw new Error(`A highlight range has been given in code block's metastring (\`\`\` ${c}), but no magic comment config is available. Docusaurus applies the first magic comment entry's className for metastring ranges.`);const t=s[0].className,o=u()(e).filter((e=>e>0)).map((e=>[e-1,[t]]));return{lineClassNames:Object.fromEntries(o),code:n}}if(void 0===o)return{lineClassNames:{},code:n};const r=function(e,t){switch(e){case"js":case"javascript":case"ts":case"typescript":return g(["js","jsBlock"],t);case"jsx":case"tsx":return g(["js","jsBlock","jsx"],t);case"html":return g(["js","jsBlock","html"],t);case"python":case"py":case"bash":return g(["bash"],t);case"markdown":case"md":return g(["html","jsx","bash"],t);case"tex":case"latex":case"matlab":return g(["tex"],t);case"lua":case"haskell":case"sql":return g(["lua"],t);case"wasm":return g(["wasm"],t);case"vb":case"vba":case"visual-basic":return g(["vb","rem"],t);case"vbnet":return g(["vbnet","rem"],t);case"batch":return g(["rem"],t);case"basic":return g(["rem","f90"],t);case"fsharp":return g(["js","ml"],t);case"ocaml":case"sml":return g(["ml"],t);case"fortran":return g(["f90"],t);case"cobol":return g(["cobol"],t);default:return g(b,t)}}(o,s),a=n.split("\n"),i=Object.fromEntries(s.map((e=>[e.className,{start:0,range:""}]))),l=Object.fromEntries(s.filter((e=>e.line)).map((e=>{let{className:t,line:n}=e;return[n,t]}))),d=Object.fromEntries(s.filter((e=>e.block)).map((e=>{let{className:t,block:n}=e;return[n.start,t]}))),m=Object.fromEntries(s.filter((e=>e.block)).map((e=>{let{className:t,block:n}=e;return[n.end,t]})));for(let u=0;u<a.length;){const e=a[u].match(r);if(!e){u+=1;continue}const t=e.slice(1).find((e=>void 0!==e));l[t]?i[l[t]].range+=`${u},`:d[t]?i[d[t]].start=u:m[t]&&(i[m[t]].range+=`${i[m[t]].start}-${u-1},`),a.splice(u,1)}n=a.join("\n");const p={};return Object.entries(i).forEach((e=>{let[t,{range:n}]=e;u()(n).forEach((e=>{p[e]??=[],p[e].push(t)}))})),{lineClassNames:p,code:n}}const j={codeBlockContainer:"codeBlockContainer_Ckt0"};var v=n(85893);function k(e){let{as:t,...n}=e;const o=function(e){const t={color:"--prism-color",backgroundColor:"--prism-background-color"},n={};return Object.entries(e.plain).forEach((e=>{let[o,s]=e;const c=t[o];c&&"string"==typeof s&&(n[c]=s)})),n}(i());return(0,v.jsx)(t,{...n,style:o,className:(0,c.Z)(n.className,j.codeBlockContainer,l.k.common.codeBlock)})}const N={codeBlockContent:"codeBlockContent_biex",codeBlockTitle:"codeBlockTitle_Ktv7",codeBlock:"codeBlock_bY9V",codeBlockStandalone:"codeBlockStandalone_MEMb",codeBlockLines:"codeBlockLines_e6Vv",codeBlockLinesWithNumbering:"codeBlockLinesWithNumbering_o6Pm",buttonGroup:"buttonGroup__atx"};function y(e){let{children:t,className:n}=e;return(0,v.jsx)(k,{as:"pre",tabIndex:0,className:(0,c.Z)(N.codeBlockStandalone,"thin-scrollbar",n),children:(0,v.jsx)("code",{className:N.codeBlockLines,children:t})})}var B=n(20585);const C={attributes:!0,characterData:!0,childList:!0,subtree:!0};function w(e,t){const[n,s]=(0,o.useState)(),c=(0,o.useCallback)((()=>{s(e.current?.closest("[role=tabpanel][hidden]"))}),[e,s]);(0,o.useEffect)((()=>{c()}),[c]),function(e,t,n){void 0===n&&(n=C);const s=(0,B.zX)(t),c=(0,B.Ql)(n);(0,o.useEffect)((()=>{const t=new MutationObserver(s);return e&&t.observe(e,c),()=>t.disconnect()}),[e,s,c])}(n,(e=>{e.forEach((e=>{"attributes"===e.type&&"hidden"===e.attributeName&&(t(),c())}))}),{attributes:!0,characterData:!1,childList:!1,subtree:!1})}var L=n(14965);const E={codeLine:"codeLine_lJS_",codeLineNumber:"codeLineNumber_Tfdd",codeLineContent:"codeLineContent_feaV"};function I(e){let{line:t,classNames:n,showLineNumbers:o,getLineProps:s,getTokenProps:r}=e;1===t.length&&"\n"===t[0].content&&(t[0].content="");const a=s({line:t,className:(0,c.Z)(n,o&&E.codeLine)}),i=t.map(((e,t)=>(0,v.jsx)("span",{...r({token:e})},t)));return(0,v.jsxs)("span",{...a,children:[o?(0,v.jsxs)(v.Fragment,{children:[(0,v.jsx)("span",{className:E.codeLineNumber}),(0,v.jsx)("span",{className:E.codeLineContent,children:i})]}):i,(0,v.jsx)("br",{})]})}var T=n(55361);function _(e){return(0,v.jsx)("svg",{viewBox:"0 0 24 24",...e,children:(0,v.jsx)("path",{fill:"currentColor",d:"M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"})})}function Z(e){return(0,v.jsx)("svg",{viewBox:"0 0 24 24",...e,children:(0,v.jsx)("path",{fill:"currentColor",d:"M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"})})}const A={copyButtonCopied:"copyButtonCopied_obH4",copyButtonIcons:"copyButtonIcons_eSgA",copyButtonIcon:"copyButtonIcon_y97N",copyButtonSuccessIcon:"copyButtonSuccessIcon_LjdS"};function M(e){let{code:t,className:n}=e;const[s,r]=(0,o.useState)(!1),a=(0,o.useRef)(void 0),i=(0,o.useCallback)((()=>{!function(e,t){let{target:n=document.body}=void 0===t?{}:t;if("string"!=typeof e)throw new TypeError(`Expected parameter \`text\` to be a \`string\`, got \`${typeof e}\`.`);const o=document.createElement("textarea"),s=document.activeElement;o.value=e,o.setAttribute("readonly",""),o.style.contain="strict",o.style.position="absolute",o.style.left="-9999px",o.style.fontSize="12pt";const c=document.getSelection(),r=c.rangeCount>0&&c.getRangeAt(0);n.append(o),o.select(),o.selectionStart=0,o.selectionEnd=e.length;let a=!1;try{a=document.execCommand("copy")}catch{}o.remove(),r&&(c.removeAllRanges(),c.addRange(r)),s&&s.focus()}(t),r(!0),a.current=window.setTimeout((()=>{r(!1)}),1e3)}),[t]);return(0,o.useEffect)((()=>()=>window.clearTimeout(a.current)),[]),(0,v.jsx)("button",{type:"button","aria-label":s?(0,T.I)({id:"theme.CodeBlock.copied",message:"Copied",description:"The copied button label on code blocks"}):(0,T.I)({id:"theme.CodeBlock.copyButtonAriaLabel",message:"Copy code to clipboard",description:"The ARIA label for copy code blocks button"}),title:(0,T.I)({id:"theme.CodeBlock.copy",message:"Copy",description:"The copy button label on code blocks"}),className:(0,c.Z)("clean-btn",n,A.copyButton,s&&A.copyButtonCopied),onClick:i,children:(0,v.jsxs)("span",{className:A.copyButtonIcons,"aria-hidden":"true",children:[(0,v.jsx)(_,{className:A.copyButtonIcon}),(0,v.jsx)(Z,{className:A.copyButtonSuccessIcon})]})})}function S(e){return(0,v.jsx)("svg",{viewBox:"0 0 24 24",...e,children:(0,v.jsx)("path",{fill:"currentColor",d:"M4 19h6v-2H4v2zM20 5H4v2h16V5zm-3 6H4v2h13.25c1.1 0 2 .9 2 2s-.9 2-2 2H15v-2l-3 3l3 3v-2h2c2.21 0 4-1.79 4-4s-1.79-4-4-4z"})})}const z={wordWrapButtonIcon:"wordWrapButtonIcon_Bwma",wordWrapButtonEnabled:"wordWrapButtonEnabled_EoeP"};function H(e){let{className:t,onClick:n,isEnabled:o}=e;const s=(0,T.I)({id:"theme.CodeBlock.wordWrapToggle",message:"Toggle word wrap",description:"The title attribute for toggle word wrapping button of code block lines"});return(0,v.jsx)("button",{type:"button",onClick:n,className:(0,c.Z)("clean-btn",t,o&&z.wordWrapButtonEnabled),"aria-label":s,title:s,children:(0,v.jsx)(S,{className:z.wordWrapButtonIcon,"aria-hidden":"true"})})}function $(e){let{children:t,className:n="",metastring:s,title:r,showLineNumbers:l,language:d}=e;const{prism:{defaultLanguage:u,magicComments:h}}=(0,a.L)(),p=function(e){return e?.toLowerCase()}(d??function(e){const t=e.split(" ").find((e=>e.startsWith("language-")));return t?.replace(/language-/,"")}(n)??u),f=i(),b=function(){const[e,t]=(0,o.useState)(!1),[n,s]=(0,o.useState)(!1),c=(0,o.useRef)(null),r=(0,o.useCallback)((()=>{const n=c.current.querySelector("code");e?n.removeAttribute("style"):(n.style.whiteSpace="pre-wrap",n.style.overflowWrap="anywhere"),t((e=>!e))}),[c,e]),a=(0,o.useCallback)((()=>{const{scrollWidth:e,clientWidth:t}=c.current,n=e>t||c.current.querySelector("code").hasAttribute("style");s(n)}),[c]);return w(c,a),(0,o.useEffect)((()=>{a()}),[e,a]),(0,o.useEffect)((()=>(window.addEventListener("resize",a,{passive:!0}),()=>{window.removeEventListener("resize",a)})),[a]),{codeBlockRef:c,isEnabled:e,isCodeScrollable:n,toggle:r}}(),g=function(e){return e?.match(m)?.groups.title??""}(s)||r,{lineClassNames:j,code:y}=x(t,{metastring:s,language:p,magicComments:h}),B=l??function(e){return Boolean(e?.includes("showLineNumbers"))}(s);return(0,v.jsxs)(k,{as:"div",className:(0,c.Z)(n,p&&!n.includes(`language-${p}`)&&`language-${p}`),children:[g&&(0,v.jsx)("div",{className:N.codeBlockTitle,children:g}),(0,v.jsxs)("div",{className:N.codeBlockContent,children:[(0,v.jsx)(L.y$,{theme:f,code:y,language:p??"text",children:e=>{let{className:t,style:n,tokens:o,getLineProps:s,getTokenProps:r}=e;return(0,v.jsx)("pre",{tabIndex:0,ref:b.codeBlockRef,className:(0,c.Z)(t,N.codeBlock,"thin-scrollbar"),style:n,children:(0,v.jsx)("code",{className:(0,c.Z)(N.codeBlockLines,B&&N.codeBlockLinesWithNumbering),children:o.map(((e,t)=>(0,v.jsx)(I,{line:e,getLineProps:s,getTokenProps:r,classNames:j[t],showLineNumbers:B},t)))})})}}),(0,v.jsxs)("div",{className:N.buttonGroup,children:[(b.isEnabled||b.isCodeScrollable)&&(0,v.jsx)(H,{className:N.codeButton,onClick:()=>b.toggle(),isEnabled:b.isEnabled}),(0,v.jsx)(M,{className:N.codeButton,code:y})]})]})]})}function R(e){let{children:t,...n}=e;const c=(0,s.Z)(),r=function(e){return o.Children.toArray(e).some((e=>(0,o.isValidElement)(e)))?e:Array.isArray(e)?e.join(""):e}(t),a="string"==typeof r?$:y;return(0,v.jsx)(a,{...n,children:r},String(c))}},87594:(e,t)=>{function n(e){let t,n=[];for(let o of e.split(",").map((e=>e.trim())))if(/^-?\d+$/.test(o))n.push(parseInt(o,10));else if(t=o.match(/^(-?\d+)(-|\.\.\.?|\u2025|\u2026|\u22EF)(-?\d+)$/)){let[e,o,s,c]=t;if(o&&c){o=parseInt(o),c=parseInt(c);const e=o<c?1:-1;"-"!==s&&".."!==s&&"\u2025"!==s||(c+=e);for(let t=o;t!==c;t+=e)n.push(t)}}return n}t.default=n,e.exports=n},11151:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a,a:()=>r});var o=n(67294);const s={},c=o.createContext(s);function r(e){const t=o.useContext(c);return o.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:r(e.components),o.createElement(c.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/6cfe09a0.82bdd5bd.js b/assets/js/6cfe09a0.82bdd5bd.js deleted file mode 100644 index 55c4cc469..000000000 --- a/assets/js/6cfe09a0.82bdd5bd.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[1174],{67189:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>l,contentTitle:()=>o,default:()=>u,frontMatter:()=>i,metadata:()=>a,toc:()=>c});var t=s(85893),r=s(11151);const i={title:"TigerVNC",summary:"A quick start guide to using TigerVNC on Solus"},o="TigerVNC",a={id:"user/software/networking/tigervnc",title:"TigerVNC",description:"TigerVNC is a high-performance implementation of the VNC protocol, which allows you to control/view desktops remotely over the internet.",source:"@site/docs/user/software/networking/tigervnc.md",sourceDirName:"user/software/networking",slug:"/user/software/networking/tigervnc",permalink:"/docs/user/software/networking/tigervnc",draft:!1,unlisted:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/software/networking/tigervnc.md",tags:[],version:"current",lastUpdatedAt:1732716912e3,frontMatter:{title:"TigerVNC",summary:"A quick start guide to using TigerVNC on Solus"},sidebar:"userSidebar",previous:{title:"Samba File Sharing",permalink:"/docs/user/software/networking/samba"},next:{title:"Wireshark",permalink:"/docs/user/software/networking/wireshark"}},l={},c=[{value:"Installation",id:"installation",level:2},{value:"Usage",id:"usage",level:2},{value:"Initial setup of vncserver",id:"initial-setup-of-vncserver",level:3},{value:"Configuration for your desktops",id:"configuration-for-your-desktops",level:3},{value:"Budgie",id:"budgie",level:3},{value:"GNOME",id:"gnome",level:3},{value:"MATE",id:"mate",level:3},{value:"Plasma",id:"plasma",level:3}];function d(e){const n={code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",p:"p",pre:"pre",strong:"strong",...(0,r.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.header,{children:(0,t.jsx)(n.h1,{id:"tigervnc",children:"TigerVNC"})}),"\n",(0,t.jsx)(n.p,{children:"TigerVNC is a high-performance implementation of the VNC protocol, which allows you to control/view desktops remotely over the internet."}),"\n",(0,t.jsx)(n.h2,{id:"installation",children:"Installation"}),"\n",(0,t.jsx)(n.p,{children:"TigerVNC can be installed either from the Software Center or via terminal. The terminal command to run it is:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"sudo eopkg install tigervnc\n"})}),"\n",(0,t.jsx)(n.h2,{id:"usage",children:"Usage"}),"\n",(0,t.jsx)(n.h3,{id:"initial-setup-of-vncserver",children:"Initial setup of vncserver"}),"\n",(0,t.jsx)(n.p,{children:"For the initial setup of vncserver for TigerVNC you have to open a terminal and run:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"vncserver\n"})}),"\n",(0,t.jsxs)(n.p,{children:["While this setup you will be asked for setting up a ",(0,t.jsx)(n.strong,{children:"password"})," and if you'd like to setup a ",(0,t.jsx)(n.strong,{children:"view-only mode"}),", please do it accordingly your desire."]}),"\n",(0,t.jsx)(n.p,{children:"After the initial setup you have to stop the vncserver process, for this please type inside the terminal"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"vncserver -kill :1\n"})}),"\n",(0,t.jsx)(n.h3,{id:"configuration-for-your-desktops",children:"Configuration for your desktops"}),"\n",(0,t.jsxs)(n.p,{children:["Every Desktop needs a different Setup, you find the vncserver config under",(0,t.jsx)(n.code,{children:"$HOME/.vnc/xstartup"})," open the file with your desired editor and change bash script inside the file with the following information for your Desktop."]}),"\n",(0,t.jsx)(n.h3,{id:"budgie",children:"Budgie"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"#!/bin/bash\n\nunset SESSION_MANAGER\nunset DBUS_SESSION_BUS_ADDRESS\n\ngnome-session --session=budgie-desktop &\nbudgie-wm &\nbudgie-panel &\n"})}),"\n",(0,t.jsx)(n.h3,{id:"gnome",children:"GNOME"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"#!/bin/bash\n\nunset SESSION_MANAGER\nunset DBUS_SESSION_BUS_ADDRESS\nexport XKL_XMODMAP_DISABLE=1\n\ngnome-session &\ngnome-panel &\ngnome-settings-daemon &\nmetacity &\nnautilus &\n"})}),"\n",(0,t.jsx)(n.h3,{id:"mate",children:"MATE"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"#!/bin/bash\n\nunset SESSION_MANAGER\nunset DBUS_SESSION_BUS_ADDRESS\n\nmate-session &\nmate-panel &\n"})}),"\n",(0,t.jsx)(n.h3,{id:"plasma",children:"Plasma"}),"\n",(0,t.jsxs)(n.p,{children:["Plasma desktop is not supported at the moment. Please use the software ",(0,t.jsx)(n.code,{children:"x11vnc"})," for vncserver support on Plasma."]})]})}function u(e={}){const{wrapper:n}={...(0,r.a)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(d,{...e})}):d(e)}},11151:(e,n,s)=>{s.d(n,{Z:()=>a,a:()=>o});var t=s(67294);const r={},i=t.createContext(r);function o(e){const n=t.useContext(i);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:o(e.components),t.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/6cfe09a0.f301a118.js b/assets/js/6cfe09a0.f301a118.js new file mode 100644 index 000000000..a45e1f984 --- /dev/null +++ b/assets/js/6cfe09a0.f301a118.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([["7170"],{61435:function(e,n,t){t.r(n),t.d(n,{metadata:()=>s,contentTitle:()=>a,default:()=>u,assets:()=>l,toc:()=>c,frontMatter:()=>o});var s=JSON.parse('{"id":"user/software/networking/tigervnc","title":"TigerVNC","description":"TigerVNC is a high-performance implementation of the VNC protocol, which allows you to control/view desktops remotely over the internet.","source":"@site/docs/user/software/networking/tigervnc.md","sourceDirName":"user/software/networking","slug":"/user/software/networking/tigervnc","permalink":"/docs/user/software/networking/tigervnc","draft":false,"unlisted":false,"editUrl":"https://github.com/getsolus/help-center-docs/tree/master/docs/user/software/networking/tigervnc.md","tags":[],"version":"current","lastUpdatedAt":1733757592000,"frontMatter":{"title":"TigerVNC","summary":"A quick start guide to using TigerVNC on Solus"},"sidebar":"userSidebar","previous":{"title":"Samba File Sharing","permalink":"/docs/user/software/networking/samba"},"next":{"title":"Wireshark","permalink":"/docs/user/software/networking/wireshark"}}'),r=t("85893"),i=t("50065");let o={title:"TigerVNC",summary:"A quick start guide to using TigerVNC on Solus"},a="TigerVNC",l={},c=[{value:"Installation",id:"installation",level:2},{value:"Usage",id:"usage",level:2},{value:"Initial setup of vncserver",id:"initial-setup-of-vncserver",level:3},{value:"Configuration for your desktops",id:"configuration-for-your-desktops",level:3},{value:"Budgie",id:"budgie",level:3},{value:"GNOME",id:"gnome",level:3},{value:"MATE",id:"mate",level:3},{value:"Plasma",id:"plasma",level:3}];function d(e){let n={code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",p:"p",pre:"pre",strong:"strong",...(0,i.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.header,{children:(0,r.jsx)(n.h1,{id:"tigervnc",children:"TigerVNC"})}),"\n",(0,r.jsx)(n.p,{children:"TigerVNC is a high-performance implementation of the VNC protocol, which allows you to control/view desktops remotely over the internet."}),"\n",(0,r.jsx)(n.h2,{id:"installation",children:"Installation"}),"\n",(0,r.jsx)(n.p,{children:"TigerVNC can be installed either from the Software Center or via terminal. The terminal command to run it is:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"sudo eopkg install tigervnc\n"})}),"\n",(0,r.jsx)(n.h2,{id:"usage",children:"Usage"}),"\n",(0,r.jsx)(n.h3,{id:"initial-setup-of-vncserver",children:"Initial setup of vncserver"}),"\n",(0,r.jsx)(n.p,{children:"For the initial setup of vncserver for TigerVNC you have to open a terminal and run:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"vncserver\n"})}),"\n",(0,r.jsxs)(n.p,{children:["While this setup you will be asked for setting up a ",(0,r.jsx)(n.strong,{children:"password"})," and if you'd like to setup a ",(0,r.jsx)(n.strong,{children:"view-only mode"}),", please do it accordingly your desire."]}),"\n",(0,r.jsx)(n.p,{children:"After the initial setup you have to stop the vncserver process, for this please type inside the terminal"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"vncserver -kill :1\n"})}),"\n",(0,r.jsx)(n.h3,{id:"configuration-for-your-desktops",children:"Configuration for your desktops"}),"\n",(0,r.jsxs)(n.p,{children:["Every Desktop needs a different Setup, you find the vncserver config under",(0,r.jsx)(n.code,{children:"$HOME/.vnc/xstartup"})," open the file with your desired editor and change bash script inside the file with the following information for your Desktop."]}),"\n",(0,r.jsx)(n.h3,{id:"budgie",children:"Budgie"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"#!/bin/bash\n\nunset SESSION_MANAGER\nunset DBUS_SESSION_BUS_ADDRESS\n\ngnome-session --session=budgie-desktop &\nbudgie-wm &\nbudgie-panel &\n"})}),"\n",(0,r.jsx)(n.h3,{id:"gnome",children:"GNOME"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"#!/bin/bash\n\nunset SESSION_MANAGER\nunset DBUS_SESSION_BUS_ADDRESS\nexport XKL_XMODMAP_DISABLE=1\n\ngnome-session &\ngnome-panel &\ngnome-settings-daemon &\nmetacity &\nnautilus &\n"})}),"\n",(0,r.jsx)(n.h3,{id:"mate",children:"MATE"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"#!/bin/bash\n\nunset SESSION_MANAGER\nunset DBUS_SESSION_BUS_ADDRESS\n\nmate-session &\nmate-panel &\n"})}),"\n",(0,r.jsx)(n.h3,{id:"plasma",children:"Plasma"}),"\n",(0,r.jsxs)(n.p,{children:["Plasma desktop is not supported at the moment. Please use the software ",(0,r.jsx)(n.code,{children:"x11vnc"})," for vncserver support on Plasma."]})]})}function u(e={}){let{wrapper:n}={...(0,i.a)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(d,{...e})}):d(e)}},50065:function(e,n,t){t.d(n,{Z:function(){return a},a:function(){return o}});var s=t(67294);let r={},i=s.createContext(r);function o(e){let n=s.useContext(i);return s.useMemo(function(){return"function"==typeof e?e(n):{...n,...e}},[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:o(e.components),s.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/7071adf5.47fc74c7.js b/assets/js/7071adf5.47fc74c7.js deleted file mode 100644 index cf5ab641e..000000000 --- a/assets/js/7071adf5.47fc74c7.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[4796],{31386:(e,o,s)=>{s.r(o),s.d(o,{assets:()=>r,contentTitle:()=>a,default:()=>u,frontMatter:()=>t,metadata:()=>c,toc:()=>l});var i=s(85893),n=s(11151);const t={title:"Troubleshooting for Packagers",summary:"Common packaging issues and how to fix them"},a="Troubleshooting for Packagers",c={id:"packaging/troubleshooting-packaging",title:"Troubleshooting for Packagers",description:"This page covers common packaging issues and how to fix them. We also show you how to share your packaging work so you can ask for help in the Solus Matrix rooms.",source:"@site/docs/packaging/troubleshooting-packaging.md",sourceDirName:"packaging",slug:"/packaging/troubleshooting-packaging",permalink:"/docs/packaging/troubleshooting-packaging",draft:!1,unlisted:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/packaging/troubleshooting-packaging.md",tags:[],version:"current",lastUpdatedAt:1732716912e3,frontMatter:{title:"Troubleshooting for Packagers",summary:"Common packaging issues and how to fix them"},sidebar:"packagingSidebar",previous:{title:"Translation instructions",permalink:"/docs/packaging/translation-instructions"},next:{title:"Your First Package Update",permalink:"/docs/packaging/your-first-package-update"}},r={},l=[{value:"Asking for help",id:"asking-for-help",level:2},{value:"Common Issues",id:"common-issues",level:2},{value:""Error downloading https://github.com/project/blah/1.2.3.tar.gz: checksum mismatch"",id:"error-downloading-httpsgithubcomprojectblah123targz-checksum-mismatch",level:3},{value:""Failed to build packages err="Failed to fetch source https://github.com/project/blah.git#{commit ref here}, reason: exit status 1\\n"",id:"failed-to-build-packages-errfailed-to-fetch-source-httpsgithubcomprojectblahgitcommit-ref-here-reason-exit-status-1n",level:3},{value:""mount: /var/lib/solbuild/roots/unstable-x86_64: WARNING: source write-protected, mounted read-only"",id:"mount-varlibsolbuildrootsunstable-x86_64-warning-source-write-protected-mounted-read-only",level:3},{value:"Solbuild is eating up all my disk space",id:"solbuild-is-eating-up-all-my-disk-space",level:3},{value:"An old package using <code>%configure</code> doesn't build",id:"an-old-package-using-configure-doesnt-build",level:3},{value:"Something is wrong with my solbuild profile",id:"something-is-wrong-with-my-solbuild-profile",level:3},{value:"Git commands fail and complain about package checks",id:"git-commands-fail-and-complain-about-package-checks",level:3}];function d(e){const o={a:"a",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,n.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(o.header,{children:(0,i.jsx)(o.h1,{id:"troubleshooting-for-packagers",children:"Troubleshooting for Packagers"})}),"\n",(0,i.jsx)(o.p,{children:"This page covers common packaging issues and how to fix them. We also show you how to share your packaging work so you can ask for help in the Solus Matrix rooms."}),"\n",(0,i.jsx)(o.h2,{id:"asking-for-help",children:"Asking for help"}),"\n",(0,i.jsxs)(o.p,{children:["When you run into a problem that you don't know how to fix you should ask for help in the ",(0,i.jsx)(o.a,{href:"/docs/user/contributing/getting-involved#matrix-chat",children:"Solus Packaging Matrix room"}),". But first you should send the ",(0,i.jsx)(o.code,{children:"package.yml"})," file and ",(0,i.jsx)(o.code,{children:"solbuild"})," output to somewhere others can see it; we recommend you use ",(0,i.jsx)(o.a,{href:"https://gist.github.com/",children:"GitHub Gists"}),". These commands assume you have set up ",(0,i.jsx)(o.code,{children:"github-cli"}),"."]}),"\n",(0,i.jsxs)(o.p,{children:["If you would rather not use Gists, use a pastebin site like ",(0,i.jsx)(o.a,{href:"https://bpa.st/",children:"bpaste"})]}),"\n",(0,i.jsxs)(o.p,{children:["Send the ",(0,i.jsx)(o.code,{children:"package.yml"})," file in the current directory to a public Gist:"]}),"\n",(0,i.jsx)(o.pre,{children:(0,i.jsx)(o.code,{className:"language-bash",children:"cat package.yml | gh gist create --public\n"})}),"\n",(0,i.jsxs)(o.p,{children:["Send the output of ",(0,i.jsx)(o.code,{children:"solbuild"})," to a public Gist:"]}),"\n",(0,i.jsx)(o.pre,{children:(0,i.jsx)(o.code,{className:"language-bash",children:"go-task |& gh gist create --public\n"})}),"\n",(0,i.jsx)(o.p,{children:(0,i.jsxs)(o.em,{children:["Note: the usual ",(0,i.jsx)(o.code,{children:"solbuild"})," output will not be shown when this command is running, and it will take at least a few seconds"]})}),"\n",(0,i.jsxs)(o.p,{children:["Send the output of ",(0,i.jsx)(o.code,{children:"solbuild"})," to a new ",(0,i.jsx)(o.code,{children:"output.txt"})," file:"]}),"\n",(0,i.jsx)(o.pre,{children:(0,i.jsx)(o.code,{className:"language-bash",children:"go-task |& tee output.txt\n"})}),"\n",(0,i.jsx)(o.h2,{id:"common-issues",children:"Common Issues"}),"\n",(0,i.jsxs)(o.h3,{id:"error-downloading-httpsgithubcomprojectblah123targz-checksum-mismatch",children:['"Error downloading ',(0,i.jsx)(o.a,{href:"https://github.com/project/blah/1.2.3.tar.gz",children:"https://github.com/project/blah/1.2.3.tar.gz"}),': checksum mismatch"']}),"\n",(0,i.jsxs)(o.p,{children:["Your ",(0,i.jsx)(o.code,{children:"source"})," tarball does not match the checksum next to it in ",(0,i.jsx)(o.code,{children:"package.yml"}),". You should use ",(0,i.jsx)(o.code,{children:"go-task new"})," or ",(0,i.jsx)(o.code,{children:"go-task update"})," to write the correct checksum automatically."]}),"\n",(0,i.jsxs)(o.h3,{id:"failed-to-build-packages-errfailed-to-fetch-source-httpsgithubcomprojectblahgitcommit-ref-here-reason-exit-status-1n",children:['"Failed to build packages err="Failed to fetch source ',(0,i.jsx)(o.a,{href:"https://github.com/project/blah.git#%7Bcommit",children:"https://github.com/project/blah.git#{commit"}),' ref here}, reason: exit status 1\\n"']}),"\n",(0,i.jsxs)(o.p,{children:["If your build fails immediately this message, and you are using a ",(0,i.jsx)(o.strong,{children:"git source"}),", you should clear the ",(0,i.jsx)(o.code,{children:"solbuild"})," git sources cache:"]}),"\n",(0,i.jsx)(o.pre,{children:(0,i.jsx)(o.code,{className:"language-bash",children:"sudo rm -rf /var/lib/solbuild/sources/git\n"})}),"\n",(0,i.jsx)(o.h3,{id:"mount-varlibsolbuildrootsunstable-x86_64-warning-source-write-protected-mounted-read-only",children:'"mount: /var/lib/solbuild/roots/unstable-x86_64: WARNING: source write-protected, mounted read-only"'}),"\n",(0,i.jsxs)(o.p,{children:["If you interrupt a build sometimes ",(0,i.jsx)(o.code,{children:"solbuild"})," does not unmount cleanly, and you will need to unmount manually:"]}),"\n",(0,i.jsx)(o.pre,{children:(0,i.jsx)(o.code,{className:"language-bash",children:"sudo umount -f /var/lib/solbuild/roots/unstable-x86_64\n"})}),"\n",(0,i.jsx)(o.h3,{id:"solbuild-is-eating-up-all-my-disk-space",children:"Solbuild is eating up all my disk space"}),"\n",(0,i.jsxs)(o.p,{children:["The ",(0,i.jsx)(o.code,{children:"solbuild"})," cache at ",(0,i.jsx)(o.code,{children:"/var/cache/solbuild"}),' can grow to tens of gigabytes easily. Recover that disk space by running the "delete cache (',(0,i.jsx)(o.code,{children:"dc"}),')" command:']}),"\n",(0,i.jsx)(o.pre,{children:(0,i.jsx)(o.code,{className:"language-bash",children:"sudo solbuild dc\n"})}),"\n",(0,i.jsxs)(o.h3,{id:"an-old-package-using-configure-doesnt-build",children:["An old package using ",(0,i.jsx)(o.code,{children:"%configure"})," doesn't build"]}),"\n",(0,i.jsxs)(o.ul,{children:["\n",(0,i.jsxs)(o.li,{children:["Replace ",(0,i.jsx)(o.code,{children:"%configure"})," with ",(0,i.jsx)(o.code,{children:"%reconfigure"})," and try again."]}),"\n",(0,i.jsxs)(o.li,{children:["If ",(0,i.jsx)(o.code,{children:"%reconfigure"})," produces the error ",(0,i.jsx)(o.code,{children:"configure: error: unrecognized option: '--runstatedir=/run'"}),", then use the new ",(0,i.jsx)(o.code,{children:"%configure_no_runstatedir"})," macro"]}),"\n"]}),"\n",(0,i.jsx)(o.h3,{id:"something-is-wrong-with-my-solbuild-profile",children:"Something is wrong with my solbuild profile"}),"\n",(0,i.jsxs)(o.p,{children:["Try running ",(0,i.jsx)(o.code,{children:"go-task solbuild-reset"}),". This will delete the solbuild cache and profile, then download and initialize a fresh copy of the default unstable profile."]}),"\n",(0,i.jsx)(o.h3,{id:"git-commands-fail-and-complain-about-package-checks",children:"Git commands fail and complain about package checks"}),"\n",(0,i.jsx)(o.pre,{children:(0,i.jsx)(o.code,{className:"language-bash",children:"git commit --amend\nWRN packages/q/qqwing/package.yml:1: Package release is not incremented by 1\nERR packages/q/qqwing/pspec_x86_64.xml:1: Package release is not incremented by 1\nPackage checks failed: /home/user/solus-packages/common/CI/package_checks.py packages/q/qqwing/package.yml packages/q/qqwing/pspec_x86_64.xml\n"})}),"\n",(0,i.jsxs)(o.ul,{children:["\n",(0,i.jsxs)(o.li,{children:["Solus uses pre-commit hooks to check for simple errors. Right now, certain ",(0,i.jsx)(o.code,{children:"git"})," commands can fail, particularly ",(0,i.jsx)(o.code,{children:"git commit --amend"})," and ",(0,i.jsx)(o.code,{children:"git commit --fixup"})]}),"\n",(0,i.jsxs)(o.li,{children:["You can bypass the pre-commit hooks by adding the ",(0,i.jsx)(o.code,{children:"no-verify"})," option, for example: ",(0,i.jsx)(o.code,{children:"git commit --amend --no-verify"}),". Checks will still be run by GitHub after a Pull Request is created."]}),"\n"]})]})}function u(e={}){const{wrapper:o}={...(0,n.a)(),...e.components};return o?(0,i.jsx)(o,{...e,children:(0,i.jsx)(d,{...e})}):d(e)}},11151:(e,o,s)=>{s.d(o,{Z:()=>c,a:()=>a});var i=s(67294);const n={},t=i.createContext(n);function a(e){const o=i.useContext(t);return i.useMemo((function(){return"function"==typeof e?e(o):{...o,...e}}),[o,e])}function c(e){let o;return o=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:a(e.components),i.createElement(t.Provider,{value:o},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/7071adf5.484f9146.js b/assets/js/7071adf5.484f9146.js new file mode 100644 index 000000000..fe6623350 --- /dev/null +++ b/assets/js/7071adf5.484f9146.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([["2882"],{92098:function(e,o,s){s.r(o),s.d(o,{metadata:()=>i,contentTitle:()=>c,default:()=>u,assets:()=>r,toc:()=>l,frontMatter:()=>a});var i=JSON.parse('{"id":"packaging/troubleshooting-packaging","title":"Troubleshooting for Packagers","description":"This page covers common packaging issues and how to fix them. We also show you how to share your packaging work so you can ask for help in the Solus Matrix rooms.","source":"@site/docs/packaging/troubleshooting-packaging.md","sourceDirName":"packaging","slug":"/packaging/troubleshooting-packaging","permalink":"/docs/packaging/troubleshooting-packaging","draft":false,"unlisted":false,"editUrl":"https://github.com/getsolus/help-center-docs/tree/master/docs/packaging/troubleshooting-packaging.md","tags":[],"version":"current","lastUpdatedAt":1733757592000,"frontMatter":{"title":"Troubleshooting for Packagers","summary":"Common packaging issues and how to fix them"},"sidebar":"packagingSidebar","previous":{"title":"Translation instructions","permalink":"/docs/packaging/translation-instructions"},"next":{"title":"Your First Package Update","permalink":"/docs/packaging/your-first-package-update"}}'),n=s("85893"),t=s("50065");let a={title:"Troubleshooting for Packagers",summary:"Common packaging issues and how to fix them"},c="Troubleshooting for Packagers",r={},l=[{value:"Asking for help",id:"asking-for-help",level:2},{value:"Common Issues",id:"common-issues",level:2},{value:""Error downloading https://github.com/project/blah/1.2.3.tar.gz: checksum mismatch"",id:"error-downloading-httpsgithubcomprojectblah123targz-checksum-mismatch",level:3},{value:""Failed to build packages err="Failed to fetch source https://github.com/project/blah.git#{commit ref here}, reason: exit status 1\\n"",id:"failed-to-build-packages-errfailed-to-fetch-source-httpsgithubcomprojectblahgitcommit-ref-here-reason-exit-status-1n",level:3},{value:""mount: /var/lib/solbuild/roots/unstable-x86_64: WARNING: source write-protected, mounted read-only"",id:"mount-varlibsolbuildrootsunstable-x86_64-warning-source-write-protected-mounted-read-only",level:3},{value:"Solbuild is eating up all my disk space",id:"solbuild-is-eating-up-all-my-disk-space",level:3},{value:"An old package using <code>%configure</code> doesn't build",id:"an-old-package-using-configure-doesnt-build",level:3},{value:"Something is wrong with my solbuild profile",id:"something-is-wrong-with-my-solbuild-profile",level:3},{value:"Git commands fail and complain about package checks",id:"git-commands-fail-and-complain-about-package-checks",level:3}];function d(e){let o={a:"a",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,t.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(o.header,{children:(0,n.jsx)(o.h1,{id:"troubleshooting-for-packagers",children:"Troubleshooting for Packagers"})}),"\n",(0,n.jsx)(o.p,{children:"This page covers common packaging issues and how to fix them. We also show you how to share your packaging work so you can ask for help in the Solus Matrix rooms."}),"\n",(0,n.jsx)(o.h2,{id:"asking-for-help",children:"Asking for help"}),"\n",(0,n.jsxs)(o.p,{children:["When you run into a problem that you don't know how to fix you should ask for help in the ",(0,n.jsx)(o.a,{href:"/docs/user/contributing/getting-involved#matrix-chat",children:"Solus Packaging Matrix room"}),". But first you should send the ",(0,n.jsx)(o.code,{children:"package.yml"})," file and ",(0,n.jsx)(o.code,{children:"solbuild"})," output to somewhere others can see it; we recommend you use ",(0,n.jsx)(o.a,{href:"https://gist.github.com/",children:"GitHub Gists"}),". These commands assume you have set up ",(0,n.jsx)(o.code,{children:"github-cli"}),"."]}),"\n",(0,n.jsxs)(o.p,{children:["If you would rather not use Gists, use a pastebin site like ",(0,n.jsx)(o.a,{href:"https://bpa.st/",children:"bpaste"})]}),"\n",(0,n.jsxs)(o.p,{children:["Send the ",(0,n.jsx)(o.code,{children:"package.yml"})," file in the current directory to a public Gist:"]}),"\n",(0,n.jsx)(o.pre,{children:(0,n.jsx)(o.code,{className:"language-bash",children:"cat package.yml | gh gist create --public\n"})}),"\n",(0,n.jsxs)(o.p,{children:["Send the output of ",(0,n.jsx)(o.code,{children:"solbuild"})," to a public Gist:"]}),"\n",(0,n.jsx)(o.pre,{children:(0,n.jsx)(o.code,{className:"language-bash",children:"go-task |& gh gist create --public\n"})}),"\n",(0,n.jsx)(o.p,{children:(0,n.jsxs)(o.em,{children:["Note: the usual ",(0,n.jsx)(o.code,{children:"solbuild"})," output will not be shown when this command is running, and it will take at least a few seconds"]})}),"\n",(0,n.jsxs)(o.p,{children:["Send the output of ",(0,n.jsx)(o.code,{children:"solbuild"})," to a new ",(0,n.jsx)(o.code,{children:"output.txt"})," file:"]}),"\n",(0,n.jsx)(o.pre,{children:(0,n.jsx)(o.code,{className:"language-bash",children:"go-task |& tee output.txt\n"})}),"\n",(0,n.jsx)(o.h2,{id:"common-issues",children:"Common Issues"}),"\n",(0,n.jsxs)(o.h3,{id:"error-downloading-httpsgithubcomprojectblah123targz-checksum-mismatch",children:['"Error downloading ',(0,n.jsx)(o.a,{href:"https://github.com/project/blah/1.2.3.tar.gz",children:"https://github.com/project/blah/1.2.3.tar.gz"}),': checksum mismatch"']}),"\n",(0,n.jsxs)(o.p,{children:["Your ",(0,n.jsx)(o.code,{children:"source"})," tarball does not match the checksum next to it in ",(0,n.jsx)(o.code,{children:"package.yml"}),". You should use ",(0,n.jsx)(o.code,{children:"go-task new"})," or ",(0,n.jsx)(o.code,{children:"go-task update"})," to write the correct checksum automatically."]}),"\n",(0,n.jsxs)(o.h3,{id:"failed-to-build-packages-errfailed-to-fetch-source-httpsgithubcomprojectblahgitcommit-ref-here-reason-exit-status-1n",children:['"Failed to build packages err="Failed to fetch source ',(0,n.jsx)(o.a,{href:"https://github.com/project/blah.git#%7Bcommit",children:"https://github.com/project/blah.git#{commit"}),' ref here}, reason: exit status 1\\n"']}),"\n",(0,n.jsxs)(o.p,{children:["If your build fails immediately this message, and you are using a ",(0,n.jsx)(o.strong,{children:"git source"}),", you should clear the ",(0,n.jsx)(o.code,{children:"solbuild"})," git sources cache:"]}),"\n",(0,n.jsx)(o.pre,{children:(0,n.jsx)(o.code,{className:"language-bash",children:"sudo rm -rf /var/lib/solbuild/sources/git\n"})}),"\n",(0,n.jsx)(o.h3,{id:"mount-varlibsolbuildrootsunstable-x86_64-warning-source-write-protected-mounted-read-only",children:'"mount: /var/lib/solbuild/roots/unstable-x86_64: WARNING: source write-protected, mounted read-only"'}),"\n",(0,n.jsxs)(o.p,{children:["If you interrupt a build sometimes ",(0,n.jsx)(o.code,{children:"solbuild"})," does not unmount cleanly, and you will need to unmount manually:"]}),"\n",(0,n.jsx)(o.pre,{children:(0,n.jsx)(o.code,{className:"language-bash",children:"sudo umount -f /var/lib/solbuild/roots/unstable-x86_64\n"})}),"\n",(0,n.jsx)(o.h3,{id:"solbuild-is-eating-up-all-my-disk-space",children:"Solbuild is eating up all my disk space"}),"\n",(0,n.jsxs)(o.p,{children:["The ",(0,n.jsx)(o.code,{children:"solbuild"})," cache at ",(0,n.jsx)(o.code,{children:"/var/cache/solbuild"}),' can grow to tens of gigabytes easily. Recover that disk space by running the "delete cache (',(0,n.jsx)(o.code,{children:"dc"}),')" command:']}),"\n",(0,n.jsx)(o.pre,{children:(0,n.jsx)(o.code,{className:"language-bash",children:"sudo solbuild dc\n"})}),"\n",(0,n.jsxs)(o.h3,{id:"an-old-package-using-configure-doesnt-build",children:["An old package using ",(0,n.jsx)(o.code,{children:"%configure"})," doesn't build"]}),"\n",(0,n.jsxs)(o.ul,{children:["\n",(0,n.jsxs)(o.li,{children:["Replace ",(0,n.jsx)(o.code,{children:"%configure"})," with ",(0,n.jsx)(o.code,{children:"%reconfigure"})," and try again."]}),"\n",(0,n.jsxs)(o.li,{children:["If ",(0,n.jsx)(o.code,{children:"%reconfigure"})," produces the error ",(0,n.jsx)(o.code,{children:"configure: error: unrecognized option: '--runstatedir=/run'"}),", then use the new ",(0,n.jsx)(o.code,{children:"%configure_no_runstatedir"})," macro"]}),"\n"]}),"\n",(0,n.jsx)(o.h3,{id:"something-is-wrong-with-my-solbuild-profile",children:"Something is wrong with my solbuild profile"}),"\n",(0,n.jsxs)(o.p,{children:["Try running ",(0,n.jsx)(o.code,{children:"go-task solbuild-reset"}),". This will delete the solbuild cache and profile, then download and initialize a fresh copy of the default unstable profile."]}),"\n",(0,n.jsx)(o.h3,{id:"git-commands-fail-and-complain-about-package-checks",children:"Git commands fail and complain about package checks"}),"\n",(0,n.jsx)(o.pre,{children:(0,n.jsx)(o.code,{className:"language-bash",children:"git commit --amend\nWRN packages/q/qqwing/package.yml:1: Package release is not incremented by 1\nERR packages/q/qqwing/pspec_x86_64.xml:1: Package release is not incremented by 1\nPackage checks failed: /home/user/solus-packages/common/CI/package_checks.py packages/q/qqwing/package.yml packages/q/qqwing/pspec_x86_64.xml\n"})}),"\n",(0,n.jsxs)(o.ul,{children:["\n",(0,n.jsxs)(o.li,{children:["Solus uses pre-commit hooks to check for simple errors. Right now, certain ",(0,n.jsx)(o.code,{children:"git"})," commands can fail, particularly ",(0,n.jsx)(o.code,{children:"git commit --amend"})," and ",(0,n.jsx)(o.code,{children:"git commit --fixup"})]}),"\n",(0,n.jsxs)(o.li,{children:["You can bypass the pre-commit hooks by adding the ",(0,n.jsx)(o.code,{children:"no-verify"})," option, for example: ",(0,n.jsx)(o.code,{children:"git commit --amend --no-verify"}),". Checks will still be run by GitHub after a Pull Request is created."]}),"\n"]})]})}function u(e={}){let{wrapper:o}={...(0,t.a)(),...e.components};return o?(0,n.jsx)(o,{...e,children:(0,n.jsx)(d,{...e})}):d(e)}},50065:function(e,o,s){s.d(o,{Z:function(){return c},a:function(){return a}});var i=s(67294);let n={},t=i.createContext(n);function a(e){let o=i.useContext(t);return i.useMemo(function(){return"function"==typeof e?e(o):{...o,...e}},[o,e])}function c(e){let o;return o=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:a(e.components),i.createElement(t.Provider,{value:o},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/7167.2229f351.js b/assets/js/7167.2229f351.js new file mode 100644 index 000000000..987aa0897 --- /dev/null +++ b/assets/js/7167.2229f351.js @@ -0,0 +1 @@ +(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([["7167"],{87594:function(e,t){function n(e){let t,n=[];for(let o of e.split(",").map(e=>e.trim()))if(/^-?\d+$/.test(o))n.push(parseInt(o,10));else if(t=o.match(/^(-?\d+)(-|\.\.\.?|\u2025|\u2026|\u22EF)(-?\d+)$/)){let[e,o,r,s]=t;if(o&&s){o=parseInt(o);let e=o<(s=parseInt(s))?1:-1;("-"===r||".."===r||"\u2025"===r)&&(s+=e);for(let t=o;t!==s;t+=e)n.push(t)}}return n}t.default=n,e.exports=n},77793:function(e,t,n){"use strict";n.d(t,{Z:()=>N});var o=n("85893"),r=n("67294"),s=n("74904"),c=n("1822"),a=n("50490");let l={admonition:"admonition_xJq3",admonitionHeading:"admonitionHeading_Gvgb",admonitionIcon:"admonitionIcon_Rf37",admonitionContent:"admonitionContent_BuS1"};function i(e){let{type:t,className:n,children:r}=e;return(0,o.jsx)("div",{className:(0,s.Z)(a.k.common.admonition,a.k.common.admonitionType(t),l.admonition,n),children:r})}function d(e){let{icon:t,title:n}=e;return(0,o.jsxs)("div",{className:l.admonitionHeading,children:[(0,o.jsx)("span",{className:l.admonitionIcon,children:t}),n]})}function u(e){let{children:t}=e;return t?(0,o.jsx)("div",{className:l.admonitionContent,children:t}):null}function m(e){let{type:t,icon:n,title:r,children:s,className:c}=e;return(0,o.jsxs)(i,{type:t,className:c,children:[r||n?(0,o.jsx)(d,{title:r,icon:n}):null,(0,o.jsx)(u,{children:s})]})}let h={icon:(0,o.jsx)(function(e){return(0,o.jsx)("svg",{viewBox:"0 0 14 16",...e,children:(0,o.jsx)("path",{fillRule:"evenodd",d:"M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"})})},{}),title:(0,o.jsx)(c.Z,{id:"theme.admonition.note",description:"The default label used for the Note admonition (:::note)",children:"note"})};function f(e){return(0,o.jsx)(m,{...h,...e,className:(0,s.Z)("alert alert--secondary",e.className),children:e.children})}let p={icon:(0,o.jsx)(function(e){return(0,o.jsx)("svg",{viewBox:"0 0 12 16",...e,children:(0,o.jsx)("path",{fillRule:"evenodd",d:"M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"})})},{}),title:(0,o.jsx)(c.Z,{id:"theme.admonition.tip",description:"The default label used for the Tip admonition (:::tip)",children:"tip"})};function b(e){return(0,o.jsx)(m,{...p,...e,className:(0,s.Z)("alert alert--success",e.className),children:e.children})}let x={icon:(0,o.jsx)(function(e){return(0,o.jsx)("svg",{viewBox:"0 0 14 16",...e,children:(0,o.jsx)("path",{fillRule:"evenodd",d:"M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"})})},{}),title:(0,o.jsx)(c.Z,{id:"theme.admonition.info",description:"The default label used for the Info admonition (:::info)",children:"info"})};function j(e){return(0,o.jsx)(m,{...x,...e,className:(0,s.Z)("alert alert--info",e.className),children:e.children})}function g(e){return(0,o.jsx)("svg",{viewBox:"0 0 16 16",...e,children:(0,o.jsx)("path",{fillRule:"evenodd",d:"M8.893 1.5c-.183-.31-.52-.5-.887-.5s-.703.19-.886.5L.138 13.499a.98.98 0 0 0 0 1.001c.193.31.53.501.886.501h13.964c.367 0 .704-.19.877-.5a1.03 1.03 0 0 0 .01-1.002L8.893 1.5zm.133 11.497H6.987v-2.003h2.039v2.003zm0-3.004H6.987V5.987h2.039v4.006z"})})}let v={icon:(0,o.jsx)(g,{}),title:(0,o.jsx)(c.Z,{id:"theme.admonition.warning",description:"The default label used for the Warning admonition (:::warning)",children:"warning"})},y={icon:(0,o.jsx)(function(e){return(0,o.jsx)("svg",{viewBox:"0 0 12 16",...e,children:(0,o.jsx)("path",{fillRule:"evenodd",d:"M5.05.31c.81 2.17.41 3.38-.52 4.31C3.55 5.67 1.98 6.45.9 7.98c-1.45 2.05-1.7 6.53 3.53 7.7-2.2-1.16-2.67-4.52-.3-6.61-.61 2.03.53 3.33 1.94 2.86 1.39-.47 2.3.53 2.27 1.67-.02.78-.31 1.44-1.13 1.81 3.42-.59 4.78-3.42 4.78-5.56 0-2.84-2.53-3.22-1.25-5.61-1.52.13-2.03 1.13-1.89 2.75.09 1.08-1.02 1.8-1.86 1.33-.67-.41-.66-1.19-.06-1.78C8.18 5.31 8.68 2.45 5.05.32L5.03.3l.02.01z"})})},{}),title:(0,o.jsx)(c.Z,{id:"theme.admonition.danger",description:"The default label used for the Danger admonition (:::danger)",children:"danger"})},k={icon:(0,o.jsx)(g,{}),title:(0,o.jsx)(c.Z,{id:"theme.admonition.caution",description:"The default label used for the Caution admonition (:::caution)",children:"caution"})},B={note:f,tip:b,info:j,warning:function(e){return(0,o.jsx)(m,{...v,...e,className:(0,s.Z)("alert alert--warning",e.className),children:e.children})},danger:function(e){return(0,o.jsx)(m,{...y,...e,className:(0,s.Z)("alert alert--danger",e.className),children:e.children})},secondary:e=>(0,o.jsx)(f,{title:"secondary",...e}),important:e=>(0,o.jsx)(j,{title:"important",...e}),success:e=>(0,o.jsx)(b,{title:"success",...e}),caution:function(e){return(0,o.jsx)(m,{...k,...e,className:(0,s.Z)("alert alert--warning",e.className),children:e.children})}};function N(e){let t=function(e){let{mdxAdmonitionTitle:t,rest:n}=function(e){let t=r.Children.toArray(e),n=t.find(e=>r.isValidElement(e)&&"mdxAdmonitionTitle"===e.type),s=t.filter(e=>e!==n);return{mdxAdmonitionTitle:n?.props.children,rest:s.length>0?(0,o.jsx)(o.Fragment,{children:s}):null}}(e.children),s=e.title??t;return{...e,...s&&{title:s},children:n}}(e),n=function(e){let t=B[e];return t?t:(console.warn(`No admonition component found for admonition type "${e}". Using Info as fallback.`),B.info)}(t.type);return(0,o.jsx)(n,{...t})}},84404:function(e,t,n){"use strict";n.d(t,{Z:()=>S});var o=n("85893"),r=n("67294"),s=n("13341"),c=n("74904"),a=n("96818"),l=n("45237");function i(){let{prism:e}=(0,l.L)(),{colorMode:t}=(0,a.I)(),n=e.theme,o=e.darkTheme||n;return"dark"===t?o:n}var d=n("50490"),u=n("87594"),m=n.n(u);let h=/title=(?<quote>["'])(?<title>.*?)\1/,f=/\{(?<range>[\d,-]+)\}/,p={js:{start:"\\/\\/",end:""},jsBlock:{start:"\\/\\*",end:"\\*\\/"},jsx:{start:"\\{\\s*\\/\\*",end:"\\*\\/\\s*\\}"},bash:{start:"#",end:""},html:{start:"\x3c!--",end:"--\x3e"}},b={...p,lua:{start:"--",end:""},wasm:{start:"\\;\\;",end:""},tex:{start:"%",end:""},vb:{start:"['\u2018\u2019]",end:""},vbnet:{start:"(?:_\\s*)?['\u2018\u2019]",end:""},rem:{start:"[Rr][Ee][Mm]\\b",end:""},f90:{start:"!",end:""},ml:{start:"\\(\\*",end:"\\*\\)"},cobol:{start:"\\*>",end:""}},x=Object.keys(p);function j(e,t){let n=e.map(e=>{let{start:n,end:o}=b[e];return`(?:${n}\\s*(${t.flatMap(e=>[e.line,e.block?.start,e.block?.end].filter(Boolean)).join("|")})\\s*${o})`}).join("|");return RegExp(`^\\s*(?:${n})\\s*$`)}let g="codeBlockContainer_Ckt0";function v(e){let{as:t,...n}=e,r=function(e){let t={color:"--prism-color",backgroundColor:"--prism-background-color"},n={};return Object.entries(e.plain).forEach(e=>{let[o,r]=e,s=t[o];s&&"string"==typeof r&&(n[s]=r)}),n}(i());return(0,o.jsx)(t,{...n,style:r,className:(0,c.Z)(n.className,g,d.k.common.codeBlock)})}let y={codeBlockContent:"codeBlockContent_biex",codeBlockTitle:"codeBlockTitle_Ktv7",codeBlock:"codeBlock_bY9V",codeBlockStandalone:"codeBlockStandalone_MEMb",codeBlockLines:"codeBlockLines_e6Vv",codeBlockLinesWithNumbering:"codeBlockLinesWithNumbering_o6Pm",buttonGroup:"buttonGroup__atx"};function k(e){let{children:t,className:n}=e;return(0,o.jsx)(v,{as:"pre",tabIndex:0,className:(0,c.Z)(y.codeBlockStandalone,"thin-scrollbar",n),children:(0,o.jsx)("code",{className:y.codeBlockLines,children:t})})}var B=n("57100");let N={attributes:!0,characterData:!0,childList:!0,subtree:!0};var w=n("43359");let C={codeLine:"codeLine_lJS_",codeLineNumber:"codeLineNumber_Tfdd",codeLineContent:"codeLineContent_feaV"};function L(e){let{line:t,classNames:n,showLineNumbers:r,getLineProps:s,getTokenProps:a}=e;1===t.length&&"\n"===t[0].content&&(t[0].content="");let l=s({line:t,className:(0,c.Z)(n,r&&C.codeLine)}),i=t.map((e,t)=>(0,o.jsx)("span",{...a({token:e})},t));return(0,o.jsxs)("span",{...l,children:[r?(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)("span",{className:C.codeLineNumber}),(0,o.jsx)("span",{className:C.codeLineContent,children:i})]}):i,(0,o.jsx)("br",{})]})}var E=n("1822");function I(e){return(0,o.jsx)("svg",{viewBox:"0 0 24 24",...e,children:(0,o.jsx)("path",{fill:"currentColor",d:"M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"})})}function _(e){return(0,o.jsx)("svg",{viewBox:"0 0 24 24",...e,children:(0,o.jsx)("path",{fill:"currentColor",d:"M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"})})}let Z={copyButtonCopied:"copyButtonCopied_obH4",copyButtonIcons:"copyButtonIcons_eSgA",copyButtonIcon:"copyButtonIcon_y97N",copyButtonSuccessIcon:"copyButtonSuccessIcon_LjdS"};function T(e){let{code:t,className:n}=e,[s,a]=(0,r.useState)(!1),l=(0,r.useRef)(void 0),i=(0,r.useCallback)(()=>{!function(e){let{target:t=document.body}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if("string"!=typeof e)throw TypeError(`Expected parameter \`text\` to be a \`string\`, got \`${typeof e}\`.`);let n=document.createElement("textarea"),o=document.activeElement;n.value=e,n.setAttribute("readonly",""),n.style.contain="strict",n.style.position="absolute",n.style.left="-9999px",n.style.fontSize="12pt";let r=document.getSelection(),s=r.rangeCount>0&&r.getRangeAt(0);t.append(n),n.select(),n.selectionStart=0,n.selectionEnd=e.length;let c=!1;try{c=document.execCommand("copy")}catch{}n.remove(),s&&(r.removeAllRanges(),r.addRange(s)),o&&o.focus()}(t),a(!0),l.current=window.setTimeout(()=>{a(!1)},1e3)},[t]);return(0,r.useEffect)(()=>()=>window.clearTimeout(l.current),[]),(0,o.jsx)("button",{type:"button","aria-label":s?(0,E.I)({id:"theme.CodeBlock.copied",message:"Copied",description:"The copied button label on code blocks"}):(0,E.I)({id:"theme.CodeBlock.copyButtonAriaLabel",message:"Copy code to clipboard",description:"The ARIA label for copy code blocks button"}),title:(0,E.I)({id:"theme.CodeBlock.copy",message:"Copy",description:"The copy button label on code blocks"}),className:(0,c.Z)("clean-btn",n,Z.copyButton,s&&Z.copyButtonCopied),onClick:i,children:(0,o.jsxs)("span",{className:Z.copyButtonIcons,"aria-hidden":"true",children:[(0,o.jsx)(I,{className:Z.copyButtonIcon}),(0,o.jsx)(_,{className:Z.copyButtonSuccessIcon})]})})}function z(e){return(0,o.jsx)("svg",{viewBox:"0 0 24 24",...e,children:(0,o.jsx)("path",{fill:"currentColor",d:"M4 19h6v-2H4v2zM20 5H4v2h16V5zm-3 6H4v2h13.25c1.1 0 2 .9 2 2s-.9 2-2 2H15v-2l-3 3l3 3v-2h2c2.21 0 4-1.79 4-4s-1.79-4-4-4z"})})}let A={wordWrapButtonIcon:"wordWrapButtonIcon_Bwma",wordWrapButtonEnabled:"wordWrapButtonEnabled_EoeP"};function H(e){let{className:t,onClick:n,isEnabled:r}=e,s=(0,E.I)({id:"theme.CodeBlock.wordWrapToggle",message:"Toggle word wrap",description:"The title attribute for toggle word wrapping button of code block lines"});return(0,o.jsx)("button",{type:"button",onClick:n,className:(0,c.Z)("clean-btn",t,r&&A.wordWrapButtonEnabled),"aria-label":s,title:s,children:(0,o.jsx)(z,{className:A.wordWrapButtonIcon,"aria-hidden":"true"})})}function M(e){var t,n,s;let{children:a,className:d="",metastring:u,title:p,showLineNumbers:b,language:g}=e,{prism:{defaultLanguage:k,magicComments:C}}=(0,l.L)();let E=(t=g??function(e){let t=e.split(" ").find(e=>e.startsWith("language-"));return t?.replace(/language-/,"")}(d)??k,t?.toLowerCase()),I=i(),_=function(){let[e,t]=(0,r.useState)(!1),[n,o]=(0,r.useState)(!1),s=(0,r.useRef)(null),c=(0,r.useCallback)(()=>{let n=s.current.querySelector("code");e?n.removeAttribute("style"):(n.style.whiteSpace="pre-wrap",n.style.overflowWrap="anywhere"),t(e=>!e)},[s,e]),a=(0,r.useCallback)(()=>{let{scrollWidth:e,clientWidth:t}=s.current;o(e>t||s.current.querySelector("code").hasAttribute("style"))},[s]);return!function(e,t){let[n,o]=(0,r.useState)(),s=(0,r.useCallback)(()=>{o(e.current?.closest("[role=tabpanel][hidden]"))},[e,o]);(0,r.useEffect)(()=>{s()},[s]),!function(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:N,o=(0,B.zX)(t),s=(0,B.Ql)(n);(0,r.useEffect)(()=>{let t=new MutationObserver(o);return e&&t.observe(e,s),()=>t.disconnect()},[e,o,s])}(n,e=>{e.forEach(e=>{"attributes"===e.type&&"hidden"===e.attributeName&&(t(),s())})},{attributes:!0,characterData:!1,childList:!1,subtree:!1})}(s,a),(0,r.useEffect)(()=>{a()},[e,a]),(0,r.useEffect)(()=>(window.addEventListener("resize",a,{passive:!0}),()=>{window.removeEventListener("resize",a)}),[a]),{codeBlockRef:s,isEnabled:e,isCodeScrollable:n,toggle:c}}();let Z=(n=u,(n?.match(h)?.groups.title??"")||p),{lineClassNames:z,code:A}=function(e,t){let n=e.replace(/\n$/,""),{language:o,magicComments:r,metastring:s}=t;if(s&&f.test(s)){let e=s.match(f).groups.range;if(0===r.length)throw Error(`A highlight range has been given in code block's metastring (\`\`\` ${s}), but no magic comment config is available. Docusaurus applies the first magic comment entry's className for metastring ranges.`);let t=r[0].className;return{lineClassNames:Object.fromEntries(m()(e).filter(e=>e>0).map(e=>[e-1,[t]])),code:n}}if(void 0===o)return{lineClassNames:{},code:n};let c=function(e,t){switch(e){case"js":case"javascript":case"ts":case"typescript":return j(["js","jsBlock"],t);case"jsx":case"tsx":return j(["js","jsBlock","jsx"],t);case"html":return j(["js","jsBlock","html"],t);case"python":case"py":case"bash":return j(["bash"],t);case"markdown":case"md":return j(["html","jsx","bash"],t);case"tex":case"latex":case"matlab":return j(["tex"],t);case"lua":case"haskell":case"sql":return j(["lua"],t);case"wasm":return j(["wasm"],t);case"vb":case"vba":case"visual-basic":return j(["vb","rem"],t);case"vbnet":return j(["vbnet","rem"],t);case"batch":return j(["rem"],t);case"basic":return j(["rem","f90"],t);case"fsharp":return j(["js","ml"],t);case"ocaml":case"sml":return j(["ml"],t);case"fortran":return j(["f90"],t);case"cobol":return j(["cobol"],t);default:return j(x,t)}}(o,r),a=n.split("\n"),l=Object.fromEntries(r.map(e=>[e.className,{start:0,range:""}])),i=Object.fromEntries(r.filter(e=>e.line).map(e=>{let{className:t,line:n}=e;return[n,t]})),d=Object.fromEntries(r.filter(e=>e.block).map(e=>{let{className:t,block:n}=e;return[n.start,t]})),u=Object.fromEntries(r.filter(e=>e.block).map(e=>{let{className:t,block:n}=e;return[n.end,t]}));for(let e=0;e<a.length;){let t=a[e].match(c);if(!t){e+=1;continue}let n=t.slice(1).find(e=>void 0!==e);i[n]?l[i[n]].range+=`${e},`:d[n]?l[d[n]].start=e:u[n]&&(l[u[n]].range+=`${l[u[n]].start}-${e-1},`),a.splice(e,1)}n=a.join("\n");let h={};return Object.entries(l).forEach(e=>{let[t,{range:n}]=e;m()(n).forEach(e=>{h[e]??=[],h[e].push(t)})}),{lineClassNames:h,code:n}}(a,{metastring:u,language:E,magicComments:C});let M=b??(s=u,!!s?.includes("showLineNumbers"));return(0,o.jsxs)(v,{as:"div",className:(0,c.Z)(d,E&&!d.includes(`language-${E}`)&&`language-${E}`),children:[Z&&(0,o.jsx)("div",{className:y.codeBlockTitle,children:Z}),(0,o.jsxs)("div",{className:y.codeBlockContent,children:[(0,o.jsx)(w.y$,{theme:I,code:A,language:E??"text",children:e=>{let{className:t,style:n,tokens:r,getLineProps:s,getTokenProps:a}=e;return(0,o.jsx)("pre",{tabIndex:0,ref:_.codeBlockRef,className:(0,c.Z)(t,y.codeBlock,"thin-scrollbar"),style:n,children:(0,o.jsx)("code",{className:(0,c.Z)(y.codeBlockLines,M&&y.codeBlockLinesWithNumbering),children:r.map((e,t)=>(0,o.jsx)(L,{line:e,getLineProps:s,getTokenProps:a,classNames:z[t],showLineNumbers:M},t))})})}}),(0,o.jsxs)("div",{className:y.buttonGroup,children:[(_.isEnabled||_.isCodeScrollable)&&(0,o.jsx)(H,{className:y.codeButton,onClick:()=>_.toggle(),isEnabled:_.isEnabled}),(0,o.jsx)(T,{className:y.codeButton,code:A})]})]})]})}function S(e){var t;let{children:n,...c}=e,a=(0,s.Z)();let l=(t=n,r.Children.toArray(t).some(e=>(0,r.isValidElement)(e))?t:Array.isArray(t)?t.join(""):t);return(0,o.jsx)("string"==typeof l?M:k,{...c,children:l},String(a))}},50065:function(e,t,n){"use strict";n.d(t,{Z:function(){return a},a:function(){return c}});var o=n(67294);let r={},s=o.createContext(r);function c(e){let t=o.useContext(s);return o.useMemo(function(){return"function"==typeof e?e(t):{...t,...e}},[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:c(e.components),o.createElement(s.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/72054e31.129ae3b7.js b/assets/js/72054e31.129ae3b7.js new file mode 100644 index 000000000..6fe045e0a --- /dev/null +++ b/assets/js/72054e31.129ae3b7.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([["9277"],{89814:function(e,i,n){n.r(i),n.d(i,{assets:function(){return o},contentTitle:function(){return a},default:function(){return h},frontMatter:function(){return r},metadata:function(){return s},toc:function(){return d}});var s=n(56021),t=n(85893),l=n(50065);let r={title:"Intro to Optimizing Packages on Solus",description:"Explore how to employ advanced compiler techniques such as PGO, BOLT & Glibc HWCaps to squeeze extra performance from packages using libwebp as a test vehicle",slug:"solus-optimizing-packages",authors:"joey",tags:["pgo","lto","solus","packaging","optimization",3,"clang","gnu","llvm","glibc","hwcaps","x86_64-v3"],hide_table_of_contents:!1},a="Cual es la causa",o={authorsImageUrls:[void 0]},d=[{value:"Let's Start Obvious",id:"lets-start-obvious",level:2},{value:"PGO is great, except, when it isn't.",id:"pgo-is-great-except-when-it-isnt",level:2},{value:"256 Vector Units go brrrrrr...",id:"256-vector-units-go-brrrrrr",level:2},{value:"Something about <code>perf</code> to the rescue",id:"something-about-perf-to-the-rescue",level:2},{value:"Choosing Wisely",id:"choosing-wisely",level:2},{value:"Adjusting the Benchmark",id:"adjusting-the-benchmark",level:2},{value:"Partial Profiling",id:"partial-profiling",level:3},{value:"I Zee a Purty lil' Package",id:"i-zee-a-purty-lil-package",level:2},{value:"Squeezing more from zlib-ng",id:"squeezing-more-from-zlib-ng",level:2}];function c(e){let i={a:"a",blockquote:"blockquote",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",img:"img",li:"li",ol:"ol",p:"p",pre:"pre",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,l.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)(i.p,{children:["We'll explore how to build packages with advanced compiler techniques in order to squeeze more performance out of the box for packages in Solus. We'll be using the story of how ",(0,t.jsx)(i.code,{children:"libwebp"})," was optimized for and how it led to an unexpected side quest."]}),"\n",(0,t.jsx)(i.p,{children:"Linux distributions have a lot of control over how a source-based package gets compiled and shipped to users as part of a binary repository. Aggressive and advanced compiler optimization techniques, as well as other methods can be used to provide greater out of the box performance for end users. This can greatly benefit users running on older hardware to provide a snappier end-user experience; reducing time waiting on a heavy workload to finish; or even improved battery life; amongst other improvements."}),"\n",(0,t.jsxs)(i.p,{children:["Part of the problem is, a packager's time is limited. So how, as a distribution, do you choose to try provide faster compatible packages for an end user. A historic approach is to simply change the default compiler flags for ",(0,t.jsx)(i.em,{children:"all"})," packages, such as enabling ",(0,t.jsx)(i.a,{href:"https://en.wikipedia.org/wiki/Interprocedural_optimization",children:"LTO"})," by default. Whilst this approach can work well, at Solus the philosophy is slightly different where a packager can trivially enable several advanced compiler optimization techniques such as ",(0,t.jsx)(i.a,{href:"https://en.wikipedia.org/wiki/Profile-guided_optimization",children:"PGO"})," without too much faffing around on a ",(0,t.jsx)(i.em,{children:"targeted"})," package."]}),"\n",(0,t.jsx)(i.p,{children:"The benefits of such an approach are:"}),"\n",(0,t.jsxs)(i.ul,{children:["\n",(0,t.jsxs)(i.li,{children:["Can target the performance of a specific package to benefit ",(0,t.jsx)(i.em,{children:"all"})," users"]}),"\n",(0,t.jsx)(i.li,{children:"A compiler optimization may improve one package, but may not apply globally to all packages."}),"\n"]}),"\n",(0,t.jsx)(i.p,{children:"The downsides are such:"}),"\n",(0,t.jsxs)(i.ul,{children:["\n",(0,t.jsx)(i.li,{children:"Requires additional packager time to benchmark and experiment with different optimization strategies."}),"\n",(0,t.jsxs)(i.li,{children:["Requires the packager to ",(0,t.jsx)(i.em,{children:"choose"})," and invest time into improving performance of a package."]}),"\n",(0,t.jsx)(i.li,{children:"Requires the packager to find an appropriate benchmark to test the package against."}),"\n",(0,t.jsx)(i.li,{children:"Experimenting with compiler optimizations may not bear fruit: no meaningful improvement in performance, or there may be some other bottleneck."}),"\n"]}),"\n",(0,t.jsx)(i.h1,{id:"optimization-techniques-available",children:"Optimization Techniques Available"}),"\n",(0,t.jsxs)(i.ul,{children:["\n",(0,t.jsxs)(i.li,{children:["speed:","\n",(0,t.jsxs)(i.ul,{children:["\n",(0,t.jsxs)(i.li,{children:["As simple as it gets really, build a package with ",(0,t.jsx)(i.code,{children:"-O3"})," instead of ",(0,t.jsx)(i.code,{children:"-O2"})," as well as any other flags deemed worthy to be included as part of the ",(0,t.jsx)(i.code,{children:"speed"})," flags. The main drawback of this is that ",(0,t.jsx)(i.code,{children:"-O3"})," is not guaranteed to produce faster results than building with ",(0,t.jsx)(i.code,{children:"-O2"})," and typically will produce bigger binaries. The days of ",(0,t.jsx)(i.code,{children:"-O3"})," outright breaking your program in weird unexpected ways is largely behind us."]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(i.li,{children:["LTO:","\n",(0,t.jsxs)(i.ul,{children:["\n",(0,t.jsxs)(i.li,{children:["Compared to some other distributions ",(0,t.jsx)(i.code,{children:"-flto"})," is not yet enabled by default on Solus. LTO is almost guaranteed to provide a %1 or slightly larger performance improvement as well as a smaller binary at the cost of increased compiling times and memory usage during build. When combined with other optimization techniques such as PGO the LTO optimization can really stretch its legs and provide even greater uplift!"]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(i.li,{children:["Clang:","\n",(0,t.jsxs)(i.ul,{children:["\n",(0,t.jsxs)(i.li,{children:["Not strictly an optimization, but, building a package with ",(0,t.jsx)(i.code,{children:"clang"})," instead of ",(0,t.jsx)(i.code,{children:"gcc"})," and ",(0,t.jsx)(i.code,{children:"ld.ldd"})," to link instead of the infamous ",(0,t.jsx)(i.code,{children:"ld.bfd"})," may provide a faster package out of the box. You'll have to be careful of subtle ABI differences if building with ",(0,t.jsx)(i.code,{children:"clang"}),". If in doubt, and, ",(0,t.jsx)(i.code,{children:"clang"})," is the obvious choice, perform safety rebuilds on all reverse dependencies of the package."]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(i.li,{children:["PGO:","\n",(0,t.jsxs)(i.ul,{children:["\n",(0,t.jsx)(i.li,{children:"Profile guided optimization. Build once with instrumentation in order to collect profile data when ran. Run the program using a representative workload in order to collect profiling data. Build the program again with the profiling data provided in order to build an optimized variant."}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(i.li,{children:["BOLT:","\n",(0,t.jsxs)(i.ul,{children:["\n",(0,t.jsxs)(i.li,{children:['Binary optimization and layout tool. You can think of this as "post-link PGO" where you instrument a binary with ',(0,t.jsx)(i.code,{children:"bolt"})," to collect profiling data. Run that binary. Then finally reorganize the binary layout using the collected profile data. This generally works better on large statically linked binaries but smaller binaries or libraries such as found in a typical package can benefit too. This optimization is still quite new."]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(i.p,{children:"Regardless, that's enough word spaghetti, let's look at the process to actually optimize a package."}),"\n",(0,t.jsx)(i.h1,{id:"optimizing-a-package",children:"Optimizing a Package"}),"\n",(0,t.jsxs)(i.p,{children:["Right, to begin with we'll have to start on choosing an actual package to benchmark and optimize. I've heard the ",(0,t.jsx)(i.code,{children:".webp"})," file format is becoming increasingly common on the web, slowly replacing ",(0,t.jsx)(i.code,{children:".png"})," and ",(0,t.jsx)(i.code,{children:".jpg"})," file formats due to the strong backing of Google (for better or for worst). An improvement in decoding time for ",(0,t.jsx)(i.code,{children:".webp"})," files would benefit any user using a web browser casually browsing the web."]}),"\n",(0,t.jsxs)(i.p,{children:["Let's have a look at the ",(0,t.jsx)(i.code,{children:"package.yml"})," build recipe for ",(0,t.jsx)(i.code,{children:"libwebp"}),"."]}),"\n",(0,t.jsx)(i.pre,{children:(0,t.jsx)(i.code,{className:"language-yaml",children:"name : libwebp\nversion : 1.3.2\nrelease : 25\nsource :\n - https://github.com/webmproject/libwebp/archive/refs/tags/v1.3.2.tar.gz : c2c2f521fa468e3c5949ab698c2da410f5dce1c5e99f5ad9e70e0e8446b86505\nhomepage : https://developers.google.com/speed/webp/\nlicense : BSD-3-Clause\ncomponent : multimedia.codecs\nsummary : A new image format for the web\ndescription: |\n WebP is a new image format that provides lossless and lossy compression for images on the web. WebP lossless images are 26% smaller in size compared to PNGs. WebP lossy images are 25-34% smaller in size compared to JPEG images at equivalent SSIM index. WebP supports lossless transparency (also known as alpha channel) with just 22% additional bytes. Transparency is also supported with lossy compression and typically provides 3x smaller file sizes compared to PNG when lossy compression is acceptable for the red/green/blue color channels.\nemul32 : yes\npatterns :\n - devel : /usr/share/man\nbuilddeps :\n - pkgconfig32(glu)\n - pkgconfig32(glut)\n - pkgconfig32(libpng)\n - pkgconfig32(libtiff-4)\n - pkgconfig32(libturbojpeg)\n - pkgconfig32(zlib)\n - giflib-devel\nsetup : |\n %reconfigure --disable-static --enable-everything\nbuild : |\n %make\ninstall : |\n %make_install\n"})}),"\n",(0,t.jsxs)(i.p,{children:["Okay, looks to be a quite simple affair. A simple configure, make, make install as well as ",(0,t.jsx)(i.code,{children:"emul32"})," being enabled specifying the -32bit packages are also provided from this recipe. Next step is to look for a repeatable and easy way to benchmark it. We'll begin by looking at the ",(0,t.jsx)(i.code,{children:"pspec_x86_64.xml"})," file which lists all the files produced from the ",(0,t.jsx)(i.code,{children:"package.yml"})," recipe as well as some metadata."]}),"\n",(0,t.jsx)(i.pre,{children:(0,t.jsx)(i.code,{className:"language-xml",children:' <Name>libwebp</Name>\n <Summary xml:lang="en">A new image format for the web</Summary>\n <Description xml:lang="en">WebP is a new image format that provides lossless and lossy compression for images on the web. WebP lossless images are 26% smaller in size compared to PNGs. WebP lossy images are 25-34% smaller in size compared to JPEG images at equivalent SSIM index. WebP supports lossless transparency (also known as alpha channel) with just 22% additional bytes. Transparency is also supported with lossy compression and typically provides 3x smaller file sizes compared to PNG when lossy compression is acceptable for the red/green/blue color channels.\n</Description>\n <PartOf>multimedia.codecs</PartOf>\n <Files>\n <Path fileType="executable">/usr/bin/cwebp</Path>\n <Path fileType="executable">/usr/bin/dwebp</Path>\n <Path fileType="executable">/usr/bin/gif2webp</Path>\n <Path fileType="executable">/usr/bin/img2webp</Path>\n <Path fileType="executable">/usr/bin/vwebp</Path>\n <Path fileType="executable">/usr/bin/webpinfo</Path>\n <Path fileType="executable">/usr/bin/webpmux</Path>\n'})}),"\n",(0,t.jsxs)(i.p,{children:["Perfect, we have ",(0,t.jsx)(i.code,{children:"dwebp"})," and ",(0,t.jsx)(i.code,{children:"cwebp"})," binaries available in the main package, which from a guess can be used to decode and encode ",(0,t.jsx)(i.code,{children:".webp"})," files. Let's try it out."]}),"\n",(0,t.jsx)(i.pre,{children:(0,t.jsx)(i.code,{children:"$ dwebp -h\nUsage: dwebp in_file [options] [-o out_file]\n\nDecodes the WebP image file to PNG format [Default].\nNote: Animated WebP files are not supported.\n$ cwebp -h\nUsage:\n\n cwebp [options] -q quality input.png -o output.webp\n"})}),"\n",(0,t.jsxs)(i.p,{children:["Awesome, these binaries do exactly what we need to benchmark ",(0,t.jsx)(i.code,{children:"libwebp"}),", but, we are also indirectly testing ",(0,t.jsx)(i.code,{children:"libpng"})," as well for this benchmark, we'll have to keep an eye out for that."]}),"\n",(0,t.jsxs)(i.p,{children:["One extra step we have to do is ensure these binaries are actually linking against their own library, as upstream developers can have a habit of making sure their binaries don't link against their own libraries and end up being self-contained. Run ",(0,t.jsx)(i.code,{children:"ldd"})," to verify."]}),"\n",(0,t.jsx)(i.pre,{children:(0,t.jsx)(i.code,{children:"$ ldd /usr/bin/dwebp\n linux-vdso.so.1 (0x00007ffed8733000)\n libwebpdemux.so.2 => /usr/lib/libwebpdemux.so.2.0.14 (0x00007f7473bb4000)\n libwebp.so.7 => /usr/lib/libwebp.so.7.1.8 (0x00007f7473ae2000)\n libpng16.so.16 => /usr/lib/libpng16.so.16 (0x00007f7473aa6000)\n libc.so.6 => /usr/lib/glibc-hwcaps/x86-64-v3/libc.so.6 (0x00007f74738a9000)\n libsharpyuv.so.0 => /usr/lib/libsharpyuv.so.0.0.1 (0x00007f747389e000)\n libm.so.6 => /usr/lib/glibc-hwcaps/x86-64-v3/libm.so.6 (0x00007f74737b8000)\n libz.so.1 => /usr/lib/libz.so.1.3.0 (0x00007f7473200000)\n /usr/lib64/ld-linux-x86-64.so.2 (0x00007f7473bea000)\n"})}),"\n",(0,t.jsxs)(i.p,{children:["Awesome in this case both ",(0,t.jsx)(i.code,{children:"dwebp"})," and ",(0,t.jsx)(i.code,{children:"cwebp"})," link against ",(0,t.jsx)(i.code,{children:"libwebp.so"})," so we can be confident that any performance improvements will be applicable to all packages in the repository linking against ",(0,t.jsx)(i.code,{children:"libwebp"}),"."]}),"\n",(0,t.jsxs)(i.p,{children:["Let's grab a couple of ",(0,t.jsx)(i.code,{children:".webp"})," files from ",(0,t.jsx)(i.a,{href:"https://developers.google.com/speed/webp/gallery1",children:"here"})," to test with. We'll just use the largest image size available in this case to reduce noise as much as possible when running benchmarks as well as allow any potential optimizations to stretch their legs a little more."]}),"\n",(0,t.jsxs)(i.p,{children:["Now having done the prep work, lets actually benchmark the damn thing using ",(0,t.jsx)(i.code,{children:"hyperfine"})," for the time being."]}),"\n",(0,t.jsx)(i.pre,{children:(0,t.jsx)(i.code,{children:'$ hyperfine "dwebp ~/3.webp -o /dev/null"\nBenchmark 1: dwebp ~/3.webp -o /dev/null\n Time (mean \xb1 \u03C3): 202.2 ms \xb1 0.3 ms [User: 198.9 ms, System: 3.0 ms]\n Range (min \u2026 max): 201.8 ms \u2026 202.7 ms 14 runs\n$ hyperfine "cwebp ~/PNG_Test.png -o /dev/null"\nBenchmark 1: cwebp ~/PNG_Test.png -o /dev/null\n Time (mean \xb1 \u03C3): 1.423 s \xb1 0.009 s [User: 1.346 s, System: 0.076 s]\n Range (min \u2026 max): 1.410 s \u2026 1.435 s 10 runs\n'})}),"\n",(0,t.jsx)(i.p,{children:"There, we have our a basic baseline for encode and decode performance. We mostly care about decode performance here but improved encoding performance would also not go amiss."}),"\n",(0,t.jsx)(i.h2,{id:"lets-start-obvious",children:"Let's Start Obvious"}),"\n",(0,t.jsxs)(i.p,{children:["Let's start basic, enabling the ",(0,t.jsx)(i.code,{children:"speed"})," optimization which basically builds with ",(0,t.jsx)(i.code,{children:"-O3"})," instead of ",(0,t.jsx)(i.code,{children:"-O2"})," as well as any other flags that are deemed to be worthy to be part of the ",(0,t.jsx)(i.code,{children:"speed"})," group. As well as, the ",(0,t.jsx)(i.code,{children:"lto"})," optimization which builds with link time optimization allowing for inter-procedural optimizations to take place."]}),"\n",(0,t.jsx)(i.pre,{children:(0,t.jsx)(i.code,{className:"language-yaml",children:"optimize:\n - speed\n - lto\n"})}),"\n",(0,t.jsx)(i.p,{children:"Moment of truth..."}),"\n",(0,t.jsx)(i.pre,{children:(0,t.jsx)(i.code,{children:'$ hyperfine "dwebp ~/3.webp -o /dev/null"\nBenchmark 1: dwebp ~/3.webp -o /dev/null\n Time (mean \xb1 \u03C3): 200.0 ms \xb1 1.5 ms [User: 197.3 ms, System: 2.5 ms]\n Range (min \u2026 max): 198.1 ms \u2026 203.2 ms 15 runs\n$ hyperfine "cwebp ~/PNG_Test.png -o /dev/null"\nBenchmark 1: cwebp ~/PNG_Test.png -o /dev/null\n Time (mean \xb1 \u03C3): 1.353 s \xb1 0.012 s [User: 1.281 s, System: 0.071 s]\n Range (min \u2026 max): 1.336 s \u2026 1.369 s 10 runs\n'})}),"\n",(0,t.jsx)(i.p,{children:"Well okay, we got a very minor uplift in decoding performance and a slightly higher improvement in encoding performance, but nothing too much to write home about. Luckily we have several more optimizations to explore..."}),"\n",(0,t.jsx)(i.h2,{id:"pgo-is-great-except-when-it-isnt",children:"PGO is great, except, when it isn't."}),"\n",(0,t.jsxs)(i.p,{children:["Next step is to explore PGO (Profile Guided Optimization). For our ",(0,t.jsx)(i.code,{children:"libwebp"})," package, looks like we already hit a bit of a snafu. There's no test suite included in the tarball! That's a bit of a disappointment as a test suite such as ",(0,t.jsx)(i.code,{children:"make check"})," is by far and away the easiest and most comprehensive workload that can be used for profiling as part of PGO, especially for smaller libraries. However, we can still experiment with the just built ",(0,t.jsx)(i.code,{children:"dwebp"})," and ",(0,t.jsx)(i.code,{children:"cwebp"})," binaries as a suitable workload for PGO."]}),"\n",(0,t.jsx)(i.p,{children:"Luckily, as part of the package.yml format all you have to do is provide a profile for automatic PGO. After chrooting into the build environment and fiddling around a bit we end up with:"}),"\n",(0,t.jsx)(i.pre,{children:(0,t.jsx)(i.code,{className:"language-yaml",children:"profile : |\n ./examples/dwebp webp_js/test_webp_js.webp -o test_png.png\n ./examples/cwebp test_png.png -o /dev/null\n"})}),"\n",(0,t.jsx)(i.p,{children:"After specifying that, 6 builds will now be performed instead of 2:"}),"\n",(0,t.jsxs)(i.ul,{children:["\n",(0,t.jsxs)(i.li,{children:["emul32:","\n",(0,t.jsxs)(i.ul,{children:["\n",(0,t.jsx)(i.li,{children:"Instrumented build"}),"\n",(0,t.jsx)(i.li,{children:"Run profiling workload"}),"\n",(0,t.jsx)(i.li,{children:"Optimized build using profiling data"}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(i.li,{children:["x86_64:","\n",(0,t.jsxs)(i.ul,{children:["\n",(0,t.jsx)(i.li,{children:"Instrumented build"}),"\n",(0,t.jsx)(i.li,{children:"Run profiling workload"}),"\n",(0,t.jsx)(i.li,{children:"Optimized build using profiling data"}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(i.p,{children:"For this relatively small package it increases the build time from 1m1.672s to 1m42.199s"}),"\n",(0,t.jsx)(i.p,{children:"The next moment of truth..."}),"\n",(0,t.jsx)(i.pre,{children:(0,t.jsx)(i.code,{children:'$ hyperfine "dwebp ~/3.webp -o /dev/null"\nBenchmark 1: dwebp ~/3.webp -o /dev/null\n Time (mean \xb1 \u03C3): 204.1 ms \xb1 2.2 ms [User: 201.3 ms, System: 2.7 ms]\n Range (min \u2026 max): 201.6 ms \u2026 207.1 ms 14 runs\n$ hyperfine "cwebp ~/PNG_Test.png -o /dev/null"\nBenchmark 1: cwebp ~/PNG_Test.png -o /dev/null\n Time (mean \xb1 \u03C3): 1.349 s \xb1 0.010 s [User: 1.266 s, System: 0.082 s]\n Range (min \u2026 max): 1.335 s \u2026 1.374 s 10 runs\n'})}),"\n",(0,t.jsxs)(i.p,{children:["Well... That's interesting. We actually regress in performance for decode performance whilst gaining another small bump in encoding performance. Worse still, we get a bunch of ",(0,t.jsx)(i.code,{children:"profile count data file not found [-Wmissing-profile]"})," warning messages during the optimized build indicating to us our profiling workload isn't comprehensive enough and doesn't cover enough code paths. The lack of a handy ",(0,t.jsx)(i.code,{children:"make check"})," that could be used as a profiling workload is really hurting us here. For now, let's put a pin in exploring PGO, it isn't a dead end but more work needs to be done curating a more comprehensive workload to chuck at it in this particular case, whilst other, easier, optimization techniques are still available to us."]}),"\n",(0,t.jsx)(i.h2,{id:"256-vector-units-go-brrrrrr",children:"256 Vector Units go brrrrrr..."}),"\n",(0,t.jsxs)(i.p,{children:["The next obvious step is to explore ",(0,t.jsx)(i.code,{children:"glibc"})," hardware capabilities. For those unaware both ",(0,t.jsx)(i.code,{children:"clang"})," and ",(0,t.jsx)(i.code,{children:"gnu"})," compilers provide ",(0,t.jsx)(i.code,{children:"x86_64-v2"}),", ",(0,t.jsx)(i.code,{children:"x86_64-v3"})," and ",(0,t.jsx)(i.code,{children:"x86_64-v4"})," micro-architecture build options on top of the baseline of ",(0,t.jsx)(i.code,{children:"x86_64"}),". These enable the use of targeting additional CPU instruction sets during compilation for better performance. For example, ",(0,t.jsx)(i.code,{children:"-sse4.2"})," for ",(0,t.jsx)(i.code,{children:"x86_64-v2"}),", ",(0,t.jsx)(i.code,{children:"-avx2"})," for ",(0,t.jsx)(i.code,{children:"x86_64-v3"}),", and ",(0,t.jsx)(i.code,{children:"-avx512"})," for ",(0,t.jsx)(i.code,{children:"x86_64-v4"}),"."]}),"\n",(0,t.jsxs)(i.p,{children:["Whilst that's great 'n all, if a program is built with ",(0,t.jsx)(i.code,{children:"x86_64-v3"})," and gains an additional ~10% uplift in performance, it's no good if a ",(0,t.jsx)(i.code,{children:"x86_64-v2"})," compatible cpu can't run it. Luckily the ",(0,t.jsx)(i.code,{children:"glibc"})," loader that's found on almost general purpose linux installs provides a way to load higher or lower micro-architecture libraries if they're installed and supported."]}),"\n",(0,t.jsxs)(i.p,{children:["On top of all that, the ",(0,t.jsx)(i.code,{children:"package.yml"})," format provides an incredibly simple way of providing ",(0,t.jsx)(i.code,{children:"x86_64-v3"})," built libraries by enabling the ",(0,t.jsx)(i.code,{children:"avx2 : yes"})," flag."]}),"\n",(0,t.jsxs)(i.p,{children:["With ",(0,t.jsx)(i.code,{children:"avx2 : yes"})," enabled in the ",(0,t.jsx)(i.code,{children:"libwebp"})," package three builds are performed."]}),"\n",(0,t.jsxs)(i.ul,{children:["\n",(0,t.jsx)(i.li,{children:"emul32"}),"\n",(0,t.jsx)(i.li,{children:"x86_64-v3"}),"\n",(0,t.jsx)(i.li,{children:"x86_64"}),"\n"]}),"\n",(0,t.jsxs)(i.p,{children:["We now see these additional files in the ",(0,t.jsx)(i.code,{children:"pspec_x86_64.xml"})," file"]}),"\n",(0,t.jsx)(i.pre,{children:(0,t.jsx)(i.code,{className:"language-diff",children:'+ <Path fileType="library">/usr/lib64/glibc-hwcaps/x86-64-v3/libsharpyuv.so.0</Path>\n+ <Path fileType="library">/usr/lib64/glibc-hwcaps/x86-64-v3/libsharpyuv.so.0.0.1</Path>\n+ <Path fileType="library">/usr/lib64/glibc-hwcaps/x86-64-v3/libwebp.so.7</Path>\n+ <Path fileType="library">/usr/lib64/glibc-hwcaps/x86-64-v3/libwebp.so.7.1.8</Path>\n+ <Path fileType="library">/usr/lib64/glibc-hwcaps/x86-64-v3/libwebpdecoder.so.3</Path>\n+ <Path fileType="library">/usr/lib64/glibc-hwcaps/x86-64-v3/libwebpdecoder.so.3.1.8</Path>\n+ <Path fileType="library">/usr/lib64/glibc-hwcaps/x86-64-v3/libwebpdemux.so.2</Path>\n+ <Path fileType="library">/usr/lib64/glibc-hwcaps/x86-64-v3/libwebpdemux.so.2.0.14</Path>\n+ <Path fileType="library">/usr/lib64/glibc-hwcaps/x86-64-v3/libwebpmux.so.3</Path>\n+ <Path fileType="library">/usr/lib64/glibc-hwcaps/x86-64-v3/libwebpmux.so.3.0.13</Path>\n'})}),"\n",(0,t.jsxs)(i.p,{children:["Let's rerun ",(0,t.jsx)(i.code,{children:"lld"})," on ",(0,t.jsx)(i.code,{children:"dwebp"})," after installing the new package and..."]}),"\n",(0,t.jsx)(i.pre,{children:(0,t.jsx)(i.code,{children:"$ ldd /usr/bin/dwebp\n linux-vdso.so.1 (0x00007ffeab5b1000)\n libwebpdemux.so.2 => /usr/lib/glibc-hwcaps/x86-64-v3/libwebpdemux.so.2.0.14 (0x00007f9a351d5000)\n libwebp.so.7 => /usr/lib/glibc-hwcaps/x86-64-v3/libwebp.so.7.1.8 (0x00007f9a3510b000)\n libpng16.so.16 => /usr/lib/libpng16.so.16 (0x00007f9a350cf000)\n libc.so.6 => /usr/lib/glibc-hwcaps/x86-64-v3/libc.so.6 (0x00007f9a34ed2000)\n libsharpyuv.so.0 => /usr/lib/glibc-hwcaps/x86-64-v3/libsharpyuv.so.0.0.1 (0x00007f9a34ec1000)\n libm.so.6 => /usr/lib/glibc-hwcaps/x86-64-v3/libm.so.6 (0x00007f9a34ddb000)\n libz.so.1 => /usr/lib/glibc-hwcaps/x86-64-v3/libz.so.1.3 (0x00007f9a34dbb000)\n /usr/lib64/ld-linux-x86-64.so.2 (0x00007f9a3520b000)\n"})}),"\n",(0,t.jsxs)(i.p,{children:["We can crucially see that ",(0,t.jsx)(i.code,{children:"dwebp"})," is now loading the ",(0,t.jsx)(i.code,{children:"x86-64-v3"})," built ",(0,t.jsx)(i.code,{children:"libwebp.so"})," lib from ",(0,t.jsx)(i.code,{children:"/usr/lib/glibc-hwcaps/x86-64-v3/libwebp.so.7.1.8"}),", success! Let's what our performance looks like."]}),"\n",(0,t.jsx)(i.pre,{children:(0,t.jsx)(i.code,{children:'$ hyperfine "dwebp ~/3.webp -o /dev/null"\nBenchmark 1: dwebp ~/3.webp -o /dev/null\n Time (mean \xb1 \u03C3): 198.2 ms \xb1 1.2 ms [User: 195.4 ms, System: 2.5 ms]\n Range (min \u2026 max): 197.0 ms \u2026 200.5 ms 14 runs\n$ hyperfine "cwebp ~/PNG_Test.png -o /dev/null"\nBenchmark 1: cwebp ~/PNG_Test.png -o /dev/null\n Time (mean \xb1 \u03C3): 1.313 s \xb1 0.009 s [User: 1.243 s, System: 0.078 s]\n Range (min \u2026 max): 1.308 s \u2026 1.341 s 10 runs\n'})}),"\n",(0,t.jsx)(i.p,{children:"Let's recap so far:"}),"\n",(0,t.jsxs)(i.table,{children:[(0,t.jsx)(i.thead,{children:(0,t.jsxs)(i.tr,{children:[(0,t.jsx)(i.th,{children:"Optimization"}),(0,t.jsx)(i.th,{children:"Decode"}),(0,t.jsx)(i.th,{children:"Encode"}),(0,t.jsx)(i.th,{children:"Size"})]})}),(0,t.jsxs)(i.tbody,{children:[(0,t.jsxs)(i.tr,{children:[(0,t.jsx)(i.td,{children:"Baseline"}),(0,t.jsx)(i.td,{children:"202.2 ms"}),(0,t.jsx)(i.td,{children:"1.399 s"}),(0,t.jsx)(i.td,{children:"1.33 MB"})]}),(0,t.jsxs)(i.tr,{children:[(0,t.jsx)(i.td,{children:"Speed + LTO"}),(0,t.jsx)(i.td,{children:"200.0 ms"}),(0,t.jsx)(i.td,{children:"1.353 s"}),(0,t.jsx)(i.td,{children:"1.73 MB"})]}),(0,t.jsxs)(i.tr,{children:[(0,t.jsx)(i.td,{children:"Speed + LTO + PGO"}),(0,t.jsxs)(i.td,{children:["204.1 ms ","\u26A0\uFE0F"]}),(0,t.jsx)(i.td,{children:"1.349 s"}),(0,t.jsx)(i.td,{children:"1.07 MB"})]}),(0,t.jsxs)(i.tr,{children:[(0,t.jsx)(i.td,{children:"Speed + LTO + x86_64-v3"}),(0,t.jsx)(i.td,{children:"198.2 ms"}),(0,t.jsx)(i.td,{children:"1.313 s"}),(0,t.jsx)(i.td,{children:"3.17 MB"})]})]})]}),"\n",(0,t.jsxs)(i.p,{children:["Whilst we're still getting an additional speedup it isn't really anything to write home about. A measly ~2% improvement in decoding performance and a fairly respectable ~7% improvement in encoding performance for our test case. However, increasing the package size by an extra ~2MiB from providing a bunch of extra libs in ",(0,t.jsx)(i.code,{children:"/usr/lib/glibc-hwcaps/x86-64-v3/"})," just ain't worth it. This hints that either the compiler optimizations aren't really effective here or we're being bottle-necked by something else."]}),"\n",(0,t.jsxs)(i.p,{children:["So far, we've been benchmarking fairly simply using ",(0,t.jsx)(i.code,{children:"hyperfine"}),", let's swap that out for ",(0,t.jsx)(i.code,{children:"perf"})," so we can get a callgraph."]}),"\n",(0,t.jsxs)(i.h2,{id:"something-about-perf-to-the-rescue",children:["Something about ",(0,t.jsx)(i.code,{children:"perf"})," to the rescue"]}),"\n",(0,t.jsx)(i.p,{children:(0,t.jsx)(i.code,{children:"perf record -o dwebp.data -- dwebp ~/3.webp -o /dev/null"})}),"\n",(0,t.jsx)(i.p,{children:(0,t.jsx)(i.code,{children:"perf record -o cwebp.data -- cwebp ~/PNG_Test.png -o /dev/null"})}),"\n",(0,t.jsxs)(i.p,{children:["Let's look at ",(0,t.jsx)(i.code,{children:"dwebp"})," first with ",(0,t.jsx)(i.code,{children:"perf report -i dwebp.data"}),"."]}),"\n",(0,t.jsx)(i.p,{children:(0,t.jsx)(i.img,{alt:"Perf report dwebp",src:n(56495).Z+"",width:"1254",height:"676"})}),"\n",(0,t.jsxs)(i.p,{children:["Well god damn, literally all of our time is being spent in ",(0,t.jsx)(i.code,{children:"libz.so"})," it's no wonder our compiler optimizations were hardly improving performance."]}),"\n",(0,t.jsxs)(i.p,{children:["Let's also look at the ",(0,t.jsx)(i.code,{children:"cwebp"})," report, we've generally been getting better results from it."]}),"\n",(0,t.jsx)(i.p,{children:(0,t.jsx)(i.img,{alt:"Perf report cwebp",src:n(53065).Z+"",width:"1254",height:"676"})}),"\n",(0,t.jsxs)(i.p,{children:["Okay, much more of our time is being spent in ",(0,t.jsx)(i.code,{children:"libwebp.so"})," itself here which helps to explain why we were seeing a better performance uplift. Still 5.68% of our time is being spent in ",(0,t.jsx)(i.code,{children:"libz"}),"."]}),"\n",(0,t.jsx)(i.h2,{id:"choosing-wisely",children:"Choosing Wisely"}),"\n",(0,t.jsxs)(i.p,{children:["You may remember early on, when I said we are also indirectly testing ",(0,t.jsx)(i.code,{children:"libpng"}),". Well... after some more digging, that's exactly what's happening here. Re-running the ",(0,t.jsx)(i.code,{children:"dwebp"})," binary it says this"]}),"\n",(0,t.jsxs)(i.blockquote,{children:["\n",(0,t.jsx)(i.p,{children:"Decodes the WebP image file to PNG format"}),"\n"]}),"\n",(0,t.jsxs)(i.p,{children:["Turns out, it's more accurate to say we are ",(0,t.jsx)(i.em,{children:"directly"})," testing ",(0,t.jsx)(i.code,{children:"libpng"})," and by extension ",(0,t.jsx)(i.code,{children:"zlib"}),". It isn't ",(0,t.jsx)(i.code,{children:"libwebp"})," that's spending all of its time in ",(0,t.jsx)(i.code,{children:"libz.so"}),", it's ",(0,t.jsx)(i.code,{children:"libpng"}),"! This is exactly the reason you have to be careful about the benchmarks chosen and, ensure you understand what they're doing."]}),"\n",(0,t.jsx)(i.p,{children:"However, the good news about this little snafu is:"}),"\n",(0,t.jsxs)(i.ol,{children:["\n",(0,t.jsxs)(i.li,{children:[(0,t.jsx)(i.code,{children:"dwebp"})," can be used to translate to another image format such as ",(0,t.jsx)(i.code,{children:".yuv"})," that'll more accurately remove the bottleneck from ",(0,t.jsx)(i.code,{children:"libz.so"}),"."]}),"\n",(0,t.jsxs)(i.li,{children:["We now know that ",(0,t.jsx)(i.code,{children:"libpng"})," has a huge bottleneck in ",(0,t.jsx)(i.code,{children:"libz.so"})," and speeding up ",(0,t.jsx)(i.code,{children:"zlib"})," ",(0,t.jsx)(i.em,{children:"should"})," dramatically speed up ",(0,t.jsx)(i.code,{children:"libpng"})," performance."]}),"\n"]}),"\n",(0,t.jsx)(i.h2,{id:"adjusting-the-benchmark",children:"Adjusting the Benchmark"}),"\n",(0,t.jsxs)(i.p,{children:["After reverting the ",(0,t.jsx)(i.code,{children:"libwebp"})," package to the baseline let's use our adjusted decoding benchmark."]}),"\n",(0,t.jsxs)(i.p,{children:["We'll now use ",(0,t.jsx)(i.code,{children:"dwebp ~/3.webp -yuv -o /dev/null"})," for a decoding test, let's run that with ",(0,t.jsx)(i.code,{children:"perf"})," to ensure we're exclusively testing ",(0,t.jsx)(i.code,{children:"libwebp.so"})," here."]}),"\n",(0,t.jsx)(i.p,{children:(0,t.jsx)(i.img,{alt:"Perf report dwebp to yuv",src:n(48283).Z+"",width:"1254",height:"676"})}),"\n",(0,t.jsxs)(i.p,{children:["Okay that's awesome, no ",(0,t.jsx)(i.code,{children:"libpng.so"})," or ",(0,t.jsx)(i.code,{children:"libz.so"})," to mess with our tests!"]}),"\n",(0,t.jsx)(i.p,{children:"Let's reapply our optimizations, keeping those which apply an uplift"}),"\n",(0,t.jsxs)(i.table,{children:[(0,t.jsx)(i.thead,{children:(0,t.jsxs)(i.tr,{children:[(0,t.jsx)(i.th,{children:"Optimization"}),(0,t.jsx)(i.th,{children:"Decode"}),(0,t.jsx)(i.th,{children:"Size"})]})}),(0,t.jsxs)(i.tbody,{children:[(0,t.jsxs)(i.tr,{children:[(0,t.jsx)(i.td,{children:"Baseline"}),(0,t.jsx)(i.td,{children:"14.7 ms"}),(0,t.jsx)(i.td,{children:"1.33 MB"})]}),(0,t.jsxs)(i.tr,{children:[(0,t.jsx)(i.td,{children:"Speed"}),(0,t.jsx)(i.td,{children:"14.5 ms"}),(0,t.jsx)(i.td,{children:"1.56 MB"})]}),(0,t.jsxs)(i.tr,{children:[(0,t.jsx)(i.td,{children:"LTO"}),(0,t.jsx)(i.td,{children:"14.6 ms"}),(0,t.jsx)(i.td,{children:"1.40 MB"})]}),(0,t.jsxs)(i.tr,{children:[(0,t.jsx)(i.td,{children:"PGO"}),(0,t.jsxs)(i.td,{children:["18.0 ms ","\u26A0\uFE0F"]}),(0,t.jsx)(i.td,{children:"1.07 MB"})]}),(0,t.jsxs)(i.tr,{children:[(0,t.jsx)(i.td,{children:"x86-64-v3"}),(0,t.jsx)(i.td,{children:"12.7 ms"}),(0,t.jsx)(i.td,{children:"2.35 MB"})]}),(0,t.jsxs)(i.tr,{children:[(0,t.jsx)(i.td,{children:"Speed + LTO + x86-64-v3"}),(0,t.jsx)(i.td,{children:"12.3 ms"}),(0,t.jsx)(i.td,{children:"3.17 MB"})]})]})]}),"\n",(0,t.jsx)(i.p,{children:"Okay, this is great, whilst we aren't getting much from speed or LTO, we are getting a big uplift from x86-64-v3 libraries and when combined with the other optimizations we're getting an uplift in performance of around ~16% at the cost of close to thrice the installed package size."}),"\n",(0,t.jsx)(i.h3,{id:"partial-profiling",children:"Partial Profiling"}),"\n",(0,t.jsxs)(i.p,{children:["Once again we see that PGO regresses performance hard, however, that smaller size is giving a good hint! We already know that the profiling workload we gave it isn't very comprehensive due to the bunch of ",(0,t.jsx)(i.code,{children:"-Wmissing-profile"})," warnings we get during the optimized build. By default, PGO will aggressively inline and apply additional optimizations to code that's part of the profiling workload while everything else will be optimized for size. The idea being, hot-path code is fast and code that doesn't matter is small. However, what happens when you can't craft a comprehensive workload, as seems to be the case here? Luckily GCC has a flag for exactly that ",(0,t.jsx)(i.code,{children:"-fprofile-partial-training"}),". GCC docs state that:"]}),"\n",(0,t.jsxs)(i.blockquote,{children:["\n",(0,t.jsx)(i.p,{children:"In some cases it is not practical to train all possible hot paths in the program. (For example, program may contain functions specific for a given hardware and training may not cover all hardware configurations program is run on.) With -fprofile-partial-training profile feedback will be ignored for all functions not executed during the train run leading them to be optimized as if they were compiled without profile feedback. This leads to better performance when train run is not representative but also leads to significantly bigger code."}),"\n"]}),"\n",(0,t.jsxs)(i.p,{children:["Okay, let's try it out, all we need to do is specify in our ",(0,t.jsx)(i.code,{children:"package.yml"})," recipe."]}),"\n",(0,t.jsx)(i.pre,{children:(0,t.jsx)(i.code,{className:"language-yaml",children:'environment: |\n if [[ -n ${PGO_USE_BUILD} ]]; then\n export CFLAGS="${CFLAGS} -fprofile-partial-training"\n export CXXFLAGS="${CXXFLAGS} -fprofile-partial-training"\n fi\n'})}),"\n",(0,t.jsx)(i.p,{children:"And the results:"}),"\n",(0,t.jsxs)(i.table,{children:[(0,t.jsx)(i.thead,{children:(0,t.jsxs)(i.tr,{children:[(0,t.jsx)(i.th,{children:"Optimization"}),(0,t.jsx)(i.th,{children:"Decode"}),(0,t.jsx)(i.th,{children:"Size"})]})}),(0,t.jsxs)(i.tbody,{children:[(0,t.jsxs)(i.tr,{children:[(0,t.jsx)(i.td,{children:"Speed + LTO + x86-64-v3"}),(0,t.jsx)(i.td,{children:"12.3 ms"}),(0,t.jsx)(i.td,{children:"3.17 MB"})]}),(0,t.jsxs)(i.tr,{children:[(0,t.jsx)(i.td,{children:"Speed + LTO + x86-64-v3 + Partial PGO"}),(0,t.jsx)(i.td,{children:"12.5 ms"}),(0,t.jsx)(i.td,{children:"3.13 MB"})]})]})]}),"\n",(0,t.jsx)(i.p,{children:"Well, it was worth a try. This highlights how useless PGO can be when you don't or can't provide it a good workload. Interestingly, we don't get the size bloat that was promised, in fact, the opposite."}),"\n",(0,t.jsx)(i.h1,{id:"final-libwebp-results",children:"Final libwebp Results"}),"\n",(0,t.jsxs)(i.table,{children:[(0,t.jsx)(i.thead,{children:(0,t.jsxs)(i.tr,{children:[(0,t.jsx)(i.th,{children:"Benchmark"}),(0,t.jsx)(i.th,{children:"Time Before"}),(0,t.jsx)(i.th,{children:"Time After"}),(0,t.jsx)(i.th,{children:"Size Before"}),(0,t.jsx)(i.th,{children:"Size After"})]})}),(0,t.jsxs)(i.tbody,{children:[(0,t.jsxs)(i.tr,{children:[(0,t.jsx)(i.td,{children:'"dwebp ~/3.webp -yuv -o /dev/null"'}),(0,t.jsx)(i.td,{children:"14.5 ms"}),(0,t.jsx)(i.td,{children:"12.3 ms"}),(0,t.jsx)(i.td,{children:"1.33 MB"}),(0,t.jsx)(i.td,{children:"3.17 MB"})]}),(0,t.jsxs)(i.tr,{children:[(0,t.jsx)(i.td,{children:'"cwebp ~/PNG_Test.png -o /dev/null"'}),(0,t.jsx)(i.td,{children:"1.399 s"}),(0,t.jsx)(i.td,{children:"1.313 s"}),(0,t.jsx)(i.td,{children:"--"}),(0,t.jsx)(i.td,{children:"--"})]})]})]}),"\n",(0,t.jsx)(i.p,{children:"In the end, we get a very healthy ~16% improvement in decoding from a .webp to .yuv file. As well as a respectable 6% improvement in encoding from a .png to .webp file. However, the increased package size is very unfortunate. It's possible to tweak the x86-64-v3 build and only ship the libs that actually improve performance in order to get the installed size back to an acceptable level."}),"\n",(0,t.jsx)(i.h1,{id:"next-generation-side-quest",children:'"Next-Generation" Side Quest'}),"\n",(0,t.jsxs)(i.p,{children:["Now, you probably remember earlier due to our unrepresentative benchmark we found out that ",(0,t.jsx)(i.code,{children:"libpng"})," is getting highly bottlenecked by ",(0,t.jsx)(i.code,{children:"libz.so"}),". This now seems like a perfect opportunity to take a look at zlib and circle-back to our original benchmark that we were using."]}),"\n",(0,t.jsxs)(i.p,{children:["Zlib is widely employed throughout the ecosystem and, as such you'd think it would be highly-optimized for performance. However, that isn't really the case. Zlib is written in an old-fashioned way of C and tries to be ",(0,t.jsx)(i.em,{children:"extremely"})," portable; supporting dozens of systems that have fallen out of common use. As such, it's hard to apply architecture specific optimizations that wouldn't break some old system or without introducing code spaghetti. There have been a couple of attempts to merge AArch64 and x86_64 optimizations into the canonical zlib library without success."]}),"\n",(0,t.jsxs)(i.p,{children:["However, there is some light in this tunnel as various forks of zlib having been popping up, applying new optimizations on top of zlib. The most promising of these looks be to ",(0,t.jsx)(i.a,{href:"https://github.com/zlib-ng/zlib-ng/",children:"zlib-ng"}),". When built in compatible mode, it promises to be API compatible with canonical zlib and ",(0,t.jsx)(i.em,{children:"tries"})," to be as ABI compatible as possible."]}),"\n",(0,t.jsxs)(i.p,{children:["Let's just go for it, replacing Solus' ",(0,t.jsx)(i.code,{children:"zlib"})," package with zlib-ng built in compatible mode. It's a bit scary due to how integral zlib is in a typical Linux install, but, how hard could it be?"]}),"\n",(0,t.jsx)(i.h2,{id:"i-zee-a-purty-lil-package",children:"I Zee a Purty lil' Package"}),"\n",(0,t.jsxs)(i.p,{children:["Well that was simple. Here's what our zlib-ng ",(0,t.jsx)(i.code,{children:"package.yml"})," recipe looks like."]}),"\n",(0,t.jsx)(i.pre,{children:(0,t.jsx)(i.code,{className:"language-yaml",children:"name : zlib\nversion : 2.1.5\nrelease : 28\nsource :\n - https://github.com/zlib-ng/zlib-ng/archive/refs/tags/2.1.5.tar.gz : 3f6576971397b379d4205ae5451ff5a68edf6c103b2f03c4188ed7075fbb5f04\nhomepage : https://github.com/zlib-ng/zlib-ng\nlicense : ZLIB\ncomponent : system.base\nsummary : zlib replacement with optimizations for next generation systems.\ndescription:\n - A zlib data compression library for the next generation systems. ABI/API compatible mode.\ndevel : yes\nemul32 : yes\nsetup : |\n %cmake_ninja \\\n -DZLIB_COMPAT=ON \\\n -DWITH_GTEST=OFF \\\n -DBUILD_SHARED_LIBS=ON \\\n -DINSTALL_LIB_DIR=%libdir%\nbuild : |\n %ninja_build\ninstall : |\n %ninja_install\ncheck : |\n %ninja_check\n"})}),"\n",(0,t.jsxs)(i.p,{children:["After building it, all the files seem to be in the right place and the test suite is passing. Let's just install it overwriting our canonical ",(0,t.jsx)(i.code,{children:"zlib"})," package and hope our system doesn't die... I think the word is YOLO."]}),"\n",(0,t.jsx)(i.pre,{children:(0,t.jsx)(i.code,{children:'$ hyperfine "dwebp ~/3.webp -o /dev/null"\nBenchmark 1: dwebp ~/3.webp -o /dev/null\n Time (mean \xb1 \u03C3): 198.6 ms \xb1 2.3 ms [User: 194.3 ms, System: 3.6 ms]\n Range (min \u2026 max): 196.3 ms \u2026 203.3 ms 14 runs\n$ sudo eopkg it zlib-2.1.5-28-1-x86_64.eopkg\n...\n$ $ hyperfine "dwebp ~/3.webp -o /dev/null"\nBenchmark 1: dwebp ~/3.webp -o /dev/null\n Time (mean \xb1 \u03C3): 87.6 ms \xb1 0.7 ms [User: 84.7 ms, System: 2.6 ms]\n Range (min \u2026 max): 86.5 ms \u2026 88.7 ms 33 runs\n'})}),"\n",(0,t.jsx)(i.p,{children:"Well, hot diggity damn. Swapping out the zlib package for a more performant variant has instantly more than halved(!!) our decoding time."}),"\n",(0,t.jsxs)(i.p,{children:["We need to find a more contained ",(0,t.jsx)(i.code,{children:"libpng"})," benchmark here that removes the ",(0,t.jsx)(i.code,{children:"libwebp"})," stuff to really confirm the findings here. After some sleuthing the ",(0,t.jsx)(i.code,{children:"libpng"})," source repository has a ",(0,t.jsx)(i.a,{href:"https://github.com/glennrp/libpng/blob/libpng16/contrib/examples/pngtopng.c",children:"pngtopng.c"})," file we can compile to use the system libpng library."]}),"\n",(0,t.jsxs)(i.p,{children:["Changing the header from ",(0,t.jsx)(i.code,{children:'#include "../../png.h"'})," to ",(0,t.jsx)(i.code,{children:"#include <png.h>"})," then running ",(0,t.jsx)(i.code,{children:"gcc -Ofast pngtopng.c -lpng16 -o pngtopng"})," to compile it, we have a libpng benchmark. We can reuse our test .png file from earlier. Ending up with: ",(0,t.jsx)(i.code,{children:"./pngtopng ~/PNG_Test.png /dev/null"})," for our benchmark."]}),"\n",(0,t.jsxs)(i.table,{children:[(0,t.jsx)(i.thead,{children:(0,t.jsxs)(i.tr,{children:[(0,t.jsx)(i.th,{children:"Library"}),(0,t.jsx)(i.th,{children:"Time"})]})}),(0,t.jsxs)(i.tbody,{children:[(0,t.jsxs)(i.tr,{children:[(0,t.jsx)(i.td,{children:"zlib (canonical)"}),(0,t.jsx)(i.td,{children:"1.464 s"})]}),(0,t.jsxs)(i.tr,{children:[(0,t.jsx)(i.td,{children:"zlib-ng (compat)"}),(0,t.jsx)(i.td,{children:"896.6 ms"})]})]})]}),"\n",(0,t.jsxs)(i.p,{children:["Well. This is pretty much inline with our flawed ",(0,t.jsx)(i.code,{children:"dwebp"})," benchmark from earlier. Swapping out zlib almost halves ",(0,t.jsx)(i.code,{children:"libpng"})," decoding time."]}),"\n",(0,t.jsx)(i.h2,{id:"squeezing-more-from-zlib-ng",children:"Squeezing more from zlib-ng"}),"\n",(0,t.jsxs)(i.p,{children:["However, we're not done yet. We still have our compiler optimizations available to us to squeeze more performance from ",(0,t.jsx)(i.code,{children:"zlib-ng"}),"."]}),"\n",(0,t.jsxs)(i.table,{children:[(0,t.jsx)(i.thead,{children:(0,t.jsxs)(i.tr,{children:[(0,t.jsx)(i.th,{children:"Optimization"}),(0,t.jsx)(i.th,{children:"Decode"}),(0,t.jsx)(i.th,{children:"Size"})]})}),(0,t.jsxs)(i.tbody,{children:[(0,t.jsxs)(i.tr,{children:[(0,t.jsx)(i.td,{children:"Baseline"}),(0,t.jsx)(i.td,{children:"896.6 ms"}),(0,t.jsx)(i.td,{children:"141.00 KB"})]}),(0,t.jsxs)(i.tr,{children:[(0,t.jsx)(i.td,{children:"Speed"}),(0,t.jsx)(i.td,{children:"883.6 ms"}),(0,t.jsx)(i.td,{children:"182.00 KB"})]}),(0,t.jsxs)(i.tr,{children:[(0,t.jsx)(i.td,{children:"LTO"}),(0,t.jsx)(i.td,{children:"892.7 ms"}),(0,t.jsx)(i.td,{children:"133.00 KB"})]}),(0,t.jsxs)(i.tr,{children:[(0,t.jsx)(i.td,{children:"PGO"}),(0,t.jsx)(i.td,{children:"894.6 ms"}),(0,t.jsx)(i.td,{children:"141.00 KB"})]}),(0,t.jsxs)(i.tr,{children:[(0,t.jsx)(i.td,{children:"x86-64-v3"}),(0,t.jsx)(i.td,{children:"892.5 ms"}),(0,t.jsx)(i.td,{children:"295.00 KB"})]}),(0,t.jsxs)(i.tr,{children:[(0,t.jsx)(i.td,{children:"Speed + LTO"}),(0,t.jsx)(i.td,{children:"882.6 ms"}),(0,t.jsx)(i.td,{children:"170.00 KB"})]}),(0,t.jsxs)(i.tr,{children:[(0,t.jsx)(i.td,{children:"Speed + LTO + PGO + x86-64-v3"}),(0,t.jsx)(i.td,{children:"882.5 ms"}),(0,t.jsx)(i.td,{children:"250.00 KB"})]})]})]}),"\n",(0,t.jsx)(i.p,{children:"It looks like in this case the simple speed + LTO optimizations is the way to go. Speed gives the majority of the speedup but LTO helps bring back down the package size again. However, it's only a 1.5% improvement from baseline for this benchmark. We can always re-benchmark it later, testing zlib performance more directly instead of via libpng. It shows how good a job the zlib-ng developers have done that it's so performant right out of the gate."}),"\n",(0,t.jsx)(i.h1,{id:"final-words",children:"Final Words"}),"\n",(0,t.jsx)(i.p,{children:"We've shown the process of how a package can be optimized in Solus, through the failings and wins here I hope some good tips and tricks were provided in avoiding common pitfalls. Additional benchmarking strategies such as BOLT or Polly optimizations were not discussed and it'll be good material for a future blog post."}),"\n",(0,t.jsx)(i.p,{children:"Some other important things such as tweaking the system for benchmarking in order to get representative and consistent results were also not discussed. This is especially important in power budget constrained systems such as laptops and worth bearing in mind."}),"\n",(0,t.jsxs)(i.p,{children:["Regardless, I hope the story of how ",(0,t.jsx)(i.code,{children:"libwebp"})," was optimized for was entertaining and some things were learnt for anyone looking to optimize packages in Solus for the future."]})]})}function h(e={}){let{wrapper:i}={...(0,l.a)(),...e.components};return i?(0,t.jsx)(i,{...e,children:(0,t.jsx)(c,{...e})}):c(e)}},53065:function(e,i,n){n.d(i,{Z:function(){return s}});let s=n.p+"assets/images/perf_report_cwebp_png-baafb78e8e4527d10a5a1ded232c2bde.webp"},56495:function(e,i,n){n.d(i,{Z:function(){return s}});let s=n.p+"assets/images/perf_report_dwebp_png-c0f9529294b3efe6743a980866abdf15.webp"},48283:function(e,i,n){n.d(i,{Z:function(){return s}});let s=n.p+"assets/images/perf_report_dwebp_yuv-36ad3f6052746d5ea55acce6cbe72b6f.webp"},50065:function(e,i,n){n.d(i,{Z:function(){return a},a:function(){return r}});var s=n(67294);let t={},l=s.createContext(t);function r(e){let i=s.useContext(l);return s.useMemo(function(){return"function"==typeof e?e(i):{...i,...e}},[i,e])}function a(e){let i;return i=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:r(e.components),s.createElement(l.Provider,{value:i},e.children)}},56021:function(e){e.exports=JSON.parse('{"permalink":"/blog/solus-optimizing-packages","source":"@site/devlog/2024-02-09-Intro-to-optimizing-packages-on-solus.md","title":"Intro to Optimizing Packages on Solus","description":"Explore how to employ advanced compiler techniques such as PGO, BOLT & Glibc HWCaps to squeeze extra performance from packages using libwebp as a test vehicle","date":"2024-02-09T00:00:00.000Z","tags":[{"inline":true,"label":"pgo","permalink":"/blog/tags/pgo"},{"inline":true,"label":"lto","permalink":"/blog/tags/lto"},{"inline":true,"label":"solus","permalink":"/blog/tags/solus"},{"inline":true,"label":"packaging","permalink":"/blog/tags/packaging"},{"inline":true,"label":"optimization","permalink":"/blog/tags/optimization"},{"inline":true,"label":"3","permalink":"/blog/tags/3"},{"inline":true,"label":"clang","permalink":"/blog/tags/clang"},{"inline":true,"label":"gnu","permalink":"/blog/tags/gnu"},{"inline":true,"label":"llvm","permalink":"/blog/tags/llvm"},{"inline":true,"label":"glibc","permalink":"/blog/tags/glibc"},{"inline":true,"label":"hwcaps","permalink":"/blog/tags/hwcaps"},{"inline":true,"label":"x86_64-v3","permalink":"/blog/tags/x-86-64-v-3"}],"readingTime":22.32,"hasTruncateMarker":true,"authors":[{"name":"Joey Riches","title":"Solus Staff","page":{"permalink":"/blog/authors/joey"},"socials":{"github":"https://github.com/joebonrichie"},"imageURL":"https://avatars.githubusercontent.com/u/5338090","key":"joey"}],"frontMatter":{"title":"Intro to Optimizing Packages on Solus","description":"Explore how to employ advanced compiler techniques such as PGO, BOLT & Glibc HWCaps to squeeze extra performance from packages using libwebp as a test vehicle","slug":"solus-optimizing-packages","authors":"joey","tags":["pgo","lto","solus","packaging","optimization","3","clang","gnu","llvm","glibc","hwcaps","x86_64-v3"],"hide_table_of_contents":false},"unlisted":false,"prevItem":{"title":"Clean, clean, clean!","permalink":"/blog/clean-clean-clean"},"nextItem":{"title":"Don\'t call me MATE, pal!","permalink":"/blog/don\'t-call-me-mate-pal"}}')}}]); \ No newline at end of file diff --git a/assets/js/72054e31.855d44cc.js b/assets/js/72054e31.855d44cc.js deleted file mode 100644 index e9c58be36..000000000 --- a/assets/js/72054e31.855d44cc.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[7135],{83888:(e,i,n)=>{n.r(i),n.d(i,{assets:()=>o,contentTitle:()=>r,default:()=>h,frontMatter:()=>l,metadata:()=>a,toc:()=>d});var s=n(85893),t=n(11151);const l={title:"Intro to Optimizing Packages on Solus",description:"Explore how to employ advanced compiler techniques such as PGO, BOLT & Glibc HWCaps to squeeze extra performance from packages using libwebp as a test vehicle",slug:"solus-optimizing-packages",authors:"joey",tags:["pgo","lto","solus","packaging","optimization",3,"clang","gnu","llvm","glibc","hwcaps","x86_64-v3"],hide_table_of_contents:!1},r="Cual es la causa",a={permalink:"/blog/solus-optimizing-packages",source:"@site/devlog/2024-02-09-Intro-to-optimizing-packages-on-solus.md",title:"Intro to Optimizing Packages on Solus",description:"Explore how to employ advanced compiler techniques such as PGO, BOLT & Glibc HWCaps to squeeze extra performance from packages using libwebp as a test vehicle",date:"2024-02-09T00:00:00.000Z",tags:[{inline:!0,label:"pgo",permalink:"/blog/tags/pgo"},{inline:!0,label:"lto",permalink:"/blog/tags/lto"},{inline:!0,label:"solus",permalink:"/blog/tags/solus"},{inline:!0,label:"packaging",permalink:"/blog/tags/packaging"},{inline:!0,label:"optimization",permalink:"/blog/tags/optimization"},{inline:!0,label:"3",permalink:"/blog/tags/3"},{inline:!0,label:"clang",permalink:"/blog/tags/clang"},{inline:!0,label:"gnu",permalink:"/blog/tags/gnu"},{inline:!0,label:"llvm",permalink:"/blog/tags/llvm"},{inline:!0,label:"glibc",permalink:"/blog/tags/glibc"},{inline:!0,label:"hwcaps",permalink:"/blog/tags/hwcaps"},{inline:!0,label:"x86_64-v3",permalink:"/blog/tags/x-86-64-v-3"}],readingTime:22.32,hasTruncateMarker:!0,authors:[{name:"Joey Riches",title:"Solus Staff",page:{permalink:"/blog/authors/joey"},socials:{github:"https://github.com/joebonrichie"},imageURL:"https://avatars.githubusercontent.com/u/5338090",key:"joey"}],frontMatter:{title:"Intro to Optimizing Packages on Solus",description:"Explore how to employ advanced compiler techniques such as PGO, BOLT & Glibc HWCaps to squeeze extra performance from packages using libwebp as a test vehicle",slug:"solus-optimizing-packages",authors:"joey",tags:["pgo","lto","solus","packaging","optimization","3","clang","gnu","llvm","glibc","hwcaps","x86_64-v3"],hide_table_of_contents:!1},unlisted:!1,prevItem:{title:"Clean, clean, clean!",permalink:"/blog/clean-clean-clean"},nextItem:{title:"Don't call me MATE, pal!",permalink:"/blog/don't-call-me-mate-pal"}},o={authorsImageUrls:[void 0]},d=[{value:"Let's Start Obvious",id:"lets-start-obvious",level:2},{value:"PGO is great, except, when it isn't.",id:"pgo-is-great-except-when-it-isnt",level:2},{value:"256 Vector Units go brrrrrr...",id:"256-vector-units-go-brrrrrr",level:2},{value:"Something about <code>perf</code> to the rescue",id:"something-about-perf-to-the-rescue",level:2},{value:"Choosing Wisely",id:"choosing-wisely",level:2},{value:"Adjusting the Benchmark",id:"adjusting-the-benchmark",level:2},{value:"Partial Profiling",id:"partial-profiling",level:3},{value:"I Zee a Purty lil' Package",id:"i-zee-a-purty-lil-package",level:2},{value:"Squeezing more from zlib-ng",id:"squeezing-more-from-zlib-ng",level:2}];function c(e){const i={a:"a",blockquote:"blockquote",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",img:"img",li:"li",ol:"ol",p:"p",pre:"pre",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,t.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsxs)(i.p,{children:["We'll explore how to build packages with advanced compiler techniques in order to squeeze more performance out of the box for packages in Solus. We'll be using the story of how ",(0,s.jsx)(i.code,{children:"libwebp"})," was optimized for and how it led to an unexpected side quest."]}),"\n",(0,s.jsx)(i.p,{children:"Linux distributions have a lot of control over how a source-based package gets compiled and shipped to users as part of a binary repository. Aggressive and advanced compiler optimization techniques, as well as other methods can be used to provide greater out of the box performance for end users. This can greatly benefit users running on older hardware to provide a snappier end-user experience; reducing time waiting on a heavy workload to finish; or even improved battery life; amongst other improvements."}),"\n",(0,s.jsxs)(i.p,{children:["Part of the problem is, a packager's time is limited. So how, as a distribution, do you choose to try provide faster compatible packages for an end user. A historic approach is to simply change the default compiler flags for ",(0,s.jsx)(i.em,{children:"all"})," packages, such as enabling ",(0,s.jsx)(i.a,{href:"https://en.wikipedia.org/wiki/Interprocedural_optimization",children:"LTO"})," by default. Whilst this approach can work well, at Solus the philosophy is slightly different where a packager can trivially enable several advanced compiler optimization techniques such as ",(0,s.jsx)(i.a,{href:"https://en.wikipedia.org/wiki/Profile-guided_optimization",children:"PGO"})," without too much faffing around on a ",(0,s.jsx)(i.em,{children:"targeted"})," package."]}),"\n",(0,s.jsx)(i.p,{children:"The benefits of such an approach are:"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:["Can target the performance of a specific package to benefit ",(0,s.jsx)(i.em,{children:"all"})," users"]}),"\n",(0,s.jsx)(i.li,{children:"A compiler optimization may improve one package, but may not apply globally to all packages."}),"\n"]}),"\n",(0,s.jsx)(i.p,{children:"The downsides are such:"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsx)(i.li,{children:"Requires additional packager time to benchmark and experiment with different optimization strategies."}),"\n",(0,s.jsxs)(i.li,{children:["Requires the packager to ",(0,s.jsx)(i.em,{children:"choose"})," and invest time into improving performance of a package."]}),"\n",(0,s.jsx)(i.li,{children:"Requires the packager to find an appropriate benchmark to test the package against."}),"\n",(0,s.jsx)(i.li,{children:"Experimenting with compiler optimizations may not bear fruit: no meaningful improvement in performance, or there may be some other bottleneck."}),"\n"]}),"\n",(0,s.jsx)(i.h1,{id:"optimization-techniques-available",children:"Optimization Techniques Available"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:["speed:","\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:["As simple as it gets really, build a package with ",(0,s.jsx)(i.code,{children:"-O3"})," instead of ",(0,s.jsx)(i.code,{children:"-O2"})," as well as any other flags deemed worthy to be included as part of the ",(0,s.jsx)(i.code,{children:"speed"})," flags. The main drawback of this is that ",(0,s.jsx)(i.code,{children:"-O3"})," is not guaranteed to produce faster results than building with ",(0,s.jsx)(i.code,{children:"-O2"})," and typically will produce bigger binaries. The days of ",(0,s.jsx)(i.code,{children:"-O3"})," outright breaking your program in weird unexpected ways is largely behind us."]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(i.li,{children:["LTO:","\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:["Compared to some other distributions ",(0,s.jsx)(i.code,{children:"-flto"})," is not yet enabled by default on Solus. LTO is almost guaranteed to provide a %1 or slightly larger performance improvement as well as a smaller binary at the cost of increased compiling times and memory usage during build. When combined with other optimization techniques such as PGO the LTO optimization can really stretch its legs and provide even greater uplift!"]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(i.li,{children:["Clang:","\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:["Not strictly an optimization, but, building a package with ",(0,s.jsx)(i.code,{children:"clang"})," instead of ",(0,s.jsx)(i.code,{children:"gcc"})," and ",(0,s.jsx)(i.code,{children:"ld.ldd"})," to link instead of the infamous ",(0,s.jsx)(i.code,{children:"ld.bfd"})," may provide a faster package out of the box. You'll have to be careful of subtle ABI differences if building with ",(0,s.jsx)(i.code,{children:"clang"}),". If in doubt, and, ",(0,s.jsx)(i.code,{children:"clang"})," is the obvious choice, perform safety rebuilds on all reverse dependencies of the package."]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(i.li,{children:["PGO:","\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsx)(i.li,{children:"Profile guided optimization. Build once with instrumentation in order to collect profile data when ran. Run the program using a representative workload in order to collect profiling data. Build the program again with the profiling data provided in order to build an optimized variant."}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(i.li,{children:["BOLT:","\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:['Binary optimization and layout tool. You can think of this as "post-link PGO" where you instrument a binary with ',(0,s.jsx)(i.code,{children:"bolt"})," to collect profiling data. Run that binary. Then finally reorganize the binary layout using the collected profile data. This generally works better on large statically linked binaries but smaller binaries or libraries such as found in a typical package can benefit too. This optimization is still quite new."]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(i.p,{children:"Regardless, that's enough word spaghetti, let's look at the process to actually optimize a package."}),"\n",(0,s.jsx)(i.h1,{id:"optimizing-a-package",children:"Optimizing a Package"}),"\n",(0,s.jsxs)(i.p,{children:["Right, to begin with we'll have to start on choosing an actual package to benchmark and optimize. I've heard the ",(0,s.jsx)(i.code,{children:".webp"})," file format is becoming increasingly common on the web, slowly replacing ",(0,s.jsx)(i.code,{children:".png"})," and ",(0,s.jsx)(i.code,{children:".jpg"})," file formats due to the strong backing of Google (for better or for worst). An improvement in decoding time for ",(0,s.jsx)(i.code,{children:".webp"})," files would benefit any user using a web browser casually browsing the web."]}),"\n",(0,s.jsxs)(i.p,{children:["Let's have a look at the ",(0,s.jsx)(i.code,{children:"package.yml"})," build recipe for ",(0,s.jsx)(i.code,{children:"libwebp"}),"."]}),"\n",(0,s.jsx)(i.pre,{children:(0,s.jsx)(i.code,{className:"language-yaml",children:"name : libwebp\nversion : 1.3.2\nrelease : 25\nsource :\n - https://github.com/webmproject/libwebp/archive/refs/tags/v1.3.2.tar.gz : c2c2f521fa468e3c5949ab698c2da410f5dce1c5e99f5ad9e70e0e8446b86505\nhomepage : https://developers.google.com/speed/webp/\nlicense : BSD-3-Clause\ncomponent : multimedia.codecs\nsummary : A new image format for the web\ndescription: |\n WebP is a new image format that provides lossless and lossy compression for images on the web. WebP lossless images are 26% smaller in size compared to PNGs. WebP lossy images are 25-34% smaller in size compared to JPEG images at equivalent SSIM index. WebP supports lossless transparency (also known as alpha channel) with just 22% additional bytes. Transparency is also supported with lossy compression and typically provides 3x smaller file sizes compared to PNG when lossy compression is acceptable for the red/green/blue color channels.\nemul32 : yes\npatterns :\n - devel : /usr/share/man\nbuilddeps :\n - pkgconfig32(glu)\n - pkgconfig32(glut)\n - pkgconfig32(libpng)\n - pkgconfig32(libtiff-4)\n - pkgconfig32(libturbojpeg)\n - pkgconfig32(zlib)\n - giflib-devel\nsetup : |\n %reconfigure --disable-static --enable-everything\nbuild : |\n %make\ninstall : |\n %make_install\n"})}),"\n",(0,s.jsxs)(i.p,{children:["Okay, looks to be a quite simple affair. A simple configure, make, make install as well as ",(0,s.jsx)(i.code,{children:"emul32"})," being enabled specifying the -32bit packages are also provided from this recipe. Next step is to look for a repeatable and easy way to benchmark it. We'll begin by looking at the ",(0,s.jsx)(i.code,{children:"pspec_x86_64.xml"})," file which lists all the files produced from the ",(0,s.jsx)(i.code,{children:"package.yml"})," recipe as well as some metadata."]}),"\n",(0,s.jsx)(i.pre,{children:(0,s.jsx)(i.code,{className:"language-xml",children:' <Name>libwebp</Name>\n <Summary xml:lang="en">A new image format for the web</Summary>\n <Description xml:lang="en">WebP is a new image format that provides lossless and lossy compression for images on the web. WebP lossless images are 26% smaller in size compared to PNGs. WebP lossy images are 25-34% smaller in size compared to JPEG images at equivalent SSIM index. WebP supports lossless transparency (also known as alpha channel) with just 22% additional bytes. Transparency is also supported with lossy compression and typically provides 3x smaller file sizes compared to PNG when lossy compression is acceptable for the red/green/blue color channels.\n</Description>\n <PartOf>multimedia.codecs</PartOf>\n <Files>\n <Path fileType="executable">/usr/bin/cwebp</Path>\n <Path fileType="executable">/usr/bin/dwebp</Path>\n <Path fileType="executable">/usr/bin/gif2webp</Path>\n <Path fileType="executable">/usr/bin/img2webp</Path>\n <Path fileType="executable">/usr/bin/vwebp</Path>\n <Path fileType="executable">/usr/bin/webpinfo</Path>\n <Path fileType="executable">/usr/bin/webpmux</Path>\n'})}),"\n",(0,s.jsxs)(i.p,{children:["Perfect, we have ",(0,s.jsx)(i.code,{children:"dwebp"})," and ",(0,s.jsx)(i.code,{children:"cwebp"})," binaries available in the main package, which from a guess can be used to decode and encode ",(0,s.jsx)(i.code,{children:".webp"})," files. Let's try it out."]}),"\n",(0,s.jsx)(i.pre,{children:(0,s.jsx)(i.code,{children:"$ dwebp -h\nUsage: dwebp in_file [options] [-o out_file]\n\nDecodes the WebP image file to PNG format [Default].\nNote: Animated WebP files are not supported.\n$ cwebp -h\nUsage:\n\n cwebp [options] -q quality input.png -o output.webp\n"})}),"\n",(0,s.jsxs)(i.p,{children:["Awesome, these binaries do exactly what we need to benchmark ",(0,s.jsx)(i.code,{children:"libwebp"}),", but, we are also indirectly testing ",(0,s.jsx)(i.code,{children:"libpng"})," as well for this benchmark, we'll have to keep an eye out for that."]}),"\n",(0,s.jsxs)(i.p,{children:["One extra step we have to do is ensure these binaries are actually linking against their own library, as upstream developers can have a habit of making sure their binaries don't link against their own libraries and end up being self-contained. Run ",(0,s.jsx)(i.code,{children:"ldd"})," to verify."]}),"\n",(0,s.jsx)(i.pre,{children:(0,s.jsx)(i.code,{children:"$ ldd /usr/bin/dwebp\n\tlinux-vdso.so.1 (0x00007ffed8733000)\n\tlibwebpdemux.so.2 => /usr/lib/libwebpdemux.so.2.0.14 (0x00007f7473bb4000)\n\tlibwebp.so.7 => /usr/lib/libwebp.so.7.1.8 (0x00007f7473ae2000)\n\tlibpng16.so.16 => /usr/lib/libpng16.so.16 (0x00007f7473aa6000)\n\tlibc.so.6 => /usr/lib/glibc-hwcaps/x86-64-v3/libc.so.6 (0x00007f74738a9000)\n\tlibsharpyuv.so.0 => /usr/lib/libsharpyuv.so.0.0.1 (0x00007f747389e000)\n\tlibm.so.6 => /usr/lib/glibc-hwcaps/x86-64-v3/libm.so.6 (0x00007f74737b8000)\n\tlibz.so.1 => /usr/lib/libz.so.1.3.0 (0x00007f7473200000)\n\t/usr/lib64/ld-linux-x86-64.so.2 (0x00007f7473bea000)\n"})}),"\n",(0,s.jsxs)(i.p,{children:["Awesome in this case both ",(0,s.jsx)(i.code,{children:"dwebp"})," and ",(0,s.jsx)(i.code,{children:"cwebp"})," link against ",(0,s.jsx)(i.code,{children:"libwebp.so"})," so we can be confident that any performance improvements will be applicable to all packages in the repository linking against ",(0,s.jsx)(i.code,{children:"libwebp"}),"."]}),"\n",(0,s.jsxs)(i.p,{children:["Let's grab a couple of ",(0,s.jsx)(i.code,{children:".webp"})," files from ",(0,s.jsx)(i.a,{href:"https://developers.google.com/speed/webp/gallery1",children:"here"})," to test with. We'll just use the largest image size available in this case to reduce noise as much as possible when running benchmarks as well as allow any potential optimizations to stretch their legs a little more."]}),"\n",(0,s.jsxs)(i.p,{children:["Now having done the prep work, lets actually benchmark the damn thing using ",(0,s.jsx)(i.code,{children:"hyperfine"})," for the time being."]}),"\n",(0,s.jsx)(i.pre,{children:(0,s.jsx)(i.code,{children:'$ hyperfine "dwebp ~/3.webp -o /dev/null"\nBenchmark 1: dwebp ~/3.webp -o /dev/null\n Time (mean \xb1 \u03c3): 202.2 ms \xb1 0.3 ms [User: 198.9 ms, System: 3.0 ms]\n Range (min \u2026 max): 201.8 ms \u2026 202.7 ms 14 runs\n$ hyperfine "cwebp ~/PNG_Test.png -o /dev/null"\nBenchmark 1: cwebp ~/PNG_Test.png -o /dev/null\n Time (mean \xb1 \u03c3): 1.423 s \xb1 0.009 s [User: 1.346 s, System: 0.076 s]\n Range (min \u2026 max): 1.410 s \u2026 1.435 s 10 runs\n'})}),"\n",(0,s.jsx)(i.p,{children:"There, we have our a basic baseline for encode and decode performance. We mostly care about decode performance here but improved encoding performance would also not go amiss."}),"\n",(0,s.jsx)(i.h2,{id:"lets-start-obvious",children:"Let's Start Obvious"}),"\n",(0,s.jsxs)(i.p,{children:["Let's start basic, enabling the ",(0,s.jsx)(i.code,{children:"speed"})," optimization which basically builds with ",(0,s.jsx)(i.code,{children:"-O3"})," instead of ",(0,s.jsx)(i.code,{children:"-O2"})," as well as any other flags that are deemed to be worthy to be part of the ",(0,s.jsx)(i.code,{children:"speed"})," group. As well as, the ",(0,s.jsx)(i.code,{children:"lto"})," optimization which builds with link time optimization allowing for inter-procedural optimizations to take place."]}),"\n",(0,s.jsx)(i.pre,{children:(0,s.jsx)(i.code,{className:"language-yaml",children:"optimize:\n - speed\n - lto\n"})}),"\n",(0,s.jsx)(i.p,{children:"Moment of truth..."}),"\n",(0,s.jsx)(i.pre,{children:(0,s.jsx)(i.code,{children:'$ hyperfine "dwebp ~/3.webp -o /dev/null"\nBenchmark 1: dwebp ~/3.webp -o /dev/null\n Time (mean \xb1 \u03c3): 200.0 ms \xb1 1.5 ms [User: 197.3 ms, System: 2.5 ms]\n Range (min \u2026 max): 198.1 ms \u2026 203.2 ms 15 runs\n$ hyperfine "cwebp ~/PNG_Test.png -o /dev/null"\nBenchmark 1: cwebp ~/PNG_Test.png -o /dev/null\n Time (mean \xb1 \u03c3): 1.353 s \xb1 0.012 s [User: 1.281 s, System: 0.071 s]\n Range (min \u2026 max): 1.336 s \u2026 1.369 s 10 runs\n'})}),"\n",(0,s.jsx)(i.p,{children:"Well okay, we got a very minor uplift in decoding performance and a slightly higher improvement in encoding performance, but nothing too much to write home about. Luckily we have several more optimizations to explore..."}),"\n",(0,s.jsx)(i.h2,{id:"pgo-is-great-except-when-it-isnt",children:"PGO is great, except, when it isn't."}),"\n",(0,s.jsxs)(i.p,{children:["Next step is to explore PGO (Profile Guided Optimization). For our ",(0,s.jsx)(i.code,{children:"libwebp"})," package, looks like we already hit a bit of a snafu. There's no test suite included in the tarball! That's a bit of a disappointment as a test suite such as ",(0,s.jsx)(i.code,{children:"make check"})," is by far and away the easiest and most comprehensive workload that can be used for profiling as part of PGO, especially for smaller libraries. However, we can still experiment with the just built ",(0,s.jsx)(i.code,{children:"dwebp"})," and ",(0,s.jsx)(i.code,{children:"cwebp"})," binaries as a suitable workload for PGO."]}),"\n",(0,s.jsx)(i.p,{children:"Luckily, as part of the package.yml format all you have to do is provide a profile for automatic PGO. After chrooting into the build environment and fiddling around a bit we end up with:"}),"\n",(0,s.jsx)(i.pre,{children:(0,s.jsx)(i.code,{className:"language-yaml",children:"profile : |\n ./examples/dwebp webp_js/test_webp_js.webp -o test_png.png\n ./examples/cwebp test_png.png -o /dev/null\n"})}),"\n",(0,s.jsx)(i.p,{children:"After specifying that, 6 builds will now be performed instead of 2:"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:["emul32:","\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsx)(i.li,{children:"Instrumented build"}),"\n",(0,s.jsx)(i.li,{children:"Run profiling workload"}),"\n",(0,s.jsx)(i.li,{children:"Optimized build using profiling data"}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(i.li,{children:["x86_64:","\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsx)(i.li,{children:"Instrumented build"}),"\n",(0,s.jsx)(i.li,{children:"Run profiling workload"}),"\n",(0,s.jsx)(i.li,{children:"Optimized build using profiling data"}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(i.p,{children:"For this relatively small package it increases the build time from 1m1.672s to 1m42.199s"}),"\n",(0,s.jsx)(i.p,{children:"The next moment of truth..."}),"\n",(0,s.jsx)(i.pre,{children:(0,s.jsx)(i.code,{children:'$ hyperfine "dwebp ~/3.webp -o /dev/null"\nBenchmark 1: dwebp ~/3.webp -o /dev/null\n Time (mean \xb1 \u03c3): 204.1 ms \xb1 2.2 ms [User: 201.3 ms, System: 2.7 ms]\n Range (min \u2026 max): 201.6 ms \u2026 207.1 ms 14 runs\n$ hyperfine "cwebp ~/PNG_Test.png -o /dev/null"\nBenchmark 1: cwebp ~/PNG_Test.png -o /dev/null\n Time (mean \xb1 \u03c3): 1.349 s \xb1 0.010 s [User: 1.266 s, System: 0.082 s]\n Range (min \u2026 max): 1.335 s \u2026 1.374 s 10 runs\n'})}),"\n",(0,s.jsxs)(i.p,{children:["Well... That's interesting. We actually regress in performance for decode performance whilst gaining another small bump in encoding performance. Worse still, we get a bunch of ",(0,s.jsx)(i.code,{children:"profile count data file not found [-Wmissing-profile]"})," warning messages during the optimized build indicating to us our profiling workload isn't comprehensive enough and doesn't cover enough code paths. The lack of a handy ",(0,s.jsx)(i.code,{children:"make check"})," that could be used as a profiling workload is really hurting us here. For now, let's put a pin in exploring PGO, it isn't a dead end but more work needs to be done curating a more comprehensive workload to chuck at it in this particular case, whilst other, easier, optimization techniques are still available to us."]}),"\n",(0,s.jsx)(i.h2,{id:"256-vector-units-go-brrrrrr",children:"256 Vector Units go brrrrrr..."}),"\n",(0,s.jsxs)(i.p,{children:["The next obvious step is to explore ",(0,s.jsx)(i.code,{children:"glibc"})," hardware capabilities. For those unaware both ",(0,s.jsx)(i.code,{children:"clang"})," and ",(0,s.jsx)(i.code,{children:"gnu"})," compilers provide ",(0,s.jsx)(i.code,{children:"x86_64-v2"}),", ",(0,s.jsx)(i.code,{children:"x86_64-v3"})," and ",(0,s.jsx)(i.code,{children:"x86_64-v4"})," micro-architecture build options on top of the baseline of ",(0,s.jsx)(i.code,{children:"x86_64"}),". These enable the use of targeting additional CPU instruction sets during compilation for better performance. For example, ",(0,s.jsx)(i.code,{children:"-sse4.2"})," for ",(0,s.jsx)(i.code,{children:"x86_64-v2"}),", ",(0,s.jsx)(i.code,{children:"-avx2"})," for ",(0,s.jsx)(i.code,{children:"x86_64-v3"}),", and ",(0,s.jsx)(i.code,{children:"-avx512"})," for ",(0,s.jsx)(i.code,{children:"x86_64-v4"}),"."]}),"\n",(0,s.jsxs)(i.p,{children:["Whilst that's great 'n all, if a program is built with ",(0,s.jsx)(i.code,{children:"x86_64-v3"})," and gains an additional ~10% uplift in performance, it's no good if a ",(0,s.jsx)(i.code,{children:"x86_64-v2"})," compatible cpu can't run it. Luckily the ",(0,s.jsx)(i.code,{children:"glibc"})," loader that's found on almost general purpose linux installs provides a way to load higher or lower micro-architecture libraries if they're installed and supported."]}),"\n",(0,s.jsxs)(i.p,{children:["On top of all that, the ",(0,s.jsx)(i.code,{children:"package.yml"})," format provides an incredibly simple way of providing ",(0,s.jsx)(i.code,{children:"x86_64-v3"})," built libraries by enabling the ",(0,s.jsx)(i.code,{children:"avx2 : yes"})," flag."]}),"\n",(0,s.jsxs)(i.p,{children:["With ",(0,s.jsx)(i.code,{children:"avx2 : yes"})," enabled in the ",(0,s.jsx)(i.code,{children:"libwebp"})," package three builds are performed."]}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsx)(i.li,{children:"emul32"}),"\n",(0,s.jsx)(i.li,{children:"x86_64-v3"}),"\n",(0,s.jsx)(i.li,{children:"x86_64"}),"\n"]}),"\n",(0,s.jsxs)(i.p,{children:["We now see these additional files in the ",(0,s.jsx)(i.code,{children:"pspec_x86_64.xml"})," file"]}),"\n",(0,s.jsx)(i.pre,{children:(0,s.jsx)(i.code,{className:"language-diff",children:'+ <Path fileType="library">/usr/lib64/glibc-hwcaps/x86-64-v3/libsharpyuv.so.0</Path>\n+ <Path fileType="library">/usr/lib64/glibc-hwcaps/x86-64-v3/libsharpyuv.so.0.0.1</Path>\n+ <Path fileType="library">/usr/lib64/glibc-hwcaps/x86-64-v3/libwebp.so.7</Path>\n+ <Path fileType="library">/usr/lib64/glibc-hwcaps/x86-64-v3/libwebp.so.7.1.8</Path>\n+ <Path fileType="library">/usr/lib64/glibc-hwcaps/x86-64-v3/libwebpdecoder.so.3</Path>\n+ <Path fileType="library">/usr/lib64/glibc-hwcaps/x86-64-v3/libwebpdecoder.so.3.1.8</Path>\n+ <Path fileType="library">/usr/lib64/glibc-hwcaps/x86-64-v3/libwebpdemux.so.2</Path>\n+ <Path fileType="library">/usr/lib64/glibc-hwcaps/x86-64-v3/libwebpdemux.so.2.0.14</Path>\n+ <Path fileType="library">/usr/lib64/glibc-hwcaps/x86-64-v3/libwebpmux.so.3</Path>\n+ <Path fileType="library">/usr/lib64/glibc-hwcaps/x86-64-v3/libwebpmux.so.3.0.13</Path>\n'})}),"\n",(0,s.jsxs)(i.p,{children:["Let's rerun ",(0,s.jsx)(i.code,{children:"lld"})," on ",(0,s.jsx)(i.code,{children:"dwebp"})," after installing the new package and..."]}),"\n",(0,s.jsx)(i.pre,{children:(0,s.jsx)(i.code,{children:"$ ldd /usr/bin/dwebp\n\tlinux-vdso.so.1 (0x00007ffeab5b1000)\n\tlibwebpdemux.so.2 => /usr/lib/glibc-hwcaps/x86-64-v3/libwebpdemux.so.2.0.14 (0x00007f9a351d5000)\n\tlibwebp.so.7 => /usr/lib/glibc-hwcaps/x86-64-v3/libwebp.so.7.1.8 (0x00007f9a3510b000)\n\tlibpng16.so.16 => /usr/lib/libpng16.so.16 (0x00007f9a350cf000)\n\tlibc.so.6 => /usr/lib/glibc-hwcaps/x86-64-v3/libc.so.6 (0x00007f9a34ed2000)\n\tlibsharpyuv.so.0 => /usr/lib/glibc-hwcaps/x86-64-v3/libsharpyuv.so.0.0.1 (0x00007f9a34ec1000)\n\tlibm.so.6 => /usr/lib/glibc-hwcaps/x86-64-v3/libm.so.6 (0x00007f9a34ddb000)\n\tlibz.so.1 => /usr/lib/glibc-hwcaps/x86-64-v3/libz.so.1.3 (0x00007f9a34dbb000)\n\t/usr/lib64/ld-linux-x86-64.so.2 (0x00007f9a3520b000)\n"})}),"\n",(0,s.jsxs)(i.p,{children:["We can crucially see that ",(0,s.jsx)(i.code,{children:"dwebp"})," is now loading the ",(0,s.jsx)(i.code,{children:"x86-64-v3"})," built ",(0,s.jsx)(i.code,{children:"libwebp.so"})," lib from ",(0,s.jsx)(i.code,{children:"/usr/lib/glibc-hwcaps/x86-64-v3/libwebp.so.7.1.8"}),", success! Let's what our performance looks like."]}),"\n",(0,s.jsx)(i.pre,{children:(0,s.jsx)(i.code,{children:'$ hyperfine "dwebp ~/3.webp -o /dev/null"\nBenchmark 1: dwebp ~/3.webp -o /dev/null\n Time (mean \xb1 \u03c3): 198.2 ms \xb1 1.2 ms [User: 195.4 ms, System: 2.5 ms]\n Range (min \u2026 max): 197.0 ms \u2026 200.5 ms 14 runs\n$ hyperfine "cwebp ~/PNG_Test.png -o /dev/null"\nBenchmark 1: cwebp ~/PNG_Test.png -o /dev/null\n Time (mean \xb1 \u03c3): 1.313 s \xb1 0.009 s [User: 1.243 s, System: 0.078 s]\n Range (min \u2026 max): 1.308 s \u2026 1.341 s 10 runs\n'})}),"\n",(0,s.jsx)(i.p,{children:"Let's recap so far:"}),"\n",(0,s.jsxs)(i.table,{children:[(0,s.jsx)(i.thead,{children:(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.th,{children:"Optimization"}),(0,s.jsx)(i.th,{children:"Decode"}),(0,s.jsx)(i.th,{children:"Encode"}),(0,s.jsx)(i.th,{children:"Size"})]})}),(0,s.jsxs)(i.tbody,{children:[(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:"Baseline"}),(0,s.jsx)(i.td,{children:"202.2 ms"}),(0,s.jsx)(i.td,{children:"1.399 s"}),(0,s.jsx)(i.td,{children:"1.33 MB"})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:"Speed + LTO"}),(0,s.jsx)(i.td,{children:"200.0 ms"}),(0,s.jsx)(i.td,{children:"1.353 s"}),(0,s.jsx)(i.td,{children:"1.73 MB"})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:"Speed + LTO + PGO"}),(0,s.jsxs)(i.td,{children:["204.1 ms ","\u26a0\ufe0f"]}),(0,s.jsx)(i.td,{children:"1.349 s"}),(0,s.jsx)(i.td,{children:"1.07 MB"})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:"Speed + LTO + x86_64-v3"}),(0,s.jsx)(i.td,{children:"198.2 ms"}),(0,s.jsx)(i.td,{children:"1.313 s"}),(0,s.jsx)(i.td,{children:"3.17 MB"})]})]})]}),"\n",(0,s.jsxs)(i.p,{children:["Whilst we're still getting an additional speedup it isn't really anything to write home about. A measly ~2% improvement in decoding performance and a fairly respectable ~7% improvement in encoding performance for our test case. However, increasing the package size by an extra ~2MiB from providing a bunch of extra libs in ",(0,s.jsx)(i.code,{children:"/usr/lib/glibc-hwcaps/x86-64-v3/"})," just ain't worth it. This hints that either the compiler optimizations aren't really effective here or we're being bottle-necked by something else."]}),"\n",(0,s.jsxs)(i.p,{children:["So far, we've been benchmarking fairly simply using ",(0,s.jsx)(i.code,{children:"hyperfine"}),", let's swap that out for ",(0,s.jsx)(i.code,{children:"perf"})," so we can get a callgraph."]}),"\n",(0,s.jsxs)(i.h2,{id:"something-about-perf-to-the-rescue",children:["Something about ",(0,s.jsx)(i.code,{children:"perf"})," to the rescue"]}),"\n",(0,s.jsx)(i.p,{children:(0,s.jsx)(i.code,{children:"perf record -o dwebp.data -- dwebp ~/3.webp -o /dev/null"})}),"\n",(0,s.jsx)(i.p,{children:(0,s.jsx)(i.code,{children:"perf record -o cwebp.data -- cwebp ~/PNG_Test.png -o /dev/null"})}),"\n",(0,s.jsxs)(i.p,{children:["Let's look at ",(0,s.jsx)(i.code,{children:"dwebp"})," first with ",(0,s.jsx)(i.code,{children:"perf report -i dwebp.data"}),"."]}),"\n",(0,s.jsx)(i.p,{children:(0,s.jsx)(i.img,{alt:"Perf report dwebp",src:n(58916).Z+"",width:"1254",height:"676"})}),"\n",(0,s.jsxs)(i.p,{children:["Well god damn, literally all of our time is being spent in ",(0,s.jsx)(i.code,{children:"libz.so"})," it's no wonder our compiler optimizations were hardly improving performance."]}),"\n",(0,s.jsxs)(i.p,{children:["Let's also look at the ",(0,s.jsx)(i.code,{children:"cwebp"})," report, we've generally been getting better results from it."]}),"\n",(0,s.jsx)(i.p,{children:(0,s.jsx)(i.img,{alt:"Perf report cwebp",src:n(85370).Z+"",width:"1254",height:"676"})}),"\n",(0,s.jsxs)(i.p,{children:["Okay, much more of our time is being spent in ",(0,s.jsx)(i.code,{children:"libwebp.so"})," itself here which helps to explain why we were seeing a better performance uplift. Still 5.68% of our time is being spent in ",(0,s.jsx)(i.code,{children:"libz"}),"."]}),"\n",(0,s.jsx)(i.h2,{id:"choosing-wisely",children:"Choosing Wisely"}),"\n",(0,s.jsxs)(i.p,{children:["You may remember early on, when I said we are also indirectly testing ",(0,s.jsx)(i.code,{children:"libpng"}),". Well... after some more digging, that's exactly what's happening here. Re-running the ",(0,s.jsx)(i.code,{children:"dwebp"})," binary it says this"]}),"\n",(0,s.jsxs)(i.blockquote,{children:["\n",(0,s.jsx)(i.p,{children:"Decodes the WebP image file to PNG format"}),"\n"]}),"\n",(0,s.jsxs)(i.p,{children:["Turns out, it's more accurate to say we are ",(0,s.jsx)(i.em,{children:"directly"})," testing ",(0,s.jsx)(i.code,{children:"libpng"})," and by extension ",(0,s.jsx)(i.code,{children:"zlib"}),". It isn't ",(0,s.jsx)(i.code,{children:"libwebp"})," that's spending all of its time in ",(0,s.jsx)(i.code,{children:"libz.so"}),", it's ",(0,s.jsx)(i.code,{children:"libpng"}),"! This is exactly the reason you have to be careful about the benchmarks chosen and, ensure you understand what they're doing."]}),"\n",(0,s.jsx)(i.p,{children:"However, the good news about this little snafu is:"}),"\n",(0,s.jsxs)(i.ol,{children:["\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"dwebp"})," can be used to translate to another image format such as ",(0,s.jsx)(i.code,{children:".yuv"})," that'll more accurately remove the bottleneck from ",(0,s.jsx)(i.code,{children:"libz.so"}),"."]}),"\n",(0,s.jsxs)(i.li,{children:["We now know that ",(0,s.jsx)(i.code,{children:"libpng"})," has a huge bottleneck in ",(0,s.jsx)(i.code,{children:"libz.so"})," and speeding up ",(0,s.jsx)(i.code,{children:"zlib"})," ",(0,s.jsx)(i.em,{children:"should"})," dramatically speed up ",(0,s.jsx)(i.code,{children:"libpng"})," performance."]}),"\n"]}),"\n",(0,s.jsx)(i.h2,{id:"adjusting-the-benchmark",children:"Adjusting the Benchmark"}),"\n",(0,s.jsxs)(i.p,{children:["After reverting the ",(0,s.jsx)(i.code,{children:"libwebp"})," package to the baseline let's use our adjusted decoding benchmark."]}),"\n",(0,s.jsxs)(i.p,{children:["We'll now use ",(0,s.jsx)(i.code,{children:"dwebp ~/3.webp -yuv -o /dev/null"})," for a decoding test, let's run that with ",(0,s.jsx)(i.code,{children:"perf"})," to ensure we're exclusively testing ",(0,s.jsx)(i.code,{children:"libwebp.so"})," here."]}),"\n",(0,s.jsx)(i.p,{children:(0,s.jsx)(i.img,{alt:"Perf report dwebp to yuv",src:n(29503).Z+"",width:"1254",height:"676"})}),"\n",(0,s.jsxs)(i.p,{children:["Okay that's awesome, no ",(0,s.jsx)(i.code,{children:"libpng.so"})," or ",(0,s.jsx)(i.code,{children:"libz.so"})," to mess with our tests!"]}),"\n",(0,s.jsx)(i.p,{children:"Let's reapply our optimizations, keeping those which apply an uplift"}),"\n",(0,s.jsxs)(i.table,{children:[(0,s.jsx)(i.thead,{children:(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.th,{children:"Optimization"}),(0,s.jsx)(i.th,{children:"Decode"}),(0,s.jsx)(i.th,{children:"Size"})]})}),(0,s.jsxs)(i.tbody,{children:[(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:"Baseline"}),(0,s.jsx)(i.td,{children:"14.7 ms"}),(0,s.jsx)(i.td,{children:"1.33 MB"})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:"Speed"}),(0,s.jsx)(i.td,{children:"14.5 ms"}),(0,s.jsx)(i.td,{children:"1.56 MB"})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:"LTO"}),(0,s.jsx)(i.td,{children:"14.6 ms"}),(0,s.jsx)(i.td,{children:"1.40 MB"})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:"PGO"}),(0,s.jsxs)(i.td,{children:["18.0 ms ","\u26a0\ufe0f"]}),(0,s.jsx)(i.td,{children:"1.07 MB"})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:"x86-64-v3"}),(0,s.jsx)(i.td,{children:"12.7 ms"}),(0,s.jsx)(i.td,{children:"2.35 MB"})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:"Speed + LTO + x86-64-v3"}),(0,s.jsx)(i.td,{children:"12.3 ms"}),(0,s.jsx)(i.td,{children:"3.17 MB"})]})]})]}),"\n",(0,s.jsx)(i.p,{children:"Okay, this is great, whilst we aren't getting much from speed or LTO, we are getting a big uplift from x86-64-v3 libraries and when combined with the other optimizations we're getting an uplift in performance of around ~16% at the cost of close to thrice the installed package size."}),"\n",(0,s.jsx)(i.h3,{id:"partial-profiling",children:"Partial Profiling"}),"\n",(0,s.jsxs)(i.p,{children:["Once again we see that PGO regresses performance hard, however, that smaller size is giving a good hint! We already know that the profiling workload we gave it isn't very comprehensive due to the bunch of ",(0,s.jsx)(i.code,{children:"-Wmissing-profile"})," warnings we get during the optimized build. By default, PGO will aggressively inline and apply additional optimizations to code that's part of the profiling workload while everything else will be optimized for size. The idea being, hot-path code is fast and code that doesn't matter is small. However, what happens when you can't craft a comprehensive workload, as seems to be the case here? Luckily GCC has a flag for exactly that ",(0,s.jsx)(i.code,{children:"-fprofile-partial-training"}),". GCC docs state that:"]}),"\n",(0,s.jsxs)(i.blockquote,{children:["\n",(0,s.jsx)(i.p,{children:"In some cases it is not practical to train all possible hot paths in the program. (For example, program may contain functions specific for a given hardware and training may not cover all hardware configurations program is run on.) With -fprofile-partial-training profile feedback will be ignored for all functions not executed during the train run leading them to be optimized as if they were compiled without profile feedback. This leads to better performance when train run is not representative but also leads to significantly bigger code."}),"\n"]}),"\n",(0,s.jsxs)(i.p,{children:["Okay, let's try it out, all we need to do is specify in our ",(0,s.jsx)(i.code,{children:"package.yml"})," recipe."]}),"\n",(0,s.jsx)(i.pre,{children:(0,s.jsx)(i.code,{className:"language-yaml",children:'environment: |\n if [[ -n ${PGO_USE_BUILD} ]]; then\n export CFLAGS="${CFLAGS} -fprofile-partial-training"\n export CXXFLAGS="${CXXFLAGS} -fprofile-partial-training"\n fi\n'})}),"\n",(0,s.jsx)(i.p,{children:"And the results:"}),"\n",(0,s.jsxs)(i.table,{children:[(0,s.jsx)(i.thead,{children:(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.th,{children:"Optimization"}),(0,s.jsx)(i.th,{children:"Decode"}),(0,s.jsx)(i.th,{children:"Size"})]})}),(0,s.jsxs)(i.tbody,{children:[(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:"Speed + LTO + x86-64-v3"}),(0,s.jsx)(i.td,{children:"12.3 ms"}),(0,s.jsx)(i.td,{children:"3.17 MB"})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:"Speed + LTO + x86-64-v3 + Partial PGO"}),(0,s.jsx)(i.td,{children:"12.5 ms"}),(0,s.jsx)(i.td,{children:"3.13 MB"})]})]})]}),"\n",(0,s.jsx)(i.p,{children:"Well, it was worth a try. This highlights how useless PGO can be when you don't or can't provide it a good workload. Interestingly, we don't get the size bloat that was promised, in fact, the opposite."}),"\n",(0,s.jsx)(i.h1,{id:"final-libwebp-results",children:"Final libwebp Results"}),"\n",(0,s.jsxs)(i.table,{children:[(0,s.jsx)(i.thead,{children:(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.th,{children:"Benchmark"}),(0,s.jsx)(i.th,{children:"Time Before"}),(0,s.jsx)(i.th,{children:"Time After"}),(0,s.jsx)(i.th,{children:"Size Before"}),(0,s.jsx)(i.th,{children:"Size After"})]})}),(0,s.jsxs)(i.tbody,{children:[(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:'"dwebp ~/3.webp -yuv -o /dev/null"'}),(0,s.jsx)(i.td,{children:"14.5 ms"}),(0,s.jsx)(i.td,{children:"12.3 ms"}),(0,s.jsx)(i.td,{children:"1.33 MB"}),(0,s.jsx)(i.td,{children:"3.17 MB"})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:'"cwebp ~/PNG_Test.png -o /dev/null"'}),(0,s.jsx)(i.td,{children:"1.399 s"}),(0,s.jsx)(i.td,{children:"1.313 s"}),(0,s.jsx)(i.td,{children:"--"}),(0,s.jsx)(i.td,{children:"--"})]})]})]}),"\n",(0,s.jsx)(i.p,{children:"In the end, we get a very healthy ~16% improvement in decoding from a .webp to .yuv file. As well as a respectable 6% improvement in encoding from a .png to .webp file. However, the increased package size is very unfortunate. It's possible to tweak the x86-64-v3 build and only ship the libs that actually improve performance in order to get the installed size back to an acceptable level."}),"\n",(0,s.jsx)(i.h1,{id:"next-generation-side-quest",children:'"Next-Generation" Side Quest'}),"\n",(0,s.jsxs)(i.p,{children:["Now, you probably remember earlier due to our unrepresentative benchmark we found out that ",(0,s.jsx)(i.code,{children:"libpng"})," is getting highly bottlenecked by ",(0,s.jsx)(i.code,{children:"libz.so"}),". This now seems like a perfect opportunity to take a look at zlib and circle-back to our original benchmark that we were using."]}),"\n",(0,s.jsxs)(i.p,{children:["Zlib is widely employed throughout the ecosystem and, as such you'd think it would be highly-optimized for performance. However, that isn't really the case. Zlib is written in an old-fashioned way of C and tries to be ",(0,s.jsx)(i.em,{children:"extremely"})," portable; supporting dozens of systems that have fallen out of common use. As such, it's hard to apply architecture specific optimizations that wouldn't break some old system or without introducing code spaghetti. There have been a couple of attempts to merge AArch64 and x86_64 optimizations into the canonical zlib library without success."]}),"\n",(0,s.jsxs)(i.p,{children:["However, there is some light in this tunnel as various forks of zlib having been popping up, applying new optimizations on top of zlib. The most promising of these looks be to ",(0,s.jsx)(i.a,{href:"https://github.com/zlib-ng/zlib-ng/",children:"zlib-ng"}),". When built in compatible mode, it promises to be API compatible with canonical zlib and ",(0,s.jsx)(i.em,{children:"tries"})," to be as ABI compatible as possible."]}),"\n",(0,s.jsxs)(i.p,{children:["Let's just go for it, replacing Solus' ",(0,s.jsx)(i.code,{children:"zlib"})," package with zlib-ng built in compatible mode. It's a bit scary due to how integral zlib is in a typical Linux install, but, how hard could it be?"]}),"\n",(0,s.jsx)(i.h2,{id:"i-zee-a-purty-lil-package",children:"I Zee a Purty lil' Package"}),"\n",(0,s.jsxs)(i.p,{children:["Well that was simple. Here's what our zlib-ng ",(0,s.jsx)(i.code,{children:"package.yml"})," recipe looks like."]}),"\n",(0,s.jsx)(i.pre,{children:(0,s.jsx)(i.code,{className:"language-yaml",children:"name : zlib\nversion : 2.1.5\nrelease : 28\nsource :\n - https://github.com/zlib-ng/zlib-ng/archive/refs/tags/2.1.5.tar.gz : 3f6576971397b379d4205ae5451ff5a68edf6c103b2f03c4188ed7075fbb5f04\nhomepage : https://github.com/zlib-ng/zlib-ng\nlicense : ZLIB\ncomponent : system.base\nsummary : zlib replacement with optimizations for next generation systems.\ndescription:\n - A zlib data compression library for the next generation systems. ABI/API compatible mode.\ndevel : yes\nemul32 : yes\nsetup : |\n %cmake_ninja \\\n -DZLIB_COMPAT=ON \\\n -DWITH_GTEST=OFF \\\n -DBUILD_SHARED_LIBS=ON \\\n -DINSTALL_LIB_DIR=%libdir%\nbuild : |\n %ninja_build\ninstall : |\n %ninja_install\ncheck : |\n %ninja_check\n"})}),"\n",(0,s.jsxs)(i.p,{children:["After building it, all the files seem to be in the right place and the test suite is passing. Let's just install it overwriting our canonical ",(0,s.jsx)(i.code,{children:"zlib"})," package and hope our system doesn't die... I think the word is YOLO."]}),"\n",(0,s.jsx)(i.pre,{children:(0,s.jsx)(i.code,{children:'$ hyperfine "dwebp ~/3.webp -o /dev/null"\nBenchmark 1: dwebp ~/3.webp -o /dev/null\n Time (mean \xb1 \u03c3): 198.6 ms \xb1 2.3 ms [User: 194.3 ms, System: 3.6 ms]\n Range (min \u2026 max): 196.3 ms \u2026 203.3 ms 14 runs\n$ sudo eopkg it zlib-2.1.5-28-1-x86_64.eopkg\n...\n$ $ hyperfine "dwebp ~/3.webp -o /dev/null"\nBenchmark 1: dwebp ~/3.webp -o /dev/null\n Time (mean \xb1 \u03c3): 87.6 ms \xb1 0.7 ms [User: 84.7 ms, System: 2.6 ms]\n Range (min \u2026 max): 86.5 ms \u2026 88.7 ms 33 runs\n'})}),"\n",(0,s.jsx)(i.p,{children:"Well, hot diggity damn. Swapping out the zlib package for a more performant variant has instantly more than halved(!!) our decoding time."}),"\n",(0,s.jsxs)(i.p,{children:["We need to find a more contained ",(0,s.jsx)(i.code,{children:"libpng"})," benchmark here that removes the ",(0,s.jsx)(i.code,{children:"libwebp"})," stuff to really confirm the findings here. After some sleuthing the ",(0,s.jsx)(i.code,{children:"libpng"})," source repository has a ",(0,s.jsx)(i.a,{href:"https://github.com/glennrp/libpng/blob/libpng16/contrib/examples/pngtopng.c",children:"pngtopng.c"})," file we can compile to use the system libpng library."]}),"\n",(0,s.jsxs)(i.p,{children:["Changing the header from ",(0,s.jsx)(i.code,{children:'#include "../../png.h"'})," to ",(0,s.jsx)(i.code,{children:"#include <png.h>"})," then running ",(0,s.jsx)(i.code,{children:"gcc -Ofast pngtopng.c -lpng16 -o pngtopng"})," to compile it, we have a libpng benchmark. We can reuse our test .png file from earlier. Ending up with: ",(0,s.jsx)(i.code,{children:"./pngtopng ~/PNG_Test.png /dev/null"})," for our benchmark."]}),"\n",(0,s.jsxs)(i.table,{children:[(0,s.jsx)(i.thead,{children:(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.th,{children:"Library"}),(0,s.jsx)(i.th,{children:"Time"})]})}),(0,s.jsxs)(i.tbody,{children:[(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:"zlib (canonical)"}),(0,s.jsx)(i.td,{children:"1.464 s"})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:"zlib-ng (compat)"}),(0,s.jsx)(i.td,{children:"896.6 ms"})]})]})]}),"\n",(0,s.jsxs)(i.p,{children:["Well. This is pretty much inline with our flawed ",(0,s.jsx)(i.code,{children:"dwebp"})," benchmark from earlier. Swapping out zlib almost halves ",(0,s.jsx)(i.code,{children:"libpng"})," decoding time."]}),"\n",(0,s.jsx)(i.h2,{id:"squeezing-more-from-zlib-ng",children:"Squeezing more from zlib-ng"}),"\n",(0,s.jsxs)(i.p,{children:["However, we're not done yet. We still have our compiler optimizations available to us to squeeze more performance from ",(0,s.jsx)(i.code,{children:"zlib-ng"}),"."]}),"\n",(0,s.jsxs)(i.table,{children:[(0,s.jsx)(i.thead,{children:(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.th,{children:"Optimization"}),(0,s.jsx)(i.th,{children:"Decode"}),(0,s.jsx)(i.th,{children:"Size"})]})}),(0,s.jsxs)(i.tbody,{children:[(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:"Baseline"}),(0,s.jsx)(i.td,{children:"896.6 ms"}),(0,s.jsx)(i.td,{children:"141.00 KB"})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:"Speed"}),(0,s.jsx)(i.td,{children:"883.6 ms"}),(0,s.jsx)(i.td,{children:"182.00 KB"})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:"LTO"}),(0,s.jsx)(i.td,{children:"892.7 ms"}),(0,s.jsx)(i.td,{children:"133.00 KB"})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:"PGO"}),(0,s.jsx)(i.td,{children:"894.6 ms"}),(0,s.jsx)(i.td,{children:"141.00 KB"})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:"x86-64-v3"}),(0,s.jsx)(i.td,{children:"892.5 ms"}),(0,s.jsx)(i.td,{children:"295.00 KB"})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:"Speed + LTO"}),(0,s.jsx)(i.td,{children:"882.6 ms"}),(0,s.jsx)(i.td,{children:"170.00 KB"})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:"Speed + LTO + PGO + x86-64-v3"}),(0,s.jsx)(i.td,{children:"882.5 ms"}),(0,s.jsx)(i.td,{children:"250.00 KB"})]})]})]}),"\n",(0,s.jsx)(i.p,{children:"It looks like in this case the simple speed + LTO optimizations is the way to go. Speed gives the majority of the speedup but LTO helps bring back down the package size again. However, it's only a 1.5% improvement from baseline for this benchmark. We can always re-benchmark it later, testing zlib performance more directly instead of via libpng. It shows how good a job the zlib-ng developers have done that it's so performant right out of the gate."}),"\n",(0,s.jsx)(i.h1,{id:"final-words",children:"Final Words"}),"\n",(0,s.jsx)(i.p,{children:"We've shown the process of how a package can be optimized in Solus, through the failings and wins here I hope some good tips and tricks were provided in avoiding common pitfalls. Additional benchmarking strategies such as BOLT or Polly optimizations were not discussed and it'll be good material for a future blog post."}),"\n",(0,s.jsx)(i.p,{children:"Some other important things such as tweaking the system for benchmarking in order to get representative and consistent results were also not discussed. This is especially important in power budget constrained systems such as laptops and worth bearing in mind."}),"\n",(0,s.jsxs)(i.p,{children:["Regardless, I hope the story of how ",(0,s.jsx)(i.code,{children:"libwebp"})," was optimized for was entertaining and some things were learnt for anyone looking to optimize packages in Solus for the future."]})]})}function h(e={}){const{wrapper:i}={...(0,t.a)(),...e.components};return i?(0,s.jsx)(i,{...e,children:(0,s.jsx)(c,{...e})}):c(e)}},85370:(e,i,n)=>{n.d(i,{Z:()=>s});const s=n.p+"assets/images/perf_report_cwebp_png-baafb78e8e4527d10a5a1ded232c2bde.webp"},58916:(e,i,n)=>{n.d(i,{Z:()=>s});const s=n.p+"assets/images/perf_report_dwebp_png-c0f9529294b3efe6743a980866abdf15.webp"},29503:(e,i,n)=>{n.d(i,{Z:()=>s});const s=n.p+"assets/images/perf_report_dwebp_yuv-36ad3f6052746d5ea55acce6cbe72b6f.webp"},11151:(e,i,n)=>{n.d(i,{Z:()=>a,a:()=>r});var s=n(67294);const t={},l=s.createContext(t);function r(e){const i=s.useContext(l);return s.useMemo((function(){return"function"==typeof e?e(i):{...i,...e}}),[i,e])}function a(e){let i;return i=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:r(e.components),s.createElement(l.Provider,{value:i},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/72f2f84e.26590b14.js b/assets/js/72f2f84e.26590b14.js new file mode 100644 index 000000000..bd6a5d384 --- /dev/null +++ b/assets/js/72f2f84e.26590b14.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([["698"],{57017:function(e){e.exports=JSON.parse('{"categoryGeneratedIndex":{"title":"Utilities","slug":"/category/utilities","permalink":"/docs/category/utilities","sidebar":"userSidebar","navigation":{"previous":{"title":"Snap","permalink":"/docs/user/software/third-party/snap"},"next":{"title":"KSysGuard","permalink":"/docs/user/software/utilities/ksysguard"}}}}')}}]); \ No newline at end of file diff --git a/assets/js/72f2f84e.3511f922.js b/assets/js/72f2f84e.3511f922.js deleted file mode 100644 index efbf02250..000000000 --- a/assets/js/72f2f84e.3511f922.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[794],{23343:e=>{e.exports=JSON.parse('{"categoryGeneratedIndex":{"title":"Utilities","slug":"/category/utilities","permalink":"/docs/category/utilities","sidebar":"userSidebar","navigation":{"previous":{"title":"Snap","permalink":"/docs/user/software/third-party/snap"},"next":{"title":"KSysGuard","permalink":"/docs/user/software/utilities/ksysguard"}}}}')}}]); \ No newline at end of file diff --git a/assets/js/74470af4.017d0ea6.js b/assets/js/74470af4.017d0ea6.js deleted file mode 100644 index 6f0f90ed8..000000000 --- a/assets/js/74470af4.017d0ea6.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[1896],{5893:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>a,contentTitle:()=>i,default:()=>u,frontMatter:()=>o,metadata:()=>l,toc:()=>d});var s=r(85893),n=r(11151);const o={title:"VirtualBox",summary:"Quick start guide for VirtualBox on Solus"},i="VirtualBox",l={id:"user/software/virtualization/virtualbox",title:"VirtualBox",description:"VirtualBox is an x86 and x86_64 virtualization software package developed by Oracle.",source:"@site/docs/user/software/virtualization/virtualbox.md",sourceDirName:"user/software/virtualization",slug:"/user/software/virtualization/virtualbox",permalink:"/docs/user/software/virtualization/virtualbox",draft:!1,unlisted:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/software/virtualization/virtualbox.md",tags:[],version:"current",lastUpdatedAt:1732716912e3,frontMatter:{title:"VirtualBox",summary:"Quick start guide for VirtualBox on Solus"},sidebar:"userSidebar",previous:{title:"Virtualization",permalink:"/docs/category/virtualization"},next:{title:"Web",permalink:"/docs/category/web"}},a={},d=[{value:"Before you start",id:"before-you-start",level:2},{value:"Remove prior installation",id:"remove-prior-installation",level:3},{value:"Update your system",id:"update-your-system",level:3},{value:"Determine which kernel you are using",id:"determine-which-kernel-you-are-using",level:3},{value:"Solus as host",id:"solus-as-host",level:2},{value:"Solus as guest",id:"solus-as-guest",level:2},{value:"Extra configuration",id:"extra-configuration",level:2},{value:"USB controller",id:"usb-controller",level:4},{value:"Shared folders",id:"shared-folders",level:4},{value:"Troubleshooting",id:"troubleshooting",level:2}];function h(e){const t={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",header:"header",img:"img",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,n.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.header,{children:(0,s.jsx)(t.h1,{id:"virtualbox",children:"VirtualBox"})}),"\n",(0,s.jsxs)(t.p,{children:[(0,s.jsx)(t.a,{href:"https://www.virtualbox.org/",children:"VirtualBox"})," is an x86 and x86_64 virtualization software package developed by Oracle."]}),"\n",(0,s.jsx)(t.h2,{id:"before-you-start",children:"Before you start"}),"\n",(0,s.jsxs)(t.p,{children:["This section applies to new installations for both ",(0,s.jsx)(t.strong,{children:"Host"})," and ",(0,s.jsx)(t.strong,{children:"Guest"}),"."]}),"\n",(0,s.jsx)(t.h3,{id:"remove-prior-installation",children:"Remove prior installation"}),"\n",(0,s.jsxs)(t.p,{children:["It is important to uninstall any version of VirtualBox (or VirtualBox Guest Additions) that ",(0,s.jsx)(t.strong,{children:"was not"})," installed from the Software Center or there will be conflicts that will prevent the application to work.\nThis can usually be done by executing the following command from a terminal:"]}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-bash",children:"sudo /opt/VirtualBox/uninstall.sh\n"})}),"\n",(0,s.jsx)(t.h3,{id:"update-your-system",children:"Update your system"}),"\n",(0,s.jsx)(t.p,{children:"Ensure your system is up-to-date. This is very important because VirtualBox installs some kernel modules and the application will not work if your kernel is outdated."}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-bash",children:"sudo eopkg upgrade\n"})}),"\n",(0,s.jsx)(t.h3,{id:"determine-which-kernel-you-are-using",children:"Determine which kernel you are using"}),"\n",(0,s.jsxs)(t.p,{children:["Solus support both a ",(0,s.jsx)(t.code,{children:"current"})," and ",(0,s.jsx)(t.code,{children:"lts"})," kernel. It is important to install the version that corresponds to your kernel."]}),"\n",(0,s.jsx)(t.p,{children:"If you aren't sure which kernel you are running, run the following in terminal:"}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-bash",children:"uname -r\n"})}),"\n",(0,s.jsxs)(t.p,{children:["You will either have a ",(0,s.jsx)(t.code,{children:".current"})," or ",(0,s.jsx)(t.code,{children:".lts"})," suffix. Examples: ",(0,s.jsx)(t.code,{children:"5.13.1-187.current"})," or ",(0,s.jsx)(t.code,{children:"4.14.237-175.lts"})]}),"\n",(0,s.jsx)(t.h2,{id:"solus-as-host",children:"Solus as host"}),"\n",(0,s.jsx)(t.p,{children:"VirtualBox is available in the Software Center, select the package that matches your kernel."}),"\n",(0,s.jsxs)(t.table,{children:[(0,s.jsx)(t.thead,{children:(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.th,{children:"virtualbox"}),(0,s.jsx)(t.th,{children:"virtualbox-current"})]})}),(0,s.jsx)(t.tbody,{children:(0,s.jsxs)(t.tr,{children:[(0,s.jsxs)(t.td,{children:["VirtualBox host modules for the ",(0,s.jsx)(t.strong,{children:"linux-lts"})," kernel"]}),(0,s.jsxs)(t.td,{children:["VirtualBox host modules for the ",(0,s.jsx)(t.strong,{children:"linux-current"})," kernel"]})]})})]}),"\n",(0,s.jsxs)(t.p,{children:["You ",(0,s.jsx)(t.strong,{children:"must"})," reboot your computer before running VirtualBox for the first time."]}),"\n",(0,s.jsx)(t.h2,{id:"solus-as-guest",children:"Solus as guest"}),"\n",(0,s.jsx)(t.p,{children:"VirtualBox Guest Additions are available in the Software Center, select the package that matches kernel version on the Solus virtual machine."}),"\n",(0,s.jsxs)(t.table,{children:[(0,s.jsx)(t.thead,{children:(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.th,{children:"virtualbox-guest"}),(0,s.jsx)(t.th,{children:"virtualbox-guest-common"})]})}),(0,s.jsx)(t.tbody,{children:(0,s.jsxs)(t.tr,{children:[(0,s.jsxs)(t.td,{children:["VirtualBox guest modules for the ",(0,s.jsx)(t.strong,{children:"linux-lts"})," kernel"]}),(0,s.jsxs)(t.td,{children:["Install this package if the ",(0,s.jsx)(t.strong,{children:"linux-current"})," kernel is used"]})]})})]}),"\n",(0,s.jsxs)(t.p,{children:["You ",(0,s.jsx)(t.strong,{children:"must"})," reboot your virtual machine to load the newly installed modules"]}),"\n",(0,s.jsx)(t.h2,{id:"extra-configuration",children:"Extra configuration"}),"\n",(0,s.jsx)(t.h4,{id:"usb-controller",children:"USB controller"}),"\n",(0,s.jsxs)(t.p,{children:["If you want to use USB 2.0 or 3.0 in your virtual machine (and your hardware supports it), you have to install the ",(0,s.jsx)(t.a,{href:"https://www.virtualbox.org/manual/ch01.html#intro-installing",children:"extension pack"}),"."]}),"\n",(0,s.jsxs)(t.p,{children:["Note: Access to USB is granted by the user group ",(0,s.jsx)(t.code,{children:"vboxusers"})," on the ",(0,s.jsx)(t.strong,{children:"Host"})," operating system. You can add yourself to this group with the following command"]}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-bash",children:"sudo gpasswd -a $USER vboxusers\n"})}),"\n",(0,s.jsx)(t.h4,{id:"shared-folders",children:"Shared folders"}),"\n",(0,s.jsx)(t.p,{children:"Share folders let you access files from the host system from within a guest machine."}),"\n",(0,s.jsxs)(t.p,{children:[(0,s.jsx)(t.strong,{children:"Note:"})," auto-mounted shared folders are mounted into the ",(0,s.jsx)(t.code,{children:"/media"})," directory, along with the prefix ",(0,s.jsx)(t.code,{children:"sf_"}),". For example, the shared folder ",(0,s.jsx)(t.code,{children:"myfiles"})," would be mounted to ",(0,s.jsx)(t.code,{children:"/media/sf_myfiles"}),"."]}),"\n",(0,s.jsxs)(t.p,{children:["Access to the shared folders is only granted to the user group ",(0,s.jsx)(t.code,{children:"vboxsf"})," on the ",(0,s.jsx)(t.strong,{children:"Guest"})," operating system."]}),"\n",(0,s.jsx)(t.p,{children:"Execute these commands to set the permissions and add yourself to the group"}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-bash",children:"sudo gpasswd -a $USER vboxsf\n"})}),"\n",(0,s.jsx)(t.h2,{id:"troubleshooting",children:"Troubleshooting"}),"\n",(0,s.jsx)(t.p,{children:(0,s.jsx)(t.img,{alt:"VBOX Kernel",src:r(74848).Z+"",width:"500",height:"336"})}),"\n",(0,s.jsxs)(t.p,{children:["The Error ",(0,s.jsx)(t.code,{children:"Kernel driver not installed (rc=-1908)"})," may occur if"]}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsx)(t.li,{children:"The computer was not restarted before launching VirtualBox for the first time"}),"\n",(0,s.jsx)(t.li,{children:"The computer is not booted on the latest kernel. Make sure to apply the updates from the Software Center and restart your machine."}),"\n",(0,s.jsx)(t.li,{children:"The wrong VirtualBox package was installed. Please check the instructions just above to install the correct package for your kernel."}),"\n",(0,s.jsx)(t.li,{children:"VirtualBox was manually installed and it conflicts with the version installed from the Solus Repository."}),"\n"]})]})}function u(e={}){const{wrapper:t}={...(0,n.a)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(h,{...e})}):h(e)}},74848:(e,t,r)=>{r.d(t,{Z:()=>s});const s=r.p+"assets/images/vbox-kernel-85eb11034e02dafe61706f4d967580fe.png"},11151:(e,t,r)=>{r.d(t,{Z:()=>l,a:()=>i});var s=r(67294);const n={},o=s.createContext(n);function i(e){const t=s.useContext(o);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function l(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:i(e.components),s.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/74470af4.5551336b.js b/assets/js/74470af4.5551336b.js new file mode 100644 index 000000000..938b58b58 --- /dev/null +++ b/assets/js/74470af4.5551336b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([["6327"],{86728:function(e,t,r){r.r(t),r.d(t,{metadata:()=>s,contentTitle:()=>i,default:()=>h,assets:()=>a,toc:()=>d,frontMatter:()=>l});var s=JSON.parse('{"id":"user/software/virtualization/virtualbox","title":"VirtualBox","description":"VirtualBox is an x86 and x86_64 virtualization software package developed by Oracle.","source":"@site/docs/user/software/virtualization/virtualbox.md","sourceDirName":"user/software/virtualization","slug":"/user/software/virtualization/virtualbox","permalink":"/docs/user/software/virtualization/virtualbox","draft":false,"unlisted":false,"editUrl":"https://github.com/getsolus/help-center-docs/tree/master/docs/user/software/virtualization/virtualbox.md","tags":[],"version":"current","lastUpdatedAt":1733757592000,"frontMatter":{"title":"VirtualBox","summary":"Quick start guide for VirtualBox on Solus"},"sidebar":"userSidebar","previous":{"title":"Virtualization","permalink":"/docs/category/virtualization"},"next":{"title":"Web","permalink":"/docs/category/web"}}'),n=r("85893"),o=r("50065");let l={title:"VirtualBox",summary:"Quick start guide for VirtualBox on Solus"},i="VirtualBox",a={},d=[{value:"Before you start",id:"before-you-start",level:2},{value:"Remove prior installation",id:"remove-prior-installation",level:3},{value:"Update your system",id:"update-your-system",level:3},{value:"Determine which kernel you are using",id:"determine-which-kernel-you-are-using",level:3},{value:"Solus as host",id:"solus-as-host",level:2},{value:"Solus as guest",id:"solus-as-guest",level:2},{value:"Extra configuration",id:"extra-configuration",level:2},{value:"USB controller",id:"usb-controller",level:4},{value:"Shared folders",id:"shared-folders",level:4},{value:"Troubleshooting",id:"troubleshooting",level:2}];function u(e){let t={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",header:"header",img:"img",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,o.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.header,{children:(0,n.jsx)(t.h1,{id:"virtualbox",children:"VirtualBox"})}),"\n",(0,n.jsxs)(t.p,{children:[(0,n.jsx)(t.a,{href:"https://www.virtualbox.org/",children:"VirtualBox"})," is an x86 and x86_64 virtualization software package developed by Oracle."]}),"\n",(0,n.jsx)(t.h2,{id:"before-you-start",children:"Before you start"}),"\n",(0,n.jsxs)(t.p,{children:["This section applies to new installations for both ",(0,n.jsx)(t.strong,{children:"Host"})," and ",(0,n.jsx)(t.strong,{children:"Guest"}),"."]}),"\n",(0,n.jsx)(t.h3,{id:"remove-prior-installation",children:"Remove prior installation"}),"\n",(0,n.jsxs)(t.p,{children:["It is important to uninstall any version of VirtualBox (or VirtualBox Guest Additions) that ",(0,n.jsx)(t.strong,{children:"was not"})," installed from the Software Center or there will be conflicts that will prevent the application to work.\nThis can usually be done by executing the following command from a terminal:"]}),"\n",(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-bash",children:"sudo /opt/VirtualBox/uninstall.sh\n"})}),"\n",(0,n.jsx)(t.h3,{id:"update-your-system",children:"Update your system"}),"\n",(0,n.jsx)(t.p,{children:"Ensure your system is up-to-date. This is very important because VirtualBox installs some kernel modules and the application will not work if your kernel is outdated."}),"\n",(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-bash",children:"sudo eopkg upgrade\n"})}),"\n",(0,n.jsx)(t.h3,{id:"determine-which-kernel-you-are-using",children:"Determine which kernel you are using"}),"\n",(0,n.jsxs)(t.p,{children:["Solus support both a ",(0,n.jsx)(t.code,{children:"current"})," and ",(0,n.jsx)(t.code,{children:"lts"})," kernel. It is important to install the version that corresponds to your kernel."]}),"\n",(0,n.jsx)(t.p,{children:"If you aren't sure which kernel you are running, run the following in terminal:"}),"\n",(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-bash",children:"uname -r\n"})}),"\n",(0,n.jsxs)(t.p,{children:["You will either have a ",(0,n.jsx)(t.code,{children:".current"})," or ",(0,n.jsx)(t.code,{children:".lts"})," suffix. Examples: ",(0,n.jsx)(t.code,{children:"5.13.1-187.current"})," or ",(0,n.jsx)(t.code,{children:"4.14.237-175.lts"})]}),"\n",(0,n.jsx)(t.h2,{id:"solus-as-host",children:"Solus as host"}),"\n",(0,n.jsx)(t.p,{children:"VirtualBox is available in the Software Center, select the package that matches your kernel."}),"\n",(0,n.jsxs)(t.table,{children:[(0,n.jsx)(t.thead,{children:(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.th,{children:"virtualbox"}),(0,n.jsx)(t.th,{children:"virtualbox-current"})]})}),(0,n.jsx)(t.tbody,{children:(0,n.jsxs)(t.tr,{children:[(0,n.jsxs)(t.td,{children:["VirtualBox host modules for the ",(0,n.jsx)(t.strong,{children:"linux-lts"})," kernel"]}),(0,n.jsxs)(t.td,{children:["VirtualBox host modules for the ",(0,n.jsx)(t.strong,{children:"linux-current"})," kernel"]})]})})]}),"\n",(0,n.jsxs)(t.p,{children:["You ",(0,n.jsx)(t.strong,{children:"must"})," reboot your computer before running VirtualBox for the first time."]}),"\n",(0,n.jsx)(t.h2,{id:"solus-as-guest",children:"Solus as guest"}),"\n",(0,n.jsx)(t.p,{children:"VirtualBox Guest Additions are available in the Software Center, select the package that matches kernel version on the Solus virtual machine."}),"\n",(0,n.jsxs)(t.table,{children:[(0,n.jsx)(t.thead,{children:(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.th,{children:"virtualbox-guest"}),(0,n.jsx)(t.th,{children:"virtualbox-guest-common"})]})}),(0,n.jsx)(t.tbody,{children:(0,n.jsxs)(t.tr,{children:[(0,n.jsxs)(t.td,{children:["VirtualBox guest modules for the ",(0,n.jsx)(t.strong,{children:"linux-lts"})," kernel"]}),(0,n.jsxs)(t.td,{children:["Install this package if the ",(0,n.jsx)(t.strong,{children:"linux-current"})," kernel is used"]})]})})]}),"\n",(0,n.jsxs)(t.p,{children:["You ",(0,n.jsx)(t.strong,{children:"must"})," reboot your virtual machine to load the newly installed modules"]}),"\n",(0,n.jsx)(t.h2,{id:"extra-configuration",children:"Extra configuration"}),"\n",(0,n.jsx)(t.h4,{id:"usb-controller",children:"USB controller"}),"\n",(0,n.jsxs)(t.p,{children:["If you want to use USB 2.0 or 3.0 in your virtual machine (and your hardware supports it), you have to install the ",(0,n.jsx)(t.a,{href:"https://www.virtualbox.org/manual/ch01.html#intro-installing",children:"extension pack"}),"."]}),"\n",(0,n.jsxs)(t.p,{children:["Note: Access to USB is granted by the user group ",(0,n.jsx)(t.code,{children:"vboxusers"})," on the ",(0,n.jsx)(t.strong,{children:"Host"})," operating system. You can add yourself to this group with the following command"]}),"\n",(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-bash",children:"sudo gpasswd -a $USER vboxusers\n"})}),"\n",(0,n.jsx)(t.h4,{id:"shared-folders",children:"Shared folders"}),"\n",(0,n.jsx)(t.p,{children:"Share folders let you access files from the host system from within a guest machine."}),"\n",(0,n.jsxs)(t.p,{children:[(0,n.jsx)(t.strong,{children:"Note:"})," auto-mounted shared folders are mounted into the ",(0,n.jsx)(t.code,{children:"/media"})," directory, along with the prefix ",(0,n.jsx)(t.code,{children:"sf_"}),". For example, the shared folder ",(0,n.jsx)(t.code,{children:"myfiles"})," would be mounted to ",(0,n.jsx)(t.code,{children:"/media/sf_myfiles"}),"."]}),"\n",(0,n.jsxs)(t.p,{children:["Access to the shared folders is only granted to the user group ",(0,n.jsx)(t.code,{children:"vboxsf"})," on the ",(0,n.jsx)(t.strong,{children:"Guest"})," operating system."]}),"\n",(0,n.jsx)(t.p,{children:"Execute these commands to set the permissions and add yourself to the group"}),"\n",(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-bash",children:"sudo gpasswd -a $USER vboxsf\n"})}),"\n",(0,n.jsx)(t.h2,{id:"troubleshooting",children:"Troubleshooting"}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.img,{alt:"VBOX Kernel",src:r(65240).Z+"",width:"500",height:"336"})}),"\n",(0,n.jsxs)(t.p,{children:["The Error ",(0,n.jsx)(t.code,{children:"Kernel driver not installed (rc=-1908)"})," may occur if"]}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsx)(t.li,{children:"The computer was not restarted before launching VirtualBox for the first time"}),"\n",(0,n.jsx)(t.li,{children:"The computer is not booted on the latest kernel. Make sure to apply the updates from the Software Center and restart your machine."}),"\n",(0,n.jsx)(t.li,{children:"The wrong VirtualBox package was installed. Please check the instructions just above to install the correct package for your kernel."}),"\n",(0,n.jsx)(t.li,{children:"VirtualBox was manually installed and it conflicts with the version installed from the Solus Repository."}),"\n"]})]})}function h(e={}){let{wrapper:t}={...(0,o.a)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(u,{...e})}):u(e)}},65240:function(e,t,r){r.d(t,{Z:function(){return s}});let s=r.p+"assets/images/vbox-kernel-85eb11034e02dafe61706f4d967580fe.png"},50065:function(e,t,r){r.d(t,{Z:function(){return i},a:function(){return l}});var s=r(67294);let n={},o=s.createContext(n);function l(e){let t=s.useContext(o);return s.useMemo(function(){return"function"==typeof e?e(t):{...t,...e}},[t,e])}function i(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:l(e.components),s.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/75c41d11.97b0873a.js b/assets/js/75c41d11.97b0873a.js deleted file mode 100644 index c347d8cd3..000000000 --- a/assets/js/75c41d11.97b0873a.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[3337],{75584:(e,t,s)=>{s.r(t),s.d(t,{assets:()=>d,contentTitle:()=>o,default:()=>l,frontMatter:()=>i,metadata:()=>c,toc:()=>a});var r=s(85893),n=s(11151);const i={title:"Tips and Tricks",summary:"Helpful tips and tricks for using XFCE on Solus"},o="Tips and Tricks",c={id:"user/editions/xfce/tips-and-tricks",title:"Tips and Tricks",description:"XFCE Keyboard Shortcuts",source:"@site/docs/user/editions/xfce/tips-and-tricks.md",sourceDirName:"user/editions/xfce",slug:"/user/editions/xfce/tips-and-tricks",permalink:"/docs/user/editions/xfce/tips-and-tricks",draft:!1,unlisted:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/editions/xfce/tips-and-tricks.md",tags:[],version:"current",lastUpdatedAt:1732716912e3,frontMatter:{title:"Tips and Tricks",summary:"Helpful tips and tricks for using XFCE on Solus"},sidebar:"userSidebar",previous:{title:"Configuration",permalink:"/docs/user/editions/xfce/configuration"},next:{title:"Hardware",permalink:"/docs/user/hardware/"}},d={},a=[{value:"XFCE Keyboard Shortcuts",id:"xfce-keyboard-shortcuts",level:2}];function u(e){const t={h1:"h1",h2:"h2",header:"header",p:"p",...(0,n.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.header,{children:(0,r.jsx)(t.h1,{id:"tips-and-tricks",children:"Tips and Tricks"})}),"\n",(0,r.jsx)(t.h2,{id:"xfce-keyboard-shortcuts",children:"XFCE Keyboard Shortcuts"}),"\n",(0,r.jsx)(t.p,{children:"TODO: Provide a table of short-cuts like we did for Budgie"}),"\n",(0,r.jsx)(t.p,{children:"TODO: Add a few other tips and tricks useful to XFCE users"})]})}function l(e={}){const{wrapper:t}={...(0,n.a)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(u,{...e})}):u(e)}},11151:(e,t,s)=>{s.d(t,{Z:()=>c,a:()=>o});var r=s(67294);const n={},i=r.createContext(n);function o(e){const t=r.useContext(i);return r.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function c(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:o(e.components),r.createElement(i.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/75c41d11.b31164a6.js b/assets/js/75c41d11.b31164a6.js new file mode 100644 index 000000000..1bf52550f --- /dev/null +++ b/assets/js/75c41d11.b31164a6.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([["4998"],{94341:function(e,t,s){s.r(t),s.d(t,{metadata:()=>r,contentTitle:()=>c,default:()=>l,assets:()=>d,toc:()=>a,frontMatter:()=>o});var r=JSON.parse('{"id":"user/editions/xfce/tips-and-tricks","title":"Tips and Tricks","description":"XFCE Keyboard Shortcuts","source":"@site/docs/user/editions/xfce/tips-and-tricks.md","sourceDirName":"user/editions/xfce","slug":"/user/editions/xfce/tips-and-tricks","permalink":"/docs/user/editions/xfce/tips-and-tricks","draft":false,"unlisted":false,"editUrl":"https://github.com/getsolus/help-center-docs/tree/master/docs/user/editions/xfce/tips-and-tricks.md","tags":[],"version":"current","lastUpdatedAt":1733757592000,"frontMatter":{"title":"Tips and Tricks","summary":"Helpful tips and tricks for using XFCE on Solus"},"sidebar":"userSidebar","previous":{"title":"Configuration","permalink":"/docs/user/editions/xfce/configuration"},"next":{"title":"Hardware","permalink":"/docs/user/hardware/"}}'),n=s("85893"),i=s("50065");let o={title:"Tips and Tricks",summary:"Helpful tips and tricks for using XFCE on Solus"},c="Tips and Tricks",d={},a=[{value:"XFCE Keyboard Shortcuts",id:"xfce-keyboard-shortcuts",level:2}];function u(e){let t={h1:"h1",h2:"h2",header:"header",p:"p",...(0,i.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.header,{children:(0,n.jsx)(t.h1,{id:"tips-and-tricks",children:"Tips and Tricks"})}),"\n",(0,n.jsx)(t.h2,{id:"xfce-keyboard-shortcuts",children:"XFCE Keyboard Shortcuts"}),"\n",(0,n.jsx)(t.p,{children:"TODO: Provide a table of short-cuts like we did for Budgie"}),"\n",(0,n.jsx)(t.p,{children:"TODO: Add a few other tips and tricks useful to XFCE users"})]})}function l(e={}){let{wrapper:t}={...(0,i.a)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(u,{...e})}):u(e)}},50065:function(e,t,s){s.d(t,{Z:function(){return c},a:function(){return o}});var r=s(67294);let n={},i=r.createContext(n);function o(e){let t=r.useContext(i);return r.useMemo(function(){return"function"==typeof e?e(t):{...t,...e}},[t,e])}function c(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:o(e.components),r.createElement(i.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/7734.0f69c48a.js b/assets/js/7734.0f69c48a.js deleted file mode 100644 index 69dc534ce..000000000 --- a/assets/js/7734.0f69c48a.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[7734],{96325:(e,t,n)=>{n.d(t,{Z:()=>l});n(67294);var s=n(36905),i=n(55361),o=n(42704),r=n(85893);function l(e){let{className:t}=e;return(0,r.jsx)("main",{className:(0,s.Z)("container margin-vert--xl",t),children:(0,r.jsx)("div",{className:"row",children:(0,r.jsxs)("div",{className:"col col--6 col--offset-3",children:[(0,r.jsx)(o.Z,{as:"h1",className:"hero__title",children:(0,r.jsx)(i.Z,{id:"theme.NotFound.title",description:"The title of the 404 page",children:"Page Not Found"})}),(0,r.jsx)("p",{children:(0,r.jsx)(i.Z,{id:"theme.NotFound.p1",description:"The first paragraph of the 404 page",children:"We could not find what you were looking for."})}),(0,r.jsx)("p",{children:(0,r.jsx)(i.Z,{id:"theme.NotFound.p2",description:"The 2nd paragraph of the 404 page",children:"Please contact the owner of the site that linked you to the original URL and let them know their link is broken."})})]})})})}},57734:(e,t,n)=>{n.r(t),n.d(t,{default:()=>a});n(67294);var s=n(55361),i=n(96984),o=n(48714),r=n(96325),l=n(85893);function a(){const e=(0,s.I)({id:"theme.NotFound.title",message:"Page Not Found"});return(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)(i.d,{title:e}),(0,l.jsx)(o.Z,{children:(0,l.jsx)(r.Z,{})})]})}}}]); \ No newline at end of file diff --git a/assets/js/793c86b2.06954f0a.js b/assets/js/793c86b2.06954f0a.js deleted file mode 100644 index ec3d80881..000000000 --- a/assets/js/793c86b2.06954f0a.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[168],{41426:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>r,contentTitle:()=>h,default:()=>c,frontMatter:()=>o,metadata:()=>a,toc:()=>t});var i=s(85893),l=s(11151);const o={title:"Command Line",summary:"Installation and configuration of popular command line programs on Solus"},h="Command Line",a={id:"user/software/command-line/index",title:"Command Line",description:"Changing Shell",source:"@site/docs/user/software/command-line/index.md",sourceDirName:"user/software/command-line",slug:"/user/software/command-line/",permalink:"/docs/user/software/command-line/",draft:!1,unlisted:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/software/command-line/index.md",tags:[],version:"current",lastUpdatedAt:1732716912e3,frontMatter:{title:"Command Line",summary:"Installation and configuration of popular command line programs on Solus"},sidebar:"userSidebar",previous:{title:"DroidCam",permalink:"/docs/user/software/camera/droidcam"},next:{title:"Configuration File Locations",permalink:"/docs/user/software/configuration_files"}},r={},t=[{value:"Changing Shell",id:"changing-shell",level:2},{value:"Installation",id:"installation",level:3},{value:"Switching",id:"switching",level:3},{value:"Troubleshooting",id:"troubleshooting",level:3},{value:"fzf",id:"fzf",level:2},{value:"Installation",id:"installation-1",level:3},{value:"Fuzzy Auto-Completion",id:"fuzzy-auto-completion",level:3},{value:"Bash",id:"bash",level:4},{value:"Zsh",id:"zsh",level:4},{value:"Key Bindings",id:"key-bindings",level:3},{value:"Bash",id:"bash-1",level:4},{value:"Fish",id:"fish",level:4},{value:"Zsh",id:"zsh-1",level:4},{value:"Powerline Shell Prompt",id:"powerline-shell-prompt",level:2},{value:"Installation",id:"installation-2",level:3},{value:"Shell Prompts",id:"shell-prompts",level:3},{value:"Bash",id:"bash-2",level:4},{value:"Busybox and dash",id:"busybox-and-dash",level:4},{value:"Fish",id:"fish-1",level:4},{value:"Zsh",id:"zsh-2",level:4}];function d(e){const n={a:"a",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",h4:"h4",header:"header",li:"li",p:"p",pre:"pre",ul:"ul",...(0,l.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.header,{children:(0,i.jsx)(n.h1,{id:"command-line",children:"Command Line"})}),"\n",(0,i.jsx)(n.h2,{id:"changing-shell",children:"Changing Shell"}),"\n",(0,i.jsx)(n.p,{children:"When using a terminal session to perform command-line activities, a Unix shell is used to interpret commands. The default shell on Solus is Bash, however changing your shell may enable additional features and functionality."}),"\n",(0,i.jsxs)(n.p,{children:["Solus makes available other shells via our repository, with a full list available in ",(0,i.jsx)(n.code,{children:"/usr/share/defaults/etc/shells"}),". Common shells, aside from Bash, are:"]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"http://gondor.apana.org.au/~herbert/dash/",children:"DASH"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"https://fishshell.com/",children:"fish"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"https://zsh.sourceforge.io/",children:"zsh"})}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"installation",children:"Installation"}),"\n",(0,i.jsxs)(n.p,{children:["In order to use a shell different from Bash, you may need to install the respective package for the shell to be able to work. You will find those packages in the Software Center within the ",(0,i.jsx)(n.em,{children:"System utilities"})," category, or via the command-line with ",(0,i.jsx)(n.code,{children:"sudo eopkg install <Name of the Shell>"}),"."]}),"\n",(0,i.jsx)(n.p,{children:"Example:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"sudo eopkg install fish\n"})}),"\n",(0,i.jsx)(n.h3,{id:"switching",children:"Switching"}),"\n",(0,i.jsxs)(n.p,{children:["To switch to another shell, first install the appropriate package, followed by the command ",(0,i.jsx)(n.code,{children:"chsh"})," (change shell) to change the shell for your user session, using the path provided in ",(0,i.jsx)(n.code,{children:"/usr/share/defaults/etc/shells"}),". Lastly you need to log out and back in again for the change to take effect."]}),"\n",(0,i.jsx)(n.p,{children:"Example:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["For zsh: ",(0,i.jsx)(n.code,{children:"chsh -s /bin/zsh"})]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["For fish: ",(0,i.jsx)(n.code,{children:"chsh -s /usr/bin/fish"})]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"troubleshooting",children:"Troubleshooting"}),"\n",(0,i.jsxs)(n.p,{children:["If the default shell is not changed, you must add the shell to ",(0,i.jsx)(n.code,{children:"/etc/shells"})," via the command ",(0,i.jsx)(n.code,{children:"sh"})," with ",(0,i.jsx)(n.code,{children:"sudo"}),"."]}),"\n",(0,i.jsx)(n.p,{children:"Example:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["For zsh: ",(0,i.jsx)(n.code,{children:'echo "/bin/zsh" | sudo tee -a /etc/shells'})]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["For fish: ",(0,i.jsx)(n.code,{children:'echo "/usr/bin/fish" | sudo tee -a /etc/shells'})]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"fzf",children:"fzf"}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.a,{href:"https://github.com/junegunn/fzf",children:"fzf"})," is a general-purpose command-line fuzzy finder. It can be used as an interactive Unix filter with any list: files, command history, processes, hostnames, bookmarks, git commits, etc."]}),"\n",(0,i.jsx)(n.h3,{id:"installation-1",children:"Installation"}),"\n",(0,i.jsxs)(n.p,{children:["The fzf project consists of the following components: an ",(0,i.jsx)(n.code,{children:"fzf"})," executable, an ",(0,i.jsx)(n.code,{children:"fzf-tmux"})," script for launching fzf in a tmux pane, shell extensions (including key bindings and command-line fuzzy auto-completion), and a vim/Neovim plugin file. They are all available in the ",(0,i.jsx)(n.code,{children:"fzf"})," package in the Software Center or via eopkg in a terminal:"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"sudo eopkg it fzf\n"})}),"\n",(0,i.jsxs)(n.p,{children:["The shell extensions are not enabled by default after the ",(0,i.jsx)(n.code,{children:"fzf"})," package is installed. The procedures to enable these features are described below. For more tips and examples on the usage of ",(0,i.jsx)(n.code,{children:"fzf"}),", visit its ",(0,i.jsx)(n.a,{href:"https://github.com/junegunn/fzf",children:"GitHub repository"})," and ",(0,i.jsx)(n.a,{href:"https://github.com/junegunn/fzf/wiki/examples",children:"Wiki pages"}),"."]}),"\n",(0,i.jsx)(n.h3,{id:"fuzzy-auto-completion",children:"Fuzzy Auto-Completion"}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.a,{href:"https://github.com/junegunn/fzf#fuzzy-completion-for-bash-and-zsh",children:"Fuzzy completion"})," for files and directories can be triggered by a trigger sequence (",(0,i.jsx)(n.code,{children:"**"})," by default) followed by the ",(0,i.jsx)(n.code,{children:"TAB"})," key for ",(0,i.jsx)(n.code,{children:"bash"})," and ",(0,i.jsx)(n.code,{children:"zsh"}),". To enable this feature, add the following lines to the shell configuration file depending on the shell you use (",(0,i.jsx)(n.code,{children:"~/.bashrc"})," for ",(0,i.jsx)(n.code,{children:"bash"})," and ",(0,i.jsx)(n.code,{children:"~/.zshrc"})," for ",(0,i.jsx)(n.code,{children:"zsh"}),")."]}),"\n",(0,i.jsx)(n.h4,{id:"bash",children:"Bash"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"FZF_COMPLETION_FILE=/usr/share/bash-completion/completions/fzf\n[[ -f $FZF_COMPLETION_FILE ]] && source $FZF_COMPLETION_FILE\n"})}),"\n",(0,i.jsx)(n.h4,{id:"zsh",children:"Zsh"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"FZF_COMPLETION_FILE=/usr/share/zsh/site-functions/_fzf\n[[ -f $FZF_COMPLETION_FILE ]] && source $FZF_COMPLETION_FILE\n"})}),"\n",(0,i.jsx)(n.h3,{id:"key-bindings",children:"Key Bindings"}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.code,{children:"fzf"})," can use specific ",(0,i.jsx)(n.a,{href:"https://github.com/junegunn/fzf#key-bindings-for-command-line",children:"key bindings"})," to trigger a search over a list of files, command history and directories and paste the result onto the command-line. Follow these steps to set up the key bindings for your favorite shell."]}),"\n",(0,i.jsx)(n.h4,{id:"bash-1",children:"Bash"}),"\n",(0,i.jsxs)(n.p,{children:["Add the following content to ",(0,i.jsx)(n.code,{children:"~/.bashrc"}),":"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"FZF_KEYBINDING_FILE=/usr/share/fzf/key-bindings.bash\n[[ -f $FZF_KEYBINDING_FILE ]] && source $FZF_KEYBINDING_FILE\n"})}),"\n",(0,i.jsx)(n.h4,{id:"fish",children:"Fish"}),"\n",(0,i.jsx)(n.p,{children:"First create the following directory if it does not already exist:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"mkdir -p $HOME/.config/fish/functions\n"})}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.code,{children:"cd"})," into this directory and make a file ",(0,i.jsx)(n.code,{children:"fish_user_key_bindings.fish"})," with the following content:"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"function fish_user_key_bindings\n fzf_key_bindings\nend\n"})}),"\n",(0,i.jsx)(n.p,{children:"Then create the following symlink:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"ln -s /usr/share/fzf/key-bindings.fish $HOME/.config/fish/functions/fzf_key_bindings.fish\n"})}),"\n",(0,i.jsx)(n.h4,{id:"zsh-1",children:"Zsh"}),"\n",(0,i.jsxs)(n.p,{children:["Add the following content to ",(0,i.jsx)(n.code,{children:"~/.zshrc"}),":"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"FZF_KEYBINDING_FILE=/usr/share/fzf/key-bindings.zsh\n[[ -f $FZF_KEYBINDING_FILE ]] && source $FZF_KEYBINDING_FILE\n"})}),"\n",(0,i.jsx)(n.h2,{id:"powerline-shell-prompt",children:"Powerline Shell Prompt"}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.a,{href:"https://github.com/powerline",children:"Powerline"})," is a statusline plugin for vim, and provides statuslines and prompts for several other applications, including zsh, bash, tmux, IPython, Awesome and Qtile."]}),"\n",(0,i.jsx)(n.h3,{id:"installation-2",children:"Installation"}),"\n",(0,i.jsxs)(n.p,{children:["Powerline has two components, the plugin system itself ",(0,i.jsx)(n.code,{children:"powerline"})," and the\nfonts ",(0,i.jsx)(n.code,{children:"powerline-fonts"}),". Both are available in the Software Center or via ",(0,i.jsx)(n.code,{children:"eopkg"})," in a terminal:"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"sudo eopkg it powerline powerline-fonts\n"})}),"\n",(0,i.jsxs)(n.p,{children:["To get powerline working inside your terminal, you need to add the following commands to the ",(0,i.jsx)(n.code,{children:".bashrc"})," inside your ",(0,i.jsx)(n.code,{children:"$HOME"})," directory."]}),"\n",(0,i.jsx)(n.h3,{id:"shell-prompts",children:"Shell Prompts"}),"\n",(0,i.jsx)(n.p,{children:"The Powerline daemon is not running automatically by any of the bindings. It is advised to add the following before any other powerline-related code in the shell configuration file"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"powerline-daemon -q\n"})}),"\n",(0,i.jsx)(n.h4,{id:"bash-2",children:"Bash"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"powerline-daemon -q\nPOWERLINE_BASH_CONTINUATION=1\nPOWERLINE_BASH_SELECT=1\nsource /usr/lib/python3.11/site-packages/powerline/bindings/bash/powerline.sh\n"})}),"\n",(0,i.jsx)(n.h4,{id:"busybox-and-dash",children:"Busybox and dash"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"source /usr/lib/python3.11/site-packages/powerline/bindings/shell/powerline.sh\n"})}),"\n",(0,i.jsx)(n.h4,{id:"fish-1",children:"Fish"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:'set fish_function_path $fish_function_path "/usr/lib/python3.11/site-packages/powerline/bindings/fish/"\n'})}),"\n",(0,i.jsx)(n.h4,{id:"zsh-2",children:"Zsh"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"source /usr/lib/python3.11/site-packages/powerline/bindings/zsh/powerline.zsh\n"})}),"\n",(0,i.jsxs)(n.p,{children:["Read more about powerline on its ",(0,i.jsx)(n.a,{href:"https://powerline.readthedocs.io/en/master/usage.html#shell-prompts-requirements",children:"docs website"})]})]})}function c(e={}){const{wrapper:n}={...(0,l.a)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(d,{...e})}):d(e)}},11151:(e,n,s)=>{s.d(n,{Z:()=>a,a:()=>h});var i=s(67294);const l={},o=i.createContext(l);function h(e){const n=i.useContext(o);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(l):e.components||l:h(e.components),i.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/793c86b2.b1f96949.js b/assets/js/793c86b2.b1f96949.js new file mode 100644 index 000000000..3b12dcf6a --- /dev/null +++ b/assets/js/793c86b2.b1f96949.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([["1318"],{73426:function(e,n,s){s.r(n),s.d(n,{metadata:()=>i,contentTitle:()=>h,default:()=>c,assets:()=>r,toc:()=>t,frontMatter:()=>a});var i=JSON.parse('{"id":"user/software/command-line/index","title":"Command Line","description":"Changing Shell","source":"@site/docs/user/software/command-line/index.md","sourceDirName":"user/software/command-line","slug":"/user/software/command-line/","permalink":"/docs/user/software/command-line/","draft":false,"unlisted":false,"editUrl":"https://github.com/getsolus/help-center-docs/tree/master/docs/user/software/command-line/index.md","tags":[],"version":"current","lastUpdatedAt":1733757592000,"frontMatter":{"title":"Command Line","summary":"Installation and configuration of popular command line programs on Solus"},"sidebar":"userSidebar","previous":{"title":"DroidCam","permalink":"/docs/user/software/camera/droidcam"},"next":{"title":"Configuration File Locations","permalink":"/docs/user/software/configuration_files"}}'),l=s("85893"),o=s("50065");let a={title:"Command Line",summary:"Installation and configuration of popular command line programs on Solus"},h="Command Line",r={},t=[{value:"Changing Shell",id:"changing-shell",level:2},{value:"Installation",id:"installation",level:3},{value:"Switching",id:"switching",level:3},{value:"Troubleshooting",id:"troubleshooting",level:3},{value:"fzf",id:"fzf",level:2},{value:"Installation",id:"installation-1",level:3},{value:"Fuzzy Auto-Completion",id:"fuzzy-auto-completion",level:3},{value:"Bash",id:"bash",level:4},{value:"Zsh",id:"zsh",level:4},{value:"Key Bindings",id:"key-bindings",level:3},{value:"Bash",id:"bash-1",level:4},{value:"Fish",id:"fish",level:4},{value:"Zsh",id:"zsh-1",level:4},{value:"Powerline Shell Prompt",id:"powerline-shell-prompt",level:2},{value:"Installation",id:"installation-2",level:3},{value:"Shell Prompts",id:"shell-prompts",level:3},{value:"Bash",id:"bash-2",level:4},{value:"Busybox and dash",id:"busybox-and-dash",level:4},{value:"Fish",id:"fish-1",level:4},{value:"Zsh",id:"zsh-2",level:4}];function d(e){let n={a:"a",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",h4:"h4",header:"header",li:"li",p:"p",pre:"pre",ul:"ul",...(0,o.a)(),...e.components};return(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)(n.header,{children:(0,l.jsx)(n.h1,{id:"command-line",children:"Command Line"})}),"\n",(0,l.jsx)(n.h2,{id:"changing-shell",children:"Changing Shell"}),"\n",(0,l.jsx)(n.p,{children:"When using a terminal session to perform command-line activities, a Unix shell is used to interpret commands. The default shell on Solus is Bash, however changing your shell may enable additional features and functionality."}),"\n",(0,l.jsxs)(n.p,{children:["Solus makes available other shells via our repository, with a full list available in ",(0,l.jsx)(n.code,{children:"/usr/share/defaults/etc/shells"}),". Common shells, aside from Bash, are:"]}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsx)(n.li,{children:(0,l.jsx)(n.a,{href:"http://gondor.apana.org.au/~herbert/dash/",children:"DASH"})}),"\n",(0,l.jsx)(n.li,{children:(0,l.jsx)(n.a,{href:"https://fishshell.com/",children:"fish"})}),"\n",(0,l.jsx)(n.li,{children:(0,l.jsx)(n.a,{href:"https://zsh.sourceforge.io/",children:"zsh"})}),"\n"]}),"\n",(0,l.jsx)(n.h3,{id:"installation",children:"Installation"}),"\n",(0,l.jsxs)(n.p,{children:["In order to use a shell different from Bash, you may need to install the respective package for the shell to be able to work. You will find those packages in the Software Center within the ",(0,l.jsx)(n.em,{children:"System utilities"})," category, or via the command-line with ",(0,l.jsx)(n.code,{children:"sudo eopkg install <Name of the Shell>"}),"."]}),"\n",(0,l.jsx)(n.p,{children:"Example:"}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-bash",children:"sudo eopkg install fish\n"})}),"\n",(0,l.jsx)(n.h3,{id:"switching",children:"Switching"}),"\n",(0,l.jsxs)(n.p,{children:["To switch to another shell, first install the appropriate package, followed by the command ",(0,l.jsx)(n.code,{children:"chsh"})," (change shell) to change the shell for your user session, using the path provided in ",(0,l.jsx)(n.code,{children:"/usr/share/defaults/etc/shells"}),". Lastly you need to log out and back in again for the change to take effect."]}),"\n",(0,l.jsx)(n.p,{children:"Example:"}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsxs)(n.li,{children:["\n",(0,l.jsxs)(n.p,{children:["For zsh: ",(0,l.jsx)(n.code,{children:"chsh -s /bin/zsh"})]}),"\n"]}),"\n",(0,l.jsxs)(n.li,{children:["\n",(0,l.jsxs)(n.p,{children:["For fish: ",(0,l.jsx)(n.code,{children:"chsh -s /usr/bin/fish"})]}),"\n"]}),"\n"]}),"\n",(0,l.jsx)(n.h3,{id:"troubleshooting",children:"Troubleshooting"}),"\n",(0,l.jsxs)(n.p,{children:["If the default shell is not changed, you must add the shell to ",(0,l.jsx)(n.code,{children:"/etc/shells"})," via the command ",(0,l.jsx)(n.code,{children:"sh"})," with ",(0,l.jsx)(n.code,{children:"sudo"}),"."]}),"\n",(0,l.jsx)(n.p,{children:"Example:"}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsxs)(n.li,{children:["\n",(0,l.jsxs)(n.p,{children:["For zsh: ",(0,l.jsx)(n.code,{children:'echo "/bin/zsh" | sudo tee -a /etc/shells'})]}),"\n"]}),"\n",(0,l.jsxs)(n.li,{children:["\n",(0,l.jsxs)(n.p,{children:["For fish: ",(0,l.jsx)(n.code,{children:'echo "/usr/bin/fish" | sudo tee -a /etc/shells'})]}),"\n"]}),"\n"]}),"\n",(0,l.jsx)(n.h2,{id:"fzf",children:"fzf"}),"\n",(0,l.jsxs)(n.p,{children:[(0,l.jsx)(n.a,{href:"https://github.com/junegunn/fzf",children:"fzf"})," is a general-purpose command-line fuzzy finder. It can be used as an interactive Unix filter with any list: files, command history, processes, hostnames, bookmarks, git commits, etc."]}),"\n",(0,l.jsx)(n.h3,{id:"installation-1",children:"Installation"}),"\n",(0,l.jsxs)(n.p,{children:["The fzf project consists of the following components: an ",(0,l.jsx)(n.code,{children:"fzf"})," executable, an ",(0,l.jsx)(n.code,{children:"fzf-tmux"})," script for launching fzf in a tmux pane, shell extensions (including key bindings and command-line fuzzy auto-completion), and a vim/Neovim plugin file. They are all available in the ",(0,l.jsx)(n.code,{children:"fzf"})," package in the Software Center or via eopkg in a terminal:"]}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-bash",children:"sudo eopkg it fzf\n"})}),"\n",(0,l.jsxs)(n.p,{children:["The shell extensions are not enabled by default after the ",(0,l.jsx)(n.code,{children:"fzf"})," package is installed. The procedures to enable these features are described below. For more tips and examples on the usage of ",(0,l.jsx)(n.code,{children:"fzf"}),", visit its ",(0,l.jsx)(n.a,{href:"https://github.com/junegunn/fzf",children:"GitHub repository"})," and ",(0,l.jsx)(n.a,{href:"https://github.com/junegunn/fzf/wiki/examples",children:"Wiki pages"}),"."]}),"\n",(0,l.jsx)(n.h3,{id:"fuzzy-auto-completion",children:"Fuzzy Auto-Completion"}),"\n",(0,l.jsxs)(n.p,{children:[(0,l.jsx)(n.a,{href:"https://github.com/junegunn/fzf#fuzzy-completion-for-bash-and-zsh",children:"Fuzzy completion"})," for files and directories can be triggered by a trigger sequence (",(0,l.jsx)(n.code,{children:"**"})," by default) followed by the ",(0,l.jsx)(n.code,{children:"TAB"})," key for ",(0,l.jsx)(n.code,{children:"bash"})," and ",(0,l.jsx)(n.code,{children:"zsh"}),". To enable this feature, add the following lines to the shell configuration file depending on the shell you use (",(0,l.jsx)(n.code,{children:"~/.bashrc"})," for ",(0,l.jsx)(n.code,{children:"bash"})," and ",(0,l.jsx)(n.code,{children:"~/.zshrc"})," for ",(0,l.jsx)(n.code,{children:"zsh"}),")."]}),"\n",(0,l.jsx)(n.h4,{id:"bash",children:"Bash"}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-bash",children:"FZF_COMPLETION_FILE=/usr/share/bash-completion/completions/fzf\n[[ -f $FZF_COMPLETION_FILE ]] && source $FZF_COMPLETION_FILE\n"})}),"\n",(0,l.jsx)(n.h4,{id:"zsh",children:"Zsh"}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-bash",children:"FZF_COMPLETION_FILE=/usr/share/zsh/site-functions/_fzf\n[[ -f $FZF_COMPLETION_FILE ]] && source $FZF_COMPLETION_FILE\n"})}),"\n",(0,l.jsx)(n.h3,{id:"key-bindings",children:"Key Bindings"}),"\n",(0,l.jsxs)(n.p,{children:[(0,l.jsx)(n.code,{children:"fzf"})," can use specific ",(0,l.jsx)(n.a,{href:"https://github.com/junegunn/fzf#key-bindings-for-command-line",children:"key bindings"})," to trigger a search over a list of files, command history and directories and paste the result onto the command-line. Follow these steps to set up the key bindings for your favorite shell."]}),"\n",(0,l.jsx)(n.h4,{id:"bash-1",children:"Bash"}),"\n",(0,l.jsxs)(n.p,{children:["Add the following content to ",(0,l.jsx)(n.code,{children:"~/.bashrc"}),":"]}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-bash",children:"FZF_KEYBINDING_FILE=/usr/share/fzf/key-bindings.bash\n[[ -f $FZF_KEYBINDING_FILE ]] && source $FZF_KEYBINDING_FILE\n"})}),"\n",(0,l.jsx)(n.h4,{id:"fish",children:"Fish"}),"\n",(0,l.jsx)(n.p,{children:"First create the following directory if it does not already exist:"}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-bash",children:"mkdir -p $HOME/.config/fish/functions\n"})}),"\n",(0,l.jsxs)(n.p,{children:[(0,l.jsx)(n.code,{children:"cd"})," into this directory and make a file ",(0,l.jsx)(n.code,{children:"fish_user_key_bindings.fish"})," with the following content:"]}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-bash",children:"function fish_user_key_bindings\n fzf_key_bindings\nend\n"})}),"\n",(0,l.jsx)(n.p,{children:"Then create the following symlink:"}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-bash",children:"ln -s /usr/share/fzf/key-bindings.fish $HOME/.config/fish/functions/fzf_key_bindings.fish\n"})}),"\n",(0,l.jsx)(n.h4,{id:"zsh-1",children:"Zsh"}),"\n",(0,l.jsxs)(n.p,{children:["Add the following content to ",(0,l.jsx)(n.code,{children:"~/.zshrc"}),":"]}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-bash",children:"FZF_KEYBINDING_FILE=/usr/share/fzf/key-bindings.zsh\n[[ -f $FZF_KEYBINDING_FILE ]] && source $FZF_KEYBINDING_FILE\n"})}),"\n",(0,l.jsx)(n.h2,{id:"powerline-shell-prompt",children:"Powerline Shell Prompt"}),"\n",(0,l.jsxs)(n.p,{children:[(0,l.jsx)(n.a,{href:"https://github.com/powerline",children:"Powerline"})," is a statusline plugin for vim, and provides statuslines and prompts for several other applications, including zsh, bash, tmux, IPython, Awesome and Qtile."]}),"\n",(0,l.jsx)(n.h3,{id:"installation-2",children:"Installation"}),"\n",(0,l.jsxs)(n.p,{children:["Powerline has two components, the plugin system itself ",(0,l.jsx)(n.code,{children:"powerline"})," and the\nfonts ",(0,l.jsx)(n.code,{children:"powerline-fonts"}),". Both are available in the Software Center or via ",(0,l.jsx)(n.code,{children:"eopkg"})," in a terminal:"]}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-bash",children:"sudo eopkg it powerline powerline-fonts\n"})}),"\n",(0,l.jsxs)(n.p,{children:["To get powerline working inside your terminal, you need to add the following commands to the ",(0,l.jsx)(n.code,{children:".bashrc"})," inside your ",(0,l.jsx)(n.code,{children:"$HOME"})," directory."]}),"\n",(0,l.jsx)(n.h3,{id:"shell-prompts",children:"Shell Prompts"}),"\n",(0,l.jsx)(n.p,{children:"The Powerline daemon is not running automatically by any of the bindings. It is advised to add the following before any other powerline-related code in the shell configuration file"}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-bash",children:"powerline-daemon -q\n"})}),"\n",(0,l.jsx)(n.h4,{id:"bash-2",children:"Bash"}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-bash",children:"powerline-daemon -q\nPOWERLINE_BASH_CONTINUATION=1\nPOWERLINE_BASH_SELECT=1\nsource /usr/lib/python3.11/site-packages/powerline/bindings/bash/powerline.sh\n"})}),"\n",(0,l.jsx)(n.h4,{id:"busybox-and-dash",children:"Busybox and dash"}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-bash",children:"source /usr/lib/python3.11/site-packages/powerline/bindings/shell/powerline.sh\n"})}),"\n",(0,l.jsx)(n.h4,{id:"fish-1",children:"Fish"}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-bash",children:'set fish_function_path $fish_function_path "/usr/lib/python3.11/site-packages/powerline/bindings/fish/"\n'})}),"\n",(0,l.jsx)(n.h4,{id:"zsh-2",children:"Zsh"}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-bash",children:"source /usr/lib/python3.11/site-packages/powerline/bindings/zsh/powerline.zsh\n"})}),"\n",(0,l.jsxs)(n.p,{children:["Read more about powerline on its ",(0,l.jsx)(n.a,{href:"https://powerline.readthedocs.io/en/master/usage.html#shell-prompts-requirements",children:"docs website"})]})]})}function c(e={}){let{wrapper:n}={...(0,o.a)(),...e.components};return n?(0,l.jsx)(n,{...e,children:(0,l.jsx)(d,{...e})}):d(e)}},50065:function(e,n,s){s.d(n,{Z:function(){return h},a:function(){return a}});var i=s(67294);let l={},o=i.createContext(l);function a(e){let n=i.useContext(o);return i.useMemo(function(){return"function"==typeof e?e(n):{...n,...e}},[n,e])}function h(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(l):e.components||l:a(e.components),i.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/7a24477a.cb1e3345.js b/assets/js/7a24477a.cb1e3345.js new file mode 100644 index 000000000..f23475b3c --- /dev/null +++ b/assets/js/7a24477a.cb1e3345.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([["1990"],{20095:function(e,t,i){i.r(t),i.d(t,{metadata:()=>n,contentTitle:()=>l,default:()=>h,assets:()=>a,toc:()=>u,frontMatter:()=>r});var n=JSON.parse('{"id":"user/contributing/getting-involved","title":"Getting Involved","description":"Solus is a big undertaking, and as such there are many ways in which your involvement can help us. Naturally, that means there are also many ways in which you can help out.","source":"@site/docs/user/contributing/getting-involved.md","sourceDirName":"user/contributing","slug":"/user/contributing/getting-involved","permalink":"/docs/user/contributing/getting-involved","draft":false,"unlisted":false,"editUrl":"https://github.com/getsolus/help-center-docs/tree/master/docs/user/contributing/getting-involved.md","tags":[],"version":"current","lastUpdatedAt":1733757592000,"frontMatter":{"title":"Getting Involved","summary":"Getting involved with the Solus community"},"sidebar":"userSidebar","previous":{"title":"Community Guidelines","permalink":"/docs/user/contributing/community-guidelines"},"next":{"title":"Solus Style Guide","permalink":"/docs/user/contributing/style"}}'),s=i("85893"),o=i("50065");let r={title:"Getting Involved",summary:"Getting involved with the Solus community"},l="Getting Involved",a={},u=[{value:"Engaging with the community",id:"engaging-with-the-community",level:2},{value:"Community guidelines",id:"community-guidelines",level:3},{value:"Community forums",id:"community-forums",level:3},{value:"Matrix (chat)",id:"matrix-chat",level:3},{value:"Social Media",id:"social-media",level:3},{value:"Funding",id:"funding",level:2},{value:"Improving documentation",id:"improving-documentation",level:2},{value:"Packaging",id:"packaging",level:2},{value:"Report bugs",id:"report-bugs",level:2},{value:"Translations",id:"translations",level:2}];function c(e){let t={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",p:"p",strong:"strong",ul:"ul",...(0,o.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.header,{children:(0,s.jsx)(t.h1,{id:"getting-involved",children:"Getting Involved"})}),"\n",(0,s.jsx)(t.p,{children:"Solus is a big undertaking, and as such there are many ways in which your involvement can help us. Naturally, that means there are also many ways in which you can help out."}),"\n",(0,s.jsx)(t.h2,{id:"engaging-with-the-community",children:"Engaging with the community"}),"\n",(0,s.jsx)(t.h3,{id:"community-guidelines",children:"Community guidelines"}),"\n",(0,s.jsxs)(t.p,{children:["Solus enforces a set of community guidelines to maintain respect and professionalism, as well as a family-friendly environment. Please view our community guidelines ",(0,s.jsx)(t.a,{href:"/docs/user/contributing/community-guidelines",children:"here"}),"."]}),"\n",(0,s.jsx)(t.h3,{id:"community-forums",children:"Community forums"}),"\n",(0,s.jsxs)(t.p,{children:["With so many new users joining, there are always more people needing help. A great way to help us out, would be to help out our users on the ",(0,s.jsx)(t.a,{href:"https://discuss.getsol.us",children:"Solus Forums"}),"."]}),"\n",(0,s.jsx)(t.h3,{id:"matrix-chat",children:"Matrix (chat)"}),"\n",(0,s.jsxs)(t.p,{children:[(0,s.jsx)(t.a,{href:"https:/.wikipedia.org/wiki/Matrix_(protocol)",children:"Matrix"})," is a great way to discuss issues and development with the community, and project developers in real-time. It's also a great place for getting support, but remember due\nto timezone differences there might not always be people there to answer your question immediately. You can access Matrix using a client like ",(0,s.jsx)(t.a,{href:"https://app.element.io/",children:"Element Web"}),", or many ",(0,s.jsx)(t.a,{href:"https://matrix.org/ecosystem/clients/",children:"others"}),". You will need a Matrix account."]}),"\n",(0,s.jsxs)(t.p,{children:["You will find the following Solus rooms on the ",(0,s.jsx)(t.code,{children:"matrix.org"})," homeserver:"]}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsxs)(t.li,{children:[(0,s.jsxs)(t.a,{href:"https://matrix.to/#/#solus-support:matrix.org",children:["#solus-support",":matrix",".org"]})," Support room"]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsxs)(t.a,{href:"https://matrix.to/#/#solus-off-topic:matrix.org",children:["#solus-off-topic",":matrix",".org"]})," Off-topic room"]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsxs)(t.a,{href:"https://matrix.to/#/#solus-packaging:matrix.org",children:["#solus-packaging",":matrix",".org"]})," Packaging-related room"]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsxs)(t.a,{href:"https://matrix.to/#/#solus-development:matrix.org",children:["#solus-development",":matrix",".org"]})," Development-related room"]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsxs)(t.a,{href:"https://matrix.to/#/#solus-devlog:matrix.org",children:["#solus-devlog",":matrix",".org"]})," Commit and Pull Request notifications from the ",(0,s.jsx)(t.code,{children:"getsolus"})," GitHub organization (developer oriented, read-only)"]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsxs)(t.a,{href:"https://matrix.to/#/#solus:matrix.org",children:["#solus",":matrix",".org"]})," ",(0,s.jsx)(t.strong,{children:"Matrix Space containing all rooms"})]}),"\n"]}),"\n",(0,s.jsx)(t.h3,{id:"social-media",children:"Social Media"}),"\n",(0,s.jsx)(t.p,{children:"Alongside the forums, you can communicate with developers or others in the community by using one of the following websites:"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"https://www.facebook.com/get.solus",children:"Facebook"})}),"\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"https://fosstodon.org/@Solus",children:"Mastodon"})}),"\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"https://www.reddit.com/r/SolusProject/",children:"Reddit"})}),"\n"]}),"\n",(0,s.jsx)(t.h2,{id:"funding",children:"Funding"}),"\n",(0,s.jsxs)(t.p,{children:["Solus is funded through our ",(0,s.jsx)(t.a,{href:"https://opencollective.com/getsolus",children:"Open Collective"}),", with our fiscal host being the non-profit 501(c)(3) organization ",(0,s.jsx)(t.a,{href:"https://oscollective.org/",children:"Open Source Collective"}),". To read more about what this funding enables us to do take a look at the ",(0,s.jsx)(t.a,{href:"https://opencollective.com/getsolus#category-ABOUT",children:'"About" section of our Open Collective page'}),"."]}),"\n",(0,s.jsx)(t.h2,{id:"improving-documentation",children:"Improving documentation"}),"\n",(0,s.jsxs)(t.p,{children:["Our Help Center improves when the documentation improves. If there are docs that you think would be valuable to add, get involved by submitting pull requests to our ",(0,s.jsx)(t.a,{href:"https://github.com/getsolus/help-center-docs",children:"Help Center Docs"})," repository!"]}),"\n",(0,s.jsx)(t.h2,{id:"packaging",children:"Packaging"}),"\n",(0,s.jsxs)(t.p,{children:["There may be software you wish to have on your system that is currently not available in the repository. While you are more than welcome to submit a bug and wait for someone else to package the software you want, you can also improve\nand contribute to the community by packaging software. If you're interested in learning to package software, feel free to visit our documentation ",(0,s.jsx)(t.a,{href:"/docs/packaging/",children:"here"}),"."]}),"\n",(0,s.jsx)(t.h2,{id:"report-bugs",children:"Report bugs"}),"\n",(0,s.jsx)(t.p,{children:"We're always looking to improve our systems, especially when they're not functioning as expected. By reporting bugs, you improve the system not only for you, but for all Solus users."}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsxs)(t.li,{children:["\n",(0,s.jsxs)(t.p,{children:[(0,s.jsx)(t.a,{href:"https://issues.getsol.us",children:"Main Solus GitHub Issue Tracker"}),"\nMost bug reports about Solus itself, and its packages, should be filed here."]}),"\n"]}),"\n",(0,s.jsxs)(t.li,{children:["\n",(0,s.jsxs)(t.p,{children:[(0,s.jsx)(t.a,{href:"https://github.com/getsolus",children:"Other Solus GitHub Repositories"}),"\nCertain parts of Solus, such as the Software Center, have repositories in the ",(0,s.jsx)(t.code,{children:"getsolus"})," organization on GitHub. Check here to see if the system in question is listed. If so, file the bug in the appropriate repository."]}),"\n"]}),"\n",(0,s.jsxs)(t.li,{children:["\n",(0,s.jsxs)(t.p,{children:[(0,s.jsx)(t.a,{href:"https://github.com/BuddiesOfBudgie/budgie-desktop/issues",children:"Budgie Desktop"}),"\nBudgie Desktop issues are filed in the ",(0,s.jsx)(t.code,{children:"BuddiesOfBudgie/budgie-desktop"})," repository on GitHub."]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(t.h2,{id:"translations",children:"Translations"}),"\n",(0,s.jsxs)(t.p,{children:["Assistance is always welcome in translating our projects ",(0,s.jsx)(t.a,{href:"/docs/packaging/translation-instructions",children:"to other languages"}),"!"]})]})}function h(e={}){let{wrapper:t}={...(0,o.a)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(c,{...e})}):c(e)}},50065:function(e,t,i){i.d(t,{Z:function(){return l},a:function(){return r}});var n=i(67294);let s={},o=n.createContext(s);function r(e){let t=n.useContext(o);return n.useMemo(function(){return"function"==typeof e?e(t):{...t,...e}},[t,e])}function l(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:r(e.components),n.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/7a24477a.fafb3313.js b/assets/js/7a24477a.fafb3313.js deleted file mode 100644 index 6d5ea651a..000000000 --- a/assets/js/7a24477a.fafb3313.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[9135],{44308:(e,t,i)=>{i.r(t),i.d(t,{assets:()=>a,contentTitle:()=>r,default:()=>h,frontMatter:()=>o,metadata:()=>l,toc:()=>u});var n=i(85893),s=i(11151);const o={title:"Getting Involved",summary:"Getting involved with the Solus community"},r="Getting Involved",l={id:"user/contributing/getting-involved",title:"Getting Involved",description:"Solus is a big undertaking, and as such there are many ways in which your involvement can help us. Naturally, that means there are also many ways in which you can help out.",source:"@site/docs/user/contributing/getting-involved.md",sourceDirName:"user/contributing",slug:"/user/contributing/getting-involved",permalink:"/docs/user/contributing/getting-involved",draft:!1,unlisted:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/contributing/getting-involved.md",tags:[],version:"current",lastUpdatedAt:1732716912e3,frontMatter:{title:"Getting Involved",summary:"Getting involved with the Solus community"},sidebar:"userSidebar",previous:{title:"Community Guidelines",permalink:"/docs/user/contributing/community-guidelines"},next:{title:"Solus Style Guide",permalink:"/docs/user/contributing/style"}},a={},u=[{value:"Engaging with the community",id:"engaging-with-the-community",level:2},{value:"Community guidelines",id:"community-guidelines",level:3},{value:"Community forums",id:"community-forums",level:3},{value:"Matrix (chat)",id:"matrix-chat",level:3},{value:"Social Media",id:"social-media",level:3},{value:"Funding",id:"funding",level:2},{value:"Improving documentation",id:"improving-documentation",level:2},{value:"Packaging",id:"packaging",level:2},{value:"Report bugs",id:"report-bugs",level:2},{value:"Translations",id:"translations",level:2}];function c(e){const t={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",p:"p",strong:"strong",ul:"ul",...(0,s.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.header,{children:(0,n.jsx)(t.h1,{id:"getting-involved",children:"Getting Involved"})}),"\n",(0,n.jsx)(t.p,{children:"Solus is a big undertaking, and as such there are many ways in which your involvement can help us. Naturally, that means there are also many ways in which you can help out."}),"\n",(0,n.jsx)(t.h2,{id:"engaging-with-the-community",children:"Engaging with the community"}),"\n",(0,n.jsx)(t.h3,{id:"community-guidelines",children:"Community guidelines"}),"\n",(0,n.jsxs)(t.p,{children:["Solus enforces a set of community guidelines to maintain respect and professionalism, as well as a family-friendly environment. Please view our community guidelines ",(0,n.jsx)(t.a,{href:"/docs/user/contributing/community-guidelines",children:"here"}),"."]}),"\n",(0,n.jsx)(t.h3,{id:"community-forums",children:"Community forums"}),"\n",(0,n.jsxs)(t.p,{children:["With so many new users joining, there are always more people needing help. A great way to help us out, would be to help out our users on the ",(0,n.jsx)(t.a,{href:"https://discuss.getsol.us",children:"Solus Forums"}),"."]}),"\n",(0,n.jsx)(t.h3,{id:"matrix-chat",children:"Matrix (chat)"}),"\n",(0,n.jsxs)(t.p,{children:[(0,n.jsx)(t.a,{href:"https:/.wikipedia.org/wiki/Matrix_(protocol)",children:"Matrix"})," is a great way to discuss issues and development with the community, and project developers in real-time. It's also a great place for getting support, but remember due\nto timezone differences there might not always be people there to answer your question immediately. You can access Matrix using a client like ",(0,n.jsx)(t.a,{href:"https://app.element.io/",children:"Element Web"}),", or many ",(0,n.jsx)(t.a,{href:"https://matrix.org/ecosystem/clients/",children:"others"}),". You will need a Matrix account."]}),"\n",(0,n.jsxs)(t.p,{children:["You will find the following Solus rooms on the ",(0,n.jsx)(t.code,{children:"matrix.org"})," homeserver:"]}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsxs)(t.li,{children:[(0,n.jsxs)(t.a,{href:"https://matrix.to/#/#solus-support:matrix.org",children:["#solus-support",":matrix",".org"]})," Support room"]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsxs)(t.a,{href:"https://matrix.to/#/#solus-off-topic:matrix.org",children:["#solus-off-topic",":matrix",".org"]})," Off-topic room"]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsxs)(t.a,{href:"https://matrix.to/#/#solus-packaging:matrix.org",children:["#solus-packaging",":matrix",".org"]})," Packaging-related room"]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsxs)(t.a,{href:"https://matrix.to/#/#solus-development:matrix.org",children:["#solus-development",":matrix",".org"]})," Development-related room"]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsxs)(t.a,{href:"https://matrix.to/#/#solus-devlog:matrix.org",children:["#solus-devlog",":matrix",".org"]})," Commit and Pull Request notifications from the ",(0,n.jsx)(t.code,{children:"getsolus"})," GitHub organization (developer oriented, read-only)"]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsxs)(t.a,{href:"https://matrix.to/#/#solus:matrix.org",children:["#solus",":matrix",".org"]})," ",(0,n.jsx)(t.strong,{children:"Matrix Space containing all rooms"})]}),"\n"]}),"\n",(0,n.jsx)(t.h3,{id:"social-media",children:"Social Media"}),"\n",(0,n.jsx)(t.p,{children:"Alongside the forums, you can communicate with developers or others in the community by using one of the following websites:"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsx)(t.li,{children:(0,n.jsx)(t.a,{href:"https://www.facebook.com/get.solus",children:"Facebook"})}),"\n",(0,n.jsx)(t.li,{children:(0,n.jsx)(t.a,{href:"https://fosstodon.org/@Solus",children:"Mastodon"})}),"\n",(0,n.jsx)(t.li,{children:(0,n.jsx)(t.a,{href:"https://www.reddit.com/r/SolusProject/",children:"Reddit"})}),"\n"]}),"\n",(0,n.jsx)(t.h2,{id:"funding",children:"Funding"}),"\n",(0,n.jsxs)(t.p,{children:["Solus is funded through our ",(0,n.jsx)(t.a,{href:"https://opencollective.com/getsolus",children:"Open Collective"}),", with our fiscal host being the non-profit 501(c)(3) organization ",(0,n.jsx)(t.a,{href:"https://oscollective.org/",children:"Open Source Collective"}),". To read more about what this funding enables us to do take a look at the ",(0,n.jsx)(t.a,{href:"https://opencollective.com/getsolus#category-ABOUT",children:'"About" section of our Open Collective page'}),"."]}),"\n",(0,n.jsx)(t.h2,{id:"improving-documentation",children:"Improving documentation"}),"\n",(0,n.jsxs)(t.p,{children:["Our Help Center improves when the documentation improves. If there are docs that you think would be valuable to add, get involved by submitting pull requests to our ",(0,n.jsx)(t.a,{href:"https://github.com/getsolus/help-center-docs",children:"Help Center Docs"})," repository!"]}),"\n",(0,n.jsx)(t.h2,{id:"packaging",children:"Packaging"}),"\n",(0,n.jsxs)(t.p,{children:["There may be software you wish to have on your system that is currently not available in the repository. While you are more than welcome to submit a bug and wait for someone else to package the software you want, you can also improve\nand contribute to the community by packaging software. If you're interested in learning to package software, feel free to visit our documentation ",(0,n.jsx)(t.a,{href:"/docs/packaging/",children:"here"}),"."]}),"\n",(0,n.jsx)(t.h2,{id:"report-bugs",children:"Report bugs"}),"\n",(0,n.jsx)(t.p,{children:"We're always looking to improve our systems, especially when they're not functioning as expected. By reporting bugs, you improve the system not only for you, but for all Solus users."}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsxs)(t.li,{children:["\n",(0,n.jsxs)(t.p,{children:[(0,n.jsx)(t.a,{href:"https://issues.getsol.us",children:"Main Solus GitHub Issue Tracker"}),"\nMost bug reports about Solus itself, and its packages, should be filed here."]}),"\n"]}),"\n",(0,n.jsxs)(t.li,{children:["\n",(0,n.jsxs)(t.p,{children:[(0,n.jsx)(t.a,{href:"https://github.com/getsolus",children:"Other Solus GitHub Repositories"}),"\nCertain parts of Solus, such as the Software Center, have repositories in the ",(0,n.jsx)(t.code,{children:"getsolus"})," organization on GitHub. Check here to see if the system in question is listed. If so, file the bug in the appropriate repository."]}),"\n"]}),"\n",(0,n.jsxs)(t.li,{children:["\n",(0,n.jsxs)(t.p,{children:[(0,n.jsx)(t.a,{href:"https://github.com/BuddiesOfBudgie/budgie-desktop/issues",children:"Budgie Desktop"}),"\nBudgie Desktop issues are filed in the ",(0,n.jsx)(t.code,{children:"BuddiesOfBudgie/budgie-desktop"})," repository on GitHub."]}),"\n"]}),"\n"]}),"\n",(0,n.jsx)(t.h2,{id:"translations",children:"Translations"}),"\n",(0,n.jsxs)(t.p,{children:["Assistance is always welcome in translating our projects ",(0,n.jsx)(t.a,{href:"/docs/packaging/translation-instructions",children:"to other languages"}),"!"]})]})}function h(e={}){const{wrapper:t}={...(0,s.a)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(c,{...e})}):c(e)}},11151:(e,t,i)=>{i.d(t,{Z:()=>l,a:()=>r});var n=i(67294);const s={},o=n.createContext(s);function r(e){const t=n.useContext(o);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function l(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:r(e.components),n.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/7b0bdf40.702b25a1.js b/assets/js/7b0bdf40.702b25a1.js deleted file mode 100644 index 218580534..000000000 --- a/assets/js/7b0bdf40.702b25a1.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[29],{56548:e=>{e.exports=JSON.parse('{"tag":{"label":"eopkg","permalink":"/blog/tags/eopkg","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/eopkg","page":1,"postsPerPage":1,"totalPages":1,"totalCount":1,"blogDescription":"The Solus Development (b)log!","blogTitle":"Solus DevLog"}}')}}]); \ No newline at end of file diff --git a/assets/js/7b0bdf40.9366d3da.js b/assets/js/7b0bdf40.9366d3da.js new file mode 100644 index 000000000..c81bbc0b3 --- /dev/null +++ b/assets/js/7b0bdf40.9366d3da.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([["8964"],{16165:function(e){e.exports=JSON.parse('{"tag":{"label":"eopkg","permalink":"/blog/tags/eopkg","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/eopkg","page":1,"postsPerPage":1,"totalPages":1,"totalCount":1,"blogDescription":"The Solus Development (b)log!","blogTitle":"Solus DevLog"}}')}}]); \ No newline at end of file diff --git a/assets/js/7c1fb106.a5495bc2.js b/assets/js/7c1fb106.a5495bc2.js new file mode 100644 index 000000000..1a8bc5cc2 --- /dev/null +++ b/assets/js/7c1fb106.a5495bc2.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([["9191"],{74244:function(e,t,a){a.r(t),a.d(t,{metadata:()=>i,contentTitle:()=>o,default:()=>l,assets:()=>p,toc:()=>c,frontMatter:()=>r});var i=JSON.parse('{"id":"packaging/appstream-metainfo","title":"Appstream Metainfo","description":"AppStream metainfo is required for all graphical application in Solus repository.","source":"@site/docs/packaging/appstream-metainfo.md","sourceDirName":"packaging","slug":"/packaging/appstream-metainfo","permalink":"/docs/packaging/appstream-metainfo","draft":false,"unlisted":false,"editUrl":"https://github.com/getsolus/help-center-docs/tree/master/docs/packaging/appstream-metainfo.md","tags":[],"version":"current","lastUpdatedAt":1733757592000,"frontMatter":{"title":"Appstream Metainfo","summary":"The purpose and format of Appstream Metainfo"},"sidebar":"packagingSidebar","previous":{"title":"Local Repository","permalink":"/docs/packaging/advanced-config/local-repository"},"next":{"title":"Git Basics","permalink":"/docs/packaging/git-basics"}}'),n=a("85893"),s=a("50065");let r={title:"Appstream Metainfo",summary:"The purpose and format of Appstream Metainfo"},o="AppStream Metainfo",p={},c=[{value:"Adding appstream metainfo to an existing package",id:"adding-appstream-metainfo-to-an-existing-package",level:2},{value:"Testing appstream metainfo",id:"testing-appstream-metainfo",level:2},{value:"Other Info",id:"other-info",level:2}];function d(e){let t={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",header:"header",li:"li",p:"p",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,s.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.header,{children:(0,n.jsx)(t.h1,{id:"appstream-metainfo",children:"AppStream Metainfo"})}),"\n",(0,n.jsx)(t.admonition,{type:"important",children:(0,n.jsx)(t.p,{children:"AppStream metainfo is required for all graphical application in Solus repository."})}),"\n",(0,n.jsx)(t.p,{children:"AppStream allows upstream projects to define metadata about the components they provide using small XML files, metainfo files, which get installed into locations on the client system and are used by distributors to enhance their metadata."}),"\n",(0,n.jsx)(t.p,{children:"AppStream metainfo become a requirement for all graphical application in Solus repository because software centers such as GNOME software and KDE Discover rely on it to display applications that are available in repository. AppStream metainfo should be shipped by the upstream project, bundled in with its source, but sometimes upstream projects don't do so. In which case, packagers are required to add AppStream metainfo themselves."}),"\n",(0,n.jsx)(t.h2,{id:"adding-appstream-metainfo-to-an-existing-package",children:"Adding appstream metainfo to an existing package"}),"\n",(0,n.jsx)(t.p,{children:"There are a few scenarios that Packagers might encounter:"}),"\n",(0,n.jsxs)(t.table,{children:[(0,n.jsx)(t.thead,{children:(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.th,{children:"No"}),(0,n.jsx)(t.th,{children:"Scenario"}),(0,n.jsx)(t.th,{children:"Solution"})]})}),(0,n.jsxs)(t.tbody,{children:[(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"1"}),(0,n.jsx)(t.td,{children:"An application already provides appstream metainfo"}),(0,n.jsx)(t.td,{children:"Nothing to do"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"2"}),(0,n.jsx)(t.td,{children:"An application contains appstream metainfo in the source package but we do not install it"}),(0,n.jsxs)(t.td,{children:["Install the appstream metainfo to ",(0,n.jsx)(t.code,{children:"/usr/share/metainfo"}),". ",(0,n.jsx)(t.em,{children:"Example"}),": ",(0,n.jsx)(t.a,{href:"https://github.com/getsolus/packages/commit/0a726a53454e7c8a6b0e66de69d59bcc66f0fc19",children:"here"})]})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"3"}),(0,n.jsx)(t.td,{children:"An application doesn't contain appstream metainfo in the source package but it exists on Flathub"}),(0,n.jsxs)(t.td,{children:["Borrow and tweak the appstream metainfo from the Flathub repo. Encourage upstream project to add it to their source. ",(0,n.jsx)(t.em,{children:"Example"}),": ",(0,n.jsx)(t.a,{href:"https://github.com/getsolus/packages/commit/da2f65b93f412da43d1db9edbcb08bb90517a0eb",children:"here"})]})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"4"}),(0,n.jsx)(t.td,{children:"An application doesn't provide appstream metainfo and it doesn't exist on flathub"}),(0,n.jsxs)(t.td,{children:["Write the appstream metadata, submit it to upstream project. ",(0,n.jsx)(t.em,{children:"Example"}),": ",(0,n.jsx)(t.a,{href:"https://github.com/getsolus/packages/commit/414219d8b2ceeabe85178d3a467f81b9131016f4",children:"here"})]})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"5"}),(0,n.jsx)(t.td,{children:"Appstream metainfo is provided but generation of it is failing"}),(0,n.jsxs)(t.td,{children:["See ",(0,n.jsx)(t.a,{href:"https://github.com/getsolus/solus-appstream-data#debugging-failures",children:"here"}),". ",(0,n.jsx)(t.em,{children:"Example"}),": ",(0,n.jsx)(t.a,{href:"https://github.com/getsolus/packages/commit/583b7c742caf50e2f66a70e9b62e9b91566c03f5",children:"here"}),"."]})]})]})]}),"\n",(0,n.jsxs)(t.p,{children:["AppStream metainfo is to be installed in the ",(0,n.jsx)(t.code,{children:"/usr/share/metainfo/"})," directory. It must be placed in the package which should be installed in order to get the software described by the respective metadata. This means that you might need to move the _.metainfo.xml or _.appdata.xml to the right (sub)package."]}),"\n",(0,n.jsx)(t.p,{children:'In case your AppStream metainfo is describing a desktop-application (you can tell by the XML root-node having a type="desktop-application" or type="desktop" attribute), the .appdata.xml file must be placed in the same package as the .desktop file already is, which (as above) must be the package containing the application itself.'}),"\n",(0,n.jsx)(t.h2,{id:"testing-appstream-metainfo",children:"Testing appstream metainfo"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsxs)(t.li,{children:["\n",(0,n.jsx)(t.p,{children:"Clone the package repo"}),"\n"]}),"\n",(0,n.jsxs)(t.li,{children:["\n",(0,n.jsx)(t.p,{children:"Build it or eopkg fetch pkgname"}),"\n"]}),"\n",(0,n.jsxs)(t.li,{children:["\n",(0,n.jsxs)(t.p,{children:["Run ",(0,n.jsx)(t.code,{children:"sudo eopkg it appstream-glib"}),", ",(0,n.jsx)(t.code,{children:"appstream-builder --packages-dir=. --include-failed -v"})]}),"\n"]}),"\n",(0,n.jsxs)(t.li,{children:["\n",(0,n.jsxs)(t.p,{children:["Look in the ",(0,n.jsx)(t.code,{children:"example-failed.xml.gz"})," file to see if the appstream generation failed"]}),"\n"]}),"\n",(0,n.jsxs)(t.li,{children:["\n",(0,n.jsxs)(t.p,{children:["Look in the ",(0,n.jsx)(t.code,{children:"example.xml.gz"})," file to see if the appstream generation succeeded."]}),"\n"]}),"\n"]}),"\n",(0,n.jsx)(t.h2,{id:"other-info",children:"Other Info"}),"\n",(0,n.jsx)(t.p,{children:"A package must provide one appstream metainfo file, an icon file and a .desktop file for AppStream generation to succeed. However, there are exceptions to this. If an application provides more than one AppStream metainfo file then the package must be subpackaged for generation of all the appstream metainfo files to succeed."})]})}function l(e={}){let{wrapper:t}={...(0,s.a)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(d,{...e})}):d(e)}},50065:function(e,t,a){a.d(t,{Z:function(){return o},a:function(){return r}});var i=a(67294);let n={},s=i.createContext(n);function r(e){let t=i.useContext(s);return i.useMemo(function(){return"function"==typeof e?e(t):{...t,...e}},[t,e])}function o(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:r(e.components),i.createElement(s.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/7c1fb106.e67f5672.js b/assets/js/7c1fb106.e67f5672.js deleted file mode 100644 index 1b4c65dd4..000000000 --- a/assets/js/7c1fb106.e67f5672.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[4605],{66334:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>p,contentTitle:()=>r,default:()=>l,frontMatter:()=>s,metadata:()=>o,toc:()=>c});var i=a(85893),n=a(11151);const s={title:"Appstream Metainfo",summary:"The purpose and format of Appstream Metainfo"},r="AppStream Metainfo",o={id:"packaging/appstream-metainfo",title:"Appstream Metainfo",description:"AppStream metainfo is required for all graphical application in Solus repository.",source:"@site/docs/packaging/appstream-metainfo.md",sourceDirName:"packaging",slug:"/packaging/appstream-metainfo",permalink:"/docs/packaging/appstream-metainfo",draft:!1,unlisted:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/packaging/appstream-metainfo.md",tags:[],version:"current",lastUpdatedAt:1732716912e3,frontMatter:{title:"Appstream Metainfo",summary:"The purpose and format of Appstream Metainfo"},sidebar:"packagingSidebar",previous:{title:"Local Repository",permalink:"/docs/packaging/advanced-config/local-repository"},next:{title:"Git Basics",permalink:"/docs/packaging/git-basics"}},p={},c=[{value:"Adding appstream metainfo to an existing package",id:"adding-appstream-metainfo-to-an-existing-package",level:2},{value:"Testing appstream metainfo",id:"testing-appstream-metainfo",level:2},{value:"Other Info",id:"other-info",level:2}];function d(e){const t={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",header:"header",li:"li",p:"p",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,n.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(t.header,{children:(0,i.jsx)(t.h1,{id:"appstream-metainfo",children:"AppStream Metainfo"})}),"\n",(0,i.jsx)(t.admonition,{type:"important",children:(0,i.jsx)(t.p,{children:"AppStream metainfo is required for all graphical application in Solus repository."})}),"\n",(0,i.jsx)(t.p,{children:"AppStream allows upstream projects to define metadata about the components they provide using small XML files, metainfo files, which get installed into locations on the client system and are used by distributors to enhance their metadata."}),"\n",(0,i.jsx)(t.p,{children:"AppStream metainfo become a requirement for all graphical application in Solus repository because software centers such as GNOME software and KDE Discover rely on it to display applications that are available in repository. AppStream metainfo should be shipped by the upstream project, bundled in with its source, but sometimes upstream projects don't do so. In which case, packagers are required to add AppStream metainfo themselves."}),"\n",(0,i.jsx)(t.h2,{id:"adding-appstream-metainfo-to-an-existing-package",children:"Adding appstream metainfo to an existing package"}),"\n",(0,i.jsx)(t.p,{children:"There are a few scenarios that Packagers might encounter:"}),"\n",(0,i.jsxs)(t.table,{children:[(0,i.jsx)(t.thead,{children:(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.th,{children:"No"}),(0,i.jsx)(t.th,{children:"Scenario"}),(0,i.jsx)(t.th,{children:"Solution"})]})}),(0,i.jsxs)(t.tbody,{children:[(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"1"}),(0,i.jsx)(t.td,{children:"An application already provides appstream metainfo"}),(0,i.jsx)(t.td,{children:"Nothing to do"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"2"}),(0,i.jsx)(t.td,{children:"An application contains appstream metainfo in the source package but we do not install it"}),(0,i.jsxs)(t.td,{children:["Install the appstream metainfo to ",(0,i.jsx)(t.code,{children:"/usr/share/metainfo"}),". ",(0,i.jsx)(t.em,{children:"Example"}),": ",(0,i.jsx)(t.a,{href:"https://github.com/getsolus/packages/commit/0a726a53454e7c8a6b0e66de69d59bcc66f0fc19",children:"here"})]})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"3"}),(0,i.jsx)(t.td,{children:"An application doesn't contain appstream metainfo in the source package but it exists on Flathub"}),(0,i.jsxs)(t.td,{children:["Borrow and tweak the appstream metainfo from the Flathub repo. Encourage upstream project to add it to their source. ",(0,i.jsx)(t.em,{children:"Example"}),": ",(0,i.jsx)(t.a,{href:"https://github.com/getsolus/packages/commit/da2f65b93f412da43d1db9edbcb08bb90517a0eb",children:"here"})]})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"4"}),(0,i.jsx)(t.td,{children:"An application doesn't provide appstream metainfo and it doesn't exist on flathub"}),(0,i.jsxs)(t.td,{children:["Write the appstream metadata, submit it to upstream project. ",(0,i.jsx)(t.em,{children:"Example"}),": ",(0,i.jsx)(t.a,{href:"https://github.com/getsolus/packages/commit/414219d8b2ceeabe85178d3a467f81b9131016f4",children:"here"})]})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"5"}),(0,i.jsx)(t.td,{children:"Appstream metainfo is provided but generation of it is failing"}),(0,i.jsxs)(t.td,{children:["See ",(0,i.jsx)(t.a,{href:"https://github.com/getsolus/solus-appstream-data#debugging-failures",children:"here"}),". ",(0,i.jsx)(t.em,{children:"Example"}),": ",(0,i.jsx)(t.a,{href:"https://github.com/getsolus/packages/commit/583b7c742caf50e2f66a70e9b62e9b91566c03f5",children:"here"}),"."]})]})]})]}),"\n",(0,i.jsxs)(t.p,{children:["AppStream metainfo is to be installed in the ",(0,i.jsx)(t.code,{children:"/usr/share/metainfo/"})," directory. It must be placed in the package which should be installed in order to get the software described by the respective metadata. This means that you might need to move the _.metainfo.xml or _.appdata.xml to the right (sub)package."]}),"\n",(0,i.jsx)(t.p,{children:'In case your AppStream metainfo is describing a desktop-application (you can tell by the XML root-node having a type="desktop-application" or type="desktop" attribute), the .appdata.xml file must be placed in the same package as the .desktop file already is, which (as above) must be the package containing the application itself.'}),"\n",(0,i.jsx)(t.h2,{id:"testing-appstream-metainfo",children:"Testing appstream metainfo"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsx)(t.p,{children:"Clone the package repo"}),"\n"]}),"\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsx)(t.p,{children:"Build it or eopkg fetch pkgname"}),"\n"]}),"\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsxs)(t.p,{children:["Run ",(0,i.jsx)(t.code,{children:"sudo eopkg it appstream-glib"}),", ",(0,i.jsx)(t.code,{children:"appstream-builder --packages-dir=. --include-failed -v"})]}),"\n"]}),"\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsxs)(t.p,{children:["Look in the ",(0,i.jsx)(t.code,{children:"example-failed.xml.gz"})," file to see if the appstream generation failed"]}),"\n"]}),"\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsxs)(t.p,{children:["Look in the ",(0,i.jsx)(t.code,{children:"example.xml.gz"})," file to see if the appstream generation succeeded."]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(t.h2,{id:"other-info",children:"Other Info"}),"\n",(0,i.jsx)(t.p,{children:"A package must provide one appstream metainfo file, an icon file and a .desktop file for AppStream generation to succeed. However, there are exceptions to this. If an application provides more than one AppStream metainfo file then the package must be subpackaged for generation of all the appstream metainfo files to succeed."})]})}function l(e={}){const{wrapper:t}={...(0,n.a)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(d,{...e})}):d(e)}},11151:(e,t,a)=>{a.d(t,{Z:()=>o,a:()=>r});var i=a(67294);const n={},s=i.createContext(n);function r(e){const t=i.useContext(s);return i.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function o(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:r(e.components),i.createElement(s.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/7c2abd66.1c99e3a1.js b/assets/js/7c2abd66.1c99e3a1.js deleted file mode 100644 index 1bb6fae08..000000000 --- a/assets/js/7c2abd66.1c99e3a1.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[586],{19739:e=>{e.exports=JSON.parse('{"tag":{"label":"moss","permalink":"/blog/tags/moss","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/moss","page":1,"postsPerPage":1,"totalPages":1,"totalCount":1,"blogDescription":"The Solus Development (b)log!","blogTitle":"Solus DevLog"}}')}}]); \ No newline at end of file diff --git a/assets/js/7c2abd66.5be3e187.js b/assets/js/7c2abd66.5be3e187.js new file mode 100644 index 000000000..ff98f0e57 --- /dev/null +++ b/assets/js/7c2abd66.5be3e187.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([["3059"],{37831:function(e){e.exports=JSON.parse('{"tag":{"label":"moss","permalink":"/blog/tags/moss","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/moss","page":1,"postsPerPage":1,"totalPages":1,"totalCount":1,"blogDescription":"The Solus Development (b)log!","blogTitle":"Solus DevLog"}}')}}]); \ No newline at end of file diff --git a/assets/js/7e4100d6.ac132a79.js b/assets/js/7e4100d6.ac132a79.js deleted file mode 100644 index fed949937..000000000 --- a/assets/js/7e4100d6.ac132a79.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[6990],{18193:(e,r,s)=>{s.r(r),s.d(r,{assets:()=>c,contentTitle:()=>o,default:()=>d,frontMatter:()=>n,metadata:()=>i,toc:()=>h});var t=s(85893),a=s(11151);const n={title:"Wireshark",summary:"A quick start guide to Wireshark on Solus"},o="Wireshark",i={id:"user/software/networking/wireshark",title:"Wireshark",description:"Wireshark is a widely-used network protocol analyzer that lets you see what\u2019s happening on a network at a microscopic level.",source:"@site/docs/user/software/networking/wireshark.md",sourceDirName:"user/software/networking",slug:"/user/software/networking/wireshark",permalink:"/docs/user/software/networking/wireshark",draft:!1,unlisted:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/software/networking/wireshark.md",tags:[],version:"current",lastUpdatedAt:1732716912e3,frontMatter:{title:"Wireshark",summary:"A quick start guide to Wireshark on Solus"},sidebar:"userSidebar",previous:{title:"TigerVNC",permalink:"/docs/user/software/networking/tigervnc"},next:{title:"XRDP",permalink:"/docs/user/software/networking/xrdp"}},c={},h=[{value:"Installation",id:"installation",level:2},{value:"Use wireshark as a non-root user",id:"use-wireshark-as-a-non-root-user",level:2},{value:"Usage",id:"usage",level:2}];function l(e){const r={a:"a",code:"code",h1:"h1",h2:"h2",header:"header",p:"p",pre:"pre",...(0,a.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(r.header,{children:(0,t.jsx)(r.h1,{id:"wireshark",children:"Wireshark"})}),"\n",(0,t.jsxs)(r.p,{children:[(0,t.jsx)(r.a,{href:"https://www.wireshark.org/",children:"Wireshark"})," is a widely-used network protocol analyzer that lets you see what\u2019s happening on a network at a microscopic level."]}),"\n",(0,t.jsx)(r.h2,{id:"installation",children:"Installation"}),"\n",(0,t.jsx)(r.p,{children:"Wireshark can be installed either from the Software Center or via terminal:"}),"\n",(0,t.jsx)(r.pre,{children:(0,t.jsx)(r.code,{className:"language-bash",children:"sudo eopkg it wireshark\n"})}),"\n",(0,t.jsx)(r.h2,{id:"use-wireshark-as-a-non-root-user",children:"Use wireshark as a non-root user"}),"\n",(0,t.jsx)(r.p,{children:"For security reasons, it is strongly unadvised to run Wireshark as root. To capture packets as non-root user, execute these commands:"}),"\n",(0,t.jsx)(r.pre,{children:(0,t.jsx)(r.code,{className:"language-bash",children:"sudo gpasswd -a $USER wireshark\nsudo setcap cap_dac_override,cap_net_admin,cap_net_raw+eip /usr/bin/dumpcap\n"})}),"\n",(0,t.jsx)(r.h2,{id:"usage",children:"Usage"}),"\n",(0,t.jsxs)(r.p,{children:["Wireshark ",(0,t.jsx)(r.a,{href:"https://www.wireshark.org/docs/wsug_html_chunked/",children:"User\u2019s Guide"})," and ",(0,t.jsx)(r.a,{href:"https://www.wireshark.org/docs/",children:"learning material"})," are available on ",(0,t.jsx)(r.a,{href:"https://www.wireshark.org",children:"https://www.wireshark.org"}),"."]})]})}function d(e={}){const{wrapper:r}={...(0,a.a)(),...e.components};return r?(0,t.jsx)(r,{...e,children:(0,t.jsx)(l,{...e})}):l(e)}},11151:(e,r,s)=>{s.d(r,{Z:()=>i,a:()=>o});var t=s(67294);const a={},n=t.createContext(a);function o(e){const r=t.useContext(n);return t.useMemo((function(){return"function"==typeof e?e(r):{...r,...e}}),[r,e])}function i(e){let r;return r=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:o(e.components),t.createElement(n.Provider,{value:r},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/7e4100d6.f9f19d50.js b/assets/js/7e4100d6.f9f19d50.js new file mode 100644 index 000000000..785104380 --- /dev/null +++ b/assets/js/7e4100d6.f9f19d50.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([["6520"],{58736:function(e,r,s){s.r(r),s.d(r,{metadata:()=>t,contentTitle:()=>o,default:()=>u,assets:()=>l,toc:()=>c,frontMatter:()=>i});var t=JSON.parse('{"id":"user/software/networking/wireshark","title":"Wireshark","description":"Wireshark is a widely-used network protocol analyzer that lets you see what\u2019s happening on a network at a microscopic level.","source":"@site/docs/user/software/networking/wireshark.md","sourceDirName":"user/software/networking","slug":"/user/software/networking/wireshark","permalink":"/docs/user/software/networking/wireshark","draft":false,"unlisted":false,"editUrl":"https://github.com/getsolus/help-center-docs/tree/master/docs/user/software/networking/wireshark.md","tags":[],"version":"current","lastUpdatedAt":1733757592000,"frontMatter":{"title":"Wireshark","summary":"A quick start guide to Wireshark on Solus"},"sidebar":"userSidebar","previous":{"title":"TigerVNC","permalink":"/docs/user/software/networking/tigervnc"},"next":{"title":"XRDP","permalink":"/docs/user/software/networking/xrdp"}}'),a=s("85893"),n=s("50065");let i={title:"Wireshark",summary:"A quick start guide to Wireshark on Solus"},o="Wireshark",l={},c=[{value:"Installation",id:"installation",level:2},{value:"Use wireshark as a non-root user",id:"use-wireshark-as-a-non-root-user",level:2},{value:"Usage",id:"usage",level:2}];function h(e){let r={a:"a",code:"code",h1:"h1",h2:"h2",header:"header",p:"p",pre:"pre",...(0,n.a)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(r.header,{children:(0,a.jsx)(r.h1,{id:"wireshark",children:"Wireshark"})}),"\n",(0,a.jsxs)(r.p,{children:[(0,a.jsx)(r.a,{href:"https://www.wireshark.org/",children:"Wireshark"})," is a widely-used network protocol analyzer that lets you see what\u2019s happening on a network at a microscopic level."]}),"\n",(0,a.jsx)(r.h2,{id:"installation",children:"Installation"}),"\n",(0,a.jsx)(r.p,{children:"Wireshark can be installed either from the Software Center or via terminal:"}),"\n",(0,a.jsx)(r.pre,{children:(0,a.jsx)(r.code,{className:"language-bash",children:"sudo eopkg it wireshark\n"})}),"\n",(0,a.jsx)(r.h2,{id:"use-wireshark-as-a-non-root-user",children:"Use wireshark as a non-root user"}),"\n",(0,a.jsx)(r.p,{children:"For security reasons, it is strongly unadvised to run Wireshark as root. To capture packets as non-root user, execute these commands:"}),"\n",(0,a.jsx)(r.pre,{children:(0,a.jsx)(r.code,{className:"language-bash",children:"sudo gpasswd -a $USER wireshark\nsudo setcap cap_dac_override,cap_net_admin,cap_net_raw+eip /usr/bin/dumpcap\n"})}),"\n",(0,a.jsx)(r.h2,{id:"usage",children:"Usage"}),"\n",(0,a.jsxs)(r.p,{children:["Wireshark ",(0,a.jsx)(r.a,{href:"https://www.wireshark.org/docs/wsug_html_chunked/",children:"User\u2019s Guide"})," and ",(0,a.jsx)(r.a,{href:"https://www.wireshark.org/docs/",children:"learning material"})," are available on ",(0,a.jsx)(r.a,{href:"https://www.wireshark.org",children:"https://www.wireshark.org"}),"."]})]})}function u(e={}){let{wrapper:r}={...(0,n.a)(),...e.components};return r?(0,a.jsx)(r,{...e,children:(0,a.jsx)(h,{...e})}):h(e)}},50065:function(e,r,s){s.d(r,{Z:function(){return o},a:function(){return i}});var t=s(67294);let a={},n=t.createContext(a);function i(e){let r=t.useContext(n);return t.useMemo(function(){return"function"==typeof e?e(r):{...r,...e}},[r,e])}function o(e){let r;return r=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:i(e.components),t.createElement(n.Provider,{value:r},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/814f3328.6bedb449.js b/assets/js/814f3328.6bedb449.js deleted file mode 100644 index 58893d1bd..000000000 --- a/assets/js/814f3328.6bedb449.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[2535],{45641:e=>{e.exports=JSON.parse('{"title":"Recent posts","items":[{"title":"Clean, clean, clean!","permalink":"/blog/clean-clean-clean","unlisted":false,"date":"2024-11-21T00:00:00.000Z"},{"title":"Intro to Optimizing Packages on Solus","permalink":"/blog/solus-optimizing-packages","unlisted":false,"date":"2024-02-09T00:00:00.000Z"},{"title":"Don\'t call me MATE, pal!","permalink":"/blog/don\'t-call-me-mate-pal","unlisted":false,"date":"2024-01-29T00:00:00.000Z"},{"title":"eopkg is dead, long live eopkg","permalink":"/blog/eopkg-is-dead-long-live-eopkg","unlisted":false,"date":"2024-01-19T00:00:00.000Z"},{"title":"Welcome to the Solus Devlog","permalink":"/blog/welcome-solus-devlog-v1","unlisted":false,"date":"2024-01-13T00:00:00.000Z"}]}')}}]); \ No newline at end of file diff --git a/assets/js/814f3328.7d9ca34f.js b/assets/js/814f3328.7d9ca34f.js new file mode 100644 index 000000000..6ed51eced --- /dev/null +++ b/assets/js/814f3328.7d9ca34f.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([["106"],{4200:function(e){e.exports=JSON.parse('{"title":"Recent posts","items":[{"title":"Clean, clean, clean!","permalink":"/blog/clean-clean-clean","unlisted":false,"date":"2024-11-21T00:00:00.000Z"},{"title":"Intro to Optimizing Packages on Solus","permalink":"/blog/solus-optimizing-packages","unlisted":false,"date":"2024-02-09T00:00:00.000Z"},{"title":"Don\'t call me MATE, pal!","permalink":"/blog/don\'t-call-me-mate-pal","unlisted":false,"date":"2024-01-29T00:00:00.000Z"},{"title":"eopkg is dead, long live eopkg","permalink":"/blog/eopkg-is-dead-long-live-eopkg","unlisted":false,"date":"2024-01-19T00:00:00.000Z"},{"title":"Welcome to the Solus Devlog","permalink":"/blog/welcome-solus-devlog-v1","unlisted":false,"date":"2024-01-13T00:00:00.000Z"}]}')}}]); \ No newline at end of file diff --git a/assets/js/8412.1f597009.js b/assets/js/8412.1f597009.js new file mode 100644 index 000000000..2dbd6ced8 --- /dev/null +++ b/assets/js/8412.1f597009.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([["8412"],{57216:function(e,t,n){n.d(t,{Z:()=>j});var a=n("85893");n("67294");var s=n("74904"),i=n("1822"),l=n("50490"),r=n("27544");let d="iconEdit_Z9Sw";function c(e){let{className:t,...n}=e;return(0,a.jsx)("svg",{fill:"currentColor",height:"20",width:"20",viewBox:"0 0 40 40",className:(0,s.Z)(d,t),"aria-hidden":"true",...n,children:(0,a.jsx)("g",{children:(0,a.jsx)("path",{d:"m34.5 11.7l-3 3.1-6.3-6.3 3.1-3q0.5-0.5 1.2-0.5t1.1 0.5l3.9 3.9q0.5 0.4 0.5 1.1t-0.5 1.2z m-29.5 17.1l18.4-18.5 6.3 6.3-18.4 18.4h-6.3v-6.2z"})})})}function o(e){let{editUrl:t}=e;return(0,a.jsxs)(r.Z,{to:t,className:l.k.common.editThisPage,children:[(0,a.jsx)(c,{}),(0,a.jsx)(i.Z,{id:"theme.common.editThisPage",description:"The link label to edit the current page",children:"Edit this page"})]})}var u=n("28291");function h(e){let{lastUpdatedAt:t}=e,n=new Date(t),s=(0,u.P)({day:"numeric",month:"short",year:"numeric",timeZone:"UTC"}).format(n);return(0,a.jsx)(i.Z,{id:"theme.lastUpdated.atDate",description:"The words used to describe on which date a page has been last updated",values:{date:(0,a.jsx)("b",{children:(0,a.jsx)("time",{dateTime:n.toISOString(),itemProp:"dateModified",children:s})})},children:" on {date}"})}function m(e){let{lastUpdatedBy:t}=e;return(0,a.jsx)(i.Z,{id:"theme.lastUpdated.byUser",description:"The words used to describe by who the page has been last updated",values:{user:(0,a.jsx)("b",{children:t})},children:" by {user}"})}function p(e){let{lastUpdatedAt:t,lastUpdatedBy:n}=e;return(0,a.jsxs)("span",{className:l.k.common.lastUpdated,children:[(0,a.jsx)(i.Z,{id:"theme.lastUpdated.lastUpdatedAtBy",description:"The sentence used to display when a page has been last updated, and by who",values:{atDate:t?(0,a.jsx)(h,{lastUpdatedAt:t}):"",byUser:n?(0,a.jsx)(m,{lastUpdatedBy:n}):""},children:"Last updated{atDate}{byUser}"}),!1]})}let x="lastUpdated_JAkA";function j(e){let{className:t,editUrl:n,lastUpdatedAt:i,lastUpdatedBy:l}=e;return(0,a.jsxs)("div",{className:(0,s.Z)("row",t),children:[(0,a.jsx)("div",{className:"col",children:n&&(0,a.jsx)(o,{editUrl:n})}),(0,a.jsx)("div",{className:(0,s.Z)("col",x),children:(i||l)&&(0,a.jsx)(p,{lastUpdatedAt:i,lastUpdatedBy:l})})]})}},27913:function(e,t,n){n.d(t,{Z:()=>U});var a=n("85893"),s=n("67294"),i=n("50065"),l=n("50777"),r=n("84404");function d(e){return(0,a.jsx)("code",{...e})}var c=n("27544"),o=n("74904"),u=n("88942"),h=n("12785"),m=n("13341"),p=n("6560");let x={details:"details_lb9f",isBrowser:"isBrowser_bmU9",collapsibleContent:"collapsibleContent_i85q"};function j(e){return!!e&&("SUMMARY"===e.tagName||j(e.parentElement))}function f(e){let{summary:t,children:n,...i}=e;(0,h.Z)().collectAnchor(i.id);let l=(0,m.Z)(),r=(0,s.useRef)(null),{collapsed:d,setCollapsed:c}=(0,p.u)({initialState:!i.open}),[o,f]=(0,s.useState)(i.open),g=s.isValidElement(t)?t:(0,a.jsx)("summary",{children:t??"Details"});return(0,a.jsxs)("details",{...i,ref:r,open:o,"data-collapsed":d,className:(0,u.Z)(x.details,l&&x.isBrowser,i.className),onMouseDown:e=>{j(e.target)&&e.detail>1&&e.preventDefault()},onClick:e=>{e.stopPropagation();let t=e.target;if(!!(j(t)&&function e(t,n){return!!t&&(t===n||e(t.parentElement,n))}(t,r.current)))e.preventDefault(),d?(c(!1),f(!0)):c(!0)},children:[g,(0,a.jsx)(p.z,{lazy:!1,collapsed:d,disableSSRStyle:!0,onCollapseTransitionEnd:e=>{c(e),f(!e)},children:(0,a.jsx)("div",{className:x.collapsibleContent,children:n})})]})}let g="details_b_Ee";function v(e){let{...t}=e;return(0,a.jsx)(f,{...t,className:(0,o.Z)("alert alert--info",g,t.className)})}function Z(e){let t=s.Children.toArray(e.children),n=t.find(e=>s.isValidElement(e)&&"summary"===e.type),i=(0,a.jsx)(a.Fragment,{children:t.filter(e=>e!==n)});return(0,a.jsx)(v,{...e,summary:n,children:i})}var b=n("52068");function _(e){return(0,a.jsx)(b.Z,{...e})}let y={containsTaskList:"containsTaskList_mC6p"},N="img_ev3q";var k=n("77793");let w={Head:l.Z,details:Z,Details:Z,code:function(e){var t;return void 0!==(t=e).children&&s.Children.toArray(t.children).every(e=>"string"==typeof e&&!e.includes("\n"))?(0,a.jsx)(d,{...e}):(0,a.jsx)(r.Z,{...e})},a:function(e){return(0,a.jsx)(c.Z,{...e})},pre:function(e){return(0,a.jsx)(a.Fragment,{children:e.children})},ul:function(e){return(0,a.jsx)("ul",{...e,className:function(e){if(void 0!==e)return(0,o.Z)(e,e?.includes("contains-task-list")&&y.containsTaskList)}(e.className)})},li:function(e){return(0,h.Z)().collectAnchor(e.id),(0,a.jsx)("li",{...e})},img:function(e){var t;return(0,a.jsx)("img",{decoding:"async",loading:"lazy",...e,className:(t=e.className,(0,o.Z)(t,N))})},h1:e=>(0,a.jsx)(_,{as:"h1",...e}),h2:e=>(0,a.jsx)(_,{as:"h2",...e}),h3:e=>(0,a.jsx)(_,{as:"h3",...e}),h4:e=>(0,a.jsx)(_,{as:"h4",...e}),h5:e=>(0,a.jsx)(_,{as:"h5",...e}),h6:e=>(0,a.jsx)(_,{as:"h6",...e}),admonition:k.Z,mermaid:()=>null};function U(e){let{children:t}=e;return(0,a.jsx)(i.Z,{components:w,children:t})}},15779:function(e,t,n){n.d(t,{Z:function(){return l}});var a=n(85893);n(67294);var s=n(74904),i=n(27544);function l(e){let{permalink:t,title:n,subLabel:l,isNext:r}=e;return(0,a.jsxs)(i.Z,{className:(0,s.Z)("pagination-nav__link",r?"pagination-nav__link--next":"pagination-nav__link--prev"),to:t,children:[l&&(0,a.jsx)("div",{className:"pagination-nav__sublabel",children:l}),(0,a.jsx)("div",{className:"pagination-nav__label",children:n})]})}},62837:function(e,t,n){n.d(t,{Z:()=>r});var a=n("85893");n("67294");var s=n("74904"),i=n("27544");let l={tag:"tag_zVej",tagRegular:"tagRegular_sFm0",tagWithCount:"tagWithCount_h2kH"};function r(e){let{permalink:t,label:n,count:r,description:d}=e;return(0,a.jsxs)(i.Z,{href:t,title:d,className:(0,s.Z)(l.tag,r?l.tagWithCount:l.tagRegular),children:[n,r&&(0,a.jsx)("span",{children:r})]})}},50905:function(e,t,n){n.d(t,{Z:()=>c});var a=n("85893");n("67294");var s=n("74904"),i=n("1822"),l=n("62837");let r="tags_jXut",d="tag_QGVx";function c(e){let{tags:t}=e;return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)("b",{children:(0,a.jsx)(i.Z,{id:"theme.tags.tagsListLabel",description:"The label alongside a tag list",children:"Tags:"})}),(0,a.jsx)("ul",{className:(0,s.Z)(r,"padding--none","margin-left--sm"),children:t.map(e=>(0,a.jsx)("li",{className:d,children:(0,a.jsx)(l.Z,{...e})},e.permalink))})]})}},28291:function(e,t,n){n.d(t,{P:function(){return s}});var a=n(93934);function s(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},{i18n:{currentLocale:t}}=(0,a.Z)(),n=function(){let{i18n:{currentLocale:e,localeConfigs:t}}=(0,a.Z)();return t[e].calendar}();return new Intl.DateTimeFormat(t,{calendar:n,...e})}}}]); \ No newline at end of file diff --git a/assets/js/8490a22d.4dda6488.js b/assets/js/8490a22d.4dda6488.js new file mode 100644 index 000000000..9f8ff83bd --- /dev/null +++ b/assets/js/8490a22d.4dda6488.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([["8219"],{12863:function(e,o,l){l.r(o),l.d(o,{metadata:()=>i,contentTitle:()=>a,default:()=>p,assets:()=>t,toc:()=>c,frontMatter:()=>r});var i=JSON.parse('{"id":"packaging/advanced-config/local-repository","title":"Local Repository","description":"This guide walks you through the steps necessary to tell solbuild how to use your locally built .eopkg files that are not yet in the Solus repository.","source":"@site/docs/packaging/advanced-config/local-repository.md","sourceDirName":"packaging/advanced-config","slug":"/packaging/advanced-config/local-repository","permalink":"/docs/packaging/advanced-config/local-repository","draft":false,"unlisted":false,"editUrl":"https://github.com/getsolus/help-center-docs/tree/master/docs/packaging/advanced-config/local-repository.md","tags":[],"version":"current","lastUpdatedAt":1733757592000,"frontMatter":{"title":"Local Repository","summary":"Packaging using a local repository"},"sidebar":"packagingSidebar","previous":{"title":"Eopkg Configuration","permalink":"/docs/packaging/advanced-config/eopkg-configuration"},"next":{"title":"Appstream Metainfo","permalink":"/docs/packaging/appstream-metainfo"}}'),s=l("85893"),n=l("50065");let r={title:"Local Repository",summary:"Packaging using a local repository"},a="Packaging using a local repository",t={},c=[{value:"Install the local profile",id:"install-the-local-profile",level:2},{value:"Using the local repository",id:"using-the-local-repository",level:2},{value:"Copying <code>.eopkg</code> files to the local repository",id:"copying-eopkg-files-to-the-local-repository",level:3},{value:"Listing locally built eopkg files",id:"listing-locally-built-eopkg-files",level:3},{value:"Using the local repository to build a package",id:"using-the-local-repository-to-build-a-package",level:3},{value:"A streamlined local repository workflow for stack updates",id:"a-streamlined-local-repository-workflow-for-stack-updates",level:3},{value:"Best practices when working with a solbuild local repository",id:"best-practices-when-working-with-a-solbuild-local-repository",level:3},{value:"Installing packages from the local repository index",id:"installing-packages-from-the-local-repository-index",level:2},{value:"Creating or updating the local repository index",id:"creating-or-updating-the-local-repository-index",level:3},{value:"Package resolution priority in eopkg",id:"package-resolution-priority-in-eopkg",level:3},{value:"Adding the local repository index to the eopkg repository database",id:"adding-the-local-repository-index-to-the-eopkg-repository-database",level:3},{value:"Disabling the local solbuild repository in eopkg",id:"disabling-the-local-solbuild-repository-in-eopkg",level:4},{value:"Closing thoughts",id:"closing-thoughts",level:2}];function d(e){let o={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",h4:"h4",header:"header",li:"li",ol:"ol",p:"p",pre:"pre",ul:"ul",...(0,n.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(o.header,{children:(0,s.jsx)(o.h1,{id:"packaging-using-a-local-repository",children:"Packaging using a local repository"})}),"\n",(0,s.jsxs)(o.p,{children:["This guide walks you through the steps necessary to tell ",(0,s.jsx)(o.code,{children:"solbuild"})," how to use your locally built ",(0,s.jsx)(o.code,{children:".eopkg"})," files that are not yet in the Solus repository."]}),"\n",(0,s.jsx)(o.admonition,{type:"note",children:(0,s.jsxs)(o.p,{children:["It is not necessary to use a local repository to test most package submissions. The easier and recommended way is to install the ",(0,s.jsx)(o.code,{children:".eopkg"})," files created when a package is built. This procedure is intended for use with stack upgrades, rebuilds, or new packages that need new dependencies that are not yet in the repository."]})}),"\n",(0,s.jsxs)(o.p,{children:["We assume you have worked through the ",(0,s.jsx)(o.a,{href:"/docs/packaging",children:"packaging"})," material for creating a package with ",(0,s.jsx)(o.code,{children:"solbuild"}),"."]}),"\n",(0,s.jsx)(o.h2,{id:"install-the-local-profile",children:"Install the local profile"}),"\n",(0,s.jsx)(o.pre,{children:(0,s.jsx)(o.code,{className:"language-bash",children:"sudo eopkg install solbuild-config-local-unstable\n"})}),"\n",(0,s.jsxs)(o.p,{children:["You will also need to ensure that your repository is fully up to date. See ",(0,s.jsx)(o.a,{href:"/docs/packaging/update-dev-environment",children:"Update Your Development Environment"})]}),"\n",(0,s.jsx)(o.h2,{id:"using-the-local-repository",children:"Using the local repository"}),"\n",(0,s.jsxs)(o.p,{children:["The local repository index and any local eopkg files are stored in ",(0,s.jsx)(o.code,{children:"/var/lib/solbuild/local/"})]}),"\n",(0,s.jsxs)(o.h3,{id:"copying-eopkg-files-to-the-local-repository",children:["Copying ",(0,s.jsx)(o.code,{children:".eopkg"})," files to the local repository"]}),"\n",(0,s.jsxs)(o.p,{children:["To use your locally built ",(0,s.jsx)(o.code,{children:".eopkg"})," package files as dependencies for another package, you must copy the regular package files, and any accompanying ",(0,s.jsx)(o.code,{children:"-devel"})," package files to the ",(0,s.jsx)(o.code,{children:"/var/lib/solbuild/local"})," local repository directory."]}),"\n",(0,s.jsxs)(o.p,{children:["For example, building the package ",(0,s.jsx)(o.code,{children:"libcmis"})," produces the packages ",(0,s.jsx)(o.code,{children:"libcmis"})," and ",(0,s.jsx)(o.code,{children:"libcmis-devel"}),". Both should be copied to the local repository to build other packages against ",(0,s.jsx)(o.code,{children:"libcmis"}),"."]}),"\n",(0,s.jsxs)(o.p,{children:["To copy all ",(0,s.jsx)(o.code,{children:".eopkg"})," files within a directory to the local repository, use the following command:"]}),"\n",(0,s.jsx)(o.pre,{children:(0,s.jsx)(o.code,{className:"language-bash",children:"sudo cp -v *.eopkg /var/lib/solbuild/local\n"})}),"\n",(0,s.jsx)(o.h3,{id:"listing-locally-built-eopkg-files",children:"Listing locally built eopkg files"}),"\n",(0,s.jsx)(o.p,{children:"Use this to list all index and eopkg files in the local repository:"}),"\n",(0,s.jsx)(o.pre,{children:(0,s.jsx)(o.code,{className:"language-bash",children:"go-task list-local\n"})}),"\n",(0,s.jsx)(o.h3,{id:"using-the-local-repository-to-build-a-package",children:"Using the local repository to build a package"}),"\n",(0,s.jsxs)(o.p,{children:["With the ",(0,s.jsx)(o.code,{children:".eopkg"})," files now present in the local repository, you can use them to build a package by running ",(0,s.jsx)(o.code,{children:"go-task build-local"}),", rather than just ",(0,s.jsx)(o.code,{children:"go-task"}),", and ",(0,s.jsx)(o.code,{children:"solbuild"})," will prefer your packages over packages found in the Solus repository."]}),"\n",(0,s.jsxs)(o.p,{children:["Every time you run ",(0,s.jsx)(o.code,{children:"go-task build-local"}),", all ",(0,s.jsx)(o.code,{children:".eopkg"})," files in the local repository will be re-indexed."]}),"\n",(0,s.jsx)(o.h3,{id:"a-streamlined-local-repository-workflow-for-stack-updates",children:"A streamlined local repository workflow for stack updates"}),"\n",(0,s.jsx)(o.p,{children:"If you know ahead of time that you are going to need to put the package files from the current build into the local repository as dependencies for subsequent builds, you can use:"}),"\n",(0,s.jsx)(o.pre,{children:(0,s.jsx)(o.code,{className:"language-bash",children:"go-task build-localcp\n"})}),"\n",(0,s.jsxs)(o.p,{children:["The ",(0,s.jsx)(o.code,{children:"build-localcp"})," task will:"]}),"\n",(0,s.jsxs)(o.ul,{children:["\n",(0,s.jsx)(o.li,{children:"Build the current package against any existing packages in your local repository."}),"\n",(0,s.jsx)(o.li,{children:"Copy the newly built package files to your local repository."}),"\n",(0,s.jsx)(o.li,{children:"Re-index your local repository."}),"\n"]}),"\n",(0,s.jsxs)(o.p,{children:["The ",(0,s.jsx)(o.code,{children:"build-localcp"})," workflow can be very convenient when you are doing stack updates."]}),"\n",(0,s.jsx)(o.h3,{id:"best-practices-when-working-with-a-solbuild-local-repository",children:"Best practices when working with a solbuild local repository"}),"\n",(0,s.jsx)(o.p,{children:"There are some important things to know when working with local repositories, as they may lead to issues later on."}),"\n",(0,s.jsxs)(o.ul,{children:["\n",(0,s.jsxs)(o.li,{children:[(0,s.jsx)(o.code,{children:"solbuild"})," will use your version of a package from the local repository regardless of whether there's a higher release in the Solus repository. Therefore:","\n",(0,s.jsxs)(o.ul,{children:["\n",(0,s.jsxs)(o.li,{children:["Only use the ",(0,s.jsx)(o.code,{children:"build-local"})," or ",(0,s.jsx)(o.code,{children:"build-localcp"})," tasks when required."]}),"\n",(0,s.jsxs)(o.li,{children:["Old packages in the local repository can be removed with the ",(0,s.jsx)(o.code,{children:"clean-local"})," task:","\n",(0,s.jsx)(o.pre,{children:(0,s.jsx)(o.code,{className:"language-bash",children:"go-task clean-local\n"})}),"\n","Note that the ",(0,s.jsx)(o.code,{children:"clean-local"})," task will automatically re-index the (now empty) local repository."]}),"\n",(0,s.jsxs)(o.li,{children:["If a package is already installed in the ",(0,s.jsx)(o.code,{children:"solbuild"})," image, the release number of the updated version must be higher for it to be installed and used as a dependency at build time."]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(o.h2,{id:"installing-packages-from-the-local-repository-index",children:"Installing packages from the local repository index"}),"\n",(0,s.jsxs)(o.p,{children:[(0,s.jsx)(o.code,{children:"eopkg"})," supports resolving packages from more than one repository. This can be used to configure ",(0,s.jsx)(o.code,{children:"eopkg"})," to prefer installing local repository packages over packages from the Solus repository."]}),"\n",(0,s.jsxs)(o.p,{children:["This requires an existing local repository index. If you have used the command ",(0,s.jsx)(o.code,{children:"go-task build-local"}),", then an index was created automatically. Otherwise, you must create one."]}),"\n",(0,s.jsx)(o.h3,{id:"creating-or-updating-the-local-repository-index",children:"Creating or updating the local repository index"}),"\n",(0,s.jsxs)(o.p,{children:["To generate or refresh the ",(0,s.jsx)(o.code,{children:"eopkg"})," index in ",(0,s.jsx)(o.code,{children:"/var/lib/solbuild/local"}),", use the following command:"]}),"\n",(0,s.jsx)(o.pre,{children:(0,s.jsx)(o.code,{className:"language-bash",children:"go-task build-localindex\n"})}),"\n",(0,s.jsxs)(o.p,{children:["Or, if you have our ",(0,s.jsx)(o.a,{href:"/docs/packaging/prepare-for-packaging#set-up-repository-helper-functions-optional",children:"helper functions"})," set up, you get the same result by running:"]}),"\n",(0,s.jsx)(o.pre,{children:(0,s.jsx)(o.code,{className:"language-bash",children:"localrepo_reindex\n"})}),"\n",(0,s.jsxs)(o.p,{children:["Keep in mind that the index needs to be refreshed whenever you add or remove locally built packages to your local repository. Otherwise, ",(0,s.jsx)(o.code,{children:"eopkg"})," won't know that new packages are available or have been removed from the local repository."]}),"\n",(0,s.jsx)(o.h3,{id:"package-resolution-priority-in-eopkg",children:"Package resolution priority in eopkg"}),"\n",(0,s.jsxs)(o.p,{children:[(0,s.jsx)(o.code,{children:"eopkg"})," will always prefer packages from the topmost repository listed with ",(0,s.jsx)(o.code,{children:"eopkg lr"}),"."]}),"\n",(0,s.jsxs)(o.p,{children:["In other words, if a package exists both in the local repository and the Solus repository, ",(0,s.jsx)(o.code,{children:"eopkg"})," will only consider the package from the first repository listed with ",(0,s.jsx)(o.code,{children:"eopkg lr"})," ",(0,s.jsx)(o.em,{children:"regardless of its release number"}),"."]}),"\n",(0,s.jsx)(o.h3,{id:"adding-the-local-repository-index-to-the-eopkg-repository-database",children:"Adding the local repository index to the eopkg repository database"}),"\n",(0,s.jsxs)(o.p,{children:["The easiest way to add the local repository index to the list of repositories known to ",(0,s.jsx)(o.code,{children:"eopkg"}),", in the correct order, is to add the local repository and then ",(0,s.jsx)(o.em,{children:"re-add"})," the official Solus repository:"]}),"\n",(0,s.jsxs)(o.ol,{children:["\n",(0,s.jsxs)(o.li,{children:["First, let's list the repositories currently known to ",(0,s.jsx)(o.code,{children:"eopkg"})," with ",(0,s.jsx)(o.code,{children:"eopkg lr"}),". This should produce output similar to:"]}),"\n"]}),"\n",(0,s.jsx)(o.pre,{children:(0,s.jsx)(o.code,{children:"Solus [active]\n https://cdn.getsol.us/repo/unstable/eopkg-index.xml.xz\n"})}),"\n",(0,s.jsxs)(o.ol,{start:"2",children:["\n",(0,s.jsx)(o.li,{children:"Now the repositories need to be added to account for the desired dependency resolution order:"}),"\n"]}),"\n",(0,s.jsx)(o.pre,{children:(0,s.jsx)(o.code,{className:"language-bash",children:"sudo eopkg ar Local /var/lib/solbuild/local/eopkg-index.xml.xz\nsudo eopkg ar Solus https://cdn.getsol.us/repo/unstable/eopkg-index.xml.xz\n"})}),"\n",(0,s.jsx)(o.p,{children:"This should yield output similar to:"}),"\n",(0,s.jsx)(o.pre,{children:(0,s.jsx)(o.code,{children:"$ sudo eopkg ar Local /var/lib/solbuild/local/eopkg-index.xml.xz\nRepo Local added to system.\nUpdating repository: Local\nPackage database updated.\n$ sudo eopkg ar Solus https://cdn.getsol.us/repo/unstable/eopkg-index.xml.xz\nRepo already present with name Solus and same URL. Removing first.\nRepo Solus added to system.\nUpdating repository: Solus\neopkg-index.xml.xz.sha1sum (40.0 B)100% 765.61 KB/s [00:00:00] [complete]\neopkg-index.xml.xz (2.1 MB)100% 914.38 KB/s [00:00:01] [complete]\nPackage database updated.\n"})}),"\n",(0,s.jsxs)(o.ol,{start:"3",children:["\n",(0,s.jsxs)(o.li,{children:["Check that the dependency resolution order is correct so that packages from the local ",(0,s.jsx)(o.code,{children:"solbuild"})," repository are preferred over the upstream Solus repository."]}),"\n"]}),"\n",(0,s.jsxs)(o.p,{children:[(0,s.jsx)(o.code,{children:"eopkg lr"})," should yield output similar to:"]}),"\n",(0,s.jsx)(o.pre,{children:(0,s.jsx)(o.code,{children:"$ eopkg lr\nLocal [active]\n /var/lib/solbuild/local/eopkg-index.xml.xz\nSolus [active]\n https://cdn.getsol.us/repo/unstable/eopkg-index.xml.xz\n"})}),"\n",(0,s.jsx)(o.h4,{id:"disabling-the-local-solbuild-repository-in-eopkg",children:"Disabling the local solbuild repository in eopkg"}),"\n",(0,s.jsxs)(o.p,{children:['To reset the system to use only packages from the official Solus repository, disable the "Local" ',(0,s.jsx)(o.code,{children:"eopkg"})," repository using the command ",(0,s.jsx)(o.code,{children:"sudo eopkg disable-repo Local"}),"."]}),"\n",(0,s.jsx)(o.p,{children:"The output should look similar to:"}),"\n",(0,s.jsx)(o.pre,{children:(0,s.jsx)(o.code,{children:"$ sudo eopkg disable-repo Local\n$ sudo eopkg lr\nLocal [inactive]\n /var/lib/solbuild/local/eopkg-index.xml.xz\nSolus [active]\n https://cdn.getsol.us/repo/unstable/eopkg-index.xml.xz\n"})}),"\n",(0,s.jsxs)(o.p,{children:['The "Local" ',(0,s.jsx)(o.code,{children:"eopkg"})," repository can be re-enabled with ",(0,s.jsx)(o.code,{children:"sudo eopkg enable-repo Local"}),"."]}),"\n",(0,s.jsx)(o.pre,{children:(0,s.jsx)(o.code,{children:"$ sudo eopkg enable-repo Local\n$ sudo eopkg lr\nLocal [active]\n /var/lib/solbuild/local/eopkg-index.xml.xz\nSolus [active]\n https://cdn.getsol.us/repo/unstable/eopkg-index.xml.xz\n"})}),"\n",(0,s.jsx)(o.h2,{id:"closing-thoughts",children:"Closing thoughts"}),"\n",(0,s.jsx)(o.p,{children:"Congratulations on making it this far! Your system should now be ready for convenient deployment and testing of locally built packages."})]})}function p(e={}){let{wrapper:o}={...(0,n.a)(),...e.components};return o?(0,s.jsx)(o,{...e,children:(0,s.jsx)(d,{...e})}):d(e)}},50065:function(e,o,l){l.d(o,{Z:function(){return a},a:function(){return r}});var i=l(67294);let s={},n=i.createContext(s);function r(e){let o=i.useContext(n);return i.useMemo(function(){return"function"==typeof e?e(o):{...o,...e}},[o,e])}function a(e){let o;return o=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:r(e.components),i.createElement(n.Provider,{value:o},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/8490a22d.bf17f908.js b/assets/js/8490a22d.bf17f908.js deleted file mode 100644 index 6d1d766a4..000000000 --- a/assets/js/8490a22d.bf17f908.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[8575],{5734:(e,o,l)=>{l.r(o),l.d(o,{assets:()=>t,contentTitle:()=>r,default:()=>p,frontMatter:()=>n,metadata:()=>a,toc:()=>c});var i=l(85893),s=l(11151);const n={title:"Local Repository",summary:"Packaging using a local repository"},r="Packaging using a local repository",a={id:"packaging/advanced-config/local-repository",title:"Local Repository",description:"This guide walks you through the steps necessary to tell solbuild how to use your locally built .eopkg files that are not yet in the Solus repository.",source:"@site/docs/packaging/advanced-config/local-repository.md",sourceDirName:"packaging/advanced-config",slug:"/packaging/advanced-config/local-repository",permalink:"/docs/packaging/advanced-config/local-repository",draft:!1,unlisted:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/packaging/advanced-config/local-repository.md",tags:[],version:"current",lastUpdatedAt:1732716912e3,frontMatter:{title:"Local Repository",summary:"Packaging using a local repository"},sidebar:"packagingSidebar",previous:{title:"Eopkg Configuration",permalink:"/docs/packaging/advanced-config/eopkg-configuration"},next:{title:"Appstream Metainfo",permalink:"/docs/packaging/appstream-metainfo"}},t={},c=[{value:"Install the local profile",id:"install-the-local-profile",level:2},{value:"Using the local repository",id:"using-the-local-repository",level:2},{value:"Copying <code>.eopkg</code> files to the local repository",id:"copying-eopkg-files-to-the-local-repository",level:3},{value:"Listing locally built eopkg files",id:"listing-locally-built-eopkg-files",level:3},{value:"Using the local repository to build a package",id:"using-the-local-repository-to-build-a-package",level:3},{value:"A streamlined local repository workflow for stack updates",id:"a-streamlined-local-repository-workflow-for-stack-updates",level:3},{value:"Best practices when working with a solbuild local repository",id:"best-practices-when-working-with-a-solbuild-local-repository",level:3},{value:"Installing packages from the local repository index",id:"installing-packages-from-the-local-repository-index",level:2},{value:"Creating or updating the local repository index",id:"creating-or-updating-the-local-repository-index",level:3},{value:"Package resolution priority in eopkg",id:"package-resolution-priority-in-eopkg",level:3},{value:"Adding the local repository index to the eopkg repository database",id:"adding-the-local-repository-index-to-the-eopkg-repository-database",level:3},{value:"Disabling the local solbuild repository in eopkg",id:"disabling-the-local-solbuild-repository-in-eopkg",level:4},{value:"Closing thoughts",id:"closing-thoughts",level:2}];function d(e){const o={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",h4:"h4",header:"header",li:"li",ol:"ol",p:"p",pre:"pre",ul:"ul",...(0,s.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(o.header,{children:(0,i.jsx)(o.h1,{id:"packaging-using-a-local-repository",children:"Packaging using a local repository"})}),"\n",(0,i.jsxs)(o.p,{children:["This guide walks you through the steps necessary to tell ",(0,i.jsx)(o.code,{children:"solbuild"})," how to use your locally built ",(0,i.jsx)(o.code,{children:".eopkg"})," files that are not yet in the Solus repository."]}),"\n",(0,i.jsx)(o.admonition,{type:"note",children:(0,i.jsxs)(o.p,{children:["It is not necessary to use a local repository to test most package submissions. The easier and recommended way is to install the ",(0,i.jsx)(o.code,{children:".eopkg"})," files created when a package is built. This procedure is intended for use with stack upgrades, rebuilds, or new packages that need new dependencies that are not yet in the repository."]})}),"\n",(0,i.jsxs)(o.p,{children:["We assume you have worked through the ",(0,i.jsx)(o.a,{href:"/docs/packaging",children:"packaging"})," material for creating a package with ",(0,i.jsx)(o.code,{children:"solbuild"}),"."]}),"\n",(0,i.jsx)(o.h2,{id:"install-the-local-profile",children:"Install the local profile"}),"\n",(0,i.jsx)(o.pre,{children:(0,i.jsx)(o.code,{className:"language-bash",children:"sudo eopkg install solbuild-config-local-unstable\n"})}),"\n",(0,i.jsxs)(o.p,{children:["You will also need to ensure that your repository is fully up to date. See ",(0,i.jsx)(o.a,{href:"/docs/packaging/update-dev-environment",children:"Update Your Development Environment"})]}),"\n",(0,i.jsx)(o.h2,{id:"using-the-local-repository",children:"Using the local repository"}),"\n",(0,i.jsxs)(o.p,{children:["The local repository index and any local eopkg files are stored in ",(0,i.jsx)(o.code,{children:"/var/lib/solbuild/local/"})]}),"\n",(0,i.jsxs)(o.h3,{id:"copying-eopkg-files-to-the-local-repository",children:["Copying ",(0,i.jsx)(o.code,{children:".eopkg"})," files to the local repository"]}),"\n",(0,i.jsxs)(o.p,{children:["To use your locally built ",(0,i.jsx)(o.code,{children:".eopkg"})," package files as dependencies for another package, you must copy the regular package files, and any accompanying ",(0,i.jsx)(o.code,{children:"-devel"})," package files to the ",(0,i.jsx)(o.code,{children:"/var/lib/solbuild/local"})," local repository directory."]}),"\n",(0,i.jsxs)(o.p,{children:["For example, building the package ",(0,i.jsx)(o.code,{children:"libcmis"})," produces the packages ",(0,i.jsx)(o.code,{children:"libcmis"})," and ",(0,i.jsx)(o.code,{children:"libcmis-devel"}),". Both should be copied to the local repository to build other packages against ",(0,i.jsx)(o.code,{children:"libcmis"}),"."]}),"\n",(0,i.jsxs)(o.p,{children:["To copy all ",(0,i.jsx)(o.code,{children:".eopkg"})," files within a directory to the local repository, use the following command:"]}),"\n",(0,i.jsx)(o.pre,{children:(0,i.jsx)(o.code,{className:"language-bash",children:"sudo cp -v *.eopkg /var/lib/solbuild/local\n"})}),"\n",(0,i.jsx)(o.h3,{id:"listing-locally-built-eopkg-files",children:"Listing locally built eopkg files"}),"\n",(0,i.jsx)(o.p,{children:"Use this to list all index and eopkg files in the local repository:"}),"\n",(0,i.jsx)(o.pre,{children:(0,i.jsx)(o.code,{className:"language-bash",children:"go-task list-local\n"})}),"\n",(0,i.jsx)(o.h3,{id:"using-the-local-repository-to-build-a-package",children:"Using the local repository to build a package"}),"\n",(0,i.jsxs)(o.p,{children:["With the ",(0,i.jsx)(o.code,{children:".eopkg"})," files now present in the local repository, you can use them to build a package by running ",(0,i.jsx)(o.code,{children:"go-task build-local"}),", rather than just ",(0,i.jsx)(o.code,{children:"go-task"}),", and ",(0,i.jsx)(o.code,{children:"solbuild"})," will prefer your packages over packages found in the Solus repository."]}),"\n",(0,i.jsxs)(o.p,{children:["Every time you run ",(0,i.jsx)(o.code,{children:"go-task build-local"}),", all ",(0,i.jsx)(o.code,{children:".eopkg"})," files in the local repository will be re-indexed."]}),"\n",(0,i.jsx)(o.h3,{id:"a-streamlined-local-repository-workflow-for-stack-updates",children:"A streamlined local repository workflow for stack updates"}),"\n",(0,i.jsx)(o.p,{children:"If you know ahead of time that you are going to need to put the package files from the current build into the local repository as dependencies for subsequent builds, you can use:"}),"\n",(0,i.jsx)(o.pre,{children:(0,i.jsx)(o.code,{className:"language-bash",children:"go-task build-localcp\n"})}),"\n",(0,i.jsxs)(o.p,{children:["The ",(0,i.jsx)(o.code,{children:"build-localcp"})," task will:"]}),"\n",(0,i.jsxs)(o.ul,{children:["\n",(0,i.jsx)(o.li,{children:"Build the current package against any existing packages in your local repository."}),"\n",(0,i.jsx)(o.li,{children:"Copy the newly built package files to your local repository."}),"\n",(0,i.jsx)(o.li,{children:"Re-index your local repository."}),"\n"]}),"\n",(0,i.jsxs)(o.p,{children:["The ",(0,i.jsx)(o.code,{children:"build-localcp"})," workflow can be very convenient when you are doing stack updates."]}),"\n",(0,i.jsx)(o.h3,{id:"best-practices-when-working-with-a-solbuild-local-repository",children:"Best practices when working with a solbuild local repository"}),"\n",(0,i.jsx)(o.p,{children:"There are some important things to know when working with local repositories, as they may lead to issues later on."}),"\n",(0,i.jsxs)(o.ul,{children:["\n",(0,i.jsxs)(o.li,{children:[(0,i.jsx)(o.code,{children:"solbuild"})," will use your version of a package from the local repository regardless of whether there's a higher release in the Solus repository. Therefore:","\n",(0,i.jsxs)(o.ul,{children:["\n",(0,i.jsxs)(o.li,{children:["Only use the ",(0,i.jsx)(o.code,{children:"build-local"})," or ",(0,i.jsx)(o.code,{children:"build-localcp"})," tasks when required."]}),"\n",(0,i.jsxs)(o.li,{children:["Old packages in the local repository can be removed with the ",(0,i.jsx)(o.code,{children:"clean-local"})," task:","\n",(0,i.jsx)(o.pre,{children:(0,i.jsx)(o.code,{className:"language-bash",children:"go-task clean-local\n"})}),"\n","Note that the ",(0,i.jsx)(o.code,{children:"clean-local"})," task will automatically re-index the (now empty) local repository."]}),"\n",(0,i.jsxs)(o.li,{children:["If a package is already installed in the ",(0,i.jsx)(o.code,{children:"solbuild"})," image, the release number of the updated version must be higher for it to be installed and used as a dependency at build time."]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(o.h2,{id:"installing-packages-from-the-local-repository-index",children:"Installing packages from the local repository index"}),"\n",(0,i.jsxs)(o.p,{children:[(0,i.jsx)(o.code,{children:"eopkg"})," supports resolving packages from more than one repository. This can be used to configure ",(0,i.jsx)(o.code,{children:"eopkg"})," to prefer installing local repository packages over packages from the Solus repository."]}),"\n",(0,i.jsxs)(o.p,{children:["This requires an existing local repository index. If you have used the command ",(0,i.jsx)(o.code,{children:"go-task build-local"}),", then an index was created automatically. Otherwise, you must create one."]}),"\n",(0,i.jsx)(o.h3,{id:"creating-or-updating-the-local-repository-index",children:"Creating or updating the local repository index"}),"\n",(0,i.jsxs)(o.p,{children:["To generate or refresh the ",(0,i.jsx)(o.code,{children:"eopkg"})," index in ",(0,i.jsx)(o.code,{children:"/var/lib/solbuild/local"}),", use the following command:"]}),"\n",(0,i.jsx)(o.pre,{children:(0,i.jsx)(o.code,{className:"language-bash",children:"go-task build-localindex\n"})}),"\n",(0,i.jsxs)(o.p,{children:["Or, if you have our ",(0,i.jsx)(o.a,{href:"/docs/packaging/prepare-for-packaging#set-up-repository-helper-functions-optional",children:"helper functions"})," set up, you get the same result by running:"]}),"\n",(0,i.jsx)(o.pre,{children:(0,i.jsx)(o.code,{className:"language-bash",children:"localrepo_reindex\n"})}),"\n",(0,i.jsxs)(o.p,{children:["Keep in mind that the index needs to be refreshed whenever you add or remove locally built packages to your local repository. Otherwise, ",(0,i.jsx)(o.code,{children:"eopkg"})," won't know that new packages are available or have been removed from the local repository."]}),"\n",(0,i.jsx)(o.h3,{id:"package-resolution-priority-in-eopkg",children:"Package resolution priority in eopkg"}),"\n",(0,i.jsxs)(o.p,{children:[(0,i.jsx)(o.code,{children:"eopkg"})," will always prefer packages from the topmost repository listed with ",(0,i.jsx)(o.code,{children:"eopkg lr"}),"."]}),"\n",(0,i.jsxs)(o.p,{children:["In other words, if a package exists both in the local repository and the Solus repository, ",(0,i.jsx)(o.code,{children:"eopkg"})," will only consider the package from the first repository listed with ",(0,i.jsx)(o.code,{children:"eopkg lr"})," ",(0,i.jsx)(o.em,{children:"regardless of its release number"}),"."]}),"\n",(0,i.jsx)(o.h3,{id:"adding-the-local-repository-index-to-the-eopkg-repository-database",children:"Adding the local repository index to the eopkg repository database"}),"\n",(0,i.jsxs)(o.p,{children:["The easiest way to add the local repository index to the list of repositories known to ",(0,i.jsx)(o.code,{children:"eopkg"}),", in the correct order, is to add the local repository and then ",(0,i.jsx)(o.em,{children:"re-add"})," the official Solus repository:"]}),"\n",(0,i.jsxs)(o.ol,{children:["\n",(0,i.jsxs)(o.li,{children:["First, let's list the repositories currently known to ",(0,i.jsx)(o.code,{children:"eopkg"})," with ",(0,i.jsx)(o.code,{children:"eopkg lr"}),". This should produce output similar to:"]}),"\n"]}),"\n",(0,i.jsx)(o.pre,{children:(0,i.jsx)(o.code,{children:"Solus [active]\n https://cdn.getsol.us/repo/unstable/eopkg-index.xml.xz\n"})}),"\n",(0,i.jsxs)(o.ol,{start:"2",children:["\n",(0,i.jsx)(o.li,{children:"Now the repositories need to be added to account for the desired dependency resolution order:"}),"\n"]}),"\n",(0,i.jsx)(o.pre,{children:(0,i.jsx)(o.code,{className:"language-bash",children:"sudo eopkg ar Local /var/lib/solbuild/local/eopkg-index.xml.xz\nsudo eopkg ar Solus https://cdn.getsol.us/repo/unstable/eopkg-index.xml.xz\n"})}),"\n",(0,i.jsx)(o.p,{children:"This should yield output similar to:"}),"\n",(0,i.jsx)(o.pre,{children:(0,i.jsx)(o.code,{children:"$ sudo eopkg ar Local /var/lib/solbuild/local/eopkg-index.xml.xz\nRepo Local added to system.\nUpdating repository: Local\nPackage database updated.\n$ sudo eopkg ar Solus https://cdn.getsol.us/repo/unstable/eopkg-index.xml.xz\nRepo already present with name Solus and same URL. Removing first.\nRepo Solus added to system.\nUpdating repository: Solus\neopkg-index.xml.xz.sha1sum (40.0 B)100% 765.61 KB/s [00:00:00] [complete]\neopkg-index.xml.xz (2.1 MB)100% 914.38 KB/s [00:00:01] [complete]\nPackage database updated.\n"})}),"\n",(0,i.jsxs)(o.ol,{start:"3",children:["\n",(0,i.jsxs)(o.li,{children:["Check that the dependency resolution order is correct so that packages from the local ",(0,i.jsx)(o.code,{children:"solbuild"})," repository are preferred over the upstream Solus repository."]}),"\n"]}),"\n",(0,i.jsxs)(o.p,{children:[(0,i.jsx)(o.code,{children:"eopkg lr"})," should yield output similar to:"]}),"\n",(0,i.jsx)(o.pre,{children:(0,i.jsx)(o.code,{children:"$ eopkg lr\nLocal [active]\n /var/lib/solbuild/local/eopkg-index.xml.xz\nSolus [active]\n https://cdn.getsol.us/repo/unstable/eopkg-index.xml.xz\n"})}),"\n",(0,i.jsx)(o.h4,{id:"disabling-the-local-solbuild-repository-in-eopkg",children:"Disabling the local solbuild repository in eopkg"}),"\n",(0,i.jsxs)(o.p,{children:['To reset the system to use only packages from the official Solus repository, disable the "Local" ',(0,i.jsx)(o.code,{children:"eopkg"})," repository using the command ",(0,i.jsx)(o.code,{children:"sudo eopkg disable-repo Local"}),"."]}),"\n",(0,i.jsx)(o.p,{children:"The output should look similar to:"}),"\n",(0,i.jsx)(o.pre,{children:(0,i.jsx)(o.code,{children:"$ sudo eopkg disable-repo Local\n$ sudo eopkg lr\nLocal [inactive]\n /var/lib/solbuild/local/eopkg-index.xml.xz\nSolus [active]\n https://cdn.getsol.us/repo/unstable/eopkg-index.xml.xz\n"})}),"\n",(0,i.jsxs)(o.p,{children:['The "Local" ',(0,i.jsx)(o.code,{children:"eopkg"})," repository can be re-enabled with ",(0,i.jsx)(o.code,{children:"sudo eopkg enable-repo Local"}),"."]}),"\n",(0,i.jsx)(o.pre,{children:(0,i.jsx)(o.code,{children:"$ sudo eopkg enable-repo Local\n$ sudo eopkg lr\nLocal [active]\n /var/lib/solbuild/local/eopkg-index.xml.xz\nSolus [active]\n https://cdn.getsol.us/repo/unstable/eopkg-index.xml.xz\n"})}),"\n",(0,i.jsx)(o.h2,{id:"closing-thoughts",children:"Closing thoughts"}),"\n",(0,i.jsx)(o.p,{children:"Congratulations on making it this far! Your system should now be ready for convenient deployment and testing of locally built packages."})]})}function p(e={}){const{wrapper:o}={...(0,s.a)(),...e.components};return o?(0,i.jsx)(o,{...e,children:(0,i.jsx)(d,{...e})}):d(e)}},11151:(e,o,l)=>{l.d(o,{Z:()=>a,a:()=>r});var i=l(67294);const s={},n=i.createContext(s);function r(e){const o=i.useContext(n);return i.useMemo((function(){return"function"==typeof e?e(o):{...o,...e}}),[o,e])}function a(e){let o;return o=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:r(e.components),i.createElement(n.Provider,{value:o},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/88a83a8c.9ab002a9.js b/assets/js/88a83a8c.9ab002a9.js deleted file mode 100644 index ecbb42c99..000000000 --- a/assets/js/88a83a8c.9ab002a9.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[1242],{65574:(e,s,t)=>{t.r(s),t.d(s,{assets:()=>r,contentTitle:()=>i,default:()=>c,frontMatter:()=>o,metadata:()=>l,toc:()=>d});var n=t(85893),a=t(11151);const o={title:"KDE Wallet",summary:"A quick introduction to using KWallet on Solus"},i="KDE Wallet and SSH keys",l={id:"user/software/utilities/kwallet",title:"KDE Wallet",description:"In KDE Plasma, the KDE Wallet is responsible for securely storing and supplying user credentials to the various KDE applications that request them.",source:"@site/docs/user/software/utilities/kwallet.md",sourceDirName:"user/software/utilities",slug:"/user/software/utilities/kwallet",permalink:"/docs/user/software/utilities/kwallet",draft:!1,unlisted:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/software/utilities/kwallet.md",tags:[],version:"current",lastUpdatedAt:1732716912e3,frontMatter:{title:"KDE Wallet",summary:"A quick introduction to using KWallet on Solus"},sidebar:"userSidebar",previous:{title:"KSysGuard",permalink:"/docs/user/software/utilities/ksysguard"},next:{title:"Virtualization",permalink:"/docs/category/virtualization"}},r={},d=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"The <code>SSH_ASKPASS</code> environment variable",id:"the-ssh_askpass-environment-variable",level:2},{value:"Create <code>~/.config/autostart/ssh-add.desktop</code>",id:"create-configautostartssh-adddesktop",level:2},{value:"Example",id:"example",level:3},{value:"Set correct permissions",id:"set-correct-permissions",level:3},{value:"Re-log to test your changes",id:"re-log-to-test-your-changes",level:2},{value:"Unlock SSH key passphrases automatically on login",id:"unlock-ssh-key-passphrases-automatically-on-login",level:2},{value:"Troubleshooting",id:"troubleshooting",level:2}];function h(e){const s={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",p:"p",pre:"pre",...(0,a.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(s.header,{children:(0,n.jsx)(s.h1,{id:"kde-wallet-and-ssh-keys",children:"KDE Wallet and SSH keys"})}),"\n",(0,n.jsx)(s.p,{children:"In KDE Plasma, the KDE Wallet is responsible for securely storing and supplying user credentials to the various KDE applications that request them."}),"\n",(0,n.jsx)(s.p,{children:"Out of the box, the Solus KDE Plasma Desktop is already configured to use the KDE Wallet PAM module, which unlocks the KDE Wallet on session login."}),"\n",(0,n.jsx)(s.p,{children:"However, additional configuration is needed to make the KDE Wallet manage SSH key passphrases."}),"\n",(0,n.jsx)(s.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,n.jsx)(s.p,{children:"This document assumes that you are familiar with utilising SSH key passphrases."}),"\n",(0,n.jsxs)(s.p,{children:["For more information, see ",(0,n.jsx)(s.a,{href:"https://docs.github.com/en/authentication/connecting-to-github-with-ssh/working-with-ssh-key-passphrases",children:"working with SSH key passphrases"})]}),"\n",(0,n.jsxs)(s.h2,{id:"the-ssh_askpass-environment-variable",children:["The ",(0,n.jsx)(s.code,{children:"SSH_ASKPASS"})," environment variable"]}),"\n",(0,n.jsxs)(s.p,{children:["The ",(0,n.jsx)(s.code,{children:"SSH_ASKPASS"})," environment variable tells the SSH subsystem which application to use when prompting the user for SSH key passphrases."]}),"\n",(0,n.jsxs)(s.p,{children:["On the Solus KDE Plasma Desktop spin, ",(0,n.jsx)(s.code,{children:"ksshaskpass"})," is installed out of the box and ",(0,n.jsx)(s.code,{children:"SSH_ASKPASS"})," is set to ",(0,n.jsx)(s.code,{children:"ksshaskpass"})," in the file ",(0,n.jsx)(s.code,{children:"/usr/share/xdg/plasma-workspace/env/50-solus-defaults.sh"})," by default."]}),"\n",(0,n.jsxs)(s.h2,{id:"create-configautostartssh-adddesktop",children:["Create ",(0,n.jsx)(s.code,{children:"~/.config/autostart/ssh-add.desktop"})]}),"\n",(0,n.jsxs)(s.p,{children:["The contents of ",(0,n.jsx)(s.code,{children:"~/.config/autostart/ssh-add.desktop"})," should reflect the SSH keys you want to manage using the KDE Wallet."]}),"\n",(0,n.jsx)(s.h3,{id:"example",children:"Example"}),"\n",(0,n.jsxs)(s.p,{children:["Below is an example of the contents of ",(0,n.jsx)(s.code,{children:"~/.config/autostart/ssh-add.desktop"}),":"]}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-ini",children:"[Desktop Entry]\nExec=ssh-add -q\nName=ssh-add\nType=Application\n"})}),"\n",(0,n.jsxs)(s.p,{children:["Tip: The above ssh-add.desktop file will only add the default key ",(0,n.jsx)(s.code,{children:"~/.ssh/id_rsa"}),". Assuming you have different keys named key1, key2 etc you need to change the above desktop file to"]}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-ini",children:"[Desktop Entry]\nExec=ssh-add -q ~/.ssh/key1 ~/.ssh/key2 ~/.ssh/key3\nName=ssh-add\nType=Application\n"})}),"\n",(0,n.jsx)(s.h3,{id:"set-correct-permissions",children:"Set correct permissions"}),"\n",(0,n.jsx)(s.p,{children:"After you created your file inside the autostart folder you have to give it the correct permissions"}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-bash",children:"chmod 700 ~/.config/autostart/ssh-add.desktop\n"})}),"\n",(0,n.jsx)(s.p,{children:"with this the file should appear inside the autostart settings"}),"\n",(0,n.jsx)(s.h2,{id:"re-log-to-test-your-changes",children:"Re-log to test your changes"}),"\n",(0,n.jsx)(s.p,{children:"After logging out and back in, you should now be prompted by the KDE Wallet to input your SSH key passphrases."}),"\n",(0,n.jsx)(s.h2,{id:"unlock-ssh-key-passphrases-automatically-on-login",children:"Unlock SSH key passphrases automatically on login"}),"\n",(0,n.jsx)(s.p,{children:"KDE Wallet supports automatically unlocking your SSH key passphrases on login."}),"\n",(0,n.jsx)(s.p,{children:"For this to work, your KDE Wallet password needs to be identical to your login password."}),"\n",(0,n.jsx)(s.h2,{id:"troubleshooting",children:"Troubleshooting"}),"\n",(0,n.jsx)(s.p,{children:"ssh key doesn't get triggered, you can force this manually by running this command."}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-bash",children:"SSH_ASKPASS=/usr/bin/ksshaskpass ssh-add < /dev/null\n"})})]})}function c(e={}){const{wrapper:s}={...(0,a.a)(),...e.components};return s?(0,n.jsx)(s,{...e,children:(0,n.jsx)(h,{...e})}):h(e)}},11151:(e,s,t)=>{t.d(s,{Z:()=>l,a:()=>i});var n=t(67294);const a={},o=n.createContext(a);function i(e){const s=n.useContext(o);return n.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function l(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:i(e.components),n.createElement(o.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/88a83a8c.c8c11340.js b/assets/js/88a83a8c.c8c11340.js new file mode 100644 index 000000000..c8f8bdd4f --- /dev/null +++ b/assets/js/88a83a8c.c8c11340.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([["3187"],{23371:function(e,s,t){t.r(s),t.d(s,{metadata:()=>n,contentTitle:()=>l,default:()=>c,assets:()=>r,toc:()=>d,frontMatter:()=>o});var n=JSON.parse('{"id":"user/software/utilities/kwallet","title":"KDE Wallet","description":"In KDE Plasma, the KDE Wallet is responsible for securely storing and supplying user credentials to the various KDE applications that request them.","source":"@site/docs/user/software/utilities/kwallet.md","sourceDirName":"user/software/utilities","slug":"/user/software/utilities/kwallet","permalink":"/docs/user/software/utilities/kwallet","draft":false,"unlisted":false,"editUrl":"https://github.com/getsolus/help-center-docs/tree/master/docs/user/software/utilities/kwallet.md","tags":[],"version":"current","lastUpdatedAt":1733757592000,"frontMatter":{"title":"KDE Wallet","summary":"A quick introduction to using KWallet on Solus"},"sidebar":"userSidebar","previous":{"title":"KSysGuard","permalink":"/docs/user/software/utilities/ksysguard"},"next":{"title":"Virtualization","permalink":"/docs/category/virtualization"}}'),a=t("85893"),i=t("50065");let o={title:"KDE Wallet",summary:"A quick introduction to using KWallet on Solus"},l="KDE Wallet and SSH keys",r={},d=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"The <code>SSH_ASKPASS</code> environment variable",id:"the-ssh_askpass-environment-variable",level:2},{value:"Create <code>~/.config/autostart/ssh-add.desktop</code>",id:"create-configautostartssh-adddesktop",level:2},{value:"Example",id:"example",level:3},{value:"Set correct permissions",id:"set-correct-permissions",level:3},{value:"Re-log to test your changes",id:"re-log-to-test-your-changes",level:2},{value:"Unlock SSH key passphrases automatically on login",id:"unlock-ssh-key-passphrases-automatically-on-login",level:2},{value:"Troubleshooting",id:"troubleshooting",level:2}];function h(e){let s={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",p:"p",pre:"pre",...(0,i.a)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(s.header,{children:(0,a.jsx)(s.h1,{id:"kde-wallet-and-ssh-keys",children:"KDE Wallet and SSH keys"})}),"\n",(0,a.jsx)(s.p,{children:"In KDE Plasma, the KDE Wallet is responsible for securely storing and supplying user credentials to the various KDE applications that request them."}),"\n",(0,a.jsx)(s.p,{children:"Out of the box, the Solus KDE Plasma Desktop is already configured to use the KDE Wallet PAM module, which unlocks the KDE Wallet on session login."}),"\n",(0,a.jsx)(s.p,{children:"However, additional configuration is needed to make the KDE Wallet manage SSH key passphrases."}),"\n",(0,a.jsx)(s.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,a.jsx)(s.p,{children:"This document assumes that you are familiar with utilising SSH key passphrases."}),"\n",(0,a.jsxs)(s.p,{children:["For more information, see ",(0,a.jsx)(s.a,{href:"https://docs.github.com/en/authentication/connecting-to-github-with-ssh/working-with-ssh-key-passphrases",children:"working with SSH key passphrases"})]}),"\n",(0,a.jsxs)(s.h2,{id:"the-ssh_askpass-environment-variable",children:["The ",(0,a.jsx)(s.code,{children:"SSH_ASKPASS"})," environment variable"]}),"\n",(0,a.jsxs)(s.p,{children:["The ",(0,a.jsx)(s.code,{children:"SSH_ASKPASS"})," environment variable tells the SSH subsystem which application to use when prompting the user for SSH key passphrases."]}),"\n",(0,a.jsxs)(s.p,{children:["On the Solus KDE Plasma Desktop spin, ",(0,a.jsx)(s.code,{children:"ksshaskpass"})," is installed out of the box and ",(0,a.jsx)(s.code,{children:"SSH_ASKPASS"})," is set to ",(0,a.jsx)(s.code,{children:"ksshaskpass"})," in the file ",(0,a.jsx)(s.code,{children:"/usr/share/xdg/plasma-workspace/env/50-solus-defaults.sh"})," by default."]}),"\n",(0,a.jsxs)(s.h2,{id:"create-configautostartssh-adddesktop",children:["Create ",(0,a.jsx)(s.code,{children:"~/.config/autostart/ssh-add.desktop"})]}),"\n",(0,a.jsxs)(s.p,{children:["The contents of ",(0,a.jsx)(s.code,{children:"~/.config/autostart/ssh-add.desktop"})," should reflect the SSH keys you want to manage using the KDE Wallet."]}),"\n",(0,a.jsx)(s.h3,{id:"example",children:"Example"}),"\n",(0,a.jsxs)(s.p,{children:["Below is an example of the contents of ",(0,a.jsx)(s.code,{children:"~/.config/autostart/ssh-add.desktop"}),":"]}),"\n",(0,a.jsx)(s.pre,{children:(0,a.jsx)(s.code,{className:"language-ini",children:"[Desktop Entry]\nExec=ssh-add -q\nName=ssh-add\nType=Application\n"})}),"\n",(0,a.jsxs)(s.p,{children:["Tip: The above ssh-add.desktop file will only add the default key ",(0,a.jsx)(s.code,{children:"~/.ssh/id_rsa"}),". Assuming you have different keys named key1, key2 etc you need to change the above desktop file to"]}),"\n",(0,a.jsx)(s.pre,{children:(0,a.jsx)(s.code,{className:"language-ini",children:"[Desktop Entry]\nExec=ssh-add -q ~/.ssh/key1 ~/.ssh/key2 ~/.ssh/key3\nName=ssh-add\nType=Application\n"})}),"\n",(0,a.jsx)(s.h3,{id:"set-correct-permissions",children:"Set correct permissions"}),"\n",(0,a.jsx)(s.p,{children:"After you created your file inside the autostart folder you have to give it the correct permissions"}),"\n",(0,a.jsx)(s.pre,{children:(0,a.jsx)(s.code,{className:"language-bash",children:"chmod 700 ~/.config/autostart/ssh-add.desktop\n"})}),"\n",(0,a.jsx)(s.p,{children:"with this the file should appear inside the autostart settings"}),"\n",(0,a.jsx)(s.h2,{id:"re-log-to-test-your-changes",children:"Re-log to test your changes"}),"\n",(0,a.jsx)(s.p,{children:"After logging out and back in, you should now be prompted by the KDE Wallet to input your SSH key passphrases."}),"\n",(0,a.jsx)(s.h2,{id:"unlock-ssh-key-passphrases-automatically-on-login",children:"Unlock SSH key passphrases automatically on login"}),"\n",(0,a.jsx)(s.p,{children:"KDE Wallet supports automatically unlocking your SSH key passphrases on login."}),"\n",(0,a.jsx)(s.p,{children:"For this to work, your KDE Wallet password needs to be identical to your login password."}),"\n",(0,a.jsx)(s.h2,{id:"troubleshooting",children:"Troubleshooting"}),"\n",(0,a.jsx)(s.p,{children:"ssh key doesn't get triggered, you can force this manually by running this command."}),"\n",(0,a.jsx)(s.pre,{children:(0,a.jsx)(s.code,{className:"language-bash",children:"SSH_ASKPASS=/usr/bin/ksshaskpass ssh-add < /dev/null\n"})})]})}function c(e={}){let{wrapper:s}={...(0,i.a)(),...e.components};return s?(0,a.jsx)(s,{...e,children:(0,a.jsx)(h,{...e})}):h(e)}},50065:function(e,s,t){t.d(s,{Z:function(){return l},a:function(){return o}});var n=t(67294);let a={},i=n.createContext(a);function o(e){let s=n.useContext(i);return n.useMemo(function(){return"function"==typeof e?e(s):{...s,...e}},[s,e])}function l(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:o(e.components),n.createElement(i.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/8917.d2a12266.js b/assets/js/8917.d2a12266.js deleted file mode 100644 index ee2a22b1f..000000000 --- a/assets/js/8917.d2a12266.js +++ /dev/null @@ -1,75 +0,0 @@ -/*! For license information please see 8917.d2a12266.js.LICENSE.txt */ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[8917],{63186:(e,t,n)=>{n.d(t,{Z:()=>l});n(67294);var o=n(57164),r=n(55361),i=n(85893);function a(e,t){switch(e){case"noicon":case"loaded":return null;case"loading":return(0,r.I)({id:"theme.IdealImageMessage.loading",message:"Loading...",description:"When the full-scale image is loading"});case"load":{const{pickedSrc:e}=t,{size:n}=e,o=n?` (${function(e){const t=["B","KB","MB","GB","TB"];if(0===e)return"n/a";const n=Math.floor(Math.log(e)/Math.log(1024));return 0===n?`${e} ${t[n]}`:`${(e/1024**n).toFixed(1)} ${t[n]}`}(n)})`:"";return(0,r.I)({id:"theme.IdealImageMessage.load",message:"Click to load{sizeMessage}",description:"To prompt users to load the full image. sizeMessage is a parenthesized size figure."},{sizeMessage:o})}case"offline":return(0,r.I)({id:"theme.IdealImageMessage.offline",message:"Your browser is offline. Image not loaded",description:"When the user is viewing an offline document"});case"error":{const{loadInfo:e}=t;return 404===e?(0,r.I)({id:"theme.IdealImageMessage.404error",message:"404. Image not found",description:"When the image is not found"}):(0,r.I)({id:"theme.IdealImageMessage.error",message:"Error. Click to reload",description:"When the image fails to load for unknown error"})}default:throw new Error(`Wrong icon: ${e}`)}}function l(e){const{img:t,...n}=e;return"string"==typeof t||"default"in t?(0,i.jsx)("img",{src:"string"==typeof t?t:t.default,...n}):(0,i.jsx)(o.Z,{...n,height:t.src.height??100,width:t.src.width??100,placeholder:{lqip:t.preSrc},src:t.src.src,srcSet:t.src.images.map((e=>({...e,src:e.path}))),getMessage:a})}},94229:(e,t,n)=>{var o=n(66344);t.Z=void 0;var r=o(n(64938)),i=n(85893),a=(0,r.default)((0,i.jsx)("path",{d:"M19.14 12.94c.04-.3.06-.61.06-.94 0-.32-.02-.64-.07-.94l2.03-1.58c.18-.14.23-.41.12-.61l-1.92-3.32c-.12-.22-.37-.29-.59-.22l-2.39.96c-.5-.38-1.03-.7-1.62-.94l-.36-2.54c-.04-.24-.24-.41-.48-.41h-3.84c-.24 0-.43.17-.47.41l-.36 2.54c-.59.24-1.13.57-1.62.94l-2.39-.96c-.22-.08-.47 0-.59.22L2.74 8.87c-.12.21-.08.47.12.61l2.03 1.58c-.05.3-.09.63-.09.94s.02.64.07.94l-2.03 1.58c-.18.14-.23.41-.12.61l1.92 3.32c.12.22.37.29.59.22l2.39-.96c.5.38 1.03.7 1.62.94l.36 2.54c.05.24.24.41.48.41h3.84c.24 0 .44-.17.47-.41l.36-2.54c.59-.24 1.13-.56 1.62-.94l2.39.96c.22.08.47 0 .59-.22l1.92-3.32c.12-.22.07-.47-.12-.61l-2.01-1.58zM12 15.6c-1.98 0-3.6-1.62-3.6-3.6s1.62-3.6 3.6-3.6 3.6 1.62 3.6 3.6-1.62 3.6-3.6 3.6z"}),"Settings");t.Z=a},39217:(e,t,n)=>{var o=n(66344);t.Z=void 0;var r=o(n(64938)),i=n(85893),a=(0,r.default)((0,i.jsx)("path",{d:"M7 20h4c0 1.1-.9 2-2 2s-2-.9-2-2zm-2-1h8v-2H5v2zm11.5-9.5c0 3.82-2.66 5.86-3.77 6.5H5.27c-1.11-.64-3.77-2.68-3.77-6.5C1.5 5.36 4.86 2 9 2s7.5 3.36 7.5 7.5zm4.87-2.13L20 8l1.37.63L22 10l.63-1.37L24 8l-1.37-.63L22 6l-.63 1.37zM19 6l.94-2.06L22 3l-2.06-.94L19 0l-.94 2.06L16 3l2.06.94L19 6z"}),"TipsAndUpdates");t.Z=a},78146:(e,t,n)=>{n.d(t,{Z:()=>oe});var o=n(80102),r=n(83117),i=n(67294),a=n(86010),l=n(47925),s=n(94780),c=n(41796),u=n(90948),d=n(71657),p=n(11467),f=n(798),h=n(18791);var v=n(90144);const m=i.createContext(null);function g(e,t){var n=Object.create(null);return e&&i.Children.map(e,(function(e){return e})).forEach((function(e){n[e.key]=function(e){return t&&(0,i.isValidElement)(e)?t(e):e}(e)})),n}function b(e,t,n){return null!=n[t]?n[t]:e.props[t]}function y(e,t,n){var o=g(e.children),r=function(e,t){function n(n){return n in t?t[n]:e[n]}e=e||{},t=t||{};var o,r=Object.create(null),i=[];for(var a in e)a in t?i.length&&(r[a]=i,i=[]):i.push(a);var l={};for(var s in t){if(r[s])for(o=0;o<r[s].length;o++){var c=r[s][o];l[r[s][o]]=n(c)}l[s]=n(s)}for(o=0;o<i.length;o++)l[i[o]]=n(i[o]);return l}(t,o);return Object.keys(r).forEach((function(a){var l=r[a];if((0,i.isValidElement)(l)){var s=a in t,c=a in o,u=t[a],d=(0,i.isValidElement)(u)&&!u.props.in;!c||s&&!d?c||!s||d?c&&s&&(0,i.isValidElement)(u)&&(r[a]=(0,i.cloneElement)(l,{onExited:n.bind(null,l),in:u.props.in,exit:b(l,"exit",e),enter:b(l,"enter",e)})):r[a]=(0,i.cloneElement)(l,{in:!1}):r[a]=(0,i.cloneElement)(l,{onExited:n.bind(null,l),in:!0,exit:b(l,"exit",e),enter:b(l,"enter",e)})}})),r}var w=Object.values||function(e){return Object.keys(e).map((function(t){return e[t]}))},S=function(e){function t(t,n){var o,r=(o=e.call(this,t,n)||this).handleExited.bind(function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(o));return o.state={contextValue:{isMounting:!0},handleExited:r,firstRender:!0},o}(0,v.Z)(t,e);var n=t.prototype;return n.componentDidMount=function(){this.mounted=!0,this.setState({contextValue:{isMounting:!1}})},n.componentWillUnmount=function(){this.mounted=!1},t.getDerivedStateFromProps=function(e,t){var n,o,r=t.children,a=t.handleExited;return{children:t.firstRender?(n=e,o=a,g(n.children,(function(e){return(0,i.cloneElement)(e,{onExited:o.bind(null,e),in:!0,appear:b(e,"appear",n),enter:b(e,"enter",n),exit:b(e,"exit",n)})}))):y(e,r,a),firstRender:!1}},n.handleExited=function(e,t){var n=g(this.props.children);e.key in n||(e.props.onExited&&e.props.onExited(t),this.mounted&&this.setState((function(t){var n=(0,r.Z)({},t.children);return delete n[e.key],{children:n}})))},n.render=function(){var e=this.props,t=e.component,n=e.childFactory,r=(0,o.Z)(e,["component","childFactory"]),a=this.state.contextValue,l=w(this.state.children).map(n);return delete r.appear,delete r.enter,delete r.exit,null===t?i.createElement(m.Provider,{value:a},l):i.createElement(m.Provider,{value:a},i.createElement(t,r,l))},t}(i.Component);S.propTypes={},S.defaultProps={component:"div",childFactory:function(e){return e}};const x=S;n(27278);var E=n(48137);n(8417),n(8679);function O(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return(0,E.O)(t)}var M=function(){var e=O.apply(void 0,arguments),t="animation-"+e.name;return{name:t,styles:"@keyframes "+t+"{"+e.styles+"}",anim:1,toString:function(){return"_EMO_"+this.name+"_"+this.styles+"_EMO_"}}};var R=n(85893);const Z=function(e){const{className:t,classes:n,pulsate:o=!1,rippleX:r,rippleY:l,rippleSize:s,in:c,onExited:u,timeout:d}=e,[p,f]=i.useState(!1),h=(0,a.Z)(t,n.ripple,n.rippleVisible,o&&n.ripplePulsate),v={width:s,height:s,top:-s/2+l,left:-s/2+r},m=(0,a.Z)(n.child,p&&n.childLeaving,o&&n.childPulsate);return c||p||f(!0),i.useEffect((()=>{if(!c&&null!=u){const e=setTimeout(u,d);return()=>{clearTimeout(e)}}}),[u,c,d]),(0,R.jsx)("span",{className:h,style:v,children:(0,R.jsx)("span",{className:m})})};var C=n(1588);const P=(0,C.Z)("MuiTouchRipple",["root","ripple","rippleVisible","ripplePulsate","child","childLeaving","childPulsate"]),z=["center","classes","className"];let T,j,k,_,L=e=>e;const $=M(T||(T=L` - 0% { - transform: scale(0); - opacity: 0.1; - } - - 100% { - transform: scale(1); - opacity: 0.3; - } -`)),B=M(j||(j=L` - 0% { - opacity: 1; - } - - 100% { - opacity: 0; - } -`)),I=M(k||(k=L` - 0% { - transform: scale(1); - } - - 50% { - transform: scale(0.92); - } - - 100% { - transform: scale(1); - } -`)),N=(0,u.ZP)("span",{name:"MuiTouchRipple",slot:"Root"})({overflow:"hidden",pointerEvents:"none",position:"absolute",zIndex:0,top:0,right:0,bottom:0,left:0,borderRadius:"inherit"}),W=(0,u.ZP)(Z,{name:"MuiTouchRipple",slot:"Ripple"})(_||(_=L` - opacity: 0; - position: absolute; - - &.${0} { - opacity: 0.3; - transform: scale(1); - animation-name: ${0}; - animation-duration: ${0}ms; - animation-timing-function: ${0}; - } - - &.${0} { - animation-duration: ${0}ms; - } - - & .${0} { - opacity: 1; - display: block; - width: 100%; - height: 100%; - border-radius: 50%; - background-color: currentColor; - } - - & .${0} { - opacity: 0; - animation-name: ${0}; - animation-duration: ${0}ms; - animation-timing-function: ${0}; - } - - & .${0} { - position: absolute; - /* @noflip */ - left: 0px; - top: 0; - animation-name: ${0}; - animation-duration: 2500ms; - animation-timing-function: ${0}; - animation-iteration-count: infinite; - animation-delay: 200ms; - } -`),P.rippleVisible,$,550,(({theme:e})=>e.transitions.easing.easeInOut),P.ripplePulsate,(({theme:e})=>e.transitions.duration.shorter),P.child,P.childLeaving,B,550,(({theme:e})=>e.transitions.easing.easeInOut),P.childPulsate,I,(({theme:e})=>e.transitions.easing.easeInOut)),V=i.forwardRef((function(e,t){const n=(0,d.Z)({props:e,name:"MuiTouchRipple"}),{center:l=!1,classes:s={},className:c}=n,u=(0,o.Z)(n,z),[p,f]=i.useState([]),h=i.useRef(0),v=i.useRef(null);i.useEffect((()=>{v.current&&(v.current(),v.current=null)}),[p]);const m=i.useRef(!1),g=i.useRef(0),b=i.useRef(null),y=i.useRef(null);i.useEffect((()=>()=>{g.current&&clearTimeout(g.current)}),[]);const w=i.useCallback((e=>{const{pulsate:t,rippleX:n,rippleY:o,rippleSize:r,cb:i}=e;f((e=>[...e,(0,R.jsx)(W,{classes:{ripple:(0,a.Z)(s.ripple,P.ripple),rippleVisible:(0,a.Z)(s.rippleVisible,P.rippleVisible),ripplePulsate:(0,a.Z)(s.ripplePulsate,P.ripplePulsate),child:(0,a.Z)(s.child,P.child),childLeaving:(0,a.Z)(s.childLeaving,P.childLeaving),childPulsate:(0,a.Z)(s.childPulsate,P.childPulsate)},timeout:550,pulsate:t,rippleX:n,rippleY:o,rippleSize:r},h.current)])),h.current+=1,v.current=i}),[s]),S=i.useCallback(((e={},t={},n=(()=>{}))=>{const{pulsate:o=!1,center:r=l||t.pulsate,fakeElement:i=!1}=t;if("mousedown"===(null==e?void 0:e.type)&&m.current)return void(m.current=!1);"touchstart"===(null==e?void 0:e.type)&&(m.current=!0);const a=i?null:y.current,s=a?a.getBoundingClientRect():{width:0,height:0,left:0,top:0};let c,u,d;if(r||void 0===e||0===e.clientX&&0===e.clientY||!e.clientX&&!e.touches)c=Math.round(s.width/2),u=Math.round(s.height/2);else{const{clientX:t,clientY:n}=e.touches&&e.touches.length>0?e.touches[0]:e;c=Math.round(t-s.left),u=Math.round(n-s.top)}if(r)d=Math.sqrt((2*s.width**2+s.height**2)/3),d%2==0&&(d+=1);else{const e=2*Math.max(Math.abs((a?a.clientWidth:0)-c),c)+2,t=2*Math.max(Math.abs((a?a.clientHeight:0)-u),u)+2;d=Math.sqrt(e**2+t**2)}null!=e&&e.touches?null===b.current&&(b.current=()=>{w({pulsate:o,rippleX:c,rippleY:u,rippleSize:d,cb:n})},g.current=setTimeout((()=>{b.current&&(b.current(),b.current=null)}),80)):w({pulsate:o,rippleX:c,rippleY:u,rippleSize:d,cb:n})}),[l,w]),E=i.useCallback((()=>{S({},{pulsate:!0})}),[S]),O=i.useCallback(((e,t)=>{if(clearTimeout(g.current),"touchend"===(null==e?void 0:e.type)&&b.current)return b.current(),b.current=null,void(g.current=setTimeout((()=>{O(e,t)})));b.current=null,f((e=>e.length>0?e.slice(1):e)),v.current=t}),[]);return i.useImperativeHandle(t,(()=>({pulsate:E,start:S,stop:O})),[E,S,O]),(0,R.jsx)(N,(0,r.Z)({className:(0,a.Z)(P.root,s.root,c),ref:y},u,{children:(0,R.jsx)(x,{component:null,exit:!0,children:p})}))}));var D=n(34867);function H(e){return(0,D.Z)("MuiButtonBase",e)}const F=(0,C.Z)("MuiButtonBase",["root","disabled","focusVisible"]),A=["action","centerRipple","children","className","component","disabled","disableRipple","disableTouchRipple","focusRipple","focusVisibleClassName","LinkComponent","onBlur","onClick","onContextMenu","onDragLeave","onFocus","onFocusVisible","onKeyDown","onKeyUp","onMouseDown","onMouseLeave","onMouseUp","onTouchEnd","onTouchMove","onTouchStart","tabIndex","TouchRippleProps","touchRippleRef","type"],q=(0,u.ZP)("button",{name:"MuiButtonBase",slot:"Root",overridesResolver:(e,t)=>t.root})({display:"inline-flex",alignItems:"center",justifyContent:"center",position:"relative",boxSizing:"border-box",WebkitTapHighlightColor:"transparent",backgroundColor:"transparent",outline:0,border:0,margin:0,borderRadius:0,padding:0,cursor:"pointer",userSelect:"none",verticalAlign:"middle",MozAppearance:"none",WebkitAppearance:"none",textDecoration:"none",color:"inherit","&::-moz-focus-inner":{borderStyle:"none"},[`&.${F.disabled}`]:{pointerEvents:"none",cursor:"default"},"@media print":{colorAdjust:"exact"}}),U=i.forwardRef((function(e,t){const n=(0,d.Z)({props:e,name:"MuiButtonBase"}),{action:l,centerRipple:c=!1,children:u,className:v,component:m="button",disabled:g=!1,disableRipple:b=!1,disableTouchRipple:y=!1,focusRipple:w=!1,LinkComponent:S="a",onBlur:x,onClick:E,onContextMenu:O,onDragLeave:M,onFocus:Z,onFocusVisible:C,onKeyDown:P,onKeyUp:z,onMouseDown:T,onMouseLeave:j,onMouseUp:k,onTouchEnd:_,onTouchMove:L,onTouchStart:$,tabIndex:B=0,TouchRippleProps:I,touchRippleRef:N,type:W}=n,D=(0,o.Z)(n,A),F=i.useRef(null),U=i.useRef(null),K=(0,p.Z)(U,N),{isFocusVisibleRef:X,onFocus:Y,onBlur:G,ref:J}=(0,h.Z)(),[Q,ee]=i.useState(!1);g&&Q&&ee(!1),i.useImperativeHandle(l,(()=>({focusVisible:()=>{ee(!0),F.current.focus()}})),[]);const[te,ne]=i.useState(!1);i.useEffect((()=>{ne(!0)}),[]);const oe=te&&!b&&!g;function re(e,t,n=y){return(0,f.Z)((o=>{t&&t(o);return!n&&U.current&&U.current[e](o),!0}))}i.useEffect((()=>{Q&&w&&!b&&te&&U.current.pulsate()}),[b,w,Q,te]);const ie=re("start",T),ae=re("stop",O),le=re("stop",M),se=re("stop",k),ce=re("stop",(e=>{Q&&e.preventDefault(),j&&j(e)})),ue=re("start",$),de=re("stop",_),pe=re("stop",L),fe=re("stop",(e=>{G(e),!1===X.current&&ee(!1),x&&x(e)}),!1),he=(0,f.Z)((e=>{F.current||(F.current=e.currentTarget),Y(e),!0===X.current&&(ee(!0),C&&C(e)),Z&&Z(e)})),ve=()=>{const e=F.current;return m&&"button"!==m&&!("A"===e.tagName&&e.href)},me=i.useRef(!1),ge=(0,f.Z)((e=>{w&&!me.current&&Q&&U.current&&" "===e.key&&(me.current=!0,U.current.stop(e,(()=>{U.current.start(e)}))),e.target===e.currentTarget&&ve()&&" "===e.key&&e.preventDefault(),P&&P(e),e.target===e.currentTarget&&ve()&&"Enter"===e.key&&!g&&(e.preventDefault(),E&&E(e))})),be=(0,f.Z)((e=>{w&&" "===e.key&&U.current&&Q&&!e.defaultPrevented&&(me.current=!1,U.current.stop(e,(()=>{U.current.pulsate(e)}))),z&&z(e),E&&e.target===e.currentTarget&&ve()&&" "===e.key&&!e.defaultPrevented&&E(e)}));let ye=m;"button"===ye&&(D.href||D.to)&&(ye=S);const we={};"button"===ye?(we.type=void 0===W?"button":W,we.disabled=g):(D.href||D.to||(we.role="button"),g&&(we["aria-disabled"]=g));const Se=(0,p.Z)(t,J,F);const xe=(0,r.Z)({},n,{centerRipple:c,component:m,disabled:g,disableRipple:b,disableTouchRipple:y,focusRipple:w,tabIndex:B,focusVisible:Q}),Ee=(e=>{const{disabled:t,focusVisible:n,focusVisibleClassName:o,classes:r}=e,i={root:["root",t&&"disabled",n&&"focusVisible"]},a=(0,s.Z)(i,H,r);return n&&o&&(a.root+=` ${o}`),a})(xe);return(0,R.jsxs)(q,(0,r.Z)({as:ye,className:(0,a.Z)(Ee.root,v),ownerState:xe,onBlur:fe,onClick:E,onContextMenu:ae,onFocus:he,onKeyDown:ge,onKeyUp:be,onMouseDown:ie,onMouseLeave:ce,onMouseUp:se,onDragLeave:le,onTouchEnd:de,onTouchMove:pe,onTouchStart:ue,ref:Se,tabIndex:g?-1:B,type:W},we,D,{children:[u,oe?(0,R.jsx)(V,(0,r.Z)({ref:K,center:c},I)):null]}))}));var K=n(98216);function X(e){return(0,D.Z)("MuiButton",e)}const Y=(0,C.Z)("MuiButton",["root","text","textInherit","textPrimary","textSecondary","textSuccess","textError","textInfo","textWarning","outlined","outlinedInherit","outlinedPrimary","outlinedSecondary","outlinedSuccess","outlinedError","outlinedInfo","outlinedWarning","contained","containedInherit","containedPrimary","containedSecondary","containedSuccess","containedError","containedInfo","containedWarning","disableElevation","focusVisible","disabled","colorInherit","textSizeSmall","textSizeMedium","textSizeLarge","outlinedSizeSmall","outlinedSizeMedium","outlinedSizeLarge","containedSizeSmall","containedSizeMedium","containedSizeLarge","sizeMedium","sizeSmall","sizeLarge","fullWidth","startIcon","endIcon","iconSizeSmall","iconSizeMedium","iconSizeLarge"]);var G=n(98363);const J=["children","color","component","className","disabled","disableElevation","disableFocusRipple","endIcon","focusVisibleClassName","fullWidth","size","startIcon","type","variant"],Q=e=>(0,r.Z)({},"small"===e.size&&{"& > *:nth-of-type(1)":{fontSize:18}},"medium"===e.size&&{"& > *:nth-of-type(1)":{fontSize:20}},"large"===e.size&&{"& > *:nth-of-type(1)":{fontSize:22}}),ee=(0,u.ZP)(U,{shouldForwardProp:e=>(0,u.FO)(e)||"classes"===e,name:"MuiButton",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:n}=e;return[t.root,t[n.variant],t[`${n.variant}${(0,K.Z)(n.color)}`],t[`size${(0,K.Z)(n.size)}`],t[`${n.variant}Size${(0,K.Z)(n.size)}`],"inherit"===n.color&&t.colorInherit,n.disableElevation&&t.disableElevation,n.fullWidth&&t.fullWidth]}})((({theme:e,ownerState:t})=>{var n,o;const i="light"===e.palette.mode?e.palette.grey[300]:e.palette.grey[800],a="light"===e.palette.mode?e.palette.grey.A100:e.palette.grey[700];return(0,r.Z)({},e.typography.button,{minWidth:64,padding:"6px 16px",borderRadius:(e.vars||e).shape.borderRadius,transition:e.transitions.create(["background-color","box-shadow","border-color","color"],{duration:e.transitions.duration.short}),"&:hover":(0,r.Z)({textDecoration:"none",backgroundColor:e.vars?`rgba(${e.vars.palette.text.primaryChannel} / ${e.vars.palette.action.hoverOpacity})`:(0,c.Fq)(e.palette.text.primary,e.palette.action.hoverOpacity),"@media (hover: none)":{backgroundColor:"transparent"}},"text"===t.variant&&"inherit"!==t.color&&{backgroundColor:e.vars?`rgba(${e.vars.palette[t.color].mainChannel} / ${e.vars.palette.action.hoverOpacity})`:(0,c.Fq)(e.palette[t.color].main,e.palette.action.hoverOpacity),"@media (hover: none)":{backgroundColor:"transparent"}},"outlined"===t.variant&&"inherit"!==t.color&&{border:`1px solid ${(e.vars||e).palette[t.color].main}`,backgroundColor:e.vars?`rgba(${e.vars.palette[t.color].mainChannel} / ${e.vars.palette.action.hoverOpacity})`:(0,c.Fq)(e.palette[t.color].main,e.palette.action.hoverOpacity),"@media (hover: none)":{backgroundColor:"transparent"}},"contained"===t.variant&&{backgroundColor:e.vars?e.vars.palette.Button.inheritContainedHoverBg:a,boxShadow:(e.vars||e).shadows[4],"@media (hover: none)":{boxShadow:(e.vars||e).shadows[2],backgroundColor:(e.vars||e).palette.grey[300]}},"contained"===t.variant&&"inherit"!==t.color&&{backgroundColor:(e.vars||e).palette[t.color].dark,"@media (hover: none)":{backgroundColor:(e.vars||e).palette[t.color].main}}),"&:active":(0,r.Z)({},"contained"===t.variant&&{boxShadow:(e.vars||e).shadows[8]}),[`&.${Y.focusVisible}`]:(0,r.Z)({},"contained"===t.variant&&{boxShadow:(e.vars||e).shadows[6]}),[`&.${Y.disabled}`]:(0,r.Z)({color:(e.vars||e).palette.action.disabled},"outlined"===t.variant&&{border:`1px solid ${(e.vars||e).palette.action.disabledBackground}`},"contained"===t.variant&&{color:(e.vars||e).palette.action.disabled,boxShadow:(e.vars||e).shadows[0],backgroundColor:(e.vars||e).palette.action.disabledBackground})},"text"===t.variant&&{padding:"6px 8px"},"text"===t.variant&&"inherit"!==t.color&&{color:(e.vars||e).palette[t.color].main},"outlined"===t.variant&&{padding:"5px 15px",border:"1px solid currentColor"},"outlined"===t.variant&&"inherit"!==t.color&&{color:(e.vars||e).palette[t.color].main,border:e.vars?`1px solid rgba(${e.vars.palette[t.color].mainChannel} / 0.5)`:`1px solid ${(0,c.Fq)(e.palette[t.color].main,.5)}`},"contained"===t.variant&&{color:e.vars?e.vars.palette.text.primary:null==(n=(o=e.palette).getContrastText)?void 0:n.call(o,e.palette.grey[300]),backgroundColor:e.vars?e.vars.palette.Button.inheritContainedBg:i,boxShadow:(e.vars||e).shadows[2]},"contained"===t.variant&&"inherit"!==t.color&&{color:(e.vars||e).palette[t.color].contrastText,backgroundColor:(e.vars||e).palette[t.color].main},"inherit"===t.color&&{color:"inherit",borderColor:"currentColor"},"small"===t.size&&"text"===t.variant&&{padding:"4px 5px",fontSize:e.typography.pxToRem(13)},"large"===t.size&&"text"===t.variant&&{padding:"8px 11px",fontSize:e.typography.pxToRem(15)},"small"===t.size&&"outlined"===t.variant&&{padding:"3px 9px",fontSize:e.typography.pxToRem(13)},"large"===t.size&&"outlined"===t.variant&&{padding:"7px 21px",fontSize:e.typography.pxToRem(15)},"small"===t.size&&"contained"===t.variant&&{padding:"4px 10px",fontSize:e.typography.pxToRem(13)},"large"===t.size&&"contained"===t.variant&&{padding:"8px 22px",fontSize:e.typography.pxToRem(15)},t.fullWidth&&{width:"100%"})}),(({ownerState:e})=>e.disableElevation&&{boxShadow:"none","&:hover":{boxShadow:"none"},[`&.${Y.focusVisible}`]:{boxShadow:"none"},"&:active":{boxShadow:"none"},[`&.${Y.disabled}`]:{boxShadow:"none"}})),te=(0,u.ZP)("span",{name:"MuiButton",slot:"StartIcon",overridesResolver:(e,t)=>{const{ownerState:n}=e;return[t.startIcon,t[`iconSize${(0,K.Z)(n.size)}`]]}})((({ownerState:e})=>(0,r.Z)({display:"inherit",marginRight:8,marginLeft:-4},"small"===e.size&&{marginLeft:-2},Q(e)))),ne=(0,u.ZP)("span",{name:"MuiButton",slot:"EndIcon",overridesResolver:(e,t)=>{const{ownerState:n}=e;return[t.endIcon,t[`iconSize${(0,K.Z)(n.size)}`]]}})((({ownerState:e})=>(0,r.Z)({display:"inherit",marginRight:-4,marginLeft:8},"small"===e.size&&{marginRight:-2},Q(e)))),oe=i.forwardRef((function(e,t){const n=i.useContext(G.Z),c=(0,l.Z)(n,e),u=(0,d.Z)({props:c,name:"MuiButton"}),{children:p,color:f="primary",component:h="button",className:v,disabled:m=!1,disableElevation:g=!1,disableFocusRipple:b=!1,endIcon:y,focusVisibleClassName:w,fullWidth:S=!1,size:x="medium",startIcon:E,type:O,variant:M="text"}=u,Z=(0,o.Z)(u,J),C=(0,r.Z)({},u,{color:f,component:h,disabled:m,disableElevation:g,disableFocusRipple:b,fullWidth:S,size:x,type:O,variant:M}),P=(e=>{const{color:t,disableElevation:n,fullWidth:o,size:i,variant:a,classes:l}=e,c={root:["root",a,`${a}${(0,K.Z)(t)}`,`size${(0,K.Z)(i)}`,`${a}Size${(0,K.Z)(i)}`,"inherit"===t&&"colorInherit",n&&"disableElevation",o&&"fullWidth"],label:["label"],startIcon:["startIcon",`iconSize${(0,K.Z)(i)}`],endIcon:["endIcon",`iconSize${(0,K.Z)(i)}`]},u=(0,s.Z)(c,X,l);return(0,r.Z)({},l,u)})(C),z=E&&(0,R.jsx)(te,{className:P.startIcon,ownerState:C,children:E}),T=y&&(0,R.jsx)(ne,{className:P.endIcon,ownerState:C,children:y});return(0,R.jsxs)(ee,(0,r.Z)({ownerState:C,className:(0,a.Z)(n.className,P.root,v),component:h,disabled:m,focusRipple:!b,focusVisibleClassName:(0,a.Z)(P.focusVisible,w),ref:t,type:O},Z,{classes:P,children:[z,p,T]}))}))},56863:(e,t,n)=>{n.d(t,{Z:()=>w});var o=n(80102),r=n(83117),i=n(67294),a=n(86010),l=n(94780),s=n(41796),c=n(98216),u=n(90948),d=n(71657),p=n(1588),f=n(34867);function h(e){return(0,f.Z)("MuiButtonGroup",e)}const v=(0,p.Z)("MuiButtonGroup",["root","contained","outlined","text","disableElevation","disabled","fullWidth","vertical","grouped","groupedHorizontal","groupedVertical","groupedText","groupedTextHorizontal","groupedTextVertical","groupedTextPrimary","groupedTextSecondary","groupedOutlined","groupedOutlinedHorizontal","groupedOutlinedVertical","groupedOutlinedPrimary","groupedOutlinedSecondary","groupedContained","groupedContainedHorizontal","groupedContainedVertical","groupedContainedPrimary","groupedContainedSecondary"]);var m=n(98363),g=n(85893);const b=["children","className","color","component","disabled","disableElevation","disableFocusRipple","disableRipple","fullWidth","orientation","size","variant"],y=(0,u.ZP)("div",{name:"MuiButtonGroup",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:n}=e;return[{[`& .${v.grouped}`]:t.grouped},{[`& .${v.grouped}`]:t[`grouped${(0,c.Z)(n.orientation)}`]},{[`& .${v.grouped}`]:t[`grouped${(0,c.Z)(n.variant)}`]},{[`& .${v.grouped}`]:t[`grouped${(0,c.Z)(n.variant)}${(0,c.Z)(n.orientation)}`]},{[`& .${v.grouped}`]:t[`grouped${(0,c.Z)(n.variant)}${(0,c.Z)(n.color)}`]},t.root,t[n.variant],!0===n.disableElevation&&t.disableElevation,n.fullWidth&&t.fullWidth,"vertical"===n.orientation&&t.vertical]}})((({theme:e,ownerState:t})=>(0,r.Z)({display:"inline-flex",borderRadius:(e.vars||e).shape.borderRadius},"contained"===t.variant&&{boxShadow:(e.vars||e).shadows[2]},t.disableElevation&&{boxShadow:"none"},t.fullWidth&&{width:"100%"},"vertical"===t.orientation&&{flexDirection:"column"},{[`& .${v.grouped}`]:(0,r.Z)({minWidth:40,"&:not(:first-of-type)":(0,r.Z)({},"horizontal"===t.orientation&&{borderTopLeftRadius:0,borderBottomLeftRadius:0},"vertical"===t.orientation&&{borderTopRightRadius:0,borderTopLeftRadius:0},"outlined"===t.variant&&"horizontal"===t.orientation&&{marginLeft:-1},"outlined"===t.variant&&"vertical"===t.orientation&&{marginTop:-1}),"&:not(:last-of-type)":(0,r.Z)({},"horizontal"===t.orientation&&{borderTopRightRadius:0,borderBottomRightRadius:0},"vertical"===t.orientation&&{borderBottomRightRadius:0,borderBottomLeftRadius:0},"text"===t.variant&&"horizontal"===t.orientation&&{borderRight:e.vars?`1px solid rgba(${e.vars.palette.common.onBackgroundChannel} / 0.23)`:"1px solid "+("light"===e.palette.mode?"rgba(0, 0, 0, 0.23)":"rgba(255, 255, 255, 0.23)"),[`&.${v.disabled}`]:{borderRight:`1px solid ${(e.vars||e).palette.action.disabled}`}},"text"===t.variant&&"vertical"===t.orientation&&{borderBottom:e.vars?`1px solid rgba(${e.vars.palette.common.onBackgroundChannel} / 0.23)`:"1px solid "+("light"===e.palette.mode?"rgba(0, 0, 0, 0.23)":"rgba(255, 255, 255, 0.23)"),[`&.${v.disabled}`]:{borderBottom:`1px solid ${(e.vars||e).palette.action.disabled}`}},"text"===t.variant&&"inherit"!==t.color&&{borderColor:e.vars?`rgba(${e.vars.palette[t.color].mainChannel} / 0.5)`:(0,s.Fq)(e.palette[t.color].main,.5)},"outlined"===t.variant&&"horizontal"===t.orientation&&{borderRightColor:"transparent"},"outlined"===t.variant&&"vertical"===t.orientation&&{borderBottomColor:"transparent"},"contained"===t.variant&&"horizontal"===t.orientation&&{borderRight:`1px solid ${(e.vars||e).palette.grey[400]}`,[`&.${v.disabled}`]:{borderRight:`1px solid ${(e.vars||e).palette.action.disabled}`}},"contained"===t.variant&&"vertical"===t.orientation&&{borderBottom:`1px solid ${(e.vars||e).palette.grey[400]}`,[`&.${v.disabled}`]:{borderBottom:`1px solid ${(e.vars||e).palette.action.disabled}`}},"contained"===t.variant&&"inherit"!==t.color&&{borderColor:(e.vars||e).palette[t.color].dark},{"&:hover":(0,r.Z)({},"outlined"===t.variant&&"horizontal"===t.orientation&&{borderRightColor:"currentColor"},"outlined"===t.variant&&"vertical"===t.orientation&&{borderBottomColor:"currentColor"})}),"&:hover":(0,r.Z)({},"contained"===t.variant&&{boxShadow:"none"})},"contained"===t.variant&&{boxShadow:"none"})}))),w=i.forwardRef((function(e,t){const n=(0,d.Z)({props:e,name:"MuiButtonGroup"}),{children:s,className:u,color:p="primary",component:f="div",disabled:v=!1,disableElevation:w=!1,disableFocusRipple:S=!1,disableRipple:x=!1,fullWidth:E=!1,orientation:O="horizontal",size:M="medium",variant:R="outlined"}=n,Z=(0,o.Z)(n,b),C=(0,r.Z)({},n,{color:p,component:f,disabled:v,disableElevation:w,disableFocusRipple:S,disableRipple:x,fullWidth:E,orientation:O,size:M,variant:R}),P=(e=>{const{classes:t,color:n,disabled:o,disableElevation:r,fullWidth:i,orientation:a,variant:s}=e,u={root:["root",s,"vertical"===a&&"vertical",i&&"fullWidth",r&&"disableElevation"],grouped:["grouped",`grouped${(0,c.Z)(a)}`,`grouped${(0,c.Z)(s)}`,`grouped${(0,c.Z)(s)}${(0,c.Z)(a)}`,`grouped${(0,c.Z)(s)}${(0,c.Z)(n)}`,o&&"disabled"]};return(0,l.Z)(u,h,t)})(C),z=i.useMemo((()=>({className:P.grouped,color:p,disabled:v,disableElevation:w,disableFocusRipple:S,disableRipple:x,fullWidth:E,size:M,variant:R})),[p,v,w,S,x,E,M,R,P.grouped]);return(0,g.jsx)(y,(0,r.Z)({as:f,role:"group",className:(0,a.Z)(P.root,u),ref:t,ownerState:C},Z,{children:(0,g.jsx)(m.Z.Provider,{value:z,children:s})}))}))},98363:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n(67294).createContext({})},96189:(e,t,n)=>{n.d(t,{Z:()=>o});const o={50:"#eceff1",100:"#cfd8dc",200:"#b0bec5",300:"#90a4ae",400:"#78909c",500:"#607d8b",600:"#546e7a",700:"#455a64",800:"#37474f",900:"#263238",A100:"#cfd8dc",A200:"#b0bec5",A400:"#78909c",A700:"#455a64"}},22430:(e,t,n)=>{n.d(t,{Z:()=>b});var o=n(83117),r=n(80102),i=n(67294);const a=i.createContext(null);function l(){return i.useContext(a)}const s="function"==typeof Symbol&&Symbol.for?Symbol.for("mui.nested"):"__THEME_NESTED__";var c=n(85893);const u=function(e){const{children:t,theme:n}=e,r=l(),u=i.useMemo((()=>{const e=null===r?n:function(e,t){if("function"==typeof t)return t(e);return(0,o.Z)({},e,t)}(r,n);return null!=e&&(e[s]=null!==r),e}),[n,r]);return(0,c.jsx)(a.Provider,{value:u,children:t})};var d=n(75260),p=n(34168);const f={};function h(e,t,n,r=!1){return i.useMemo((()=>{const i=e&&t[e]||t;if("function"==typeof n){const a=n(i),l=e?(0,o.Z)({},t,{[e]:a}):a;return r?()=>l:l}return e?(0,o.Z)({},t,{[e]:n}):(0,o.Z)({},t,n)}),[e,t,n,r])}const v=function(e){const{children:t,theme:n,themeId:o}=e,r=(0,p.Z)(f),i=l()||f,a=h(o,r,n),s=h(o,i,n,!0);return(0,c.jsx)(u,{theme:s,children:(0,c.jsx)(d.T.Provider,{value:a,children:t})})};var m=n(10606);const g=["theme"];function b(e){let{theme:t}=e,n=(0,r.Z)(e,g);const i=t[m.Z];return(0,c.jsx)(v,(0,o.Z)({},n,{themeId:i?m.Z:void 0,theme:i||t}))}},98391:(e,t,n)=>{n.d(t,{Z:()=>c});var o=n(83117),r=n(71387);function i(e){return String(parseFloat(e)).length===String(e).length}function a(e){return parseFloat(e)}function l(e){return(t,n)=>{const o=String(t).match(/[\d.\-+]*\s*(.*)/)[1]||"";if(o===n)return t;let r=a(t);"px"!==o&&("em"===o||"rem"===o)&&(r=a(t)*a(e));let i=r;if("px"!==n)if("em"===n)i=r/a(e);else{if("rem"!==n)return t;i=r/a(e)}return parseFloat(i.toFixed(5))+n}}function s({lineHeight:e,pixels:t,htmlFontSize:n}){return t/(e*n)}function c(e,t={}){const{breakpoints:n=["sm","md","lg"],disableAlign:a=!1,factor:c=2,variants:u=["h1","h2","h3","h4","h5","h6","subtitle1","subtitle2","body1","body2","caption","button","overline"]}=t,d=(0,o.Z)({},e);d.typography=(0,o.Z)({},d.typography);const p=d.typography,f=l(p.htmlFontSize),h=n.map((e=>d.breakpoints.values[e]));return u.forEach((e=>{const t=p[e],n=parseFloat(f(t.fontSize,"rem"));if(n<=1)return;const l=n,u=1+(l-1)/c;let{lineHeight:d}=t;if(!i(d)&&!a)throw new Error((0,r.Z)(6));i(d)||(d=parseFloat(f(d,"rem"))/parseFloat(n));let v=null;a||(v=e=>function({size:e,grid:t}){const n=e-e%t,o=n+t;return e-n<o-e?n:o}({size:e,grid:s({pixels:4,lineHeight:d,htmlFontSize:p.htmlFontSize})})),p[e]=(0,o.Z)({},t,function({cssProperty:e,min:t,max:n,unit:o="rem",breakpoints:r=[600,900,1200],transform:i=null}){const a={[e]:`${t}${o}`},l=(n-t)/r[r.length-1];return r.forEach((n=>{let r=t+l*n;null!==i&&(r=i(r)),a[`@media (min-width:${n}px)`]={[e]:`${Math.round(1e4*r)/1e4}${o}`}})),a}({cssProperty:"fontSize",min:u,max:l,unit:"rem",breakpoints:h,transform:v}))})),d}},2734:(e,t,n)=>{n.d(t,{Z:()=>a});n(67294);var o=n(96682),r=n(90247),i=n(10606);function a(){const e=(0,o.Z)(r.Z);return e[i.Z]||e}},98396:(e,t,n)=>{var o;n.d(t,{Z:()=>d});var r=n(67294),i=n(34168),a=n(20539),l=n(58974);function s(e,t,n,o,i){const[a,s]=r.useState((()=>i&&n?n(e).matches:o?o(e).matches:t));return(0,l.Z)((()=>{let t=!0;if(!n)return;const o=n(e),r=()=>{t&&s(o.matches)};return r(),o.addListener(r),()=>{t=!1,o.removeListener(r)}}),[e,n]),a}const c=(o||(o=n.t(r,2))).useSyncExternalStore;function u(e,t,n,o,i){const a=r.useCallback((()=>t),[t]),l=r.useMemo((()=>{if(i&&n)return()=>n(e).matches;if(null!==o){const{matches:t}=o(e);return()=>t}return a}),[a,e,o,i,n]),[s,u]=r.useMemo((()=>{if(null===n)return[a,()=>()=>{}];const t=n(e);return[()=>t.matches,e=>(t.addListener(e),()=>{t.removeListener(e)})]}),[a,n,e]);return c(u,s,l)}function d(e,t={}){const n=(0,i.Z)(),o="undefined"!=typeof window&&void 0!==window.matchMedia,{defaultMatches:r=!1,matchMedia:l=(o?window.matchMedia:null),ssrMatchMedia:d=null,noSsr:p=!1}=(0,a.Z)({name:"MuiUseMediaQuery",props:t,theme:n});let f="function"==typeof e?e(n):e;f=f.replace(/^@media( ?)/m,"");return(void 0!==c?u:s)(f,r,l,d,p)}},58221:(e,t,n)=>{t.__esModule=!0,t.default=void 0;var o=i(n(67294)),r=i(n(66174));function i(e){return e&&e.__esModule?e:{default:e}}function a(){return a=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var o in n)Object.prototype.hasOwnProperty.call(n,o)&&(e[o]=n[o])}return e},a.apply(this,arguments)}var l=function(e){return o.default.createElement(r.default,a({},e,{path:"M19.35 10.04C18.67 6.59 15.64 4 12 4 9.11 4 6.6 5.64 5.35 8.04 2.34 8.36 0 10.91 0 14c0 3.31 2.69 6 6 6h13c2.76 0 5-2.24 5-5 0-2.64-2.05-4.78-4.65-4.96zM17 13l-5 5-5-5h3V9h4v4h3z"}))};t.default=l},15802:(e,t,n)=>{t.__esModule=!0,t.default=void 0;var o=i(n(67294)),r=i(n(66174));function i(e){return e&&e.__esModule?e:{default:e}}function a(){return a=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var o in n)Object.prototype.hasOwnProperty.call(n,o)&&(e[o]=n[o])}return e},a.apply(this,arguments)}var l=function(e){return o.default.createElement(r.default,a({},e,{path:"M6,2V8H6V8L10,12L6,16V16H6V22H18V16H18V16L14,12L18,8V8H18V2H6M16,16.5V20H8V16.5L12,12.5L16,16.5M12,11.5L8,7.5V4H16V7.5L12,11.5Z"}))};t.default=l},18524:(e,t,n)=>{t.__esModule=!0,t.default=void 0;var o=i(n(67294)),r=i(n(66174));function i(e){return e&&e.__esModule?e:{default:e}}function a(){return a=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var o in n)Object.prototype.hasOwnProperty.call(n,o)&&(e[o]=n[o])}return e},a.apply(this,arguments)}var l=function(e){return o.default.createElement(r.default,a({},e,{path:"M19.35 10.04C18.67 6.59 15.64 4 12 4c-1.48 0-2.85.43-4.01 1.17l1.46 1.46C10.21 6.23 11.08 6 12 6c3.04 0 5.5 2.46 5.5 5.5v.5H19c1.66 0 3 1.34 3 3 0 1.13-.64 2.11-1.56 2.62l1.45 1.45C23.16 18.16 24 16.68 24 15c0-2.64-2.05-4.78-4.65-4.96zM3 5.27l2.75 2.74C2.56 8.15 0 10.77 0 14c0 3.31 2.69 6 6 6h11.73l2 2L21 20.73 4.27 4 3 5.27zM7.73 10l8 8H6c-2.21 0-4-1.79-4-4s1.79-4 4-4h1.73z"}))};t.default=l},48551:(e,t,n)=>{t.__esModule=!0,t.default=void 0;var o=i(n(67294)),r=i(n(66174));function i(e){return e&&e.__esModule?e:{default:e}}function a(){return a=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var o in n)Object.prototype.hasOwnProperty.call(n,o)&&(e[o]=n[o])}return e},a.apply(this,arguments)}var l=function(e){return o.default.createElement(r.default,a({},e,{path:"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-2h2v2zm0-4h-2V7h2v6z"}))};t.default=l},66174:(e,t,n)=>{t.__esModule=!0,t.default=void 0;var o=i(n(67294)),r=i(n(45697));function i(e){return e&&e.__esModule?e:{default:e}}var a=function(e){var t=e.size,n=void 0===t?24:t,r=e.fill,i=void 0===r?"#000":r,a=e.className,l=e.path;return o.default.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:n,height:n,viewBox:"0 0 24 24",className:a},o.default.createElement("path",{d:"M0 0h24v24H0z",fill:"none"}),o.default.createElement("path",{fill:i,d:l}))};a.propTypes={size:r.default.number,fill:r.default.string,className:r.default.string,path:r.default.string.isRequired};var l=a;t.default=l},51688:(e,t,n)=>{t.__esModule=!0,t.default=void 0;var o=function(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var n=d(t);if(n&&n.has(e))return n.get(e);var o={},r=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var i in e)if("default"!==i&&Object.prototype.hasOwnProperty.call(e,i)){var a=r?Object.getOwnPropertyDescriptor(e,i):null;a&&(a.get||a.set)?Object.defineProperty(o,i,a):o[i]=e[i]}o.default=e,n&&n.set(e,o);return o}(n(67294)),r=u(n(45697)),i=n(83824),a=u(n(58374)),l=n(42863),s=n(85082),c=n(26889);function u(e){return e&&e.__esModule?e:{default:e}}function d(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,n=new WeakMap;return(d=function(e){return e?n:t})(e)}function p(){return p=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var o in n)Object.prototype.hasOwnProperty.call(n,o)&&(e[o]=n[o])}return e},p.apply(this,arguments)}function f(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function h(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?f(Object(n),!0).forEach((function(t){g(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):f(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function v(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function m(e,t){return m=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},m(e,t)}function g(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=typeof e||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var o=n.call(e,t||"default");if("object"!=typeof o)return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var b=l.loadStates.initial,y=l.loadStates.loading,w=l.loadStates.loaded,S=l.loadStates.error,x=function(e){var t,n;function r(t){var n;return g(v(n=e.call(this,t)||this),"onClick",(function(){var e=n.state,t=e.loadState,o=e.onLine,r=e.overThreshold;if(o)switch(t){case y:return void(r&&n.cancel(!0));case w:return;case b:case S:return void n.load(!0);default:throw new Error("Wrong state: "+t)}})),g(v(n),"load",(function(e){var t=n.state,o=t.loadState,r=t.url;if(!c.ssr&&w!==o&&y!==o){n.loadStateChange(y,e);var i=n.props.threshold,a="xhr"===n.props.loader?(0,s.xhrLoader)(r):(0,s.imageLoader)(r);if(a.then((function(){n.clear(),n.loadStateChange(w,!1)})).catch((function(e){n.clear(),404===e.status?n.loadStateChange(S,!1,404):n.loadStateChange(S,!1)})),i){var l=(0,s.timeout)(i);l.then((function(){n.loader&&(window.document.dispatchEvent(new CustomEvent("possiblySlowNetwork",{detail:{possiblySlowNetwork:!0}})),n.setState({overThreshold:!0}),n.state.userTriggered||n.cancel(!0))})),n.loader=(0,s.combineCancel)(a,l)}else n.loader=a}})),g(v(n),"onEnter",(function(){if(!n.state.inViewport){n.setState({inViewport:!0});var e=(0,c.selectSrc)({srcSet:n.props.srcSet,maxImageWidth:n.props.srcSet.length>1?(0,c.guessMaxImageWidth)(n.state.dimensions):0,supportsWebp:c.supportsWebp}),t=n.props.getUrl,o=t?t(e):e.src,r=n.props.shouldAutoDownload(h(h({},n.state),{},{size:e.size}));n.setState({pickedSrc:e,shouldAutoDownload:r,url:o},(function(){r&&n.load(!1)}))}})),g(v(n),"onLeave",(function(){n.state.loadState!==y||n.state.userTriggered||(n.setState({inViewport:!1}),n.cancel(!1))})),n.state={loadState:b,connection:c.nativeConnection?{downlink:navigator.connection.downlink,rtt:navigator.connection.rtt,effectiveType:navigator.connection.effectiveType}:null,onLine:!0,overThreshold:!1,inViewport:!1,userTriggered:!1,possiblySlowNetwork:!1},n}n=e,(t=r).prototype=Object.create(n.prototype),t.prototype.constructor=t,m(t,n);var l=r.prototype;return l.componentDidMount=function(){var e=this;c.nativeConnection?(this.updateConnection=function(){navigator.onLine&&e.state.loadState===b&&e.setState({connection:{effectiveType:navigator.connection.effectiveType,downlink:navigator.connection.downlink,rtt:navigator.connection.rtt}})},navigator.connection.addEventListener("onchange",this.updateConnection)):this.props.threshold&&(this.possiblySlowNetworkListener=function(t){if(e.state.loadState===b){var n=t.detail.possiblySlowNetwork;!e.state.possiblySlowNetwork&&n&&e.setState({possiblySlowNetwork:n})}},window.document.addEventListener("possiblySlowNetwork",this.possiblySlowNetworkListener)),this.updateOnlineStatus=function(){return e.setState({onLine:navigator.onLine})},this.updateOnlineStatus(),window.addEventListener("online",this.updateOnlineStatus),window.addEventListener("offline",this.updateOnlineStatus)},l.componentWillUnmount=function(){this.clear(),c.nativeConnection?navigator.connection.removeEventListener("onchange",this.updateConnection):this.props.threshold&&window.document.removeEventListener("possiblySlowNetwork",this.possiblySlowNetworkListener),window.removeEventListener("online",this.updateOnlineStatus),window.removeEventListener("offline",this.updateOnlineStatus)},l.clear=function(){this.loader&&(this.loader.cancel(),this.loader=void 0)},l.cancel=function(e){y===this.state.loadState&&(this.clear(),this.loadStateChange(b,e))},l.loadStateChange=function(e,t,n){void 0===n&&(n=null),this.setState({loadState:e,overThreshold:!1,userTriggered:!!t,loadInfo:n})},l.render=function(){var e=this,t=this.props.getIcon(this.state),n=this.props.getMessage(t,this.state);return o.default.createElement(i.Waypoint,{onEnter:this.onEnter,onLeave:this.onLeave},o.default.createElement(a.default,p({},this.props,(0,c.fallbackParams)(this.props),{onClick:this.onClick,icon:t,src:this.state.url||"",onDimensions:function(t){return e.setState({dimensions:t})},message:n})))},r}(o.Component);t.default=x,g(x,"propTypes",{threshold:r.default.number,getUrl:r.default.func,srcSet:r.default.arrayOf(r.default.shape({width:r.default.number.isRequired,src:r.default.string,size:r.default.number,format:r.default.oneOf(["jpeg","jpg","webp","png","gif"])})).isRequired,shouldAutoDownload:r.default.func,getMessage:r.default.func,getIcon:r.default.func,loader:r.default.oneOf(["image","xhr"]),width:r.default.number.isRequired,height:r.default.number.isRequired,placeholder:r.default.oneOfType([r.default.shape({color:r.default.string.isRequired}),r.default.shape({lqip:r.default.string.isRequired})]).isRequired,icons:r.default.object.isRequired,theme:r.default.object.isRequired}),g(x,"defaultProps",{shouldAutoDownload:function(e){var t=e.connection,n=e.size,o=e.threshold;if(e.possiblySlowNetwork)return!1;if(!t)return!0;var r=t.downlink,i=t.rtt;switch(t.effectiveType){case"slow-2g":case"2g":return!1;case"3g":return!!(r&&n&&o)&&8*n/(1e3*r)+i<o;default:return!0}},getMessage:function(e,t){switch(e){case l.icons.noicon:case l.icons.loaded:return null;case l.icons.loading:return"Loading...";case l.icons.load:var n=t.pickedSrc.size;return n?["Click to load (",o.default.createElement("nobr",{key:"nb"},(0,c.bytesToSize)(n)),")"]:"Click to load";case l.icons.offline:return"Your browser is offline. Image not loaded";case l.icons.error:return 404===t.loadInfo?"404. Image not found":"Error. Click to reload";default:throw new Error("Wrong icon: "+e)}},getIcon:function(e){var t=e.loadState,n=e.onLine,o=e.overThreshold,r=e.userTriggered;if(c.ssr)return l.icons.noicon;switch(t){case w:return l.icons.loaded;case y:return o?l.icons.loading:l.icons.noicon;case b:if(n){var i=e.shouldAutoDownload;return void 0===i?l.icons.noicon:r||!i?l.icons.load:l.icons.noicon}return l.icons.offline;case S:return n?l.icons.error:l.icons.offline;default:throw new Error("Wrong state: "+t)}},loader:"xhr"})},22830:(e,t,n)=>{t.__esModule=!0,t.default=void 0;var o=l(n(67294)),r=l(n(51688)),i=l(n(4891)),a=l(n(74125));function l(e){return e&&e.__esModule?e:{default:e}}function s(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function c(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?s(Object(n),!0).forEach((function(t){u(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):s(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function u(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=typeof e||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var o=n.call(e,t||"default");if("object"!=typeof o)return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var d=function(e){return o.default.createElement(r.default,e)};d.defaultProps=c(c({},r.default.defaultProps),{},{icons:i.default,theme:a.default}),d.propTypes=r.default.propTypes;var p=d;t.default=p},58374:(e,t,n)=>{t.__esModule=!0,t.default=void 0;var o=function(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var n=s(t);if(n&&n.has(e))return n.get(e);var o={},r=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var i in e)if("default"!==i&&Object.prototype.hasOwnProperty.call(e,i)){var a=r?Object.getOwnPropertyDescriptor(e,i):null;a&&(a.get||a.set)?Object.defineProperty(o,i,a):o[i]=e[i]}o.default=e,n&&n.set(e,o);return o}(n(67294)),r=l(n(45697)),i=l(n(12185)),a=n(42863);function l(e){return e&&e.__esModule?e:{default:e}}function s(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,n=new WeakMap;return(s=function(e){return e?n:t})(e)}function c(){return c=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var o in n)Object.prototype.hasOwnProperty.call(n,o)&&(e[o]=n[o])}return e},c.apply(this,arguments)}function u(e,t){return u=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},u(e,t)}function d(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=typeof e||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var o=n.call(e,t||"default");if("object"!=typeof o)return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var p=a.icons.load,f=a.icons.loading,h=a.icons.loaded,v=a.icons.error,m=a.icons.noicon,g=a.icons.offline,b=function(e){var t,n;function r(t){var n;return(n=e.call(this,t)||this).state={isMounted:!1},n}n=e,(t=r).prototype=Object.create(n.prototype),t.prototype.constructor=t,u(t,n);var a=r.prototype;return a.componentDidMount=function(){this.setState({isMounted:!0}),this.props.onDimensions&&this.dimensionElement&&this.props.onDimensions({width:this.dimensionElement.clientWidth||this.dimensionElement.parentNode.clientWidth,height:this.dimensionElement.clientHeight||this.dimensionElement.parentNode.clientHeight})},a.renderIcon=function(e){var t=e.icon,n=e.icons,r=e.iconColor,a=e.iconSize,l=e.theme,s=n[t];if(!s)return null;var c=(0,i.default)({width:a+100,height:a,color:r},l.icon);return o.default.createElement("div",c,[o.default.createElement(s,{fill:r,size:a,key:"icon"}),o.default.createElement("br",{key:"br"}),this.props.message])},a.renderImage=function(e){var t=this;return e.icon===h?o.default.createElement("img",c({},(0,i.default)(e.theme.img),{src:e.src,alt:e.alt,width:e.width,height:e.height})):o.default.createElement("svg",c({},(0,i.default)(e.theme.img),{width:e.width,height:e.height,ref:function(e){return t.dimensionElement=e}}))},a.renderNoscript=function(e){return this.state.isMounted?null:o.default.createElement("noscript",null,o.default.createElement("img",c({},(0,i.default)(e.theme.img,e.theme.noscript),{src:e.nsSrc,srcSet:e.nsSrcSet,alt:e.alt,width:e.width,height:e.height})))},a.render=function(){var e,t=this.props,n=t.placeholder,r=t.theme;return e=t.icon===h?{}:n.lqip?{backgroundImage:'url("'+n.lqip+'")'}:{backgroundColor:n.color},o.default.createElement("div",c({},(0,i.default)(r.placeholder,e,t.style,t.className),{onClick:this.props.onClick,onKeyPress:this.props.onClick,ref:this.props.innerRef}),this.renderImage(t),this.renderNoscript(t),this.renderIcon(t))},r}(o.PureComponent);t.default=b,d(b,"propTypes",{src:r.default.string.isRequired,width:r.default.number.isRequired,height:r.default.number.isRequired,placeholder:r.default.oneOfType([r.default.shape({color:r.default.string.isRequired}),r.default.shape({lqip:r.default.string.isRequired})]).isRequired,icon:r.default.oneOf([p,f,h,v,m,g]).isRequired,icons:r.default.object.isRequired,theme:r.default.object.isRequired,alt:r.default.string,iconColor:r.default.string,iconSize:r.default.number,style:r.default.object,className:r.default.string,onClick:r.default.func,onDimensions:r.default.func,message:r.default.node,innerRef:r.default.func,nsSrc:r.default.string,nsSrcSet:r.default.string}),d(b,"defaultProps",{iconColor:"#fff",iconSize:64})},12185:(e,t)=>{t.__esModule=!0,t.default=void 0;t.default=function(){for(var e,t=[],n=arguments.length,o=new Array(n),r=0;r<n;r++)o[r]=arguments[r];for(var i=0,a=o;i<a.length;i++){var l=a[i];if(l instanceof Object)Object.assign(e||(e={}),l);else if(void 0===l||!1===l);else{if("string"!=typeof l)throw new Error("Unexpected value "+l);t.push(l)}}return{className:t.length>1?t.join(" "):t[0],style:e}}},42863:(e,t)=>{t.__esModule=!0,t.loadStates=t.icons=void 0;var n="loading",o="loaded",r="error",i={load:"load",loading:n,loaded:o,error:r,noicon:"noicon",offline:"offline"};t.icons=i;var a={initial:"initial",loading:n,loaded:o,error:r};t.loadStates=a},26889:(e,t)=>{t.__esModule=!0,t.supportsWebp=t.ssr=t.selectSrc=t.nativeConnection=t.guessMaxImageWidth=t.fallbackParams=t.bytesToSize=void 0;var n="undefined"==typeof window||"ReactSnap"===window.navigator.userAgent;t.ssr=n;var o=!n&&!!window.navigator.connection;t.nativeConnection=o;t.guessMaxImageWidth=function(e,t){if(n)return 0;t||(t=window);var o,r=e.width,i=t.screen,a=i.width,l=i.height,s=document.documentElement,c=t.innerWidth||s.clientWidth,u=t.innerHeight||s.clientHeight,d=t.devicePixelRatio||1;if(a>c){var p=document.getElementsByTagName("body")[0],f=c-r;o=(p.clientHeight>u||p.clientHeight>l)&&f<=15?a-f:r/c*a}else o=r;return o*d};t.bytesToSize=function(e){var t=["Bytes","KB","MB","GB","TB"];if(0===e)return"n/a";var n=parseInt(Math.floor(Math.log(e)/Math.log(1024)),10);return 0===n?e+" "+t[n]:(e/Math.pow(1024,n)).toFixed(1)+" "+t[n]};var r=function(){if(n)return!1;var e=document.createElement("canvas");return!(!e.getContext||!e.getContext("2d"))&&0===e.toDataURL("image/webp").indexOf("data:image/webp")}();t.supportsWebp=r;var i=function(e){return"webp"===e.format||e.src&&e.src.match(/\.webp($|\?.*)/i)};t.selectSrc=function(e){var t,n,o=e.srcSet,r=e.maxImageWidth,a=e.supportsWebp;if(0===o.length)throw new Error("Need at least one item in srcSet");if(a)0===(t=o.filter(i)).length&&(t=o);else if(0===(t=o.filter((function(e){return!i(e)}))).length)throw new Error("Need at least one supported format item in srcSet");var l=t.filter((function(e){return e.width>=r}));return 0===l.length?(l=t,n=Math.max.apply(null,l.map((function(e){return e.width})))):n=Math.min.apply(null,l.map((function(e){return e.width}))),t.filter((function(e){return e.width===n}))[0]};t.fallbackParams=function(e){var t=e.srcSet,o=e.getUrl;if(!n)return{};var r=t.filter((function(e){return!i(e)})),a=r[0];return{nsSrcSet:r.map((function(e){return(o?o(e):e.src)+" "+e.width+"w"})).join(","),nsSrc:o?o(a):a.src,ssr:n}}},4891:(e,t,n)=>{t.__esModule=!0,t.default=void 0;var o,r=c(n(58221)),i=c(n(18524)),a=c(n(48551)),l=c(n(15802)),s=n(42863);function c(e){return e&&e.__esModule?e:{default:e}}var u=s.icons.load,d=s.icons.loading,p=s.icons.loaded,f=s.icons.error,h=s.icons.noicon,v=s.icons.offline,m=((o={})[u]=r.default,o[d]=l.default,o[p]=null,o[f]=a.default,o[h]=null,o[v]=i.default,o);t.default=m},85082:(e,t,n)=>{t.__esModule=!0,t.xhrLoader=t.timeout=t.imageLoader=t.combineCancel=void 0;var o=n(71499);function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function i(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?r(Object(n),!0).forEach((function(t){a(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):r(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function a(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=typeof e||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var o=n.call(e,t||"default");if("object"!=typeof o)return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}t.combineCancel=function(e,t){if(!t)return e;var n=e.then((function(e){return e}),(function(e){return e}));return n.cancel=function(){e.cancel(),t.cancel()},n};t.timeout=function(e){var t,n=new Promise((function(n){t=setTimeout(n,e)}));return n.cancel=function(){clearTimeout(t),t=void 0},n};var l=function(e){var t=new Image,n=new Promise((function(n,o){t.onload=n,t.onabort=t.onerror=function(){return o({})},t.src=e}));return n.cancel=function(){if(!t)throw new Error("Already canceled");t.onload=t.onabort=t.onerror=void 0,t.src="",t=void 0},n};t.imageLoader=l;t.xhrLoader=function(e,t){var n=new o.UnfetchAbortController,r=n.signal,a=new Promise((function(n,a){return(0,o.unfetch)(e,i(i({},t),{},{signal:r})).then((function(t){t.ok?t.blob().then((function(){return l(e)})).then(n):a({status:t.status})}),a)}));return a.cancel=function(){if(!n)throw new Error("Already canceled");n.abort(),n=void 0},a}},74125:(e,t)=>{t.__esModule=!0,t.default=void 0;t.default={placeholder:{backgroundSize:"cover",backgroundRepeat:"no-repeat",position:"relative"},img:{width:"100%",height:"auto",maxWidth:"100%",marginBottom:"-4px"},icon:{position:"absolute",top:"50%",left:"50%",transform:"translate(-50%, -50%)",textAlign:"center"},noscript:{position:"absolute",top:0,left:0}}},71499:(e,t)=>{t.__esModule=!0,t.unfetch=t.UnfetchAbortController=void 0;t.UnfetchAbortController=function(){var e=this;this.signal={onabort:function(){}},this.abort=function(){return e.signal.onabort()}};t.unfetch=function(e,t){return t=t||{},new Promise((function(n,o){var r=new XMLHttpRequest;for(var i in r.open(t.method||"get",e,!0),t.headers)r.setRequestHeader(i,t.headers[i]);function a(){var e,t=[],n=[],o={};return r.getAllResponseHeaders().replace(/^(.*?):\s*?([\s\S]*?)$/gm,(function(r,i,a){t.push(i=i.toLowerCase()),n.push([i,a]),e=o[i],o[i]=e?e+","+a:a})),{ok:2==(r.status/100|0),status:r.status,statusText:r.statusText,url:r.responseURL,clone:a,text:function(){return Promise.resolve(r.responseText)},json:function(){return Promise.resolve(r.responseText).then(JSON.parse)},blob:function(){return Promise.resolve(new Blob([r.response]))},headers:{keys:function(){return t},entries:function(){return n},get:function(e){return o[e.toLowerCase()]},has:function(e){return e.toLowerCase()in o}}}}r.withCredentials="include"===t.credentials,r.onload=function(){n(a())},r.onerror=o,t.signal&&(t.signal.onabort=function(){r.onerror=r.onload=void 0,r.abort()}),r.send(t.body)}))}},57164:(e,t,n)=>{var o;t.Z=void 0;var r=((o=n(22830))&&o.__esModule?o:{default:o}).default;t.Z=r},69921:(e,t)=>{var n,o=Symbol.for("react.element"),r=Symbol.for("react.portal"),i=Symbol.for("react.fragment"),a=Symbol.for("react.strict_mode"),l=Symbol.for("react.profiler"),s=Symbol.for("react.provider"),c=Symbol.for("react.context"),u=Symbol.for("react.server_context"),d=Symbol.for("react.forward_ref"),p=Symbol.for("react.suspense"),f=Symbol.for("react.suspense_list"),h=Symbol.for("react.memo"),v=Symbol.for("react.lazy"),m=Symbol.for("react.offscreen");function g(e){if("object"==typeof e&&null!==e){var t=e.$$typeof;switch(t){case o:switch(e=e.type){case i:case l:case a:case p:case f:return e;default:switch(e=e&&e.$$typeof){case u:case c:case d:case v:case h:case s:return e;default:return t}}case r:return t}}}n=Symbol.for("react.module.reference"),t.isForwardRef=function(e){return g(e)===d}},59864:(e,t,n)=>{e.exports=n(69921)},83824:(e,t,n)=>{n.r(t),n.d(t,{Waypoint:()=>O});var o=n(90144),r=!("undefined"==typeof window||!window.document||!window.document.createElement);var i=void 0;function a(){return void 0===i&&(i=function(){if(!r)return!1;if(!window.addEventListener||!window.removeEventListener||!Object.defineProperty)return!1;var e=!1;try{var t=Object.defineProperty({},"passive",{get:function(){e=!0}}),n=function(){};window.addEventListener("testPassiveEventSupport",n,t),window.removeEventListener("testPassiveEventSupport",n,t)}catch(o){}return e}()),i}function l(e){e.handlers===e.nextHandlers&&(e.nextHandlers=e.handlers.slice())}function s(e){this.target=e,this.events={}}s.prototype.getEventHandlers=function(e,t){var n,o=String(e)+" "+String((n=t)?!0===n?100:(n.capture<<0)+(n.passive<<1)+(n.once<<2):0);return this.events[o]||(this.events[o]={handlers:[],handleEvent:void 0},this.events[o].nextHandlers=this.events[o].handlers),this.events[o]},s.prototype.handleEvent=function(e,t,n){var o=this.getEventHandlers(e,t);o.handlers=o.nextHandlers,o.handlers.forEach((function(e){e&&e(n)}))},s.prototype.add=function(e,t,n){var o=this,r=this.getEventHandlers(e,n);l(r),0===r.nextHandlers.length&&(r.handleEvent=this.handleEvent.bind(this,e,n),this.target.addEventListener(e,r.handleEvent,n)),r.nextHandlers.push(t);var i=!0;return function(){if(i){i=!1,l(r);var a=r.nextHandlers.indexOf(t);r.nextHandlers.splice(a,1),0===r.nextHandlers.length&&(o.target&&o.target.removeEventListener(e,r.handleEvent,n),r.handleEvent=void 0)}}};var c="__consolidated_events_handlers__";function u(e,t,n,o){e[c]||(e[c]=new s(e));var r=function(e){if(e)return a()?e:!!e.capture}(o);return e[c].add(t,n,r)}var d=n(67294),p=n(59864);function f(e,t){var n,o=(n=e,!isNaN(parseFloat(n))&&isFinite(n)?parseFloat(n):"px"===n.slice(-2)?parseFloat(n.slice(0,-2)):void 0);if("number"==typeof o)return o;var r=function(e){if("%"===e.slice(-1))return parseFloat(e.slice(0,-1))/100}(e);return"number"==typeof r?r*t:void 0}var h="above",v="inside",m="below",g="invisible";function b(e){return"string"==typeof e.type}var y;var w=[];function S(e){w.push(e),y||(y=setTimeout((function(){var e;for(y=null;e=w.shift();)e()}),0));var t=!0;return function(){if(t){t=!1;var n=w.indexOf(e);-1!==n&&(w.splice(n,1),!w.length&&y&&(clearTimeout(y),y=null))}}}var x="undefined"!=typeof window,E={debug:!1,scrollableAncestor:void 0,children:void 0,topOffset:"0px",bottomOffset:"0px",horizontal:!1,onEnter:function(){},onLeave:function(){},onPositionChange:function(){},fireOnRapidScroll:!0},O=function(e){function t(t){var n;return(n=e.call(this,t)||this).refElement=function(e){n._ref=e},n}(0,o.Z)(t,e);var r=t.prototype;return r.componentDidMount=function(){var e=this;x&&(this.cancelOnNextTick=S((function(){e.cancelOnNextTick=null;var t=e.props,n=t.children;t.debug;!function(e,t){if(e&&!b(e)&&!t)throw new Error("<Waypoint> needs a DOM element to compute boundaries. The child you passed is neither a DOM element (e.g. <div>) nor does it use the innerRef prop.\n\nSee https://goo.gl/LrBNgw for more info.")}(n,e._ref),e._handleScroll=e._handleScroll.bind(e),e.scrollableAncestor=e._findScrollableAncestor(),e.scrollEventListenerUnsubscribe=u(e.scrollableAncestor,"scroll",e._handleScroll,{passive:!0}),e.resizeEventListenerUnsubscribe=u(window,"resize",e._handleScroll,{passive:!0}),e._handleScroll(null)})))},r.componentDidUpdate=function(){var e=this;x&&this.scrollableAncestor&&(this.cancelOnNextTick||(this.cancelOnNextTick=S((function(){e.cancelOnNextTick=null,e._handleScroll(null)}))))},r.componentWillUnmount=function(){x&&(this.scrollEventListenerUnsubscribe&&this.scrollEventListenerUnsubscribe(),this.resizeEventListenerUnsubscribe&&this.resizeEventListenerUnsubscribe(),this.cancelOnNextTick&&this.cancelOnNextTick())},r._findScrollableAncestor=function(){var e=this.props,t=e.horizontal,o=e.scrollableAncestor;if(o)return function(e){return"window"===e?n.g.window:e}(o);for(var r=this._ref;r.parentNode;){if((r=r.parentNode)===document.body)return window;var i=window.getComputedStyle(r),a=(t?i.getPropertyValue("overflow-x"):i.getPropertyValue("overflow-y"))||i.getPropertyValue("overflow");if("auto"===a||"scroll"===a||"overlay"===a)return r}return window},r._handleScroll=function(e){if(this._ref){var t=this._getBounds(),n=function(e){return e.viewportBottom-e.viewportTop==0?g:e.viewportTop<=e.waypointTop&&e.waypointTop<=e.viewportBottom||e.viewportTop<=e.waypointBottom&&e.waypointBottom<=e.viewportBottom||e.waypointTop<=e.viewportTop&&e.viewportBottom<=e.waypointBottom?v:e.viewportBottom<e.waypointTop?m:e.waypointTop<e.viewportTop?h:g}(t),o=this._previousPosition,r=this.props,i=(r.debug,r.onPositionChange),a=r.onEnter,l=r.onLeave,s=r.fireOnRapidScroll;if(this._previousPosition=n,o!==n){var c={currentPosition:n,previousPosition:o,event:e,waypointTop:t.waypointTop,waypointBottom:t.waypointBottom,viewportTop:t.viewportTop,viewportBottom:t.viewportBottom};i.call(this,c),n===v?a.call(this,c):o===v&&l.call(this,c),s&&(o===m&&n===h||o===h&&n===m)&&(a.call(this,{currentPosition:v,previousPosition:o,event:e,waypointTop:t.waypointTop,waypointBottom:t.waypointBottom,viewportTop:t.viewportTop,viewportBottom:t.viewportBottom}),l.call(this,{currentPosition:n,previousPosition:v,event:e,waypointTop:t.waypointTop,waypointBottom:t.waypointBottom,viewportTop:t.viewportTop,viewportBottom:t.viewportBottom}))}}},r._getBounds=function(){var e,t,n=this.props,o=n.horizontal,r=(n.debug,this._ref.getBoundingClientRect()),i=r.left,a=r.top,l=r.right,s=r.bottom,c=o?i:a,u=o?l:s;this.scrollableAncestor===window?(e=o?window.innerWidth:window.innerHeight,t=0):(e=o?this.scrollableAncestor.offsetWidth:this.scrollableAncestor.offsetHeight,t=o?this.scrollableAncestor.getBoundingClientRect().left:this.scrollableAncestor.getBoundingClientRect().top);var d=this.props,p=d.bottomOffset;return{waypointTop:c,waypointBottom:u,viewportTop:t+f(d.topOffset,e),viewportBottom:t+e-f(p,e)}},r.render=function(){var e=this,t=this.props.children;if(!t)return d.createElement("span",{ref:this.refElement,style:{fontSize:0}});if(b(t)||(0,p.isForwardRef)(t)){return d.cloneElement(t,{ref:function(n){e.refElement(n),t.ref&&("function"==typeof t.ref?t.ref(n):t.ref.current=n)}})}return d.cloneElement(t,{innerRef:this.refElement})},t}(d.PureComponent);O.above=h,O.below=m,O.inside=v,O.invisible=g,O.defaultProps=E,O.displayName="Waypoint"},11151:(e,t,n)=>{n.d(t,{Z:()=>l,a:()=>a});var o=n(67294);const r={},i=o.createContext(r);function a(e){const t=o.useContext(i);return o.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function l(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:a(e.components),o.createElement(i.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/8917.d2a12266.js.LICENSE.txt b/assets/js/8917.d2a12266.js.LICENSE.txt deleted file mode 100644 index 53dcf70ce..000000000 --- a/assets/js/8917.d2a12266.js.LICENSE.txt +++ /dev/null @@ -1,9 +0,0 @@ -/** - * @license React - * 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. - */ diff --git a/assets/js/8d193990.8949a660.js b/assets/js/8d193990.8949a660.js new file mode 100644 index 000000000..b2671aa12 --- /dev/null +++ b/assets/js/8d193990.8949a660.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([["3129"],{31612:function(e,t,n){n.r(t),n.d(t,{assets:function(){return r},contentTitle:function(){return a},default:function(){return d},frontMatter:function(){return l},metadata:function(){return o},toc:function(){return c}});var o=n(39756),s=n(85893),i=n(50065);let l={title:"eopkg is dead, long live eopkg",slug:"eopkg-is-dead-long-live-eopkg",authors:"david",tags:["eopkg","devlog","moss","solus"],hide_table_of_contents:!1},a=void 0,r={authorsImageUrls:[void 0]},c=[];function h(e){let t={a:"a",code:"code",em:"em",li:"li",p:"p",ul:"ul",...(0,i.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsxs)(t.p,{children:["Close watchers of our ",(0,s.jsx)(t.a,{href:"https://github.com/getsolus/packages",children:"packages repository"})," may have noticed some strange looking items:"]}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"https://github.com/getsolus/packages/pull/1305",children:"Initial inclusion of eopkg4-bin"})}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.a,{href:"https://github.com/getsolus/packages/issues/1316",children:"Testing the eopkg4-bin package"})," Warning: Minions GIF"]}),"\n"]}),"\n",(0,s.jsx)(t.p,{children:"It's a long story."}),"\n",(0,s.jsxs)(t.p,{children:["Our package manager ",(0,s.jsx)(t.code,{children:"eopkg"})," is written in Python2. Python2 was originally planned to hit end-of-life all the way back in 2015! So Solus contributors past and present have wrestled with three thorny issues:"]}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsxs)(t.li,{children:["Do we really want to just port ",(0,s.jsx)(t.code,{children:"eopkg"})," to python3? Surely we could build something newer and shinier."]}),"\n",(0,s.jsxs)(t.li,{children:["How exactly do we want to port ",(0,s.jsx)(t.code,{children:"eopkg"})," to Python3? (We'll call this ported version ",(0,s.jsx)(t.code,{children:"eopkg3"})," for short)"]}),"\n",(0,s.jsxs)(t.li,{children:["How do we make sure ",(0,s.jsx)(t.code,{children:"eopkg3"})," works even if something goes wrong with the Python3 libraries on someone's machine?"]}),"\n"]}),"\n",(0,s.jsxs)(t.p,{children:["Here's the plan to solve this: Ikey and friends over at Serpent OS are actively building a new package manager ",(0,s.jsx)(t.a,{href:"https://github.com/serpent-os/moss",children:(0,s.jsx)(t.em,{children:"moss"})})," that we are excited about. And they're building it with Solus in mind as an eventual user. This will be our fix for the first problem. In the meantime, we're taking a pragmatic approach to the last two issues so that (frankly) we can do more exciting things."]}),"\n",(0,s.jsxs)(t.p,{children:["Sheepman, Livingsilver, and others completed a ",(0,s.jsx)(t.a,{href:"https://github.com/getsolus/eopkg/commits/python3",children:"direct Python3 port"}),", which we never expect our users to actually run directly like a traditional Python program. Instead, that port will be compiled into a ",(0,s.jsx)(t.em,{children:"binary"})," using ",(0,s.jsx)(t.a,{href:"https://nuitka.net/doc/download.html",children:"nuitka"}),". We're calling this compiled ",(0,s.jsx)(t.code,{children:"eopkg3"})," binary ",(0,s.jsx)(t.code,{children:"eopkg4-bin"})," for now. Critically, this binary will have ",(0,s.jsx)(t.em,{children:"no dependencies"})," other than ",(0,s.jsx)(t.code,{children:"libc"}),". If we can successfully swap ",(0,s.jsx)(t.code,{children:"eopkg"})," with ",(0,s.jsx)(t.code,{children:"eopkg4-bin"})," on user's machines, then we've solved the last issue: Python3 can be updated without worrying about also wrecking the package manager. Got it?"]}),"\n",(0,s.jsxs)(t.p,{children:["But what about Python2? Well, now that Evan and Joey have seen off a ",(0,s.jsx)(t.a,{href:"https://getsol.us/2024/01/08/solus-4-5-released/",children:"successful ISO release"})," with a ",(0,s.jsx)(t.code,{children:"calamares"})," based installer, we can cross ",(0,s.jsx)(t.code,{children:"os-installer"})," ",(0,s.jsx)(t.a,{href:"https://github.com/getsolus/packages/issues/270",children:"off the list"}),". And ",(0,s.jsx)(t.code,{children:"eopkg4-bin"})," will let us cross off a whole bunch more. The rest of that list is a story for another day."]})]})}function d(e={}){let{wrapper:t}={...(0,i.a)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(h,{...e})}):h(e)}},50065:function(e,t,n){n.d(t,{Z:function(){return a},a:function(){return l}});var o=n(67294);let s={},i=o.createContext(s);function l(e){let t=o.useContext(i);return o.useMemo(function(){return"function"==typeof e?e(t):{...t,...e}},[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:l(e.components),o.createElement(i.Provider,{value:t},e.children)}},39756:function(e){e.exports=JSON.parse('{"permalink":"/blog/eopkg-is-dead-long-live-eopkg","source":"@site/devlog/2024-01-19-eopkg-is-dead.md","title":"eopkg is dead, long live eopkg","description":"Close watchers of our packages repository may have noticed some strange looking items:","date":"2024-01-19T00:00:00.000Z","tags":[{"inline":true,"label":"eopkg","permalink":"/blog/tags/eopkg"},{"inline":true,"label":"devlog","permalink":"/blog/tags/devlog"},{"inline":true,"label":"moss","permalink":"/blog/tags/moss"},{"inline":true,"label":"solus","permalink":"/blog/tags/solus"}],"readingTime":1.645,"hasTruncateMarker":true,"authors":[{"name":"David Harder","title":"Solus Staff","page":{"permalink":"/blog/authors/david"},"socials":{"github":"https://github.com/davidjharder"},"imageURL":"https://avatars.githubusercontent.com/u/23007135","key":"david"}],"frontMatter":{"title":"eopkg is dead, long live eopkg","slug":"eopkg-is-dead-long-live-eopkg","authors":"david","tags":["eopkg","devlog","moss","solus"],"hide_table_of_contents":false},"unlisted":false,"prevItem":{"title":"Don\'t call me MATE, pal!","permalink":"/blog/don\'t-call-me-mate-pal"},"nextItem":{"title":"Welcome to the Solus Devlog","permalink":"/blog/welcome-solus-devlog-v1"}}')}}]); \ No newline at end of file diff --git a/assets/js/8d193990.e1e40f22.js b/assets/js/8d193990.e1e40f22.js deleted file mode 100644 index 5b91b8c8e..000000000 --- a/assets/js/8d193990.e1e40f22.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[1539],{5436:(e,t,o)=>{o.r(t),o.d(t,{assets:()=>r,contentTitle:()=>l,default:()=>d,frontMatter:()=>i,metadata:()=>a,toc:()=>c});var s=o(85893),n=o(11151);const i={title:"eopkg is dead, long live eopkg",slug:"eopkg-is-dead-long-live-eopkg",authors:"david",tags:["eopkg","devlog","moss","solus"],hide_table_of_contents:!1},l=void 0,a={permalink:"/blog/eopkg-is-dead-long-live-eopkg",source:"@site/devlog/2024-01-19-eopkg-is-dead.md",title:"eopkg is dead, long live eopkg",description:"Close watchers of our packages repository may have noticed some strange looking items:",date:"2024-01-19T00:00:00.000Z",tags:[{inline:!0,label:"eopkg",permalink:"/blog/tags/eopkg"},{inline:!0,label:"devlog",permalink:"/blog/tags/devlog"},{inline:!0,label:"moss",permalink:"/blog/tags/moss"},{inline:!0,label:"solus",permalink:"/blog/tags/solus"}],readingTime:1.645,hasTruncateMarker:!0,authors:[{name:"David Harder",title:"Solus Staff",page:{permalink:"/blog/authors/david"},socials:{github:"https://github.com/davidjharder"},imageURL:"https://avatars.githubusercontent.com/u/23007135",key:"david"}],frontMatter:{title:"eopkg is dead, long live eopkg",slug:"eopkg-is-dead-long-live-eopkg",authors:"david",tags:["eopkg","devlog","moss","solus"],hide_table_of_contents:!1},unlisted:!1,prevItem:{title:"Don't call me MATE, pal!",permalink:"/blog/don't-call-me-mate-pal"},nextItem:{title:"Welcome to the Solus Devlog",permalink:"/blog/welcome-solus-devlog-v1"}},r={authorsImageUrls:[void 0]},c=[];function h(e){const t={a:"a",code:"code",em:"em",li:"li",p:"p",ul:"ul",...(0,n.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsxs)(t.p,{children:["Close watchers of our ",(0,s.jsx)(t.a,{href:"https://github.com/getsolus/packages",children:"packages repository"})," may have noticed some strange looking items:"]}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"https://github.com/getsolus/packages/pull/1305",children:"Initial inclusion of eopkg4-bin"})}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.a,{href:"https://github.com/getsolus/packages/issues/1316",children:"Testing the eopkg4-bin package"})," Warning: Minions GIF"]}),"\n"]}),"\n",(0,s.jsx)(t.p,{children:"It's a long story."}),"\n",(0,s.jsxs)(t.p,{children:["Our package manager ",(0,s.jsx)(t.code,{children:"eopkg"})," is written in Python2. Python2 was originally planned to hit end-of-life all the way back in 2015! So Solus contributors past and present have wrestled with three thorny issues:"]}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsxs)(t.li,{children:["Do we really want to just port ",(0,s.jsx)(t.code,{children:"eopkg"})," to python3? Surely we could build something newer and shinier."]}),"\n",(0,s.jsxs)(t.li,{children:["How exactly do we want to port ",(0,s.jsx)(t.code,{children:"eopkg"})," to Python3? (We'll call this ported version ",(0,s.jsx)(t.code,{children:"eopkg3"})," for short)"]}),"\n",(0,s.jsxs)(t.li,{children:["How do we make sure ",(0,s.jsx)(t.code,{children:"eopkg3"})," works even if something goes wrong with the Python3 libraries on someone's machine?"]}),"\n"]}),"\n",(0,s.jsxs)(t.p,{children:["Here's the plan to solve this: Ikey and friends over at Serpent OS are actively building a new package manager ",(0,s.jsx)(t.a,{href:"https://github.com/serpent-os/moss",children:(0,s.jsx)(t.em,{children:"moss"})})," that we are excited about. And they're building it with Solus in mind as an eventual user. This will be our fix for the first problem. In the meantime, we're taking a pragmatic approach to the last two issues so that (frankly) we can do more exciting things."]}),"\n",(0,s.jsxs)(t.p,{children:["Sheepman, Livingsilver, and others completed a ",(0,s.jsx)(t.a,{href:"https://github.com/getsolus/eopkg/commits/python3",children:"direct Python3 port"}),", which we never expect our users to actually run directly like a traditional Python program. Instead, that port will be compiled into a ",(0,s.jsx)(t.em,{children:"binary"})," using ",(0,s.jsx)(t.a,{href:"https://nuitka.net/doc/download.html",children:"nuitka"}),". We're calling this compiled ",(0,s.jsx)(t.code,{children:"eopkg3"})," binary ",(0,s.jsx)(t.code,{children:"eopkg4-bin"})," for now. Critically, this binary will have ",(0,s.jsx)(t.em,{children:"no dependencies"})," other than ",(0,s.jsx)(t.code,{children:"libc"}),". If we can successfully swap ",(0,s.jsx)(t.code,{children:"eopkg"})," with ",(0,s.jsx)(t.code,{children:"eopkg4-bin"})," on user's machines, then we've solved the last issue: Python3 can be updated without worrying about also wrecking the package manager. Got it?"]}),"\n",(0,s.jsxs)(t.p,{children:["But what about Python2? Well, now that Evan and Joey have seen off a ",(0,s.jsx)(t.a,{href:"https://getsol.us/2024/01/08/solus-4-5-released/",children:"successful ISO release"})," with a ",(0,s.jsx)(t.code,{children:"calamares"})," based installer, we can cross ",(0,s.jsx)(t.code,{children:"os-installer"})," ",(0,s.jsx)(t.a,{href:"https://github.com/getsolus/packages/issues/270",children:"off the list"}),". And ",(0,s.jsx)(t.code,{children:"eopkg4-bin"})," will let us cross off a whole bunch more. The rest of that list is a story for another day."]})]})}function d(e={}){const{wrapper:t}={...(0,n.a)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(h,{...e})}):h(e)}},11151:(e,t,o)=>{o.d(t,{Z:()=>a,a:()=>l});var s=o(67294);const n={},i=s.createContext(n);function l(e){const t=s.useContext(i);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:l(e.components),s.createElement(i.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/8e3d5b32.7f0788ff.js b/assets/js/8e3d5b32.7f0788ff.js new file mode 100644 index 000000000..272e3717d --- /dev/null +++ b/assets/js/8e3d5b32.7f0788ff.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([["2288"],{99641:function(e,n,t){t.r(n),t.d(n,{metadata:()=>i,contentTitle:()=>o,default:()=>u,assets:()=>l,toc:()=>d,frontMatter:()=>r});var i=JSON.parse('{"id":"user/software/localization/ibus","title":"IBus","description":"Configuration","source":"@site/docs/user/software/localization/ibus.md","sourceDirName":"user/software/localization","slug":"/user/software/localization/ibus","permalink":"/docs/user/software/localization/ibus","draft":false,"unlisted":false,"editUrl":"https://github.com/getsolus/help-center-docs/tree/master/docs/user/software/localization/ibus.md","tags":[],"version":"current","lastUpdatedAt":1733757592000,"frontMatter":{"title":"IBus","summary":"Configuration of additional languages via IBUS"},"sidebar":"userSidebar","previous":{"title":"Localization","permalink":"/docs/category/localization"},"next":{"title":"Networking","permalink":"/docs/category/networking"}}'),s=t("85893"),a=t("50065");let r={title:"IBus",summary:"Configuration of additional languages via IBUS"},o="IBus",l={},d=[{value:"Configuration",id:"configuration",level:2},{value:"IBus IME package list",id:"ibus-ime-package-list",level:2}];function c(e){let n={a:"a",code:"code",h1:"h1",h2:"h2",header:"header",img:"img",p:"p",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,a.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.header,{children:(0,s.jsx)(n.h1,{id:"ibus",children:"IBus"})}),"\n",(0,s.jsx)(n.h2,{id:"configuration",children:"Configuration"}),"\n",(0,s.jsxs)(n.p,{children:["Find the IME (Input Method Editor) you require from the ",(0,s.jsx)(n.a,{href:"#ibus-ime-package-list",children:"IBus IME package list"}),' and then search for it in the Software Center. Click "Install" to add the IME.']}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.img,{alt:"IBus IME Install",src:t(10913).Z+"",width:"812",height:"315"})}),"\n",(0,s.jsx)(n.p,{children:"You may have to agree to install some additional dependencies and will need to type in your user password as authentication is required."}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.img,{alt:"IBus IME Dependencies",src:t(48184).Z+"",width:"446",height:"445"})}),"\n",(0,s.jsxs)(n.p,{children:["Once it has finished installing, logout of your computer and then login again. Now you'll be able to select the newly installed IME by following the same steps as detailed above for changing keyboard layouts in Budgie. For instance, in this example we have installed the ",(0,s.jsx)(n.code,{children:"ibus-hangul"})," package for the Korean language. By following the steps above and then searching for Korean keyboard layouts, we are now able to select Korean (Hangul) as an input source."]}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.img,{alt:"IBus Region and Language",src:t(669).Z+"",width:"742",height:"394"})}),"\n",(0,s.jsxs)(n.p,{children:["Additionally, once you have added the IME and have it selected in the Region & Languages window, you can click on the cog icon under the input sources to load the settings window for your specific IME. The ",(0,s.jsx)(n.code,{children:"ibus-hangul"})," settings window is shown below but this will vary between the different IME's."]}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.img,{alt:"IBus IME Settings Example: Hangul",src:t(20260).Z+"",width:"347",height:"405"})}),"\n",(0,s.jsx)(n.h2,{id:"ibus-ime-package-list",children:"IBus IME package list"}),"\n",(0,s.jsx)(n.p,{children:"A list of IBus IME packages available in the Solus software repository."}),"\n",(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{children:"Package"}),(0,s.jsx)(n.th,{children:"Input Method"})]})}),(0,s.jsxs)(n.tbody,{children:[(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"ibus-anthy"}),(0,s.jsx)(n.td,{children:"Japanese"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"ibus-chewing"}),(0,s.jsx)(n.td,{children:"Phonetic Chinese input method for Zhuyin (Bopomofo)"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"ibus-hangul"}),(0,s.jsx)(n.td,{children:"Korean"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"ibus-m17n"}),(0,s.jsx)(n.td,{children:"Multiple Languages"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"ibus-unikey"}),(0,s.jsx)(n.td,{children:"Vietnamese"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"ibus-libpinyin"}),(0,s.jsx)(n.td,{children:"Chinese Pinyin and Bopomofo"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"ibus-libzhuyin"}),(0,s.jsx)(n.td,{children:"Chinese Zhuyin"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"ibus-cangjie"}),(0,s.jsx)(n.td,{children:"Simplified Cangjie"})]})]})]})]})}function u(e={}){let{wrapper:n}={...(0,a.a)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(c,{...e})}):c(e)}},48184:function(e,n,t){t.d(n,{Z:function(){return i}});let i=t.p+"assets/images/ibus-ime-dependencies-0dc4668d437230c7528de2f86647531b.jpg"},10913:function(e,n,t){t.d(n,{Z:function(){return i}});let i=t.p+"assets/images/ibus-ime-install-68ba41c372dec67147393ad161a0f6f9.jpg"},20260:function(e,n,t){t.d(n,{Z:function(){return i}});let i=t.p+"assets/images/ibus-ime-settings-hangul-27a3a73e189a7c7e02287539008b825c.jpg"},669:function(e,n,t){t.d(n,{Z:function(){return i}});let i=t.p+"assets/images/ibus-region-and-languages-beb500ff774fb2dc414857fe1d196515.jpg"},50065:function(e,n,t){t.d(n,{Z:function(){return o},a:function(){return r}});var i=t(67294);let s={},a=i.createContext(s);function r(e){let n=i.useContext(a);return i.useMemo(function(){return"function"==typeof e?e(n):{...n,...e}},[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:r(e.components),i.createElement(a.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/8e3d5b32.fae5b38f.js b/assets/js/8e3d5b32.fae5b38f.js deleted file mode 100644 index aa44052a0..000000000 --- a/assets/js/8e3d5b32.fae5b38f.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[8499],{15838:(e,i,n)=>{n.r(i),n.d(i,{assets:()=>l,contentTitle:()=>o,default:()=>h,frontMatter:()=>a,metadata:()=>r,toc:()=>d});var t=n(85893),s=n(11151);const a={title:"IBus",summary:"Configuration of additional languages via IBUS"},o="IBus",r={id:"user/software/localization/ibus",title:"IBus",description:"Configuration",source:"@site/docs/user/software/localization/ibus.md",sourceDirName:"user/software/localization",slug:"/user/software/localization/ibus",permalink:"/docs/user/software/localization/ibus",draft:!1,unlisted:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/software/localization/ibus.md",tags:[],version:"current",lastUpdatedAt:1732716912e3,frontMatter:{title:"IBus",summary:"Configuration of additional languages via IBUS"},sidebar:"userSidebar",previous:{title:"Localization",permalink:"/docs/category/localization"},next:{title:"Networking",permalink:"/docs/category/networking"}},l={},d=[{value:"Configuration",id:"configuration",level:2},{value:"IBus IME package list",id:"ibus-ime-package-list",level:2}];function c(e){const i={a:"a",code:"code",h1:"h1",h2:"h2",header:"header",img:"img",p:"p",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,s.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(i.header,{children:(0,t.jsx)(i.h1,{id:"ibus",children:"IBus"})}),"\n",(0,t.jsx)(i.h2,{id:"configuration",children:"Configuration"}),"\n",(0,t.jsxs)(i.p,{children:["Find the IME (Input Method Editor) you require from the ",(0,t.jsx)(i.a,{href:"#ibus-ime-package-list",children:"IBus IME package list"}),' and then search for it in the Software Center. Click "Install" to add the IME.']}),"\n",(0,t.jsx)(i.p,{children:(0,t.jsx)(i.img,{alt:"IBus IME Install",src:n(38161).Z+"",width:"812",height:"315"})}),"\n",(0,t.jsx)(i.p,{children:"You may have to agree to install some additional dependencies and will need to type in your user password as authentication is required."}),"\n",(0,t.jsx)(i.p,{children:(0,t.jsx)(i.img,{alt:"IBus IME Dependencies",src:n(11533).Z+"",width:"446",height:"445"})}),"\n",(0,t.jsxs)(i.p,{children:["Once it has finished installing, logout of your computer and then login again. Now you'll be able to select the newly installed IME by following the same steps as detailed above for changing keyboard layouts in Budgie. For instance, in this example we have installed the ",(0,t.jsx)(i.code,{children:"ibus-hangul"})," package for the Korean language. By following the steps above and then searching for Korean keyboard layouts, we are now able to select Korean (Hangul) as an input source."]}),"\n",(0,t.jsx)(i.p,{children:(0,t.jsx)(i.img,{alt:"IBus Region and Language",src:n(99809).Z+"",width:"742",height:"394"})}),"\n",(0,t.jsxs)(i.p,{children:["Additionally, once you have added the IME and have it selected in the Region & Languages window, you can click on the cog icon under the input sources to load the settings window for your specific IME. The ",(0,t.jsx)(i.code,{children:"ibus-hangul"})," settings window is shown below but this will vary between the different IME's."]}),"\n",(0,t.jsx)(i.p,{children:(0,t.jsx)(i.img,{alt:"IBus IME Settings Example: Hangul",src:n(40584).Z+"",width:"347",height:"405"})}),"\n",(0,t.jsx)(i.h2,{id:"ibus-ime-package-list",children:"IBus IME package list"}),"\n",(0,t.jsx)(i.p,{children:"A list of IBus IME packages available in the Solus software repository."}),"\n",(0,t.jsxs)(i.table,{children:[(0,t.jsx)(i.thead,{children:(0,t.jsxs)(i.tr,{children:[(0,t.jsx)(i.th,{children:"Package"}),(0,t.jsx)(i.th,{children:"Input Method"})]})}),(0,t.jsxs)(i.tbody,{children:[(0,t.jsxs)(i.tr,{children:[(0,t.jsx)(i.td,{children:"ibus-anthy"}),(0,t.jsx)(i.td,{children:"Japanese"})]}),(0,t.jsxs)(i.tr,{children:[(0,t.jsx)(i.td,{children:"ibus-chewing"}),(0,t.jsx)(i.td,{children:"Phonetic Chinese input method for Zhuyin (Bopomofo)"})]}),(0,t.jsxs)(i.tr,{children:[(0,t.jsx)(i.td,{children:"ibus-hangul"}),(0,t.jsx)(i.td,{children:"Korean"})]}),(0,t.jsxs)(i.tr,{children:[(0,t.jsx)(i.td,{children:"ibus-m17n"}),(0,t.jsx)(i.td,{children:"Multiple Languages"})]}),(0,t.jsxs)(i.tr,{children:[(0,t.jsx)(i.td,{children:"ibus-unikey"}),(0,t.jsx)(i.td,{children:"Vietnamese"})]}),(0,t.jsxs)(i.tr,{children:[(0,t.jsx)(i.td,{children:"ibus-libpinyin"}),(0,t.jsx)(i.td,{children:"Chinese Pinyin and Bopomofo"})]}),(0,t.jsxs)(i.tr,{children:[(0,t.jsx)(i.td,{children:"ibus-libzhuyin"}),(0,t.jsx)(i.td,{children:"Chinese Zhuyin"})]}),(0,t.jsxs)(i.tr,{children:[(0,t.jsx)(i.td,{children:"ibus-cangjie"}),(0,t.jsx)(i.td,{children:"Simplified Cangjie"})]})]})]})]})}function h(e={}){const{wrapper:i}={...(0,s.a)(),...e.components};return i?(0,t.jsx)(i,{...e,children:(0,t.jsx)(c,{...e})}):c(e)}},11533:(e,i,n)=>{n.d(i,{Z:()=>t});const t=n.p+"assets/images/ibus-ime-dependencies-0dc4668d437230c7528de2f86647531b.jpg"},38161:(e,i,n)=>{n.d(i,{Z:()=>t});const t=n.p+"assets/images/ibus-ime-install-68ba41c372dec67147393ad161a0f6f9.jpg"},40584:(e,i,n)=>{n.d(i,{Z:()=>t});const t=n.p+"assets/images/ibus-ime-settings-hangul-27a3a73e189a7c7e02287539008b825c.jpg"},99809:(e,i,n)=>{n.d(i,{Z:()=>t});const t=n.p+"assets/images/ibus-region-and-languages-beb500ff774fb2dc414857fe1d196515.jpg"},11151:(e,i,n)=>{n.d(i,{Z:()=>r,a:()=>o});var t=n(67294);const s={},a=t.createContext(s);function o(e){const i=t.useContext(a);return t.useMemo((function(){return"function"==typeof e?e(i):{...i,...e}}),[i,e])}function r(e){let i;return i=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:o(e.components),t.createElement(a.Provider,{value:i},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/8e861970.23584379.js b/assets/js/8e861970.23584379.js deleted file mode 100644 index b93a8dd37..000000000 --- a/assets/js/8e861970.23584379.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[8026],{95751:(e,s,a)=>{a.r(s),a.d(s,{assets:()=>c,contentTitle:()=>i,default:()=>d,frontMatter:()=>r,metadata:()=>o,toc:()=>u});var t=a(85893),n=a(11151);const r={title:"Requesting a Package",summary:"Requesting a new package"},i="Requesting A Package",o={id:"packaging/procedures/request-a-package",title:"Requesting a Package",description:"If you think Solus is missing a package that would be useful, you can let us know using our Issue Tracker.",source:"@site/docs/packaging/procedures/request-a-package.md",sourceDirName:"packaging/procedures",slug:"/packaging/procedures/request-a-package",permalink:"/docs/packaging/procedures/request-a-package",draft:!1,unlisted:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/packaging/procedures/request-a-package.md",tags:[],version:"current",lastUpdatedAt:1732716912e3,frontMatter:{title:"Requesting a Package",summary:"Requesting a new package"},sidebar:"packagingSidebar",previous:{title:"Requesting a Package Update",permalink:"/docs/packaging/procedures/request-a-package-update"},next:{title:"Rebuilding a stack",permalink:"/docs/packaging/stack-rebuilds"}},c={},u=[{value:"Steps to request a new package",id:"steps-to-request-a-new-package",level:2}];function l(e){const s={a:"a",code:"code",em:"em",h1:"h1",h2:"h2",header:"header",li:"li",ol:"ol",p:"p",strong:"strong",ul:"ul",...(0,n.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(s.header,{children:(0,t.jsx)(s.h1,{id:"requesting-a-package",children:"Requesting A Package"})}),"\n",(0,t.jsx)(s.p,{children:"If you think Solus is missing a package that would be useful, you can let us know using our Issue Tracker."}),"\n",(0,t.jsx)(s.h2,{id:"steps-to-request-a-new-package",children:"Steps to request a new package"}),"\n",(0,t.jsxs)(s.ol,{children:["\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.a,{href:"https://github.com/getsolus/packages/issues?q=sort%3Aupdated-desc+is%3Aopen+label%3A%22Package%3A+Addition+Request%22",children:"Look to see if an issue has already been filed"})," for the package you want. If there is already request for your package, please do not open another issue. Instead, add your comments to the existing issue."]}),"\n",(0,t.jsxs)(s.li,{children:["Skim our ",(0,t.jsx)(s.a,{href:"/docs/packaging/procedures/package-inclusion",children:"Package inclusion policy"})," to make sure your request won't be rejected."]}),"\n",(0,t.jsxs)(s.li,{children:["Open a new ",(0,t.jsx)(s.a,{href:"https://github.com/getsolus/packages/issues/new?assignees=&labels=Package%3A+Addition+Request%2CPriority%3A+Wishlist&projects=&template=request-new-package.yml&title=What%27s+the+package+name%3F",children:"issue"})," for your package using the ",(0,t.jsx)(s.em,{children:"Request a new package"})," template. The template will ask you for the following information. Please complete as much as you can.","\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsx)(s.li,{children:"Name"}),"\n",(0,t.jsx)(s.li,{children:"Homepage"}),"\n",(0,t.jsxs)(s.li,{children:["Why should this be included in the repository? If we already offer similar packages in our repository ",(0,t.jsx)(s.strong,{children:"or third party repository"}),", please tell us what your new package does that our existing packages do not (",(0,t.jsx)(s.em,{children:"How is it different or better"}),")."]}),"\n",(0,t.jsxs)(s.li,{children:["Are we allowed to distribute it?","\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:["For Solus to distribute the package it must use a license found on the ",(0,t.jsx)(s.a,{href:"https://spdx.org/licenses/",children:"SPDX License List"}),", or Solus must be given permission to redistribute it by the owner."]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(s.li,{children:"What kind of user will use this package, and how many users do you think will use this package?"}),"\n",(0,t.jsxs)(s.li,{children:["Link to source tarball/zip file. This must point to a stable, versioned source, for example: ",(0,t.jsx)(s.code,{children:"1.2.3.tar.gz"})," or ",(0,t.jsx)(s.code,{children:"packagename-1.2.3"}),". Nightlies, snapshots and pre-releases are not allowed."]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(s.li,{children:"Wait for Solus Staff to approve or reject your request."}),"\n"]})]})}function d(e={}){const{wrapper:s}={...(0,n.a)(),...e.components};return s?(0,t.jsx)(s,{...e,children:(0,t.jsx)(l,{...e})}):l(e)}},11151:(e,s,a)=>{a.d(s,{Z:()=>o,a:()=>i});var t=a(67294);const n={},r=t.createContext(n);function i(e){const s=t.useContext(r);return t.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function o(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:i(e.components),t.createElement(r.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/8e861970.9590ad1b.js b/assets/js/8e861970.9590ad1b.js new file mode 100644 index 000000000..9969216ee --- /dev/null +++ b/assets/js/8e861970.9590ad1b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([["7667"],{6852:function(e,s,t){t.r(s),t.d(s,{metadata:()=>a,contentTitle:()=>o,default:()=>d,assets:()=>c,toc:()=>u,frontMatter:()=>i});var a=JSON.parse('{"id":"packaging/procedures/request-a-package","title":"Requesting a Package","description":"If you think Solus is missing a package that would be useful, you can let us know using our Issue Tracker.","source":"@site/docs/packaging/procedures/request-a-package.md","sourceDirName":"packaging/procedures","slug":"/packaging/procedures/request-a-package","permalink":"/docs/packaging/procedures/request-a-package","draft":false,"unlisted":false,"editUrl":"https://github.com/getsolus/help-center-docs/tree/master/docs/packaging/procedures/request-a-package.md","tags":[],"version":"current","lastUpdatedAt":1733757592000,"frontMatter":{"title":"Requesting a Package","summary":"Requesting a new package"},"sidebar":"packagingSidebar","previous":{"title":"Requesting a Package Update","permalink":"/docs/packaging/procedures/request-a-package-update"},"next":{"title":"Rebuilding a stack","permalink":"/docs/packaging/stack-rebuilds"}}'),n=t("85893"),r=t("50065");let i={title:"Requesting a Package",summary:"Requesting a new package"},o="Requesting A Package",c={},u=[{value:"Steps to request a new package",id:"steps-to-request-a-new-package",level:2}];function l(e){let s={a:"a",code:"code",em:"em",h1:"h1",h2:"h2",header:"header",li:"li",ol:"ol",p:"p",strong:"strong",ul:"ul",...(0,r.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(s.header,{children:(0,n.jsx)(s.h1,{id:"requesting-a-package",children:"Requesting A Package"})}),"\n",(0,n.jsx)(s.p,{children:"If you think Solus is missing a package that would be useful, you can let us know using our Issue Tracker."}),"\n",(0,n.jsx)(s.h2,{id:"steps-to-request-a-new-package",children:"Steps to request a new package"}),"\n",(0,n.jsxs)(s.ol,{children:["\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"https://github.com/getsolus/packages/issues?q=sort%3Aupdated-desc+is%3Aopen+label%3A%22Package%3A+Addition+Request%22",children:"Look to see if an issue has already been filed"})," for the package you want. If there is already request for your package, please do not open another issue. Instead, add your comments to the existing issue."]}),"\n",(0,n.jsxs)(s.li,{children:["Skim our ",(0,n.jsx)(s.a,{href:"/docs/packaging/procedures/package-inclusion",children:"Package inclusion policy"})," to make sure your request won't be rejected."]}),"\n",(0,n.jsxs)(s.li,{children:["Open a new ",(0,n.jsx)(s.a,{href:"https://github.com/getsolus/packages/issues/new?assignees=&labels=Package%3A+Addition+Request%2CPriority%3A+Wishlist&projects=&template=request-new-package.yml&title=What%27s+the+package+name%3F",children:"issue"})," for your package using the ",(0,n.jsx)(s.em,{children:"Request a new package"})," template. The template will ask you for the following information. Please complete as much as you can.","\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"Name"}),"\n",(0,n.jsx)(s.li,{children:"Homepage"}),"\n",(0,n.jsxs)(s.li,{children:["Why should this be included in the repository? If we already offer similar packages in our repository ",(0,n.jsx)(s.strong,{children:"or third party repository"}),", please tell us what your new package does that our existing packages do not (",(0,n.jsx)(s.em,{children:"How is it different or better"}),")."]}),"\n",(0,n.jsxs)(s.li,{children:["Are we allowed to distribute it?","\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:["For Solus to distribute the package it must use a license found on the ",(0,n.jsx)(s.a,{href:"https://spdx.org/licenses/",children:"SPDX License List"}),", or Solus must be given permission to redistribute it by the owner."]}),"\n"]}),"\n"]}),"\n",(0,n.jsx)(s.li,{children:"What kind of user will use this package, and how many users do you think will use this package?"}),"\n",(0,n.jsxs)(s.li,{children:["Link to source tarball/zip file. This must point to a stable, versioned source, for example: ",(0,n.jsx)(s.code,{children:"1.2.3.tar.gz"})," or ",(0,n.jsx)(s.code,{children:"packagename-1.2.3"}),". Nightlies, snapshots and pre-releases are not allowed."]}),"\n"]}),"\n"]}),"\n",(0,n.jsx)(s.li,{children:"Wait for Solus Staff to approve or reject your request."}),"\n"]})]})}function d(e={}){let{wrapper:s}={...(0,r.a)(),...e.components};return s?(0,n.jsx)(s,{...e,children:(0,n.jsx)(l,{...e})}):l(e)}},50065:function(e,s,t){t.d(s,{Z:function(){return o},a:function(){return i}});var a=t(67294);let n={},r=a.createContext(n);function i(e){let s=a.useContext(r);return a.useMemo(function(){return"function"==typeof e?e(s):{...s,...e}},[s,e])}function o(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:i(e.components),a.createElement(r.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/8e886580.32f66441.js b/assets/js/8e886580.32f66441.js deleted file mode 100644 index 8ae905f5f..000000000 --- a/assets/js/8e886580.32f66441.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[4978],{71137:(e,t,s)=>{s.r(t),s.d(t,{assets:()=>a,contentTitle:()=>i,default:()=>c,frontMatter:()=>r,metadata:()=>l,toc:()=>d});var n=s(85893),o=s(11151);const r={title:"Rust",summary:"A quick guide to getting set up for Rust development on Solus"},i="Rust",l={id:"user/software/development/rust",title:"Rust",description:"There are two ways to install Rust. This article explains how they differ and which one should be used, according to users' needs.",source:"@site/docs/user/software/development/rust.md",sourceDirName:"user/software/development",slug:"/user/software/development/rust",permalink:"/docs/user/software/development/rust",draft:!1,unlisted:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/software/development/rust.md",tags:[],version:"current",lastUpdatedAt:1732716912e3,frontMatter:{title:"Rust",summary:"A quick guide to getting set up for Rust development on Solus"},sidebar:"userSidebar",previous:{title:"R and RStudio",permalink:"/docs/user/software/development/r-and-rstudio"},next:{title:"Web Development",permalink:"/docs/user/software/development/web"}},a={},d=[];function u(e){const t={a:"a",blockquote:"blockquote",code:"code",h1:"h1",header:"header",li:"li",p:"p",strong:"strong",ul:"ul",...(0,o.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.header,{children:(0,n.jsx)(t.h1,{id:"rust",children:"Rust"})}),"\n",(0,n.jsx)(t.p,{children:"There are two ways to install Rust. This article explains how they differ and which one should be used, according to users' needs."}),"\n",(0,n.jsx)(t.p,{children:"Rust can be obtained by:"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsxs)(t.li,{children:["Installing the ",(0,n.jsx)(t.code,{children:"rustup"})," package, then installing any Rust target and/or tool using ",(0,n.jsx)(t.code,{children:"rustup"})," itself"]}),"\n",(0,n.jsxs)(t.li,{children:["Installing the ",(0,n.jsx)(t.code,{children:"rust"})," package"]}),"\n"]}),"\n",(0,n.jsxs)(t.p,{children:["Users should prefer the ",(0,n.jsx)(t.code,{children:"rustup"})," way, since it gives the freedom to install any tools and targets, including nightly versions and debugging utilities, although it may require editing the ",(0,n.jsx)(t.code,{children:"PATH"})," variable depending on your shell setup. According to the official Rust ",(0,n.jsx)(t.a,{href:"https://www.rust-lang.org/tools/install",children:"installation guide"}),":"]}),"\n",(0,n.jsxs)(t.blockquote,{children:["\n",(0,n.jsxs)(t.p,{children:["It is customary for Rust developers to include ",(0,n.jsx)(t.code,{children:"~/.cargo/bin"})," in their ",(0,n.jsx)(t.code,{children:"PATH "}),"environment variable. During installation rustup will attempt to configure the ",(0,n.jsx)(t.code,{children:"PATH"}),". Because of differences between platforms, command shells, and bugs in rustup, the modifications to ",(0,n.jsx)(t.code,{children:"PATH"})," may not take effect until the console is restarted, or the user is logged out, or it may not succeed at all."]}),"\n"]}),"\n",(0,n.jsxs)(t.p,{children:["The ",(0,n.jsx)(t.code,{children:"rust"})," package, in fact, is present in the Solus repository for building packages that depend on it and it is not intended to be used by the final user, although it is possible and supported. Users that want to use the ",(0,n.jsx)(t.code,{children:"rust"})," package for their projects will be limited to the targets and tools that Solus needs to support, namely x86_64 and i686 Linux targets and ",(0,n.jsx)(t.code,{children:"cargo"}),". On the other hand, the ",(0,n.jsx)(t.code,{children:"rust"})," package is ready to use after its installation with no extra configurations."]}),"\n",(0,n.jsxs)(t.p,{children:["Either way, it is also recommended to install our ",(0,n.jsx)(t.code,{children:"system.devel"})," component, which is typically required for compiling. See our documentation for it ",(0,n.jsx)(t.a,{href:"/docs/user/software/development",children:"here"}),"."]}),"\n",(0,n.jsxs)(t.p,{children:["As a final note, it is possible to ",(0,n.jsx)(t.a,{href:"https://rust-lang.github.io/rustup/installation/already-installed-rust.html",children:"configure"})," ",(0,n.jsx)(t.code,{children:"rustup"})," to use the system toolchain. This setup is ",(0,n.jsx)(t.strong,{children:"discouraged"})," unless aimed at developing applications targeting Solus itself."]})]})}function c(e={}){const{wrapper:t}={...(0,o.a)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(u,{...e})}):u(e)}},11151:(e,t,s)=>{s.d(t,{Z:()=>l,a:()=>i});var n=s(67294);const o={},r=n.createContext(o);function i(e){const t=n.useContext(r);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function l(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:i(e.components),n.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/8e886580.4d5d1ca9.js b/assets/js/8e886580.4d5d1ca9.js new file mode 100644 index 000000000..d234bff11 --- /dev/null +++ b/assets/js/8e886580.4d5d1ca9.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([["1992"],{24459:function(e,t,s){s.r(t),s.d(t,{metadata:()=>n,contentTitle:()=>l,default:()=>c,assets:()=>a,toc:()=>d,frontMatter:()=>i});var n=JSON.parse('{"id":"user/software/development/rust","title":"Rust","description":"There are two ways to install Rust. This article explains how they differ and which one should be used, according to users\' needs.","source":"@site/docs/user/software/development/rust.md","sourceDirName":"user/software/development","slug":"/user/software/development/rust","permalink":"/docs/user/software/development/rust","draft":false,"unlisted":false,"editUrl":"https://github.com/getsolus/help-center-docs/tree/master/docs/user/software/development/rust.md","tags":[],"version":"current","lastUpdatedAt":1733757592000,"frontMatter":{"title":"Rust","summary":"A quick guide to getting set up for Rust development on Solus"},"sidebar":"userSidebar","previous":{"title":"R and RStudio","permalink":"/docs/user/software/development/r-and-rstudio"},"next":{"title":"Web Development","permalink":"/docs/user/software/development/web"}}'),o=s("85893"),r=s("50065");let i={title:"Rust",summary:"A quick guide to getting set up for Rust development on Solus"},l="Rust",a={},d=[];function u(e){let t={a:"a",blockquote:"blockquote",code:"code",h1:"h1",header:"header",li:"li",p:"p",strong:"strong",ul:"ul",...(0,r.a)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(t.header,{children:(0,o.jsx)(t.h1,{id:"rust",children:"Rust"})}),"\n",(0,o.jsx)(t.p,{children:"There are two ways to install Rust. This article explains how they differ and which one should be used, according to users' needs."}),"\n",(0,o.jsx)(t.p,{children:"Rust can be obtained by:"}),"\n",(0,o.jsxs)(t.ul,{children:["\n",(0,o.jsxs)(t.li,{children:["Installing the ",(0,o.jsx)(t.code,{children:"rustup"})," package, then installing any Rust target and/or tool using ",(0,o.jsx)(t.code,{children:"rustup"})," itself"]}),"\n",(0,o.jsxs)(t.li,{children:["Installing the ",(0,o.jsx)(t.code,{children:"rust"})," package"]}),"\n"]}),"\n",(0,o.jsxs)(t.p,{children:["Users should prefer the ",(0,o.jsx)(t.code,{children:"rustup"})," way, since it gives the freedom to install any tools and targets, including nightly versions and debugging utilities, although it may require editing the ",(0,o.jsx)(t.code,{children:"PATH"})," variable depending on your shell setup. According to the official Rust ",(0,o.jsx)(t.a,{href:"https://www.rust-lang.org/tools/install",children:"installation guide"}),":"]}),"\n",(0,o.jsxs)(t.blockquote,{children:["\n",(0,o.jsxs)(t.p,{children:["It is customary for Rust developers to include ",(0,o.jsx)(t.code,{children:"~/.cargo/bin"})," in their ",(0,o.jsx)(t.code,{children:"PATH "}),"environment variable. During installation rustup will attempt to configure the ",(0,o.jsx)(t.code,{children:"PATH"}),". Because of differences between platforms, command shells, and bugs in rustup, the modifications to ",(0,o.jsx)(t.code,{children:"PATH"})," may not take effect until the console is restarted, or the user is logged out, or it may not succeed at all."]}),"\n"]}),"\n",(0,o.jsxs)(t.p,{children:["The ",(0,o.jsx)(t.code,{children:"rust"})," package, in fact, is present in the Solus repository for building packages that depend on it and it is not intended to be used by the final user, although it is possible and supported. Users that want to use the ",(0,o.jsx)(t.code,{children:"rust"})," package for their projects will be limited to the targets and tools that Solus needs to support, namely x86_64 and i686 Linux targets and ",(0,o.jsx)(t.code,{children:"cargo"}),". On the other hand, the ",(0,o.jsx)(t.code,{children:"rust"})," package is ready to use after its installation with no extra configurations."]}),"\n",(0,o.jsxs)(t.p,{children:["Either way, it is also recommended to install our ",(0,o.jsx)(t.code,{children:"system.devel"})," component, which is typically required for compiling. See our documentation for it ",(0,o.jsx)(t.a,{href:"/docs/user/software/development",children:"here"}),"."]}),"\n",(0,o.jsxs)(t.p,{children:["As a final note, it is possible to ",(0,o.jsx)(t.a,{href:"https://rust-lang.github.io/rustup/installation/already-installed-rust.html",children:"configure"})," ",(0,o.jsx)(t.code,{children:"rustup"})," to use the system toolchain. This setup is ",(0,o.jsx)(t.strong,{children:"discouraged"})," unless aimed at developing applications targeting Solus itself."]})]})}function c(e={}){let{wrapper:t}={...(0,r.a)(),...e.components};return t?(0,o.jsx)(t,{...e,children:(0,o.jsx)(u,{...e})}):u(e)}},50065:function(e,t,s){s.d(t,{Z:function(){return l},a:function(){return i}});var n=s(67294);let o={},r=n.createContext(o);function i(e){let t=n.useContext(r);return n.useMemo(function(){return"function"==typeof e?e(t):{...t,...e}},[t,e])}function l(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:i(e.components),n.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/920ec10a.28cf9cf6.js b/assets/js/920ec10a.28cf9cf6.js new file mode 100644 index 000000000..5176d1b71 --- /dev/null +++ b/assets/js/920ec10a.28cf9cf6.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([["8261"],{35010:function(e){e.exports=JSON.parse('{"tag":{"label":"glibc","permalink":"/blog/tags/glibc","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/glibc","page":1,"postsPerPage":1,"totalPages":1,"totalCount":1,"blogDescription":"The Solus Development (b)log!","blogTitle":"Solus DevLog"}}')}}]); \ No newline at end of file diff --git a/assets/js/920ec10a.ba0a929e.js b/assets/js/920ec10a.ba0a929e.js deleted file mode 100644 index 04498e122..000000000 --- a/assets/js/920ec10a.ba0a929e.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[4725],{63438:e=>{e.exports=JSON.parse('{"tag":{"label":"glibc","permalink":"/blog/tags/glibc","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/glibc","page":1,"postsPerPage":1,"totalPages":1,"totalCount":1,"blogDescription":"The Solus Development (b)log!","blogTitle":"Solus DevLog"}}')}}]); \ No newline at end of file diff --git a/assets/js/9284d474.2f7ad000.js b/assets/js/9284d474.2f7ad000.js new file mode 100644 index 000000000..8d6c54f39 --- /dev/null +++ b/assets/js/9284d474.2f7ad000.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([["5528"],{85529:function(e,n,i){i.r(n),i.d(n,{metadata:()=>s,contentTitle:()=>l,default:()=>h,assets:()=>o,toc:()=>d,frontMatter:()=>a});var s=JSON.parse('{"id":"user/software/gaming/index","title":"Gaming","description":"Heroes of Newerth","source":"@site/docs/user/software/gaming/index.md","sourceDirName":"user/software/gaming","slug":"/user/software/gaming/","permalink":"/docs/user/software/gaming/","draft":false,"unlisted":false,"editUrl":"https://github.com/getsolus/help-center-docs/tree/master/docs/user/software/gaming/index.md","tags":[],"version":"current","lastUpdatedAt":1733757592000,"frontMatter":{"title":"Gaming","summary":"Instructions for installing various gaming software on Solus"},"sidebar":"userSidebar","previous":{"title":"Web Development","permalink":"/docs/user/software/development/web"},"next":{"title":"Localization","permalink":"/docs/category/localization"}}'),r=i("85893"),t=i("50065");let a={title:"Gaming",summary:"Instructions for installing various gaming software on Solus"},l="Gaming",o={},d=[{value:"Heroes of Newerth",id:"heroes-of-newerth",level:2},{value:"Lutris",id:"lutris",level:2},{value:"About",id:"about",level:3},{value:"Minecraft",id:"minecraft",level:2},{value:"Installation",id:"installation",level:3},{value:"Prism Launcher",id:"prism-launcher",level:3},{value:"RetroArch",id:"retroarch",level:2},{value:"Installing the assets",id:"installing-the-assets",level:3},{value:"Steam",id:"steam",level:2},{value:"NVIDIA",id:"nvidia",level:3}];function c(e){let n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",img:"img",li:"li",p:"p",pre:"pre",ul:"ul",...(0,t.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.header,{children:(0,r.jsx)(n.h1,{id:"gaming",children:"Gaming"})}),"\n",(0,r.jsx)(n.h2,{id:"heroes-of-newerth",children:"Heroes of Newerth"}),"\n",(0,r.jsx)(n.p,{children:'First, install the latest version of HoN by downloading it and running "HoNClient.sh".'}),"\n",(0,r.jsx)(n.p,{children:"Assuming that you install to ~/HoN (default), you only need to run two commands:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"sudo eopkg it gconf libgcrypt11 libglu\n"})}),"\n",(0,r.jsx)(n.p,{children:"That installs all of the dependencies that HoN needs."}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"rm ~/HoN/libs-x86_64/{libcurl.so.4,libfreetype.so.6,libgcc_s.so.1,libgcrypt.so.11,libspeexdsp.so.1,libspeex.so.1,libstdc++.so.6,libudev.so.0}\n"})}),"\n",(0,r.jsx)(n.p,{children:"This removes all the libraries that conflict with the ones in Solus."}),"\n",(0,r.jsx)(n.h2,{id:"lutris",children:"Lutris"}),"\n",(0,r.jsxs)(n.p,{children:["Lutris is currently available via the Solus repository, as the ",(0,r.jsx)(n.code,{children:"lutris"})," package."]}),"\n",(0,r.jsx)(n.h3,{id:"about",children:"About"}),"\n",(0,r.jsx)(n.p,{children:"Lutris is an open gaming platform for Linux. It helps you install and manage your games in a unified interface. Their goal is to support every game which runs on Linux, from native to Windows games (via Wine) to emulators and browser games. The desktop application and the website are libre software, contributions are welcome!"}),"\n",(0,r.jsxs)(n.p,{children:["For more information you can visit their website at ",(0,r.jsx)(n.a,{href:"https://lutris.net",children:"lutris.net"}),". You can also see their list of games ",(0,r.jsx)(n.a,{href:"https://lutris.net/games/",children:"here"}),"."]}),"\n",(0,r.jsx)(n.h2,{id:"minecraft",children:"Minecraft"}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.a,{href:"https://www.minecraft.net",children:"Minecraft"}),' is a sandbox independent video game originally created by Swedish programmer Markus "Notch" Persson and later developed and published by the Swedish company Mojang.']}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.img,{alt:"Minecraft Screenshot",src:i(41786).Z+"",width:"1920",height:"1080"})}),"\n",(0,r.jsx)(n.h3,{id:"installation",children:"Installation"}),"\n",(0,r.jsx)(n.p,{children:"Install dependencies and download Minecraft:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"sudo eopkg it gconf binutils\nwget https://launcher.mojang.com/download/Minecraft.deb\n"})}),"\n",(0,r.jsx)(n.p,{children:"Extract files and remove old archive:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"sudo ar xf Minecraft.deb\nsudo tar xf data.tar.xz -C /\nsudo rm control.tar.xz data.tar.xz debian-binary Minecraft.deb\n"})}),"\n",(0,r.jsx)(n.p,{children:"Integrate the installed files into your system:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"sudo usysconf run -f\n"})}),"\n",(0,r.jsx)(n.h3,{id:"prism-launcher",children:"Prism Launcher"}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.a,{href:"https://prismlauncher.org/",children:"Prism Launcher"})," is an Open Source Minecraft launcher with the ability to manage multiple instances, accounts and mods. Focused on user freedom and free redistributability."]}),"\n",(0,r.jsxs)(n.p,{children:["Prism Launcher is currently available via the Solus repository, as the ",(0,r.jsx)(n.code,{children:"prism-launcher"})," package."]}),"\n",(0,r.jsx)(n.admonition,{type:"note",children:(0,r.jsx)(n.p,{children:"The official Minecraft launcher is not required to use Prism Launcher"})}),"\n",(0,r.jsx)(n.h2,{id:"retroarch",children:"RetroArch"}),"\n",(0,r.jsx)(n.p,{children:"RetroArch is a frontend for emulators, game engines and media players. It has all you need to run classic games through its polished graphical interface."}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.img,{alt:"RetroArch Screenshot",src:i(10311).Z+"",width:"960",height:"746"})}),"\n",(0,r.jsx)(n.h3,{id:"installing-the-assets",children:"Installing the assets"}),"\n",(0,r.jsx)(n.p,{children:'The assets are not packaged with RetroArch itself and have to be downloaded from inside the program. This can easily be done by going into the Online Updater from the Main Menu and selecting "Update Assets".'}),"\n",(0,r.jsx)(n.h2,{id:"steam",children:"Steam"}),"\n",(0,r.jsxs)(n.p,{children:["Steam is currently available via the Solus repository, as the ",(0,r.jsx)(n.code,{children:"steam"})," package."]}),"\n",(0,r.jsx)(n.h3,{id:"nvidia",children:"NVIDIA"}),"\n",(0,r.jsx)(n.p,{children:"For systems running NVIDIA graphics hardware, you will need to install the corresponding 32bit video driver for your card, listed below:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["Current Gen: ",(0,r.jsx)(n.code,{children:"nvidia-glx-driver-32bit"})]}),"\n",(0,r.jsxs)(n.li,{children:["470 series: ",(0,r.jsx)(n.code,{children:"nvidia-470-glx-driver-32bit"})]}),"\n"]}),"\n",(0,r.jsx)(n.admonition,{type:"info",children:(0,r.jsx)(n.p,{children:'You can use our "Hardware Drivers" utility to find the right driver for your system.'})})]})}function h(e={}){let{wrapper:n}={...(0,t.a)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(c,{...e})}):c(e)}},41786:function(e,n,i){i.d(n,{Z:function(){return s}});let s=i.p+"assets/images/minecraft-7079f00591b397a6d96d8b3603f5d05f.jpg"},10311:function(e,n,i){i.d(n,{Z:function(){return s}});let s=i.p+"assets/images/retroarch-9d687fb4c01f4d4f393f10b277b10e9c.jpg"},50065:function(e,n,i){i.d(n,{Z:function(){return l},a:function(){return a}});var s=i(67294);let r={},t=s.createContext(r);function a(e){let n=s.useContext(t);return s.useMemo(function(){return"function"==typeof e?e(n):{...n,...e}},[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:a(e.components),s.createElement(t.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/9284d474.2fb1c458.js b/assets/js/9284d474.2fb1c458.js deleted file mode 100644 index ff76cdbfe..000000000 --- a/assets/js/9284d474.2fb1c458.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[7626],{8110:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>o,contentTitle:()=>a,default:()=>h,frontMatter:()=>t,metadata:()=>l,toc:()=>d});var i=s(85893),r=s(11151);const t={title:"Gaming",summary:"Instructions for installing various gaming software on Solus"},a="Gaming",l={id:"user/software/gaming/index",title:"Gaming",description:"Heroes of Newerth",source:"@site/docs/user/software/gaming/index.md",sourceDirName:"user/software/gaming",slug:"/user/software/gaming/",permalink:"/docs/user/software/gaming/",draft:!1,unlisted:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/software/gaming/index.md",tags:[],version:"current",lastUpdatedAt:1732716912e3,frontMatter:{title:"Gaming",summary:"Instructions for installing various gaming software on Solus"},sidebar:"userSidebar",previous:{title:"Web Development",permalink:"/docs/user/software/development/web"},next:{title:"Localization",permalink:"/docs/category/localization"}},o={},d=[{value:"Heroes of Newerth",id:"heroes-of-newerth",level:2},{value:"Lutris",id:"lutris",level:2},{value:"About",id:"about",level:3},{value:"Minecraft",id:"minecraft",level:2},{value:"Installation",id:"installation",level:3},{value:"Prism Launcher",id:"prism-launcher",level:3},{value:"RetroArch",id:"retroarch",level:2},{value:"Installing the assets",id:"installing-the-assets",level:3},{value:"Steam",id:"steam",level:2},{value:"NVIDIA",id:"nvidia",level:3}];function c(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",img:"img",li:"li",p:"p",pre:"pre",ul:"ul",...(0,r.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.header,{children:(0,i.jsx)(n.h1,{id:"gaming",children:"Gaming"})}),"\n",(0,i.jsx)(n.h2,{id:"heroes-of-newerth",children:"Heroes of Newerth"}),"\n",(0,i.jsx)(n.p,{children:'First, install the latest version of HoN by downloading it and running "HoNClient.sh".'}),"\n",(0,i.jsx)(n.p,{children:"Assuming that you install to ~/HoN (default), you only need to run two commands:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"sudo eopkg it gconf libgcrypt11 libglu\n"})}),"\n",(0,i.jsx)(n.p,{children:"That installs all of the dependencies that HoN needs."}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"rm ~/HoN/libs-x86_64/{libcurl.so.4,libfreetype.so.6,libgcc_s.so.1,libgcrypt.so.11,libspeexdsp.so.1,libspeex.so.1,libstdc++.so.6,libudev.so.0}\n"})}),"\n",(0,i.jsx)(n.p,{children:"This removes all the libraries that conflict with the ones in Solus."}),"\n",(0,i.jsx)(n.h2,{id:"lutris",children:"Lutris"}),"\n",(0,i.jsxs)(n.p,{children:["Lutris is currently available via the Solus repository, as the ",(0,i.jsx)(n.code,{children:"lutris"})," package."]}),"\n",(0,i.jsx)(n.h3,{id:"about",children:"About"}),"\n",(0,i.jsx)(n.p,{children:"Lutris is an open gaming platform for Linux. It helps you install and manage your games in a unified interface. Their goal is to support every game which runs on Linux, from native to Windows games (via Wine) to emulators and browser games. The desktop application and the website are libre software, contributions are welcome!"}),"\n",(0,i.jsxs)(n.p,{children:["For more information you can visit their website at ",(0,i.jsx)(n.a,{href:"https://lutris.net",children:"lutris.net"}),". You can also see their list of games ",(0,i.jsx)(n.a,{href:"https://lutris.net/games/",children:"here"}),"."]}),"\n",(0,i.jsx)(n.h2,{id:"minecraft",children:"Minecraft"}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.a,{href:"https://www.minecraft.net",children:"Minecraft"}),' is a sandbox independent video game originally created by Swedish programmer Markus "Notch" Persson and later developed and published by the Swedish company Mojang.']}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"Minecraft Screenshot",src:s(15528).Z+"",width:"1920",height:"1080"})}),"\n",(0,i.jsx)(n.h3,{id:"installation",children:"Installation"}),"\n",(0,i.jsx)(n.p,{children:"Install dependencies and download Minecraft:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"sudo eopkg it gconf binutils\nwget https://launcher.mojang.com/download/Minecraft.deb\n"})}),"\n",(0,i.jsx)(n.p,{children:"Extract files and remove old archive:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"sudo ar xf Minecraft.deb\nsudo tar xf data.tar.xz -C /\nsudo rm control.tar.xz data.tar.xz debian-binary Minecraft.deb\n"})}),"\n",(0,i.jsx)(n.p,{children:"Integrate the installed files into your system:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"sudo usysconf run -f\n"})}),"\n",(0,i.jsx)(n.h3,{id:"prism-launcher",children:"Prism Launcher"}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.a,{href:"https://prismlauncher.org/",children:"Prism Launcher"})," is an Open Source Minecraft launcher with the ability to manage multiple instances, accounts and mods. Focused on user freedom and free redistributability."]}),"\n",(0,i.jsxs)(n.p,{children:["Prism Launcher is currently available via the Solus repository, as the ",(0,i.jsx)(n.code,{children:"prism-launcher"})," package."]}),"\n",(0,i.jsx)(n.admonition,{type:"note",children:(0,i.jsx)(n.p,{children:"The official Minecraft launcher is not required to use Prism Launcher"})}),"\n",(0,i.jsx)(n.h2,{id:"retroarch",children:"RetroArch"}),"\n",(0,i.jsx)(n.p,{children:"RetroArch is a frontend for emulators, game engines and media players. It has all you need to run classic games through its polished graphical interface."}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"RetroArch Screenshot",src:s(30963).Z+"",width:"960",height:"746"})}),"\n",(0,i.jsx)(n.h3,{id:"installing-the-assets",children:"Installing the assets"}),"\n",(0,i.jsx)(n.p,{children:'The assets are not packaged with RetroArch itself and have to be downloaded from inside the program. This can easily be done by going into the Online Updater from the Main Menu and selecting "Update Assets".'}),"\n",(0,i.jsx)(n.h2,{id:"steam",children:"Steam"}),"\n",(0,i.jsxs)(n.p,{children:["Steam is currently available via the Solus repository, as the ",(0,i.jsx)(n.code,{children:"steam"})," package."]}),"\n",(0,i.jsx)(n.h3,{id:"nvidia",children:"NVIDIA"}),"\n",(0,i.jsx)(n.p,{children:"For systems running NVIDIA graphics hardware, you will need to install the corresponding 32bit video driver for your card, listed below:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Current Gen: ",(0,i.jsx)(n.code,{children:"nvidia-glx-driver-32bit"})]}),"\n",(0,i.jsxs)(n.li,{children:["470 series: ",(0,i.jsx)(n.code,{children:"nvidia-470-glx-driver-32bit"})]}),"\n"]}),"\n",(0,i.jsx)(n.admonition,{type:"info",children:(0,i.jsx)(n.p,{children:'You can use our "Hardware Drivers" utility to find the right driver for your system.'})})]})}function h(e={}){const{wrapper:n}={...(0,r.a)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(c,{...e})}):c(e)}},15528:(e,n,s)=>{s.d(n,{Z:()=>i});const i=s.p+"assets/images/minecraft-7079f00591b397a6d96d8b3603f5d05f.jpg"},30963:(e,n,s)=>{s.d(n,{Z:()=>i});const i=s.p+"assets/images/retroarch-9d687fb4c01f4d4f393f10b277b10e9c.jpg"},11151:(e,n,s)=>{s.d(n,{Z:()=>l,a:()=>a});var i=s(67294);const r={},t=i.createContext(r);function a(e){const n=i.useContext(t);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:a(e.components),i.createElement(t.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/9310.a97e1cbd.js b/assets/js/9310.a97e1cbd.js new file mode 100644 index 000000000..b02680f67 --- /dev/null +++ b/assets/js/9310.a97e1cbd.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([["9310"],{92487:function(e,t,n){n.d(t,{Z:function(){return l}});var i=n(85893);n(67294);var o=n(74904),r=n(1822),s=n(52068);function l(e){let{className:t}=e;return(0,i.jsx)("main",{className:(0,o.Z)("container margin-vert--xl",t),children:(0,i.jsx)("div",{className:"row",children:(0,i.jsxs)("div",{className:"col col--6 col--offset-3",children:[(0,i.jsx)(s.Z,{as:"h1",className:"hero__title",children:(0,i.jsx)(r.Z,{id:"theme.NotFound.title",description:"The title of the 404 page",children:"Page Not Found"})}),(0,i.jsx)("p",{children:(0,i.jsx)(r.Z,{id:"theme.NotFound.p1",description:"The first paragraph of the 404 page",children:"We could not find what you were looking for."})}),(0,i.jsx)("p",{children:(0,i.jsx)(r.Z,{id:"theme.NotFound.p2",description:"The 2nd paragraph of the 404 page",children:"Please contact the owner of the site that linked you to the original URL and let them know their link is broken."})})]})})})}},11320:function(e,t,n){n.r(t),n.d(t,{default:function(){return a}});var i=n(85893);n(67294);var o=n(1822),r=n(81921),s=n(99757),l=n(92487);function a(){let e=(0,o.I)({id:"theme.NotFound.title",message:"Page Not Found"});return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(r.d,{title:e}),(0,i.jsx)(s.Z,{children:(0,i.jsx)(l.Z,{})})]})}}}]); \ No newline at end of file diff --git a/assets/js/947d9ca4.21091671.js b/assets/js/947d9ca4.21091671.js new file mode 100644 index 000000000..04b6d0254 --- /dev/null +++ b/assets/js/947d9ca4.21091671.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([["7131"],{26916:function(e,n,t){t.r(n),t.d(n,{metadata:()=>i,contentTitle:()=>d,default:()=>h,assets:()=>a,toc:()=>r,frontMatter:()=>s});var i=JSON.parse('{"id":"user/software/development/web","title":"Web Development","description":"Solus provides multiple web servers for local testing of web applications.","source":"@site/docs/user/software/development/web.md","sourceDirName":"user/software/development","slug":"/user/software/development/web","permalink":"/docs/user/software/development/web","draft":false,"unlisted":false,"editUrl":"https://github.com/getsolus/help-center-docs/tree/master/docs/user/software/development/web.md","tags":[],"version":"current","lastUpdatedAt":1733757592000,"frontMatter":{"title":"Web Development","summary":"Install and configure different web development tools on Solus."},"sidebar":"userSidebar","previous":{"title":"Rust","permalink":"/docs/user/software/development/rust"},"next":{"title":"Gaming","permalink":"/docs/user/software/gaming/"}}'),o=t("85893"),l=t("50065");let s={title:"Web Development",summary:"Install and configure different web development tools on Solus."},d="Web Development",a={},r=[{value:"Caddy",id:"caddy",level:2},{value:"Installation",id:"installation",level:3},{value:"Configuration",id:"configuration",level:3},{value:"Management",id:"management",level:4},{value:"httpd (Apache)",id:"httpd-apache",level:2},{value:"Installation",id:"installation-1",level:3},{value:"Usage",id:"usage",level:3},{value:"Configuration and DocumentRoot",id:"configuration-and-documentroot",level:4},{value:"Enabling PHP support",id:"enabling-php-support",level:4},{value:"Management",id:"management-1",level:4},{value:"nginx",id:"nginx",level:2},{value:"Installation",id:"installation-2",level:3},{value:"Usage",id:"usage-1",level:3},{value:"Configuration",id:"configuration-1",level:4},{value:"Management",id:"management-2",level:4}];function c(e){let n={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",h4:"h4",header:"header",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,l.a)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(n.header,{children:(0,o.jsx)(n.h1,{id:"web-development",children:"Web Development"})}),"\n",(0,o.jsx)(n.h1,{id:"servers",children:"Servers"}),"\n",(0,o.jsx)(n.p,{children:"Solus provides multiple web servers for local testing of web applications."}),"\n",(0,o.jsx)(n.admonition,{title:"Important",type:"caution",children:(0,o.jsxs)(n.p,{children:[(0,o.jsx)(n.strong,{children:"Solus is not a server operating system"}),". Usage of server packages outside local testing is not recommended."]})}),"\n",(0,o.jsx)(n.h2,{id:"caddy",children:"Caddy"}),"\n",(0,o.jsx)(n.p,{children:"Caddy is installed with a default configuration that you can customize as needed."}),"\n",(0,o.jsx)(n.h3,{id:"installation",children:"Installation"}),"\n",(0,o.jsxs)(n.p,{children:["To install ",(0,o.jsx)(n.code,{children:"caddy"}),", use the Software Center or execute the following command:"]}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-bash",children:"sudo eopkg install caddy\n"})}),"\n",(0,o.jsx)(n.h3,{id:"configuration",children:"Configuration"}),"\n",(0,o.jsxs)(n.p,{children:["You can configure Caddy using a ",(0,o.jsx)(n.em,{children:"Caddyfile"}),", a text file that contains configuration directives. The default Caddyfile is located at ",(0,o.jsx)(n.code,{children:"/usr/share/caddy/Caddyfile"}),"."]}),"\n",(0,o.jsx)(n.p,{children:"To reload Caddy with a new configuration file, use the following command:"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-bash",children:"caddy reload --config /path/to/new/caddyfile\n"})}),"\n",(0,o.jsxs)(n.p,{children:["For more information, see the Caddy documentation at ",(0,o.jsx)(n.a,{href:"https://caddyserver.com/docs/",children:"https://caddyserver.com/docs/"}),"."]}),"\n",(0,o.jsx)(n.h4,{id:"management",children:"Management"}),"\n",(0,o.jsx)(n.p,{children:"You can use the following commands to manage Caddy:"}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsxs)(n.li,{children:["Enable Caddy on startup and start immediately after enabling: ",(0,o.jsx)(n.code,{children:"sudo systemctl enable --now caddy"})]}),"\n",(0,o.jsxs)(n.li,{children:["Stop Caddy: ",(0,o.jsx)(n.code,{children:"sudo systemctl stop caddy"})]}),"\n"]}),"\n",(0,o.jsx)(n.h2,{id:"httpd-apache",children:"httpd (Apache)"}),"\n",(0,o.jsx)(n.p,{children:"httpd (Apache) is installed with a default configuration that you can customize as needed."}),"\n",(0,o.jsx)(n.h3,{id:"installation-1",children:"Installation"}),"\n",(0,o.jsxs)(n.p,{children:["To install ",(0,o.jsx)(n.code,{children:"httpd"}),", use the Software Center or execute the following command:"]}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-bash",children:"sudo eopkg install httpd\n"})}),"\n",(0,o.jsx)(n.h3,{id:"usage",children:"Usage"}),"\n",(0,o.jsx)(n.h4,{id:"configuration-and-documentroot",children:"Configuration and DocumentRoot"}),"\n",(0,o.jsxs)(n.p,{children:["The default configuration files for Apache are located in the ",(0,o.jsx)(n.code,{children:"/usr/share/defaults/httpd/"})," directory. To override the default configuration, create a new file with the ",(0,o.jsx)(n.code,{children:".conf"})," extension in the ",(0,o.jsx)(n.code,{children:"/etc/httpd/conf.d"})," directory."]}),"\n",(0,o.jsx)(n.admonition,{title:"Important",type:"caution",children:(0,o.jsxs)(n.p,{children:["If you modify the configuration files located in the ",(0,o.jsx)(n.code,{children:"/usr/share/defaults/httpd/"})," folder, your changes might be overwritten during a system update."]})}),"\n",(0,o.jsxs)(n.p,{children:["The document root is the directory where Apache serves files from. By default, the document root is ",(0,o.jsx)(n.code,{children:"/var/www/"}),"."]}),"\n",(0,o.jsx)(n.h4,{id:"enabling-php-support",children:"Enabling PHP support"}),"\n",(0,o.jsxs)(n.ol,{children:["\n",(0,o.jsxs)(n.li,{children:["Install ",(0,o.jsx)(n.code,{children:"php"})," from the Software Center or execute the following command: ",(0,o.jsx)(n.code,{children:"sudo eopkg install php"}),"."]}),"\n",(0,o.jsxs)(n.li,{children:["Create a new ",(0,o.jsx)(n.code,{children:"/etc/httpd/conf.d/php.conf"})," file with the following contents:"]}),"\n"]}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{children:'LoadModule proxy_module lib64/httpd/mod_proxy.so\nLoadModule proxy_fcgi_module lib64/httpd/mod_proxy_fcgi.so\n<FilesMatch \\.php$>\nSetHandler "proxy:fcgi://127.0.0.1:9000"\n</FilesMatch>\n<IfModule dir_module>\nDirectoryIndex index.php index.html\n</IfModule>\n'})}),"\n",(0,o.jsxs)(n.ol,{start:"3",children:["\n",(0,o.jsxs)(n.li,{children:["Execute the following command: ",(0,o.jsx)(n.code,{children:"sudo systemctl restart httpd && sudo systemctl restart php-fpm"})]}),"\n"]}),"\n",(0,o.jsx)(n.h4,{id:"management-1",children:"Management"}),"\n",(0,o.jsx)(n.p,{children:"You can use the following commands to manage httpd:"}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsxs)(n.li,{children:["Enable httpd on startup: ",(0,o.jsx)(n.code,{children:"sudo systemctl enable httpd"}),"."]}),"\n",(0,o.jsxs)(n.li,{children:["Start the web server: ",(0,o.jsx)(n.code,{children:"sudo systemctl start httpd"})]}),"\n",(0,o.jsxs)(n.li,{children:["Stop the web server: ",(0,o.jsx)(n.code,{children:"sudo systemctl stop httpd"})]}),"\n"]}),"\n",(0,o.jsx)(n.h2,{id:"nginx",children:"nginx"}),"\n",(0,o.jsx)(n.p,{children:"nginx is installed with a default configuration that you can customize as needed."}),"\n",(0,o.jsx)(n.h3,{id:"installation-2",children:"Installation"}),"\n",(0,o.jsxs)(n.p,{children:["To install ",(0,o.jsx)(n.code,{children:"nginx"}),", use the Software Center or execute the following command:"]}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-bash",children:"sudo eopkg install nginx\n"})}),"\n",(0,o.jsx)(n.h3,{id:"usage-1",children:"Usage"}),"\n",(0,o.jsx)(n.h4,{id:"configuration-1",children:"Configuration"}),"\n",(0,o.jsxs)(n.p,{children:["Nginx's configuration files are located in the ",(0,o.jsx)(n.code,{children:"/usr/share/defaults/nginx/"})," directory. To override the default configuration, you can create configuration files in the ",(0,o.jsx)(n.code,{children:"/etc/nginx/conf.d/"})," or the ",(0,o.jsx)(n.code,{children:"/etc/nginx/sites-enabled"})," folders."]}),"\n",(0,o.jsx)(n.admonition,{type:"tip",children:(0,o.jsxs)(n.p,{children:["To revert back to the original settings, delete the ",(0,o.jsx)(n.code,{children:"/etc/nginx/"})," folder."]})}),"\n",(0,o.jsx)(n.h4,{id:"management-2",children:"Management"}),"\n",(0,o.jsx)(n.p,{children:"You can use the following commands to manage nginx:"}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsxs)(n.li,{children:["Enable nginx on startup and start immediately after enabling: ",(0,o.jsx)(n.code,{children:"sudo systemctl enable --now nginx"})]}),"\n",(0,o.jsxs)(n.li,{children:["Stop nginx: ",(0,o.jsx)(n.code,{children:"sudo systemctl stop nginx"})]}),"\n"]})]})}function h(e={}){let{wrapper:n}={...(0,l.a)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(c,{...e})}):c(e)}},50065:function(e,n,t){t.d(n,{Z:function(){return d},a:function(){return s}});var i=t(67294);let o={},l=i.createContext(o);function s(e){let n=i.useContext(l);return i.useMemo(function(){return"function"==typeof e?e(n):{...n,...e}},[n,e])}function d(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:s(e.components),i.createElement(l.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/947d9ca4.734cbf9e.js b/assets/js/947d9ca4.734cbf9e.js deleted file mode 100644 index ef7aa1706..000000000 --- a/assets/js/947d9ca4.734cbf9e.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[1944],{10025:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>a,contentTitle:()=>l,default:()=>h,frontMatter:()=>s,metadata:()=>d,toc:()=>r});var o=t(85893),i=t(11151);const s={title:"Web Development",summary:"Install and configure different web development tools on Solus."},l="Web Development",d={id:"user/software/development/web",title:"Web Development",description:"Solus provides multiple web servers for local testing of web applications.",source:"@site/docs/user/software/development/web.md",sourceDirName:"user/software/development",slug:"/user/software/development/web",permalink:"/docs/user/software/development/web",draft:!1,unlisted:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/software/development/web.md",tags:[],version:"current",lastUpdatedAt:1732716912e3,frontMatter:{title:"Web Development",summary:"Install and configure different web development tools on Solus."},sidebar:"userSidebar",previous:{title:"Rust",permalink:"/docs/user/software/development/rust"},next:{title:"Gaming",permalink:"/docs/user/software/gaming/"}},a={},r=[{value:"Caddy",id:"caddy",level:2},{value:"Installation",id:"installation",level:3},{value:"Configuration",id:"configuration",level:3},{value:"Management",id:"management",level:4},{value:"httpd (Apache)",id:"httpd-apache",level:2},{value:"Installation",id:"installation-1",level:3},{value:"Usage",id:"usage",level:3},{value:"Configuration and DocumentRoot",id:"configuration-and-documentroot",level:4},{value:"Enabling PHP support",id:"enabling-php-support",level:4},{value:"Management",id:"management-1",level:4},{value:"nginx",id:"nginx",level:2},{value:"Installation",id:"installation-2",level:3},{value:"Usage",id:"usage-1",level:3},{value:"Configuration",id:"configuration-1",level:4},{value:"Management",id:"management-2",level:4}];function c(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",h4:"h4",header:"header",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,i.a)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(n.header,{children:(0,o.jsx)(n.h1,{id:"web-development",children:"Web Development"})}),"\n",(0,o.jsx)(n.h1,{id:"servers",children:"Servers"}),"\n",(0,o.jsx)(n.p,{children:"Solus provides multiple web servers for local testing of web applications."}),"\n",(0,o.jsx)(n.admonition,{title:"Important",type:"caution",children:(0,o.jsxs)(n.p,{children:[(0,o.jsx)(n.strong,{children:"Solus is not a server operating system"}),". Usage of server packages outside local testing is not recommended."]})}),"\n",(0,o.jsx)(n.h2,{id:"caddy",children:"Caddy"}),"\n",(0,o.jsx)(n.p,{children:"Caddy is installed with a default configuration that you can customize as needed."}),"\n",(0,o.jsx)(n.h3,{id:"installation",children:"Installation"}),"\n",(0,o.jsxs)(n.p,{children:["To install ",(0,o.jsx)(n.code,{children:"caddy"}),", use the Software Center or execute the following command:"]}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-bash",children:"sudo eopkg install caddy\n"})}),"\n",(0,o.jsx)(n.h3,{id:"configuration",children:"Configuration"}),"\n",(0,o.jsxs)(n.p,{children:["You can configure Caddy using a ",(0,o.jsx)(n.em,{children:"Caddyfile"}),", a text file that contains configuration directives. The default Caddyfile is located at ",(0,o.jsx)(n.code,{children:"/usr/share/caddy/Caddyfile"}),"."]}),"\n",(0,o.jsx)(n.p,{children:"To reload Caddy with a new configuration file, use the following command:"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-bash",children:"caddy reload --config /path/to/new/caddyfile\n"})}),"\n",(0,o.jsxs)(n.p,{children:["For more information, see the Caddy documentation at ",(0,o.jsx)(n.a,{href:"https://caddyserver.com/docs/",children:"https://caddyserver.com/docs/"}),"."]}),"\n",(0,o.jsx)(n.h4,{id:"management",children:"Management"}),"\n",(0,o.jsx)(n.p,{children:"You can use the following commands to manage Caddy:"}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsxs)(n.li,{children:["Enable Caddy on startup and start immediately after enabling: ",(0,o.jsx)(n.code,{children:"sudo systemctl enable --now caddy"})]}),"\n",(0,o.jsxs)(n.li,{children:["Stop Caddy: ",(0,o.jsx)(n.code,{children:"sudo systemctl stop caddy"})]}),"\n"]}),"\n",(0,o.jsx)(n.h2,{id:"httpd-apache",children:"httpd (Apache)"}),"\n",(0,o.jsx)(n.p,{children:"httpd (Apache) is installed with a default configuration that you can customize as needed."}),"\n",(0,o.jsx)(n.h3,{id:"installation-1",children:"Installation"}),"\n",(0,o.jsxs)(n.p,{children:["To install ",(0,o.jsx)(n.code,{children:"httpd"}),", use the Software Center or execute the following command:"]}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-bash",children:"sudo eopkg install httpd\n"})}),"\n",(0,o.jsx)(n.h3,{id:"usage",children:"Usage"}),"\n",(0,o.jsx)(n.h4,{id:"configuration-and-documentroot",children:"Configuration and DocumentRoot"}),"\n",(0,o.jsxs)(n.p,{children:["The default configuration files for Apache are located in the ",(0,o.jsx)(n.code,{children:"/usr/share/defaults/httpd/"})," directory. To override the default configuration, create a new file with the ",(0,o.jsx)(n.code,{children:".conf"})," extension in the ",(0,o.jsx)(n.code,{children:"/etc/httpd/conf.d"})," directory."]}),"\n",(0,o.jsx)(n.admonition,{title:"Important",type:"caution",children:(0,o.jsxs)(n.p,{children:["If you modify the configuration files located in the ",(0,o.jsx)(n.code,{children:"/usr/share/defaults/httpd/"})," folder, your changes might be overwritten during a system update."]})}),"\n",(0,o.jsxs)(n.p,{children:["The document root is the directory where Apache serves files from. By default, the document root is ",(0,o.jsx)(n.code,{children:"/var/www/"}),"."]}),"\n",(0,o.jsx)(n.h4,{id:"enabling-php-support",children:"Enabling PHP support"}),"\n",(0,o.jsxs)(n.ol,{children:["\n",(0,o.jsxs)(n.li,{children:["Install ",(0,o.jsx)(n.code,{children:"php"})," from the Software Center or execute the following command: ",(0,o.jsx)(n.code,{children:"sudo eopkg install php"}),"."]}),"\n",(0,o.jsxs)(n.li,{children:["Create a new ",(0,o.jsx)(n.code,{children:"/etc/httpd/conf.d/php.conf"})," file with the following contents:"]}),"\n"]}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{children:'LoadModule proxy_module lib64/httpd/mod_proxy.so\nLoadModule proxy_fcgi_module lib64/httpd/mod_proxy_fcgi.so\n<FilesMatch \\.php$>\nSetHandler "proxy:fcgi://127.0.0.1:9000"\n</FilesMatch>\n<IfModule dir_module>\nDirectoryIndex index.php index.html\n</IfModule>\n'})}),"\n",(0,o.jsxs)(n.ol,{start:"3",children:["\n",(0,o.jsxs)(n.li,{children:["Execute the following command: ",(0,o.jsx)(n.code,{children:"sudo systemctl restart httpd && sudo systemctl restart php-fpm"})]}),"\n"]}),"\n",(0,o.jsx)(n.h4,{id:"management-1",children:"Management"}),"\n",(0,o.jsx)(n.p,{children:"You can use the following commands to manage httpd:"}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsxs)(n.li,{children:["Enable httpd on startup: ",(0,o.jsx)(n.code,{children:"sudo systemctl enable httpd"}),"."]}),"\n",(0,o.jsxs)(n.li,{children:["Start the web server: ",(0,o.jsx)(n.code,{children:"sudo systemctl start httpd"})]}),"\n",(0,o.jsxs)(n.li,{children:["Stop the web server: ",(0,o.jsx)(n.code,{children:"sudo systemctl stop httpd"})]}),"\n"]}),"\n",(0,o.jsx)(n.h2,{id:"nginx",children:"nginx"}),"\n",(0,o.jsx)(n.p,{children:"nginx is installed with a default configuration that you can customize as needed."}),"\n",(0,o.jsx)(n.h3,{id:"installation-2",children:"Installation"}),"\n",(0,o.jsxs)(n.p,{children:["To install ",(0,o.jsx)(n.code,{children:"nginx"}),", use the Software Center or execute the following command:"]}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-bash",children:"sudo eopkg install nginx\n"})}),"\n",(0,o.jsx)(n.h3,{id:"usage-1",children:"Usage"}),"\n",(0,o.jsx)(n.h4,{id:"configuration-1",children:"Configuration"}),"\n",(0,o.jsxs)(n.p,{children:["Nginx's configuration files are located in the ",(0,o.jsx)(n.code,{children:"/usr/share/defaults/nginx/"})," directory. To override the default configuration, you can create configuration files in the ",(0,o.jsx)(n.code,{children:"/etc/nginx/conf.d/"})," or the ",(0,o.jsx)(n.code,{children:"/etc/nginx/sites-enabled"})," folders."]}),"\n",(0,o.jsx)(n.admonition,{type:"tip",children:(0,o.jsxs)(n.p,{children:["To revert back to the original settings, delete the ",(0,o.jsx)(n.code,{children:"/etc/nginx/"})," folder."]})}),"\n",(0,o.jsx)(n.h4,{id:"management-2",children:"Management"}),"\n",(0,o.jsx)(n.p,{children:"You can use the following commands to manage nginx:"}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsxs)(n.li,{children:["Enable nginx on startup and start immediately after enabling: ",(0,o.jsx)(n.code,{children:"sudo systemctl enable --now nginx"})]}),"\n",(0,o.jsxs)(n.li,{children:["Stop nginx: ",(0,o.jsx)(n.code,{children:"sudo systemctl stop nginx"})]}),"\n"]})]})}function h(e={}){const{wrapper:n}={...(0,i.a)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(c,{...e})}):c(e)}},11151:(e,n,t)=>{t.d(n,{Z:()=>d,a:()=>l});var o=t(67294);const i={},s=o.createContext(i);function l(e){const n=o.useContext(s);return o.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function d(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:l(e.components),o.createElement(s.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/9485dea6.14b20627.js b/assets/js/9485dea6.14b20627.js deleted file mode 100644 index 15aadc07f..000000000 --- a/assets/js/9485dea6.14b20627.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[2358],{29421:(e,i,n)=>{n.r(i),n.d(i,{assets:()=>d,contentTitle:()=>s,default:()=>h,frontMatter:()=>t,metadata:()=>c,toc:()=>o});var l=n(85893),r=n(11151);const t={title:"WiFi",summary:null},s="WiFi",c={id:"user/hardware/compatibility/wifi",title:"WiFi",description:"The following wireless chipsets have been tested and/or suggested to function correctly by our users.",source:"@site/docs/user/hardware/compatibility/wifi.md",sourceDirName:"user/hardware/compatibility",slug:"/user/hardware/compatibility/wifi",permalink:"/docs/user/hardware/compatibility/wifi",draft:!1,unlisted:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/hardware/compatibility/wifi.md",tags:[],version:"current",lastUpdatedAt:1732716912e3,frontMatter:{title:"WiFi",summary:null},sidebar:"userSidebar",previous:{title:"Laptops",permalink:"/docs/user/hardware/compatibility/laptops"},next:{title:"Mobile",permalink:"/docs/category/mobile"}},d={},o=[{value:"Atheros",id:"atheros",level:2},{value:"Broadcom",id:"broadcom",level:2},{value:"Netgear",id:"netgear",level:2},{value:"Intel",id:"intel",level:2},{value:"Ralink",id:"ralink",level:2},{value:"Realtek",id:"realtek",level:2}];function a(e){const i={em:"em",h1:"h1",h2:"h2",header:"header",li:"li",p:"p",ul:"ul",...(0,r.a)(),...e.components};return(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)(i.header,{children:(0,l.jsx)(i.h1,{id:"wifi",children:"WiFi"})}),"\n",(0,l.jsx)(i.p,{children:"The following wireless chipsets have been tested and/or suggested to function correctly by our users."}),"\n",(0,l.jsxs)(i.p,{children:["This list should not suggest that ",(0,l.jsx)(i.em,{children:"only"}),"- such devices listed below are compatible with Solus, as there may be devices not listed below that are in fact compatible."]}),"\n",(0,l.jsx)(i.h2,{id:"atheros",children:"Atheros"}),"\n",(0,l.jsxs)(i.ul,{children:["\n",(0,l.jsx)(i.li,{children:"Atheros AR5B97"}),"\n",(0,l.jsx)(i.li,{children:"Atheros AR242x"}),"\n",(0,l.jsx)(i.li,{children:"Atheros AR542x"}),"\n",(0,l.jsx)(i.li,{children:"Atheros AR928X"}),"\n",(0,l.jsx)(i.li,{children:"Atheros AR8161"}),"\n",(0,l.jsx)(i.li,{children:"Atheros AR9285"}),"\n",(0,l.jsx)(i.li,{children:"Atheros AR9287"}),"\n",(0,l.jsx)(i.li,{children:"Atheros AR9462"}),"\n",(0,l.jsx)(i.li,{children:"Atheros AR9485"}),"\n",(0,l.jsx)(i.li,{children:"Atheros AR9485WB-EG"}),"\n",(0,l.jsx)(i.li,{children:"Atheros QCA9565 / AR9565"}),"\n"]}),"\n",(0,l.jsx)(i.h2,{id:"broadcom",children:"Broadcom"}),"\n",(0,l.jsxs)(i.ul,{children:["\n",(0,l.jsx)(i.li,{children:"Broadcom BCM4312"}),"\n",(0,l.jsx)(i.li,{children:"Broadcom BCM4313"}),"\n",(0,l.jsx)(i.li,{children:"Broadcom BCM4322"}),"\n",(0,l.jsx)(i.li,{children:"Broadcom BCM4324"}),"\n",(0,l.jsx)(i.li,{children:"Broadcom BCM4331"}),"\n",(0,l.jsx)(i.li,{children:"Broadcom BCM4365"}),"\n",(0,l.jsx)(i.li,{children:"Broadcom BCM57785"}),"\n"]}),"\n",(0,l.jsx)(i.h2,{id:"netgear",children:"Netgear"}),"\n",(0,l.jsxs)(i.ul,{children:["\n",(0,l.jsx)(i.li,{children:"Netgear WPN111"}),"\n"]}),"\n",(0,l.jsx)(i.h2,{id:"intel",children:"Intel"}),"\n",(0,l.jsxs)(i.ul,{children:["\n",(0,l.jsx)(i.li,{children:"Intel AC3160"}),"\n",(0,l.jsx)(i.li,{children:"Intel AC7265"}),"\n",(0,l.jsx)(i.li,{children:"Intel Centrino Advanced-N 6200"}),"\n",(0,l.jsx)(i.li,{children:"Intel Centrino Advanced-N 6205"}),"\n",(0,l.jsx)(i.li,{children:"Intel Centrino Advanced-N 6235"}),"\n",(0,l.jsx)(i.li,{children:"Intel Centrino Ultimate-N 6300"}),"\n",(0,l.jsx)(i.li,{children:"Intel Centrino Wireless-N 2230"}),"\n",(0,l.jsx)(i.li,{children:"Intel PRO/Wireless 3945ABG"}),"\n",(0,l.jsx)(i.li,{children:"Intel PRO/Wireless 4965 AG or AGN"}),"\n",(0,l.jsx)(i.li,{children:"Intel Ultimate N WiFi Link 5300"}),"\n",(0,l.jsx)(i.li,{children:"Intel WiFi Link 5100"}),"\n",(0,l.jsx)(i.li,{children:"Intel Wireless 8265 / 8275"}),"\n"]}),"\n",(0,l.jsx)(i.h2,{id:"ralink",children:"Ralink"}),"\n",(0,l.jsxs)(i.ul,{children:["\n",(0,l.jsx)(i.li,{children:"Ralink RT5390"}),"\n",(0,l.jsx)(i.li,{children:"Ralink RT3070"}),"\n"]}),"\n",(0,l.jsx)(i.h2,{id:"realtek",children:"Realtek"}),"\n",(0,l.jsxs)(i.ul,{children:["\n",(0,l.jsx)(i.li,{children:"Realtek RTL8101E/RTL8102E"}),"\n",(0,l.jsx)(i.li,{children:"Realtek RTL8111/8168B"}),"\n",(0,l.jsx)(i.li,{children:"Realtek RTL8169"}),"\n",(0,l.jsx)(i.li,{children:"Realtek RTL8179"}),"\n",(0,l.jsx)(i.li,{children:"Realtek RTL8187SE"}),"\n",(0,l.jsx)(i.li,{children:"Realtek RTL8188CE"}),"\n",(0,l.jsx)(i.li,{children:"Realtek RTL8188CUS"}),"\n",(0,l.jsx)(i.li,{children:"Realtek RTL8191SEvB"}),"\n",(0,l.jsx)(i.li,{children:"Realtek RTL8192ce"}),"\n",(0,l.jsx)(i.li,{children:"Realtek RTL8723BE"}),"\n",(0,l.jsx)(i.li,{children:"Realtek RTL8723DE"}),"\n",(0,l.jsx)(i.li,{children:"Realtek RTL8821CD"}),"\n"]})]})}function h(e={}){const{wrapper:i}={...(0,r.a)(),...e.components};return i?(0,l.jsx)(i,{...e,children:(0,l.jsx)(a,{...e})}):a(e)}},11151:(e,i,n)=>{n.d(i,{Z:()=>c,a:()=>s});var l=n(67294);const r={},t=l.createContext(r);function s(e){const i=l.useContext(t);return l.useMemo((function(){return"function"==typeof e?e(i):{...i,...e}}),[i,e])}function c(e){let i;return i=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:s(e.components),l.createElement(t.Provider,{value:i},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/9485dea6.9c558050.js b/assets/js/9485dea6.9c558050.js new file mode 100644 index 000000000..bc045f24b --- /dev/null +++ b/assets/js/9485dea6.9c558050.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([["628"],{22633:function(e,n,i){i.r(n),i.d(n,{metadata:()=>l,contentTitle:()=>c,default:()=>h,assets:()=>d,toc:()=>a,frontMatter:()=>s});var l=JSON.parse('{"id":"user/hardware/compatibility/wifi","title":"WiFi","description":"The following wireless chipsets have been tested and/or suggested to function correctly by our users.","source":"@site/docs/user/hardware/compatibility/wifi.md","sourceDirName":"user/hardware/compatibility","slug":"/user/hardware/compatibility/wifi","permalink":"/docs/user/hardware/compatibility/wifi","draft":false,"unlisted":false,"editUrl":"https://github.com/getsolus/help-center-docs/tree/master/docs/user/hardware/compatibility/wifi.md","tags":[],"version":"current","lastUpdatedAt":1733757592000,"frontMatter":{"title":"WiFi","summary":null},"sidebar":"userSidebar","previous":{"title":"Laptops","permalink":"/docs/user/hardware/compatibility/laptops"},"next":{"title":"Mobile","permalink":"/docs/category/mobile"}}'),r=i("85893"),t=i("50065");let s={title:"WiFi",summary:null},c="WiFi",d={},a=[{value:"Atheros",id:"atheros",level:2},{value:"Broadcom",id:"broadcom",level:2},{value:"Netgear",id:"netgear",level:2},{value:"Intel",id:"intel",level:2},{value:"Ralink",id:"ralink",level:2},{value:"Realtek",id:"realtek",level:2}];function o(e){let n={em:"em",h1:"h1",h2:"h2",header:"header",li:"li",p:"p",ul:"ul",...(0,t.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.header,{children:(0,r.jsx)(n.h1,{id:"wifi",children:"WiFi"})}),"\n",(0,r.jsx)(n.p,{children:"The following wireless chipsets have been tested and/or suggested to function correctly by our users."}),"\n",(0,r.jsxs)(n.p,{children:["This list should not suggest that ",(0,r.jsx)(n.em,{children:"only"}),"- such devices listed below are compatible with Solus, as there may be devices not listed below that are in fact compatible."]}),"\n",(0,r.jsx)(n.h2,{id:"atheros",children:"Atheros"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Atheros AR5B97"}),"\n",(0,r.jsx)(n.li,{children:"Atheros AR242x"}),"\n",(0,r.jsx)(n.li,{children:"Atheros AR542x"}),"\n",(0,r.jsx)(n.li,{children:"Atheros AR928X"}),"\n",(0,r.jsx)(n.li,{children:"Atheros AR8161"}),"\n",(0,r.jsx)(n.li,{children:"Atheros AR9285"}),"\n",(0,r.jsx)(n.li,{children:"Atheros AR9287"}),"\n",(0,r.jsx)(n.li,{children:"Atheros AR9462"}),"\n",(0,r.jsx)(n.li,{children:"Atheros AR9485"}),"\n",(0,r.jsx)(n.li,{children:"Atheros AR9485WB-EG"}),"\n",(0,r.jsx)(n.li,{children:"Atheros QCA9565 / AR9565"}),"\n"]}),"\n",(0,r.jsx)(n.h2,{id:"broadcom",children:"Broadcom"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Broadcom BCM4312"}),"\n",(0,r.jsx)(n.li,{children:"Broadcom BCM4313"}),"\n",(0,r.jsx)(n.li,{children:"Broadcom BCM4322"}),"\n",(0,r.jsx)(n.li,{children:"Broadcom BCM4324"}),"\n",(0,r.jsx)(n.li,{children:"Broadcom BCM4331"}),"\n",(0,r.jsx)(n.li,{children:"Broadcom BCM4365"}),"\n",(0,r.jsx)(n.li,{children:"Broadcom BCM57785"}),"\n"]}),"\n",(0,r.jsx)(n.h2,{id:"netgear",children:"Netgear"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Netgear WPN111"}),"\n"]}),"\n",(0,r.jsx)(n.h2,{id:"intel",children:"Intel"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Intel AC3160"}),"\n",(0,r.jsx)(n.li,{children:"Intel AC7265"}),"\n",(0,r.jsx)(n.li,{children:"Intel Centrino Advanced-N 6200"}),"\n",(0,r.jsx)(n.li,{children:"Intel Centrino Advanced-N 6205"}),"\n",(0,r.jsx)(n.li,{children:"Intel Centrino Advanced-N 6235"}),"\n",(0,r.jsx)(n.li,{children:"Intel Centrino Ultimate-N 6300"}),"\n",(0,r.jsx)(n.li,{children:"Intel Centrino Wireless-N 2230"}),"\n",(0,r.jsx)(n.li,{children:"Intel PRO/Wireless 3945ABG"}),"\n",(0,r.jsx)(n.li,{children:"Intel PRO/Wireless 4965 AG or AGN"}),"\n",(0,r.jsx)(n.li,{children:"Intel Ultimate N WiFi Link 5300"}),"\n",(0,r.jsx)(n.li,{children:"Intel WiFi Link 5100"}),"\n",(0,r.jsx)(n.li,{children:"Intel Wireless 8265 / 8275"}),"\n"]}),"\n",(0,r.jsx)(n.h2,{id:"ralink",children:"Ralink"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Ralink RT5390"}),"\n",(0,r.jsx)(n.li,{children:"Ralink RT3070"}),"\n"]}),"\n",(0,r.jsx)(n.h2,{id:"realtek",children:"Realtek"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Realtek RTL8101E/RTL8102E"}),"\n",(0,r.jsx)(n.li,{children:"Realtek RTL8111/8168B"}),"\n",(0,r.jsx)(n.li,{children:"Realtek RTL8169"}),"\n",(0,r.jsx)(n.li,{children:"Realtek RTL8179"}),"\n",(0,r.jsx)(n.li,{children:"Realtek RTL8187SE"}),"\n",(0,r.jsx)(n.li,{children:"Realtek RTL8188CE"}),"\n",(0,r.jsx)(n.li,{children:"Realtek RTL8188CUS"}),"\n",(0,r.jsx)(n.li,{children:"Realtek RTL8191SEvB"}),"\n",(0,r.jsx)(n.li,{children:"Realtek RTL8192ce"}),"\n",(0,r.jsx)(n.li,{children:"Realtek RTL8723BE"}),"\n",(0,r.jsx)(n.li,{children:"Realtek RTL8723DE"}),"\n",(0,r.jsx)(n.li,{children:"Realtek RTL8821CD"}),"\n"]})]})}function h(e={}){let{wrapper:n}={...(0,t.a)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(o,{...e})}):o(e)}},50065:function(e,n,i){i.d(n,{Z:function(){return c},a:function(){return s}});var l=i(67294);let r={},t=l.createContext(r);function s(e){let n=l.useContext(t);return l.useMemo(function(){return"function"==typeof e?e(n):{...n,...e}},[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:s(e.components),l.createElement(t.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/96af6484.878ddd89.js b/assets/js/96af6484.878ddd89.js deleted file mode 100644 index 094af4fce..000000000 --- a/assets/js/96af6484.878ddd89.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[6225],{53058:(e,i,n)=>{n.r(i),n.d(i,{assets:()=>o,contentTitle:()=>a,default:()=>h,frontMatter:()=>r,metadata:()=>c,toc:()=>d});var t=n(85893),s=n(11151);const r={title:"Mice and Touchpads",summary:"Guide to using and configuring input devices on Solus"},a="Mice and Touchpads",c={id:"user/hardware/peripherals/mice-and-touchpads",title:"Mice and Touchpads",description:"ASUS, Logitech, Roccat, SteelSeries",source:"@site/docs/user/hardware/peripherals/mice-and-touchpads.md",sourceDirName:"user/hardware/peripherals",slug:"/user/hardware/peripherals/mice-and-touchpads",permalink:"/docs/user/hardware/peripherals/mice-and-touchpads",draft:!1,unlisted:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/hardware/peripherals/mice-and-touchpads.md",tags:[],version:"current",lastUpdatedAt:1732716912e3,frontMatter:{title:"Mice and Touchpads",summary:"Guide to using and configuring input devices on Solus"},sidebar:"userSidebar",previous:{title:"Peripherals",permalink:"/docs/category/peripherals"},next:{title:"MIDI Keyboards",permalink:"/docs/user/hardware/peripherals/midi-keyboard"}},o={},d=[{value:"ASUS, Logitech, Roccat, SteelSeries",id:"asus-logitech-roccat-steelseries",level:2},{value:"Razer",id:"razer",level:2},{value:"Synaptics",id:"synaptics",level:2},{value:"Setup",id:"setup",level:3},{value:"Revert configuration",id:"revert-configuration",level:3}];function l(e){const i={code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,s.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(i.header,{children:(0,t.jsx)(i.h1,{id:"mice-and-touchpads",children:"Mice and Touchpads"})}),"\n",(0,t.jsx)(i.h2,{id:"asus-logitech-roccat-steelseries",children:"ASUS, Logitech, Roccat, SteelSeries"}),"\n",(0,t.jsxs)(i.p,{children:["TODO: Quick tutorial on installing ",(0,t.jsx)(i.code,{children:"piper"})," with a screenshot. And point them at the official documentation."]}),"\n",(0,t.jsx)(i.h2,{id:"razer",children:"Razer"}),"\n",(0,t.jsxs)(i.p,{children:["TODO: Quick tutorial on installing ",(0,t.jsx)(i.code,{children:"polychromatic"})," with a screenshot. And point them at the official documentation."]}),"\n",(0,t.jsx)(i.h2,{id:"synaptics",children:"Synaptics"}),"\n",(0,t.jsx)(i.p,{children:"These instructions describe how to use the the synaptics driver instead of the default libinput driver to manage your touchpad. You might try this if:"}),"\n",(0,t.jsxs)(i.ul,{children:["\n",(0,t.jsx)(i.li,{children:"libinput doesn't allow for two-finger scrolling"}),"\n",(0,t.jsx)(i.li,{children:"libinput doesn't supports edge scrolling or vice versa"}),"\n",(0,t.jsx)(i.li,{children:"You want to take advantage of the extended configurability of the synaptics driver"}),"\n"]}),"\n",(0,t.jsxs)(i.p,{children:[(0,t.jsx)(i.strong,{children:"NOTE:"})," The synaptics driver will only be used for your touchpad and libinput will be used for all other input devices."]}),"\n",(0,t.jsxs)(i.p,{children:[(0,t.jsx)(i.strong,{children:"NOTE:"})," That the synaptics driver is in maintenance mode and libinput is the preferred driver and also sees active development."]}),"\n",(0,t.jsx)(i.h3,{id:"setup",children:"Setup"}),"\n",(0,t.jsx)(i.p,{children:"To get started open up a terminal and install the synaptics driver."}),"\n",(0,t.jsx)(i.pre,{children:(0,t.jsx)(i.code,{className:"language-bash",children:"sudo eopkg it xorg-driver-input-synaptics\n"})}),"\n",(0,t.jsxs)(i.p,{children:["Then, copy the default synaptics config file to the ",(0,t.jsx)(i.code,{children:"/etc/"})," directory."]}),"\n",(0,t.jsx)(i.pre,{children:(0,t.jsx)(i.code,{className:"language-bash",children:"sudo cp /usr/share/X11/xorg.conf.d/50-synaptics.conf /etc/X11/xorg.conf.d/90-synaptics.conf\n"})}),"\n",(0,t.jsxs)(i.p,{children:[(0,t.jsx)(i.strong,{children:"NOTE:"})," The /etc/ directory has a higher priority over the default config location and will ensure the synaptics driver gets loaded first, additionally by copying to /etc/ first it will avoid a three-way merge issue if you wish the edit the config file directly."]}),"\n",(0,t.jsx)(i.p,{children:"Reboot your machine then verify the synaptics driver is in use:"}),"\n",(0,t.jsx)(i.pre,{children:(0,t.jsx)(i.code,{className:"language-bash",children:"cat /var/log/Xorg.0.log | grep \"Using input driver 'synaptics' for\"\n"})}),"\n",(0,t.jsx)(i.p,{children:"If it returns a result, then success! The synaptics driver is in use instead of libinput for your Touchpad."}),"\n",(0,t.jsx)(i.h3,{id:"revert-configuration",children:"Revert configuration"}),"\n",(0,t.jsx)(i.p,{children:"If you wish to switch back to using libinput:"}),"\n",(0,t.jsx)(i.pre,{children:(0,t.jsx)(i.code,{className:"language-bash",children:"sudo rm /etc/X11/xorg.conf.d/90-synaptics.conf\nsudo eopkg rm xorg-driver-input-synaptics\n"})})]})}function h(e={}){const{wrapper:i}={...(0,s.a)(),...e.components};return i?(0,t.jsx)(i,{...e,children:(0,t.jsx)(l,{...e})}):l(e)}},11151:(e,i,n)=>{n.d(i,{Z:()=>c,a:()=>a});var t=n(67294);const s={},r=t.createContext(s);function a(e){const i=t.useContext(r);return t.useMemo((function(){return"function"==typeof e?e(i):{...i,...e}}),[i,e])}function c(e){let i;return i=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:a(e.components),t.createElement(r.Provider,{value:i},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/96af6484.b9da4550.js b/assets/js/96af6484.b9da4550.js new file mode 100644 index 000000000..680ba29cc --- /dev/null +++ b/assets/js/96af6484.b9da4550.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([["8736"],{31763:function(e,i,n){n.r(i),n.d(i,{metadata:()=>t,contentTitle:()=>c,default:()=>h,assets:()=>o,toc:()=>d,frontMatter:()=>a});var t=JSON.parse('{"id":"user/hardware/peripherals/mice-and-touchpads","title":"Mice and Touchpads","description":"ASUS, Logitech, Roccat, SteelSeries","source":"@site/docs/user/hardware/peripherals/mice-and-touchpads.md","sourceDirName":"user/hardware/peripherals","slug":"/user/hardware/peripherals/mice-and-touchpads","permalink":"/docs/user/hardware/peripherals/mice-and-touchpads","draft":false,"unlisted":false,"editUrl":"https://github.com/getsolus/help-center-docs/tree/master/docs/user/hardware/peripherals/mice-and-touchpads.md","tags":[],"version":"current","lastUpdatedAt":1733757592000,"frontMatter":{"title":"Mice and Touchpads","summary":"Guide to using and configuring input devices on Solus"},"sidebar":"userSidebar","previous":{"title":"Peripherals","permalink":"/docs/category/peripherals"},"next":{"title":"MIDI Keyboards","permalink":"/docs/user/hardware/peripherals/midi-keyboard"}}'),r=n("85893"),s=n("50065");let a={title:"Mice and Touchpads",summary:"Guide to using and configuring input devices on Solus"},c="Mice and Touchpads",o={},d=[{value:"ASUS, Logitech, Roccat, SteelSeries",id:"asus-logitech-roccat-steelseries",level:2},{value:"Razer",id:"razer",level:2},{value:"Synaptics",id:"synaptics",level:2},{value:"Setup",id:"setup",level:3},{value:"Revert configuration",id:"revert-configuration",level:3}];function l(e){let i={code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,s.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(i.header,{children:(0,r.jsx)(i.h1,{id:"mice-and-touchpads",children:"Mice and Touchpads"})}),"\n",(0,r.jsx)(i.h2,{id:"asus-logitech-roccat-steelseries",children:"ASUS, Logitech, Roccat, SteelSeries"}),"\n",(0,r.jsxs)(i.p,{children:["TODO: Quick tutorial on installing ",(0,r.jsx)(i.code,{children:"piper"})," with a screenshot. And point them at the official documentation."]}),"\n",(0,r.jsx)(i.h2,{id:"razer",children:"Razer"}),"\n",(0,r.jsxs)(i.p,{children:["TODO: Quick tutorial on installing ",(0,r.jsx)(i.code,{children:"polychromatic"})," with a screenshot. And point them at the official documentation."]}),"\n",(0,r.jsx)(i.h2,{id:"synaptics",children:"Synaptics"}),"\n",(0,r.jsx)(i.p,{children:"These instructions describe how to use the the synaptics driver instead of the default libinput driver to manage your touchpad. You might try this if:"}),"\n",(0,r.jsxs)(i.ul,{children:["\n",(0,r.jsx)(i.li,{children:"libinput doesn't allow for two-finger scrolling"}),"\n",(0,r.jsx)(i.li,{children:"libinput doesn't supports edge scrolling or vice versa"}),"\n",(0,r.jsx)(i.li,{children:"You want to take advantage of the extended configurability of the synaptics driver"}),"\n"]}),"\n",(0,r.jsxs)(i.p,{children:[(0,r.jsx)(i.strong,{children:"NOTE:"})," The synaptics driver will only be used for your touchpad and libinput will be used for all other input devices."]}),"\n",(0,r.jsxs)(i.p,{children:[(0,r.jsx)(i.strong,{children:"NOTE:"})," That the synaptics driver is in maintenance mode and libinput is the preferred driver and also sees active development."]}),"\n",(0,r.jsx)(i.h3,{id:"setup",children:"Setup"}),"\n",(0,r.jsx)(i.p,{children:"To get started open up a terminal and install the synaptics driver."}),"\n",(0,r.jsx)(i.pre,{children:(0,r.jsx)(i.code,{className:"language-bash",children:"sudo eopkg it xorg-driver-input-synaptics\n"})}),"\n",(0,r.jsxs)(i.p,{children:["Then, copy the default synaptics config file to the ",(0,r.jsx)(i.code,{children:"/etc/"})," directory."]}),"\n",(0,r.jsx)(i.pre,{children:(0,r.jsx)(i.code,{className:"language-bash",children:"sudo cp /usr/share/X11/xorg.conf.d/50-synaptics.conf /etc/X11/xorg.conf.d/90-synaptics.conf\n"})}),"\n",(0,r.jsxs)(i.p,{children:[(0,r.jsx)(i.strong,{children:"NOTE:"})," The /etc/ directory has a higher priority over the default config location and will ensure the synaptics driver gets loaded first, additionally by copying to /etc/ first it will avoid a three-way merge issue if you wish the edit the config file directly."]}),"\n",(0,r.jsx)(i.p,{children:"Reboot your machine then verify the synaptics driver is in use:"}),"\n",(0,r.jsx)(i.pre,{children:(0,r.jsx)(i.code,{className:"language-bash",children:"cat /var/log/Xorg.0.log | grep \"Using input driver 'synaptics' for\"\n"})}),"\n",(0,r.jsx)(i.p,{children:"If it returns a result, then success! The synaptics driver is in use instead of libinput for your Touchpad."}),"\n",(0,r.jsx)(i.h3,{id:"revert-configuration",children:"Revert configuration"}),"\n",(0,r.jsx)(i.p,{children:"If you wish to switch back to using libinput:"}),"\n",(0,r.jsx)(i.pre,{children:(0,r.jsx)(i.code,{className:"language-bash",children:"sudo rm /etc/X11/xorg.conf.d/90-synaptics.conf\nsudo eopkg rm xorg-driver-input-synaptics\n"})})]})}function h(e={}){let{wrapper:i}={...(0,s.a)(),...e.components};return i?(0,r.jsx)(i,{...e,children:(0,r.jsx)(l,{...e})}):l(e)}},50065:function(e,i,n){n.d(i,{Z:function(){return c},a:function(){return a}});var t=n(67294);let r={},s=t.createContext(r);function a(e){let i=t.useContext(s);return t.useMemo(function(){return"function"==typeof e?e(i):{...i,...e}},[i,e])}function c(e){let i;return i=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:a(e.components),t.createElement(s.Provider,{value:i},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/97c623e4.9f56cce7.js b/assets/js/97c623e4.9f56cce7.js deleted file mode 100644 index 9a3661fa0..000000000 --- a/assets/js/97c623e4.9f56cce7.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[6427],{42268:(e,a,t)=>{t.r(a),t.d(a,{assets:()=>c,contentTitle:()=>o,default:()=>l,frontMatter:()=>n,metadata:()=>i,toc:()=>p});var s=t(85893),r=t(11151);const n={title:"Requesting a Package Update",summary:"Boohoo, your favorite package is outdated!"},o="Requesting A Package Update",i={id:"packaging/procedures/request-a-package-update",title:"Requesting a Package Update",description:"Packages updates are typically provided by the community or dedicated package maintainers. If we are not shipping the latest stable release of a package, however, you can let us know.",source:"@site/docs/packaging/procedures/request-a-package-update.md",sourceDirName:"packaging/procedures",slug:"/packaging/procedures/request-a-package-update",permalink:"/docs/packaging/procedures/request-a-package-update",draft:!1,unlisted:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/packaging/procedures/request-a-package-update.md",tags:[],version:"current",lastUpdatedAt:1732716912e3,frontMatter:{title:"Requesting a Package Update",summary:"Boohoo, your favorite package is outdated!"},sidebar:"packagingSidebar",previous:{title:"Release Processes",permalink:"/docs/packaging/procedures/release-processes"},next:{title:"Requesting a Package",permalink:"/docs/packaging/procedures/request-a-package"}},c={},p=[];function d(e){const a={a:"a",code:"code",h1:"h1",header:"header",li:"li",p:"p",strong:"strong",ul:"ul",...(0,r.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(a.header,{children:(0,s.jsx)(a.h1,{id:"requesting-a-package-update",children:"Requesting A Package Update"})}),"\n",(0,s.jsx)(a.p,{children:"Packages updates are typically provided by the community or dedicated package maintainers. If we are not shipping the latest stable release of a package, however, you can let us know."}),"\n",(0,s.jsxs)(a.p,{children:[(0,s.jsxs)(a.strong,{children:["First, please ",(0,s.jsx)(a.a,{href:"https://github.com/getsolus/packages/issues?q=sort%3Aupdated-desc+is%3Aopen+label%3A%22Package%3A+Update+Request%22",children:"look to see if an update request has already been filed"})," for the software or library you require"]}),"."]}),"\n",(0,s.jsx)(a.p,{children:"If there isn't an existing request, you can use the link below to request a package update. Note that updates solely for a new version number, platform-specific updates (such as to macOS or Windows) which aren't relevant, or solely translation updates, are generally not accepted or not prioritized."}),"\n",(0,s.jsx)(a.p,{children:"You will be asked in the form to provide the following information:"}),"\n",(0,s.jsxs)(a.ul,{children:["\n",(0,s.jsxs)(a.li,{children:["Title: ",(0,s.jsx)(a.code,{children:"Update $packagename to $version"})," (Example: ",(0,s.jsx)(a.code,{children:"Update nano to 2.9.7"}),")"]}),"\n",(0,s.jsx)(a.li,{children:"Description: Explanation as to the value-add of updating this package."}),"\n",(0,s.jsxs)(a.li,{children:["Link to source tarball/zip file. Note: ",(0,s.jsx)(a.code,{children:"master.zip"})," files ",(0,s.jsx)(a.strong,{children:"are not permitted"}),'. We require versioned tarballs, for example: "1.2.3.tar.gz".']}),"\n"]}),"\n",(0,s.jsxs)(a.p,{children:["Please put this into a new ",(0,s.jsx)(a.a,{href:"https://github.com/getsolus/packages/issues/new?assignees=&labels=Package%3A+Update+Request&projects=&template=request-package-update.yml",children:"issue"}),"."]})]})}function l(e={}){const{wrapper:a}={...(0,r.a)(),...e.components};return a?(0,s.jsx)(a,{...e,children:(0,s.jsx)(d,{...e})}):d(e)}},11151:(e,a,t)=>{t.d(a,{Z:()=>i,a:()=>o});var s=t(67294);const r={},n=s.createContext(r);function o(e){const a=s.useContext(n);return s.useMemo((function(){return"function"==typeof e?e(a):{...a,...e}}),[a,e])}function i(e){let a;return a=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:o(e.components),s.createElement(n.Provider,{value:a},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/97c623e4.fe9ce8f4.js b/assets/js/97c623e4.fe9ce8f4.js new file mode 100644 index 000000000..32bbc10aa --- /dev/null +++ b/assets/js/97c623e4.fe9ce8f4.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([["4661"],{39487:function(e,a,t){t.r(a),t.d(a,{metadata:()=>s,contentTitle:()=>i,default:()=>d,assets:()=>c,toc:()=>p,frontMatter:()=>o});var s=JSON.parse('{"id":"packaging/procedures/request-a-package-update","title":"Requesting a Package Update","description":"Packages updates are typically provided by the community or dedicated package maintainers. If we are not shipping the latest stable release of a package, however, you can let us know.","source":"@site/docs/packaging/procedures/request-a-package-update.md","sourceDirName":"packaging/procedures","slug":"/packaging/procedures/request-a-package-update","permalink":"/docs/packaging/procedures/request-a-package-update","draft":false,"unlisted":false,"editUrl":"https://github.com/getsolus/help-center-docs/tree/master/docs/packaging/procedures/request-a-package-update.md","tags":[],"version":"current","lastUpdatedAt":1733757592000,"frontMatter":{"title":"Requesting a Package Update","summary":"Boohoo, your favorite package is outdated!"},"sidebar":"packagingSidebar","previous":{"title":"Release Processes","permalink":"/docs/packaging/procedures/release-processes"},"next":{"title":"Requesting a Package","permalink":"/docs/packaging/procedures/request-a-package"}}'),r=t("85893"),n=t("50065");let o={title:"Requesting a Package Update",summary:"Boohoo, your favorite package is outdated!"},i="Requesting A Package Update",c={},p=[];function l(e){let a={a:"a",code:"code",h1:"h1",header:"header",li:"li",p:"p",strong:"strong",ul:"ul",...(0,n.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(a.header,{children:(0,r.jsx)(a.h1,{id:"requesting-a-package-update",children:"Requesting A Package Update"})}),"\n",(0,r.jsx)(a.p,{children:"Packages updates are typically provided by the community or dedicated package maintainers. If we are not shipping the latest stable release of a package, however, you can let us know."}),"\n",(0,r.jsxs)(a.p,{children:[(0,r.jsxs)(a.strong,{children:["First, please ",(0,r.jsx)(a.a,{href:"https://github.com/getsolus/packages/issues?q=sort%3Aupdated-desc+is%3Aopen+label%3A%22Package%3A+Update+Request%22",children:"look to see if an update request has already been filed"})," for the software or library you require"]}),"."]}),"\n",(0,r.jsx)(a.p,{children:"If there isn't an existing request, you can use the link below to request a package update. Note that updates solely for a new version number, platform-specific updates (such as to macOS or Windows) which aren't relevant, or solely translation updates, are generally not accepted or not prioritized."}),"\n",(0,r.jsx)(a.p,{children:"You will be asked in the form to provide the following information:"}),"\n",(0,r.jsxs)(a.ul,{children:["\n",(0,r.jsxs)(a.li,{children:["Title: ",(0,r.jsx)(a.code,{children:"Update $packagename to $version"})," (Example: ",(0,r.jsx)(a.code,{children:"Update nano to 2.9.7"}),")"]}),"\n",(0,r.jsx)(a.li,{children:"Description: Explanation as to the value-add of updating this package."}),"\n",(0,r.jsxs)(a.li,{children:["Link to source tarball/zip file. Note: ",(0,r.jsx)(a.code,{children:"master.zip"})," files ",(0,r.jsx)(a.strong,{children:"are not permitted"}),'. We require versioned tarballs, for example: "1.2.3.tar.gz".']}),"\n"]}),"\n",(0,r.jsxs)(a.p,{children:["Please put this into a new ",(0,r.jsx)(a.a,{href:"https://github.com/getsolus/packages/issues/new?assignees=&labels=Package%3A+Update+Request&projects=&template=request-package-update.yml",children:"issue"}),"."]})]})}function d(e={}){let{wrapper:a}={...(0,n.a)(),...e.components};return a?(0,r.jsx)(a,{...e,children:(0,r.jsx)(l,{...e})}):l(e)}},50065:function(e,a,t){t.d(a,{Z:function(){return i},a:function(){return o}});var s=t(67294);let r={},n=s.createContext(r);function o(e){let a=s.useContext(n);return s.useMemo(function(){return"function"==typeof e?e(a):{...a,...e}},[a,e])}function i(e){let a;return a=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:o(e.components),s.createElement(n.Provider,{value:a},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/99bedda9.5bdd5b90.js b/assets/js/99bedda9.5bdd5b90.js new file mode 100644 index 000000000..092327c49 --- /dev/null +++ b/assets/js/99bedda9.5bdd5b90.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([["7240"],{9982:function(e,r,i){i.r(r),i.d(r,{metadata:()=>n,contentTitle:()=>l,default:()=>c,assets:()=>o,toc:()=>a,frontMatter:()=>d});var n=JSON.parse('{"id":"user/hardware/index","title":"Hardware","description":"Preinstalled drivers","source":"@site/docs/user/hardware/index.md","sourceDirName":"user/hardware","slug":"/user/hardware/","permalink":"/docs/user/hardware/","draft":false,"unlisted":false,"editUrl":"https://github.com/getsolus/help-center-docs/tree/master/docs/user/hardware/index.md","tags":[],"version":"current","lastUpdatedAt":1733757592000,"frontMatter":{"title":"Hardware","summary":"Guide to using additional hardware on Solus"},"sidebar":"userSidebar","previous":{"title":"Tips and Tricks","permalink":"/docs/user/editions/xfce/tips-and-tricks"},"next":{"title":"Compatibility","permalink":"/docs/category/compatibility"}}'),t=i("85893"),s=i("50065");let d={title:"Hardware",summary:"Guide to using additional hardware on Solus"},l="Hardware",o={},a=[{value:"Preinstalled drivers",id:"preinstalled-drivers",level:2},{value:"GPUs",id:"gpus",level:3},{value:"Proprietary drivers",id:"proprietary-drivers",level:2},{value:"Supported drivers",id:"supported-drivers",level:3}];function h(e){let r={h1:"h1",h2:"h2",h3:"h3",header:"header",img:"img",li:"li",p:"p",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,s.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(r.header,{children:(0,t.jsx)(r.h1,{id:"hardware",children:"Hardware"})}),"\n",(0,t.jsx)(r.h2,{id:"preinstalled-drivers",children:"Preinstalled drivers"}),"\n",(0,t.jsx)(r.p,{children:"The vast majority of hardware on Linux is supported by driver modules included with the Linux Kernel. This includes things like:"}),"\n",(0,t.jsxs)(r.ul,{children:["\n",(0,t.jsx)(r.li,{children:"CPUs (AMD, Intel)"}),"\n",(0,t.jsx)(r.li,{children:"Networking"}),"\n",(0,t.jsx)(r.li,{children:"PCI and PCI Express"}),"\n",(0,t.jsx)(r.li,{children:"Storage"}),"\n",(0,t.jsx)(r.li,{children:"USB"}),"\n"]}),"\n",(0,t.jsx)(r.p,{children:"The purpose of this documentation is to help you find drivers for hardware that is not directly supported or requires additional configuration to be used on Solus."}),"\n",(0,t.jsx)(r.h3,{id:"gpus",children:"GPUs"}),"\n",(0,t.jsx)(r.p,{children:"The situations with GPU drivers on Linux is a little complicated. Each driver is actually broken up into multiple pieces:"}),"\n",(0,t.jsxs)(r.ul,{children:["\n",(0,t.jsxs)(r.li,{children:[(0,t.jsx)(r.strong,{children:"Direct Rendering Manager (DRM)"}),"\nThis is the part of the driver provided by the Linux kernel and provides just enough functionality to allow other drivers to access the hardware and render to a connected display.\nLinux provides support for AMD, Intel, and NVIDIA GPUs in this basic capacity."]}),"\n",(0,t.jsxs)(r.li,{children:[(0,t.jsx)(r.strong,{children:"OpenGL driver"}),"\nThis part of the driver is needed for OpenGL applications. AMD and Intel are fully supported on Linux through Mesa, and do not need further drivers."]}),"\n",(0,t.jsxs)(r.li,{children:[(0,t.jsx)(r.strong,{children:"Vulkan driver"}),"\nThis part of the driver is needed for Vulkan applications. AMD and Intel are fully supported on Linux through Mesa, and do not need further drivers."]}),"\n",(0,t.jsxs)(r.li,{children:[(0,t.jsx)(r.strong,{children:"Xorg driver"}),"\nIn order to expose certain features to the Xorg Server, AMD and Intel have additional drivers which may be needed for things like variable refresh rate or multiple display support."]}),"\n"]}),"\n",(0,t.jsx)(r.p,{children:"Unfortunately for NVIDIA users, the situation gets a little complicated. Linux has two sets of drivers for NVIDIA GPUs:"}),"\n",(0,t.jsxs)(r.ul,{children:["\n",(0,t.jsxs)(r.li,{children:[(0,t.jsx)(r.strong,{children:"Nouveau"}),"\nThis is the open-source driver for NVIDIA GPUs. It consists of a DRM driver provided by the Linux kernel, OpenGL drivers (nvc0, nv50) from Mesa, and an Xorg driver (xorg-driver-video-nouveau).\nDevice support for these drivers has historically lagged behind the NVIDIA proprietary drivers and likely will not support newer hardware and does not include Vulkan support.\nPerformance of this driver also typically lags behind the proprietary drivers."]}),"\n",(0,t.jsxs)(r.li,{children:[(0,t.jsx)(r.strong,{children:"NVIDIA proprietary drivers"}),"\nThis is the closed-source driver provided directly by NVIDIA. It consists of a DRM driver module for the kernel, OpenGL and Vulkan drivers for rendering, and additional drivers for extended features of the hardware.\nDevice support for these drivers is very good for newer hardware, but older devices will eventually become unsupported and require the Nouveau drivers instead.\nPerformance of this driver is typically the best available and is therefore highly desirable to gamers and content creators."]}),"\n"]}),"\n",(0,t.jsx)(r.h2,{id:"proprietary-drivers",children:"Proprietary drivers"}),"\n",(0,t.jsx)(r.p,{children:"Installing proprietary drivers may improve performance or certain features, however they are usually not necessary for normal daily usage. Solus provides a utility for installing drivers for detected hardware."}),"\n",(0,t.jsx)(r.p,{children:(0,t.jsx)(r.img,{alt:"DoFlicky Screenshot",src:i(50996).Z+"",width:"497",height:"321"})}),"\n",(0,t.jsx)(r.p,{children:"If there are proprietary drivers that can be installed, they will show up in the box below the description. You can click the item you wish to install and click Install. If you are installing NVIDIA drivers, you may find it to be desirable to install the 32-bit driver as well, in the event you wish to use Steam or Wine."}),"\n",(0,t.jsxs)(r.p,{children:[(0,t.jsx)(r.strong,{children:"Note:"})," A reboot will be required to use the newly installed driver."]}),"\n",(0,t.jsx)(r.h3,{id:"supported-drivers",children:"Supported drivers"}),"\n",(0,t.jsxs)(r.table,{children:[(0,t.jsx)(r.thead,{children:(0,t.jsxs)(r.tr,{children:[(0,t.jsx)(r.th,{children:"Vendor"}),(0,t.jsx)(r.th,{children:"Drivers"})]})}),(0,t.jsxs)(r.tbody,{children:[(0,t.jsxs)(r.tr,{children:[(0,t.jsx)(r.td,{children:"ASUS"}),(0,t.jsx)(r.td,{children:"piper"})]}),(0,t.jsxs)(r.tr,{children:[(0,t.jsx)(r.td,{children:"Broadcom"}),(0,t.jsx)(r.td,{children:"broadcom-sta"})]}),(0,t.jsxs)(r.tr,{children:[(0,t.jsx)(r.td,{children:"Logitech"}),(0,t.jsx)(r.td,{children:"piper"})]}),(0,t.jsxs)(r.tr,{children:[(0,t.jsx)(r.td,{children:"NVIDIA"}),(0,t.jsx)(r.td,{children:"470, main series"})]}),(0,t.jsxs)(r.tr,{children:[(0,t.jsx)(r.td,{children:"Razer"}),(0,t.jsx)(r.td,{children:"openrazer"})]}),(0,t.jsxs)(r.tr,{children:[(0,t.jsx)(r.td,{children:"Roccat"}),(0,t.jsx)(r.td,{children:"piper"})]}),(0,t.jsxs)(r.tr,{children:[(0,t.jsx)(r.td,{children:"SteelSeries"}),(0,t.jsx)(r.td,{children:"piper"})]}),(0,t.jsxs)(r.tr,{children:[(0,t.jsx)(r.td,{children:"VMware"}),(0,t.jsx)(r.td,{children:"open-vm-tools"})]}),(0,t.jsxs)(r.tr,{children:[(0,t.jsx)(r.td,{children:"Xbox"}),(0,t.jsx)(r.td,{children:"xone"})]})]})]})]})}function c(e={}){let{wrapper:r}={...(0,s.a)(),...e.components};return r?(0,t.jsx)(r,{...e,children:(0,t.jsx)(h,{...e})}):h(e)}},50996:function(e,r,i){i.d(r,{Z:function(){return n}});let n=i.p+"assets/images/doflicky-574dff562b460c3839fb6d47c7fa2d25.jpg"},50065:function(e,r,i){i.d(r,{Z:function(){return l},a:function(){return d}});var n=i(67294);let t={},s=n.createContext(t);function d(e){let r=n.useContext(s);return n.useMemo(function(){return"function"==typeof e?e(r):{...r,...e}},[r,e])}function l(e){let r;return r=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:d(e.components),n.createElement(s.Provider,{value:r},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/99bedda9.7d99703c.js b/assets/js/99bedda9.7d99703c.js deleted file mode 100644 index 6b8fd0f30..000000000 --- a/assets/js/99bedda9.7d99703c.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[8639],{48345:(e,r,i)=>{i.r(r),i.d(r,{assets:()=>o,contentTitle:()=>d,default:()=>c,frontMatter:()=>t,metadata:()=>l,toc:()=>a});var s=i(85893),n=i(11151);const t={title:"Hardware",summary:"Guide to using additional hardware on Solus"},d="Hardware",l={id:"user/hardware/index",title:"Hardware",description:"Preinstalled drivers",source:"@site/docs/user/hardware/index.md",sourceDirName:"user/hardware",slug:"/user/hardware/",permalink:"/docs/user/hardware/",draft:!1,unlisted:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/hardware/index.md",tags:[],version:"current",lastUpdatedAt:1732716912e3,frontMatter:{title:"Hardware",summary:"Guide to using additional hardware on Solus"},sidebar:"userSidebar",previous:{title:"Tips and Tricks",permalink:"/docs/user/editions/xfce/tips-and-tricks"},next:{title:"Compatibility",permalink:"/docs/category/compatibility"}},o={},a=[{value:"Preinstalled drivers",id:"preinstalled-drivers",level:2},{value:"GPUs",id:"gpus",level:3},{value:"Proprietary drivers",id:"proprietary-drivers",level:2},{value:"Supported drivers",id:"supported-drivers",level:3}];function h(e){const r={h1:"h1",h2:"h2",h3:"h3",header:"header",img:"img",li:"li",p:"p",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,n.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(r.header,{children:(0,s.jsx)(r.h1,{id:"hardware",children:"Hardware"})}),"\n",(0,s.jsx)(r.h2,{id:"preinstalled-drivers",children:"Preinstalled drivers"}),"\n",(0,s.jsx)(r.p,{children:"The vast majority of hardware on Linux is supported by driver modules included with the Linux Kernel. This includes things like:"}),"\n",(0,s.jsxs)(r.ul,{children:["\n",(0,s.jsx)(r.li,{children:"CPUs (AMD, Intel)"}),"\n",(0,s.jsx)(r.li,{children:"Networking"}),"\n",(0,s.jsx)(r.li,{children:"PCI and PCI Express"}),"\n",(0,s.jsx)(r.li,{children:"Storage"}),"\n",(0,s.jsx)(r.li,{children:"USB"}),"\n"]}),"\n",(0,s.jsx)(r.p,{children:"The purpose of this documentation is to help you find drivers for hardware that is not directly supported or requires additional configuration to be used on Solus."}),"\n",(0,s.jsx)(r.h3,{id:"gpus",children:"GPUs"}),"\n",(0,s.jsx)(r.p,{children:"The situations with GPU drivers on Linux is a little complicated. Each driver is actually broken up into multiple pieces:"}),"\n",(0,s.jsxs)(r.ul,{children:["\n",(0,s.jsxs)(r.li,{children:[(0,s.jsx)(r.strong,{children:"Direct Rendering Manager (DRM)"}),"\nThis is the part of the driver provided by the Linux kernel and provides just enough functionality to allow other drivers to access the hardware and render to a connected display.\nLinux provides support for AMD, Intel, and NVIDIA GPUs in this basic capacity."]}),"\n",(0,s.jsxs)(r.li,{children:[(0,s.jsx)(r.strong,{children:"OpenGL driver"}),"\nThis part of the driver is needed for OpenGL applications. AMD and Intel are fully supported on Linux through Mesa, and do not need further drivers."]}),"\n",(0,s.jsxs)(r.li,{children:[(0,s.jsx)(r.strong,{children:"Vulkan driver"}),"\nThis part of the driver is needed for Vulkan applications. AMD and Intel are fully supported on Linux through Mesa, and do not need further drivers."]}),"\n",(0,s.jsxs)(r.li,{children:[(0,s.jsx)(r.strong,{children:"Xorg driver"}),"\nIn order to expose certain features to the Xorg Server, AMD and Intel have additional drivers which may be needed for things like variable refresh rate or multiple display support."]}),"\n"]}),"\n",(0,s.jsx)(r.p,{children:"Unfortunately for NVIDIA users, the situation gets a little complicated. Linux has two sets of drivers for NVIDIA GPUs:"}),"\n",(0,s.jsxs)(r.ul,{children:["\n",(0,s.jsxs)(r.li,{children:[(0,s.jsx)(r.strong,{children:"Nouveau"}),"\nThis is the open-source driver for NVIDIA GPUs. It consists of a DRM driver provided by the Linux kernel, OpenGL drivers (nvc0, nv50) from Mesa, and an Xorg driver (xorg-driver-video-nouveau).\nDevice support for these drivers has historically lagged behind the NVIDIA proprietary drivers and likely will not support newer hardware and does not include Vulkan support.\nPerformance of this driver also typically lags behind the proprietary drivers."]}),"\n",(0,s.jsxs)(r.li,{children:[(0,s.jsx)(r.strong,{children:"NVIDIA proprietary drivers"}),"\nThis is the closed-source driver provided directly by NVIDIA. It consists of a DRM driver module for the kernel, OpenGL and Vulkan drivers for rendering, and additional drivers for extended features of the hardware.\nDevice support for these drivers is very good for newer hardware, but older devices will eventually become unsupported and require the Nouveau drivers instead.\nPerformance of this driver is typically the best available and is therefore highly desirable to gamers and content creators."]}),"\n"]}),"\n",(0,s.jsx)(r.h2,{id:"proprietary-drivers",children:"Proprietary drivers"}),"\n",(0,s.jsx)(r.p,{children:"Installing proprietary drivers may improve performance or certain features, however they are usually not necessary for normal daily usage. Solus provides a utility for installing drivers for detected hardware."}),"\n",(0,s.jsx)(r.p,{children:(0,s.jsx)(r.img,{alt:"DoFlicky Screenshot",src:i(42202).Z+"",width:"497",height:"321"})}),"\n",(0,s.jsx)(r.p,{children:"If there are proprietary drivers that can be installed, they will show up in the box below the description. You can click the item you wish to install and click Install. If you are installing NVIDIA drivers, you may find it to be desirable to install the 32-bit driver as well, in the event you wish to use Steam or Wine."}),"\n",(0,s.jsxs)(r.p,{children:[(0,s.jsx)(r.strong,{children:"Note:"})," A reboot will be required to use the newly installed driver."]}),"\n",(0,s.jsx)(r.h3,{id:"supported-drivers",children:"Supported drivers"}),"\n",(0,s.jsxs)(r.table,{children:[(0,s.jsx)(r.thead,{children:(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.th,{children:"Vendor"}),(0,s.jsx)(r.th,{children:"Drivers"})]})}),(0,s.jsxs)(r.tbody,{children:[(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:"ASUS"}),(0,s.jsx)(r.td,{children:"piper"})]}),(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:"Broadcom"}),(0,s.jsx)(r.td,{children:"broadcom-sta"})]}),(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:"Logitech"}),(0,s.jsx)(r.td,{children:"piper"})]}),(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:"NVIDIA"}),(0,s.jsx)(r.td,{children:"470, main series"})]}),(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:"Razer"}),(0,s.jsx)(r.td,{children:"openrazer"})]}),(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:"Roccat"}),(0,s.jsx)(r.td,{children:"piper"})]}),(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:"SteelSeries"}),(0,s.jsx)(r.td,{children:"piper"})]}),(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:"VMware"}),(0,s.jsx)(r.td,{children:"open-vm-tools"})]}),(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:"Xbox"}),(0,s.jsx)(r.td,{children:"xone"})]})]})]})]})}function c(e={}){const{wrapper:r}={...(0,n.a)(),...e.components};return r?(0,s.jsx)(r,{...e,children:(0,s.jsx)(h,{...e})}):h(e)}},42202:(e,r,i)=>{i.d(r,{Z:()=>s});const s=i.p+"assets/images/doflicky-574dff562b460c3839fb6d47c7fa2d25.jpg"},11151:(e,r,i)=>{i.d(r,{Z:()=>l,a:()=>d});var s=i(67294);const n={},t=s.createContext(n);function d(e){const r=s.useContext(t);return s.useMemo((function(){return"function"==typeof e?e(r):{...r,...e}}),[r,e])}function l(e){let r;return r=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:d(e.components),s.createElement(t.Provider,{value:r},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/9b400668.5f9fa4fa.js b/assets/js/9b400668.5f9fa4fa.js new file mode 100644 index 000000000..c21990bdb --- /dev/null +++ b/assets/js/9b400668.5f9fa4fa.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([["900"],{42667:function(e){e.exports=JSON.parse('{"tag":{"label":"x86_64-v3","permalink":"/blog/tags/x-86-64-v-3","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/x-86-64-v-3","page":1,"postsPerPage":1,"totalPages":1,"totalCount":1,"blogDescription":"The Solus Development (b)log!","blogTitle":"Solus DevLog"}}')}}]); \ No newline at end of file diff --git a/assets/js/9b400668.6f6321d9.js b/assets/js/9b400668.6f6321d9.js deleted file mode 100644 index 069b326fd..000000000 --- a/assets/js/9b400668.6f6321d9.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[7670],{20767:e=>{e.exports=JSON.parse('{"tag":{"label":"x86_64-v3","permalink":"/blog/tags/x-86-64-v-3","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/x-86-64-v-3","page":1,"postsPerPage":1,"totalPages":1,"totalCount":1,"blogDescription":"The Solus Development (b)log!","blogTitle":"Solus DevLog"}}')}}]); \ No newline at end of file diff --git a/assets/js/9e4087bc.2ef313bc.js b/assets/js/9e4087bc.2ef313bc.js new file mode 100644 index 000000000..a26c72b75 --- /dev/null +++ b/assets/js/9e4087bc.2ef313bc.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([["7293"],{23699:function(e,t,r){r.r(t),r.d(t,{default:function(){return m}});var n=r(85893);r(67294);var a=r(27544),i=r(1822),s=r(81921),l=r(28291),c=r(99757),d=r(52068);function h(e){let{year:t,posts:r}=e,i=(0,l.P)({day:"numeric",month:"long",timeZone:"UTC"}),s=e=>i.format(new Date(e));return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(d.Z,{as:"h3",id:t,children:t}),(0,n.jsx)("ul",{children:r.map(e=>(0,n.jsx)("li",{children:(0,n.jsxs)(a.Z,{to:e.metadata.permalink,children:[s(e.metadata.date)," - ",e.metadata.title]})},e.metadata.date))})]})}function o(e){let{years:t}=e;return(0,n.jsx)("section",{className:"margin-vert--lg",children:(0,n.jsx)("div",{className:"container",children:(0,n.jsx)("div",{className:"row",children:t.map((e,t)=>(0,n.jsx)("div",{className:"col col--4 margin-vert--lg",children:(0,n.jsx)(h,{...e})},t))})})})}function m(e){let{archive:t}=e,r=(0,i.I)({id:"theme.blog.archive.title",message:"Archive",description:"The page & hero title of the blog archive page"}),a=(0,i.I)({id:"theme.blog.archive.description",message:"Archive",description:"The page & hero description of the blog archive page"}),l=Array.from(t.blogPosts.reduce((e,t)=>{let r=t.metadata.date.split("-")[0],n=e.get(r)??[];return e.set(r,[t,...n])},new Map),e=>{let[t,r]=e;return{year:t,posts:r}});return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(s.d,{title:r,description:a}),(0,n.jsxs)(c.Z,{children:[(0,n.jsx)("header",{className:"hero hero--primary",children:(0,n.jsxs)("div",{className:"container",children:[(0,n.jsx)(d.Z,{as:"h1",className:"hero__title",children:r}),(0,n.jsx)("p",{className:"hero__subtitle",children:a})]})}),(0,n.jsx)("main",{children:l.length>0&&(0,n.jsx)(o,{years:l})})]})]})}},28291:function(e,t,r){r.d(t,{P:function(){return a}});var n=r(93934);function a(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},{i18n:{currentLocale:t}}=(0,n.Z)(),r=function(){let{i18n:{currentLocale:e,localeConfigs:t}}=(0,n.Z)();return t[e].calendar}();return new Intl.DateTimeFormat(t,{calendar:r,...e})}}}]); \ No newline at end of file diff --git a/assets/js/9e4087bc.ae5a1aa1.js b/assets/js/9e4087bc.ae5a1aa1.js deleted file mode 100644 index c135fcdf5..000000000 --- a/assets/js/9e4087bc.ae5a1aa1.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[3608],{8635:(e,r,t)=>{t.r(r),t.d(r,{default:()=>m});t(67294);var a=t(38208),n=t(55361),s=t(96984),i=t(14852),c=t(48714),l=t(42704),o=t(85893);function d(e){let{year:r,posts:t}=e;const n=(0,i.P)({day:"numeric",month:"long",timeZone:"UTC"});return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(l.Z,{as:"h3",id:r,children:r}),(0,o.jsx)("ul",{children:t.map((e=>{return(0,o.jsx)("li",{children:(0,o.jsxs)(a.Z,{to:e.metadata.permalink,children:[(r=e.metadata.date,n.format(new Date(r)))," - ",e.metadata.title]})},e.metadata.date);var r}))})]})}function h(e){let{years:r}=e;return(0,o.jsx)("section",{className:"margin-vert--lg",children:(0,o.jsx)("div",{className:"container",children:(0,o.jsx)("div",{className:"row",children:r.map(((e,r)=>(0,o.jsx)("div",{className:"col col--4 margin-vert--lg",children:(0,o.jsx)(d,{...e})},r)))})})})}function m(e){let{archive:r}=e;const t=(0,n.I)({id:"theme.blog.archive.title",message:"Archive",description:"The page & hero title of the blog archive page"}),a=(0,n.I)({id:"theme.blog.archive.description",message:"Archive",description:"The page & hero description of the blog archive page"}),i=function(e){const r=e.reduce(((e,r)=>{const t=r.metadata.date.split("-")[0],a=e.get(t)??[];return e.set(t,[r,...a])}),new Map);return Array.from(r,(e=>{let[r,t]=e;return{year:r,posts:t}}))}(r.blogPosts);return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(s.d,{title:t,description:a}),(0,o.jsxs)(c.Z,{children:[(0,o.jsx)("header",{className:"hero hero--primary",children:(0,o.jsxs)("div",{className:"container",children:[(0,o.jsx)(l.Z,{as:"h1",className:"hero__title",children:t}),(0,o.jsx)("p",{className:"hero__subtitle",children:a})]})}),(0,o.jsx)("main",{children:i.length>0&&(0,o.jsx)(h,{years:i})})]})]})}},14852:(e,r,t)=>{t.d(r,{P:()=>n});var a=t(75276);function n(e){void 0===e&&(e={});const{i18n:{currentLocale:r}}=(0,a.Z)(),t=function(){const{i18n:{currentLocale:e,localeConfigs:r}}=(0,a.Z)();return r[e].calendar}();return new Intl.DateTimeFormat(r,{calendar:t,...e})}}}]); \ No newline at end of file diff --git a/assets/js/a05bfad9.3a4b6377.js b/assets/js/a05bfad9.3a4b6377.js new file mode 100644 index 000000000..ec28e483d --- /dev/null +++ b/assets/js/a05bfad9.3a4b6377.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([["1584"],{82131:function(e,t,s){s.r(t),s.d(t,{metadata:()=>i,contentTitle:()=>c,default:()=>u,assets:()=>l,toc:()=>o,frontMatter:()=>d});var i=JSON.parse('{"id":"user/editions/budgie/tips-and-tricks","title":"Tips and Tricks","description":"Budgie Shortcuts","source":"@site/docs/user/editions/budgie/tips-and-tricks.md","sourceDirName":"user/editions/budgie","slug":"/user/editions/budgie/tips-and-tricks","permalink":"/docs/user/editions/budgie/tips-and-tricks","draft":false,"unlisted":false,"editUrl":"https://github.com/getsolus/help-center-docs/tree/master/docs/user/editions/budgie/tips-and-tricks.md","tags":[],"version":"current","lastUpdatedAt":1733757592000,"frontMatter":{"title":"Tips and Tricks","summary":"Tips and Tricks for Budgie users"},"sidebar":"userSidebar","previous":{"title":"Configuration","permalink":"/docs/user/editions/budgie/configuration"},"next":{"title":"GNOME","permalink":"/docs/user/editions/gnome/"}}'),n=s("85893"),r=s("50065");let d={title:"Tips and Tricks",summary:"Tips and Tricks for Budgie users"},c="Tips and Tricks",l={},o=[{value:"Budgie Shortcuts",id:"budgie-shortcuts",level:2},{value:"Restoring Panel Defaults",id:"restoring-panel-defaults",level:2}];function a(e){let t={blockquote:"blockquote",code:"code",em:"em",h1:"h1",h2:"h2",header:"header",p:"p",pre:"pre",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,r.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.header,{children:(0,n.jsx)(t.h1,{id:"tips-and-tricks",children:"Tips and Tricks"})}),"\n",(0,n.jsx)(t.h2,{id:"budgie-shortcuts",children:"Budgie Shortcuts"}),"\n",(0,n.jsx)(t.p,{children:"Budgie provides multiple shortcuts to make navigating around Budgie faster and easier."}),"\n",(0,n.jsxs)(t.table,{children:[(0,n.jsx)(t.thead,{children:(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.th,{children:"Keyboard Shortcut"}),(0,n.jsx)(t.th,{children:"Action"})]})}),(0,n.jsxs)(t.tbody,{children:[(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"Alt + F2"}),(0,n.jsx)(t.td,{children:"Open Budgie Run dialog"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"Alt + F4"}),(0,n.jsx)(t.td,{children:"Kill the active window on the desktop"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"Alt + Tab"}),(0,n.jsx)(t.td,{children:"Open application switcher overlay"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"Shift + Alt + Tab"}),(0,n.jsx)(t.td,{children:"Open application switcher, switch to previous applications"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsxs)(t.td,{children:["Super (",(0,n.jsx)(t.em,{children:"also Super + S"}),")"]}),(0,n.jsx)(t.td,{children:"Open Budgie Menu"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"Super + A"}),(0,n.jsx)(t.td,{children:"Open Applets section of Raven"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"Super + L"}),(0,n.jsx)(t.td,{children:"Lock the screen"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"Super + N"}),(0,n.jsx)(t.td,{children:"Open Notifications section of Raven"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsxs)(t.td,{children:["Super + Space (",(0,n.jsx)(t.em,{children:"also Alt + Shift"}),")"]}),(0,n.jsx)(t.td,{children:"Switch keyboard layouts"})]})]})]}),"\n",(0,n.jsx)(t.h2,{id:"restoring-panel-defaults",children:"Restoring Panel Defaults"}),"\n",(0,n.jsx)(t.p,{children:"To restore Budgie's default panel settings, run the command below"}),"\n",(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-bash",children:"budgie-panel --reset --replace &\n"})}),"\n",(0,n.jsx)(t.p,{children:"After this you can press CTRL + D to close the terminal without closing the Budgie Panel process."}),"\n",(0,n.jsxs)(t.blockquote,{children:["\n",(0,n.jsx)(t.p,{children:"TODO: There's got to be more that we can add here"}),"\n"]})]})}function u(e={}){let{wrapper:t}={...(0,r.a)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(a,{...e})}):a(e)}},50065:function(e,t,s){s.d(t,{Z:function(){return c},a:function(){return d}});var i=s(67294);let n={},r=i.createContext(n);function d(e){let t=i.useContext(r);return i.useMemo(function(){return"function"==typeof e?e(t):{...t,...e}},[t,e])}function c(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:d(e.components),i.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/a05bfad9.c2946a01.js b/assets/js/a05bfad9.c2946a01.js deleted file mode 100644 index 2e8d4df1c..000000000 --- a/assets/js/a05bfad9.c2946a01.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[885],{12620:(e,t,s)=>{s.r(t),s.d(t,{assets:()=>o,contentTitle:()=>d,default:()=>h,frontMatter:()=>r,metadata:()=>c,toc:()=>l});var i=s(85893),n=s(11151);const r={title:"Tips and Tricks",summary:"Tips and Tricks for Budgie users"},d="Tips and Tricks",c={id:"user/editions/budgie/tips-and-tricks",title:"Tips and Tricks",description:"Budgie Shortcuts",source:"@site/docs/user/editions/budgie/tips-and-tricks.md",sourceDirName:"user/editions/budgie",slug:"/user/editions/budgie/tips-and-tricks",permalink:"/docs/user/editions/budgie/tips-and-tricks",draft:!1,unlisted:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/editions/budgie/tips-and-tricks.md",tags:[],version:"current",lastUpdatedAt:1732716912e3,frontMatter:{title:"Tips and Tricks",summary:"Tips and Tricks for Budgie users"},sidebar:"userSidebar",previous:{title:"Configuration",permalink:"/docs/user/editions/budgie/configuration"},next:{title:"GNOME",permalink:"/docs/user/editions/gnome/"}},o={},l=[{value:"Budgie Shortcuts",id:"budgie-shortcuts",level:2},{value:"Restoring Panel Defaults",id:"restoring-panel-defaults",level:2}];function a(e){const t={blockquote:"blockquote",code:"code",em:"em",h1:"h1",h2:"h2",header:"header",p:"p",pre:"pre",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,n.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(t.header,{children:(0,i.jsx)(t.h1,{id:"tips-and-tricks",children:"Tips and Tricks"})}),"\n",(0,i.jsx)(t.h2,{id:"budgie-shortcuts",children:"Budgie Shortcuts"}),"\n",(0,i.jsx)(t.p,{children:"Budgie provides multiple shortcuts to make navigating around Budgie faster and easier."}),"\n",(0,i.jsxs)(t.table,{children:[(0,i.jsx)(t.thead,{children:(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.th,{children:"Keyboard Shortcut"}),(0,i.jsx)(t.th,{children:"Action"})]})}),(0,i.jsxs)(t.tbody,{children:[(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"Alt + F2"}),(0,i.jsx)(t.td,{children:"Open Budgie Run dialog"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"Alt + F4"}),(0,i.jsx)(t.td,{children:"Kill the active window on the desktop"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"Alt + Tab"}),(0,i.jsx)(t.td,{children:"Open application switcher overlay"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"Shift + Alt + Tab"}),(0,i.jsx)(t.td,{children:"Open application switcher, switch to previous applications"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsxs)(t.td,{children:["Super (",(0,i.jsx)(t.em,{children:"also Super + S"}),")"]}),(0,i.jsx)(t.td,{children:"Open Budgie Menu"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"Super + A"}),(0,i.jsx)(t.td,{children:"Open Applets section of Raven"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"Super + L"}),(0,i.jsx)(t.td,{children:"Lock the screen"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"Super + N"}),(0,i.jsx)(t.td,{children:"Open Notifications section of Raven"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsxs)(t.td,{children:["Super + Space (",(0,i.jsx)(t.em,{children:"also Alt + Shift"}),")"]}),(0,i.jsx)(t.td,{children:"Switch keyboard layouts"})]})]})]}),"\n",(0,i.jsx)(t.h2,{id:"restoring-panel-defaults",children:"Restoring Panel Defaults"}),"\n",(0,i.jsx)(t.p,{children:"To restore Budgie's default panel settings, run the command below"}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-bash",children:"budgie-panel --reset --replace &\n"})}),"\n",(0,i.jsx)(t.p,{children:"After this you can press CTRL + D to close the terminal without closing the Budgie Panel process."}),"\n",(0,i.jsxs)(t.blockquote,{children:["\n",(0,i.jsx)(t.p,{children:"TODO: There's got to be more that we can add here"}),"\n"]})]})}function h(e={}){const{wrapper:t}={...(0,n.a)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(a,{...e})}):a(e)}},11151:(e,t,s)=>{s.d(t,{Z:()=>c,a:()=>d});var i=s(67294);const n={},r=i.createContext(n);function d(e){const t=i.useContext(r);return i.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function c(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:d(e.components),i.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/a398ef57.1f7e170d.js b/assets/js/a398ef57.1f7e170d.js deleted file mode 100644 index e25fc9e60..000000000 --- a/assets/js/a398ef57.1f7e170d.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[2586],{45523:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>l,contentTitle:()=>o,default:()=>p,frontMatter:()=>s,metadata:()=>a,toc:()=>c});var i=t(85893),r=t(11151);const s={title:"Apple",summary:"Quick guide to working with Apple devices on Solus"},o="Apple",a={id:"user/hardware/mobile/apple",title:"Apple",description:"Solus provides iOS support via libimobiledevice and libgpod.",source:"@site/docs/user/hardware/mobile/apple.md",sourceDirName:"user/hardware/mobile",slug:"/user/hardware/mobile/apple",permalink:"/docs/user/hardware/mobile/apple",draft:!1,unlisted:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/hardware/mobile/apple.md",tags:[],version:"current",lastUpdatedAt:1732716912e3,frontMatter:{title:"Apple",summary:"Quick guide to working with Apple devices on Solus"},sidebar:"userSidebar",previous:{title:"Android",permalink:"/docs/user/hardware/mobile/android"},next:{title:"Peripherals",permalink:"/docs/category/peripherals"}},l={},c=[{value:"Installation",id:"installation",level:2},{value:"File management",id:"file-management",level:2}];function d(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",header:"header",p:"p",pre:"pre",strong:"strong",...(0,r.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.header,{children:(0,i.jsx)(n.h1,{id:"apple",children:"Apple"})}),"\n",(0,i.jsxs)(n.p,{children:["Solus provides iOS support via ",(0,i.jsx)(n.a,{href:"https://libimobiledevice.org/",children:"libimobiledevice"})," and ",(0,i.jsx)(n.a,{href:"https://github.com/fadingred/libgpod/",children:"libgpod"}),"."]}),"\n",(0,i.jsx)(n.p,{children:"Please note that the below mentioned installation instructions do not guarantee functional iOS features such as content synchronization (music) or file copying."}),"\n",(0,i.jsx)(n.p,{children:"This support can be exposed via your file manager (such as Nautilus) upon connecting your iOS device or music players such as Rhythmbox."}),"\n",(0,i.jsx)(n.h2,{id:"installation",children:"Installation"}),"\n",(0,i.jsxs)(n.p,{children:["To ensure you have the required software for iOS support, install ",(0,i.jsx)(n.code,{children:"libideviceactivation"})," via the Software Center or terminal:"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"sudo eopkg install libideviceactivation\n"})}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"NOTE:"})," It is recommended that you reboot your system after this installation."]}),"\n",(0,i.jsx)(n.h2,{id:"file-management",children:"File management"}),"\n",(0,i.jsx)(n.p,{children:"TODO: Tutorial on file access and syncing"})]})}function p(e={}){const{wrapper:n}={...(0,r.a)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(d,{...e})}):d(e)}},11151:(e,n,t)=>{t.d(n,{Z:()=>a,a:()=>o});var i=t(67294);const r={},s=i.createContext(r);function o(e){const n=i.useContext(s);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:o(e.components),i.createElement(s.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/a398ef57.d7b3741a.js b/assets/js/a398ef57.d7b3741a.js new file mode 100644 index 000000000..89f5a106c --- /dev/null +++ b/assets/js/a398ef57.d7b3741a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([["1418"],{78086:function(e,n,t){t.r(n),t.d(n,{metadata:()=>i,contentTitle:()=>o,default:()=>p,assets:()=>l,toc:()=>c,frontMatter:()=>a});var i=JSON.parse('{"id":"user/hardware/mobile/apple","title":"Apple","description":"Solus provides iOS support via libimobiledevice and libgpod.","source":"@site/docs/user/hardware/mobile/apple.md","sourceDirName":"user/hardware/mobile","slug":"/user/hardware/mobile/apple","permalink":"/docs/user/hardware/mobile/apple","draft":false,"unlisted":false,"editUrl":"https://github.com/getsolus/help-center-docs/tree/master/docs/user/hardware/mobile/apple.md","tags":[],"version":"current","lastUpdatedAt":1733757592000,"frontMatter":{"title":"Apple","summary":"Quick guide to working with Apple devices on Solus"},"sidebar":"userSidebar","previous":{"title":"Android","permalink":"/docs/user/hardware/mobile/android"},"next":{"title":"Peripherals","permalink":"/docs/category/peripherals"}}'),r=t("85893"),s=t("50065");let a={title:"Apple",summary:"Quick guide to working with Apple devices on Solus"},o="Apple",l={},c=[{value:"Installation",id:"installation",level:2},{value:"File management",id:"file-management",level:2}];function d(e){let n={a:"a",code:"code",h1:"h1",h2:"h2",header:"header",p:"p",pre:"pre",strong:"strong",...(0,s.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.header,{children:(0,r.jsx)(n.h1,{id:"apple",children:"Apple"})}),"\n",(0,r.jsxs)(n.p,{children:["Solus provides iOS support via ",(0,r.jsx)(n.a,{href:"https://libimobiledevice.org/",children:"libimobiledevice"})," and ",(0,r.jsx)(n.a,{href:"https://github.com/fadingred/libgpod/",children:"libgpod"}),"."]}),"\n",(0,r.jsx)(n.p,{children:"Please note that the below mentioned installation instructions do not guarantee functional iOS features such as content synchronization (music) or file copying."}),"\n",(0,r.jsx)(n.p,{children:"This support can be exposed via your file manager (such as Nautilus) upon connecting your iOS device or music players such as Rhythmbox."}),"\n",(0,r.jsx)(n.h2,{id:"installation",children:"Installation"}),"\n",(0,r.jsxs)(n.p,{children:["To ensure you have the required software for iOS support, install ",(0,r.jsx)(n.code,{children:"libideviceactivation"})," via the Software Center or terminal:"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"sudo eopkg install libideviceactivation\n"})}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"NOTE:"})," It is recommended that you reboot your system after this installation."]}),"\n",(0,r.jsx)(n.h2,{id:"file-management",children:"File management"}),"\n",(0,r.jsx)(n.p,{children:"TODO: Tutorial on file access and syncing"})]})}function p(e={}){let{wrapper:n}={...(0,s.a)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(d,{...e})}):d(e)}},50065:function(e,n,t){t.d(n,{Z:function(){return o},a:function(){return a}});var i=t(67294);let r={},s=i.createContext(r);function a(e){let n=i.useContext(s);return i.useMemo(function(){return"function"==typeof e?e(n):{...n,...e}},[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:a(e.components),i.createElement(s.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/a52026b8.062c3310.js b/assets/js/a52026b8.062c3310.js new file mode 100644 index 000000000..37c6e6883 --- /dev/null +++ b/assets/js/a52026b8.062c3310.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([["185"],{87912:function(e,t,o){o.r(t),o.d(t,{assets:function(){return u},contentTitle:function(){return i},default:function(){return g},frontMatter:function(){return r},metadata:function(){return n},toc:function(){return a}});var n=o(42650),l=o(85893),s=o(50065);let r={title:"Welcome to the Solus Devlog",description:"Welcome to the Solus Development Log.",slug:"welcome-solus-devlog-v1",authors:"joey",tags:["hello","devlog","firstpost","solus"],hide_table_of_contents:!1},i=void 0,u={authorsImageUrls:[void 0]},a=[];function c(e){let t={p:"p",...(0,s.a)(),...e.components};return(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)(t.p,{children:"Welcome to the Solus Development Log."}),"\n",(0,l.jsx)(t.p,{children:"The Solus Development Log will be used by Solus Staff and outside contributors to highlight wins and changes in Solus. Keep an eye on this space."})]})}function g(e={}){let{wrapper:t}={...(0,s.a)(),...e.components};return t?(0,l.jsx)(t,{...e,children:(0,l.jsx)(c,{...e})}):c(e)}},50065:function(e,t,o){o.d(t,{Z:function(){return i},a:function(){return r}});var n=o(67294);let l={},s=n.createContext(l);function r(e){let t=n.useContext(s);return n.useMemo(function(){return"function"==typeof e?e(t):{...t,...e}},[t,e])}function i(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(l):e.components||l:r(e.components),n.createElement(s.Provider,{value:t},e.children)}},42650:function(e){e.exports=JSON.parse('{"permalink":"/blog/welcome-solus-devlog-v1","source":"@site/devlog/2024-01-13-welcome-devlog.md","title":"Welcome to the Solus Devlog","description":"Welcome to the Solus Development Log.","date":"2024-01-13T00:00:00.000Z","tags":[{"inline":true,"label":"hello","permalink":"/blog/tags/hello"},{"inline":true,"label":"devlog","permalink":"/blog/tags/devlog"},{"inline":true,"label":"firstpost","permalink":"/blog/tags/firstpost"},{"inline":true,"label":"solus","permalink":"/blog/tags/solus"}],"readingTime":0.9,"hasTruncateMarker":true,"authors":[{"name":"Joey Riches","title":"Solus Staff","page":{"permalink":"/blog/authors/joey"},"socials":{"github":"https://github.com/joebonrichie"},"imageURL":"https://avatars.githubusercontent.com/u/5338090","key":"joey"}],"frontMatter":{"title":"Welcome to the Solus Devlog","description":"Welcome to the Solus Development Log.","slug":"welcome-solus-devlog-v1","authors":"joey","tags":["hello","devlog","firstpost","solus"],"hide_table_of_contents":false},"unlisted":false,"prevItem":{"title":"eopkg is dead, long live eopkg","permalink":"/blog/eopkg-is-dead-long-live-eopkg"}}')}}]); \ No newline at end of file diff --git a/assets/js/a52026b8.d25a67cc.js b/assets/js/a52026b8.d25a67cc.js deleted file mode 100644 index 2211612bd..000000000 --- a/assets/js/a52026b8.d25a67cc.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[7862],{19253:(e,o,t)=>{t.r(o),t.d(o,{assets:()=>r,contentTitle:()=>i,default:()=>g,frontMatter:()=>n,metadata:()=>a,toc:()=>c});var l=t(85893),s=t(11151);const n={title:"Welcome to the Solus Devlog",description:"Welcome to the Solus Development Log.",slug:"welcome-solus-devlog-v1",authors:"joey",tags:["hello","devlog","firstpost","solus"],hide_table_of_contents:!1},i=void 0,a={permalink:"/blog/welcome-solus-devlog-v1",source:"@site/devlog/2024-01-13-welcome-devlog.md",title:"Welcome to the Solus Devlog",description:"Welcome to the Solus Development Log.",date:"2024-01-13T00:00:00.000Z",tags:[{inline:!0,label:"hello",permalink:"/blog/tags/hello"},{inline:!0,label:"devlog",permalink:"/blog/tags/devlog"},{inline:!0,label:"firstpost",permalink:"/blog/tags/firstpost"},{inline:!0,label:"solus",permalink:"/blog/tags/solus"}],readingTime:.9,hasTruncateMarker:!0,authors:[{name:"Joey Riches",title:"Solus Staff",page:{permalink:"/blog/authors/joey"},socials:{github:"https://github.com/joebonrichie"},imageURL:"https://avatars.githubusercontent.com/u/5338090",key:"joey"}],frontMatter:{title:"Welcome to the Solus Devlog",description:"Welcome to the Solus Development Log.",slug:"welcome-solus-devlog-v1",authors:"joey",tags:["hello","devlog","firstpost","solus"],hide_table_of_contents:!1},unlisted:!1,prevItem:{title:"eopkg is dead, long live eopkg",permalink:"/blog/eopkg-is-dead-long-live-eopkg"}},r={authorsImageUrls:[void 0]},c=[];function u(e){const o={p:"p",...(0,s.a)(),...e.components};return(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)(o.p,{children:"Welcome to the Solus Development Log."}),"\n",(0,l.jsx)(o.p,{children:"The Solus Development Log will be used by Solus Staff and outside contributors to highlight wins and changes in Solus. Keep an eye on this space."})]})}function g(e={}){const{wrapper:o}={...(0,s.a)(),...e.components};return o?(0,l.jsx)(o,{...e,children:(0,l.jsx)(u,{...e})}):u(e)}},11151:(e,o,t)=>{t.d(o,{Z:()=>a,a:()=>i});var l=t(67294);const s={},n=l.createContext(s);function i(e){const o=l.useContext(n);return l.useMemo((function(){return"function"==typeof e?e(o):{...o,...e}}),[o,e])}function a(e){let o;return o=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:i(e.components),l.createElement(n.Provider,{value:o},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/a6aa9e1f.4c879bac.js b/assets/js/a6aa9e1f.4c879bac.js deleted file mode 100644 index 13ee3db73..000000000 --- a/assets/js/a6aa9e1f.4c879bac.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[3089],{33587:(e,t,n)=>{n.r(t),n.d(t,{default:()=>m});n(67294);var s=n(36905),a=n(75276),i=n(96984),r=n(50563),l=n(50429),o=n(17091),c=n(62362),p=n(82957),d=n(79722),g=n(58112),h=n(85893);function u(e){const t=(0,g.CS)(e);return(0,h.jsx)(d.Z,{children:(0,h.jsx)("script",{type:"application/ld+json",children:JSON.stringify(t)})})}function x(e){const{metadata:t}=e,{siteConfig:{title:n}}=(0,a.Z)(),{blogDescription:s,blogTitle:r,permalink:l}=t,o="/"===l?n:r;return(0,h.jsxs)(h.Fragment,{children:[(0,h.jsx)(i.d,{title:o,description:s}),(0,h.jsx)(c.Z,{tag:"blog_posts_list"})]})}function j(e){const{metadata:t,items:n,sidebar:s}=e;return(0,h.jsxs)(l.Z,{sidebar:s,children:[(0,h.jsx)(p.Z,{items:n}),(0,h.jsx)(o.Z,{metadata:t})]})}function m(e){return(0,h.jsxs)(i.FG,{className:(0,s.Z)(r.k.wrapper.blogPages,r.k.page.blogListPage),children:[(0,h.jsx)(x,{...e}),(0,h.jsx)(u,{...e}),(0,h.jsx)(j,{...e})]})}},17091:(e,t,n)=>{n.d(t,{Z:()=>r});n(67294);var s=n(55361),a=n(60968),i=n(85893);function r(e){const{metadata:t}=e,{previousPage:n,nextPage:r}=t;return(0,i.jsxs)("nav",{className:"pagination-nav","aria-label":(0,s.I)({id:"theme.blog.paginator.navAriaLabel",message:"Blog list page navigation",description:"The ARIA label for the blog pagination"}),children:[n&&(0,i.jsx)(a.Z,{permalink:n,title:(0,i.jsx)(s.Z,{id:"theme.blog.paginator.newerEntries",description:"The label used to navigate to the newer blog posts page (previous page)",children:"Newer entries"})}),r&&(0,i.jsx)(a.Z,{permalink:r,title:(0,i.jsx)(s.Z,{id:"theme.blog.paginator.olderEntries",description:"The label used to navigate to the older blog posts page (next page)",children:"Older entries"}),isNext:!0})]})}},82957:(e,t,n)=>{n.d(t,{Z:()=>r});n(67294);var s=n(58112),a=n(81782),i=n(85893);function r(e){let{items:t,component:n=a.Z}=e;return(0,i.jsx)(i.Fragment,{children:t.map((e=>{let{content:t}=e;return(0,i.jsx)(s.n4,{content:t,children:(0,i.jsx)(n,{children:(0,i.jsx)(t,{})})},t.metadata.permalink)}))})}}}]); \ No newline at end of file diff --git a/assets/js/a6aa9e1f.5913345c.js b/assets/js/a6aa9e1f.5913345c.js new file mode 100644 index 000000000..0fd87c13a --- /dev/null +++ b/assets/js/a6aa9e1f.5913345c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([["8514"],{34760:function(e,t,r){r.r(t),r.d(t,{default:()=>j});var n=r("85893");r("67294");var l=r("74904"),a=r("93934"),i=r("81921"),s=r("50490"),o=r("30928"),c=r("40043"),d=r("49868"),u=r("30955"),m=r("50777"),g=r("75700");function h(e){let t=(0,g.CS)(e);return(0,n.jsx)(m.Z,{children:(0,n.jsx)("script",{type:"application/ld+json",children:JSON.stringify(t)})})}function x(e){let{metadata:t}=e,{siteConfig:{title:r}}=(0,a.Z)(),{blogDescription:l,blogTitle:s,permalink:o}=t;return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(i.d,{title:"/"===o?r:s,description:l}),(0,n.jsx)(d.Z,{tag:"blog_posts_list"})]})}function p(e){let{metadata:t,items:r,sidebar:l}=e;return(0,n.jsxs)(o.Z,{sidebar:l,children:[(0,n.jsx)(u.Z,{items:r}),(0,n.jsx)(c.Z,{metadata:t})]})}function j(e){return(0,n.jsxs)(i.FG,{className:(0,l.Z)(s.k.wrapper.blogPages,s.k.page.blogListPage),children:[(0,n.jsx)(x,{...e}),(0,n.jsx)(h,{...e}),(0,n.jsx)(p,{...e})]})}},40043:function(e,t,r){r.d(t,{Z:function(){return i}});var n=r(85893);r(67294);var l=r(1822),a=r(15779);function i(e){let{metadata:t}=e,{previousPage:r,nextPage:i}=t;return(0,n.jsxs)("nav",{className:"pagination-nav","aria-label":(0,l.I)({id:"theme.blog.paginator.navAriaLabel",message:"Blog list page navigation",description:"The ARIA label for the blog pagination"}),children:[r&&(0,n.jsx)(a.Z,{permalink:r,title:(0,n.jsx)(l.Z,{id:"theme.blog.paginator.newerEntries",description:"The label used to navigate to the newer blog posts page (previous page)",children:"Newer entries"})}),i&&(0,n.jsx)(a.Z,{permalink:i,title:(0,n.jsx)(l.Z,{id:"theme.blog.paginator.olderEntries",description:"The label used to navigate to the older blog posts page (next page)",children:"Older entries"}),isNext:!0})]})}},35825:function(e,t,r){r.d(t,{Z:()=>R});var n=r("85893");r("67294");var l=r("74904"),a=r("75700");function i(e){let{children:t,className:r}=e;return(0,n.jsx)("article",{className:r,children:t})}var s=r("27544");let o="title_f1Hy";function c(e){let{className:t}=e,{metadata:r,isBlogPostPage:i}=(0,a.nO)(),{permalink:c,title:d}=r;return(0,n.jsx)(i?"h1":"h2",{className:(0,l.Z)(o,t),children:i?d:(0,n.jsx)(s.Z,{to:c,children:d})})}var d=r("1822"),u=r("67984"),m=r("28291");let g="container_mt6G";function h(e){let{readingTime:t}=e,r=function(){let{selectMessage:e}=(0,u.c)();return t=>{let r=Math.ceil(t);return e(r,(0,d.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:r}))}}();return(0,n.jsx)(n.Fragment,{children:r(t)})}function x(e){let{date:t,formattedDate:r}=e;return(0,n.jsx)("time",{dateTime:t,children:r})}function p(){return(0,n.jsx)(n.Fragment,{children:" \xb7 "})}function j(e){let t,{className:r}=e,{metadata:i}=(0,a.nO)(),{date:s,readingTime:o}=i,c=(0,m.P)({day:"numeric",month:"long",year:"numeric",timeZone:"UTC"});return(0,n.jsxs)("div",{className:(0,l.Z)(g,"margin-vert--md",r),children:[(0,n.jsx)(x,{date:s,formattedDate:(t=s,c.format(new Date(t)))}),void 0!==o&&(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(p,{}),(0,n.jsx)(h,{readingTime:o})]})]})}var f=r("91941");let b={authorCol:"authorCol_Hf19",imageOnlyAuthorRow:"imageOnlyAuthorRow_pa_O",imageOnlyAuthorCol:"imageOnlyAuthorCol_G86a"};function Z(e){let{className:t}=e,{metadata:{authors:r},assets:i}=(0,a.nO)();if(0===r.length)return null;let s=r.every(e=>{let{name:t}=e;return!t}),o=1===r.length;return(0,n.jsx)("div",{className:(0,l.Z)("margin-top--md margin-bottom--sm",s?b.imageOnlyAuthorRow:"row",t),children:r.map((e,t)=>(0,n.jsx)("div",{className:(0,l.Z)(!s&&(o?"col col--12":"col col--6"),s?b.imageOnlyAuthorCol:b.authorCol),children:(0,n.jsx)(f.Z,{author:{...e,imageURL:i.authorsImageUrls[t]??e.imageURL}})},t))})}function v(){return(0,n.jsxs)("header",{children:[(0,n.jsx)(c,{}),(0,n.jsx)(j,{}),(0,n.jsx)(Z,{})]})}var w=r("3062"),N=r("27913");function O(e){let{children:t,className:r}=e,{isBlogPostPage:i}=(0,a.nO)();return(0,n.jsx)("div",{id:i?w.blogPostContainerID:void 0,className:(0,l.Z)("markdown",r),children:(0,n.jsx)(N.Z,{children:t})})}var k=r("50490"),y=r("57216"),_=r("50905");function A(){return(0,n.jsx)("b",{children:(0,n.jsx)(d.Z,{id:"theme.blog.post.readMore",description:"The label used in blog post item excerpts to link to full blog posts",children:"Read more"})})}function C(e){let{blogPostTitle:t,...r}=e;return(0,n.jsx)(s.Z,{"aria-label":(0,d.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}),...r,children:(0,n.jsx)(A,{})})}function T(){let{metadata:e,isBlogPostPage:t}=(0,a.nO)(),{tags:r,title:i,editUrl:s,hasTruncateMarker:o,lastUpdatedBy:c,lastUpdatedAt:d}=e,u=!t&&o,m=r.length>0;if(!(m||u||s))return null;if(!t)return(0,n.jsxs)("footer",{className:"row docusaurus-mt-lg",children:[m&&(0,n.jsx)("div",{className:(0,l.Z)("col",{"col--9":u}),children:(0,n.jsx)(_.Z,{tags:r})}),u&&(0,n.jsx)("div",{className:(0,l.Z)("col text--right",{"col--3":m}),children:(0,n.jsx)(C,{blogPostTitle:i,to:e.permalink})})]});{let e=!!(s||d||c);return(0,n.jsxs)("footer",{className:"docusaurus-mt-lg",children:[m&&(0,n.jsx)("div",{className:(0,l.Z)("row","margin-top--sm",k.k.blog.blogFooterEditMetaRow),children:(0,n.jsx)("div",{className:"col",children:(0,n.jsx)(_.Z,{tags:r})})}),e&&(0,n.jsx)(y.Z,{className:(0,l.Z)("margin-top--sm",k.k.blog.blogFooterEditMetaRow),editUrl:s,lastUpdatedAt:d,lastUpdatedBy:c})]})}}function R(e){let{children:t,className:r}=e,s=function(){let{isBlogPostPage:e}=(0,a.nO)();return e?void 0:"margin-bottom--xl"}();return(0,n.jsxs)(i,{className:(0,l.Z)(s,r),children:[(0,n.jsx)(v,{}),(0,n.jsx)(O,{children:t}),(0,n.jsx)(T,{})]})}},30955:function(e,t,r){r.d(t,{Z:function(){return i}});var n=r(85893);r(67294);var l=r(75700),a=r(35825);function i(e){let{items:t,component:r=a.Z}=e;return(0,n.jsx)(n.Fragment,{children:t.map(e=>{let{content:t}=e;return(0,n.jsx)(l.n4,{content:t,children:(0,n.jsx)(r,{children:(0,n.jsx)(t,{})})},t.metadata.permalink)})})}}}]); \ No newline at end of file diff --git a/assets/js/a6c0fb2f.5a3c7a0e.js b/assets/js/a6c0fb2f.5a3c7a0e.js new file mode 100644 index 000000000..7ba64caee --- /dev/null +++ b/assets/js/a6c0fb2f.5a3c7a0e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([["6973"],{51346:function(e,t,n){n.r(t),n.d(t,{assets:function(){return r},contentTitle:function(){return l},default:function(){return d},frontMatter:function(){return i},metadata:function(){return a},toc:function(){return h}});var a=n(71752),o=n(85893),s=n(50065);let i={title:"Clean, clean, clean!",slug:"clean-clean-clean",authors:"alfi",tags:["housekeeping","cleanup","devlog","solus"],hide_table_of_contents:!1},l=void 0,r={authorsImageUrls:[void 0]},h=[{value:"A bit of background",id:"a-bit-of-background",level:2},{value:"What is it?",id:"what-is-it",level:2},{value:"Why bother?",id:"why-bother",level:2},{value:"What we accomplished",id:"what-we-accomplished",level:2},{value:"What next?",id:"what-next",level:2},{value:"Want to help?",id:"want-to-help",level:2},{value:"Closing thoughts",id:"closing-thoughts",level:2}];function c(e){let t={a:"a",code:"code",em:"em",h2:"h2",li:"li",ol:"ol",p:"p",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,s.a)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(t.p,{children:"Hello everyone! Alfi here, member of Solus Cleanup Crew. It's been more than a year since I started contributing to Solus and I want to talk about it. About what I did, what we did, what we accomplished so far, and what we want to do next."}),"\n",(0,o.jsx)(t.h2,{id:"a-bit-of-background",children:"A bit of background"}),"\n",(0,o.jsxs)(t.p,{children:["I started contributing in October 2023, when Solus participated in ",(0,o.jsx)(t.a,{href:"https://getsol.us/2023/10/01/solus-and-hacktoberfest-2023/",children:"Hacktoberfest"}),". Hacktoberfest is a month-long event that encourage people to contribute to open source project in exchange for some digital merchandise. Finally, an excuse to contribute to something I use every day. Although, as an accountant, all of this is new experience to me. It was confusing at first, but I persisted. Finally, I got the hang of it and I managed to submit around 100 pull request during the month of the event. I was very excited and motivated. During the month, a few people joined the event and contributed to Solus, but then November came and most of the contribution slowed down. I was the only one left that continued doing the beginner tasks, mostly adding homepage to packages."]}),"\n",(0,o.jsxs)(t.p,{children:["At the start of January 2024, Jakob Gezelius (",(0,o.jsx)(t.a,{href:"https://github.com/androidnisse",children:"androidnisse"}),') comes in and starts contributing to homepage task too. Worried that we would stepped on each other\'s feet, we started a private chat to organize the tasks between ourselves. Until May, the two of us had been chipping away at the homepage task which at this point left 650 packages without a homepage. Then we had more contributors joining. I decided to make a group chat to accommodate all the people joining. It was called "Solus Homepage Team" at the time. More contributors and staff members joined the room, then it was renamed as "Solus Cleanup Crew" and moved under the official Solus matrix space.']}),"\n",(0,o.jsx)(t.h2,{id:"what-is-it",children:"What is it?"}),"\n",(0,o.jsx)(t.p,{children:"Solus cleanup crew is a group of community contributors as as well staff members with the goal of bringing the Solus package repository up to current standard. It is a subset of the packaging room on our matrix channel. We organize the work on all the cleanup related tasks."}),"\n",(0,o.jsx)(t.h2,{id:"why-bother",children:"Why bother?"}),"\n",(0,o.jsx)(t.p,{children:"Solus has been updating their tooling and infrastructure since its resurrection. While most of the tooling changes can be accomplished by staff members alone, there are things that they cannot do. While many consider Solus repository as small, it still contains more than 6000 packages. Some packages have never even gotten an update since Solus was first created! We want to get rid of all its cruft before we can migrate to a better tooling. That's where the community contributor can come in and help."}),"\n",(0,o.jsx)(t.p,{children:"For me personally, it is a chance to learn something new and fill my time with more purpose. Sometimes, I feel like a slob scrolling through things, opening the same three apps over and over or sleeping midday. Technically speaking, doing packaging is still scrolling through things, still opening the same three apps over and over, and I still get my midday nap, but now it is with purpose. I love that what I do can be enjoyed by other people. It is mostly invisible and not even noticed by people, but the chance of it helping people gives me so much joy. Why bother? Because I love it."}),"\n",(0,o.jsx)(t.h2,{id:"what-we-accomplished",children:"What we accomplished"}),"\n",(0,o.jsx)(t.p,{children:"We create a few repository wide task that can done with little reading of our packaging guide. The keen-eyed of you may have already seen these tasks. It is always attached at the end of every Sync Updates since July. These are the tasks we did:"}),"\n",(0,o.jsxs)(t.table,{children:[(0,o.jsx)(t.thead,{children:(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.th,{children:"No."}),(0,o.jsx)(t.th,{children:"Task"}),(0,o.jsx)(t.th,{children:"Date Started"}),(0,o.jsx)(t.th,{children:"Start count"}),(0,o.jsx)(t.th,{children:"Current count"})]})}),(0,o.jsxs)(t.tbody,{children:[(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.td,{children:"1."}),(0,o.jsx)(t.td,{children:(0,o.jsx)(t.a,{href:"https://github.com/getsolus/packages/issues/411",children:"Adding homepage key to package.yml"})}),(0,o.jsx)(t.td,{children:"30-09-2023"}),(0,o.jsx)(t.td,{children:"2300"}),(0,o.jsx)(t.td,{children:"8"})]}),(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.td,{children:"2."}),(0,o.jsx)(t.td,{children:(0,o.jsx)(t.a,{href:"https://github.com/getsolus/packages/issues/449",children:"Adding AppStream metainfo to all font packages"})}),(0,o.jsx)(t.td,{children:"06-10-2023"}),(0,o.jsx)(t.td,{children:"38"}),(0,o.jsx)(t.td,{children:"Done \uD83C\uDF89"})]}),(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.td,{children:"3."}),(0,o.jsx)(t.td,{children:(0,o.jsx)(t.a,{href:"https://github.com/getsolus/packages/issues/1389",children:"Adding AppStream metainfo to all graphical applications"})}),(0,o.jsx)(t.td,{children:"22-01-2024"}),(0,o.jsx)(t.td,{children:"316"}),(0,o.jsx)(t.td,{children:"198"})]}),(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.td,{children:"4."}),(0,o.jsx)(t.td,{children:(0,o.jsx)(t.a,{href:"https://github.com/getsolus/packages/issues/3111",children:"Applying new cargo macros"})}),(0,o.jsx)(t.td,{children:"27-06-2024"}),(0,o.jsx)(t.td,{children:"37"}),(0,o.jsx)(t.td,{children:"Done \uD83C\uDF89"})]}),(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.td,{children:"5."}),(0,o.jsx)(t.td,{children:(0,o.jsx)(t.a,{href:"https://github.com/getsolus/packages/issues/4116",children:"Changing all packages with homepages pointing to wiki.gnome.org"})}),(0,o.jsx)(t.td,{children:"20-10-2024"}),(0,o.jsx)(t.td,{children:"87"}),(0,o.jsx)(t.td,{children:"62"})]}),(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.td,{children:"6."}),(0,o.jsx)(t.td,{children:(0,o.jsx)(t.a,{href:"https://github.com/getsolus/packages/issues/4121",children:"Adding monitoring.yml"})}),(0,o.jsx)(t.td,{children:"21-10-2024"}),(0,o.jsx)(t.td,{children:"3070"}),(0,o.jsx)(t.td,{children:"2937"})]}),(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.td,{children:"7."}),(0,o.jsx)(t.td,{children:(0,o.jsx)(t.a,{href:"https://github.com/getsolus/packages/issues?q=is%3Aopen+is%3Aissue+label%3A%22Packaging+Problem%22",children:"Tagging packages that do not build"})}),(0,o.jsx)(t.td,{children:"Ongoing"}),(0,o.jsx)(t.td,{children:"N/A"}),(0,o.jsx)(t.td,{children:"13"})]}),(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.td,{children:"8."}),(0,o.jsx)(t.td,{children:(0,o.jsx)(t.a,{href:"https://github.com/getsolus/packages/issues?q=is%3Aopen+is%3Aissue+label%3A%22Package%3A+Removal+Request%22",children:"Tagging packages that should be deprecated"})}),(0,o.jsx)(t.td,{children:"Ongoing"}),(0,o.jsx)(t.td,{children:"N/A"}),(0,o.jsx)(t.td,{children:"25"})]})]})]}),"\n",(0,o.jsx)(t.p,{children:"As you can see from the table above, we just completed two tasks and we are close to completing homepage task. Packages that do not build also are also getting solved one by one. Right now, there are 12 people in Solus Cleanup Crew Matrix room, 6 of them are new contributors. We also create a new AppStream metainfo documentation, clean up our issue templates, implement a better tagging system for organizing issues and much more. Solus Cleanup Crew is also becoming a place where we can onboard new contributors and recruit new staff. I thought we accomplished a lot and I am happy with it."}),"\n",(0,o.jsx)(t.h2,{id:"what-next",children:"What next?"}),"\n",(0,o.jsxs)(t.p,{children:["We want to focus on adding appstream metainfo for remaining 200 packages, in line with the goal of 4.7 ISO. It will not be easy nor quick, but we will try our best. We want Solus users to have the best experience possible when we finally say goodbye to ",(0,o.jsx)(t.code,{children:"solus-sc"})," and switch to modern software center (Gnome Software and KDE Discover). We want you to be able to install all graphical application from software center and have all the relevant information (Legible screenshot, Hi-Res Icon, good description, etc)."]}),"\n",(0,o.jsxs)(t.p,{children:["We also want to add more ",(0,o.jsx)(t.a,{href:"https://help.getsol.us/docs/packaging/monitoring.yml",children:"monitoring.yml"})," files to packages, so we can utilize our proof-of-concept ",(0,o.jsx)(t.a,{href:"https://shared.getsol.us/justin/updates/",children:'"Package Update Monitor"'})," created by ",(0,o.jsx)(t.a,{href:"https://github.com/Justinzobel",children:"Justin Zobel"}),". I, myself and ",(0,o.jsx)(t.a,{href:"https://github.com/joebonrichie",children:"Joey Riches"}),' will explore the possibility of curating our own "Editor\'s Choice" and "Featured Apps" in Gnome Software, made possible by ',(0,o.jsx)(t.a,{href:"https://gitlab.gnome.org/GNOME/gnome-app-list",children:(0,o.jsx)(t.code,{children:"gnome-app-list"})}),". I think the road ahead is very exciting for us and hopefully for you too!"]}),"\n",(0,o.jsx)(t.h2,{id:"want-to-help",children:"Want to help?"}),"\n",(0,o.jsxs)(t.p,{children:["We are always eager for people to join and spend their time contributing to Solus. There are many ways you can ",(0,o.jsx)(t.a,{href:"https://help.getsol.us/docs/user/contributing/getting-involved",children:"contribute"}),", but for me it is packaging. For me, packaging can be relaxing, sometimes frustrating, but always gives me joy at the end. If you are interested to dip your toe on packaging and want to help us, here are the simple steps:"]}),"\n",(0,o.jsxs)(t.ol,{children:["\n",(0,o.jsx)(t.li,{children:"Join the Solus Packaging Room on Matrix"}),"\n",(0,o.jsxs)(t.li,{children:["Read and practice our ",(0,o.jsx)(t.a,{href:"https://help.getsol.us/docs/packaging/",children:"packaging documentation"})]}),"\n",(0,o.jsx)(t.li,{children:"Submit your first Pull Request. We recommend doing the wiki gnome task or monitoring task"}),"\n",(0,o.jsx)(t.li,{children:"Follow along the review process until your PR gets merged"}),"\n",(0,o.jsx)(t.li,{children:"Continue on contributing and you might get invited to Solus Cleanup Crew"}),"\n"]}),"\n",(0,o.jsx)(t.h2,{id:"closing-thoughts",children:"Closing thoughts"}),"\n",(0,o.jsxs)(t.p,{children:["I want to thank all the contributors that made all of this possible. It was such a wonderful effort from everyone and we will strive to keep that up. Let me know if you are interested in a follow-up blog about the detail of doing packaging for Solus. ",(0,o.jsx)(t.em,{children:"Terima kasih dan sampai jumpa"}),"!"]})]})}function d(e={}){let{wrapper:t}={...(0,s.a)(),...e.components};return t?(0,o.jsx)(t,{...e,children:(0,o.jsx)(c,{...e})}):c(e)}},50065:function(e,t,n){n.d(t,{Z:function(){return l},a:function(){return i}});var a=n(67294);let o={},s=a.createContext(o);function i(e){let t=a.useContext(s);return a.useMemo(function(){return"function"==typeof e?e(t):{...t,...e}},[t,e])}function l(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:i(e.components),a.createElement(s.Provider,{value:t},e.children)}},71752:function(e){e.exports=JSON.parse('{"permalink":"/blog/clean-clean-clean","source":"@site/devlog/2024-11-21-clean-cleanl-clean.md","title":"Clean, clean, clean!","description":"Hello everyone! Alfi here, member of Solus Cleanup Crew. It\'s been more than a year since I started contributing to Solus and I want to talk about it. About what I did, what we did, what we accomplished so far, and what we want to do next.","date":"2024-11-21T00:00:00.000Z","tags":[{"inline":true,"label":"housekeeping","permalink":"/blog/tags/housekeeping"},{"inline":true,"label":"cleanup","permalink":"/blog/tags/cleanup"},{"inline":true,"label":"devlog","permalink":"/blog/tags/devlog"},{"inline":true,"label":"solus","permalink":"/blog/tags/solus"}],"readingTime":5.585,"hasTruncateMarker":true,"authors":[{"name":"Muhammad Alfi Syahrin","title":"Solus Staff","page":{"permalink":"/blog/authors/alfi"},"socials":{"github":"https://github.com/malfisya"},"imageURL":"https://avatars.githubusercontent.com/u/101771435","key":"alfi"}],"frontMatter":{"title":"Clean, clean, clean!","slug":"clean-clean-clean","authors":"alfi","tags":["housekeeping","cleanup","devlog","solus"],"hide_table_of_contents":false},"unlisted":false,"nextItem":{"title":"Intro to Optimizing Packages on Solus","permalink":"/blog/solus-optimizing-packages"}}')}}]); \ No newline at end of file diff --git a/assets/js/a6c0fb2f.5ab50382.js b/assets/js/a6c0fb2f.5ab50382.js deleted file mode 100644 index 2042c3e85..000000000 --- a/assets/js/a6c0fb2f.5ab50382.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[6335],{54501:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>r,contentTitle:()=>i,default:()=>d,frontMatter:()=>s,metadata:()=>l,toc:()=>h});var a=n(85893),o=n(11151);const s={title:"Clean, clean, clean!",slug:"clean-clean-clean",authors:"alfi",tags:["housekeeping","cleanup","devlog","solus"],hide_table_of_contents:!1},i=void 0,l={permalink:"/blog/clean-clean-clean",source:"@site/devlog/2024-11-21-clean-cleanl-clean.md",title:"Clean, clean, clean!",description:"Hello everyone! Alfi here, member of Solus Cleanup Crew. It's been more than a year since I started contributing to Solus and I want to talk about it. About what I did, what we did, what we accomplished so far, and what we want to do next.",date:"2024-11-21T00:00:00.000Z",tags:[{inline:!0,label:"housekeeping",permalink:"/blog/tags/housekeeping"},{inline:!0,label:"cleanup",permalink:"/blog/tags/cleanup"},{inline:!0,label:"devlog",permalink:"/blog/tags/devlog"},{inline:!0,label:"solus",permalink:"/blog/tags/solus"}],readingTime:5.585,hasTruncateMarker:!0,authors:[{name:"Muhammad Alfi Syahrin",title:"Solus Staff",page:{permalink:"/blog/authors/alfi"},socials:{github:"https://github.com/malfisya"},imageURL:"https://avatars.githubusercontent.com/u/101771435",key:"alfi"}],frontMatter:{title:"Clean, clean, clean!",slug:"clean-clean-clean",authors:"alfi",tags:["housekeeping","cleanup","devlog","solus"],hide_table_of_contents:!1},unlisted:!1,nextItem:{title:"Intro to Optimizing Packages on Solus",permalink:"/blog/solus-optimizing-packages"}},r={authorsImageUrls:[void 0]},h=[{value:"A bit of background",id:"a-bit-of-background",level:2},{value:"What is it?",id:"what-is-it",level:2},{value:"Why bother?",id:"why-bother",level:2},{value:"What we accomplished",id:"what-we-accomplished",level:2},{value:"What next?",id:"what-next",level:2},{value:"Want to help?",id:"want-to-help",level:2},{value:"Closing thoughts",id:"closing-thoughts",level:2}];function c(e){const t={a:"a",code:"code",em:"em",h2:"h2",li:"li",ol:"ol",p:"p",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,o.a)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(t.p,{children:"Hello everyone! Alfi here, member of Solus Cleanup Crew. It's been more than a year since I started contributing to Solus and I want to talk about it. About what I did, what we did, what we accomplished so far, and what we want to do next."}),"\n",(0,a.jsx)(t.h2,{id:"a-bit-of-background",children:"A bit of background"}),"\n",(0,a.jsxs)(t.p,{children:["I started contributing in October 2023, when Solus participated in ",(0,a.jsx)(t.a,{href:"https://getsol.us/2023/10/01/solus-and-hacktoberfest-2023/",children:"Hacktoberfest"}),". Hacktoberfest is a month-long event that encourage people to contribute to open source project in exchange for some digital merchandise. Finally, an excuse to contribute to something I use every day. Although, as an accountant, all of this is new experience to me. It was confusing at first, but I persisted. Finally, I got the hang of it and I managed to submit around 100 pull request during the month of the event. I was very excited and motivated. During the month, a few people joined the event and contributed to Solus, but then November came and most of the contribution slowed down. I was the only one left that continued doing the beginner tasks, mostly adding homepage to packages."]}),"\n",(0,a.jsxs)(t.p,{children:["At the start of January 2024, Jakob Gezelius (",(0,a.jsx)(t.a,{href:"https://github.com/androidnisse",children:"androidnisse"}),') comes in and starts contributing to homepage task too. Worried that we would stepped on each other\'s feet, we started a private chat to organize the tasks between ourselves. Until May, the two of us had been chipping away at the homepage task which at this point left 650 packages without a homepage. Then we had more contributors joining. I decided to make a group chat to accommodate all the people joining. It was called "Solus Homepage Team" at the time. More contributors and staff members joined the room, then it was renamed as "Solus Cleanup Crew" and moved under the official Solus matrix space.']}),"\n",(0,a.jsx)(t.h2,{id:"what-is-it",children:"What is it?"}),"\n",(0,a.jsx)(t.p,{children:"Solus cleanup crew is a group of community contributors as as well staff members with the goal of bringing the Solus package repository up to current standard. It is a subset of the packaging room on our matrix channel. We organize the work on all the cleanup related tasks."}),"\n",(0,a.jsx)(t.h2,{id:"why-bother",children:"Why bother?"}),"\n",(0,a.jsx)(t.p,{children:"Solus has been updating their tooling and infrastructure since its resurrection. While most of the tooling changes can be accomplished by staff members alone, there are things that they cannot do. While many consider Solus repository as small, it still contains more than 6000 packages. Some packages have never even gotten an update since Solus was first created! We want to get rid of all its cruft before we can migrate to a better tooling. That's where the community contributor can come in and help."}),"\n",(0,a.jsx)(t.p,{children:"For me personally, it is a chance to learn something new and fill my time with more purpose. Sometimes, I feel like a slob scrolling through things, opening the same three apps over and over or sleeping midday. Technically speaking, doing packaging is still scrolling through things, still opening the same three apps over and over, and I still get my midday nap, but now it is with purpose. I love that what I do can be enjoyed by other people. It is mostly invisible and not even noticed by people, but the chance of it helping people gives me so much joy. Why bother? Because I love it."}),"\n",(0,a.jsx)(t.h2,{id:"what-we-accomplished",children:"What we accomplished"}),"\n",(0,a.jsx)(t.p,{children:"We create a few repository wide task that can done with little reading of our packaging guide. The keen-eyed of you may have already seen these tasks. It is always attached at the end of every Sync Updates since July. These are the tasks we did:"}),"\n",(0,a.jsxs)(t.table,{children:[(0,a.jsx)(t.thead,{children:(0,a.jsxs)(t.tr,{children:[(0,a.jsx)(t.th,{children:"No."}),(0,a.jsx)(t.th,{children:"Task"}),(0,a.jsx)(t.th,{children:"Date Started"}),(0,a.jsx)(t.th,{children:"Start count"}),(0,a.jsx)(t.th,{children:"Current count"})]})}),(0,a.jsxs)(t.tbody,{children:[(0,a.jsxs)(t.tr,{children:[(0,a.jsx)(t.td,{children:"1."}),(0,a.jsx)(t.td,{children:(0,a.jsx)(t.a,{href:"https://github.com/getsolus/packages/issues/411",children:"Adding homepage key to package.yml"})}),(0,a.jsx)(t.td,{children:"30-09-2023"}),(0,a.jsx)(t.td,{children:"2300"}),(0,a.jsx)(t.td,{children:"8"})]}),(0,a.jsxs)(t.tr,{children:[(0,a.jsx)(t.td,{children:"2."}),(0,a.jsx)(t.td,{children:(0,a.jsx)(t.a,{href:"https://github.com/getsolus/packages/issues/449",children:"Adding AppStream metainfo to all font packages"})}),(0,a.jsx)(t.td,{children:"06-10-2023"}),(0,a.jsx)(t.td,{children:"38"}),(0,a.jsx)(t.td,{children:"Done \ud83c\udf89"})]}),(0,a.jsxs)(t.tr,{children:[(0,a.jsx)(t.td,{children:"3."}),(0,a.jsx)(t.td,{children:(0,a.jsx)(t.a,{href:"https://github.com/getsolus/packages/issues/1389",children:"Adding AppStream metainfo to all graphical applications"})}),(0,a.jsx)(t.td,{children:"22-01-2024"}),(0,a.jsx)(t.td,{children:"316"}),(0,a.jsx)(t.td,{children:"198"})]}),(0,a.jsxs)(t.tr,{children:[(0,a.jsx)(t.td,{children:"4."}),(0,a.jsx)(t.td,{children:(0,a.jsx)(t.a,{href:"https://github.com/getsolus/packages/issues/3111",children:"Applying new cargo macros"})}),(0,a.jsx)(t.td,{children:"27-06-2024"}),(0,a.jsx)(t.td,{children:"37"}),(0,a.jsx)(t.td,{children:"Done \ud83c\udf89"})]}),(0,a.jsxs)(t.tr,{children:[(0,a.jsx)(t.td,{children:"5."}),(0,a.jsx)(t.td,{children:(0,a.jsx)(t.a,{href:"https://github.com/getsolus/packages/issues/4116",children:"Changing all packages with homepages pointing to wiki.gnome.org"})}),(0,a.jsx)(t.td,{children:"20-10-2024"}),(0,a.jsx)(t.td,{children:"87"}),(0,a.jsx)(t.td,{children:"62"})]}),(0,a.jsxs)(t.tr,{children:[(0,a.jsx)(t.td,{children:"6."}),(0,a.jsx)(t.td,{children:(0,a.jsx)(t.a,{href:"https://github.com/getsolus/packages/issues/4121",children:"Adding monitoring.yml"})}),(0,a.jsx)(t.td,{children:"21-10-2024"}),(0,a.jsx)(t.td,{children:"3070"}),(0,a.jsx)(t.td,{children:"2937"})]}),(0,a.jsxs)(t.tr,{children:[(0,a.jsx)(t.td,{children:"7."}),(0,a.jsx)(t.td,{children:(0,a.jsx)(t.a,{href:"https://github.com/getsolus/packages/issues?q=is%3Aopen+is%3Aissue+label%3A%22Packaging+Problem%22",children:"Tagging packages that do not build"})}),(0,a.jsx)(t.td,{children:"Ongoing"}),(0,a.jsx)(t.td,{children:"N/A"}),(0,a.jsx)(t.td,{children:"13"})]}),(0,a.jsxs)(t.tr,{children:[(0,a.jsx)(t.td,{children:"8."}),(0,a.jsx)(t.td,{children:(0,a.jsx)(t.a,{href:"https://github.com/getsolus/packages/issues?q=is%3Aopen+is%3Aissue+label%3A%22Package%3A+Removal+Request%22",children:"Tagging packages that should be deprecated"})}),(0,a.jsx)(t.td,{children:"Ongoing"}),(0,a.jsx)(t.td,{children:"N/A"}),(0,a.jsx)(t.td,{children:"25"})]})]})]}),"\n",(0,a.jsx)(t.p,{children:"As you can see from the table above, we just completed two tasks and we are close to completing homepage task. Packages that do not build also are also getting solved one by one. Right now, there are 12 people in Solus Cleanup Crew Matrix room, 6 of them are new contributors. We also create a new AppStream metainfo documentation, clean up our issue templates, implement a better tagging system for organizing issues and much more. Solus Cleanup Crew is also becoming a place where we can onboard new contributors and recruit new staff. I thought we accomplished a lot and I am happy with it."}),"\n",(0,a.jsx)(t.h2,{id:"what-next",children:"What next?"}),"\n",(0,a.jsxs)(t.p,{children:["We want to focus on adding appstream metainfo for remaining 200 packages, in line with the goal of 4.7 ISO. It will not be easy nor quick, but we will try our best. We want Solus users to have the best experience possible when we finally say goodbye to ",(0,a.jsx)(t.code,{children:"solus-sc"})," and switch to modern software center (Gnome Software and KDE Discover). We want you to be able to install all graphical application from software center and have all the relevant information (Legible screenshot, Hi-Res Icon, good description, etc)."]}),"\n",(0,a.jsxs)(t.p,{children:["We also want to add more ",(0,a.jsx)(t.a,{href:"https://help.getsol.us/docs/packaging/monitoring.yml",children:"monitoring.yml"})," files to packages, so we can utilize our proof-of-concept ",(0,a.jsx)(t.a,{href:"https://shared.getsol.us/justin/updates/",children:'"Package Update Monitor"'})," created by ",(0,a.jsx)(t.a,{href:"https://github.com/Justinzobel",children:"Justin Zobel"}),". I, myself and ",(0,a.jsx)(t.a,{href:"https://github.com/joebonrichie",children:"Joey Riches"}),' will explore the possibility of curating our own "Editor\'s Choice" and "Featured Apps" in Gnome Software, made possible by ',(0,a.jsx)(t.a,{href:"https://gitlab.gnome.org/GNOME/gnome-app-list",children:(0,a.jsx)(t.code,{children:"gnome-app-list"})}),". I think the road ahead is very exciting for us and hopefully for you too!"]}),"\n",(0,a.jsx)(t.h2,{id:"want-to-help",children:"Want to help?"}),"\n",(0,a.jsxs)(t.p,{children:["We are always eager for people to join and spend their time contributing to Solus. There are many ways you can ",(0,a.jsx)(t.a,{href:"https://help.getsol.us/docs/user/contributing/getting-involved",children:"contribute"}),", but for me it is packaging. For me, packaging can be relaxing, sometimes frustrating, but always gives me joy at the end. If you are interested to dip your toe on packaging and want to help us, here are the simple steps:"]}),"\n",(0,a.jsxs)(t.ol,{children:["\n",(0,a.jsx)(t.li,{children:"Join the Solus Packaging Room on Matrix"}),"\n",(0,a.jsxs)(t.li,{children:["Read and practice our ",(0,a.jsx)(t.a,{href:"https://help.getsol.us/docs/packaging/",children:"packaging documentation"})]}),"\n",(0,a.jsx)(t.li,{children:"Submit your first Pull Request. We recommend doing the wiki gnome task or monitoring task"}),"\n",(0,a.jsx)(t.li,{children:"Follow along the review process until your PR gets merged"}),"\n",(0,a.jsx)(t.li,{children:"Continue on contributing and you might get invited to Solus Cleanup Crew"}),"\n"]}),"\n",(0,a.jsx)(t.h2,{id:"closing-thoughts",children:"Closing thoughts"}),"\n",(0,a.jsxs)(t.p,{children:["I want to thank all the contributors that made all of this possible. It was such a wonderful effort from everyone and we will strive to keep that up. Let me know if you are interested in a follow-up blog about the detail of doing packaging for Solus. ",(0,a.jsx)(t.em,{children:"Terima kasih dan sampai jumpa"}),"!"]})]})}function d(e={}){const{wrapper:t}={...(0,o.a)(),...e.components};return t?(0,a.jsx)(t,{...e,children:(0,a.jsx)(c,{...e})}):c(e)}},11151:(e,t,n)=>{n.d(t,{Z:()=>l,a:()=>i});var a=n(67294);const o={},s=a.createContext(o);function i(e){const t=a.useContext(s);return a.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function l(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:i(e.components),a.createElement(s.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/a7456010.3f4d399e.js b/assets/js/a7456010.3f4d399e.js deleted file mode 100644 index 2bc904e68..000000000 --- a/assets/js/a7456010.3f4d399e.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[5980],{79365:e=>{e.exports=JSON.parse('{"name":"docusaurus-plugin-content-pages","id":"default"}')}}]); \ No newline at end of file diff --git a/assets/js/a7456010.503de679.js b/assets/js/a7456010.503de679.js new file mode 100644 index 000000000..fb9fc3154 --- /dev/null +++ b/assets/js/a7456010.503de679.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([["7365"],{62050:function(e){e.exports=JSON.parse('{"name":"docusaurus-plugin-content-pages","id":"default"}')}}]); \ No newline at end of file diff --git a/assets/js/a7bd4aaa.28cde8bd.js b/assets/js/a7bd4aaa.28cde8bd.js new file mode 100644 index 000000000..fb81cbc1a --- /dev/null +++ b/assets/js/a7bd4aaa.28cde8bd.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([["5211"],{35327:function(n,e,s){s.r(e),s.d(e,{default:function(){return d}});var r=s(85893);s(67294);var t=s(81921),o=s(73838),l=s(85302),c=s(18790),u=s(49868);function i(n){let{version:e}=n;return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(u.Z,{version:e.version,tag:(0,o.J)(e.pluginId,e.version)}),(0,r.jsx)(t.d,{children:e.noIndex&&(0,r.jsx)("meta",{name:"robots",content:"noindex, nofollow"})})]})}function a(n){let{version:e,route:s}=n;return(0,r.jsx)(t.FG,{className:e.className,children:(0,r.jsx)(l.q,{version:e,children:(0,c.H)(s.routes)})})}function d(n){return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(i,{...n}),(0,r.jsx)(a,{...n})]})}}}]); \ No newline at end of file diff --git a/assets/js/a7bd4aaa.cf59d69a.js b/assets/js/a7bd4aaa.cf59d69a.js deleted file mode 100644 index 6e78b8512..000000000 --- a/assets/js/a7bd4aaa.cf59d69a.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[8518],{89615:(e,n,s)=>{s.r(n),s.d(n,{default:()=>d});s(67294);var r=s(96984),o=s(90447),t=s(72950),c=s(18790),i=s(62362),l=s(85893);function u(e){const{version:n}=e;return(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)(i.Z,{version:n.version,tag:(0,o.J)(n.pluginId,n.version)}),(0,l.jsx)(r.d,{children:n.noIndex&&(0,l.jsx)("meta",{name:"robots",content:"noindex, nofollow"})})]})}function a(e){const{version:n,route:s}=e;return(0,l.jsx)(r.FG,{className:n.className,children:(0,l.jsx)(t.q,{version:n,children:(0,c.H)(s.routes)})})}function d(e){return(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)(u,{...e}),(0,l.jsx)(a,{...e})]})}}}]); \ No newline at end of file diff --git a/assets/js/a94703ab.092bd870.js b/assets/js/a94703ab.092bd870.js deleted file mode 100644 index 0f74f661d..000000000 --- a/assets/js/a94703ab.092bd870.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[4368],{59779:(e,t,n)=>{n.r(t),n.d(t,{default:()=>be});var a=n(67294),o=n(36905),i=n(96984),s=n(50563),l=n(68879),r=n(40217),c=n(55361),d=n(18119),u=n(89062);const m={backToTopButton:"backToTopButton_sjWU",backToTopButtonShow:"backToTopButtonShow_xfvO"};var b=n(85893);function h(){const{shown:e,scrollToTop:t}=function(e){let{threshold:t}=e;const[n,o]=(0,a.useState)(!1),i=(0,a.useRef)(!1),{startScroll:s,cancelScroll:l}=(0,d.Ct)();return(0,d.RF)(((e,n)=>{let{scrollY:a}=e;const s=n?.scrollY;s&&(i.current?i.current=!1:a>=s?(l(),o(!1)):a<t?o(!1):a+window.innerHeight<document.documentElement.scrollHeight&&o(!0))})),(0,u.S)((e=>{e.location.hash&&(i.current=!0,o(!1))})),{shown:n,scrollToTop:()=>s(0)}}({threshold:300});return(0,b.jsx)("button",{"aria-label":(0,c.I)({id:"theme.BackToTopButton.buttonAriaLabel",message:"Scroll back to top",description:"The ARIA label for the back to top button"}),className:(0,o.Z)("clean-btn",s.k.common.backToTopButton,m.backToTopButton,e&&m.backToTopButtonShow),type:"button",onClick:t})}var p=n(68048),x=n(16550),f=n(62550),j=n(39581),k=n(82546);function _(e){return(0,b.jsx)("svg",{width:"20",height:"20","aria-hidden":"true",...e,children:(0,b.jsxs)("g",{fill:"#7a7a7a",children:[(0,b.jsx)("path",{d:"M9.992 10.023c0 .2-.062.399-.172.547l-4.996 7.492a.982.982 0 01-.828.454H1c-.55 0-1-.453-1-1 0-.2.059-.403.168-.551l4.629-6.942L.168 3.078A.939.939 0 010 2.528c0-.548.45-.997 1-.997h2.996c.352 0 .649.18.828.45L9.82 9.472c.11.148.172.347.172.55zm0 0"}),(0,b.jsx)("path",{d:"M19.98 10.023c0 .2-.058.399-.168.547l-4.996 7.492a.987.987 0 01-.828.454h-3c-.547 0-.996-.453-.996-1 0-.2.059-.403.168-.551l4.625-6.942-4.625-6.945a.939.939 0 01-.168-.55 1 1 0 01.996-.997h3c.348 0 .649.18.828.45l4.996 7.492c.11.148.168.347.168.55zm0 0"})]})})}const v={collapseSidebarButton:"collapseSidebarButton_PEFL",collapseSidebarButtonIcon:"collapseSidebarButtonIcon_kv0_"};function g(e){let{onClick:t}=e;return(0,b.jsx)("button",{type:"button",title:(0,c.I)({id:"theme.docs.sidebar.collapseButtonTitle",message:"Collapse sidebar",description:"The title attribute for collapse button of doc sidebar"}),"aria-label":(0,c.I)({id:"theme.docs.sidebar.collapseButtonAriaLabel",message:"Collapse sidebar",description:"The title attribute for collapse button of doc sidebar"}),className:(0,o.Z)("button button--secondary button--outline",v.collapseSidebarButton),onClick:t,children:(0,b.jsx)(_,{className:v.collapseSidebarButtonIcon})})}var C=n(25461),S=n(20585);const I=Symbol("EmptyContext"),N=a.createContext(I);function T(e){let{children:t}=e;const[n,o]=(0,a.useState)(null),i=(0,a.useMemo)((()=>({expandedItem:n,setExpandedItem:o})),[n]);return(0,b.jsx)(N.Provider,{value:i,children:t})}var B=n(93841),Z=n(51997),A=n(38208),L=n(45025);function y(e){let{collapsed:t,categoryLabel:n,onClick:a}=e;return(0,b.jsx)("button",{"aria-label":t?(0,c.I)({id:"theme.DocSidebarItem.expandCategoryAriaLabel",message:"Expand sidebar category '{label}'",description:"The ARIA label to expand the sidebar category"},{label:n}):(0,c.I)({id:"theme.DocSidebarItem.collapseCategoryAriaLabel",message:"Collapse sidebar category '{label}'",description:"The ARIA label to collapse the sidebar category"},{label:n}),"aria-expanded":!t,type:"button",className:"clean-btn menu__caret",onClick:a})}function w(e){let{item:t,onItemClick:n,activePath:i,level:r,index:c,...d}=e;const{items:u,label:m,collapsible:h,className:p,href:x}=t,{docs:{sidebar:{autoCollapseCategories:f}}}=(0,j.L)(),k=function(e){const t=(0,L.Z)();return(0,a.useMemo)((()=>e.href&&!e.linkUnlisted?e.href:!t&&e.collapsible?(0,l.LM)(e):void 0),[e,t])}(t),_=(0,l._F)(t,i),v=(0,Z.Mg)(x,i),{collapsed:g,setCollapsed:C}=(0,B.u)({initialState:()=>!!h&&(!_&&t.collapsed)}),{expandedItem:T,setExpandedItem:w}=function(){const e=(0,a.useContext)(N);if(e===I)throw new S.i6("DocSidebarItemsExpandedStateProvider");return e}(),E=function(e){void 0===e&&(e=!g),w(e?null:c),C(e)};return function(e){let{isActive:t,collapsed:n,updateCollapsed:o}=e;const i=(0,S.D9)(t);(0,a.useEffect)((()=>{t&&!i&&n&&o(!1)}),[t,i,n,o])}({isActive:_,collapsed:g,updateCollapsed:E}),(0,a.useEffect)((()=>{h&&null!=T&&T!==c&&f&&C(!0)}),[h,T,c,C,f]),(0,b.jsxs)("li",{className:(0,o.Z)(s.k.docs.docSidebarItemCategory,s.k.docs.docSidebarItemCategoryLevel(r),"menu__list-item",{"menu__list-item--collapsed":g},p),children:[(0,b.jsxs)("div",{className:(0,o.Z)("menu__list-item-collapsible",{"menu__list-item-collapsible--active":v}),children:[(0,b.jsx)(A.Z,{className:(0,o.Z)("menu__link",{"menu__link--sublist":h,"menu__link--sublist-caret":!x&&h,"menu__link--active":_}),onClick:h?e=>{n?.(t),x?E(!1):(e.preventDefault(),E())}:()=>{n?.(t)},"aria-current":v?"page":void 0,role:h&&!x?"button":void 0,"aria-expanded":h&&!x?!g:void 0,href:h?k??"#":k,...d,children:m}),x&&h&&(0,b.jsx)(y,{collapsed:g,categoryLabel:m,onClick:e=>{e.preventDefault(),E()}})]}),(0,b.jsx)(B.z,{lazy:!0,as:"ul",className:"menu__list",collapsed:g,children:(0,b.jsx)(V,{items:u,tabIndex:g?-1:0,onItemClick:n,activePath:i,level:r+1})})]})}var E=n(41117),H=n(99391);const M={menuExternalLink:"menuExternalLink_NmtK"};function R(e){let{item:t,onItemClick:n,activePath:a,level:i,index:r,...c}=e;const{href:d,label:u,className:m,autoAddBaseUrl:h}=t,p=(0,l._F)(t,a),x=(0,E.Z)(d);return(0,b.jsx)("li",{className:(0,o.Z)(s.k.docs.docSidebarItemLink,s.k.docs.docSidebarItemLinkLevel(i),"menu__list-item",m),children:(0,b.jsxs)(A.Z,{className:(0,o.Z)("menu__link",!x&&M.menuExternalLink,{"menu__link--active":p}),autoAddBaseUrl:h,"aria-current":p?"page":void 0,to:d,...x&&{onClick:n?()=>n(t):void 0},...c,children:[u,!x&&(0,b.jsx)(H.Z,{})]})},u)}const W={menuHtmlItem:"menuHtmlItem_M9Kj"};function F(e){let{item:t,level:n,index:a}=e;const{value:i,defaultStyle:l,className:r}=t;return(0,b.jsx)("li",{className:(0,o.Z)(s.k.docs.docSidebarItemLink,s.k.docs.docSidebarItemLinkLevel(n),l&&[W.menuHtmlItem,"menu__list-item"],r),dangerouslySetInnerHTML:{__html:i}},a)}function P(e){let{item:t,...n}=e;switch(t.type){case"category":return(0,b.jsx)(w,{item:t,...n});case"html":return(0,b.jsx)(F,{item:t,...n});default:return(0,b.jsx)(R,{item:t,...n})}}function D(e){let{items:t,...n}=e;const a=(0,l.f)(t,n.activePath);return(0,b.jsx)(T,{children:a.map(((e,t)=>(0,b.jsx)(P,{item:e,index:t,...n},t)))})}const V=(0,a.memo)(D),U={menu:"menu_SIkG",menuWithAnnouncementBar:"menuWithAnnouncementBar_GW3s"};function K(e){let{path:t,sidebar:n,className:i}=e;const l=function(){const{isActive:e}=(0,C.n)(),[t,n]=(0,a.useState)(e);return(0,d.RF)((t=>{let{scrollY:a}=t;e&&n(0===a)}),[e]),e&&t}();return(0,b.jsx)("nav",{"aria-label":(0,c.I)({id:"theme.docs.sidebar.navAriaLabel",message:"Docs sidebar",description:"The ARIA label for the sidebar navigation"}),className:(0,o.Z)("menu thin-scrollbar",U.menu,l&&U.menuWithAnnouncementBar,i),children:(0,b.jsx)("ul",{className:(0,o.Z)(s.k.docs.docSidebarMenu,"menu__list"),children:(0,b.jsx)(V,{items:n,activePath:t,level:1})})})}const Y="sidebar_njMd",z="sidebarWithHideableNavbar_wUlq",G="sidebarHidden_VK0M",O="sidebarLogo_isFc";function q(e){let{path:t,sidebar:n,onCollapse:a,isHidden:i}=e;const{navbar:{hideOnScroll:s},docs:{sidebar:{hideable:l}}}=(0,j.L)();return(0,b.jsxs)("div",{className:(0,o.Z)(Y,s&&z,i&&G),children:[s&&(0,b.jsx)(k.Z,{tabIndex:-1,className:O}),(0,b.jsx)(K,{path:t,sidebar:n}),l&&(0,b.jsx)(g,{onClick:a})]})}const J=a.memo(q);var Q=n(5689),X=n(44160);const $=e=>{let{sidebar:t,path:n}=e;const a=(0,X.e)();return(0,b.jsx)("ul",{className:(0,o.Z)(s.k.docs.docSidebarMenu,"menu__list"),children:(0,b.jsx)(V,{items:t,activePath:n,onItemClick:e=>{"category"===e.type&&e.href&&a.toggle(),"link"===e.type&&a.toggle()},level:1})})};function ee(e){return(0,b.jsx)(Q.Zo,{component:$,props:e})}const te=a.memo(ee);function ne(e){const t=(0,f.i)(),n="desktop"===t||"ssr"===t,a="mobile"===t;return(0,b.jsxs)(b.Fragment,{children:[n&&(0,b.jsx)(J,{...e}),a&&(0,b.jsx)(te,{...e})]})}const ae={expandButton:"expandButton_TmdG",expandButtonIcon:"expandButtonIcon_i1dp"};function oe(e){let{toggleSidebar:t}=e;return(0,b.jsx)("div",{className:ae.expandButton,title:(0,c.I)({id:"theme.docs.sidebar.expandButtonTitle",message:"Expand sidebar",description:"The ARIA label and title attribute for expand button of doc sidebar"}),"aria-label":(0,c.I)({id:"theme.docs.sidebar.expandButtonAriaLabel",message:"Expand sidebar",description:"The ARIA label and title attribute for expand button of doc sidebar"}),tabIndex:0,role:"button",onKeyDown:t,onClick:t,children:(0,b.jsx)(_,{className:ae.expandButtonIcon})})}const ie={docSidebarContainer:"docSidebarContainer_YfHR",docSidebarContainerHidden:"docSidebarContainerHidden_DPk8",sidebarViewport:"sidebarViewport_aRkj"};function se(e){let{children:t}=e;const n=(0,r.V)();return(0,b.jsx)(a.Fragment,{children:t},n?.name??"noSidebar")}function le(e){let{sidebar:t,hiddenSidebarContainer:n,setHiddenSidebarContainer:i}=e;const{pathname:l}=(0,x.TH)(),[r,c]=(0,a.useState)(!1),d=(0,a.useCallback)((()=>{r&&c(!1),!r&&(0,p.n)()&&c(!0),i((e=>!e))}),[i,r]);return(0,b.jsx)("aside",{className:(0,o.Z)(s.k.docs.docSidebarContainer,ie.docSidebarContainer,n&&ie.docSidebarContainerHidden),onTransitionEnd:e=>{e.currentTarget.classList.contains(ie.docSidebarContainer)&&n&&c(!0)},children:(0,b.jsx)(se,{children:(0,b.jsxs)("div",{className:(0,o.Z)(ie.sidebarViewport,r&&ie.sidebarViewportHidden),children:[(0,b.jsx)(ne,{sidebar:t,path:l,onCollapse:d,isHidden:r}),r&&(0,b.jsx)(oe,{toggleSidebar:d})]})})})}const re={docMainContainer:"docMainContainer_TBSr",docMainContainerEnhanced:"docMainContainerEnhanced_lQrH",docItemWrapperEnhanced:"docItemWrapperEnhanced_JWYK"};function ce(e){let{hiddenSidebarContainer:t,children:n}=e;const a=(0,r.V)();return(0,b.jsx)("main",{className:(0,o.Z)(re.docMainContainer,(t||!a)&&re.docMainContainerEnhanced),children:(0,b.jsx)("div",{className:(0,o.Z)("container padding-top--md padding-bottom--lg",re.docItemWrapper,t&&re.docItemWrapperEnhanced),children:n})})}const de={docRoot:"docRoot_UBD9",docsWrapper:"docsWrapper_hBAB"};function ue(e){let{children:t}=e;const n=(0,r.V)(),[o,i]=(0,a.useState)(!1);return(0,b.jsxs)("div",{className:de.docsWrapper,children:[(0,b.jsx)(h,{}),(0,b.jsxs)("div",{className:de.docRoot,children:[n&&(0,b.jsx)(le,{sidebar:n.items,hiddenSidebarContainer:o,setHiddenSidebarContainer:i}),(0,b.jsx)(ce,{hiddenSidebarContainer:o,children:t})]})]})}var me=n(96325);function be(e){const t=(0,l.SN)(e);if(!t)return(0,b.jsx)(me.Z,{});const{docElement:n,sidebarName:a,sidebarItems:c}=t;return(0,b.jsx)(i.FG,{className:(0,o.Z)(s.k.page.docsDocPage),children:(0,b.jsx)(r.b,{name:a,items:c,children:(0,b.jsx)(ue,{children:n})})})}},96325:(e,t,n)=>{n.d(t,{Z:()=>l});n(67294);var a=n(36905),o=n(55361),i=n(42704),s=n(85893);function l(e){let{className:t}=e;return(0,s.jsx)("main",{className:(0,a.Z)("container margin-vert--xl",t),children:(0,s.jsx)("div",{className:"row",children:(0,s.jsxs)("div",{className:"col col--6 col--offset-3",children:[(0,s.jsx)(i.Z,{as:"h1",className:"hero__title",children:(0,s.jsx)(o.Z,{id:"theme.NotFound.title",description:"The title of the 404 page",children:"Page Not Found"})}),(0,s.jsx)("p",{children:(0,s.jsx)(o.Z,{id:"theme.NotFound.p1",description:"The first paragraph of the 404 page",children:"We could not find what you were looking for."})}),(0,s.jsx)("p",{children:(0,s.jsx)(o.Z,{id:"theme.NotFound.p2",description:"The 2nd paragraph of the 404 page",children:"Please contact the owner of the site that linked you to the original URL and let them know their link is broken."})})]})})})}}}]); \ No newline at end of file diff --git a/assets/js/a94703ab.f3353760.js b/assets/js/a94703ab.f3353760.js new file mode 100644 index 000000000..3426f56d0 --- /dev/null +++ b/assets/js/a94703ab.f3353760.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([["9914"],{49341:function(e,t,n){n.r(t),n.d(t,{default:()=>ec});var a=n("85893"),i=n("67294"),r=n("74904"),o=n("81921"),l=n("50490"),s=n("71364"),d=n("26844"),c=n("1822"),u=n("27570"),m=n("11257");let b={backToTopButton:"backToTopButton_sjWU",backToTopButtonShow:"backToTopButtonShow_xfvO"};function h(){let{shown:e,scrollToTop:t}=function(e){let{threshold:t}=e,[n,a]=(0,i.useState)(!1),r=(0,i.useRef)(!1),{startScroll:o,cancelScroll:l}=(0,u.Ct)();return(0,u.RF)((e,n)=>{let{scrollY:i}=e,o=n?.scrollY;if(!!o)r.current?r.current=!1:i>=o?(l(),a(!1)):i<t?a(!1):i+window.innerHeight<document.documentElement.scrollHeight&&a(!0)}),(0,m.S)(e=>{e.location.hash&&(r.current=!0,a(!1))}),{shown:n,scrollToTop:()=>o(0)}}({threshold:300});return(0,a.jsx)("button",{"aria-label":(0,c.I)({id:"theme.BackToTopButton.buttonAriaLabel",message:"Scroll back to top",description:"The ARIA label for the back to top button"}),className:(0,r.Z)("clean-btn",l.k.common.backToTopButton,b.backToTopButton,e&&b.backToTopButtonShow),type:"button",onClick:t})}var p=n("11027"),x=n("16550"),f=n("72649"),j=n("45237"),_=n("40858");function k(e){return(0,a.jsx)("svg",{width:"20",height:"20","aria-hidden":"true",...e,children:(0,a.jsxs)("g",{fill:"#7a7a7a",children:[(0,a.jsx)("path",{d:"M9.992 10.023c0 .2-.062.399-.172.547l-4.996 7.492a.982.982 0 01-.828.454H1c-.55 0-1-.453-1-1 0-.2.059-.403.168-.551l4.629-6.942L.168 3.078A.939.939 0 010 2.528c0-.548.45-.997 1-.997h2.996c.352 0 .649.18.828.45L9.82 9.472c.11.148.172.347.172.55zm0 0"}),(0,a.jsx)("path",{d:"M19.98 10.023c0 .2-.058.399-.168.547l-4.996 7.492a.987.987 0 01-.828.454h-3c-.547 0-.996-.453-.996-1 0-.2.059-.403.168-.551l4.625-6.942-4.625-6.945a.939.939 0 01-.168-.55 1 1 0 01.996-.997h3c.348 0 .649.18.828.45l4.996 7.492c.11.148.168.347.168.55zm0 0"})]})})}let g="collapseSidebarButton_PEFL",v="collapseSidebarButtonIcon_kv0_";function S(e){let{onClick:t}=e;return(0,a.jsx)("button",{type:"button",title:(0,c.I)({id:"theme.docs.sidebar.collapseButtonTitle",message:"Collapse sidebar",description:"The title attribute for collapse button of doc sidebar"}),"aria-label":(0,c.I)({id:"theme.docs.sidebar.collapseButtonAriaLabel",message:"Collapse sidebar",description:"The title attribute for collapse button of doc sidebar"}),className:(0,r.Z)("button button--secondary button--outline",g),onClick:t,children:(0,a.jsx)(k,{className:v})})}var C=n("73183"),I=n("57100");let N=Symbol("EmptyContext"),T=i.createContext(N);function Z(e){let{children:t}=e,[n,r]=(0,i.useState)(null),o=(0,i.useMemo)(()=>({expandedItem:n,setExpandedItem:r}),[n]);return(0,a.jsx)(T.Provider,{value:o,children:t})}var L=n("6560"),y=n("16896"),B=n("27544"),A=n("13341");function w(e){let{collapsed:t,categoryLabel:n,onClick:i}=e;return(0,a.jsx)("button",{"aria-label":t?(0,c.I)({id:"theme.DocSidebarItem.expandCategoryAriaLabel",message:"Expand sidebar category '{label}'",description:"The ARIA label to expand the sidebar category"},{label:n}):(0,c.I)({id:"theme.DocSidebarItem.collapseCategoryAriaLabel",message:"Collapse sidebar category '{label}'",description:"The ARIA label to collapse the sidebar category"},{label:n}),"aria-expanded":!t,type:"button",className:"clean-btn menu__caret",onClick:i})}function H(e){let{item:t,onItemClick:n,activePath:o,level:d,index:c,...u}=e,{items:m,label:b,collapsible:h,className:p,href:x}=t,{docs:{sidebar:{autoCollapseCategories:f}}}=(0,j.L)(),_=function(e){let t=(0,A.Z)();return(0,i.useMemo)(()=>{if(e.href&&!e.linkUnlisted)return e.href;if(!t&&!!e.collapsible)return(0,s.LM)(e)},[e,t])}(t),k=(0,s._F)(t,o),g=(0,y.Mg)(x,o),{collapsed:v,setCollapsed:S}=(0,L.u)({initialState:()=>!!h&&!k&&t.collapsed}),{expandedItem:C,setExpandedItem:Z}=function(){let e=(0,i.useContext)(T);if(e===N)throw new I.i6("DocSidebarItemsExpandedStateProvider");return e}(),H=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:!v;Z(e?null:c),S(e)};return!function(e){let{isActive:t,collapsed:n,updateCollapsed:a}=e,r=(0,I.D9)(t);(0,i.useEffect)(()=>{t&&!r&&n&&a(!1)},[t,r,n,a])}({isActive:k,collapsed:v,updateCollapsed:H}),(0,i.useEffect)(()=>{h&&null!=C&&C!==c&&f&&S(!0)},[h,C,c,S,f]),(0,a.jsxs)("li",{className:(0,r.Z)(l.k.docs.docSidebarItemCategory,l.k.docs.docSidebarItemCategoryLevel(d),"menu__list-item",{"menu__list-item--collapsed":v},p),children:[(0,a.jsxs)("div",{className:(0,r.Z)("menu__list-item-collapsible",{"menu__list-item-collapsible--active":g}),children:[(0,a.jsx)(B.Z,{className:(0,r.Z)("menu__link",{"menu__link--sublist":h,"menu__link--sublist-caret":!x&&h,"menu__link--active":k}),onClick:h?e=>{n?.(t),x?H(!1):(e.preventDefault(),H())}:()=>{n?.(t)},"aria-current":g?"page":void 0,role:h&&!x?"button":void 0,"aria-expanded":h&&!x?!v:void 0,href:h?_??"#":_,...u,children:b}),x&&h&&(0,a.jsx)(w,{collapsed:v,categoryLabel:b,onClick:e=>{e.preventDefault(),H()}})]}),(0,a.jsx)(L.z,{lazy:!0,as:"ul",className:"menu__list",collapsed:v,children:(0,a.jsx)(V,{items:m,tabIndex:v?-1:0,onItemClick:n,activePath:o,level:d+1})})]})}var E=n("76520"),M=n("54072");let W={menuExternalLink:"menuExternalLink_NmtK"};function F(e){let{item:t,onItemClick:n,activePath:i,level:o,index:d,...c}=e,{href:u,label:m,className:b,autoAddBaseUrl:h}=t,p=(0,s._F)(t,i),x=(0,E.Z)(u);return(0,a.jsx)("li",{className:(0,r.Z)(l.k.docs.docSidebarItemLink,l.k.docs.docSidebarItemLinkLevel(o),"menu__list-item",b),children:(0,a.jsxs)(B.Z,{className:(0,r.Z)("menu__link",!x&&W.menuExternalLink,{"menu__link--active":p}),autoAddBaseUrl:h,"aria-current":p?"page":void 0,to:u,...x&&{onClick:n?()=>n(t):void 0},...c,children:[m,!x&&(0,a.jsx)(M.Z,{})]})},m)}let R={menuHtmlItem:"menuHtmlItem_M9Kj"};function D(e){let{item:t,level:n,index:i}=e,{value:o,defaultStyle:s,className:d}=t;return(0,a.jsx)("li",{className:(0,r.Z)(l.k.docs.docSidebarItemLink,l.k.docs.docSidebarItemLinkLevel(n),s&&[R.menuHtmlItem,"menu__list-item"],d),dangerouslySetInnerHTML:{__html:o}},i)}function P(e){let{item:t,...n}=e;switch(t.type){case"category":return(0,a.jsx)(H,{item:t,...n});case"html":return(0,a.jsx)(D,{item:t,...n});default:return(0,a.jsx)(F,{item:t,...n})}}let V=(0,i.memo)(function(e){let{items:t,...n}=e,i=(0,s.f)(t,n.activePath);return(0,a.jsx)(Z,{children:i.map((e,t)=>(0,a.jsx)(P,{item:e,index:t,...n},t))})}),U={menu:"menu_SIkG",menuWithAnnouncementBar:"menuWithAnnouncementBar_GW3s"};function K(e){let{path:t,sidebar:n,className:o}=e,s=function(){let{isActive:e}=(0,C.n)(),[t,n]=(0,i.useState)(e);return(0,u.RF)(t=>{let{scrollY:a}=t;e&&n(0===a)},[e]),e&&t}();return(0,a.jsx)("nav",{"aria-label":(0,c.I)({id:"theme.docs.sidebar.navAriaLabel",message:"Docs sidebar",description:"The ARIA label for the sidebar navigation"}),className:(0,r.Z)("menu thin-scrollbar",U.menu,s&&U.menuWithAnnouncementBar,o),children:(0,a.jsx)("ul",{className:(0,r.Z)(l.k.docs.docSidebarMenu,"menu__list"),children:(0,a.jsx)(V,{items:n,activePath:t,level:1})})})}let z={sidebar:"sidebar_njMd",sidebarWithHideableNavbar:"sidebarWithHideableNavbar_wUlq",sidebarHidden:"sidebarHidden_VK0M",sidebarLogo:"sidebarLogo_isFc"},G=i.memo(function(e){let{path:t,sidebar:n,onCollapse:i,isHidden:o}=e,{navbar:{hideOnScroll:l},docs:{sidebar:{hideable:s}}}=(0,j.L)();return(0,a.jsxs)("div",{className:(0,r.Z)(z.sidebar,l&&z.sidebarWithHideableNavbar,o&&z.sidebarHidden),children:[l&&(0,a.jsx)(_.Z,{tabIndex:-1,className:z.sidebarLogo}),(0,a.jsx)(K,{path:t,sidebar:n}),s&&(0,a.jsx)(S,{onClick:i})]})});var Y=n("5942"),q=n("25658");let J=e=>{let{sidebar:t,path:n}=e,i=(0,q.e)();return(0,a.jsx)("ul",{className:(0,r.Z)(l.k.docs.docSidebarMenu,"menu__list"),children:(0,a.jsx)(V,{items:t,activePath:n,onItemClick:e=>{"category"===e.type&&e.href&&i.toggle(),"link"===e.type&&i.toggle()},level:1})})},O=i.memo(function(e){return(0,a.jsx)(Y.Zo,{component:J,props:e})});function Q(e){let t=(0,f.i)();return(0,a.jsxs)(a.Fragment,{children:[("desktop"===t||"ssr"===t)&&(0,a.jsx)(G,{...e}),"mobile"===t&&(0,a.jsx)(O,{...e})]})}let X="expandButton_TmdG",$="expandButtonIcon_i1dp";function ee(e){let{toggleSidebar:t}=e;return(0,a.jsx)("div",{className:X,title:(0,c.I)({id:"theme.docs.sidebar.expandButtonTitle",message:"Expand sidebar",description:"The ARIA label and title attribute for expand button of doc sidebar"}),"aria-label":(0,c.I)({id:"theme.docs.sidebar.expandButtonAriaLabel",message:"Expand sidebar",description:"The ARIA label and title attribute for expand button of doc sidebar"}),tabIndex:0,role:"button",onKeyDown:t,onClick:t,children:(0,a.jsx)(k,{className:$})})}let et={docSidebarContainer:"docSidebarContainer_YfHR",docSidebarContainerHidden:"docSidebarContainerHidden_DPk8",sidebarViewport:"sidebarViewport_aRkj"};function en(e){let{children:t}=e,n=(0,d.V)();return(0,a.jsx)(i.Fragment,{children:t},n?.name??"noSidebar")}function ea(e){let{sidebar:t,hiddenSidebarContainer:n,setHiddenSidebarContainer:o}=e,{pathname:s}=(0,x.TH)(),[d,c]=(0,i.useState)(!1),u=(0,i.useCallback)(()=>{d&&c(!1),!d&&(0,p.n)()&&c(!0),o(e=>!e)},[o,d]);return(0,a.jsx)("aside",{className:(0,r.Z)(l.k.docs.docSidebarContainer,et.docSidebarContainer,n&&et.docSidebarContainerHidden),onTransitionEnd:e=>{if(!!e.currentTarget.classList.contains(et.docSidebarContainer))n&&c(!0)},children:(0,a.jsx)(en,{children:(0,a.jsxs)("div",{className:(0,r.Z)(et.sidebarViewport,d&&et.sidebarViewportHidden),children:[(0,a.jsx)(Q,{sidebar:t,path:s,onCollapse:u,isHidden:d}),d&&(0,a.jsx)(ee,{toggleSidebar:u})]})})})}let ei={docMainContainer:"docMainContainer_TBSr",docMainContainerEnhanced:"docMainContainerEnhanced_lQrH",docItemWrapperEnhanced:"docItemWrapperEnhanced_JWYK"};function er(e){let{hiddenSidebarContainer:t,children:n}=e,i=(0,d.V)();return(0,a.jsx)("main",{className:(0,r.Z)(ei.docMainContainer,(t||!i)&&ei.docMainContainerEnhanced),children:(0,a.jsx)("div",{className:(0,r.Z)("container padding-top--md padding-bottom--lg",ei.docItemWrapper,t&&ei.docItemWrapperEnhanced),children:n})})}let eo="docRoot_UBD9",el="docsWrapper_hBAB";function es(e){let{children:t}=e,n=(0,d.V)(),[r,o]=(0,i.useState)(!1);return(0,a.jsxs)("div",{className:el,children:[(0,a.jsx)(h,{}),(0,a.jsxs)("div",{className:eo,children:[n&&(0,a.jsx)(ea,{sidebar:n.items,hiddenSidebarContainer:r,setHiddenSidebarContainer:o}),(0,a.jsx)(er,{hiddenSidebarContainer:r,children:t})]})]})}var ed=n("92487");function ec(e){let t=(0,s.SN)(e);if(!t)return(0,a.jsx)(ed.Z,{});let{docElement:n,sidebarName:i,sidebarItems:c}=t;return(0,a.jsx)(o.FG,{className:(0,r.Z)(l.k.page.docsDocPage),children:(0,a.jsx)(d.b,{name:i,items:c,children:(0,a.jsx)(es,{children:n})})})}},92487:function(e,t,n){n.d(t,{Z:function(){return l}});var a=n(85893);n(67294);var i=n(74904),r=n(1822),o=n(52068);function l(e){let{className:t}=e;return(0,a.jsx)("main",{className:(0,i.Z)("container margin-vert--xl",t),children:(0,a.jsx)("div",{className:"row",children:(0,a.jsxs)("div",{className:"col col--6 col--offset-3",children:[(0,a.jsx)(o.Z,{as:"h1",className:"hero__title",children:(0,a.jsx)(r.Z,{id:"theme.NotFound.title",description:"The title of the 404 page",children:"Page Not Found"})}),(0,a.jsx)("p",{children:(0,a.jsx)(r.Z,{id:"theme.NotFound.p1",description:"The first paragraph of the 404 page",children:"We could not find what you were looking for."})}),(0,a.jsx)("p",{children:(0,a.jsx)(r.Z,{id:"theme.NotFound.p2",description:"The 2nd paragraph of the 404 page",children:"Please contact the owner of the site that linked you to the original URL and let them know their link is broken."})})]})})})}}}]); \ No newline at end of file diff --git a/assets/js/a9e19215.1e237522.js b/assets/js/a9e19215.1e237522.js new file mode 100644 index 000000000..176c0f52c --- /dev/null +++ b/assets/js/a9e19215.1e237522.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([["5147"],{72459:function(e,t,n){n.r(t),n.d(t,{metadata:()=>r,contentTitle:()=>a,default:()=>p,assets:()=>l,toc:()=>d,frontMatter:()=>i});var r=JSON.parse('{"id":"user/software/networking/xrdp","title":"XRDP","description":"xrdp provides a graphical login to remote machines using Microsoft Remote Desktop Protocol (RDP). xrdp accepts connections from a variety of RDP clients: FreeRDP, rdesktop, NeutrinoRDP and Microsoft Remote Desktop Client (for Windows, Mac OS, iOS and Android).","source":"@site/docs/user/software/networking/xrdp.md","sourceDirName":"user/software/networking","slug":"/user/software/networking/xrdp","permalink":"/docs/user/software/networking/xrdp","draft":false,"unlisted":false,"editUrl":"https://github.com/getsolus/help-center-docs/tree/master/docs/user/software/networking/xrdp.md","tags":[],"version":"current","lastUpdatedAt":1733757592000,"frontMatter":{"title":"XRDP","summary":"User guide for XRDP on Solus"},"sidebar":"userSidebar","previous":{"title":"Wireshark","permalink":"/docs/user/software/networking/wireshark"},"next":{"title":"Sound","permalink":"/docs/user/software/sound/"}}'),o=n("85893"),s=n("50065");let i={title:"XRDP",summary:"User guide for XRDP on Solus"},a="XRDP",l={},d=[{value:"Installation",id:"installation",level:2},{value:"Configuration",id:"configuration",level:2},{value:"Start / Stop xrdp",id:"start--stop-xrdp",level:2}];function c(e){let t={code:"code",h1:"h1",h2:"h2",header:"header",li:"li",p:"p",pre:"pre",ul:"ul",...(0,s.a)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(t.header,{children:(0,o.jsx)(t.h1,{id:"xrdp",children:"XRDP"})}),"\n",(0,o.jsx)(t.p,{children:"xrdp provides a graphical login to remote machines using Microsoft Remote Desktop Protocol (RDP). xrdp accepts connections from a variety of RDP clients: FreeRDP, rdesktop, NeutrinoRDP and Microsoft Remote Desktop Client (for Windows, Mac OS, iOS and Android)."}),"\n",(0,o.jsx)(t.h2,{id:"installation",children:"Installation"}),"\n",(0,o.jsx)(t.p,{children:"Solus has an xrdp integration package for each Desktop Environment that will install the correct configuration for that DE. Install the respective package for your DE."}),"\n",(0,o.jsxs)(t.ul,{children:["\n",(0,o.jsx)(t.li,{children:(0,o.jsx)(t.code,{children:"xrdp-budgie-integration"})}),"\n",(0,o.jsx)(t.li,{children:(0,o.jsx)(t.code,{children:"xrdp-gnome-integration"})}),"\n",(0,o.jsx)(t.li,{children:(0,o.jsx)(t.code,{children:"xrdp-mate-integration"})}),"\n",(0,o.jsx)(t.li,{children:(0,o.jsx)(t.code,{children:"xrdp-plasma-integration"})}),"\n"]}),"\n",(0,o.jsxs)(t.p,{children:["This package will also install the ",(0,o.jsx)(t.code,{children:"xrdp"})," and ",(0,o.jsx)(t.code,{children:"xorgxrdp"})," packages."]}),"\n",(0,o.jsx)(t.h2,{id:"configuration",children:"Configuration"}),"\n",(0,o.jsx)(t.p,{children:"The following file needs to be created, if it doesn't already exist, with the following contents."}),"\n",(0,o.jsx)(t.pre,{children:(0,o.jsx)(t.code,{className:"language-bash",children:"cat /etc/X11/Xwrapper.config\n\nallowed_users=anybody\n"})}),"\n",(0,o.jsx)(t.h2,{id:"start--stop-xrdp",children:"Start / Stop xrdp"}),"\n",(0,o.jsx)(t.p,{children:"Please note that xrdp does NOT run on system boot by default. It needs to be manually started/configured to start automatically:"}),"\n",(0,o.jsx)(t.pre,{children:(0,o.jsx)(t.code,{className:"language-bash",children:"# Start xrdp manually\nsudo systemctl start xrdp\n\n# Configure xrdp to start automatically on each boot and immediately start the service\nsudo systemctl enable --now xrdp\n\n# Check whether xrdp is running\nsudo systemctl status xrdp\n\n# Restart xrdp manually\nsudo systemctl restart xrdp\n\n# Stop xrdp manually\nsudo systemctl stop xrdp\n\n# Configure xrdp to not start automatically on each boot and immediately stop the service\nsudo systemctl disable --now xrdp\n"})})]})}function p(e={}){let{wrapper:t}={...(0,s.a)(),...e.components};return t?(0,o.jsx)(t,{...e,children:(0,o.jsx)(c,{...e})}):c(e)}},50065:function(e,t,n){n.d(t,{Z:function(){return a},a:function(){return i}});var r=n(67294);let o={},s=r.createContext(o);function i(e){let t=r.useContext(s);return r.useMemo(function(){return"function"==typeof e?e(t):{...t,...e}},[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:i(e.components),r.createElement(s.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/a9e19215.59ba6bf2.js b/assets/js/a9e19215.59ba6bf2.js deleted file mode 100644 index e7fbae87c..000000000 --- a/assets/js/a9e19215.59ba6bf2.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[333],{71371:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>d,contentTitle:()=>i,default:()=>p,frontMatter:()=>s,metadata:()=>a,toc:()=>l});var r=n(85893),o=n(11151);const s={title:"XRDP",summary:"User guide for XRDP on Solus"},i="XRDP",a={id:"user/software/networking/xrdp",title:"XRDP",description:"xrdp provides a graphical login to remote machines using Microsoft Remote Desktop Protocol (RDP). xrdp accepts connections from a variety of RDP clients: FreeRDP, rdesktop, NeutrinoRDP and Microsoft Remote Desktop Client (for Windows, Mac OS, iOS and Android).",source:"@site/docs/user/software/networking/xrdp.md",sourceDirName:"user/software/networking",slug:"/user/software/networking/xrdp",permalink:"/docs/user/software/networking/xrdp",draft:!1,unlisted:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/software/networking/xrdp.md",tags:[],version:"current",lastUpdatedAt:1732716912e3,frontMatter:{title:"XRDP",summary:"User guide for XRDP on Solus"},sidebar:"userSidebar",previous:{title:"Wireshark",permalink:"/docs/user/software/networking/wireshark"},next:{title:"Sound",permalink:"/docs/user/software/sound/"}},d={},l=[{value:"Installation",id:"installation",level:2},{value:"Configuration",id:"configuration",level:2},{value:"Start / Stop xrdp",id:"start--stop-xrdp",level:2}];function c(e){const t={code:"code",h1:"h1",h2:"h2",header:"header",li:"li",p:"p",pre:"pre",ul:"ul",...(0,o.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.header,{children:(0,r.jsx)(t.h1,{id:"xrdp",children:"XRDP"})}),"\n",(0,r.jsx)(t.p,{children:"xrdp provides a graphical login to remote machines using Microsoft Remote Desktop Protocol (RDP). xrdp accepts connections from a variety of RDP clients: FreeRDP, rdesktop, NeutrinoRDP and Microsoft Remote Desktop Client (for Windows, Mac OS, iOS and Android)."}),"\n",(0,r.jsx)(t.h2,{id:"installation",children:"Installation"}),"\n",(0,r.jsx)(t.p,{children:"Solus has an xrdp integration package for each Desktop Environment that will install the correct configuration for that DE. Install the respective package for your DE."}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsx)(t.li,{children:(0,r.jsx)(t.code,{children:"xrdp-budgie-integration"})}),"\n",(0,r.jsx)(t.li,{children:(0,r.jsx)(t.code,{children:"xrdp-gnome-integration"})}),"\n",(0,r.jsx)(t.li,{children:(0,r.jsx)(t.code,{children:"xrdp-mate-integration"})}),"\n",(0,r.jsx)(t.li,{children:(0,r.jsx)(t.code,{children:"xrdp-plasma-integration"})}),"\n"]}),"\n",(0,r.jsxs)(t.p,{children:["This package will also install the ",(0,r.jsx)(t.code,{children:"xrdp"})," and ",(0,r.jsx)(t.code,{children:"xorgxrdp"})," packages."]}),"\n",(0,r.jsx)(t.h2,{id:"configuration",children:"Configuration"}),"\n",(0,r.jsx)(t.p,{children:"The following file needs to be created, if it doesn't already exist, with the following contents."}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:"cat /etc/X11/Xwrapper.config\n\nallowed_users=anybody\n"})}),"\n",(0,r.jsx)(t.h2,{id:"start--stop-xrdp",children:"Start / Stop xrdp"}),"\n",(0,r.jsx)(t.p,{children:"Please note that xrdp does NOT run on system boot by default. It needs to be manually started/configured to start automatically:"}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:"# Start xrdp manually\nsudo systemctl start xrdp\n\n# Configure xrdp to start automatically on each boot and immediately start the service\nsudo systemctl enable --now xrdp\n\n# Check whether xrdp is running\nsudo systemctl status xrdp\n\n# Restart xrdp manually\nsudo systemctl restart xrdp\n\n# Stop xrdp manually\nsudo systemctl stop xrdp\n\n# Configure xrdp to not start automatically on each boot and immediately stop the service\nsudo systemctl disable --now xrdp\n"})})]})}function p(e={}){const{wrapper:t}={...(0,o.a)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(c,{...e})}):c(e)}},11151:(e,t,n)=>{n.d(t,{Z:()=>a,a:()=>i});var r=n(67294);const o={},s=r.createContext(o);function i(e){const t=r.useContext(s);return r.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:i(e.components),r.createElement(s.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/ab89b7a6.23b91f29.js b/assets/js/ab89b7a6.23b91f29.js new file mode 100644 index 000000000..cdb62c3a9 --- /dev/null +++ b/assets/js/ab89b7a6.23b91f29.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([["3960"],{13414:function(e,t,n){n.r(t),n.d(t,{metadata:()=>i,contentTitle:()=>c,default:()=>u,assets:()=>l,toc:()=>d,frontMatter:()=>o});var i=JSON.parse('{"id":"user/editions/xfce/index","title":"XFCE","description":"XFCE is provided by the XFCE Edition of Solus. It is described as:","source":"@site/docs/user/editions/xfce/index.md","sourceDirName":"user/editions/xfce","slug":"/user/editions/xfce/","permalink":"/docs/user/editions/xfce/","draft":false,"unlisted":false,"editUrl":"https://github.com/getsolus/help-center-docs/tree/master/docs/user/editions/xfce/index.md","tags":[],"version":"current","lastUpdatedAt":1733757592000,"frontMatter":{"title":"XFCE","summary":"A quick introduction to the XFCE Edition of Solus"},"sidebar":"userSidebar","previous":{"title":"Tips and Tricks","permalink":"/docs/user/editions/plasma/tips-and-tricks"},"next":{"title":"Configuration","permalink":"/docs/user/editions/xfce/configuration"}}'),s=n("85893"),r=n("50065");let o={title:"XFCE",summary:"A quick introduction to the XFCE Edition of Solus"},c="XFCE Desktop",l={},d=[];function a(e){let t={a:"a",blockquote:"blockquote",h1:"h1",header:"header",li:"li",p:"p",ul:"ul",...(0,r.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.header,{children:(0,s.jsx)(t.h1,{id:"xfce-desktop",children:"XFCE Desktop"})}),"\n",(0,s.jsx)(t.p,{children:"XFCE is provided by the XFCE Edition of Solus. It is described as:"}),"\n",(0,s.jsxs)(t.blockquote,{children:["\n",(0,s.jsx)(t.p,{children:"Xfce is a lightweight desktop environment for UNIX-like operating systems. It aims to be fast and low on system resources, while still being visually appealing and user friendly."}),"\n"]}),"\n",(0,s.jsx)(t.p,{children:"Here are some links related to this project that you may find helpful:"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"https://xfce.org",children:"Homepage"})}),"\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"https://blog.xfce.org",children:"Blog"})}),"\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"https://gitlab.xfce.org",children:"Support"})}),"\n"]}),"\n",(0,s.jsx)(t.p,{children:(0,s.jsx)(t.a,{href:"configuration",children:"Go to XFCE Configuration"})}),"\n",(0,s.jsx)(t.p,{children:(0,s.jsx)(t.a,{href:"tips-and-tricks",children:"Go to XFCE Tips and Tricks"})})]})}function u(e={}){let{wrapper:t}={...(0,r.a)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(a,{...e})}):a(e)}},50065:function(e,t,n){n.d(t,{Z:function(){return c},a:function(){return o}});var i=n(67294);let s={},r=i.createContext(s);function o(e){let t=i.useContext(r);return i.useMemo(function(){return"function"==typeof e?e(t):{...t,...e}},[t,e])}function c(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:o(e.components),i.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/ab89b7a6.db136f45.js b/assets/js/ab89b7a6.db136f45.js deleted file mode 100644 index e2e6a86bc..000000000 --- a/assets/js/ab89b7a6.db136f45.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[5575],{83016:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>d,contentTitle:()=>r,default:()=>u,frontMatter:()=>o,metadata:()=>c,toc:()=>l});var s=n(85893),i=n(11151);const o={title:"XFCE",summary:"A quick introduction to the XFCE Edition of Solus"},r="XFCE Desktop",c={id:"user/editions/xfce/index",title:"XFCE",description:"XFCE is provided by the XFCE Edition of Solus. It is described as:",source:"@site/docs/user/editions/xfce/index.md",sourceDirName:"user/editions/xfce",slug:"/user/editions/xfce/",permalink:"/docs/user/editions/xfce/",draft:!1,unlisted:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/editions/xfce/index.md",tags:[],version:"current",lastUpdatedAt:1732716912e3,frontMatter:{title:"XFCE",summary:"A quick introduction to the XFCE Edition of Solus"},sidebar:"userSidebar",previous:{title:"Tips and Tricks",permalink:"/docs/user/editions/plasma/tips-and-tricks"},next:{title:"Configuration",permalink:"/docs/user/editions/xfce/configuration"}},d={},l=[];function a(e){const t={a:"a",blockquote:"blockquote",h1:"h1",header:"header",li:"li",p:"p",ul:"ul",...(0,i.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.header,{children:(0,s.jsx)(t.h1,{id:"xfce-desktop",children:"XFCE Desktop"})}),"\n",(0,s.jsx)(t.p,{children:"XFCE is provided by the XFCE Edition of Solus. It is described as:"}),"\n",(0,s.jsxs)(t.blockquote,{children:["\n",(0,s.jsx)(t.p,{children:"Xfce is a lightweight desktop environment for UNIX-like operating systems. It aims to be fast and low on system resources, while still being visually appealing and user friendly."}),"\n"]}),"\n",(0,s.jsx)(t.p,{children:"Here are some links related to this project that you may find helpful:"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"https://xfce.org",children:"Homepage"})}),"\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"https://blog.xfce.org",children:"Blog"})}),"\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"https://gitlab.xfce.org",children:"Support"})}),"\n"]}),"\n",(0,s.jsx)(t.p,{children:(0,s.jsx)(t.a,{href:"configuration",children:"Go to XFCE Configuration"})}),"\n",(0,s.jsx)(t.p,{children:(0,s.jsx)(t.a,{href:"tips-and-tricks",children:"Go to XFCE Tips and Tricks"})})]})}function u(e={}){const{wrapper:t}={...(0,i.a)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(a,{...e})}):a(e)}},11151:(e,t,n)=>{n.d(t,{Z:()=>c,a:()=>r});var s=n(67294);const i={},o=s.createContext(i);function r(e){const t=s.useContext(o);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function c(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:r(e.components),s.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/aba21aa0.0e4979fa.js b/assets/js/aba21aa0.0e4979fa.js deleted file mode 100644 index e617822a3..000000000 --- a/assets/js/aba21aa0.0e4979fa.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[3629],{41765:e=>{e.exports=JSON.parse('{"name":"docusaurus-plugin-content-docs","id":"default"}')}}]); \ No newline at end of file diff --git a/assets/js/aba21aa0.6e47277b.js b/assets/js/aba21aa0.6e47277b.js new file mode 100644 index 000000000..2cf1cd473 --- /dev/null +++ b/assets/js/aba21aa0.6e47277b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([["5112"],{42418:function(e){e.exports=JSON.parse('{"name":"docusaurus-plugin-content-docs","id":"default"}')}}]); \ No newline at end of file diff --git a/assets/js/acecf23e.6898e8f6.js b/assets/js/acecf23e.6898e8f6.js new file mode 100644 index 000000000..759e14c09 --- /dev/null +++ b/assets/js/acecf23e.6898e8f6.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([["7627"],{47548:function(e){e.exports=JSON.parse('{"blogBasePath":"/blog","blogTitle":"Solus DevLog","authorsListPath":"/blog/authors"}')}}]); \ No newline at end of file diff --git a/assets/js/acecf23e.c3c14ed7.js b/assets/js/acecf23e.c3c14ed7.js deleted file mode 100644 index 43dd47b60..000000000 --- a/assets/js/acecf23e.c3c14ed7.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[7393],{81838:e=>{e.exports=JSON.parse('{"blogBasePath":"/blog","blogTitle":"Solus DevLog","authorsListPath":"/blog/authors"}')}}]); \ No newline at end of file diff --git a/assets/js/ad205e99.4667a45a.js b/assets/js/ad205e99.4667a45a.js deleted file mode 100644 index d55cf3587..000000000 --- a/assets/js/ad205e99.4667a45a.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[1617],{38491:(e,a,s)=>{s.r(a),s.d(a,{assets:()=>l,contentTitle:()=>r,default:()=>h,frontMatter:()=>t,metadata:()=>c,toc:()=>d});var n=s(85893),i=s(11151);const t={title:"Rebuilding a stack",summary:"Rebuilding a stack of package dependencies"},r="Rebuilding a stack",c={id:"packaging/stack-rebuilds",title:"Rebuilding a stack",description:"In packaging, a stack is a package and the packages that depend on it. Most commonly, this refers to libraries, such as the Poppler stack, but other software can be referred to a stack as well. One example is the GNOME stack, which includes the libraries and applications that are the core of the GNOME desktop environment. Packages that depend on another package are called that package's reverse dependencies. When updating a library, one has to be mindful of its reverse dependencies, and if they will need to be rebuilt after updating the library.",source:"@site/docs/packaging/stack-rebuilds.md",sourceDirName:"packaging",slug:"/packaging/stack-rebuilds",permalink:"/docs/packaging/stack-rebuilds",draft:!1,unlisted:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/packaging/stack-rebuilds.md",tags:[],version:"current",lastUpdatedAt:1732716912e3,frontMatter:{title:"Rebuilding a stack",summary:"Rebuilding a stack of package dependencies"},sidebar:"packagingSidebar",previous:{title:"Requesting a Package",permalink:"/docs/packaging/procedures/request-a-package"},next:{title:"Translation instructions",permalink:"/docs/packaging/translation-instructions"}},l={},d=[{value:"Updating the library",id:"updating-the-library",level:2},{value:"What are symbols?",id:"what-are-symbols",level:2},{value:"Checking if rebuilds are necessary",id:"checking-if-rebuilds-are-necessary",level:2},{value:"Finding reverse dependencies",id:"finding-reverse-dependencies",level:2},{value:"Rebuild the stack",id:"rebuild-the-stack",level:2}];function o(e){const a={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",header:"header",li:"li",ol:"ol",p:"p",pre:"pre",...(0,i.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(a.header,{children:(0,n.jsx)(a.h1,{id:"rebuilding-a-stack",children:"Rebuilding a stack"})}),"\n",(0,n.jsxs)(a.p,{children:["In packaging, a stack is a package and the packages that depend on it. Most commonly, this refers to libraries, such as the Poppler stack, but other software can be referred to a stack as well. One example is the GNOME stack, which includes the libraries and applications that are the core of the GNOME desktop environment. Packages that depend on another package are called that package's ",(0,n.jsx)(a.em,{children:"reverse dependencies"}),". When updating a library, one has to be mindful of its reverse dependencies, and if they will need to be rebuilt after updating the library."]}),"\n",(0,n.jsx)(a.admonition,{type:"note",children:(0,n.jsxs)(a.p,{children:["If you haven't already, you will need to ",(0,n.jsx)(a.a,{href:"/docs/packaging/advanced-config/local-repository",children:"set up a local repository"})," to do stack rebuilds."]})}),"\n",(0,n.jsx)(a.h2,{id:"updating-the-library",children:"Updating the library"}),"\n",(0,n.jsxs)(a.p,{children:["Go through the steps in ",(0,n.jsx)(a.a,{href:"/docs/packaging/updating-an-existing-package",children:"Updating an Existing Package"})," as normal, but instead of running ",(0,n.jsx)(a.code,{children:"go-task build"}),", run ",(0,n.jsx)(a.code,{children:"go-task build-localcp"}),". This will automatically copy the produced package files to your local repository for use in future builds."]}),"\n",(0,n.jsx)(a.h2,{id:"what-are-symbols",children:"What are symbols?"}),"\n",(0,n.jsxs)(a.p,{children:["Updating a library often means also building its reverse dependencies against the new version due to dynamic linking. Libraries are distributed as shared object, or ",(0,n.jsx)(a.code,{children:".so"}),", files, which contain the code symbols that other software can use. These files are usually versioned, such as ",(0,n.jsx)(a.code,{children:"libpoppler.so.140"}),'. This version is called the "so version". When a piece of software is built, it is ',(0,n.jsx)(a.em,{children:"linked"})," to the versioned libraries and code symbols that it uses."]}),"\n",(0,n.jsxs)(a.p,{children:["When the developers of a library release a new update, they may decide to bump the ",(0,n.jsx)(a.code,{children:".so"})," version, and code symbols are added and/or removed from the library. If this happens, but its reverse dependencies are not rebuilt after updating, they will try to use the old shared object file and symbols. Because they no longer exist, however, the program will crash when it tries to open them. Rebuilding the stack ensures that every piece of software is pointing to the correct version of its dependencies."]}),"\n",(0,n.jsx)(a.h2,{id:"checking-if-rebuilds-are-necessary",children:"Checking if rebuilds are necessary"}),"\n",(0,n.jsxs)(a.p,{children:["That's where the ",(0,n.jsx)(a.code,{children:"abi_*"})," files in the package repository come in. ",(0,n.jsx)(a.code,{children:"abi_libs"})," and ",(0,n.jsx)(a.code,{children:"abi_symbols"})," list the libraries and code symbols provided by a package, while ",(0,n.jsx)(a.code,{children:"abi_used_libs"})," and ",(0,n.jsx)(a.code,{children:"abi_used_symbols"})," list what libraries and symbols the package links to. After updating a package that has ",(0,n.jsx)(a.code,{children:"abi_libs"})," and ",(0,n.jsx)(a.code,{children:"abi_symbols"})," files, run ",(0,n.jsx)(a.code,{children:"git diff"})," on them and check for two things:"]}),"\n",(0,n.jsxs)(a.ol,{children:["\n",(0,n.jsxs)(a.li,{children:["Changes in the ",(0,n.jsx)(a.code,{children:".so"})," version"]}),"\n",(0,n.jsxs)(a.li,{children:["Removed lines in ",(0,n.jsx)(a.code,{children:"abi_symbols"})]}),"\n"]}),"\n",(0,n.jsx)(a.p,{children:"If either of these conditions are true, then all reverse dependencies of that package need to be rebuilt."}),"\n",(0,n.jsx)(a.admonition,{type:"note",children:(0,n.jsx)(a.p,{children:"Sometimes, packages in a stack are rebuilt even though the above conditions are not met. These are called Safety Rebuilds."})}),"\n",(0,n.jsx)(a.h2,{id:"finding-reverse-dependencies",children:"Finding reverse dependencies"}),"\n",(0,n.jsxs)(a.p,{children:["In most cases, all of the required rebuilds can be found by running ",(0,n.jsx)(a.code,{children:"eopkg info <package>"})," and looking at the Reverse Dependencies line, thanks to our tooling's automatic dependency detection. This doesn't always work, though, such as with ",(0,n.jsx)(a.code,{children:"abseil-cpp"}),". In that case, you can use a tool like RipGrep to find all of the packages that link against the library you're updating, for example:"]}),"\n",(0,n.jsx)(a.pre,{children:(0,n.jsx)(a.code,{className:"language-bash",children:'# Run in the root of the Solus package repository on your system\nrg "absl" packages/*/*/abi_used_libs\n'})}),"\n",(0,n.jsx)(a.h2,{id:"rebuild-the-stack",children:"Rebuild the stack"}),"\n",(0,n.jsx)(a.p,{children:"For each package in the stack, follow this procedure:"}),"\n",(0,n.jsxs)(a.ol,{children:["\n",(0,n.jsxs)(a.li,{children:["\n",(0,n.jsx)(a.p,{children:"Bump the package"}),"\n",(0,n.jsx)(a.pre,{children:(0,n.jsx)(a.code,{className:"language-bash",children:"go-task bump\n"})}),"\n"]}),"\n",(0,n.jsxs)(a.li,{children:["\n",(0,n.jsx)(a.p,{children:"Make sure there are no unwanted changes"}),"\n",(0,n.jsx)(a.pre,{children:(0,n.jsx)(a.code,{className:"language-bash",children:"git diff .\n"})}),"\n"]}),"\n",(0,n.jsxs)(a.li,{children:["\n",(0,n.jsx)(a.p,{children:"Build the package using packages in your local repository"}),"\n",(0,n.jsx)(a.pre,{children:(0,n.jsx)(a.code,{className:"language-bash",children:"go-task build-local\n"})}),"\n"]}),"\n",(0,n.jsxs)(a.li,{children:["\n",(0,n.jsxs)(a.p,{children:[(0,n.jsx)(a.a,{href:"/docs/packaging/updating-an-existing-package#commit-your-changes",children:"Commit your changes"}),". Use this format for your commit message:"]}),"\n",(0,n.jsx)(a.pre,{children:(0,n.jsx)(a.code,{className:"language-git",children:"package: Rebuild for other-package\n"})}),"\n",(0,n.jsx)(a.p,{children:"Do this in the same git branch as the library update."}),"\n"]}),"\n"]}),"\n",(0,n.jsxs)(a.p,{children:["Once all packages in the stack have been rebuilt, ",(0,n.jsx)(a.a,{href:"/docs/packaging/submitting-a-pull-request",children:"submit a pull request for review"}),". If changes are requested, see ",(0,n.jsx)(a.a,{href:"/docs/packaging/submitting-a-pull-request#amending-a-pull-request-with-multiple-commits",children:"this section"})," about amending a pull request with multiple commits."]})]})}function h(e={}){const{wrapper:a}={...(0,i.a)(),...e.components};return a?(0,n.jsx)(a,{...e,children:(0,n.jsx)(o,{...e})}):o(e)}},11151:(e,a,s)=>{s.d(a,{Z:()=>c,a:()=>r});var n=s(67294);const i={},t=n.createContext(i);function r(e){const a=n.useContext(t);return n.useMemo((function(){return"function"==typeof e?e(a):{...a,...e}}),[a,e])}function c(e){let a;return a=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:r(e.components),n.createElement(t.Provider,{value:a},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/ad205e99.b5bdb675.js b/assets/js/ad205e99.b5bdb675.js new file mode 100644 index 000000000..d022fb182 --- /dev/null +++ b/assets/js/ad205e99.b5bdb675.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([["6995"],{53379:function(e,a,n){n.r(a),n.d(a,{metadata:()=>s,contentTitle:()=>l,default:()=>h,assets:()=>c,toc:()=>d,frontMatter:()=>r});var s=JSON.parse('{"id":"packaging/stack-rebuilds","title":"Rebuilding a stack","description":"In packaging, a stack is a package and the packages that depend on it. Most commonly, this refers to libraries, such as the Poppler stack, but other software can be referred to a stack as well. One example is the GNOME stack, which includes the libraries and applications that are the core of the GNOME desktop environment. Packages that depend on another package are called that package\'s reverse dependencies. When updating a library, one has to be mindful of its reverse dependencies, and if they will need to be rebuilt after updating the library.","source":"@site/docs/packaging/stack-rebuilds.md","sourceDirName":"packaging","slug":"/packaging/stack-rebuilds","permalink":"/docs/packaging/stack-rebuilds","draft":false,"unlisted":false,"editUrl":"https://github.com/getsolus/help-center-docs/tree/master/docs/packaging/stack-rebuilds.md","tags":[],"version":"current","lastUpdatedAt":1733757592000,"frontMatter":{"title":"Rebuilding a stack","summary":"Rebuilding a stack of package dependencies"},"sidebar":"packagingSidebar","previous":{"title":"Requesting a Package","permalink":"/docs/packaging/procedures/request-a-package"},"next":{"title":"Translation instructions","permalink":"/docs/packaging/translation-instructions"}}'),i=n("85893"),t=n("50065");let r={title:"Rebuilding a stack",summary:"Rebuilding a stack of package dependencies"},l="Rebuilding a stack",c={},d=[{value:"Updating the library",id:"updating-the-library",level:2},{value:"What are symbols?",id:"what-are-symbols",level:2},{value:"Checking if rebuilds are necessary",id:"checking-if-rebuilds-are-necessary",level:2},{value:"Finding reverse dependencies",id:"finding-reverse-dependencies",level:2},{value:"Rebuild the stack",id:"rebuild-the-stack",level:2}];function o(e){let a={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",header:"header",li:"li",ol:"ol",p:"p",pre:"pre",...(0,t.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(a.header,{children:(0,i.jsx)(a.h1,{id:"rebuilding-a-stack",children:"Rebuilding a stack"})}),"\n",(0,i.jsxs)(a.p,{children:["In packaging, a stack is a package and the packages that depend on it. Most commonly, this refers to libraries, such as the Poppler stack, but other software can be referred to a stack as well. One example is the GNOME stack, which includes the libraries and applications that are the core of the GNOME desktop environment. Packages that depend on another package are called that package's ",(0,i.jsx)(a.em,{children:"reverse dependencies"}),". When updating a library, one has to be mindful of its reverse dependencies, and if they will need to be rebuilt after updating the library."]}),"\n",(0,i.jsx)(a.admonition,{type:"note",children:(0,i.jsxs)(a.p,{children:["If you haven't already, you will need to ",(0,i.jsx)(a.a,{href:"/docs/packaging/advanced-config/local-repository",children:"set up a local repository"})," to do stack rebuilds."]})}),"\n",(0,i.jsx)(a.h2,{id:"updating-the-library",children:"Updating the library"}),"\n",(0,i.jsxs)(a.p,{children:["Go through the steps in ",(0,i.jsx)(a.a,{href:"/docs/packaging/updating-an-existing-package",children:"Updating an Existing Package"})," as normal, but instead of running ",(0,i.jsx)(a.code,{children:"go-task build"}),", run ",(0,i.jsx)(a.code,{children:"go-task build-localcp"}),". This will automatically copy the produced package files to your local repository for use in future builds."]}),"\n",(0,i.jsx)(a.h2,{id:"what-are-symbols",children:"What are symbols?"}),"\n",(0,i.jsxs)(a.p,{children:["Updating a library often means also building its reverse dependencies against the new version due to dynamic linking. Libraries are distributed as shared object, or ",(0,i.jsx)(a.code,{children:".so"}),", files, which contain the code symbols that other software can use. These files are usually versioned, such as ",(0,i.jsx)(a.code,{children:"libpoppler.so.140"}),'. This version is called the "so version". When a piece of software is built, it is ',(0,i.jsx)(a.em,{children:"linked"})," to the versioned libraries and code symbols that it uses."]}),"\n",(0,i.jsxs)(a.p,{children:["When the developers of a library release a new update, they may decide to bump the ",(0,i.jsx)(a.code,{children:".so"})," version, and code symbols are added and/or removed from the library. If this happens, but its reverse dependencies are not rebuilt after updating, they will try to use the old shared object file and symbols. Because they no longer exist, however, the program will crash when it tries to open them. Rebuilding the stack ensures that every piece of software is pointing to the correct version of its dependencies."]}),"\n",(0,i.jsx)(a.h2,{id:"checking-if-rebuilds-are-necessary",children:"Checking if rebuilds are necessary"}),"\n",(0,i.jsxs)(a.p,{children:["That's where the ",(0,i.jsx)(a.code,{children:"abi_*"})," files in the package repository come in. ",(0,i.jsx)(a.code,{children:"abi_libs"})," and ",(0,i.jsx)(a.code,{children:"abi_symbols"})," list the libraries and code symbols provided by a package, while ",(0,i.jsx)(a.code,{children:"abi_used_libs"})," and ",(0,i.jsx)(a.code,{children:"abi_used_symbols"})," list what libraries and symbols the package links to. After updating a package that has ",(0,i.jsx)(a.code,{children:"abi_libs"})," and ",(0,i.jsx)(a.code,{children:"abi_symbols"})," files, run ",(0,i.jsx)(a.code,{children:"git diff"})," on them and check for two things:"]}),"\n",(0,i.jsxs)(a.ol,{children:["\n",(0,i.jsxs)(a.li,{children:["Changes in the ",(0,i.jsx)(a.code,{children:".so"})," version"]}),"\n",(0,i.jsxs)(a.li,{children:["Removed lines in ",(0,i.jsx)(a.code,{children:"abi_symbols"})]}),"\n"]}),"\n",(0,i.jsx)(a.p,{children:"If either of these conditions are true, then all reverse dependencies of that package need to be rebuilt."}),"\n",(0,i.jsx)(a.admonition,{type:"note",children:(0,i.jsx)(a.p,{children:"Sometimes, packages in a stack are rebuilt even though the above conditions are not met. These are called Safety Rebuilds."})}),"\n",(0,i.jsx)(a.h2,{id:"finding-reverse-dependencies",children:"Finding reverse dependencies"}),"\n",(0,i.jsxs)(a.p,{children:["In most cases, all of the required rebuilds can be found by running ",(0,i.jsx)(a.code,{children:"eopkg info <package>"})," and looking at the Reverse Dependencies line, thanks to our tooling's automatic dependency detection. This doesn't always work, though, such as with ",(0,i.jsx)(a.code,{children:"abseil-cpp"}),". In that case, you can use a tool like RipGrep to find all of the packages that link against the library you're updating, for example:"]}),"\n",(0,i.jsx)(a.pre,{children:(0,i.jsx)(a.code,{className:"language-bash",children:'# Run in the root of the Solus package repository on your system\nrg "absl" packages/*/*/abi_used_libs\n'})}),"\n",(0,i.jsx)(a.h2,{id:"rebuild-the-stack",children:"Rebuild the stack"}),"\n",(0,i.jsx)(a.p,{children:"For each package in the stack, follow this procedure:"}),"\n",(0,i.jsxs)(a.ol,{children:["\n",(0,i.jsxs)(a.li,{children:["\n",(0,i.jsx)(a.p,{children:"Bump the package"}),"\n",(0,i.jsx)(a.pre,{children:(0,i.jsx)(a.code,{className:"language-bash",children:"go-task bump\n"})}),"\n"]}),"\n",(0,i.jsxs)(a.li,{children:["\n",(0,i.jsx)(a.p,{children:"Make sure there are no unwanted changes"}),"\n",(0,i.jsx)(a.pre,{children:(0,i.jsx)(a.code,{className:"language-bash",children:"git diff .\n"})}),"\n"]}),"\n",(0,i.jsxs)(a.li,{children:["\n",(0,i.jsx)(a.p,{children:"Build the package using packages in your local repository"}),"\n",(0,i.jsx)(a.pre,{children:(0,i.jsx)(a.code,{className:"language-bash",children:"go-task build-local\n"})}),"\n"]}),"\n",(0,i.jsxs)(a.li,{children:["\n",(0,i.jsxs)(a.p,{children:[(0,i.jsx)(a.a,{href:"/docs/packaging/updating-an-existing-package#commit-your-changes",children:"Commit your changes"}),". Use this format for your commit message:"]}),"\n",(0,i.jsx)(a.pre,{children:(0,i.jsx)(a.code,{className:"language-git",children:"package: Rebuild for other-package\n"})}),"\n",(0,i.jsx)(a.p,{children:"Do this in the same git branch as the library update."}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(a.p,{children:["Once all packages in the stack have been rebuilt, ",(0,i.jsx)(a.a,{href:"/docs/packaging/submitting-a-pull-request",children:"submit a pull request for review"}),". If changes are requested, see ",(0,i.jsx)(a.a,{href:"/docs/packaging/submitting-a-pull-request#amending-a-pull-request-with-multiple-commits",children:"this section"})," about amending a pull request with multiple commits."]})]})}function h(e={}){let{wrapper:a}={...(0,t.a)(),...e.components};return a?(0,i.jsx)(a,{...e,children:(0,i.jsx)(o,{...e})}):o(e)}},50065:function(e,a,n){n.d(a,{Z:function(){return l},a:function(){return r}});var s=n(67294);let i={},t=s.createContext(i);function r(e){let a=s.useContext(t);return s.useMemo(function(){return"function"==typeof e?e(a):{...a,...e}},[a,e])}function l(e){let a;return a=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:r(e.components),s.createElement(t.Provider,{value:a},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/b4302412.365f4a53.js b/assets/js/b4302412.365f4a53.js deleted file mode 100644 index 207cb5431..000000000 --- a/assets/js/b4302412.365f4a53.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[2081],{55892:(e,t,s)=>{s.r(t),s.d(t,{assets:()=>d,contentTitle:()=>o,default:()=>l,frontMatter:()=>i,metadata:()=>c,toc:()=>a});var n=s(85893),r=s(11151);const i={title:"Tips and Tricks",summary:"Useful tips and tricks for GNOME users"},o="Tips and Tricks",c={id:"user/editions/gnome/tips-and-tricks",title:"Tips and Tricks",description:"GNOME Keyboard Shortcuts",source:"@site/docs/user/editions/gnome/tips-and-tricks.md",sourceDirName:"user/editions/gnome",slug:"/user/editions/gnome/tips-and-tricks",permalink:"/docs/user/editions/gnome/tips-and-tricks",draft:!1,unlisted:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/editions/gnome/tips-and-tricks.md",tags:[],version:"current",lastUpdatedAt:1732716912e3,frontMatter:{title:"Tips and Tricks",summary:"Useful tips and tricks for GNOME users"},sidebar:"userSidebar",previous:{title:"Configuration",permalink:"/docs/user/editions/gnome/configuration"},next:{title:"MATE",permalink:"/docs/user/editions/mate/"}},d={},a=[{value:"GNOME Keyboard Shortcuts",id:"gnome-keyboard-shortcuts",level:2},{value:"GNOME Hot Corners",id:"gnome-hot-corners",level:2}];function u(e){const t={h1:"h1",h2:"h2",header:"header",p:"p",...(0,r.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.header,{children:(0,n.jsx)(t.h1,{id:"tips-and-tricks",children:"Tips and Tricks"})}),"\n",(0,n.jsx)(t.h2,{id:"gnome-keyboard-shortcuts",children:"GNOME Keyboard Shortcuts"}),"\n",(0,n.jsx)(t.p,{children:"TODO: Provide a quick guide to these shortcuts like we did for Budgie"}),"\n",(0,n.jsx)(t.h2,{id:"gnome-hot-corners",children:"GNOME Hot Corners"}),"\n",(0,n.jsx)(t.p,{children:"TODO: Since Hot Corners aren't easily discoverable, maybe a quick intro to using them"}),"\n",(0,n.jsx)(t.p,{children:"TODO: I'm sure there are other things that GNOME users can point out"})]})}function l(e={}){const{wrapper:t}={...(0,r.a)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(u,{...e})}):u(e)}},11151:(e,t,s)=>{s.d(t,{Z:()=>c,a:()=>o});var n=s(67294);const r={},i=n.createContext(r);function o(e){const t=n.useContext(i);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function c(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:o(e.components),n.createElement(i.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/b4302412.700e839d.js b/assets/js/b4302412.700e839d.js new file mode 100644 index 000000000..6047f4abf --- /dev/null +++ b/assets/js/b4302412.700e839d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([["3388"],{37967:function(e,t,s){s.r(t),s.d(t,{metadata:()=>n,contentTitle:()=>c,default:()=>l,assets:()=>d,toc:()=>a,frontMatter:()=>o});var n=JSON.parse('{"id":"user/editions/gnome/tips-and-tricks","title":"Tips and Tricks","description":"GNOME Keyboard Shortcuts","source":"@site/docs/user/editions/gnome/tips-and-tricks.md","sourceDirName":"user/editions/gnome","slug":"/user/editions/gnome/tips-and-tricks","permalink":"/docs/user/editions/gnome/tips-and-tricks","draft":false,"unlisted":false,"editUrl":"https://github.com/getsolus/help-center-docs/tree/master/docs/user/editions/gnome/tips-and-tricks.md","tags":[],"version":"current","lastUpdatedAt":1733757592000,"frontMatter":{"title":"Tips and Tricks","summary":"Useful tips and tricks for GNOME users"},"sidebar":"userSidebar","previous":{"title":"Configuration","permalink":"/docs/user/editions/gnome/configuration"},"next":{"title":"MATE","permalink":"/docs/user/editions/mate/"}}'),r=s("85893"),i=s("50065");let o={title:"Tips and Tricks",summary:"Useful tips and tricks for GNOME users"},c="Tips and Tricks",d={},a=[{value:"GNOME Keyboard Shortcuts",id:"gnome-keyboard-shortcuts",level:2},{value:"GNOME Hot Corners",id:"gnome-hot-corners",level:2}];function u(e){let t={h1:"h1",h2:"h2",header:"header",p:"p",...(0,i.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.header,{children:(0,r.jsx)(t.h1,{id:"tips-and-tricks",children:"Tips and Tricks"})}),"\n",(0,r.jsx)(t.h2,{id:"gnome-keyboard-shortcuts",children:"GNOME Keyboard Shortcuts"}),"\n",(0,r.jsx)(t.p,{children:"TODO: Provide a quick guide to these shortcuts like we did for Budgie"}),"\n",(0,r.jsx)(t.h2,{id:"gnome-hot-corners",children:"GNOME Hot Corners"}),"\n",(0,r.jsx)(t.p,{children:"TODO: Since Hot Corners aren't easily discoverable, maybe a quick intro to using them"}),"\n",(0,r.jsx)(t.p,{children:"TODO: I'm sure there are other things that GNOME users can point out"})]})}function l(e={}){let{wrapper:t}={...(0,i.a)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(u,{...e})}):u(e)}},50065:function(e,t,s){s.d(t,{Z:function(){return c},a:function(){return o}});var n=s(67294);let r={},i=n.createContext(r);function o(e){let t=n.useContext(i);return n.useMemo(function(){return"function"==typeof e?e(t):{...t,...e}},[t,e])}function c(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:o(e.components),n.createElement(i.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/b6ca4f35.2eb370e8.js b/assets/js/b6ca4f35.2eb370e8.js deleted file mode 100644 index 549f142cd..000000000 --- a/assets/js/b6ca4f35.2eb370e8.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[9214],{27983:e=>{e.exports=JSON.parse('{"tag":{"label":"packaging","permalink":"/blog/tags/packaging","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/packaging","page":1,"postsPerPage":1,"totalPages":1,"totalCount":1,"blogDescription":"The Solus Development (b)log!","blogTitle":"Solus DevLog"}}')}}]); \ No newline at end of file diff --git a/assets/js/b6ca4f35.a395af94.js b/assets/js/b6ca4f35.a395af94.js new file mode 100644 index 000000000..4ec12d576 --- /dev/null +++ b/assets/js/b6ca4f35.a395af94.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([["188"],{7:function(e){e.exports=JSON.parse('{"tag":{"label":"packaging","permalink":"/blog/tags/packaging","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/packaging","page":1,"postsPerPage":1,"totalPages":1,"totalCount":1,"blogDescription":"The Solus Development (b)log!","blogTitle":"Solus DevLog"}}')}}]); \ No newline at end of file diff --git a/assets/js/baa66232.58180d72.js b/assets/js/baa66232.58180d72.js new file mode 100644 index 000000000..e448e3cff --- /dev/null +++ b/assets/js/baa66232.58180d72.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([["2549"],{59710:function(e,n,r){r.r(n),r.d(n,{metadata:()=>o,contentTitle:()=>i,default:()=>u,assets:()=>l,toc:()=>c,frontMatter:()=>s});var o=JSON.parse('{"id":"user/software/camera/droidcam","title":"DroidCam","description":"DroidCam turns your phone or tablet into a webcam for your computer. You can use it with video conferencing programs like Zoom, MS Teams, and Skype.","source":"@site/docs/user/software/camera/droidcam.md","sourceDirName":"user/software/camera","slug":"/user/software/camera/droidcam","permalink":"/docs/user/software/camera/droidcam","draft":false,"unlisted":false,"editUrl":"https://github.com/getsolus/help-center-docs/tree/master/docs/user/software/camera/droidcam.md","tags":[],"version":"current","lastUpdatedAt":1733757592000,"frontMatter":{"title":"DroidCam","summary":"Quick Start guide to DroidCam on Solus"},"sidebar":"userSidebar","previous":{"title":"Camera","permalink":"/docs/category/camera"},"next":{"title":"Command Line","permalink":"/docs/user/software/command-line/"}}'),a=r("85893"),t=r("50065");let s={title:"DroidCam",summary:"Quick Start guide to DroidCam on Solus"},i="DroidCam",l={},c=[{value:"Before installation",id:"before-installation",level:2},{value:"Installation",id:"installation",level:2},{value:"Usage",id:"usage",level:2}];function d(e){let n={a:"a",code:"code",h1:"h1",h2:"h2",header:"header",li:"li",p:"p",pre:"pre",ul:"ul",...(0,t.a)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(n.header,{children:(0,a.jsx)(n.h1,{id:"droidcam",children:"DroidCam"})}),"\n",(0,a.jsxs)(n.p,{children:[(0,a.jsx)(n.a,{href:"https://www.dev47apps.com/",children:"DroidCam"})," turns your phone or tablet into a webcam for your computer. You can use it with video conferencing programs like Zoom, MS Teams, and Skype."]}),"\n",(0,a.jsx)(n.h2,{id:"before-installation",children:"Before installation"}),"\n",(0,a.jsxs)(n.p,{children:["DroidCam relies on the v4l2loopback kernel module. So you need to install ",(0,a.jsx)(n.code,{children:"v4l2loopback"})," or ",(0,a.jsx)(n.code,{children:"v4l2loopback-current"})," depending of which kernel is installed on your computer. To find out which kernel is installed, run:"]}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"uname -r\n"})}),"\n",(0,a.jsxs)(n.p,{children:["This should return a version which ends in ",(0,a.jsx)(n.code,{children:".current"})," or ",(0,a.jsx)(n.code,{children:".lts"}),"."]}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsxs)(n.li,{children:['If you are running the "current" kernel, install ',(0,a.jsx)(n.code,{children:"v4l2loopback-current"}),":"]}),"\n"]}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"sudo eopkg install v4l2loopback-current\n"})}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsxs)(n.li,{children:['If you are running the "lts" kernel, install ',(0,a.jsx)(n.code,{children:"v4l2loopback"}),":"]}),"\n"]}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"sudo eopkg install v4l2loopback\n"})}),"\n",(0,a.jsx)(n.p,{children:"After the kernel module is installed, continue to installation steps."}),"\n",(0,a.jsx)(n.h2,{id:"installation",children:"Installation"}),"\n",(0,a.jsx)(n.p,{children:"DroidCam can be installed from Software Center or via terminal :"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"sudo eopkg it droidcam\n"})}),"\n",(0,a.jsx)(n.p,{children:"Once DroidCam is installed, reboot your system. Now DroidCam is ready to use."}),"\n",(0,a.jsx)(n.h2,{id:"usage",children:"Usage"}),"\n",(0,a.jsxs)(n.p,{children:["To start pairing your phone or tablet with your computer, you can follow steps provided by this ",(0,a.jsx)(n.a,{href:"https://www.dev47apps.com/droidcam/connect/",children:"guide"})," from the DroidCam developer."]})]})}function u(e={}){let{wrapper:n}={...(0,t.a)(),...e.components};return n?(0,a.jsx)(n,{...e,children:(0,a.jsx)(d,{...e})}):d(e)}},50065:function(e,n,r){r.d(n,{Z:function(){return i},a:function(){return s}});var o=r(67294);let a={},t=o.createContext(a);function s(e){let n=o.useContext(t);return o.useMemo(function(){return"function"==typeof e?e(n):{...n,...e}},[n,e])}function i(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:s(e.components),o.createElement(t.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/baa66232.bf45c7ea.js b/assets/js/baa66232.bf45c7ea.js deleted file mode 100644 index a53ae8e5d..000000000 --- a/assets/js/baa66232.bf45c7ea.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[984],{17789:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>l,contentTitle:()=>t,default:()=>u,frontMatter:()=>s,metadata:()=>i,toc:()=>c});var o=r(85893),a=r(11151);const s={title:"DroidCam",summary:"Quick Start guide to DroidCam on Solus"},t="DroidCam",i={id:"user/software/camera/droidcam",title:"DroidCam",description:"DroidCam turns your phone or tablet into a webcam for your computer. You can use it with video conferencing programs like Zoom, MS Teams, and Skype.",source:"@site/docs/user/software/camera/droidcam.md",sourceDirName:"user/software/camera",slug:"/user/software/camera/droidcam",permalink:"/docs/user/software/camera/droidcam",draft:!1,unlisted:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/software/camera/droidcam.md",tags:[],version:"current",lastUpdatedAt:1732716912e3,frontMatter:{title:"DroidCam",summary:"Quick Start guide to DroidCam on Solus"},sidebar:"userSidebar",previous:{title:"Camera",permalink:"/docs/category/camera"},next:{title:"Command Line",permalink:"/docs/user/software/command-line/"}},l={},c=[{value:"Before installation",id:"before-installation",level:2},{value:"Installation",id:"installation",level:2},{value:"Usage",id:"usage",level:2}];function d(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",header:"header",li:"li",p:"p",pre:"pre",ul:"ul",...(0,a.a)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(n.header,{children:(0,o.jsx)(n.h1,{id:"droidcam",children:"DroidCam"})}),"\n",(0,o.jsxs)(n.p,{children:[(0,o.jsx)(n.a,{href:"https://www.dev47apps.com/",children:"DroidCam"})," turns your phone or tablet into a webcam for your computer. You can use it with video conferencing programs like Zoom, MS Teams, and Skype."]}),"\n",(0,o.jsx)(n.h2,{id:"before-installation",children:"Before installation"}),"\n",(0,o.jsxs)(n.p,{children:["DroidCam relies on the v4l2loopback kernel module. So you need to install ",(0,o.jsx)(n.code,{children:"v4l2loopback"})," or ",(0,o.jsx)(n.code,{children:"v4l2loopback-current"})," depending of which kernel is installed on your computer. To find out which kernel is installed, run:"]}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-bash",children:"uname -r\n"})}),"\n",(0,o.jsxs)(n.p,{children:["This should return a version which ends in ",(0,o.jsx)(n.code,{children:".current"})," or ",(0,o.jsx)(n.code,{children:".lts"}),"."]}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsxs)(n.li,{children:['If you are running the "current" kernel, install ',(0,o.jsx)(n.code,{children:"v4l2loopback-current"}),":"]}),"\n"]}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-bash",children:"sudo eopkg install v4l2loopback-current\n"})}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsxs)(n.li,{children:['If you are running the "lts" kernel, install ',(0,o.jsx)(n.code,{children:"v4l2loopback"}),":"]}),"\n"]}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-bash",children:"sudo eopkg install v4l2loopback\n"})}),"\n",(0,o.jsx)(n.p,{children:"After the kernel module is installed, continue to installation steps."}),"\n",(0,o.jsx)(n.h2,{id:"installation",children:"Installation"}),"\n",(0,o.jsx)(n.p,{children:"DroidCam can be installed from Software Center or via terminal :"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-bash",children:"sudo eopkg it droidcam\n"})}),"\n",(0,o.jsx)(n.p,{children:"Once DroidCam is installed, reboot your system. Now DroidCam is ready to use."}),"\n",(0,o.jsx)(n.h2,{id:"usage",children:"Usage"}),"\n",(0,o.jsxs)(n.p,{children:["To start pairing your phone or tablet with your computer, you can follow steps provided by this ",(0,o.jsx)(n.a,{href:"https://www.dev47apps.com/droidcam/connect/",children:"guide"})," from the DroidCam developer."]})]})}function u(e={}){const{wrapper:n}={...(0,a.a)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(d,{...e})}):d(e)}},11151:(e,n,r)=>{r.d(n,{Z:()=>i,a:()=>t});var o=r(67294);const a={},s=o.createContext(a);function t(e){const n=o.useContext(s);return o.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function i(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:t(e.components),o.createElement(s.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/baf1b6e8.62f87ab0.js b/assets/js/baf1b6e8.62f87ab0.js deleted file mode 100644 index 063a5609a..000000000 --- a/assets/js/baf1b6e8.62f87ab0.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[9677],{14864:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>d,contentTitle:()=>r,default:()=>h,frontMatter:()=>i,metadata:()=>o,toc:()=>l});var s=t(85893),a=t(11151);const i={title:"Java",summary:"Learn how to install, run, and manage Java on Solus."},r="Java",o={id:"user/software/development/java",title:"Java",description:"Solus includes multiple LTS versions of Java in the repositories. You can install more than one version in your system at once.",source:"@site/docs/user/software/development/java.md",sourceDirName:"user/software/development",slug:"/user/software/development/java",permalink:"/docs/user/software/development/java",draft:!1,unlisted:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/software/development/java.md",tags:[],version:"current",lastUpdatedAt:1732716912e3,frontMatter:{title:"Java",summary:"Learn how to install, run, and manage Java on Solus."},sidebar:"userSidebar",previous:{title:"Containers",permalink:"/docs/user/software/development/containers"},next:{title:"PostgreSQL",permalink:"/docs/user/software/development/postgresql"}},d={},l=[{value:"Running Java applications",id:"running-java-applications",level:2}];function c(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",header:"header",li:"li",p:"p",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,a.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.header,{children:(0,s.jsx)(n.h1,{id:"java",children:"Java"})}),"\n",(0,s.jsx)(n.p,{children:"Solus includes multiple LTS versions of Java in the repositories. You can install more than one version in your system at once."}),"\n",(0,s.jsx)(n.admonition,{type:"tip",children:(0,s.jsxs)(n.p,{children:["If you need to install different versions of Java, use alternative installation methods such as ",(0,s.jsx)(n.a,{href:"https://sdkman.io/",children:(0,s.jsx)(n.em,{children:"SDKMAN!"})}),"."]})}),"\n",(0,s.jsxs)(n.p,{children:["All Java packages in the Solus repositories include the ",(0,s.jsx)(n.em,{children:"Java Runtime Environment"})," (JRE) and the ",(0,s.jsx)(n.em,{children:"Java Development Kit"})," (JDK)."]}),"\n",(0,s.jsx)(n.p,{children:"The following table lists the versions of Java available in the Solus repositories."}),"\n",(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{children:"Version"}),(0,s.jsx)(n.th,{children:"Package name"}),(0,s.jsx)(n.th,{children:"Installation directory"}),(0,s.jsx)(n.th,{children:"Included components"}),(0,s.jsx)(n.th,{children:"Notes"})]})}),(0,s.jsxs)(n.tbody,{children:[(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Java 11"}),(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"openjdk-11"})}),(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"/usr/lib64/openjdk-11"})}),(0,s.jsx)(n.td,{children:"JRE, JDK, OpenJFX"}),(0,s.jsx)(n.td,{})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Java 17"}),(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"openjdk-17"})}),(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"/usr/lib64/openjdk-17"})}),(0,s.jsx)(n.td,{children:"JRE, JDK"}),(0,s.jsx)(n.td,{})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Java 21"}),(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"openjdk-21"})}),(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"/usr/lib64/openjdk-21"})}),(0,s.jsx)(n.td,{children:"JRE, JDK"}),(0,s.jsx)(n.td,{})]})]})]}),"\n",(0,s.jsx)(n.h2,{id:"running-java-applications",children:"Running Java applications"}),"\n",(0,s.jsx)(n.admonition,{title:"Important",type:"caution",children:(0,s.jsxs)(n.p,{children:["Solus does not add Java to the ",(0,s.jsx)(n.code,{children:"PATH"})," environment variable by default."]})}),"\n",(0,s.jsx)(n.p,{children:"There are multiple ways to execute Java applications in Solus:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["Create a .desktop file, then add ",(0,s.jsx)(n.code,{children:"env JAVA_HOME=/path/to/jdk/bin"})," to Exec."]}),"\n",(0,s.jsxs)(n.li,{children:["Create a script that sets ",(0,s.jsx)(n.code,{children:"JAVA_HOME"})," before running the application."]}),"\n",(0,s.jsxs)(n.li,{children:["Symlink the ",(0,s.jsx)(n.code,{children:"java"})," executable from ",(0,s.jsx)(n.code,{children:"/path/to/jdk/bin"})," to ",(0,s.jsx)(n.code,{children:"/usr/bin"}),"."]}),"\n",(0,s.jsxs)(n.li,{children:["Add ",(0,s.jsx)(n.code,{children:"/path/to/jdk/bin"})," to your PATH environment variable."]}),"\n"]})]})}function h(e={}){const{wrapper:n}={...(0,a.a)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(c,{...e})}):c(e)}},11151:(e,n,t)=>{t.d(n,{Z:()=>o,a:()=>r});var s=t(67294);const a={},i=s.createContext(a);function r(e){const n=s.useContext(i);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:r(e.components),s.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/baf1b6e8.ade100ee.js b/assets/js/baf1b6e8.ade100ee.js new file mode 100644 index 000000000..3e298fedb --- /dev/null +++ b/assets/js/baf1b6e8.ade100ee.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([["6762"],{25709:function(e,n,t){t.r(n),t.d(n,{metadata:()=>s,contentTitle:()=>o,default:()=>h,assets:()=>l,toc:()=>d,frontMatter:()=>r});var s=JSON.parse('{"id":"user/software/development/java","title":"Java","description":"Solus includes multiple LTS versions of Java in the repositories. You can install more than one version in your system at once.","source":"@site/docs/user/software/development/java.md","sourceDirName":"user/software/development","slug":"/user/software/development/java","permalink":"/docs/user/software/development/java","draft":false,"unlisted":false,"editUrl":"https://github.com/getsolus/help-center-docs/tree/master/docs/user/software/development/java.md","tags":[],"version":"current","lastUpdatedAt":1733757592000,"frontMatter":{"title":"Java","summary":"Learn how to install, run, and manage Java on Solus."},"sidebar":"userSidebar","previous":{"title":"Containers","permalink":"/docs/user/software/development/containers"},"next":{"title":"PostgreSQL","permalink":"/docs/user/software/development/postgresql"}}'),i=t("85893"),a=t("50065");let r={title:"Java",summary:"Learn how to install, run, and manage Java on Solus."},o="Java",l={},d=[{value:"Running Java applications",id:"running-java-applications",level:2}];function c(e){let n={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",header:"header",li:"li",p:"p",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,a.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.header,{children:(0,i.jsx)(n.h1,{id:"java",children:"Java"})}),"\n",(0,i.jsx)(n.p,{children:"Solus includes multiple LTS versions of Java in the repositories. You can install more than one version in your system at once."}),"\n",(0,i.jsx)(n.admonition,{type:"tip",children:(0,i.jsxs)(n.p,{children:["If you need to install different versions of Java, use alternative installation methods such as ",(0,i.jsx)(n.a,{href:"https://sdkman.io/",children:(0,i.jsx)(n.em,{children:"SDKMAN!"})}),"."]})}),"\n",(0,i.jsxs)(n.p,{children:["All Java packages in the Solus repositories include the ",(0,i.jsx)(n.em,{children:"Java Runtime Environment"})," (JRE) and the ",(0,i.jsx)(n.em,{children:"Java Development Kit"})," (JDK)."]}),"\n",(0,i.jsx)(n.p,{children:"The following table lists the versions of Java available in the Solus repositories."}),"\n",(0,i.jsxs)(n.table,{children:[(0,i.jsx)(n.thead,{children:(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.th,{children:"Version"}),(0,i.jsx)(n.th,{children:"Package name"}),(0,i.jsx)(n.th,{children:"Installation directory"}),(0,i.jsx)(n.th,{children:"Included components"}),(0,i.jsx)(n.th,{children:"Notes"})]})}),(0,i.jsxs)(n.tbody,{children:[(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"Java 11"}),(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"openjdk-11"})}),(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"/usr/lib64/openjdk-11"})}),(0,i.jsx)(n.td,{children:"JRE, JDK, OpenJFX"}),(0,i.jsx)(n.td,{})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"Java 17"}),(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"openjdk-17"})}),(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"/usr/lib64/openjdk-17"})}),(0,i.jsx)(n.td,{children:"JRE, JDK"}),(0,i.jsx)(n.td,{})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"Java 21"}),(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"openjdk-21"})}),(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"/usr/lib64/openjdk-21"})}),(0,i.jsx)(n.td,{children:"JRE, JDK"}),(0,i.jsx)(n.td,{})]})]})]}),"\n",(0,i.jsx)(n.h2,{id:"running-java-applications",children:"Running Java applications"}),"\n",(0,i.jsx)(n.admonition,{title:"Important",type:"caution",children:(0,i.jsxs)(n.p,{children:["Solus does not add Java to the ",(0,i.jsx)(n.code,{children:"PATH"})," environment variable by default."]})}),"\n",(0,i.jsx)(n.p,{children:"There are multiple ways to execute Java applications in Solus:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Create a .desktop file, then add ",(0,i.jsx)(n.code,{children:"env JAVA_HOME=/path/to/jdk/bin"})," to Exec."]}),"\n",(0,i.jsxs)(n.li,{children:["Create a script that sets ",(0,i.jsx)(n.code,{children:"JAVA_HOME"})," before running the application."]}),"\n",(0,i.jsxs)(n.li,{children:["Symlink the ",(0,i.jsx)(n.code,{children:"java"})," executable from ",(0,i.jsx)(n.code,{children:"/path/to/jdk/bin"})," to ",(0,i.jsx)(n.code,{children:"/usr/bin"}),"."]}),"\n",(0,i.jsxs)(n.li,{children:["Add ",(0,i.jsx)(n.code,{children:"/path/to/jdk/bin"})," to your PATH environment variable."]}),"\n"]})]})}function h(e={}){let{wrapper:n}={...(0,a.a)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(c,{...e})}):c(e)}},50065:function(e,n,t){t.d(n,{Z:function(){return o},a:function(){return r}});var s=t(67294);let i={},a=s.createContext(i);function r(e){let n=s.useContext(a);return s.useMemo(function(){return"function"==typeof e?e(n):{...n,...e}},[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:r(e.components),s.createElement(a.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/be4ac66b.a5924dbe.js b/assets/js/be4ac66b.a5924dbe.js deleted file mode 100644 index 8f87b6daa..000000000 --- a/assets/js/be4ac66b.a5924dbe.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[4869],{87190:(n,i,e)=>{e.r(i),e.d(i,{assets:()=>h,contentTitle:()=>d,default:()=>t,frontMatter:()=>r,metadata:()=>o,toc:()=>c});var l=e(85893),s=e(11151);const r={title:"Laptops",summary:"List of known-working laptop hardware from various vendors"},d="Laptops",o={id:"user/hardware/compatibility/laptops",title:"Laptops",description:"The following laptops have been tested and/or suggested to function correctly by our users.",source:"@site/docs/user/hardware/compatibility/laptops.md",sourceDirName:"user/hardware/compatibility",slug:"/user/hardware/compatibility/laptops",permalink:"/docs/user/hardware/compatibility/laptops",draft:!1,unlisted:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/hardware/compatibility/laptops.md",tags:[],version:"current",lastUpdatedAt:1732716912e3,frontMatter:{title:"Laptops",summary:"List of known-working laptop hardware from various vendors"},sidebar:"userSidebar",previous:{title:"Compatibility",permalink:"/docs/category/compatibility"},next:{title:"WiFi",permalink:"/docs/user/hardware/compatibility/wifi"}},h={},c=[{value:"Acer",id:"acer",level:2},{value:"Alienware",id:"alienware",level:2},{value:"Apple",id:"apple",level:2},{value:"ASUS",id:"asus",level:2},{value:"Dell",id:"dell",level:2},{value:"eMachines",id:"emachines",level:2},{value:"Fujitsu",id:"fujitsu",level:2},{value:"GIGABYTE",id:"gigabyte",level:2},{value:"Google",id:"google",level:2},{value:"HP",id:"hp",level:2},{value:"Lenovo",id:"lenovo",level:2},{value:"MSI",id:"msi",level:2},{value:"Samsung",id:"samsung",level:2},{value:"Schenker",id:"schenker",level:2},{value:"Sony",id:"sony",level:2},{value:"System76",id:"system76",level:2},{value:"Toshiba",id:"toshiba",level:2}];function a(n){const i={em:"em",h1:"h1",h2:"h2",header:"header",li:"li",p:"p",ul:"ul",...(0,s.a)(),...n.components};return(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)(i.header,{children:(0,l.jsx)(i.h1,{id:"laptops",children:"Laptops"})}),"\n",(0,l.jsx)(i.p,{children:"The following laptops have been tested and/or suggested to function correctly by our users."}),"\n",(0,l.jsxs)(i.p,{children:["This list should not suggest that ",(0,l.jsx)(i.em,{children:"only"})," such devices listed below are compatible with Solus, as there may be devices not listed below that are in fact compatible."]}),"\n",(0,l.jsx)(i.h2,{id:"acer",children:"Acer"}),"\n",(0,l.jsxs)(i.ul,{children:["\n",(0,l.jsx)(i.li,{children:"Acer Aspire 1825PTZ"}),"\n",(0,l.jsx)(i.li,{children:"Acer Aspire 4830T"}),"\n",(0,l.jsx)(i.li,{children:"Acer Aspire 5750G"}),"\n",(0,l.jsx)(i.li,{children:"Acer Aspire 7551"}),"\n",(0,l.jsx)(i.li,{children:"Acer Aspire E5-473-370Z"}),"\n",(0,l.jsx)(i.li,{children:"Acer Aspire E5-573G"}),"\n",(0,l.jsx)(i.li,{children:"Acer Aspire E5-575G"}),"\n",(0,l.jsx)(i.li,{children:"Acer Aspire ES 15 (ES1-572-5025)"}),"\n",(0,l.jsx)(i.li,{children:"Acer Aspire ES 17 (ES1-731G-P1MC)"}),"\n",(0,l.jsx)(i.li,{children:"Acer Aspire V3-112P"}),"\n",(0,l.jsx)(i.li,{children:"Acer Aspire V3-571G"}),"\n",(0,l.jsx)(i.li,{children:"Acer Aspire V5-121"}),"\n",(0,l.jsx)(i.li,{children:"Acer C710 Chromebook"}),"\n",(0,l.jsx)(i.li,{children:"Acer C720-2848 Chromebook"}),"\n",(0,l.jsx)(i.li,{children:"Acer TravelMate X349-G2-M"}),"\n"]}),"\n",(0,l.jsx)(i.h2,{id:"alienware",children:"Alienware"}),"\n",(0,l.jsxs)(i.ul,{children:["\n",(0,l.jsx)(i.li,{children:"Alienware 14"}),"\n",(0,l.jsx)(i.li,{children:"Alienware 17 R3"}),"\n",(0,l.jsx)(i.li,{children:"Alienware 17 R4"}),"\n"]}),"\n",(0,l.jsx)(i.h2,{id:"apple",children:"Apple"}),"\n",(0,l.jsxs)(i.ul,{children:["\n",(0,l.jsx)(i.li,{children:"Apple Macbook (late 2008)"}),"\n",(0,l.jsx)(i.li,{children:"Apple MacBookPro8,3"}),"\n"]}),"\n",(0,l.jsx)(i.h2,{id:"asus",children:"ASUS"}),"\n",(0,l.jsxs)(i.ul,{children:["\n",(0,l.jsx)(i.li,{children:"Asus EEE-PC 1001PX"}),"\n",(0,l.jsx)(i.li,{children:"Asus EEE-PC 1011PX"}),"\n",(0,l.jsx)(i.li,{children:"Asus K401UQK"}),"\n",(0,l.jsx)(i.li,{children:"Asus K53U"}),"\n",(0,l.jsx)(i.li,{children:"Asus K55VM"}),"\n",(0,l.jsx)(i.li,{children:"Asus K401UQK"}),"\n",(0,l.jsx)(i.li,{children:"Asus M50VM"}),"\n",(0,l.jsx)(i.li,{children:"Asus N501JW"}),"\n",(0,l.jsx)(i.li,{children:"Asus Pro50SR"}),"\n",(0,l.jsx)(i.li,{children:"Asus ROG G750JZA"}),"\n",(0,l.jsxs)(i.li,{children:["Asus VivoBook 15 K505ZA","\n",(0,l.jsxs)(i.ul,{children:["\n",(0,l.jsx)(i.li,{children:"Must use BIOS revision 306 for functional touchpad."}),"\n"]}),"\n"]}),"\n",(0,l.jsxs)(i.li,{children:["Asus VivoBook 15 X505ZA","\n",(0,l.jsxs)(i.ul,{children:["\n",(0,l.jsx)(i.li,{children:"Must use BIOS revision 306 for functional touchpad."}),"\n"]}),"\n"]}),"\n",(0,l.jsxs)(i.li,{children:["Asus VivoBook 15 X505ZA-BQ171T","\n",(0,l.jsxs)(i.ul,{children:["\n",(0,l.jsx)(i.li,{children:"Must use BIOS revision 306 for functional touchpad."}),"\n"]}),"\n"]}),"\n",(0,l.jsx)(i.li,{children:"Asus VivoBook Pro N61JA"}),"\n",(0,l.jsx)(i.li,{children:"Asus VivoBook Pro N61Jv"}),"\n",(0,l.jsx)(i.li,{children:"Asus X200MA"}),"\n",(0,l.jsx)(i.li,{children:"Asus X201EV"}),"\n",(0,l.jsx)(i.li,{children:"Asus X540L"}),"\n",(0,l.jsx)(i.li,{children:"Asus X55"}),"\n",(0,l.jsx)(i.li,{children:"Asus X550LD"}),"\n",(0,l.jsx)(i.li,{children:"Asus X551CAP"}),"\n",(0,l.jsx)(i.li,{children:"Asus ZenBook UX31A"}),"\n",(0,l.jsx)(i.li,{children:"Asus ZenBook UX305FA"}),"\n"]}),"\n",(0,l.jsx)(i.h2,{id:"dell",children:"Dell"}),"\n",(0,l.jsxs)(i.ul,{children:["\n",(0,l.jsx)(i.li,{children:"Dell Inspiron 14 3442"}),"\n",(0,l.jsx)(i.li,{children:"Dell Inspiron 14 3452"}),"\n",(0,l.jsx)(i.li,{children:"Dell Inspiron 15 7579"}),"\n",(0,l.jsx)(i.li,{children:"Dell Inspiron 15R N5010"}),"\n",(0,l.jsx)(i.li,{children:"Dell Inspiron 15R N5110"}),"\n",(0,l.jsx)(i.li,{children:"Dell Inspiron 1110"}),"\n",(0,l.jsx)(i.li,{children:"Dell Inspiron 5050"}),"\n",(0,l.jsx)(i.li,{children:"Dell Inspiron 7548"}),"\n",(0,l.jsx)(i.li,{children:"Dell Latitude D830"}),"\n",(0,l.jsx)(i.li,{children:"Dell Latitude E4310"}),"\n",(0,l.jsx)(i.li,{children:"Dell Latitude E5440"}),"\n",(0,l.jsx)(i.li,{children:"Dell Latitude E5510"}),"\n",(0,l.jsx)(i.li,{children:"Dell Latitude E6230"}),"\n",(0,l.jsx)(i.li,{children:"Dell Latitude E6320"}),"\n",(0,l.jsx)(i.li,{children:"Dell Latitude E6410"}),"\n",(0,l.jsx)(i.li,{children:"Dell Latitude E6420"}),"\n",(0,l.jsx)(i.li,{children:"Dell Latitude E6430"}),"\n",(0,l.jsx)(i.li,{children:"Dell Latitude E6530"}),"\n",(0,l.jsx)(i.li,{children:"Dell Precision 7520"}),"\n",(0,l.jsx)(i.li,{children:"Dell Precision M6500"}),"\n",(0,l.jsx)(i.li,{children:"Dell Vostro 1700"}),"\n",(0,l.jsx)(i.li,{children:"Dell XPS 15 9560"}),"\n"]}),"\n",(0,l.jsx)(i.h2,{id:"emachines",children:"eMachines"}),"\n",(0,l.jsxs)(i.ul,{children:["\n",(0,l.jsx)(i.li,{children:"eMachines E728"}),"\n"]}),"\n",(0,l.jsx)(i.h2,{id:"fujitsu",children:"Fujitsu"}),"\n",(0,l.jsxs)(i.ul,{children:["\n",(0,l.jsx)(i.li,{children:"Fujitsu Lifebook A531"}),"\n",(0,l.jsx)(i.li,{children:"Fujitsu Lifebook T900"}),"\n"]}),"\n",(0,l.jsx)(i.h2,{id:"gigabyte",children:"GIGABYTE"}),"\n",(0,l.jsxs)(i.ul,{children:["\n",(0,l.jsx)(i.li,{children:"GIGABYTE Aero 14K"}),"\n"]}),"\n",(0,l.jsx)(i.h2,{id:"google",children:"Google"}),"\n",(0,l.jsxs)(i.ul,{children:["\n",(0,l.jsx)(i.li,{children:"Google Chromebook CR48"}),"\n"]}),"\n",(0,l.jsx)(i.h2,{id:"hp",children:"HP"}),"\n",(0,l.jsxs)(i.ul,{children:["\n",(0,l.jsx)(i.li,{children:"HP 240 G3"}),"\n",(0,l.jsx)(i.li,{children:"HP Compaq 6730B"}),"\n",(0,l.jsx)(i.li,{children:"HP Compaq NC6400"}),"\n",(0,l.jsx)(i.li,{children:"HP Compaq Presario CQ61"}),"\n",(0,l.jsx)(i.li,{children:"HP EliteBook 8440P"}),"\n",(0,l.jsx)(i.li,{children:"HP EliteBook 8460p"}),"\n",(0,l.jsx)(i.li,{children:"HP EliteBook 8740w"}),"\n",(0,l.jsx)(i.li,{children:"HP EliteBook 8760w"}),"\n",(0,l.jsx)(i.li,{children:"HP Envy TS M6"}),"\n",(0,l.jsx)(i.li,{children:"HP Pavilion 15-E042SO"}),"\n",(0,l.jsx)(i.li,{children:"HP Pavilion DV6"}),"\n",(0,l.jsx)(i.li,{children:"HP Pavilion DV6Z-6c00"}),"\n",(0,l.jsx)(i.li,{children:"HP Pavilion DV6Z-6100"}),"\n",(0,l.jsx)(i.li,{children:"HP Pavilion DV7"}),"\n",(0,l.jsx)(i.li,{children:"HP Pavilion DV2700"}),"\n",(0,l.jsx)(i.li,{children:"HP Pavilion x360 Convertible"}),"\n",(0,l.jsx)(i.li,{children:"HP Presario V6000"}),"\n",(0,l.jsx)(i.li,{children:"HP Probook 6360b"}),"\n",(0,l.jsx)(i.li,{children:"HP ProBook 6450b"}),"\n"]}),"\n",(0,l.jsx)(i.h2,{id:"lenovo",children:"Lenovo"}),"\n",(0,l.jsxs)(i.ul,{children:["\n",(0,l.jsx)(i.li,{children:"Lenovo 3000 V200"}),"\n",(0,l.jsx)(i.li,{children:"Lenovo B41-80"}),"\n",(0,l.jsx)(i.li,{children:"Lenovo B50-50"}),"\n",(0,l.jsx)(i.li,{children:"Lenovo G50-80"}),"\n",(0,l.jsx)(i.li,{children:"Lenovo G510"}),"\n",(0,l.jsx)(i.li,{children:"Lenovo IdeaPad S145-15API"}),"\n",(0,l.jsx)(i.li,{children:"Lenovo IdeaPad S400U"}),"\n",(0,l.jsx)(i.li,{children:"Lenovo IdeaPad U310 Touch"}),"\n",(0,l.jsx)(i.li,{children:"Lenovo IdeaPad Z370"}),"\n",(0,l.jsx)(i.li,{children:"Lenovo IdeaPad Z585"}),"\n",(0,l.jsx)(i.li,{children:"Lenovo ThinkPad 13"}),"\n",(0,l.jsx)(i.li,{children:"Lenovo ThinkPad A485 (with latest BIOS update)"}),"\n",(0,l.jsx)(i.li,{children:"Lenovo ThinkPad E450"}),"\n",(0,l.jsx)(i.li,{children:"Lenovo ThinkPad E550"}),"\n",(0,l.jsx)(i.li,{children:"Lenovo ThinkPad Edge E545"}),"\n",(0,l.jsx)(i.li,{children:"Lenovo Thinkpad L412"}),"\n",(0,l.jsx)(i.li,{children:"Lenovo ThinkPad L440"}),"\n",(0,l.jsx)(i.li,{children:"Lenovo ThinkPad L512"}),"\n",(0,l.jsx)(i.li,{children:"Lenovo ThinkPad R60e"}),"\n",(0,l.jsx)(i.li,{children:"Lenovo ThinkPad S5-S540"}),"\n",(0,l.jsx)(i.li,{children:"Lenovo ThinkPad SL510"}),"\n",(0,l.jsx)(i.li,{children:"Lenovo Thinkpad T400 (2767V2W)"}),"\n",(0,l.jsx)(i.li,{children:"Lenovo ThinkPad T410i"}),"\n",(0,l.jsx)(i.li,{children:"Lenovo ThinkPad T420"}),"\n",(0,l.jsx)(i.li,{children:"Lenovo ThinkPad T430"}),"\n",(0,l.jsx)(i.li,{children:"Lenovo ThinkPad T440"}),"\n",(0,l.jsx)(i.li,{children:"Lenovo ThinkPad T440s"}),"\n",(0,l.jsx)(i.li,{children:"Lenovo ThinkPad T470"}),"\n",(0,l.jsx)(i.li,{children:"Lenovo ThinkPad T470s"}),"\n",(0,l.jsx)(i.li,{children:"Lenovo ThinkPad T490s"}),"\n",(0,l.jsx)(i.li,{children:"Lenovo ThinkPad T560"}),"\n",(0,l.jsx)(i.li,{children:"Lenovo ThinkPad T570"}),"\n",(0,l.jsx)(i.li,{children:"Lenovo ThinkPad W520 4270CTO"}),"\n",(0,l.jsx)(i.li,{children:"Lenovo ThinkPad X1 Carbon 3rd Edition"}),"\n",(0,l.jsx)(i.li,{children:"Lenovo ThinkPad X1 Carbon 4th Edition"}),"\n",(0,l.jsx)(i.li,{children:"Lenovo ThinkPad X61"}),"\n",(0,l.jsx)(i.li,{children:"Lenovo ThinkPad X200T"}),"\n",(0,l.jsx)(i.li,{children:"Lenovo ThinkPad X201"}),"\n",(0,l.jsx)(i.li,{children:"Lenovo ThinkPad X220"}),"\n",(0,l.jsx)(i.li,{children:"Lenovo ThinkPad X230"}),"\n",(0,l.jsx)(i.li,{children:"Lenovo ThinkPad X280"}),"\n",(0,l.jsx)(i.li,{children:"Lenovo Yoga 2 11"}),"\n",(0,l.jsx)(i.li,{children:"Lenovo Z50-70"}),"\n"]}),"\n",(0,l.jsx)(i.h2,{id:"msi",children:"MSI"}),"\n",(0,l.jsxs)(i.ul,{children:["\n",(0,l.jsx)(i.li,{children:"MSI GE70"}),"\n"]}),"\n",(0,l.jsx)(i.h2,{id:"samsung",children:"Samsung"}),"\n",(0,l.jsxs)(i.ul,{children:["\n",(0,l.jsx)(i.li,{children:"Samsung NP270E5E-X02PL"}),"\n",(0,l.jsx)(i.li,{children:"Samsung NP300E4C-AD5BR"}),"\n",(0,l.jsx)(i.li,{children:"Samsung NP355E5C"}),"\n",(0,l.jsx)(i.li,{children:"Samsung NP365E5C-S04US"}),"\n",(0,l.jsx)(i.li,{children:"Samsung NP900X3G"}),"\n",(0,l.jsx)(i.li,{children:"Samsung NP900X4C-AU05"}),"\n"]}),"\n",(0,l.jsx)(i.h2,{id:"schenker",children:"Schenker"}),"\n",(0,l.jsxs)(i.ul,{children:["\n",(0,l.jsx)(i.li,{children:"Schenker XMG A506-VE"}),"\n"]}),"\n",(0,l.jsx)(i.h2,{id:"sony",children:"Sony"}),"\n",(0,l.jsxs)(i.ul,{children:["\n",(0,l.jsx)(i.li,{children:"Sony VAIO Pro 13"}),"\n",(0,l.jsx)(i.li,{children:"Sony VAIO S Series 13"}),"\n",(0,l.jsx)(i.li,{children:"Sony VAIO VPCEC3M1E"}),"\n"]}),"\n",(0,l.jsx)(i.h2,{id:"system76",children:"System76"}),"\n",(0,l.jsxs)(i.ul,{children:["\n",(0,l.jsx)(i.li,{children:"System76 Gazelle Professional"}),"\n"]}),"\n",(0,l.jsx)(i.h2,{id:"toshiba",children:"Toshiba"}),"\n",(0,l.jsxs)(i.ul,{children:["\n",(0,l.jsx)(i.li,{children:"Toshiba Portege R930"}),"\n",(0,l.jsx)(i.li,{children:"Toshiba Qosmio X305"}),"\n",(0,l.jsx)(i.li,{children:"Toshiba Qosmio X875"}),"\n",(0,l.jsx)(i.li,{children:"Toshiba Satellite A660"}),"\n",(0,l.jsx)(i.li,{children:"Toshiba Satellite C50D-A-125"}),"\n",(0,l.jsx)(i.li,{children:"Toshiba Satellite C55D"}),"\n",(0,l.jsx)(i.li,{children:"Toshiba Satellite C640"}),"\n",(0,l.jsx)(i.li,{children:"Toshiba Satellite C665D"}),"\n",(0,l.jsx)(i.li,{children:"Toshiba Satellite L300D"}),"\n",(0,l.jsx)(i.li,{children:"Toshiba Satellite L455D"}),"\n",(0,l.jsx)(i.li,{children:"Toshiba Satellite L850-B218"}),"\n",(0,l.jsx)(i.li,{children:"Toshiba Satellite L855D"}),"\n",(0,l.jsx)(i.li,{children:"Toshiba Tecra A11"}),"\n"]})]})}function t(n={}){const{wrapper:i}={...(0,s.a)(),...n.components};return i?(0,l.jsx)(i,{...n,children:(0,l.jsx)(a,{...n})}):a(n)}},11151:(n,i,e)=>{e.d(i,{Z:()=>o,a:()=>d});var l=e(67294);const s={},r=l.createContext(s);function d(n){const i=l.useContext(r);return l.useMemo((function(){return"function"==typeof n?n(i):{...i,...n}}),[i,n])}function o(n){let i;return i=n.disableParentContext?"function"==typeof n.components?n.components(s):n.components||s:d(n.components),l.createElement(r.Provider,{value:i},n.children)}}}]); \ No newline at end of file diff --git a/assets/js/be4ac66b.f0a25510.js b/assets/js/be4ac66b.f0a25510.js new file mode 100644 index 000000000..f3fcd7e67 --- /dev/null +++ b/assets/js/be4ac66b.f0a25510.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([["6857"],{81522:function(n,i,e){e.r(i),e.d(i,{metadata:()=>l,contentTitle:()=>o,default:()=>t,assets:()=>h,toc:()=>c,frontMatter:()=>d});var l=JSON.parse('{"id":"user/hardware/compatibility/laptops","title":"Laptops","description":"The following laptops have been tested and/or suggested to function correctly by our users.","source":"@site/docs/user/hardware/compatibility/laptops.md","sourceDirName":"user/hardware/compatibility","slug":"/user/hardware/compatibility/laptops","permalink":"/docs/user/hardware/compatibility/laptops","draft":false,"unlisted":false,"editUrl":"https://github.com/getsolus/help-center-docs/tree/master/docs/user/hardware/compatibility/laptops.md","tags":[],"version":"current","lastUpdatedAt":1733757592000,"frontMatter":{"title":"Laptops","summary":"List of known-working laptop hardware from various vendors"},"sidebar":"userSidebar","previous":{"title":"Compatibility","permalink":"/docs/category/compatibility"},"next":{"title":"WiFi","permalink":"/docs/user/hardware/compatibility/wifi"}}'),s=e("85893"),r=e("50065");let d={title:"Laptops",summary:"List of known-working laptop hardware from various vendors"},o="Laptops",h={},c=[{value:"Acer",id:"acer",level:2},{value:"Alienware",id:"alienware",level:2},{value:"Apple",id:"apple",level:2},{value:"ASUS",id:"asus",level:2},{value:"Dell",id:"dell",level:2},{value:"eMachines",id:"emachines",level:2},{value:"Fujitsu",id:"fujitsu",level:2},{value:"GIGABYTE",id:"gigabyte",level:2},{value:"Google",id:"google",level:2},{value:"HP",id:"hp",level:2},{value:"Lenovo",id:"lenovo",level:2},{value:"MSI",id:"msi",level:2},{value:"Samsung",id:"samsung",level:2},{value:"Schenker",id:"schenker",level:2},{value:"Sony",id:"sony",level:2},{value:"System76",id:"system76",level:2},{value:"Toshiba",id:"toshiba",level:2}];function a(n){let i={em:"em",h1:"h1",h2:"h2",header:"header",li:"li",p:"p",ul:"ul",...(0,r.a)(),...n.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(i.header,{children:(0,s.jsx)(i.h1,{id:"laptops",children:"Laptops"})}),"\n",(0,s.jsx)(i.p,{children:"The following laptops have been tested and/or suggested to function correctly by our users."}),"\n",(0,s.jsxs)(i.p,{children:["This list should not suggest that ",(0,s.jsx)(i.em,{children:"only"})," such devices listed below are compatible with Solus, as there may be devices not listed below that are in fact compatible."]}),"\n",(0,s.jsx)(i.h2,{id:"acer",children:"Acer"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsx)(i.li,{children:"Acer Aspire 1825PTZ"}),"\n",(0,s.jsx)(i.li,{children:"Acer Aspire 4830T"}),"\n",(0,s.jsx)(i.li,{children:"Acer Aspire 5750G"}),"\n",(0,s.jsx)(i.li,{children:"Acer Aspire 7551"}),"\n",(0,s.jsx)(i.li,{children:"Acer Aspire E5-473-370Z"}),"\n",(0,s.jsx)(i.li,{children:"Acer Aspire E5-573G"}),"\n",(0,s.jsx)(i.li,{children:"Acer Aspire E5-575G"}),"\n",(0,s.jsx)(i.li,{children:"Acer Aspire ES 15 (ES1-572-5025)"}),"\n",(0,s.jsx)(i.li,{children:"Acer Aspire ES 17 (ES1-731G-P1MC)"}),"\n",(0,s.jsx)(i.li,{children:"Acer Aspire V3-112P"}),"\n",(0,s.jsx)(i.li,{children:"Acer Aspire V3-571G"}),"\n",(0,s.jsx)(i.li,{children:"Acer Aspire V5-121"}),"\n",(0,s.jsx)(i.li,{children:"Acer C710 Chromebook"}),"\n",(0,s.jsx)(i.li,{children:"Acer C720-2848 Chromebook"}),"\n",(0,s.jsx)(i.li,{children:"Acer TravelMate X349-G2-M"}),"\n"]}),"\n",(0,s.jsx)(i.h2,{id:"alienware",children:"Alienware"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsx)(i.li,{children:"Alienware 14"}),"\n",(0,s.jsx)(i.li,{children:"Alienware 17 R3"}),"\n",(0,s.jsx)(i.li,{children:"Alienware 17 R4"}),"\n"]}),"\n",(0,s.jsx)(i.h2,{id:"apple",children:"Apple"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsx)(i.li,{children:"Apple Macbook (late 2008)"}),"\n",(0,s.jsx)(i.li,{children:"Apple MacBookPro8,3"}),"\n"]}),"\n",(0,s.jsx)(i.h2,{id:"asus",children:"ASUS"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsx)(i.li,{children:"Asus EEE-PC 1001PX"}),"\n",(0,s.jsx)(i.li,{children:"Asus EEE-PC 1011PX"}),"\n",(0,s.jsx)(i.li,{children:"Asus K401UQK"}),"\n",(0,s.jsx)(i.li,{children:"Asus K53U"}),"\n",(0,s.jsx)(i.li,{children:"Asus K55VM"}),"\n",(0,s.jsx)(i.li,{children:"Asus K401UQK"}),"\n",(0,s.jsx)(i.li,{children:"Asus M50VM"}),"\n",(0,s.jsx)(i.li,{children:"Asus N501JW"}),"\n",(0,s.jsx)(i.li,{children:"Asus Pro50SR"}),"\n",(0,s.jsx)(i.li,{children:"Asus ROG G750JZA"}),"\n",(0,s.jsxs)(i.li,{children:["Asus VivoBook 15 K505ZA","\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsx)(i.li,{children:"Must use BIOS revision 306 for functional touchpad."}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(i.li,{children:["Asus VivoBook 15 X505ZA","\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsx)(i.li,{children:"Must use BIOS revision 306 for functional touchpad."}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(i.li,{children:["Asus VivoBook 15 X505ZA-BQ171T","\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsx)(i.li,{children:"Must use BIOS revision 306 for functional touchpad."}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(i.li,{children:"Asus VivoBook Pro N61JA"}),"\n",(0,s.jsx)(i.li,{children:"Asus VivoBook Pro N61Jv"}),"\n",(0,s.jsx)(i.li,{children:"Asus X200MA"}),"\n",(0,s.jsx)(i.li,{children:"Asus X201EV"}),"\n",(0,s.jsx)(i.li,{children:"Asus X540L"}),"\n",(0,s.jsx)(i.li,{children:"Asus X55"}),"\n",(0,s.jsx)(i.li,{children:"Asus X550LD"}),"\n",(0,s.jsx)(i.li,{children:"Asus X551CAP"}),"\n",(0,s.jsx)(i.li,{children:"Asus ZenBook UX31A"}),"\n",(0,s.jsx)(i.li,{children:"Asus ZenBook UX305FA"}),"\n"]}),"\n",(0,s.jsx)(i.h2,{id:"dell",children:"Dell"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsx)(i.li,{children:"Dell Inspiron 14 3442"}),"\n",(0,s.jsx)(i.li,{children:"Dell Inspiron 14 3452"}),"\n",(0,s.jsx)(i.li,{children:"Dell Inspiron 15 7579"}),"\n",(0,s.jsx)(i.li,{children:"Dell Inspiron 15R N5010"}),"\n",(0,s.jsx)(i.li,{children:"Dell Inspiron 15R N5110"}),"\n",(0,s.jsx)(i.li,{children:"Dell Inspiron 1110"}),"\n",(0,s.jsx)(i.li,{children:"Dell Inspiron 5050"}),"\n",(0,s.jsx)(i.li,{children:"Dell Inspiron 7548"}),"\n",(0,s.jsx)(i.li,{children:"Dell Latitude D830"}),"\n",(0,s.jsx)(i.li,{children:"Dell Latitude E4310"}),"\n",(0,s.jsx)(i.li,{children:"Dell Latitude E5440"}),"\n",(0,s.jsx)(i.li,{children:"Dell Latitude E5510"}),"\n",(0,s.jsx)(i.li,{children:"Dell Latitude E6230"}),"\n",(0,s.jsx)(i.li,{children:"Dell Latitude E6320"}),"\n",(0,s.jsx)(i.li,{children:"Dell Latitude E6410"}),"\n",(0,s.jsx)(i.li,{children:"Dell Latitude E6420"}),"\n",(0,s.jsx)(i.li,{children:"Dell Latitude E6430"}),"\n",(0,s.jsx)(i.li,{children:"Dell Latitude E6530"}),"\n",(0,s.jsx)(i.li,{children:"Dell Precision 7520"}),"\n",(0,s.jsx)(i.li,{children:"Dell Precision M6500"}),"\n",(0,s.jsx)(i.li,{children:"Dell Vostro 1700"}),"\n",(0,s.jsx)(i.li,{children:"Dell XPS 15 9560"}),"\n"]}),"\n",(0,s.jsx)(i.h2,{id:"emachines",children:"eMachines"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsx)(i.li,{children:"eMachines E728"}),"\n"]}),"\n",(0,s.jsx)(i.h2,{id:"fujitsu",children:"Fujitsu"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsx)(i.li,{children:"Fujitsu Lifebook A531"}),"\n",(0,s.jsx)(i.li,{children:"Fujitsu Lifebook T900"}),"\n"]}),"\n",(0,s.jsx)(i.h2,{id:"gigabyte",children:"GIGABYTE"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsx)(i.li,{children:"GIGABYTE Aero 14K"}),"\n"]}),"\n",(0,s.jsx)(i.h2,{id:"google",children:"Google"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsx)(i.li,{children:"Google Chromebook CR48"}),"\n"]}),"\n",(0,s.jsx)(i.h2,{id:"hp",children:"HP"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsx)(i.li,{children:"HP 240 G3"}),"\n",(0,s.jsx)(i.li,{children:"HP Compaq 6730B"}),"\n",(0,s.jsx)(i.li,{children:"HP Compaq NC6400"}),"\n",(0,s.jsx)(i.li,{children:"HP Compaq Presario CQ61"}),"\n",(0,s.jsx)(i.li,{children:"HP EliteBook 8440P"}),"\n",(0,s.jsx)(i.li,{children:"HP EliteBook 8460p"}),"\n",(0,s.jsx)(i.li,{children:"HP EliteBook 8740w"}),"\n",(0,s.jsx)(i.li,{children:"HP EliteBook 8760w"}),"\n",(0,s.jsx)(i.li,{children:"HP Envy TS M6"}),"\n",(0,s.jsx)(i.li,{children:"HP Pavilion 15-E042SO"}),"\n",(0,s.jsx)(i.li,{children:"HP Pavilion DV6"}),"\n",(0,s.jsx)(i.li,{children:"HP Pavilion DV6Z-6c00"}),"\n",(0,s.jsx)(i.li,{children:"HP Pavilion DV6Z-6100"}),"\n",(0,s.jsx)(i.li,{children:"HP Pavilion DV7"}),"\n",(0,s.jsx)(i.li,{children:"HP Pavilion DV2700"}),"\n",(0,s.jsx)(i.li,{children:"HP Pavilion x360 Convertible"}),"\n",(0,s.jsx)(i.li,{children:"HP Presario V6000"}),"\n",(0,s.jsx)(i.li,{children:"HP Probook 6360b"}),"\n",(0,s.jsx)(i.li,{children:"HP ProBook 6450b"}),"\n"]}),"\n",(0,s.jsx)(i.h2,{id:"lenovo",children:"Lenovo"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsx)(i.li,{children:"Lenovo 3000 V200"}),"\n",(0,s.jsx)(i.li,{children:"Lenovo B41-80"}),"\n",(0,s.jsx)(i.li,{children:"Lenovo B50-50"}),"\n",(0,s.jsx)(i.li,{children:"Lenovo G50-80"}),"\n",(0,s.jsx)(i.li,{children:"Lenovo G510"}),"\n",(0,s.jsx)(i.li,{children:"Lenovo IdeaPad S145-15API"}),"\n",(0,s.jsx)(i.li,{children:"Lenovo IdeaPad S400U"}),"\n",(0,s.jsx)(i.li,{children:"Lenovo IdeaPad U310 Touch"}),"\n",(0,s.jsx)(i.li,{children:"Lenovo IdeaPad Z370"}),"\n",(0,s.jsx)(i.li,{children:"Lenovo IdeaPad Z585"}),"\n",(0,s.jsx)(i.li,{children:"Lenovo ThinkPad 13"}),"\n",(0,s.jsx)(i.li,{children:"Lenovo ThinkPad A485 (with latest BIOS update)"}),"\n",(0,s.jsx)(i.li,{children:"Lenovo ThinkPad E450"}),"\n",(0,s.jsx)(i.li,{children:"Lenovo ThinkPad E550"}),"\n",(0,s.jsx)(i.li,{children:"Lenovo ThinkPad Edge E545"}),"\n",(0,s.jsx)(i.li,{children:"Lenovo Thinkpad L412"}),"\n",(0,s.jsx)(i.li,{children:"Lenovo ThinkPad L440"}),"\n",(0,s.jsx)(i.li,{children:"Lenovo ThinkPad L512"}),"\n",(0,s.jsx)(i.li,{children:"Lenovo ThinkPad R60e"}),"\n",(0,s.jsx)(i.li,{children:"Lenovo ThinkPad S5-S540"}),"\n",(0,s.jsx)(i.li,{children:"Lenovo ThinkPad SL510"}),"\n",(0,s.jsx)(i.li,{children:"Lenovo Thinkpad T400 (2767V2W)"}),"\n",(0,s.jsx)(i.li,{children:"Lenovo ThinkPad T410i"}),"\n",(0,s.jsx)(i.li,{children:"Lenovo ThinkPad T420"}),"\n",(0,s.jsx)(i.li,{children:"Lenovo ThinkPad T430"}),"\n",(0,s.jsx)(i.li,{children:"Lenovo ThinkPad T440"}),"\n",(0,s.jsx)(i.li,{children:"Lenovo ThinkPad T440s"}),"\n",(0,s.jsx)(i.li,{children:"Lenovo ThinkPad T470"}),"\n",(0,s.jsx)(i.li,{children:"Lenovo ThinkPad T470s"}),"\n",(0,s.jsx)(i.li,{children:"Lenovo ThinkPad T490s"}),"\n",(0,s.jsx)(i.li,{children:"Lenovo ThinkPad T560"}),"\n",(0,s.jsx)(i.li,{children:"Lenovo ThinkPad T570"}),"\n",(0,s.jsx)(i.li,{children:"Lenovo ThinkPad W520 4270CTO"}),"\n",(0,s.jsx)(i.li,{children:"Lenovo ThinkPad X1 Carbon 3rd Edition"}),"\n",(0,s.jsx)(i.li,{children:"Lenovo ThinkPad X1 Carbon 4th Edition"}),"\n",(0,s.jsx)(i.li,{children:"Lenovo ThinkPad X61"}),"\n",(0,s.jsx)(i.li,{children:"Lenovo ThinkPad X200T"}),"\n",(0,s.jsx)(i.li,{children:"Lenovo ThinkPad X201"}),"\n",(0,s.jsx)(i.li,{children:"Lenovo ThinkPad X220"}),"\n",(0,s.jsx)(i.li,{children:"Lenovo ThinkPad X230"}),"\n",(0,s.jsx)(i.li,{children:"Lenovo ThinkPad X280"}),"\n",(0,s.jsx)(i.li,{children:"Lenovo Yoga 2 11"}),"\n",(0,s.jsx)(i.li,{children:"Lenovo Z50-70"}),"\n"]}),"\n",(0,s.jsx)(i.h2,{id:"msi",children:"MSI"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsx)(i.li,{children:"MSI GE70"}),"\n"]}),"\n",(0,s.jsx)(i.h2,{id:"samsung",children:"Samsung"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsx)(i.li,{children:"Samsung NP270E5E-X02PL"}),"\n",(0,s.jsx)(i.li,{children:"Samsung NP300E4C-AD5BR"}),"\n",(0,s.jsx)(i.li,{children:"Samsung NP355E5C"}),"\n",(0,s.jsx)(i.li,{children:"Samsung NP365E5C-S04US"}),"\n",(0,s.jsx)(i.li,{children:"Samsung NP900X3G"}),"\n",(0,s.jsx)(i.li,{children:"Samsung NP900X4C-AU05"}),"\n"]}),"\n",(0,s.jsx)(i.h2,{id:"schenker",children:"Schenker"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsx)(i.li,{children:"Schenker XMG A506-VE"}),"\n"]}),"\n",(0,s.jsx)(i.h2,{id:"sony",children:"Sony"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsx)(i.li,{children:"Sony VAIO Pro 13"}),"\n",(0,s.jsx)(i.li,{children:"Sony VAIO S Series 13"}),"\n",(0,s.jsx)(i.li,{children:"Sony VAIO VPCEC3M1E"}),"\n"]}),"\n",(0,s.jsx)(i.h2,{id:"system76",children:"System76"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsx)(i.li,{children:"System76 Gazelle Professional"}),"\n"]}),"\n",(0,s.jsx)(i.h2,{id:"toshiba",children:"Toshiba"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsx)(i.li,{children:"Toshiba Portege R930"}),"\n",(0,s.jsx)(i.li,{children:"Toshiba Qosmio X305"}),"\n",(0,s.jsx)(i.li,{children:"Toshiba Qosmio X875"}),"\n",(0,s.jsx)(i.li,{children:"Toshiba Satellite A660"}),"\n",(0,s.jsx)(i.li,{children:"Toshiba Satellite C50D-A-125"}),"\n",(0,s.jsx)(i.li,{children:"Toshiba Satellite C55D"}),"\n",(0,s.jsx)(i.li,{children:"Toshiba Satellite C640"}),"\n",(0,s.jsx)(i.li,{children:"Toshiba Satellite C665D"}),"\n",(0,s.jsx)(i.li,{children:"Toshiba Satellite L300D"}),"\n",(0,s.jsx)(i.li,{children:"Toshiba Satellite L455D"}),"\n",(0,s.jsx)(i.li,{children:"Toshiba Satellite L850-B218"}),"\n",(0,s.jsx)(i.li,{children:"Toshiba Satellite L855D"}),"\n",(0,s.jsx)(i.li,{children:"Toshiba Tecra A11"}),"\n"]})]})}function t(n={}){let{wrapper:i}={...(0,r.a)(),...n.components};return i?(0,s.jsx)(i,{...n,children:(0,s.jsx)(a,{...n})}):a(n)}},50065:function(n,i,e){e.d(i,{Z:function(){return o},a:function(){return d}});var l=e(67294);let s={},r=l.createContext(s);function d(n){let i=l.useContext(r);return l.useMemo(function(){return"function"==typeof n?n(i):{...i,...n}},[i,n])}function o(n){let i;return i=n.disableParentContext?"function"==typeof n.components?n.components(s):n.components||s:d(n.components),l.createElement(r.Provider,{value:i},n.children)}}}]); \ No newline at end of file diff --git a/assets/js/be79d003.aac528f5.js b/assets/js/be79d003.aac528f5.js new file mode 100644 index 000000000..27cb8b866 --- /dev/null +++ b/assets/js/be79d003.aac528f5.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([["9507"],{36604:function(e,n,o){o.r(n),o.d(n,{metadata:()=>t,contentTitle:()=>i,default:()=>u,assets:()=>d,toc:()=>l,frontMatter:()=>s});var t=JSON.parse('{"id":"packaging/update-dev-environment","title":"Update Your Development Environment","description":"Always make sure your development environment and system are up to date before beginning work on a package","source":"@site/docs/packaging/update-dev-environment.md","sourceDirName":"packaging","slug":"/packaging/update-dev-environment","permalink":"/docs/packaging/update-dev-environment","draft":false,"unlisted":false,"editUrl":"https://github.com/getsolus/help-center-docs/tree/master/docs/packaging/update-dev-environment.md","tags":[],"version":"current","lastUpdatedAt":1733757592000,"sidebarPosition":2,"frontMatter":{"title":"Update Your Development Environment","summary":"Update your development environment before working on a package","sidebar_position":2},"sidebar":"packagingSidebar","previous":{"title":"Prepare for Packaging","permalink":"/docs/packaging/prepare-for-packaging"},"next":{"title":"Creating a New Package","permalink":"/docs/packaging/creating-a-new-package"}}'),a=o("85893"),r=o("50065");let s={title:"Update Your Development Environment",summary:"Update your development environment before working on a package",sidebar_position:2},i="Update Your Development Environment",d={},l=[{value:"Update your fork of the getsolus/packages repository",id:"update-your-fork-of-the-getsoluspackages-repository",level:2},{value:"Update your local clone of your fork",id:"update-your-local-clone-of-your-fork",level:2},{value:"Update <code>solbuild</code> and the system",id:"update-solbuild-and-the-system",level:2}];function c(e){let n={a:"a",code:"code",h1:"h1",h2:"h2",header:"header",li:"li",ol:"ol",p:"p",pre:"pre",...(0,r.a)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(n.header,{children:(0,a.jsx)(n.h1,{id:"update-your-development-environment",children:"Update Your Development Environment"})}),"\n",(0,a.jsx)(n.p,{children:"Always make sure your development environment and system are up to date before beginning work on a package"}),"\n",(0,a.jsxs)(n.ol,{children:["\n",(0,a.jsxs)(n.li,{children:["Update your fork of the ",(0,a.jsx)(n.a,{href:"https://github.com/getsolus/packages",children:"getsolus/packages"})," repository."]}),"\n",(0,a.jsx)(n.li,{children:"Update your local clone of your fork."}),"\n",(0,a.jsxs)(n.li,{children:["Update the solbuild base image ",(0,a.jsx)(n.code,{children:"sudo solbuild update"})]}),"\n",(0,a.jsx)(n.li,{children:"Update the system."}),"\n"]}),"\n",(0,a.jsx)(n.h2,{id:"update-your-fork-of-the-getsoluspackages-repository",children:"Update your fork of the getsolus/packages repository"}),"\n",(0,a.jsxs)(n.p,{children:["If you already have a fork of ",(0,a.jsx)(n.a,{href:"https://github.com/getsolus/packages",children:"getsolus/packages"})," in GitHub, log into GitHub. Make sure you're looking at the ",(0,a.jsx)(n.code,{children:"main"}),' branch. Check to see that your fork is up to date with the main repository it was forked from. If your fork indicates it is behind, use the "Sync fork" button to bring it up to date.']}),"\n",(0,a.jsx)(n.h2,{id:"update-your-local-clone-of-your-fork",children:"Update your local clone of your fork"}),"\n",(0,a.jsx)(n.p,{children:"If you already have a local clone, you need to bring it up to date. To do so run:"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"cd ~/solus-packages\ngit switch main\ngit pull\n"})}),"\n",(0,a.jsxs)(n.h2,{id:"update-solbuild-and-the-system",children:["Update ",(0,a.jsx)(n.code,{children:"solbuild"})," and the system"]}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"sudo solbuild update\nsudo eopkg up\n"})}),"\n",(0,a.jsxs)(n.p,{children:["Next, you can either ",(0,a.jsx)(n.a,{href:"/docs/packaging/creating-a-new-package",children:"Submit a New Package"})," or ",(0,a.jsx)(n.a,{href:"/docs/packaging/updating-an-existing-package",children:"Update an Existing Package"})]})]})}function u(e={}){let{wrapper:n}={...(0,r.a)(),...e.components};return n?(0,a.jsx)(n,{...e,children:(0,a.jsx)(c,{...e})}):c(e)}},50065:function(e,n,o){o.d(n,{Z:function(){return i},a:function(){return s}});var t=o(67294);let a={},r=t.createContext(a);function s(e){let n=t.useContext(r);return t.useMemo(function(){return"function"==typeof e?e(n):{...n,...e}},[n,e])}function i(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:s(e.components),t.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/be79d003.f1a4d102.js b/assets/js/be79d003.f1a4d102.js deleted file mode 100644 index bd1680c91..000000000 --- a/assets/js/be79d003.f1a4d102.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[6012],{62262:(e,o,n)=>{n.r(o),n.d(o,{assets:()=>d,contentTitle:()=>s,default:()=>p,frontMatter:()=>r,metadata:()=>i,toc:()=>c});var t=n(85893),a=n(11151);const r={title:"Update Your Development Environment",summary:"Update your development environment before working on a package",sidebar_position:2},s="Update Your Development Environment",i={id:"packaging/update-dev-environment",title:"Update Your Development Environment",description:"Always make sure your development environment and system are up to date before beginning work on a package",source:"@site/docs/packaging/update-dev-environment.md",sourceDirName:"packaging",slug:"/packaging/update-dev-environment",permalink:"/docs/packaging/update-dev-environment",draft:!1,unlisted:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/packaging/update-dev-environment.md",tags:[],version:"current",lastUpdatedAt:1732716912e3,sidebarPosition:2,frontMatter:{title:"Update Your Development Environment",summary:"Update your development environment before working on a package",sidebar_position:2},sidebar:"packagingSidebar",previous:{title:"Prepare for Packaging",permalink:"/docs/packaging/prepare-for-packaging"},next:{title:"Creating a New Package",permalink:"/docs/packaging/creating-a-new-package"}},d={},c=[{value:"Update your fork of the getsolus/packages repository",id:"update-your-fork-of-the-getsoluspackages-repository",level:2},{value:"Update your local clone of your fork",id:"update-your-local-clone-of-your-fork",level:2},{value:"Update <code>solbuild</code> and the system",id:"update-solbuild-and-the-system",level:2}];function l(e){const o={a:"a",code:"code",h1:"h1",h2:"h2",header:"header",li:"li",ol:"ol",p:"p",pre:"pre",...(0,a.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(o.header,{children:(0,t.jsx)(o.h1,{id:"update-your-development-environment",children:"Update Your Development Environment"})}),"\n",(0,t.jsx)(o.p,{children:"Always make sure your development environment and system are up to date before beginning work on a package"}),"\n",(0,t.jsxs)(o.ol,{children:["\n",(0,t.jsxs)(o.li,{children:["Update your fork of the ",(0,t.jsx)(o.a,{href:"https://github.com/getsolus/packages",children:"getsolus/packages"})," repository."]}),"\n",(0,t.jsx)(o.li,{children:"Update your local clone of your fork."}),"\n",(0,t.jsxs)(o.li,{children:["Update the solbuild base image ",(0,t.jsx)(o.code,{children:"sudo solbuild update"})]}),"\n",(0,t.jsx)(o.li,{children:"Update the system."}),"\n"]}),"\n",(0,t.jsx)(o.h2,{id:"update-your-fork-of-the-getsoluspackages-repository",children:"Update your fork of the getsolus/packages repository"}),"\n",(0,t.jsxs)(o.p,{children:["If you already have a fork of ",(0,t.jsx)(o.a,{href:"https://github.com/getsolus/packages",children:"getsolus/packages"})," in GitHub, log into GitHub. Make sure you're looking at the ",(0,t.jsx)(o.code,{children:"main"}),' branch. Check to see that your fork is up to date with the main repository it was forked from. If your fork indicates it is behind, use the "Sync fork" button to bring it up to date.']}),"\n",(0,t.jsx)(o.h2,{id:"update-your-local-clone-of-your-fork",children:"Update your local clone of your fork"}),"\n",(0,t.jsx)(o.p,{children:"If you already have a local clone, you need to bring it up to date. To do so run:"}),"\n",(0,t.jsx)(o.pre,{children:(0,t.jsx)(o.code,{className:"language-bash",children:"cd ~/solus-packages\ngit switch main\ngit pull\n"})}),"\n",(0,t.jsxs)(o.h2,{id:"update-solbuild-and-the-system",children:["Update ",(0,t.jsx)(o.code,{children:"solbuild"})," and the system"]}),"\n",(0,t.jsx)(o.pre,{children:(0,t.jsx)(o.code,{className:"language-bash",children:"sudo solbuild update\nsudo eopkg up\n"})}),"\n",(0,t.jsxs)(o.p,{children:["Next, you can either ",(0,t.jsx)(o.a,{href:"/docs/packaging/creating-a-new-package",children:"Submit a New Package"})," or ",(0,t.jsx)(o.a,{href:"/docs/packaging/updating-an-existing-package",children:"Update an Existing Package"})]})]})}function p(e={}){const{wrapper:o}={...(0,a.a)(),...e.components};return o?(0,t.jsx)(o,{...e,children:(0,t.jsx)(l,{...e})}):l(e)}},11151:(e,o,n)=>{n.d(o,{Z:()=>i,a:()=>s});var t=n(67294);const a={},r=t.createContext(a);function s(e){const o=t.useContext(r);return t.useMemo((function(){return"function"==typeof e?e(o):{...o,...e}}),[o,e])}function i(e){let o;return o=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:s(e.components),t.createElement(r.Provider,{value:o},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/c15d9823.bd5c9de5.js b/assets/js/c15d9823.bd5c9de5.js deleted file mode 100644 index f42a170d9..000000000 --- a/assets/js/c15d9823.bd5c9de5.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[6642],{92506:e=>{e.exports=JSON.parse('{"metadata":{"permalink":"/blog","page":1,"postsPerPage":5,"totalPages":1,"totalCount":5,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/c15d9823.c5249e7e.js b/assets/js/c15d9823.c5249e7e.js new file mode 100644 index 000000000..3d69181b6 --- /dev/null +++ b/assets/js/c15d9823.c5249e7e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([["9359"],{39546:function(e){e.exports=JSON.parse('{"metadata":{"permalink":"/blog","page":1,"postsPerPage":5,"totalPages":1,"totalCount":5,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/c55c138b.d270ff03.js b/assets/js/c55c138b.d270ff03.js deleted file mode 100644 index 6180a29b4..000000000 --- a/assets/js/c55c138b.d270ff03.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[7465],{76323:(e,i,n)=>{n.r(i),n.d(i,{assets:()=>r,contentTitle:()=>c,default:()=>h,frontMatter:()=>o,metadata:()=>l,toc:()=>t});var s=n(85893),a=n(11151);const o={title:"Packaging Changes",summary:"Changes to packaging environment and instructions",sidebar_position:7},c="Packaging Changes",l={id:"packaging/packaging-changes",title:"Packaging Changes",description:"This page is meant to serve as a changelog of sorts for the Solus packaging environment and the packaging instructions. Refer to specific help pages for more details.",source:"@site/docs/packaging/packaging-changes.md",sourceDirName:"packaging",slug:"/packaging/packaging-changes",permalink:"/docs/packaging/packaging-changes",draft:!1,unlisted:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/packaging/packaging-changes.md",tags:[],version:"current",lastUpdatedAt:1732716912e3,sidebarPosition:7,frontMatter:{title:"Packaging Changes",summary:"Changes to packaging environment and instructions",sidebar_position:7},sidebar:"packagingSidebar",previous:{title:"Submitting a Pull Request for Review",permalink:"/docs/packaging/submitting-a-pull-request"},next:{title:"Advanced Configuration",permalink:"/docs/category/advanced-configuration"}},r={},t=[{value:"2024",id:"2024",level:2},{value:"May",id:"may",level:3},{value:"Remove 'Test Plan' and 'Checklist' from commit messages",id:"remove-test-plan-and-checklist-from-commit-messages",level:4},{value:"Add Rust macros to package.yml",id:"add-rust-macros-to-packageyml",level:4},{value:"Add guidance for SourceForge sources in package.yml",id:"add-guidance-for-sourceforge-sources-in-packageyml",level:4},{value:"February",id:"february",level:3},{value:"Begin adding <code>monitoring.yml</code> to packages",id:"begin-adding-monitoringyml-to-packages",level:4},{value:"2023",id:"2023",level:2},{value:"October",id:"october",level:3},{value:"Adding <code>checkdeps</code> in <code>package.yml</code>",id:"adding-checkdeps-in-packageyml",level:4},{value:"Git hooks",id:"git-hooks",level:4},{value:"Requiring <code>homepage</code> in <code>package.yml</code>",id:"requiring-homepage-in-packageyml",level:4},{value:"Recommending amending commits in Pull Requests",id:"recommending-amending-commits-in-pull-requests",level:4},{value:"September",id:"september",level:3},{value:"Switch to asterisk bolding for PR template",id:"switch-to-asterisk-bolding-for-pr-template",level:4},{value:"Switching From <code>make</code> to <code>go-task</code>",id:"switching-from-make-to-go-task",level:4},{value:"GitHub Monorepo Migration",id:"github-monorepo-migration",level:4},{value:"August",id:"august",level:3},{value:"Initial GitHub Migration from old Phabricator Dev Tracker",id:"initial-github-migration-from-old-phabricator-dev-tracker",level:4},{value:"April",id:"april",level:3},{value:"2022 and Earlier",id:"2022-and-earlier",level:2}];function d(e){const i={a:"a",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",h4:"h4",header:"header",li:"li",p:"p",ul:"ul",...(0,a.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(i.header,{children:(0,s.jsx)(i.h1,{id:"packaging-changes",children:"Packaging Changes"})}),"\n",(0,s.jsx)(i.p,{children:"This page is meant to serve as a changelog of sorts for the Solus packaging environment and the packaging instructions. Refer to specific help pages for more details."}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsx)(i.li,{children:"This list is not exhaustive"}),"\n",(0,s.jsxs)(i.li,{children:["This list is in ",(0,s.jsx)(i.em,{children:"reverse chronological order"})," (newest first)"]}),"\n"]}),"\n",(0,s.jsx)(i.h2,{id:"2024",children:"2024"}),"\n",(0,s.jsx)(i.h3,{id:"may",children:"May"}),"\n",(0,s.jsx)(i.h4,{id:"remove-test-plan-and-checklist-from-commit-messages",children:"Remove 'Test Plan' and 'Checklist' from commit messages"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsx)(i.li,{children:"These are no longer needed in commit messages."}),"\n",(0,s.jsx)(i.li,{children:"They must still be included in the pull request description."}),"\n"]}),"\n",(0,s.jsx)(i.h4,{id:"add-rust-macros-to-packageyml",children:"Add Rust macros to package.yml"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:["We now have macros for building Rust packages. Example: ",(0,s.jsx)(i.code,{children:"%cargo_build"}),". Rust packages should be switched to use the new macros as they are updated."]}),"\n",(0,s.jsxs)(i.li,{children:['See the "Rust (cargo) actionable macros" section on the ',(0,s.jsx)(i.a,{href:"/docs/packaging/package.yml#rust-cargo-actionable-macros",children:"package.yml page"}),"."]}),"\n"]}),"\n",(0,s.jsx)(i.h4,{id:"add-guidance-for-sourceforge-sources-in-packageyml",children:"Add guidance for SourceForge sources in package.yml"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:["We now require SourceForge sources used in ",(0,s.jsx)(i.code,{children:"package.yml"})," files to follow a specific format."]}),"\n",(0,s.jsxs)(i.li,{children:["See the ",(0,s.jsx)(i.a,{href:"/docs/packaging/package.yml#source-key",children:"package.yml page"}),"."]}),"\n"]}),"\n",(0,s.jsx)(i.h3,{id:"february",children:"February"}),"\n",(0,s.jsxs)(i.h4,{id:"begin-adding-monitoringyml-to-packages",children:["Begin adding ",(0,s.jsx)(i.code,{children:"monitoring.yml"})," to packages"]}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:["A new per-package file was introduced: ",(0,s.jsx)(i.code,{children:"monitoring.yml"}),". Used to monitor packages for releases and security advisories; see ",(0,s.jsx)(i.a,{href:"/docs/packaging/monitoring.yml",children:"monitoring.yml"}),"."]}),"\n",(0,s.jsx)(i.li,{children:"This is not enforced by automatic checks yet, but we may ask that it be added."}),"\n"]}),"\n",(0,s.jsx)(i.h2,{id:"2023",children:"2023"}),"\n",(0,s.jsx)(i.h3,{id:"october",children:"October"}),"\n",(0,s.jsxs)(i.h4,{id:"adding-checkdeps-in-packageyml",children:["Adding ",(0,s.jsx)(i.code,{children:"checkdeps"})," in ",(0,s.jsx)(i.code,{children:"package.yml"})]}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:["A new type of packaging dependency was added: ",(0,s.jsx)(i.code,{children:"checkdeps"}),". They behave the same as ",(0,s.jsx)(i.code,{children:"builddeps"}),", except they are not considered when determining build order for automatic builds. See the ",(0,s.jsx)(i.a,{href:"/docs/packaging/package.yml",children:"package.yml page"}),"."]}),"\n"]}),"\n",(0,s.jsx)(i.h4,{id:"git-hooks",children:"Git hooks"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:["Run ",(0,s.jsx)(i.code,{children:"go-task init"})," to initialize Git hooks for the packages repository. See ",(0,s.jsx)(i.a,{href:"/docs/packaging/prepare-for-packaging#initialize-git-hooks",children:"Prepare for packaging"}),"."]}),"\n",(0,s.jsxs)(i.li,{children:["Use ",(0,s.jsx)(i.code,{children:"git commit"})," for committing packaging changes and fill in the template shown.\nIt is no longer required to manually copy-paste the template or use ",(0,s.jsx)(i.code,{children:"git commit --cleanup=scissors"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(i.h4,{id:"requiring-homepage-in-packageyml",children:["Requiring ",(0,s.jsx)(i.code,{children:"homepage"})," in ",(0,s.jsx)(i.code,{children:"package.yml"})]}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:["The ",(0,s.jsx)(i.code,{children:"homepage"})," key in ",(0,s.jsx)(i.code,{children:"package.yml"})," has become mandatory. Use the address to the upstream source repository (eg: the GitHub page) if a package does not have a homepage."]}),"\n",(0,s.jsx)(i.li,{children:"This is enforced by checks on all pull requests."}),"\n"]}),"\n",(0,s.jsx)(i.h4,{id:"recommending-amending-commits-in-pull-requests",children:"Recommending amending commits in Pull Requests"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:["Amending commits and force pushing the changes works better with our build tooling.","\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsx)(i.li,{children:"It was thought that abandoning this practice would be okay, but it turns out not to be the case."}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(i.h3,{id:"september",children:"September"}),"\n",(0,s.jsx)(i.h4,{id:"switch-to-asterisk-bolding-for-pr-template",children:"Switch to asterisk bolding for PR template"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:["The initial PR template for the ",(0,s.jsx)(i.code,{children:"packages"})," repository used markdown header styling (",(0,s.jsx)(i.code,{children:"## Heading text"}),"), but ",(0,s.jsx)(i.code,{children:"solus-sc"})," does not render that styling, so the template was changed to asterisk bolding (",(0,s.jsx)(i.code,{children:"**Heading text**"}),")"]}),"\n",(0,s.jsx)(i.li,{children:(0,s.jsx)(i.a,{href:"https://github.com/getsolus/packages/pull/366",children:"https://github.com/getsolus/packages/pull/366"})}),"\n"]}),"\n",(0,s.jsxs)(i.h4,{id:"switching-from-make-to-go-task",children:["Switching From ",(0,s.jsx)(i.code,{children:"make"})," to ",(0,s.jsx)(i.code,{children:"go-task"})]}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:["All packaging actions are now handled by ",(0,s.jsx)(i.code,{children:"go-task"})," rather than ",(0,s.jsx)(i.code,{children:"make"}),".","\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:["Building a package can be done using ",(0,s.jsx)(i.code,{children:"go-task"})," rather than ",(0,s.jsx)(i.code,{children:"make"}),"."]}),"\n",(0,s.jsxs)(i.li,{children:["Commands are the same: ",(0,s.jsx)(i.code,{children:"make local"}),", for example, is replaced by ",(0,s.jsx)(i.code,{children:"go-task local"}),"."]}),"\n",(0,s.jsxs)(i.li,{children:["You can see all available commands by either browsing to ",(0,s.jsx)(i.code,{children:"Taskfile.yml"})," in the ",(0,s.jsxs)(i.a,{href:"https://github.com/getsolus/packages/blob/main/Taskfile.yml",children:[(0,s.jsx)(i.code,{children:"packages"})," repository"]})," OR running ",(0,s.jsx)(i.code,{children:"go-task -l"})," somewhere in your updated clone of the packages git monorepo."]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(i.li,{children:["Packagers should install ",(0,s.jsx)(i.code,{children:"go-task"})," on their machines if they have not already."]}),"\n",(0,s.jsxs)(i.li,{children:["The ",(0,s.jsx)(i.code,{children:"Makefile"})," included with every package is no longer required. Please delete it from a package when updating, and do not include it when making the initial commit of a new package."]}),"\n"]}),"\n",(0,s.jsx)(i.h4,{id:"github-monorepo-migration",children:"GitHub Monorepo Migration"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:["Packages were moved from the initial multirepo setup to the ",(0,s.jsx)(i.code,{children:"packages"})," monorepo: ",(0,s.jsx)(i.a,{href:"https://github.com/getsolus/packages",children:"github.com/getsolus/packages"})," Now packagers only need to clone/fork one repository for all packages."]}),"\n",(0,s.jsx)(i.li,{children:"The recommended migration strategy is to fork this repository and start with a clean clone. Any local changes to packages should be moved over manually."}),"\n",(0,s.jsxs)(i.li,{children:["Packagers should now title commits like ",(0,s.jsx)(i.code,{children:"packagename: Action"}),"; for example: ",(0,s.jsx)(i.code,{children:"nano: Update to 9.0"}),". Generic titles like ",(0,s.jsx)(i.code,{children:"Update to 9.0"})," should not be used, except for rebuilds."]}),"\n",(0,s.jsx)(i.li,{children:"Packagers should use the pull request template for package updates, filling out the Summary and Test Plan sections as usual."}),"\n"]}),"\n",(0,s.jsx)(i.h3,{id:"august",children:"August"}),"\n",(0,s.jsx)(i.h4,{id:"initial-github-migration-from-old-phabricator-dev-tracker",children:"Initial GitHub Migration from old Phabricator Dev Tracker"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsx)(i.li,{children:(0,s.jsx)(i.em,{children:"This change was superseded by the later monorepo migration."})}),"\n",(0,s.jsxs)(i.li,{children:["The new multirepo setup for packages was under ",(0,s.jsx)(i.code,{children:"github.com/solus-packages"})," organization, packages were updated with PRs to individual repositories."]}),"\n",(0,s.jsxs)(i.li,{children:["Issues were migrated to ",(0,s.jsx)(i.code,{children:"github.com/getsolus/packages"})," from Phabricator. ",(0,s.jsx)(i.em,{children:"Closed issues were not migrated."})]}),"\n",(0,s.jsxs)(i.li,{children:["A read-only instance of the old Dev Tracker is available at ",(0,s.jsx)(i.a,{href:"https://phab.getsol.us",children:"phab.getsol.us"}),". ",(0,s.jsx)(i.em,{children:"This will eventually be shut down."})]}),"\n"]}),"\n",(0,s.jsx)(i.h3,{id:"april",children:"April"}),"\n",(0,s.jsxs)(i.p,{children:["The repository index was moved to ",(0,s.jsx)(i.code,{children:"cdn.getsol.us"}),"."]}),"\n",(0,s.jsx)(i.h2,{id:"2022-and-earlier",children:"2022 and Earlier"}),"\n",(0,s.jsx)(i.p,{children:"Not included in this list."})]})}function h(e={}){const{wrapper:i}={...(0,a.a)(),...e.components};return i?(0,s.jsx)(i,{...e,children:(0,s.jsx)(d,{...e})}):d(e)}},11151:(e,i,n)=>{n.d(i,{Z:()=>l,a:()=>c});var s=n(67294);const a={},o=s.createContext(a);function c(e){const i=s.useContext(o);return s.useMemo((function(){return"function"==typeof e?e(i):{...i,...e}}),[i,e])}function l(e){let i;return i=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:c(e.components),s.createElement(o.Provider,{value:i},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/c55c138b.f8000794.js b/assets/js/c55c138b.f8000794.js new file mode 100644 index 000000000..edcca5bf7 --- /dev/null +++ b/assets/js/c55c138b.f8000794.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([["2627"],{53826:function(e,i,n){n.r(i),n.d(i,{metadata:()=>a,contentTitle:()=>c,default:()=>h,assets:()=>r,toc:()=>t,frontMatter:()=>l});var a=JSON.parse('{"id":"packaging/packaging-changes","title":"Packaging Changes","description":"This page is meant to serve as a changelog of sorts for the Solus packaging environment and the packaging instructions. Refer to specific help pages for more details.","source":"@site/docs/packaging/packaging-changes.md","sourceDirName":"packaging","slug":"/packaging/packaging-changes","permalink":"/docs/packaging/packaging-changes","draft":false,"unlisted":false,"editUrl":"https://github.com/getsolus/help-center-docs/tree/master/docs/packaging/packaging-changes.md","tags":[],"version":"current","lastUpdatedAt":1733757592000,"sidebarPosition":7,"frontMatter":{"title":"Packaging Changes","summary":"Changes to packaging environment and instructions","sidebar_position":7},"sidebar":"packagingSidebar","previous":{"title":"Submitting a Pull Request for Review","permalink":"/docs/packaging/submitting-a-pull-request"},"next":{"title":"Advanced Configuration","permalink":"/docs/category/advanced-configuration"}}'),s=n("85893"),o=n("50065");let l={title:"Packaging Changes",summary:"Changes to packaging environment and instructions",sidebar_position:7},c="Packaging Changes",r={},t=[{value:"2024",id:"2024",level:2},{value:"May",id:"may",level:3},{value:"Remove 'Test Plan' and 'Checklist' from commit messages",id:"remove-test-plan-and-checklist-from-commit-messages",level:4},{value:"Add Rust macros to package.yml",id:"add-rust-macros-to-packageyml",level:4},{value:"Add guidance for SourceForge sources in package.yml",id:"add-guidance-for-sourceforge-sources-in-packageyml",level:4},{value:"February",id:"february",level:3},{value:"Begin adding <code>monitoring.yml</code> to packages",id:"begin-adding-monitoringyml-to-packages",level:4},{value:"2023",id:"2023",level:2},{value:"October",id:"october",level:3},{value:"Adding <code>checkdeps</code> in <code>package.yml</code>",id:"adding-checkdeps-in-packageyml",level:4},{value:"Git hooks",id:"git-hooks",level:4},{value:"Requiring <code>homepage</code> in <code>package.yml</code>",id:"requiring-homepage-in-packageyml",level:4},{value:"Recommending amending commits in Pull Requests",id:"recommending-amending-commits-in-pull-requests",level:4},{value:"September",id:"september",level:3},{value:"Switch to asterisk bolding for PR template",id:"switch-to-asterisk-bolding-for-pr-template",level:4},{value:"Switching From <code>make</code> to <code>go-task</code>",id:"switching-from-make-to-go-task",level:4},{value:"GitHub Monorepo Migration",id:"github-monorepo-migration",level:4},{value:"August",id:"august",level:3},{value:"Initial GitHub Migration from old Phabricator Dev Tracker",id:"initial-github-migration-from-old-phabricator-dev-tracker",level:4},{value:"April",id:"april",level:3},{value:"2022 and Earlier",id:"2022-and-earlier",level:2}];function d(e){let i={a:"a",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",h4:"h4",header:"header",li:"li",p:"p",ul:"ul",...(0,o.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(i.header,{children:(0,s.jsx)(i.h1,{id:"packaging-changes",children:"Packaging Changes"})}),"\n",(0,s.jsx)(i.p,{children:"This page is meant to serve as a changelog of sorts for the Solus packaging environment and the packaging instructions. Refer to specific help pages for more details."}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsx)(i.li,{children:"This list is not exhaustive"}),"\n",(0,s.jsxs)(i.li,{children:["This list is in ",(0,s.jsx)(i.em,{children:"reverse chronological order"})," (newest first)"]}),"\n"]}),"\n",(0,s.jsx)(i.h2,{id:"2024",children:"2024"}),"\n",(0,s.jsx)(i.h3,{id:"may",children:"May"}),"\n",(0,s.jsx)(i.h4,{id:"remove-test-plan-and-checklist-from-commit-messages",children:"Remove 'Test Plan' and 'Checklist' from commit messages"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsx)(i.li,{children:"These are no longer needed in commit messages."}),"\n",(0,s.jsx)(i.li,{children:"They must still be included in the pull request description."}),"\n"]}),"\n",(0,s.jsx)(i.h4,{id:"add-rust-macros-to-packageyml",children:"Add Rust macros to package.yml"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:["We now have macros for building Rust packages. Example: ",(0,s.jsx)(i.code,{children:"%cargo_build"}),". Rust packages should be switched to use the new macros as they are updated."]}),"\n",(0,s.jsxs)(i.li,{children:['See the "Rust (cargo) actionable macros" section on the ',(0,s.jsx)(i.a,{href:"/docs/packaging/package.yml#rust-cargo-actionable-macros",children:"package.yml page"}),"."]}),"\n"]}),"\n",(0,s.jsx)(i.h4,{id:"add-guidance-for-sourceforge-sources-in-packageyml",children:"Add guidance for SourceForge sources in package.yml"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:["We now require SourceForge sources used in ",(0,s.jsx)(i.code,{children:"package.yml"})," files to follow a specific format."]}),"\n",(0,s.jsxs)(i.li,{children:["See the ",(0,s.jsx)(i.a,{href:"/docs/packaging/package.yml#source-key",children:"package.yml page"}),"."]}),"\n"]}),"\n",(0,s.jsx)(i.h3,{id:"february",children:"February"}),"\n",(0,s.jsxs)(i.h4,{id:"begin-adding-monitoringyml-to-packages",children:["Begin adding ",(0,s.jsx)(i.code,{children:"monitoring.yml"})," to packages"]}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:["A new per-package file was introduced: ",(0,s.jsx)(i.code,{children:"monitoring.yml"}),". Used to monitor packages for releases and security advisories; see ",(0,s.jsx)(i.a,{href:"/docs/packaging/monitoring.yml",children:"monitoring.yml"}),"."]}),"\n",(0,s.jsx)(i.li,{children:"This is not enforced by automatic checks yet, but we may ask that it be added."}),"\n"]}),"\n",(0,s.jsx)(i.h2,{id:"2023",children:"2023"}),"\n",(0,s.jsx)(i.h3,{id:"october",children:"October"}),"\n",(0,s.jsxs)(i.h4,{id:"adding-checkdeps-in-packageyml",children:["Adding ",(0,s.jsx)(i.code,{children:"checkdeps"})," in ",(0,s.jsx)(i.code,{children:"package.yml"})]}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:["A new type of packaging dependency was added: ",(0,s.jsx)(i.code,{children:"checkdeps"}),". They behave the same as ",(0,s.jsx)(i.code,{children:"builddeps"}),", except they are not considered when determining build order for automatic builds. See the ",(0,s.jsx)(i.a,{href:"/docs/packaging/package.yml",children:"package.yml page"}),"."]}),"\n"]}),"\n",(0,s.jsx)(i.h4,{id:"git-hooks",children:"Git hooks"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:["Run ",(0,s.jsx)(i.code,{children:"go-task init"})," to initialize Git hooks for the packages repository. See ",(0,s.jsx)(i.a,{href:"/docs/packaging/prepare-for-packaging#initialize-git-hooks",children:"Prepare for packaging"}),"."]}),"\n",(0,s.jsxs)(i.li,{children:["Use ",(0,s.jsx)(i.code,{children:"git commit"})," for committing packaging changes and fill in the template shown.\nIt is no longer required to manually copy-paste the template or use ",(0,s.jsx)(i.code,{children:"git commit --cleanup=scissors"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(i.h4,{id:"requiring-homepage-in-packageyml",children:["Requiring ",(0,s.jsx)(i.code,{children:"homepage"})," in ",(0,s.jsx)(i.code,{children:"package.yml"})]}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:["The ",(0,s.jsx)(i.code,{children:"homepage"})," key in ",(0,s.jsx)(i.code,{children:"package.yml"})," has become mandatory. Use the address to the upstream source repository (eg: the GitHub page) if a package does not have a homepage."]}),"\n",(0,s.jsx)(i.li,{children:"This is enforced by checks on all pull requests."}),"\n"]}),"\n",(0,s.jsx)(i.h4,{id:"recommending-amending-commits-in-pull-requests",children:"Recommending amending commits in Pull Requests"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:["Amending commits and force pushing the changes works better with our build tooling.","\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsx)(i.li,{children:"It was thought that abandoning this practice would be okay, but it turns out not to be the case."}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(i.h3,{id:"september",children:"September"}),"\n",(0,s.jsx)(i.h4,{id:"switch-to-asterisk-bolding-for-pr-template",children:"Switch to asterisk bolding for PR template"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:["The initial PR template for the ",(0,s.jsx)(i.code,{children:"packages"})," repository used markdown header styling (",(0,s.jsx)(i.code,{children:"## Heading text"}),"), but ",(0,s.jsx)(i.code,{children:"solus-sc"})," does not render that styling, so the template was changed to asterisk bolding (",(0,s.jsx)(i.code,{children:"**Heading text**"}),")"]}),"\n",(0,s.jsx)(i.li,{children:(0,s.jsx)(i.a,{href:"https://github.com/getsolus/packages/pull/366",children:"https://github.com/getsolus/packages/pull/366"})}),"\n"]}),"\n",(0,s.jsxs)(i.h4,{id:"switching-from-make-to-go-task",children:["Switching From ",(0,s.jsx)(i.code,{children:"make"})," to ",(0,s.jsx)(i.code,{children:"go-task"})]}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:["All packaging actions are now handled by ",(0,s.jsx)(i.code,{children:"go-task"})," rather than ",(0,s.jsx)(i.code,{children:"make"}),".","\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:["Building a package can be done using ",(0,s.jsx)(i.code,{children:"go-task"})," rather than ",(0,s.jsx)(i.code,{children:"make"}),"."]}),"\n",(0,s.jsxs)(i.li,{children:["Commands are the same: ",(0,s.jsx)(i.code,{children:"make local"}),", for example, is replaced by ",(0,s.jsx)(i.code,{children:"go-task local"}),"."]}),"\n",(0,s.jsxs)(i.li,{children:["You can see all available commands by either browsing to ",(0,s.jsx)(i.code,{children:"Taskfile.yml"})," in the ",(0,s.jsxs)(i.a,{href:"https://github.com/getsolus/packages/blob/main/Taskfile.yml",children:[(0,s.jsx)(i.code,{children:"packages"})," repository"]})," OR running ",(0,s.jsx)(i.code,{children:"go-task -l"})," somewhere in your updated clone of the packages git monorepo."]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(i.li,{children:["Packagers should install ",(0,s.jsx)(i.code,{children:"go-task"})," on their machines if they have not already."]}),"\n",(0,s.jsxs)(i.li,{children:["The ",(0,s.jsx)(i.code,{children:"Makefile"})," included with every package is no longer required. Please delete it from a package when updating, and do not include it when making the initial commit of a new package."]}),"\n"]}),"\n",(0,s.jsx)(i.h4,{id:"github-monorepo-migration",children:"GitHub Monorepo Migration"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:["Packages were moved from the initial multirepo setup to the ",(0,s.jsx)(i.code,{children:"packages"})," monorepo: ",(0,s.jsx)(i.a,{href:"https://github.com/getsolus/packages",children:"github.com/getsolus/packages"})," Now packagers only need to clone/fork one repository for all packages."]}),"\n",(0,s.jsx)(i.li,{children:"The recommended migration strategy is to fork this repository and start with a clean clone. Any local changes to packages should be moved over manually."}),"\n",(0,s.jsxs)(i.li,{children:["Packagers should now title commits like ",(0,s.jsx)(i.code,{children:"packagename: Action"}),"; for example: ",(0,s.jsx)(i.code,{children:"nano: Update to 9.0"}),". Generic titles like ",(0,s.jsx)(i.code,{children:"Update to 9.0"})," should not be used, except for rebuilds."]}),"\n",(0,s.jsx)(i.li,{children:"Packagers should use the pull request template for package updates, filling out the Summary and Test Plan sections as usual."}),"\n"]}),"\n",(0,s.jsx)(i.h3,{id:"august",children:"August"}),"\n",(0,s.jsx)(i.h4,{id:"initial-github-migration-from-old-phabricator-dev-tracker",children:"Initial GitHub Migration from old Phabricator Dev Tracker"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsx)(i.li,{children:(0,s.jsx)(i.em,{children:"This change was superseded by the later monorepo migration."})}),"\n",(0,s.jsxs)(i.li,{children:["The new multirepo setup for packages was under ",(0,s.jsx)(i.code,{children:"github.com/solus-packages"})," organization, packages were updated with PRs to individual repositories."]}),"\n",(0,s.jsxs)(i.li,{children:["Issues were migrated to ",(0,s.jsx)(i.code,{children:"github.com/getsolus/packages"})," from Phabricator. ",(0,s.jsx)(i.em,{children:"Closed issues were not migrated."})]}),"\n",(0,s.jsxs)(i.li,{children:["A read-only instance of the old Dev Tracker is available at ",(0,s.jsx)(i.a,{href:"https://phab.getsol.us",children:"phab.getsol.us"}),". ",(0,s.jsx)(i.em,{children:"This will eventually be shut down."})]}),"\n"]}),"\n",(0,s.jsx)(i.h3,{id:"april",children:"April"}),"\n",(0,s.jsxs)(i.p,{children:["The repository index was moved to ",(0,s.jsx)(i.code,{children:"cdn.getsol.us"}),"."]}),"\n",(0,s.jsx)(i.h2,{id:"2022-and-earlier",children:"2022 and Earlier"}),"\n",(0,s.jsx)(i.p,{children:"Not included in this list."})]})}function h(e={}){let{wrapper:i}={...(0,o.a)(),...e.components};return i?(0,s.jsx)(i,{...e,children:(0,s.jsx)(d,{...e})}):d(e)}},50065:function(e,i,n){n.d(i,{Z:function(){return c},a:function(){return l}});var a=n(67294);let s={},o=a.createContext(s);function l(e){let i=a.useContext(o);return a.useMemo(function(){return"function"==typeof e?e(i):{...i,...e}},[i,e])}function c(e){let i;return i=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:l(e.components),a.createElement(o.Provider,{value:i},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/c5de29d4.159ae9df.js b/assets/js/c5de29d4.159ae9df.js deleted file mode 100644 index 3eb0e9154..000000000 --- a/assets/js/c5de29d4.159ae9df.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[3851],{44158:(e,n,a)=>{a.r(n),a.d(n,{assets:()=>c,contentTitle:()=>r,default:()=>h,frontMatter:()=>t,metadata:()=>l,toc:()=>o});var i=a(85893),s=a(11151);const t={title:"Creating a New Package",summary:"Creating a Package For Inclusion in the Repositories",sidebar_position:3},r="Creating a New Package",l={id:"packaging/creating-a-new-package",title:"Creating a New Package",description:"This page will take you through the steps required to build a new package for the Solus package repositories. For this example, we will use the command line utility tree, which is already packaged for Solus, but we will pretend like it's not.",source:"@site/docs/packaging/creating-a-new-package.md",sourceDirName:"packaging",slug:"/packaging/creating-a-new-package",permalink:"/docs/packaging/creating-a-new-package",draft:!1,unlisted:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/packaging/creating-a-new-package.md",tags:[],version:"current",lastUpdatedAt:1732716912e3,sidebarPosition:3,frontMatter:{title:"Creating a New Package",summary:"Creating a Package For Inclusion in the Repositories",sidebar_position:3},sidebar:"packagingSidebar",previous:{title:"Update Your Development Environment",permalink:"/docs/packaging/update-dev-environment"},next:{title:"Updating an Existing Package",permalink:"/docs/packaging/updating-an-existing-package"}},c={},o=[{value:"Update an existing clone",id:"update-an-existing-clone",level:3},{value:"Create a new branch",id:"create-a-new-branch",level:2},{value:"Create the <code>MAINTAINERS.md</code> file",id:"create-the-maintainersmd-file",level:2},{value:"Create the <code>package.yml</code> file",id:"create-the-packageyml-file",level:2},{value:"Build the package",id:"build-the-package",level:2},{value:"Commit your changes",id:"commit-your-changes",level:2},{value:"Commit message format for new packages",id:"commit-message-format-for-new-packages",level:3}];function d(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,s.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.header,{children:(0,i.jsx)(n.h1,{id:"creating-a-new-package",children:"Creating a New Package"})}),"\n",(0,i.jsxs)(n.p,{children:["This page will take you through the steps required to build a new package for the Solus package repositories. For this example, we will use the command line utility ",(0,i.jsx)(n.a,{href:"https://gitlab.com/OldManProgrammer/unix-tree",children:"tree"}),", which is already packaged for Solus, but we will pretend like it's not."]}),"\n",(0,i.jsxs)(n.admonition,{type:"note",children:[(0,i.jsxs)(n.p,{children:[(0,i.jsxs)(n.strong,{children:["Please ",(0,i.jsx)(n.a,{href:"https://github.com/getsolus/packages/issues?q=label%3A%22Package+Request%22",children:"look to see if an issue has been filed"})," and ",(0,i.jsx)(n.em,{children:"accepted"})," for the software or library you intend to package"]}),". If there is an existing request, please add a link to it in your pull request. Ex:"]}),(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{children:"This PR resolves software request https://github.com/getsolus/packages/issues/123\n"})})]}),"\n",(0,i.jsx)(n.h3,{id:"update-an-existing-clone",children:"Update an existing clone"}),"\n",(0,i.jsxs)(n.p,{children:["If you do not have a local clone set up yet, see ",(0,i.jsx)(n.a,{href:"/docs/packaging/prepare-for-packaging#fork-the-getsoluspackages-repository",children:"Prepare for Packaging"})]}),"\n",(0,i.jsx)(n.p,{children:"Bring your local clone up to date. Run:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"cd ~/solus-packages\ngit switch main\ngit pull\n"})}),"\n",(0,i.jsx)(n.h2,{id:"create-a-new-branch",children:"Create a new branch"}),"\n",(0,i.jsx)(n.p,{children:"It's always a good idea to switch to a new git branch before beginning packaging work. This helps to separate your work from any new changes made to the package repository, which will allow you to more easily rebase any changes if needed. To do so run:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"git switch -c your-branch\n"})}),"\n",(0,i.jsxs)(n.h2,{id:"create-the-maintainersmd-file",children:["Create the ",(0,i.jsx)(n.code,{children:"MAINTAINERS.md"})," file"]}),"\n",(0,i.jsxs)(n.p,{children:["You must add a file called ",(0,i.jsx)(n.code,{children:"MAINTAINERS.md"})," using the template in ",(0,i.jsx)(n.a,{href:"/docs/packaging/procedures/maintainership",children:"Maintainership"}),". Solus uses this to track the primary maintainer(s) for each package."]}),"\n",(0,i.jsxs)(n.h2,{id:"create-the-packageyml-file",children:["Create the ",(0,i.jsx)(n.code,{children:"package.yml"})," file"]}),"\n",(0,i.jsx)(n.p,{children:"You will need a link to the most recent source tarball for this from the software's website."}),"\n",(0,i.jsxs)(n.p,{children:["To create a skeleton ",(0,i.jsx)(n.code,{children:"package.yml"})," file, use the ",(0,i.jsx)(n.code,{children:"go-task new"})," command."]}),"\n",(0,i.jsx)(n.p,{children:"This command takes two arguments, in the following order:"}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsx)(n.li,{children:"Package name"}),"\n",(0,i.jsx)(n.li,{children:"Source URL"}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"go-task new -- tree https://gitlab.com/OldManProgrammer/unix-tree/-/archive/2.1.1/unix-tree-2.1.1.tar.gz\n"})}),"\n",(0,i.jsxs)(n.p,{children:["The ",(0,i.jsx)(n.code,{children:"go-task new"})," command will automatically place the new ",(0,i.jsx)(n.code,{children:"package.yml"})," in the proper directory according the package name, ",(0,i.jsxs)(n.em,{children:["and will overwrite any existing ",(0,i.jsx)(n.code,{children:"package.yml"})," file at that location"]}),"."]}),"\n",(0,i.jsx)(n.admonition,{type:"note",children:(0,i.jsxs)(n.p,{children:["You can, of course, create your ",(0,i.jsx)(n.code,{children:"package.yml"})," file entirely from scratch, but ",(0,i.jsx)(n.code,{children:"go-task new"})," will give you a better starting point. We recommend using the ",(0,i.jsx)(n.code,{children:"go-task new"})," command."]})}),"\n",(0,i.jsxs)(n.p,{children:["Now you should have a ",(0,i.jsx)(n.code,{children:"package.yml"})," file that looks something like this:"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-yaml",children:"name : unix-tree\nversion : 2.1.1\nrelease : 1\nsource :\n - https://gitlab.com/OldManProgrammer/unix-tree/-/archive/2.1.1/unix-tree-2.1.1.tar.gz : bcd2a0327ad40592a9c43e09a4d2ef834e6f17aa9a59012a5fb1007950b5eced\nhomepage : PLEASE FILL ME IN\nlicense : GPL-2.0-or-later # CHECK ME\ncomponent : PLEASE FILL ME IN\nsummary : PLEASE FILL ME IN\ndescription: |\n PLEASE FILL ME IN\nbuilddeps :\nsetup : |\n %configure\nbuild : |\n %make\ninstall : |\n %make_install\n"})}),"\n",(0,i.jsxs)(n.p,{children:["The ",(0,i.jsx)(n.code,{children:"go-task new"})," command has filled many fields for us, but not all of them will be right, and some of them need to be filled in. Refer to the ",(0,i.jsx)(n.a,{href:"/docs/packaging/package.yml",children:"package.yml page"})," to see how each field should be used."]}),"\n",(0,i.jsx)(n.p,{children:"For this example, we need to fix the following:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["The name needs to be ",(0,i.jsx)(n.code,{children:"tree"}),", so update it."]}),"\n",(0,i.jsxs)(n.li,{children:["The ",(0,i.jsx)(n.code,{children:"license"}),' is correct, so we remove the comment. License values need to match an "Identifier" in the ',(0,i.jsx)(n.a,{href:"https://spdx.org/licenses/",children:"SPDX License List"}),"."]}),"\n",(0,i.jsxs)(n.li,{children:["Fill in ",(0,i.jsx)(n.code,{children:"homepage"}),", ",(0,i.jsx)(n.code,{children:"component"}),", ",(0,i.jsx)(n.code,{children:"summary"}),", and ",(0,i.jsx)(n.code,{children:"description"}),"."]}),"\n",(0,i.jsxs)(n.li,{children:["Remove ",(0,i.jsx)(n.code,{children:"builddeps"}),". This package has no build dependencies beyond the ones already available for every package (the ",(0,i.jsx)(n.code,{children:"system.devel"})," packages)."]}),"\n",(0,i.jsxs)(n.li,{children:["The ",(0,i.jsx)(n.code,{children:"setup"})," step is not required, remove it."]}),"\n",(0,i.jsxs)(n.li,{children:["In the ",(0,i.jsx)(n.code,{children:"install"})," key, we can't use the ",(0,i.jsx)(n.code,{children:"%make_install"})," macro for this package. The files are installed in their correct locations individually."]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"After updating the file, it will now look like:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-yaml",children:"name : tree\nversion : 2.1.1\nrelease : 1\nsource :\n - https://gitlab.com/OldManProgrammer/unix-tree/-/archive/2.1.1/unix-tree-2.1.1.tar.gz : bcd2a0327ad40592a9c43e09a4d2ef834e6f17aa9a59012a5fb1007950b5eced\nhomepage : https://gitlab.com/OldManProgrammer/unix-tree\nlicense : GPL-2.0-or-later\ncomponent : system.utils\nsummary : list contents of directories in a tree-like format.\ndescription: |\n Tree is a recursive directory listing command that produces a depth indented listing of files, which is colorized ala dircolors if the LS_COLORS environment variable is set and output is to tty\nbuild : |\n %make\ninstall : |\n install -Dm00664 $workdir/doc/tree.1 $installdir/usr/share/man/man1/tree.1\n install -Dm00755 $workdir/tree $installdir/usr/bin/tree\n"})}),"\n",(0,i.jsxs)(n.p,{children:["To read more about finding and including dependencies and other parts of ",(0,i.jsx)(n.code,{children:"package.yml"})," please see ",(0,i.jsx)(n.a,{href:"/docs/packaging/packaging-practices",children:"Packaging Practices"}),"."]}),"\n",(0,i.jsxs)(n.p,{children:["Understanding how to translate source code into a good ",(0,i.jsx)(n.code,{children:"package.yml"})," file is the heart of packaging. If you are stumped, or have questions, ",(0,i.jsxs)(n.strong,{children:["ask for help in our Solus Packaging room on ",(0,i.jsx)(n.a,{href:"/docs/user/contributing/getting-involved#matrix-chat",children:"Matrix"}),"."]})]}),"\n",(0,i.jsx)(n.h2,{id:"build-the-package",children:"Build the package"}),"\n",(0,i.jsxs)(n.p,{children:["Build the package using ",(0,i.jsx)(n.code,{children:"go-task"}),". The default task will build the package against the Unstable repository, so you don't have to specify a task here."]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"go-task\n"})}),"\n",(0,i.jsx)(n.p,{children:"Once the build completes, your directory should now include the following files:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-text",children:"\u251c\u2500\u2500 abi_used_libs\n\u251c\u2500\u2500 abi_used_symbols\n\u251c\u2500\u2500 package.yml\n\u251c\u2500\u2500 pspec_x86_64.xml\n\u2514\u2500\u2500 tree-2.1.1-1-1-x86_64.eopkg\n"})}),"\n",(0,i.jsxs)(n.p,{children:["All these files ",(0,i.jsx)(n.em,{children:"except"})," the ",(0,i.jsx)(n.code,{children:".eopkg"})," file(s) should be included in your pull request. You will remove the ",(0,i.jsx)(n.code,{children:".eopkg"})," files after testing the package."]}),"\n",(0,i.jsxs)(n.p,{children:["Once your package has built successfully, you will need to ",(0,i.jsx)(n.a,{href:"testing-a-package",children:"test it"}),"."]}),"\n",(0,i.jsx)(n.h2,{id:"commit-your-changes",children:"Commit your changes"}),"\n",(0,i.jsxs)(n.p,{children:["Check the ",(0,i.jsx)(n.a,{href:"git-basics#check-the-changes-in-your-files",children:"changes in your files"}),"."]}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.a,{href:"/docs/packaging/git-basics",children:"Add / remove files as necessary to the commit"}),". Then, ",(0,i.jsx)(n.strong,{children:"check your branch"}),"."]}),"\n",(0,i.jsx)(n.p,{children:"Double-check that everything looks correct and all of the files have been staged before committing."}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"git status\n"})}),"\n",(0,i.jsx)(n.p,{children:"If all looks well, commit your changes."}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"git commit\n"})}),"\n",(0,i.jsx)(n.h3,{id:"commit-message-format-for-new-packages",children:"Commit message format for new packages"}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.code,{children:"git commit"})," on ",(0,i.jsx)(n.a,{href:"/docs/packaging/prepare-for-packaging#initialize-git-hooks",children:"an initialized repository"})," will automatically open your editor with the correct template.\nNote that lines starting with a ",(0,i.jsx)(n.code,{children:"#"})," will be ignored by Git and do not need to be removed."]}),"\n",(0,i.jsx)(n.p,{children:"There should be a summary line (with the package name), a blank line, and then the rest of the commit message."}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"There should at the minimum be a Summary."}),"\n",(0,i.jsx)(n.li,{children:"Bullet point lists should start with a dash."}),"\n",(0,i.jsxs)(n.li,{children:["Link the package request using a ",(0,i.jsx)(n.code,{children:"Resolves"})," line."]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"Here is an example in our standard format:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{children:"tree: Add at v2.1.1\n\n**Summary**\n\nAdd the tree package, which recursively lists directories in a tree like manner.\n\nResolves getsolus/packages#issuenumber\n"})}),"\n",(0,i.jsxs)(n.p,{children:["Where ",(0,i.jsx)(n.code,{children:"issuenumber"})," is the issue number of the package request."]}),"\n",(0,i.jsxs)(n.p,{children:["For more information on suitable commit messages, please check the ",(0,i.jsx)(n.a,{href:"https://github.com/solus-project/tooling-central/blob/master/README.rst#using-git",children:"tooling central documentation"}),"."]}),"\n",(0,i.jsxs)(n.p,{children:["If you need a change to depend on another change, mention it in the commit message too (use the full URL): ",(0,i.jsx)(n.code,{children:"Depends on https://github.com/getsolus/packages/issues/234"})]}),"\n",(0,i.jsxs)(n.p,{children:["Next, you'll ",(0,i.jsx)(n.a,{href:"/docs/packaging/submitting-a-pull-request",children:"submit a pull request for review"}),"."]})]})}function h(e={}){const{wrapper:n}={...(0,s.a)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(d,{...e})}):d(e)}},11151:(e,n,a)=>{a.d(n,{Z:()=>l,a:()=>r});var i=a(67294);const s={},t=i.createContext(s);function r(e){const n=i.useContext(t);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:r(e.components),i.createElement(t.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/c5de29d4.69e499a8.js b/assets/js/c5de29d4.69e499a8.js new file mode 100644 index 000000000..182f40595 --- /dev/null +++ b/assets/js/c5de29d4.69e499a8.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([["3754"],{48580:function(e,n,a){a.r(n),a.d(n,{metadata:()=>i,contentTitle:()=>l,default:()=>h,assets:()=>c,toc:()=>o,frontMatter:()=>r});var i=JSON.parse('{"id":"packaging/creating-a-new-package","title":"Creating a New Package","description":"This page will take you through the steps required to build a new package for the Solus package repositories. For this example, we will use the command line utility tree, which is already packaged for Solus, but we will pretend like it\'s not.","source":"@site/docs/packaging/creating-a-new-package.md","sourceDirName":"packaging","slug":"/packaging/creating-a-new-package","permalink":"/docs/packaging/creating-a-new-package","draft":false,"unlisted":false,"editUrl":"https://github.com/getsolus/help-center-docs/tree/master/docs/packaging/creating-a-new-package.md","tags":[],"version":"current","lastUpdatedAt":1733757592000,"sidebarPosition":3,"frontMatter":{"title":"Creating a New Package","summary":"Creating a Package For Inclusion in the Repositories","sidebar_position":3},"sidebar":"packagingSidebar","previous":{"title":"Update Your Development Environment","permalink":"/docs/packaging/update-dev-environment"},"next":{"title":"Updating an Existing Package","permalink":"/docs/packaging/updating-an-existing-package"}}'),s=a("85893"),t=a("50065");let r={title:"Creating a New Package",summary:"Creating a Package For Inclusion in the Repositories",sidebar_position:3},l="Creating a New Package",c={},o=[{value:"Update an existing clone",id:"update-an-existing-clone",level:3},{value:"Create a new branch",id:"create-a-new-branch",level:2},{value:"Create the <code>MAINTAINERS.md</code> file",id:"create-the-maintainersmd-file",level:2},{value:"Create the <code>package.yml</code> file",id:"create-the-packageyml-file",level:2},{value:"Build the package",id:"build-the-package",level:2},{value:"Commit your changes",id:"commit-your-changes",level:2},{value:"Commit message format for new packages",id:"commit-message-format-for-new-packages",level:3}];function d(e){let n={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,t.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.header,{children:(0,s.jsx)(n.h1,{id:"creating-a-new-package",children:"Creating a New Package"})}),"\n",(0,s.jsxs)(n.p,{children:["This page will take you through the steps required to build a new package for the Solus package repositories. For this example, we will use the command line utility ",(0,s.jsx)(n.a,{href:"https://gitlab.com/OldManProgrammer/unix-tree",children:"tree"}),", which is already packaged for Solus, but we will pretend like it's not."]}),"\n",(0,s.jsxs)(n.admonition,{type:"note",children:[(0,s.jsxs)(n.p,{children:[(0,s.jsxs)(n.strong,{children:["Please ",(0,s.jsx)(n.a,{href:"https://github.com/getsolus/packages/issues?q=label%3A%22Package+Request%22",children:"look to see if an issue has been filed"})," and ",(0,s.jsx)(n.em,{children:"accepted"})," for the software or library you intend to package"]}),". If there is an existing request, please add a link to it in your pull request. Ex:"]}),(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{children:"This PR resolves software request https://github.com/getsolus/packages/issues/123\n"})})]}),"\n",(0,s.jsx)(n.h3,{id:"update-an-existing-clone",children:"Update an existing clone"}),"\n",(0,s.jsxs)(n.p,{children:["If you do not have a local clone set up yet, see ",(0,s.jsx)(n.a,{href:"/docs/packaging/prepare-for-packaging#fork-the-getsoluspackages-repository",children:"Prepare for Packaging"})]}),"\n",(0,s.jsx)(n.p,{children:"Bring your local clone up to date. Run:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"cd ~/solus-packages\ngit switch main\ngit pull\n"})}),"\n",(0,s.jsx)(n.h2,{id:"create-a-new-branch",children:"Create a new branch"}),"\n",(0,s.jsx)(n.p,{children:"It's always a good idea to switch to a new git branch before beginning packaging work. This helps to separate your work from any new changes made to the package repository, which will allow you to more easily rebase any changes if needed. To do so run:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"git switch -c your-branch\n"})}),"\n",(0,s.jsxs)(n.h2,{id:"create-the-maintainersmd-file",children:["Create the ",(0,s.jsx)(n.code,{children:"MAINTAINERS.md"})," file"]}),"\n",(0,s.jsxs)(n.p,{children:["You must add a file called ",(0,s.jsx)(n.code,{children:"MAINTAINERS.md"})," using the template in ",(0,s.jsx)(n.a,{href:"/docs/packaging/procedures/maintainership",children:"Maintainership"}),". Solus uses this to track the primary maintainer(s) for each package."]}),"\n",(0,s.jsxs)(n.h2,{id:"create-the-packageyml-file",children:["Create the ",(0,s.jsx)(n.code,{children:"package.yml"})," file"]}),"\n",(0,s.jsx)(n.p,{children:"You will need a link to the most recent source tarball for this from the software's website."}),"\n",(0,s.jsxs)(n.p,{children:["To create a skeleton ",(0,s.jsx)(n.code,{children:"package.yml"})," file, use the ",(0,s.jsx)(n.code,{children:"go-task new"})," command."]}),"\n",(0,s.jsx)(n.p,{children:"This command takes two arguments, in the following order:"}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsx)(n.li,{children:"Package name"}),"\n",(0,s.jsx)(n.li,{children:"Source URL"}),"\n"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"go-task new -- tree https://gitlab.com/OldManProgrammer/unix-tree/-/archive/2.1.1/unix-tree-2.1.1.tar.gz\n"})}),"\n",(0,s.jsxs)(n.p,{children:["The ",(0,s.jsx)(n.code,{children:"go-task new"})," command will automatically place the new ",(0,s.jsx)(n.code,{children:"package.yml"})," in the proper directory according the package name, ",(0,s.jsxs)(n.em,{children:["and will overwrite any existing ",(0,s.jsx)(n.code,{children:"package.yml"})," file at that location"]}),"."]}),"\n",(0,s.jsx)(n.admonition,{type:"note",children:(0,s.jsxs)(n.p,{children:["You can, of course, create your ",(0,s.jsx)(n.code,{children:"package.yml"})," file entirely from scratch, but ",(0,s.jsx)(n.code,{children:"go-task new"})," will give you a better starting point. We recommend using the ",(0,s.jsx)(n.code,{children:"go-task new"})," command."]})}),"\n",(0,s.jsxs)(n.p,{children:["Now you should have a ",(0,s.jsx)(n.code,{children:"package.yml"})," file that looks something like this:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"name : unix-tree\nversion : 2.1.1\nrelease : 1\nsource :\n - https://gitlab.com/OldManProgrammer/unix-tree/-/archive/2.1.1/unix-tree-2.1.1.tar.gz : bcd2a0327ad40592a9c43e09a4d2ef834e6f17aa9a59012a5fb1007950b5eced\nhomepage : PLEASE FILL ME IN\nlicense : GPL-2.0-or-later # CHECK ME\ncomponent : PLEASE FILL ME IN\nsummary : PLEASE FILL ME IN\ndescription: |\n PLEASE FILL ME IN\nbuilddeps :\nsetup : |\n %configure\nbuild : |\n %make\ninstall : |\n %make_install\n"})}),"\n",(0,s.jsxs)(n.p,{children:["The ",(0,s.jsx)(n.code,{children:"go-task new"})," command has filled many fields for us, but not all of them will be right, and some of them need to be filled in. Refer to the ",(0,s.jsx)(n.a,{href:"/docs/packaging/package.yml",children:"package.yml page"})," to see how each field should be used."]}),"\n",(0,s.jsx)(n.p,{children:"For this example, we need to fix the following:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["The name needs to be ",(0,s.jsx)(n.code,{children:"tree"}),", so update it."]}),"\n",(0,s.jsxs)(n.li,{children:["The ",(0,s.jsx)(n.code,{children:"license"}),' is correct, so we remove the comment. License values need to match an "Identifier" in the ',(0,s.jsx)(n.a,{href:"https://spdx.org/licenses/",children:"SPDX License List"}),"."]}),"\n",(0,s.jsxs)(n.li,{children:["Fill in ",(0,s.jsx)(n.code,{children:"homepage"}),", ",(0,s.jsx)(n.code,{children:"component"}),", ",(0,s.jsx)(n.code,{children:"summary"}),", and ",(0,s.jsx)(n.code,{children:"description"}),"."]}),"\n",(0,s.jsxs)(n.li,{children:["Remove ",(0,s.jsx)(n.code,{children:"builddeps"}),". This package has no build dependencies beyond the ones already available for every package (the ",(0,s.jsx)(n.code,{children:"system.devel"})," packages)."]}),"\n",(0,s.jsxs)(n.li,{children:["The ",(0,s.jsx)(n.code,{children:"setup"})," step is not required, remove it."]}),"\n",(0,s.jsxs)(n.li,{children:["In the ",(0,s.jsx)(n.code,{children:"install"})," key, we can't use the ",(0,s.jsx)(n.code,{children:"%make_install"})," macro for this package. The files are installed in their correct locations individually."]}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"After updating the file, it will now look like:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"name : tree\nversion : 2.1.1\nrelease : 1\nsource :\n - https://gitlab.com/OldManProgrammer/unix-tree/-/archive/2.1.1/unix-tree-2.1.1.tar.gz : bcd2a0327ad40592a9c43e09a4d2ef834e6f17aa9a59012a5fb1007950b5eced\nhomepage : https://gitlab.com/OldManProgrammer/unix-tree\nlicense : GPL-2.0-or-later\ncomponent : system.utils\nsummary : list contents of directories in a tree-like format.\ndescription: |\n Tree is a recursive directory listing command that produces a depth indented listing of files, which is colorized ala dircolors if the LS_COLORS environment variable is set and output is to tty\nbuild : |\n %make\ninstall : |\n install -Dm00664 $workdir/doc/tree.1 $installdir/usr/share/man/man1/tree.1\n install -Dm00755 $workdir/tree $installdir/usr/bin/tree\n"})}),"\n",(0,s.jsxs)(n.p,{children:["To read more about finding and including dependencies and other parts of ",(0,s.jsx)(n.code,{children:"package.yml"})," please see ",(0,s.jsx)(n.a,{href:"/docs/packaging/packaging-practices",children:"Packaging Practices"}),"."]}),"\n",(0,s.jsxs)(n.p,{children:["Understanding how to translate source code into a good ",(0,s.jsx)(n.code,{children:"package.yml"})," file is the heart of packaging. If you are stumped, or have questions, ",(0,s.jsxs)(n.strong,{children:["ask for help in our Solus Packaging room on ",(0,s.jsx)(n.a,{href:"/docs/user/contributing/getting-involved#matrix-chat",children:"Matrix"}),"."]})]}),"\n",(0,s.jsx)(n.h2,{id:"build-the-package",children:"Build the package"}),"\n",(0,s.jsxs)(n.p,{children:["Build the package using ",(0,s.jsx)(n.code,{children:"go-task"}),". The default task will build the package against the Unstable repository, so you don't have to specify a task here."]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"go-task\n"})}),"\n",(0,s.jsx)(n.p,{children:"Once the build completes, your directory should now include the following files:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-text",children:"\u251C\u2500\u2500 abi_used_libs\n\u251C\u2500\u2500 abi_used_symbols\n\u251C\u2500\u2500 package.yml\n\u251C\u2500\u2500 pspec_x86_64.xml\n\u2514\u2500\u2500 tree-2.1.1-1-1-x86_64.eopkg\n"})}),"\n",(0,s.jsxs)(n.p,{children:["All these files ",(0,s.jsx)(n.em,{children:"except"})," the ",(0,s.jsx)(n.code,{children:".eopkg"})," file(s) should be included in your pull request. You will remove the ",(0,s.jsx)(n.code,{children:".eopkg"})," files after testing the package."]}),"\n",(0,s.jsxs)(n.p,{children:["Once your package has built successfully, you will need to ",(0,s.jsx)(n.a,{href:"testing-a-package",children:"test it"}),"."]}),"\n",(0,s.jsx)(n.h2,{id:"commit-your-changes",children:"Commit your changes"}),"\n",(0,s.jsxs)(n.p,{children:["Check the ",(0,s.jsx)(n.a,{href:"git-basics#check-the-changes-in-your-files",children:"changes in your files"}),"."]}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.a,{href:"/docs/packaging/git-basics",children:"Add / remove files as necessary to the commit"}),". Then, ",(0,s.jsx)(n.strong,{children:"check your branch"}),"."]}),"\n",(0,s.jsx)(n.p,{children:"Double-check that everything looks correct and all of the files have been staged before committing."}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"git status\n"})}),"\n",(0,s.jsx)(n.p,{children:"If all looks well, commit your changes."}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"git commit\n"})}),"\n",(0,s.jsx)(n.h3,{id:"commit-message-format-for-new-packages",children:"Commit message format for new packages"}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.code,{children:"git commit"})," on ",(0,s.jsx)(n.a,{href:"/docs/packaging/prepare-for-packaging#initialize-git-hooks",children:"an initialized repository"})," will automatically open your editor with the correct template.\nNote that lines starting with a ",(0,s.jsx)(n.code,{children:"#"})," will be ignored by Git and do not need to be removed."]}),"\n",(0,s.jsx)(n.p,{children:"There should be a summary line (with the package name), a blank line, and then the rest of the commit message."}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"There should at the minimum be a Summary."}),"\n",(0,s.jsx)(n.li,{children:"Bullet point lists should start with a dash."}),"\n",(0,s.jsxs)(n.li,{children:["Link the package request using a ",(0,s.jsx)(n.code,{children:"Resolves"})," line."]}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"Here is an example in our standard format:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{children:"tree: Add at v2.1.1\n\n**Summary**\n\nAdd the tree package, which recursively lists directories in a tree like manner.\n\nResolves getsolus/packages#issuenumber\n"})}),"\n",(0,s.jsxs)(n.p,{children:["Where ",(0,s.jsx)(n.code,{children:"issuenumber"})," is the issue number of the package request."]}),"\n",(0,s.jsxs)(n.p,{children:["For more information on suitable commit messages, please check the ",(0,s.jsx)(n.a,{href:"https://github.com/solus-project/tooling-central/blob/master/README.rst#using-git",children:"tooling central documentation"}),"."]}),"\n",(0,s.jsxs)(n.p,{children:["If you need a change to depend on another change, mention it in the commit message too (use the full URL): ",(0,s.jsx)(n.code,{children:"Depends on https://github.com/getsolus/packages/issues/234"})]}),"\n",(0,s.jsxs)(n.p,{children:["Next, you'll ",(0,s.jsx)(n.a,{href:"/docs/packaging/submitting-a-pull-request",children:"submit a pull request for review"}),"."]})]})}function h(e={}){let{wrapper:n}={...(0,t.a)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(d,{...e})}):d(e)}},50065:function(e,n,a){a.d(n,{Z:function(){return l},a:function(){return r}});var i=a(67294);let s={},t=i.createContext(s);function r(e){let n=i.useContext(t);return i.useMemo(function(){return"function"==typeof e?e(n):{...n,...e}},[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:r(e.components),i.createElement(t.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/c99ea947.dc2e0edb.js b/assets/js/c99ea947.dc2e0edb.js new file mode 100644 index 000000000..eee65057e --- /dev/null +++ b/assets/js/c99ea947.dc2e0edb.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([["6717"],{60305:function(e){e.exports=JSON.parse('{"categoryGeneratedIndex":{"title":"Camera","slug":"/category/camera","permalink":"/docs/category/camera","sidebar":"userSidebar","navigation":{"previous":{"title":"Software","permalink":"/docs/category/software"},"next":{"title":"DroidCam","permalink":"/docs/user/software/camera/droidcam"}}}}')}}]); \ No newline at end of file diff --git a/assets/js/c99ea947.e547d0e0.js b/assets/js/c99ea947.e547d0e0.js deleted file mode 100644 index 8541a7197..000000000 --- a/assets/js/c99ea947.e547d0e0.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[7018],{7768:e=>{e.exports=JSON.parse('{"categoryGeneratedIndex":{"title":"Camera","slug":"/category/camera","permalink":"/docs/category/camera","sidebar":"userSidebar","navigation":{"previous":{"title":"Software","permalink":"/docs/category/software"},"next":{"title":"DroidCam","permalink":"/docs/user/software/camera/droidcam"}}}}')}}]); \ No newline at end of file diff --git a/assets/js/c9c1a3f4.86590624.js b/assets/js/c9c1a3f4.86590624.js new file mode 100644 index 000000000..2e060c674 --- /dev/null +++ b/assets/js/c9c1a3f4.86590624.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([["2384"],{27346:function(e,t,n){n.r(t),n.d(t,{metadata:()=>i,contentTitle:()=>d,default:()=>h,assets:()=>r,toc:()=>l,frontMatter:()=>a});var i=JSON.parse('{"id":"user/editions/budgie/configuration","title":"Configuration","description":"Date and Time","source":"@site/docs/user/editions/budgie/configuration.md","sourceDirName":"user/editions/budgie","slug":"/user/editions/budgie/configuration","permalink":"/docs/user/editions/budgie/configuration","draft":false,"unlisted":false,"editUrl":"https://github.com/getsolus/help-center-docs/tree/master/docs/user/editions/budgie/configuration.md","tags":[],"version":"current","lastUpdatedAt":1733757592000,"frontMatter":{"title":"Configuration","summary":"Help for configuring the Budgie desktop on Solus"},"sidebar":"userSidebar","previous":{"title":"Budgie","permalink":"/docs/user/editions/budgie/"},"next":{"title":"Tips and Tricks","permalink":"/docs/user/editions/budgie/tips-and-tricks"}}'),o=n("85893"),s=n("50065");let a={title:"Configuration",summary:"Help for configuring the Budgie desktop on Solus"},d="Configuration",r={},l=[{value:"Date and Time",id:"date-and-time",level:2},{value:"Default Applications",id:"default-applications",level:2},{value:"Displays",id:"displays",level:2},{value:"Keyboard Layout",id:"keyboard-layout",level:2},{value:"Keyboard Layout Indicator",id:"keyboard-layout-indicator",level:3},{value:"IBus",id:"ibus",level:3},{value:"Language",id:"language",level:2},{value:"Mouse and Touchpad",id:"mouse-and-touchpad",level:2},{value:"Mouse",id:"mouse",level:3},{value:"Touchpad",id:"touchpad",level:3},{value:"Testing",id:"testing",level:3},{value:"Network",id:"network",level:2},{value:"Non-Hidden Network",id:"non-hidden-network",level:3},{value:"Hidden Network",id:"hidden-network",level:3},{value:"Sound and Sound Devices",id:"sound-and-sound-devices",level:2},{value:"Settings",id:"settings",level:3},{value:"Users",id:"users",level:2},{value:"Adding a User",id:"adding-a-user",level:3},{value:"Removing a User",id:"removing-a-user",level:3},{value:"Desktop Background",id:"desktop-background",level:2},{value:"Desktop Icons",id:"desktop-icons",level:2},{value:"Workspaces",id:"workspaces",level:2},{value:"Keyboard Shortcuts",id:"keyboard-shortcuts",level:3},{value:"Workspaces Configuration",id:"workspaces-configuration",level:3}];function c(e){let t={a:"a",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",header:"header",img:"img",li:"li",p:"p",ul:"ul",...(0,s.a)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(t.header,{children:(0,o.jsx)(t.h1,{id:"configuration",children:"Configuration"})}),"\n",(0,o.jsx)(t.h1,{id:"system",children:"System"}),"\n",(0,o.jsx)(t.h2,{id:"date-and-time",children:"Date and Time"}),"\n",(0,o.jsx)(t.p,{children:'In Budgie, the easiest way to access the date and time settings is by left clicking on the time in the bottom panel and clicking on "System time and date settings".'}),"\n",(0,o.jsx)(t.p,{children:(0,o.jsx)(t.img,{alt:"Budgie Date and Time Right-Click",src:n(88236).Z+"",width:"289",height:"162"})}),"\n",(0,o.jsx)(t.p,{children:'Alternatively, you can open the Budgie Control Center, and scroll the left-hand sidebar down to the bottom to find "Date & Time".'}),"\n",(0,o.jsx)(t.p,{children:'You will be presented with the following window. From here, you can enable / disable automatic date & time, automatic time zone changing, and change between AM/PM and 24-hour time formats. Note that changing the system date & time and time zone information requires clicking the "Unlock" button at the top of the window, and entering your password.'}),"\n",(0,o.jsx)(t.p,{children:(0,o.jsx)(t.img,{alt:"Budgie Date and Time",src:n(84593).Z+"",width:"996",height:"702"})}),"\n",(0,o.jsx)(t.p,{children:'If you wish to change how the time is displayed in the bottom panel, open Budgie Desktop Settings from the Budgie Menu, choose the Bottom Panel from the left-hand sidebar, choose "Clock" from the list of applets in the middle, then adjust your desired settings on the right-hand side.'}),"\n",(0,o.jsx)(t.p,{children:(0,o.jsx)(t.img,{alt:"Budgie Clock Applet",src:n(88405).Z+"",width:"761",height:"609"})}),"\n",(0,o.jsxs)(t.p,{children:["If you want to set a custom date & time format, the ",(0,o.jsx)(t.a,{href:"https://pubs.opengroup.org/onlinepubs/9699919799/utilities/date.html",children:'"conversion specifications" referenced by the POSIX standards'})," list the options that can be entered."]}),"\n",(0,o.jsx)(t.h2,{id:"default-applications",children:"Default Applications"}),"\n",(0,o.jsx)(t.p,{children:'You can configure default applications in Budgie by opening the Budgie Control Center, and scrolling the left-hand sidebar down to "Default Applications".'}),"\n",(0,o.jsx)(t.p,{children:"The drop-down boxes here enable choosing the default application for each category of file. For most categories, you will need to have already installed alternative applications before you can change the default settings. For instance, if you wish to change the default video player from Celluloid to VLC, then you must first install VLC (available in the Software Center)."}),"\n",(0,o.jsx)(t.p,{children:(0,o.jsx)(t.img,{alt:"Budgie Default Applications",src:n(21688).Z+"",width:"991",height:"697"})}),"\n",(0,o.jsx)(t.p,{children:'You can specify default applications for individual file types by right-clicking on a file and clicking on "Open With" from the popup menu, then choosing "Other Application".'}),"\n",(0,o.jsx)(t.p,{children:(0,o.jsx)(t.img,{alt:"Budgie Context Menu",src:n(58866).Z+"",width:"879",height:"579"})}),"\n",(0,o.jsx)(t.p,{children:'Next, select the application you wish to use from the list, then click "Set as default" below the list. Finish by clicking "OK". In the future, all files with the same file type will open with the chosen application.'}),"\n",(0,o.jsx)(t.p,{children:(0,o.jsx)(t.img,{alt:"Budgie Application Selection",src:n(40530).Z+"",width:"914",height:"618"})}),"\n",(0,o.jsx)(t.h2,{id:"displays",children:"Displays"}),"\n",(0,o.jsx)(t.p,{children:'You can configure your display(s) in Budgie by opening the Budgie Menu and then clicking on "Displays" in the System Settings category.'}),"\n",(0,o.jsx)(t.p,{children:"You will then be shown the following window."}),"\n",(0,o.jsx)(t.p,{children:(0,o.jsx)(t.img,{alt:"Budgie Displays Overview",src:n(11126).Z+"",width:"742",height:"345"})}),"\n",(0,o.jsx)(t.p,{children:"Click on the individual display you wish to configure. You will now be able to select if you wish to use this monitor as the primary or secondary display, mirror it with another display, or turn it off. This window also gives you the size and aspect ratio, ability to rotate the display, and ability to change the resolution."}),"\n",(0,o.jsx)(t.p,{children:(0,o.jsx)(t.img,{alt:"Budgie Individual Display Settings",src:n(92767).Z+"",width:"741",height:"365"})}),"\n",(0,o.jsx)(t.p,{children:"Going back to the Displays section, you also have the option to arrange your displays. Click the \u201CArrange Combined Displays\u201D button and then drag your displays so they are arranged to your liking."}),"\n",(0,o.jsx)(t.p,{children:(0,o.jsx)(t.img,{alt:"Budgie Arrange Displays",src:n(7325).Z+"",width:"742",height:"381"})}),"\n",(0,o.jsx)(t.p,{children:'Click "Apply" once you are happy with your changes. You will be shown a message asking if the display looks OK, if it does, click on "Keep This Configuration".'}),"\n",(0,o.jsx)(t.p,{children:(0,o.jsx)(t.img,{alt:"Budgie Confirm Display Settings",src:n(94631).Z+"",width:"466",height:"114"})}),"\n",(0,o.jsx)(t.h2,{id:"keyboard-layout",children:"Keyboard Layout"}),"\n",(0,o.jsx)(t.p,{children:'Using Budgie, you can change your keyboard layout in the Budgie Control Center. Click on the Budgie Menu, click the System Settings icon at the bottom or "Budgie Control Center" in the application list, and then click on "Keyboard" in the System Settings category.'}),"\n",(0,o.jsx)(t.p,{children:(0,o.jsx)(t.img,{alt:"Budgie Keyboard Settings",src:n(25426).Z+"",width:"988",height:"695"})}),"\n",(0,o.jsx)(t.p,{children:'Click the "+" button to add an input source (keyboard layout). You will be shown the following dialog.'}),"\n",(0,o.jsx)(t.p,{children:(0,o.jsx)(t.img,{alt:"Budgie Add Input Source",src:n(99441).Z+"",width:"988",height:"696"})}),"\n",(0,o.jsx)(t.p,{children:'Here you can select the language and then keyboard layout within each language section. If it does not appear in this list, click the "\u22EE" button (three vertical dots). This will enable you to search for the keyboard layout you wish to use.'}),"\n",(0,o.jsx)(t.p,{children:'After choosing the keyboard layout, click the "Add" button at the top of the window. You will be brought back to the following dialog with your new keyboard layout. In the image below, we are now using English (US) and English (UK) layouts.'}),"\n",(0,o.jsx)(t.p,{children:(0,o.jsx)(t.img,{alt:"Budgie New Layout Added",src:n(67967).Z+"",width:"987",height:"697"})}),"\n",(0,o.jsx)(t.p,{children:'You can remove a keyboard layout by clicking on one of the items, for instance English (UK), then clicking the "\u22EE" button, then choosing "Remove".'}),"\n",(0,o.jsxs)(t.p,{children:["If you wish to use multiple keyboard layouts, you can switch between them by using the keyboard shortcut ",(0,o.jsx)(t.code,{children:"Super + Shift + Space"}),", or by adding the Keyboard Layout Indicator applet to your Budgie panel."]}),"\n",(0,o.jsx)(t.h3,{id:"keyboard-layout-indicator",children:"Keyboard Layout Indicator"}),"\n",(0,o.jsx)(t.p,{children:'To add the Keyboard Layout Indicator to your panel, open the Budgie Desktop Settings app from the Budgie Menu, then click "Bottom Panel" on the left-hand sidebar.'}),"\n",(0,o.jsx)(t.p,{children:(0,o.jsx)(t.img,{alt:"Budgie Bottom Panel Settings",src:n(88405).Z+"",width:"761",height:"609"})}),"\n",(0,o.jsx)(t.p,{children:'On the right side of the window, click the "+" button next to "Add applet".'}),"\n",(0,o.jsx)(t.p,{children:'Find the Keyboard Layout Indicator entry and select it, then click "Add" at the top of the window. This will add the Keyboard Layout Indicator (to the center section by default), as shown below.'}),"\n",(0,o.jsx)(t.p,{children:(0,o.jsx)(t.img,{alt:"Budgie Keyboard Layout Applet",src:n(21608).Z+"",width:"1850",height:"159"})}),"\n",(0,o.jsx)(t.h3,{id:"ibus",children:"IBus"}),"\n",(0,o.jsxs)(t.p,{children:["Budgie comes with IBus ready to go straight out of the box. If you need an additional IBus IME see: ",(0,o.jsx)(t.a,{href:"/docs/user/software/localization/ibus/",children:"IBus"})]}),"\n",(0,o.jsxs)(t.p,{children:["You will now be able to switch between your keyboard layouts by using the keyboard shortcut ",(0,o.jsx)(t.code,{children:"Super + Shift + Space"})," or by using the Keyboard Layout Indicator applet."]}),"\n",(0,o.jsx)(t.p,{children:(0,o.jsx)(t.img,{alt:"Budgie Keyboard Layout Applet: IBus",src:n(9473).Z+"",width:"169",height:"140"})}),"\n",(0,o.jsx)(t.h2,{id:"language",children:"Language"}),"\n",(0,o.jsx)(t.p,{children:'You can change your language in Budgie by opening the Budgie Menu and then clicking on "Region and Language" in the System Settings category.'}),"\n",(0,o.jsx)(t.p,{children:"You will now be shown the following window. This window allows you to change your language, formatting for dates and times and the language of your keyboard."}),"\n",(0,o.jsx)(t.p,{children:(0,o.jsx)(t.img,{alt:"Budgie Region and Languages",src:n(92766).Z+"",width:"742",height:"345"})}),"\n",(0,o.jsx)(t.p,{children:'Start by clicking "Language". This brings up a selection of languages to chose from.'}),"\n",(0,o.jsx)(t.p,{children:(0,o.jsx)(t.img,{alt:"Budgie Selecting Language",src:n(35474).Z+"",width:"742",height:"489"})}),"\n",(0,o.jsx)(t.p,{children:"If your language does not appear in the list, click the \u22EE button at the bottom (three vertical dots) to show all the available languages. You can use the search box to go directly to your choice or scroll down the list."}),"\n",(0,o.jsx)(t.p,{children:(0,o.jsx)(t.img,{alt:"Budgie Language Search",src:n(37599).Z+"",width:"742",height:"489"})}),"\n",(0,o.jsxs)(t.p,{children:['Once you have selected the language you wish to use, click "Done". You ',(0,o.jsx)(t.em,{children:"may"})," need to logout and login to your computer for it to take affect."]}),"\n",(0,o.jsx)(t.h2,{id:"mouse-and-touchpad",children:"Mouse and Touchpad"}),"\n",(0,o.jsx)(t.p,{children:'You can configure the settings of your mouse and / or touchpad by opening the Budgie Menu and then clicking on "Mouse and Touchpad" in the System Settings category. You will see either settings for your mouse or trackpad, depending on the device.'}),"\n",(0,o.jsx)(t.h3,{id:"mouse",children:"Mouse"}),"\n",(0,o.jsx)(t.p,{children:(0,o.jsx)(t.img,{alt:"Budgie Mouse Settings",src:n(540).Z+"",width:"742",height:"585"})}),"\n",(0,o.jsx)(t.p,{children:"For mice, you can set:"}),"\n",(0,o.jsxs)(t.ul,{children:["\n",(0,o.jsx)(t.li,{children:"The primary button (usually left click) to be left or right."}),"\n",(0,o.jsx)(t.li,{children:"Mouse speed."}),"\n",(0,o.jsx)(t.li,{children:'Enabling / disabling "natural scrolling" (reversed scrolling direction).'}),"\n"]}),"\n",(0,o.jsx)(t.h3,{id:"touchpad",children:"Touchpad"}),"\n",(0,o.jsx)(t.p,{children:(0,o.jsx)(t.img,{alt:"Budgie Touchpad Settings",src:n(47523).Z+"",width:"742",height:"585"})}),"\n",(0,o.jsx)(t.p,{children:"For touchpads, you can set:"}),"\n",(0,o.jsxs)(t.ul,{children:["\n",(0,o.jsx)(t.li,{children:"The primary button (usually left click) to be left or right."}),"\n",(0,o.jsx)(t.li,{children:"Enabling / disabling of the touchpad."}),"\n",(0,o.jsx)(t.li,{children:'Enabling / disabling "natural scrolling" (reversed scrolling direction).'}),"\n",(0,o.jsx)(t.li,{children:"Touchpad speed."}),"\n",(0,o.jsx)(t.li,{children:"Enabling / disabling of Tap to Click."}),"\n"]}),"\n",(0,o.jsx)(t.h3,{id:"testing",children:"Testing"}),"\n",(0,o.jsx)(t.p,{children:'You can test your settings by clicking the "Test Your Settings" button in the top right of the window.'}),"\n",(0,o.jsx)(t.h2,{id:"network",children:"Network"}),"\n",(0,o.jsx)(t.p,{children:'To configure your network settings in Budgie, start by opening the Budgie Menu and then click on "Network" in the System Settings category.'}),"\n",(0,o.jsx)(t.p,{children:(0,o.jsx)(t.img,{alt:"Budgie Network Overview",src:n(74959).Z+"",width:"742",height:"491"})}),"\n",(0,o.jsx)(t.p,{children:"To configure wireless, go to the Wi-Fi section. If your wireless is currently turned off, click the toggle button, leave the Network section, and go back in."}),"\n",(0,o.jsx)(t.h3,{id:"non-hidden-network",children:"Non-Hidden Network"}),"\n",(0,o.jsx)(t.p,{children:"In the WiFi section of the Network settings window, click the access point you wish to connect to."}),"\n",(0,o.jsx)(t.p,{children:'You may now be prompted to authenticate with the network. Type in your password and then click "Connect".'}),"\n",(0,o.jsx)(t.p,{children:(0,o.jsx)(t.img,{alt:"Budgie Network Authentication",src:n(3268).Z+"",width:"742",height:"491"})}),"\n",(0,o.jsx)(t.p,{children:"If your password is correct, you will now be authenticated with the network."}),"\n",(0,o.jsx)(t.h3,{id:"hidden-network",children:"Hidden Network"}),"\n",(0,o.jsx)(t.p,{children:"If you wish to connect to a hidden network, click \u201CConnect to Hidden Network...\u201D in the WiFi section of the Network settings window. It will show the following dialog, where you type the network name and type of security (if any)."}),"\n",(0,o.jsx)(t.p,{children:(0,o.jsx)(t.img,{alt:"Budgie Hidden Network",src:n(48117).Z+"",width:"741",height:"490"})}),"\n",(0,o.jsx)(t.p,{children:"If the network is found and has a password, you will be prompted to authenticate with the network."}),"\n",(0,o.jsx)(t.h2,{id:"sound-and-sound-devices",children:"Sound and Sound Devices"}),"\n",(0,o.jsx)(t.p,{children:"To change the volume in Budgie, simply left click on the speaker icon in the system tray and drag the slider or use the plus and minus icons to reach your desired level."}),"\n",(0,o.jsx)(t.p,{children:(0,o.jsx)(t.img,{alt:"Budgie Volume Control",src:n(109).Z+"",width:"117",height:"249"})}),"\n",(0,o.jsx)(t.h3,{id:"settings",children:"Settings"}),"\n",(0,o.jsxs)(t.p,{children:["You can access sound settings via the Sound applet in Raven, the Notification and Widget Center. Open Raven, either by clicking on its icon in the far right of the system tray or using the keyboard shortcut ",(0,o.jsx)(t.code,{children:"Super + A"}),". The Sound applet allows you to enable, disable and alter input and output methods as well as providing a simple volume slider."]}),"\n",(0,o.jsx)(t.p,{children:(0,o.jsx)(t.img,{alt:"Raven Sound Applet",src:n(62719).Z+"",width:"299",height:"235"})}),"\n",(0,o.jsx)(t.p,{children:'You can access further sound settings, including individual application volume controls, and a simple speaker test by opening the Budgie Menu and then clicking on "Sound" in the System Settings category.'}),"\n",(0,o.jsx)(t.p,{children:(0,o.jsx)(t.img,{alt:"Budgie Sound Settings",src:n(30695).Z+"",width:"742",height:"495"})}),"\n",(0,o.jsx)(t.h2,{id:"users",children:"Users"}),"\n",(0,o.jsx)(t.p,{children:'To add and remove users with Budgie, start by opening the Budgie Menu and then click on "Users" in the System Settings category.'}),"\n",(0,o.jsx)(t.p,{children:(0,o.jsx)(t.img,{alt:"Budgie User Settings",src:n(36862).Z+"",width:"742",height:"453"})}),"\n",(0,o.jsx)(t.p,{children:'To manage your own or other accounts, you first need to authenticate. Click the "Unlock" button in the top right corner and type your password. Note that you are required to be an administrator. If you\'re the only user on the system, then your account is an administrator by default.'}),"\n",(0,o.jsx)(t.p,{children:'In the event the password provided is correct, the "Unlock" button will change to "Add User..."'}),"\n",(0,o.jsx)(t.h3,{id:"adding-a-user",children:"Adding a User"}),"\n",(0,o.jsx)(t.p,{children:'To add a user, click the "Add User..." button in the top right corner of the Users window.'}),"\n",(0,o.jsx)(t.p,{children:(0,o.jsx)(t.img,{alt:"Budgie Add User Button",src:n(46399).Z+"",width:"225",height:"65"})}),"\n",(0,o.jsx)(t.p,{children:"This will open the Add User window (shown below)."}),"\n",(0,o.jsx)(t.p,{children:(0,o.jsx)(t.img,{alt:"Budgie Add User Dialog",src:n(32307).Z+"",width:"466",height:"546"})}),"\n",(0,o.jsx)(t.p,{children:'Fill in the required items and then finish adding the new user by clicking "Add" in the top right corner.'}),"\n",(0,o.jsx)(t.h3,{id:"removing-a-user",children:"Removing a User"}),"\n",(0,o.jsx)(t.p,{children:'To remove a user, open the Users window and then click on the user you wish to remove. Now click on the red "Remove User..." button in the bottom right corner.'}),"\n",(0,o.jsx)(t.p,{children:(0,o.jsx)(t.img,{alt:"Budgie User List",src:n(23629).Z+"",width:"742",height:"592"})}),"\n",(0,o.jsx)(t.p,{children:"Upon clicking to remove the user, you will be given the option to keep their files, delete their files, or cancel the removal of the user\u2019s account."}),"\n",(0,o.jsx)(t.p,{children:(0,o.jsx)(t.img,{alt:"Budgie Keep Files Prompt",src:n(47782).Z+"",width:"508",height:"162"})}),"\n",(0,o.jsx)(t.h1,{id:"user-interface",children:"User Interface"}),"\n",(0,o.jsx)(t.h2,{id:"desktop-background",children:"Desktop Background"}),"\n",(0,o.jsx)(t.p,{children:'To change the desktop background in Budgie, open the Budgie Control Center by selecting "System Settings" from either the Budgie Menu, or by right-clicking on a blank spot on the desktop.'}),"\n",(0,o.jsx)(t.p,{children:(0,o.jsx)(t.img,{alt:"Budgie Desktop Right-Click Menu",src:n(38407).Z+"",width:"390",height:"253"})}),"\n",(0,o.jsx)(t.p,{children:'Once the Budgie Control Center is open, click "Background" on the left-hand sidebar.'}),"\n",(0,o.jsx)(t.p,{children:'Click one of the images displayed on the right to choose a pre-installed background image, or click "Add Picture..." in the headerbar to add one of your own image files to the available options.'}),"\n",(0,o.jsx)(t.p,{children:(0,o.jsx)(t.img,{alt:"Budgie Control Center Background Section",src:n(73453).Z+"",width:"1017",height:"715"})}),"\n",(0,o.jsx)(t.h2,{id:"desktop-icons",children:"Desktop Icons"}),"\n",(0,o.jsx)(t.p,{children:'Desktop Icons are enabled by default. To disable them, open the Budgie Desktop Settings app by selecting "Budgie Desktop Settings" from the Budgie Menu, or from the pop-up menu when right-clicking on a blank spot on the desktop.'}),"\n",(0,o.jsx)(t.p,{children:'In the Budgie Desktop Settings app, click "Desktop" in the left-hand sidebar - Desktop Icons is the first toggle switch on that screen.'}),"\n",(0,o.jsx)(t.p,{children:(0,o.jsx)(t.img,{alt:"Budgie Desktop Icons",src:n(81215).Z+"",width:"781",height:"627"})}),"\n",(0,o.jsx)(t.p,{children:"To place files on your desktop, you can either drag them directly onto the Desktop, or move the files you want to the Desktop folder within the Nemo file manager app (as shown in the image below)."}),"\n",(0,o.jsx)(t.p,{children:(0,o.jsx)(t.img,{alt:"Budgie Desktop Folder",src:n(91585).Z+"",width:"820",height:"602"})}),"\n",(0,o.jsx)(t.h2,{id:"workspaces",children:"Workspaces"}),"\n",(0,o.jsx)(t.p,{children:"Budgie enables the switching of workspaces with the Workspace Switcher. You can enable workspaces in Budgie by adding the Workspace Switcher applet to your panel."}),"\n",(0,o.jsx)(t.p,{children:'To add this applet, open the Budgie Control Center by selecting "System Settings" from either the Budgie Menu, or by right-clicking on a blank spot on the desktop. Once in the Budgie Control Center, in the left-hand sidebar, select the panel to which you want to add the Workspace Switcher (choose the default Bottom Panel if you don\'t want to add more panels at this time).'}),"\n",(0,o.jsx)(t.p,{children:(0,o.jsx)(t.img,{alt:"Budgie Desktop Settings Panel Section",src:n(94683).Z+"",width:"763",height:"611"})}),"\n",(0,o.jsx)(t.p,{children:'Click the + button next to "Add applet" on the right side of the window. This will open the list of available applets - scroll down until you find "Workspace Switcher", select it, and then click the \'Add\' button in the top-right of the window.'}),"\n",(0,o.jsx)(t.p,{children:(0,o.jsx)(t.img,{alt:"Adding Budgie Workspaces Applet",src:n(74926).Z+"",width:"761",height:"610"})}),"\n",(0,o.jsx)(t.p,{children:"You should now see your workspaces available in the main Budgie panel. Applications can be moved between workspaces by dragging and dropping their icons within the Workspace Switcher."}),"\n",(0,o.jsx)(t.p,{children:(0,o.jsx)(t.img,{alt:"Budgie Workspaces",src:n(47301).Z+"",width:"1850",height:"141"})}),"\n",(0,o.jsx)(t.h3,{id:"keyboard-shortcuts",children:"Keyboard Shortcuts"}),"\n",(0,o.jsx)(t.p,{children:"Budgie provides a variety of keyboard shortcuts for workspaces."}),"\n",(0,o.jsx)(t.p,{children:'To view these shortcuts, open the Budgie Control Center app, choose the "Keyboard" section in the left-hand sidebar, then scroll down in the right part of the window to choose "Keyboard Shortcuts".'}),"\n",(0,o.jsx)(t.p,{children:(0,o.jsx)(t.img,{alt:"Budgie Control Center Keyboard Shortcuts",src:n(38122).Z+"",width:"995",height:"702"})}),"\n",(0,o.jsx)(t.p,{children:'Workspace shortcuts are contained in the "Navigation" section of the Keyboard Shortcuts window.'}),"\n",(0,o.jsx)(t.p,{children:(0,o.jsx)(t.img,{alt:"Budgie Control Center Keyboard Shortcuts Sections",src:n(58019).Z+"",width:"996",height:"699"})}),"\n",(0,o.jsx)(t.h3,{id:"workspaces-configuration",children:"Workspaces Configuration"}),"\n",(0,o.jsx)(t.p,{children:'There are 4 workspaces available in Budgie by default. To add a new workspace, click on the "+" button.'}),"\n",(0,o.jsx)(t.p,{children:"If you wish to remove or rename your workspace, right click on the desired workspace and select rename or remove."}),"\n",(0,o.jsx)(t.p,{children:(0,o.jsx)(t.img,{alt:"Budgie Remove or Rename Workspaces",src:n(54277).Z+"",width:"1850",height:"187"})})]})}function h(e={}){let{wrapper:t}={...(0,s.a)(),...e.components};return t?(0,o.jsx)(t,{...e,children:(0,o.jsx)(c,{...e})}):c(e)}},46399:function(e,t,n){n.d(t,{Z:function(){return i}});let i="data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEASABIAAD/2wBDAAIBAQEBAQIBAQECAgICAgQDAgICAgUEBAMEBgUGBgYFBgYGBwkIBgcJBwYGCAsICQoKCgoKBggLDAsKDAkKCgr/2wBDAQICAgICAgUDAwUKBwYHCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgr/wAARCABBAOEDAREAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD9c9Ph1SC+km+0FoHXBQrjB9a/KYUqsajd9D66UoONupqQ3UwABTIx1rrjz9jF8pKk7MSoY1UU2S7D45UDeZ6nmrjFCbHmdQ2Bkgnr6U3Gz0QiWFwo54wa0jHQlu5I11tXGepq22lYncR7iWJd23cKluSQ0rkD38mzMa/gaxnKql7qLUY9Sv8A2w018mnLZSsXXll+6PxrP20faKnJaspwtG9x19qcGk25muA2xPvnPSpxGJw2ChzzdkOnSqVpcsRbfU7TU4PNsXLgjqRirp4mhiIXpu6FKnUpytIdFCTGGeY8n1q40uZXuS5Ddio20scE9afs3F2Dm6jZ4Fx8s+D2pypAphh1i/euCR3FHs7R1DmuyCaO2Iyz8n6VhPDUpK0tS1UknoZer6BpupQBZ13sjbgG6A1xvL8JTjzQikzeOJrX3MKPwvpS6sbaexyrDliMg/0rneHUqtrfM6PbzUL3OI8U/s2eEpru81fSL+9gvJpfMjmiuWUK/Y46VjLBOOx2Us0nZKSKvw+8FfE3wdqMl5qvxMvdSQFcw3aqQFB5wcda5Z0KsZfu9Doq4jC1oW5bM7Xx7+0mfhLo0Go3WgX+q27yLHO2nRbjHnjOO4HeumlKo0ouN/PY4IYNV5aSsZWufEL4P/Gbwa/2vULuwgujtNxPGYwp+prmq0suq+67xl95vShj8LPTU42X4FWWgT2+p+CPHsd7beXtFtPMrBh7Y715tTJ+WTnGab+49P8AtmVSPJUhYzPinpHjTWPDjW8Xgeb7Zp43Wl6jgqMf3QATz059frXNg8JjMFWcpv3H0LhXw1WSs7ep46ngP9oO406bxHr2k2t7vJYQrJsIToFJb7xxxxgelepXx+Bp8iV4o76UKTk43u+ljI8G/G3wr4NefwpeeH72yup5D5zNkAY+8Qe5r0KmH+tQVWMk0Z1MPVU+W2p0lx8dPhhrcQ0ObxV9qvLIbraKWTJQ+2eD9a4/7Px0ZKcY2iyfZQi3rqH/AAtex/6DH/jq/wCFbfVanYPZxPznX/gtH/wU+QYX9q665/6kvQf/AJX1+2LIMpW1N/8AgT/zPx/+0cY/tfghR/wWl/4KfgbR+1fdY/7EvQf/AJX0/wCwcq/kf/gT/wAw/tDF/wA34IP+H03/AAVAHP8Aw1fdf+EXoH/yvoWQ5Sv+Xf8A5M/8xf2hi/5vwQ1v+C0P/BT1zlv2rbr/AMIzQf8A5ApPIMpf/Lt/+BP/ADH/AGhjP5vwQ4f8Fpv+CoA6ftX3X/hF6B/8r6f9hZV/z7f/AIE/8xf2hi/5vwQ4f8Fqv+CoY4H7WN1/4Regf/K+msjytfYf/gT/AMwePxb+1+CD/h9V/wAFQ85P7WN1/wCEXoH/AMr6f9h5V/z7/F/5i+v4v+b8EL/w+t/4KjYx/wANZXWP+xL0D/5X0f2Hlf8Az7/F/wCYfXsX/N+CG/8AD6n/AIKh/wDR2F1/4Regf/K+j+w8r/59/i/8w+vYv+b8EOh/4LXf8FRrd/Mh/axuQ3r/AMIVoH/yvqf7AyhS5vZ6+r/zH9fxdrc34IbP/wAFp/8AgqDc7vP/AGrrlt3UHwVoHP8A5T6ynw1kdRWlRv6t/wCZSzLHR2n+CGQf8Fof+Cnlsnl2/wC1ZcoP9nwVoA/9x9XDh/J6ceWNKy9X/mJ5jjZO7l+CJP8Ah9Z/wVFxt/4ayuv/AAi9A/8AlfWiyPK0v4f4v/Mn6/i/5vwQN/wWr/4KiNyf2sbr/wAIrQP/AJX0/wCxMrf2Pxf+YfXsV/N+CEP/AAWn/wCCoLHJ/avuv/CL0D/5X0v7Dyr/AJ9/i/8AMPr+L/m/BDW/4LR/8FPmOW/auuj/ANyZoP8A8gUnkWVP7D/8Cf8AmNY/Fr7X4IYf+Czv/BTo/wDN1l1/4Rmg/wDyBU/2BlH/AD7f/gT/AMx/2hi/5vwQv/D53/gp1jH/AA1Xc/8AhGaD/wDIFH+r+Uf8+/8AyZ/5h/aGL/m/BDG/4LLf8FNX+9+1Vd/+EdoX/wAgVH+rmTX/AIb/APApf5j/ALSxv834Iaf+CyX/AAUyPX9qi6/8I7Qv/kCn/q7k3/Pv/wAml/mL+0cZ/N+CGSf8Fiv+Clcq7ZP2pLkj0/4Q3Qv/AJApPhzJXvS/8ml/mP8AtLGr7X4Ir3H/AAV0/wCCjd3EYbn9pu4dD1VvB+h4/wDSGpfDORv/AJdf+TS/zKWa5gndT/BGfqP/AAVN/b91XRpPD9/+0RJJZzf6yA+D9DAP5WOazfCuQP8A5c/+TS/zNo55msZXVT8F/kZ9h/wUr/bp0qxTTtP/AGhbyKGLHlovhzSPlx0wfseRWcuEeHpSu6Lv/il/maf6w5v/AM/P/JY/5G1p/wDwV0/4KRaPCIbD9qLUdgHCyeGtGcf+PWJrWPC+RQVlSf8A4FL/ADMJZvmE3rJfcv8AIjuP+Ctv/BRS+Ui7/aWumHTH/CJ6J/SxrnrcGcM4hWqUL/8Ab0v8zWGe5tTd41LfJf5HKWn7bfxt1PxfZeKviv4/udZsrObzbu3i02ztWkjzmQA28EZ3FdwBOQCQSGAINT4WymlhpQw0OV201bXlo2zvw3FudUqsXOpzRXSy/RXP038X/wDBLPWRJcX3hfxh/abh82d21z5cioRyGK9fX8TX55TzLFU4pRimj7xZnha8uavFqRyv/Dtn41f9ByL/AL+v/jWv9rv+R/gbe2yzz+8/Jiv2Q/FgoAKACgAoAKAP090n9mz4AaPplvpVv8GfDMqW8SxrJd6HBNKwAxlndCzt6kkk1+zU8nyunBRVCLt3im/vaufy3W4m4hrVZVHi6ibd9JyS+STSS8kWf+GfvgL/ANES8I/+E1a//G6v+ysr/wCfEP8AwGP+Rn/rDn//AEF1f/Bk/wDMP+GfvgL/ANES8I/+E1a//G6P7Kyv/nxD/wABj/kH+sOf/wDQXV/8GT/zD/hn74C/9ES8I/8AhNWv/wAbo/srK/8AnxD/AMBj/kH+sOf/APQXV/8ABk/8w/4Z++Av/REvCP8A4TVr/wDG6P7Kyv8A58Q/8Bj/AJB/rDn/AP0F1f8AwZP/ADD/AIZ++Av/AERLwj/4TVr/APG6P7Kyv/nxD/wGP+Qf6w5//wBBdX/wZP8AzD/hn74C/wDREvCP/hNWv/xuj+ysr/58Q/8AAY/5B/rDn/8A0F1f/Bk/8w/4Z++Av/REvCP/AITVr/8AG6P7Kyv/AJ8Q/wDAY/5B/rDn/wD0F1f/AAZP/MP+GfvgL/0RLwj/AOE1a/8Axuj+ysr/AOfEP/AY/wCQf6w5/wD9BdX/AMGT/wAw/wCGfvgL/wBES8I/+E1a/wDxuj+ysr/58Q/8Bj/kH+sOf/8AQXV/8GT/AMw/4Z++Av8A0RLwj/4TVr/8bo/srK/+fEP/AAGP+Qf6w5//ANBdX/wZP/M+fP8Agon8HPhb4M+FWj+LfBvgLStHvh4hS0eTSrFLcSRPBM5DLGAGO6JcEjI5x1NfK8WZfgsPgoVaVNRfNbRJaNN9PQ/Q/DjOs1xubVcPia0px5HL3m5WalFaN3a0b9fkfHlfAH7KFABQAUAFABQAjKW6UrJANEZ7mhICvrShdHusdfs7/wDoJpS+FjW5+9nxW0T4p2d7bXGleKL3S7K7fF5Ppku4wvkYO0/w4r+fYJwXNKJ+wYaeEmmmlfpcxf8AhAPiN/0ct4k/8BBT+sU/+fX4ml6f8q/A/Div6DPxoKACgAoAKACgD9dK/eD+PyfTNOvNY1K30nToGluLqdIYIlGS7sQqgfUkUNpK7dkGvRXO/wDin+zrrvgb4jab8PfB+rjxM2rQFtPu7S38lZZUkkinjwXIAjkikBYsBtXccA8eNl+c0sZhalerH2ahq7v7LipRl03i1p301Po834cxGW4ujh6UvayqXWi/5eRk4Thu7uMlv1TT0TK2v/s9+NNGtfDNvaeTqGqeJp7uO2sNOuoLiNRCyDctxFK8bqQxJOQE2HJ640pZvhqtSrf3Y04xk2047826kk18Pzvp544jIMZQw9CWkp1ZzgoxcZfCqdrSjJp3c7W6cuu+lH4ifCDV/ht4Y0LXdb1K1lm1p7sCCyuYbiKNYWRQyzwyOkm7eeh4K457aYTMaWMxM6UE7RUXdpp+9zacskmrct/O5lj8mr5dgaWIqyV5ynGycZL3FB35oyad3O1unL56VNY+H39k+EvC/in+1/M/4SQ3P7j7Pj7P5U/lfe3fPnr0GOnPWt6OJ9tjqmGtbkUXfvzX6eVu+pyYjB/V8qp43mvzyqK1tuRQe/nzdtLdbmz4m/Z68b6R4k8QaTov2a9stC1i504X91fW9mbySDlxDFLKGlcLhike8gMPUVxYfOcNVwtKrUvFzipWScrJ9W0tFfS7stz1MXw3jaOOrYei1JU5cvM3GF3a9kpS1lb7Kbf3mRcfB74h2vhIeNp9CjWx+yJdlf7QgNwts7hFna3D+csRYgCQoFORzyK6v7QwjxPsOb3r8uztzWvy81uXmtra9/I4FlGYSwf1lQ9yzlvHm5U7OShfmcU9OZRt5kPj34W+N/hjcRWXjjS4bG4lLBbX+0YJZlAAO5o43ZkUhgVZgAw+6Tg08Lj8Ljb+xle3WzS7Wu1a6tqt11JxuV47L4RliIqPNZpc0W7NJp2Tbs01Z2s9r3TOfrsPPCgD50/4Kb/8kF0j/sb7f/0luq+S4y/5FcP8a/8ASZH6R4X/API/q/8AXqX/AKXA+I5/+Rdtf+v24/8AQIa/Neh+8dSlSA3fDHwv+JfjWwfVfBvw713V7WOYxSXOmaRNcRrIACULIpAbDKcdcMPWldIDI1DT7/Sb+fStVsZra6tpmiuba4iKSRSKSGRlPKsCCCDyCKYENAHZfAj4YxfFj4h2/hm8uHis44mub54z83lKQML6EsyjPbOe1edmuNeAwbqJa7L1PruCOHI8UZ/DCVG1TScp235VbRebbSv0vc99/sX9nQan/wAKt/4VOP7S+3fY/sn9mj7R5X/P3527d5O35t+7PbGeK+U9pnHJ9Z9t7tr3vpf+W3fpa1vkfuX1PgD6x/Y39n/vefk5eT3+X/n7z3v7O2vNzX6W5tDwH48fDOL4TfES48M2k7yWckS3Ni8h+bymJGG9SGVlz3xnvX1WV414/CKq1rs/VH4Zxtw3HhfPp4Sm26bSlBvfld9H5ppq/W1zhNc40W8IHP2WT/0E13yvZnya3P6QdD064lsv3mk4kIBKsd2fzr8OdOy2P0JVNdyx/ZN9/wBC8v5LWXLL+U19pHufzgV+8n5uFABQAUAFABQB+ulfvB/H51fwU8beH/ht8SNP8feIdKlvl0jzLmytI1BWS7VGMG/LKQgl2MxBzheATXFmWHrYvA1KFJ2c1y37Ju0vny3t52PRyjE4bBZnSxFeLlGD5rK2rjrFa9HJR5v7t9HsegaT+0x4BuNI0mz1r4bHS5NLvNRhA0OeaVWsdQtpIrk7rueRxMrlZEGdhy2ducnx6uR4nnnyVbqUYr3klaVOSlT0jFJrdS62ta+y+ko8U4Nxpurh+WUKrmuVyd1Ui4VbucpNSfuSjbS6d0t3Q034xfC3wk3hXRfD0Ov32m6Rb6xa6tc3tnBbzyR38XlF4UWWRVZFJIVmwSB83PG1XLsdivbyq8sXNU+WzbSdOTnrdRum7bLa+mmvNQzfK8vWEjh+eapVKspOSjFtVIQh7qUpWaUXu97O+tlzPxL8W+ANR8E+G/A/gKbWJ49ElvnuLvV7KKAzGd42BVI5ZNuAhBBY/U547MJh8YsZUxFdRXNGKSi27crle7aX83b/ADfnZhisueWUcJhXN8k6km5JRvzxppWSlLbkd9ezvrZaPhvxz8JdZ8D+HvDPxMfxDaz+GL64ktX0SygnS9glkWQxOZZozCwYN84DjDfd45mrh8fRx08RheV88YpqTas43s1ZO6s9VptuOhicrxOVRwWNc48k5STgoyupqCcWpSjZrkupXe7vHQ29F+P/AIM1PWvEOufEK3v7mz1nX7vUn8LHRbS9tJvOHAWeV1ls5BwDNEGYhV44xXBUyfE0sJSo4drmhBRU+aUZJrrZJqSvrySsr311PYpcRYKtmdfE4pS9nUqc7p8kJxlH+VuTThK3u+0jd26aEXin9oHRtf8AAQs7C7ubHVX8N2ujXNlF4T00xyxwpHGWOoH/AEnayRg+Xt4bgPgAVtSyqpTxznJKUHUdS/PNNNvmtyL3G1LrfbdXOeef0Z5ZGnFuNSNL2VlTptNaxv7V/vFeLs0k9dpK5yfxW8W+C/iB4u8Q+NrFtUhub/Uo5NNt5baPy/JKkSGVhISrghNoUMCC2SMDPZl+GxODw9KjKzS5uZ3fV3VtNd3e9ulrnl5njMHmGIqV1zJ2pqKsre7FRlza6be7a9+tjHvYfh6tzqg03UdZaFbdDorT2UStJLlN4nAkIRceZgqWJIXIGTjpi8Zyx5lG93zav4dbW01e107LfXa/HJZf7SVpS5eVcuivz2jdPXSN+azV3bl01dsauk4z50/4Kb/8kF0j/sb7f/0luq+S4y/5FcP8a/8ASZH6R4X/API/q/8AXqX/AKXA+IZpYzoNtCJFLrdzsy55AKxYOPfB/I1+a9D946lSkBu+GPih8S/BVg+leDfiJrukWskxlkttM1ea3jaQgAuVRgC2FUZ64UelKyYGRqGoX+rX8+q6rfTXN1czNLc3NxKXklkYks7MeWYkkknkk0wIaAOy+BHxOi+E/wAQ7fxNeW7y2ckTW18kY+bymIOV9SGVTjvjHevOzXBPH4R009d16n13BPEkeF8+hi6ibptOM7b8rtqvNNJ262se/wD9ufs3fb/+Fn/8LPj/ALS+3/bftv8AaX+lbP8An28rG7ydvy+Xtzjvnmvk/ZZzyfVvZe7a1raf4r7X63v+B+5/XfD32/8AbH19e15+fm5/3lv+ffJbm9nb3eTlvbrfU8A+O/xOj+LHxDuPE1nA8VnHEttYpIPm8pSTlvQlmY47Zx2r6zKsE8Bg1Te+79T8L424jjxRn88XTTVNJRhfflV9X5ttu3S9jg9c/wCQLef9esn/AKCa9CXws+TW5/S74dtEkRtsuABx82MivxG2jufdK9zV22f96T86yvDzK5ZH8y9fuh8EFABQAUAAz3NABQB+nuk/tJ/s/wCs6ZBqtv8AGbwzElxEsix3etwQyqCM4ZHcMjeoIBFfs1POMqqQUlWir95JP7m7n8t1uGeIaNWVN4So2nbSEmvk0mmvNFn/AIaB+Av/AEW3wj/4Utr/APHKv+1cr/5/w/8AAo/5mf8Aq9n/AP0CVf8AwXP/ACD/AIaB+Av/AEW3wj/4Utr/APHKP7Vyv/n/AA/8Cj/mH+r2f/8AQJV/8Fz/AMg/4aB+Av8A0W3wj/4Utr/8co/tXK/+f8P/AAKP+Yf6vZ//ANAlX/wXP/IP+GgfgL/0W3wj/wCFLa//AByj+1cr/wCf8P8AwKP+Yf6vZ/8A9AlX/wAFz/yD/hoH4C/9Ft8I/wDhS2v/AMco/tXK/wDn/D/wKP8AmH+r2f8A/QJV/wDBc/8AIP8AhoH4C/8ARbfCP/hS2v8A8co/tXK/+f8AD/wKP+Yf6vZ//wBAlX/wXP8AyD/hoH4C/wDRbfCP/hS2v/xyj+1cr/5/w/8AAo/5h/q9n/8A0CVf/Bc/8g/4aB+Av/RbfCP/AIUtr/8AHKP7Vyv/AJ/w/wDAo/5h/q9n/wD0CVf/AAXP/IP+GgfgL/0W3wj/AOFLa/8Axyj+1cr/AOf8P/Ao/wCYf6vZ/wD9AlX/AMFz/wAg/wCGgfgL/wBFt8I/+FLa/wDxyj+1cr/5/wAP/Ao/5h/q9n//AECVf/Bc/wDI+fP+Cifxj+FvjP4V6P4S8G+PdK1i+PiFLt49KvkuFjiSCZCWaMkKd0q4BOTzjoa+V4szDBYjBQpUqik+a+jT0Sa6ep+h+HGS5rgs2q4jE0ZQjyOPvJxu3KL0Ts3on6fM+PK+AP2UKACgAPHNAAOeaACgABB6UbgFAFXXP+QLecf8usn/AKCamXwsa3P6V9FceSBDMMqBuU+lfiE5K2h95FO5u+fa/wCRWVy+U/ExP+CEX/BWg/e/ZCmH/c9+H/8A5YV+4e3pnwXIx3/DiD/grJ/0aNL/AOF34f8A/lhR7emHJIP+HEH/AAVk/wCjRpf/AAu/D/8A8sKPb0w5JB/w4g/4Kyf9GjS/+F34f/8AlhR7emHJIP8AhxB/wVk/6NGl/wDC78P/APywo9vTDkkH/DiD/grJ/wBGjS/+F34f/wDlhR7emHJIP+HEH/BWT/o0aX/wu/D/AP8ALCj29MOSQf8ADiD/AIKyf9GjS/8Ahd+H/wD5YUe3phySD/hxB/wVk/6NGl/8Lvw//wDLCj29MOSQf8OIP+Csv/Ro0v8A4Xfh/wD+WFHt6YckgH/BCD/grL/0aLL/AOF34f8A/lhR7emHJIP+HEH/AAVk/wCjRpf/AAu/D/8A8sKPb0w5JB/w4g/4Kyf9GjS/+F34f/8AlhR7emHJIP8AhxB/wVk/6NGl/wDC78P/APywo9vTDkkH/DiD/grJ/wBGjS/+F34f/wDlhR7emHJIP+HEH/BWX/o0WX/wu/D/AP8ALCj29MOSQf8ADiD/AIKyf9GjS/8Ahd+H/wD5YUe3phySD/hxB/wVk/6NGl/8Lvw//wDLCj29MOSQf8OIP+Csn/Ro0v8A4Xfh/wD+WFHt6fcOSQf8OIP+Csn/AEaNL/4Xfh//AOWFHt6fcOSQf8OH/wDgrLn/AJNHl/8AC68P/wDywo9vT7hySD/hxB/wVk/6NGl/8Lvw/wD/ACwp+3p9w5JB/wAOIP8AgrJ/0aNL/wCF34f/APlhS9tS7hySGn/ghD/wVp3cfsiyY/7Hvw//APJ9J1qbDkYn/Dh//grQD8v7IsmO/wDxXfh//wCWFL21PuHIx4/4IQf8FZe/7I8v/hdeH/8A5YU1WpoOSRz3xc/4Iuf8FOPhZ8KPE/xO8ffsuyafoXhzw9e6prV+fGehy/ZrS3geWaXZFfM77URm2orMcYAJwKbrU2rIFBpn7UKfFEduZ4bayit0cK8rtypPsB0r8ExVTF2alaPZ7/gfomHjh21u2ankeJ/7lt/3zXm/V8x/5/8A/kp1c+E/59v7z6kr9/PzYKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKAPFv8AgpIcf8E7Pj4T/wBEW8U/+mi6prcDyLwWYPEWl2PiHw9fSJbTxrMomjYb1Izyrcg/Wvx6pC6utD7pe5Jxkdf/AKR/ejrOzFp2Z9L1+yHwwUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAeLf8ABSP/AJR2/Hv/ALIt4p/9NF1TW4PY8og/5JxJ/wBeg/lX47V/g/I+6p/x/mcPXkHtH//Z"},32307:function(e,t,n){n.d(t,{Z:function(){return i}});let i=n.p+"assets/images/budgie-add-user-dialog-4a76a1d5811db1f477173c3c1fabb43a.jpg"},7325:function(e,t,n){n.d(t,{Z:function(){return i}});let i=n.p+"assets/images/budgie-arrange-displays-c6b7dca4d418eed7a79be42eabbab2d1.png"},99441:function(e,t,n){n.d(t,{Z:function(){return i}});let i=n.p+"assets/images/budgie-control-center-add-input-method-09685f6a24a0012c3d954350511f449e.jpg"},73453:function(e,t,n){n.d(t,{Z:function(){return i}});let i=n.p+"assets/images/budgie-control-center-background-08d0ef91e1aafde95ab900656618ae4b.jpg"},84593:function(e,t,n){n.d(t,{Z:function(){return i}});let i=n.p+"assets/images/budgie-control-center-date-time-2e2a41c3504dc830843f938bbd142981.jpg"},21688:function(e,t,n){n.d(t,{Z:function(){return i}});let i=n.p+"assets/images/budgie-control-center-default-applications-ba0f2bc0472afc29f3a3bfd62fff4019.jpg"},38122:function(e,t,n){n.d(t,{Z:function(){return i}});let i=n.p+"assets/images/budgie-control-center-keyboard-shortcuts-location-51ebaf6cc1a0f2d2581a35cf1b9a7116.jpg"},58019:function(e,t,n){n.d(t,{Z:function(){return i}});let i=n.p+"assets/images/budgie-control-center-keyboard-shortcuts-popup-e16d754e17feaf2519cfb56d76b95e6c.jpg"},25426:function(e,t,n){n.d(t,{Z:function(){return i}});let i=n.p+"assets/images/budgie-control-center-keyboard-c35874adf88277c7f6368628e9faab58.jpg"},74926:function(e,t,n){n.d(t,{Z:function(){return i}});let i=n.p+"assets/images/budgie-control-center-panel-add-workspace-switcher-4756fd9ee280619d8b3250bc42817117.jpg"},38407:function(e,t,n){n.d(t,{Z:function(){return i}});let i=n.p+"assets/images/budgie-desktop-blank-space-right-click-c41f4ca4d33cfcdbea6b0db8bf37e069.jpg"},88405:function(e,t,n){n.d(t,{Z:function(){return i}});let i=n.p+"assets/images/budgie-desktop-settings-bottom-panel-clock-62957b69b2028aed4498146d258826cf.jpg"},94683:function(e,t,n){n.d(t,{Z:function(){return i}});let i=n.p+"assets/images/budgie-desktop-settings-bottom-panel-4e14285d1a0df0b2b7f8ac1090064038.jpg"},81215:function(e,t,n){n.d(t,{Z:function(){return i}});let i=n.p+"assets/images/budgie-desktop-settings-desktop-section-dbeac4ca05a68e1d4aa726cc015b067c.jpg"},94631:function(e,t,n){n.d(t,{Z:function(){return i}});let i=n.p+"assets/images/budgie-display-confirm-a76d736f32f356662af758fb94f6aafc.jpg"},11126:function(e,t,n){n.d(t,{Z:function(){return i}});let i=n.p+"assets/images/budgie-displays-overview-6bbedd44653525b6c3aba838cf30349d.jpg"},92767:function(e,t,n){n.d(t,{Z:function(){return i}});let i=n.p+"assets/images/budgie-individual-display-settings-2d5ef78b2175bb97fc2e729a90ee5774.jpg"},67967:function(e,t,n){n.d(t,{Z:function(){return i}});let i=n.p+"assets/images/budgie-input-sources-multiple-dd4489d88d1d5a55afa2528664e5f908.jpg"},47782:function(e,t,n){n.d(t,{Z:function(){return i}});let i=n.p+"assets/images/budgie-keep-files-prompt-5b7532e8ea1cf62ad466bf6d2eec702f.jpg"},9473:function(e,t,n){n.d(t,{Z:function(){return i}});let i=n.p+"assets/images/budgie-keyboard-layout-applet-ibus-306635b913e0265ce1f47e1098002e0c.jpg"},21608:function(e,t,n){n.d(t,{Z:function(){return i}});let i=n.p+"assets/images/budgie-keyboard-layout-switcher-f8ab66e42e1f0f982ecb691869490507.jpg"},540:function(e,t,n){n.d(t,{Z:function(){return i}});let i=n.p+"assets/images/budgie-mouse-settings-4652630acfe19020bb0b29d0155bf012.jpg"},23629:function(e,t,n){n.d(t,{Z:function(){return i}});let i=n.p+"assets/images/budgie-multiple-user-settings-e0957ed6affeef47726232f6fa2c22a0.jpg"},91585:function(e,t,n){n.d(t,{Z:function(){return i}});let i=n.p+"assets/images/budgie-nemo-desktop-folder-898d96b13673ff56b0d1e9bed198808e.jpg"},3268:function(e,t,n){n.d(t,{Z:function(){return i}});let i=n.p+"assets/images/budgie-network-authentication-976c81d75e055000d1146dfd8d26f45f.jpg"},48117:function(e,t,n){n.d(t,{Z:function(){return i}});let i=n.p+"assets/images/budgie-network-hidden-0567bce591f6219bb35378032a3db3e9.jpg"},74959:function(e,t,n){n.d(t,{Z:function(){return i}});let i=n.p+"assets/images/budgie-network-overview-56ca62f1ff834202f557968bddfe6ae8.jpg"},40530:function(e,t,n){n.d(t,{Z:function(){return i}});let i=n.p+"assets/images/budgie-open-with-other-deae0e7e2f5b6a1afc5f79813a668609.jpg"},58866:function(e,t,n){n.d(t,{Z:function(){return i}});let i=n.p+"assets/images/budgie-open-with-196e12963d47d150975ab06f51c54b28.jpg"},47301:function(e,t,n){n.d(t,{Z:function(){return i}});let i=n.p+"assets/images/budgie-panel-with-workspace-switcher-f5efe929dd564a1560a58ce5c108e7b1.jpg"},92766:function(e,t,n){n.d(t,{Z:function(){return i}});let i=n.p+"assets/images/budgie-region-and-languages-335dc9a1b149e6ee8b31960b2786e80f.jpg"},37599:function(e,t,n){n.d(t,{Z:function(){return i}});let i=n.p+"assets/images/budgie-selecting-language-search-0ef7ad4ad481eba3511f505c0d48dd64.png"},35474:function(e,t,n){n.d(t,{Z:function(){return i}});let i=n.p+"assets/images/budgie-selecting-language-1b584e15820bf752584efc6dd7b15aeb.png"},36862:function(e,t,n){n.d(t,{Z:function(){return i}});let i=n.p+"assets/images/budgie-single-user-settings-39514927d322f1eae5e257384a82106b.jpg"},30695:function(e,t,n){n.d(t,{Z:function(){return i}});let i=n.p+"assets/images/budgie-sound-settings-83f0c82715b44956569594953085dad1.jpg"},88236:function(e,t,n){n.d(t,{Z:function(){return i}});let i=n.p+"assets/images/budgie-system-time-and-date-popup-cdcd8a6af79f4efe8cc7d4620468d2a4.jpg"},47523:function(e,t,n){n.d(t,{Z:function(){return i}});let i=n.p+"assets/images/budgie-touchpad-settings-ee9690f056a1ed39ebddd5cd61936608.jpg"},109:function(e,t,n){n.d(t,{Z:function(){return i}});let i=n.p+"assets/images/budgie-volume-control-cf7733bc82bb3684cc809cf0ec743cef.jpg"},54277:function(e,t,n){n.d(t,{Z:function(){return i}});let i=n.p+"assets/images/budgie-workspace-context-menu-d7ddb2b7d5c1ae6ae9e4b0c0ca4ed11f.jpg"},62719:function(e,t,n){n.d(t,{Z:function(){return i}});let i=n.p+"assets/images/raven-sound-applet-84fdb76d11a39ca554f2bc756205d35e.jpg"},50065:function(e,t,n){n.d(t,{Z:function(){return d},a:function(){return a}});var i=n(67294);let o={},s=i.createContext(o);function a(e){let t=i.useContext(s);return i.useMemo(function(){return"function"==typeof e?e(t):{...t,...e}},[t,e])}function d(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:a(e.components),i.createElement(s.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/c9c1a3f4.92bf0225.js b/assets/js/c9c1a3f4.92bf0225.js deleted file mode 100644 index 457e3163a..000000000 --- a/assets/js/c9c1a3f4.92bf0225.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[6121],{24080:(e,t,i)=>{i.r(t),i.d(t,{assets:()=>r,contentTitle:()=>a,default:()=>c,frontMatter:()=>o,metadata:()=>d,toc:()=>h});var n=i(85893),s=i(11151);const o={title:"Configuration",summary:"Help for configuring the Budgie desktop on Solus"},a="Configuration",d={id:"user/editions/budgie/configuration",title:"Configuration",description:"Date and Time",source:"@site/docs/user/editions/budgie/configuration.md",sourceDirName:"user/editions/budgie",slug:"/user/editions/budgie/configuration",permalink:"/docs/user/editions/budgie/configuration",draft:!1,unlisted:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/editions/budgie/configuration.md",tags:[],version:"current",lastUpdatedAt:1732716912e3,frontMatter:{title:"Configuration",summary:"Help for configuring the Budgie desktop on Solus"},sidebar:"userSidebar",previous:{title:"Budgie",permalink:"/docs/user/editions/budgie/"},next:{title:"Tips and Tricks",permalink:"/docs/user/editions/budgie/tips-and-tricks"}},r={},h=[{value:"Date and Time",id:"date-and-time",level:2},{value:"Default Applications",id:"default-applications",level:2},{value:"Displays",id:"displays",level:2},{value:"Keyboard Layout",id:"keyboard-layout",level:2},{value:"Keyboard Layout Indicator",id:"keyboard-layout-indicator",level:3},{value:"IBus",id:"ibus",level:3},{value:"Language",id:"language",level:2},{value:"Mouse and Touchpad",id:"mouse-and-touchpad",level:2},{value:"Mouse",id:"mouse",level:3},{value:"Touchpad",id:"touchpad",level:3},{value:"Testing",id:"testing",level:3},{value:"Network",id:"network",level:2},{value:"Non-Hidden Network",id:"non-hidden-network",level:3},{value:"Hidden Network",id:"hidden-network",level:3},{value:"Sound and Sound Devices",id:"sound-and-sound-devices",level:2},{value:"Settings",id:"settings",level:3},{value:"Users",id:"users",level:2},{value:"Adding a User",id:"adding-a-user",level:3},{value:"Removing a User",id:"removing-a-user",level:3},{value:"Desktop Background",id:"desktop-background",level:2},{value:"Desktop Icons",id:"desktop-icons",level:2},{value:"Workspaces",id:"workspaces",level:2},{value:"Keyboard Shortcuts",id:"keyboard-shortcuts",level:3},{value:"Workspaces Configuration",id:"workspaces-configuration",level:3}];function l(e){const t={a:"a",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",header:"header",img:"img",li:"li",p:"p",ul:"ul",...(0,s.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.header,{children:(0,n.jsx)(t.h1,{id:"configuration",children:"Configuration"})}),"\n",(0,n.jsx)(t.h1,{id:"system",children:"System"}),"\n",(0,n.jsx)(t.h2,{id:"date-and-time",children:"Date and Time"}),"\n",(0,n.jsx)(t.p,{children:'In Budgie, the easiest way to access the date and time settings is by left clicking on the time in the bottom panel and clicking on "System time and date settings".'}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.img,{alt:"Budgie Date and Time Right-Click",src:i(87872).Z+"",width:"289",height:"162"})}),"\n",(0,n.jsx)(t.p,{children:'Alternatively, you can open the Budgie Control Center, and scroll the left-hand sidebar down to the bottom to find "Date & Time".'}),"\n",(0,n.jsx)(t.p,{children:'You will be presented with the following window. From here, you can enable / disable automatic date & time, automatic time zone changing, and change between AM/PM and 24-hour time formats. Note that changing the system date & time and time zone information requires clicking the "Unlock" button at the top of the window, and entering your password.'}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.img,{alt:"Budgie Date and Time",src:i(73249).Z+"",width:"996",height:"702"})}),"\n",(0,n.jsx)(t.p,{children:'If you wish to change how the time is displayed in the bottom panel, open Budgie Desktop Settings from the Budgie Menu, choose the Bottom Panel from the left-hand sidebar, choose "Clock" from the list of applets in the middle, then adjust your desired settings on the right-hand side.'}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.img,{alt:"Budgie Clock Applet",src:i(65486).Z+"",width:"761",height:"609"})}),"\n",(0,n.jsxs)(t.p,{children:["If you want to set a custom date & time format, the ",(0,n.jsx)(t.a,{href:"https://pubs.opengroup.org/onlinepubs/9699919799/utilities/date.html",children:'"conversion specifications" referenced by the POSIX standards'})," list the options that can be entered."]}),"\n",(0,n.jsx)(t.h2,{id:"default-applications",children:"Default Applications"}),"\n",(0,n.jsx)(t.p,{children:'You can configure default applications in Budgie by opening the Budgie Control Center, and scrolling the left-hand sidebar down to "Default Applications".'}),"\n",(0,n.jsx)(t.p,{children:"The drop-down boxes here enable choosing the default application for each category of file. For most categories, you will need to have already installed alternative applications before you can change the default settings. For instance, if you wish to change the default video player from Celluloid to VLC, then you must first install VLC (available in the Software Center)."}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.img,{alt:"Budgie Default Applications",src:i(74063).Z+"",width:"991",height:"697"})}),"\n",(0,n.jsx)(t.p,{children:'You can specify default applications for individual file types by right-clicking on a file and clicking on "Open With" from the popup menu, then choosing "Other Application".'}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.img,{alt:"Budgie Context Menu",src:i(45728).Z+"",width:"879",height:"579"})}),"\n",(0,n.jsx)(t.p,{children:'Next, select the application you wish to use from the list, then click "Set as default" below the list. Finish by clicking "OK". In the future, all files with the same file type will open with the chosen application.'}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.img,{alt:"Budgie Application Selection",src:i(23242).Z+"",width:"914",height:"618"})}),"\n",(0,n.jsx)(t.h2,{id:"displays",children:"Displays"}),"\n",(0,n.jsx)(t.p,{children:'You can configure your display(s) in Budgie by opening the Budgie Menu and then clicking on "Displays" in the System Settings category.'}),"\n",(0,n.jsx)(t.p,{children:"You will then be shown the following window."}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.img,{alt:"Budgie Displays Overview",src:i(77218).Z+"",width:"742",height:"345"})}),"\n",(0,n.jsx)(t.p,{children:"Click on the individual display you wish to configure. You will now be able to select if you wish to use this monitor as the primary or secondary display, mirror it with another display, or turn it off. This window also gives you the size and aspect ratio, ability to rotate the display, and ability to change the resolution."}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.img,{alt:"Budgie Individual Display Settings",src:i(27773).Z+"",width:"741",height:"365"})}),"\n",(0,n.jsx)(t.p,{children:"Going back to the Displays section, you also have the option to arrange your displays. Click the \u201cArrange Combined Displays\u201d button and then drag your displays so they are arranged to your liking."}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.img,{alt:"Budgie Arrange Displays",src:i(26715).Z+"",width:"742",height:"381"})}),"\n",(0,n.jsx)(t.p,{children:'Click "Apply" once you are happy with your changes. You will be shown a message asking if the display looks OK, if it does, click on "Keep This Configuration".'}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.img,{alt:"Budgie Confirm Display Settings",src:i(42677).Z+"",width:"466",height:"114"})}),"\n",(0,n.jsx)(t.h2,{id:"keyboard-layout",children:"Keyboard Layout"}),"\n",(0,n.jsx)(t.p,{children:'Using Budgie, you can change your keyboard layout in the Budgie Control Center. Click on the Budgie Menu, click the System Settings icon at the bottom or "Budgie Control Center" in the application list, and then click on "Keyboard" in the System Settings category.'}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.img,{alt:"Budgie Keyboard Settings",src:i(12486).Z+"",width:"988",height:"695"})}),"\n",(0,n.jsx)(t.p,{children:'Click the "+" button to add an input source (keyboard layout). You will be shown the following dialog.'}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.img,{alt:"Budgie Add Input Source",src:i(93747).Z+"",width:"988",height:"696"})}),"\n",(0,n.jsx)(t.p,{children:'Here you can select the language and then keyboard layout within each language section. If it does not appear in this list, click the "\u22ee" button (three vertical dots). This will enable you to search for the keyboard layout you wish to use.'}),"\n",(0,n.jsx)(t.p,{children:'After choosing the keyboard layout, click the "Add" button at the top of the window. You will be brought back to the following dialog with your new keyboard layout. In the image below, we are now using English (US) and English (UK) layouts.'}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.img,{alt:"Budgie New Layout Added",src:i(63730).Z+"",width:"987",height:"697"})}),"\n",(0,n.jsx)(t.p,{children:'You can remove a keyboard layout by clicking on one of the items, for instance English (UK), then clicking the "\u22ee" button, then choosing "Remove".'}),"\n",(0,n.jsxs)(t.p,{children:["If you wish to use multiple keyboard layouts, you can switch between them by using the keyboard shortcut ",(0,n.jsx)(t.code,{children:"Super + Shift + Space"}),", or by adding the Keyboard Layout Indicator applet to your Budgie panel."]}),"\n",(0,n.jsx)(t.h3,{id:"keyboard-layout-indicator",children:"Keyboard Layout Indicator"}),"\n",(0,n.jsx)(t.p,{children:'To add the Keyboard Layout Indicator to your panel, open the Budgie Desktop Settings app from the Budgie Menu, then click "Bottom Panel" on the left-hand sidebar.'}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.img,{alt:"Budgie Bottom Panel Settings",src:i(65486).Z+"",width:"761",height:"609"})}),"\n",(0,n.jsx)(t.p,{children:'On the right side of the window, click the "+" button next to "Add applet".'}),"\n",(0,n.jsx)(t.p,{children:'Find the Keyboard Layout Indicator entry and select it, then click "Add" at the top of the window. This will add the Keyboard Layout Indicator (to the center section by default), as shown below.'}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.img,{alt:"Budgie Keyboard Layout Applet",src:i(85522).Z+"",width:"1850",height:"159"})}),"\n",(0,n.jsx)(t.h3,{id:"ibus",children:"IBus"}),"\n",(0,n.jsxs)(t.p,{children:["Budgie comes with IBus ready to go straight out of the box. If you need an additional IBus IME see: ",(0,n.jsx)(t.a,{href:"/docs/user/software/localization/ibus/",children:"IBus"})]}),"\n",(0,n.jsxs)(t.p,{children:["You will now be able to switch between your keyboard layouts by using the keyboard shortcut ",(0,n.jsx)(t.code,{children:"Super + Shift + Space"})," or by using the Keyboard Layout Indicator applet."]}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.img,{alt:"Budgie Keyboard Layout Applet: IBus",src:i(38896).Z+"",width:"169",height:"140"})}),"\n",(0,n.jsx)(t.h2,{id:"language",children:"Language"}),"\n",(0,n.jsx)(t.p,{children:'You can change your language in Budgie by opening the Budgie Menu and then clicking on "Region and Language" in the System Settings category.'}),"\n",(0,n.jsx)(t.p,{children:"You will now be shown the following window. This window allows you to change your language, formatting for dates and times and the language of your keyboard."}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.img,{alt:"Budgie Region and Languages",src:i(21178).Z+"",width:"742",height:"345"})}),"\n",(0,n.jsx)(t.p,{children:'Start by clicking "Language". This brings up a selection of languages to chose from.'}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.img,{alt:"Budgie Selecting Language",src:i(34067).Z+"",width:"742",height:"489"})}),"\n",(0,n.jsx)(t.p,{children:"If your language does not appear in the list, click the \u22ee button at the bottom (three vertical dots) to show all the available languages. You can use the search box to go directly to your choice or scroll down the list."}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.img,{alt:"Budgie Language Search",src:i(74738).Z+"",width:"742",height:"489"})}),"\n",(0,n.jsxs)(t.p,{children:['Once you have selected the language you wish to use, click "Done". You ',(0,n.jsx)(t.em,{children:"may"})," need to logout and login to your computer for it to take affect."]}),"\n",(0,n.jsx)(t.h2,{id:"mouse-and-touchpad",children:"Mouse and Touchpad"}),"\n",(0,n.jsx)(t.p,{children:'You can configure the settings of your mouse and / or touchpad by opening the Budgie Menu and then clicking on "Mouse and Touchpad" in the System Settings category. You will see either settings for your mouse or trackpad, depending on the device.'}),"\n",(0,n.jsx)(t.h3,{id:"mouse",children:"Mouse"}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.img,{alt:"Budgie Mouse Settings",src:i(56272).Z+"",width:"742",height:"585"})}),"\n",(0,n.jsx)(t.p,{children:"For mice, you can set:"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsx)(t.li,{children:"The primary button (usually left click) to be left or right."}),"\n",(0,n.jsx)(t.li,{children:"Mouse speed."}),"\n",(0,n.jsx)(t.li,{children:'Enabling / disabling "natural scrolling" (reversed scrolling direction).'}),"\n"]}),"\n",(0,n.jsx)(t.h3,{id:"touchpad",children:"Touchpad"}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.img,{alt:"Budgie Touchpad Settings",src:i(7722).Z+"",width:"742",height:"585"})}),"\n",(0,n.jsx)(t.p,{children:"For touchpads, you can set:"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsx)(t.li,{children:"The primary button (usually left click) to be left or right."}),"\n",(0,n.jsx)(t.li,{children:"Enabling / disabling of the touchpad."}),"\n",(0,n.jsx)(t.li,{children:'Enabling / disabling "natural scrolling" (reversed scrolling direction).'}),"\n",(0,n.jsx)(t.li,{children:"Touchpad speed."}),"\n",(0,n.jsx)(t.li,{children:"Enabling / disabling of Tap to Click."}),"\n"]}),"\n",(0,n.jsx)(t.h3,{id:"testing",children:"Testing"}),"\n",(0,n.jsx)(t.p,{children:'You can test your settings by clicking the "Test Your Settings" button in the top right of the window.'}),"\n",(0,n.jsx)(t.h2,{id:"network",children:"Network"}),"\n",(0,n.jsx)(t.p,{children:'To configure your network settings in Budgie, start by opening the Budgie Menu and then click on "Network" in the System Settings category.'}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.img,{alt:"Budgie Network Overview",src:i(18399).Z+"",width:"742",height:"491"})}),"\n",(0,n.jsx)(t.p,{children:"To configure wireless, go to the Wi-Fi section. If your wireless is currently turned off, click the toggle button, leave the Network section, and go back in."}),"\n",(0,n.jsx)(t.h3,{id:"non-hidden-network",children:"Non-Hidden Network"}),"\n",(0,n.jsx)(t.p,{children:"In the WiFi section of the Network settings window, click the access point you wish to connect to."}),"\n",(0,n.jsx)(t.p,{children:'You may now be prompted to authenticate with the network. Type in your password and then click "Connect".'}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.img,{alt:"Budgie Network Authentication",src:i(29656).Z+"",width:"742",height:"491"})}),"\n",(0,n.jsx)(t.p,{children:"If your password is correct, you will now be authenticated with the network."}),"\n",(0,n.jsx)(t.h3,{id:"hidden-network",children:"Hidden Network"}),"\n",(0,n.jsx)(t.p,{children:"If you wish to connect to a hidden network, click \u201cConnect to Hidden Network...\u201d in the WiFi section of the Network settings window. It will show the following dialog, where you type the network name and type of security (if any)."}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.img,{alt:"Budgie Hidden Network",src:i(35320).Z+"",width:"741",height:"490"})}),"\n",(0,n.jsx)(t.p,{children:"If the network is found and has a password, you will be prompted to authenticate with the network."}),"\n",(0,n.jsx)(t.h2,{id:"sound-and-sound-devices",children:"Sound and Sound Devices"}),"\n",(0,n.jsx)(t.p,{children:"To change the volume in Budgie, simply left click on the speaker icon in the system tray and drag the slider or use the plus and minus icons to reach your desired level."}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.img,{alt:"Budgie Volume Control",src:i(48355).Z+"",width:"117",height:"249"})}),"\n",(0,n.jsx)(t.h3,{id:"settings",children:"Settings"}),"\n",(0,n.jsxs)(t.p,{children:["You can access sound settings via the Sound applet in Raven, the Notification and Widget Center. Open Raven, either by clicking on its icon in the far right of the system tray or using the keyboard shortcut ",(0,n.jsx)(t.code,{children:"Super + A"}),". The Sound applet allows you to enable, disable and alter input and output methods as well as providing a simple volume slider."]}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.img,{alt:"Raven Sound Applet",src:i(11145).Z+"",width:"299",height:"235"})}),"\n",(0,n.jsx)(t.p,{children:'You can access further sound settings, including individual application volume controls, and a simple speaker test by opening the Budgie Menu and then clicking on "Sound" in the System Settings category.'}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.img,{alt:"Budgie Sound Settings",src:i(20315).Z+"",width:"742",height:"495"})}),"\n",(0,n.jsx)(t.h2,{id:"users",children:"Users"}),"\n",(0,n.jsx)(t.p,{children:'To add and remove users with Budgie, start by opening the Budgie Menu and then click on "Users" in the System Settings category.'}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.img,{alt:"Budgie User Settings",src:i(79964).Z+"",width:"742",height:"453"})}),"\n",(0,n.jsx)(t.p,{children:'To manage your own or other accounts, you first need to authenticate. Click the "Unlock" button in the top right corner and type your password. Note that you are required to be an administrator. If you\'re the only user on the system, then your account is an administrator by default.'}),"\n",(0,n.jsx)(t.p,{children:'In the event the password provided is correct, the "Unlock" button will change to "Add User..."'}),"\n",(0,n.jsx)(t.h3,{id:"adding-a-user",children:"Adding a User"}),"\n",(0,n.jsx)(t.p,{children:'To add a user, click the "Add User..." button in the top right corner of the Users window.'}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.img,{alt:"Budgie Add User Button",src:i(11494).Z+"",width:"225",height:"65"})}),"\n",(0,n.jsx)(t.p,{children:"This will open the Add User window (shown below)."}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.img,{alt:"Budgie Add User Dialog",src:i(38645).Z+"",width:"466",height:"546"})}),"\n",(0,n.jsx)(t.p,{children:'Fill in the required items and then finish adding the new user by clicking "Add" in the top right corner.'}),"\n",(0,n.jsx)(t.h3,{id:"removing-a-user",children:"Removing a User"}),"\n",(0,n.jsx)(t.p,{children:'To remove a user, open the Users window and then click on the user you wish to remove. Now click on the red "Remove User..." button in the bottom right corner.'}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.img,{alt:"Budgie User List",src:i(86781).Z+"",width:"742",height:"592"})}),"\n",(0,n.jsx)(t.p,{children:"Upon clicking to remove the user, you will be given the option to keep their files, delete their files, or cancel the removal of the user\u2019s account."}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.img,{alt:"Budgie Keep Files Prompt",src:i(86420).Z+"",width:"508",height:"162"})}),"\n",(0,n.jsx)(t.h1,{id:"user-interface",children:"User Interface"}),"\n",(0,n.jsx)(t.h2,{id:"desktop-background",children:"Desktop Background"}),"\n",(0,n.jsx)(t.p,{children:'To change the desktop background in Budgie, open the Budgie Control Center by selecting "System Settings" from either the Budgie Menu, or by right-clicking on a blank spot on the desktop.'}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.img,{alt:"Budgie Desktop Right-Click Menu",src:i(99786).Z+"",width:"390",height:"253"})}),"\n",(0,n.jsx)(t.p,{children:'Once the Budgie Control Center is open, click "Background" on the left-hand sidebar.'}),"\n",(0,n.jsx)(t.p,{children:'Click one of the images displayed on the right to choose a pre-installed background image, or click "Add Picture..." in the headerbar to add one of your own image files to the available options.'}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.img,{alt:"Budgie Control Center Background Section",src:i(17750).Z+"",width:"1017",height:"715"})}),"\n",(0,n.jsx)(t.h2,{id:"desktop-icons",children:"Desktop Icons"}),"\n",(0,n.jsx)(t.p,{children:'Desktop Icons are enabled by default. To disable them, open the Budgie Desktop Settings app by selecting "Budgie Desktop Settings" from the Budgie Menu, or from the pop-up menu when right-clicking on a blank spot on the desktop.'}),"\n",(0,n.jsx)(t.p,{children:'In the Budgie Desktop Settings app, click "Desktop" in the left-hand sidebar - Desktop Icons is the first toggle switch on that screen.'}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.img,{alt:"Budgie Desktop Icons",src:i(33784).Z+"",width:"781",height:"627"})}),"\n",(0,n.jsx)(t.p,{children:"To place files on your desktop, you can either drag them directly onto the Desktop, or move the files you want to the Desktop folder within the Nemo file manager app (as shown in the image below)."}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.img,{alt:"Budgie Desktop Folder",src:i(50045).Z+"",width:"820",height:"602"})}),"\n",(0,n.jsx)(t.h2,{id:"workspaces",children:"Workspaces"}),"\n",(0,n.jsx)(t.p,{children:"Budgie enables the switching of workspaces with the Workspace Switcher. You can enable workspaces in Budgie by adding the Workspace Switcher applet to your panel."}),"\n",(0,n.jsx)(t.p,{children:'To add this applet, open the Budgie Control Center by selecting "System Settings" from either the Budgie Menu, or by right-clicking on a blank spot on the desktop. Once in the Budgie Control Center, in the left-hand sidebar, select the panel to which you want to add the Workspace Switcher (choose the default Bottom Panel if you don\'t want to add more panels at this time).'}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.img,{alt:"Budgie Desktop Settings Panel Section",src:i(61881).Z+"",width:"763",height:"611"})}),"\n",(0,n.jsx)(t.p,{children:'Click the + button next to "Add applet" on the right side of the window. This will open the list of available applets - scroll down until you find "Workspace Switcher", select it, and then click the \'Add\' button in the top-right of the window.'}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.img,{alt:"Adding Budgie Workspaces Applet",src:i(73099).Z+"",width:"761",height:"610"})}),"\n",(0,n.jsx)(t.p,{children:"You should now see your workspaces available in the main Budgie panel. Applications can be moved between workspaces by dragging and dropping their icons within the Workspace Switcher."}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.img,{alt:"Budgie Workspaces",src:i(67713).Z+"",width:"1850",height:"141"})}),"\n",(0,n.jsx)(t.h3,{id:"keyboard-shortcuts",children:"Keyboard Shortcuts"}),"\n",(0,n.jsx)(t.p,{children:"Budgie provides a variety of keyboard shortcuts for workspaces."}),"\n",(0,n.jsx)(t.p,{children:'To view these shortcuts, open the Budgie Control Center app, choose the "Keyboard" section in the left-hand sidebar, then scroll down in the right part of the window to choose "Keyboard Shortcuts".'}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.img,{alt:"Budgie Control Center Keyboard Shortcuts",src:i(72264).Z+"",width:"995",height:"702"})}),"\n",(0,n.jsx)(t.p,{children:'Workspace shortcuts are contained in the "Navigation" section of the Keyboard Shortcuts window.'}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.img,{alt:"Budgie Control Center Keyboard Shortcuts Sections",src:i(7521).Z+"",width:"996",height:"699"})}),"\n",(0,n.jsx)(t.h3,{id:"workspaces-configuration",children:"Workspaces Configuration"}),"\n",(0,n.jsx)(t.p,{children:'There are 4 workspaces available in Budgie by default. To add a new workspace, click on the "+" button.'}),"\n",(0,n.jsx)(t.p,{children:"If you wish to remove or rename your workspace, right click on the desired workspace and select rename or remove."}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.img,{alt:"Budgie Remove or Rename Workspaces",src:i(65893).Z+"",width:"1850",height:"187"})})]})}function c(e={}){const{wrapper:t}={...(0,s.a)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(l,{...e})}):l(e)}},11494:(e,t,i)=>{i.d(t,{Z:()=>n});const n="data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEASABIAAD/2wBDAAIBAQEBAQIBAQECAgICAgQDAgICAgUEBAMEBgUGBgYFBgYGBwkIBgcJBwYGCAsICQoKCgoKBggLDAsKDAkKCgr/2wBDAQICAgICAgUDAwUKBwYHCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgr/wAARCABBAOEDAREAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD9c9Ph1SC+km+0FoHXBQrjB9a/KYUqsajd9D66UoONupqQ3UwABTIx1rrjz9jF8pKk7MSoY1UU2S7D45UDeZ6nmrjFCbHmdQ2Bkgnr6U3Gz0QiWFwo54wa0jHQlu5I11tXGepq22lYncR7iWJd23cKluSQ0rkD38mzMa/gaxnKql7qLUY9Sv8A2w018mnLZSsXXll+6PxrP20faKnJaspwtG9x19qcGk25muA2xPvnPSpxGJw2ChzzdkOnSqVpcsRbfU7TU4PNsXLgjqRirp4mhiIXpu6FKnUpytIdFCTGGeY8n1q40uZXuS5Ddio20scE9afs3F2Dm6jZ4Fx8s+D2pypAphh1i/euCR3FHs7R1DmuyCaO2Iyz8n6VhPDUpK0tS1UknoZer6BpupQBZ13sjbgG6A1xvL8JTjzQikzeOJrX3MKPwvpS6sbaexyrDliMg/0rneHUqtrfM6PbzUL3OI8U/s2eEpru81fSL+9gvJpfMjmiuWUK/Y46VjLBOOx2Us0nZKSKvw+8FfE3wdqMl5qvxMvdSQFcw3aqQFB5wcda5Z0KsZfu9Doq4jC1oW5bM7Xx7+0mfhLo0Go3WgX+q27yLHO2nRbjHnjOO4HeumlKo0ouN/PY4IYNV5aSsZWufEL4P/Gbwa/2vULuwgujtNxPGYwp+prmq0suq+67xl95vShj8LPTU42X4FWWgT2+p+CPHsd7beXtFtPMrBh7Y715tTJ+WTnGab+49P8AtmVSPJUhYzPinpHjTWPDjW8Xgeb7Zp43Wl6jgqMf3QATz059frXNg8JjMFWcpv3H0LhXw1WSs7ep46ngP9oO406bxHr2k2t7vJYQrJsIToFJb7xxxxgelepXx+Bp8iV4o76UKTk43u+ljI8G/G3wr4NefwpeeH72yup5D5zNkAY+8Qe5r0KmH+tQVWMk0Z1MPVU+W2p0lx8dPhhrcQ0ObxV9qvLIbraKWTJQ+2eD9a4/7Px0ZKcY2iyfZQi3rqH/AAtex/6DH/jq/wCFbfVanYPZxPznX/gtH/wU+QYX9q665/6kvQf/AJX1+2LIMpW1N/8AgT/zPx/+0cY/tfghR/wWl/4KfgbR+1fdY/7EvQf/AJX0/wCwcq/kf/gT/wAw/tDF/wA34IP+H03/AAVAHP8Aw1fdf+EXoH/yvoWQ5Sv+Xf8A5M/8xf2hi/5vwQ1v+C0P/BT1zlv2rbr/AMIzQf8A5ApPIMpf/Lt/+BP/ADH/AGhjP5vwQ4f8Fpv+CoA6ftX3X/hF6B/8r6f9hZV/z7f/AIE/8xf2hi/5vwQ4f8Fqv+CoY4H7WN1/4Regf/K+msjytfYf/gT/AMwePxb+1+CD/h9V/wAFQ85P7WN1/wCEXoH/AMr6f9h5V/z7/F/5i+v4v+b8EL/w+t/4KjYx/wANZXWP+xL0D/5X0f2Hlf8Az7/F/wCYfXsX/N+CG/8AD6n/AIKh/wDR2F1/4Regf/K+j+w8r/59/i/8w+vYv+b8EOh/4LXf8FRrd/Mh/axuQ3r/AMIVoH/yvqf7AyhS5vZ6+r/zH9fxdrc34IbP/wAFp/8AgqDc7vP/AGrrlt3UHwVoHP8A5T6ynw1kdRWlRv6t/wCZSzLHR2n+CGQf8Fof+Cnlsnl2/wC1ZcoP9nwVoA/9x9XDh/J6ceWNKy9X/mJ5jjZO7l+CJP8Ah9Z/wVFxt/4ayuv/AAi9A/8AlfWiyPK0v4f4v/Mn6/i/5vwQN/wWr/4KiNyf2sbr/wAIrQP/AJX0/wCxMrf2Pxf+YfXsV/N+CEP/AAWn/wCCoLHJ/avuv/CL0D/5X0v7Dyr/AJ9/i/8AMPr+L/m/BDW/4LR/8FPmOW/auuj/ANyZoP8A8gUnkWVP7D/8Cf8AmNY/Fr7X4IYf+Czv/BTo/wDN1l1/4Rmg/wDyBU/2BlH/AD7f/gT/AMx/2hi/5vwQv/D53/gp1jH/AA1Xc/8AhGaD/wDIFH+r+Uf8+/8AyZ/5h/aGL/m/BDG/4LLf8FNX+9+1Vd/+EdoX/wAgVH+rmTX/AIb/APApf5j/ALSxv834Iaf+CyX/AAUyPX9qi6/8I7Qv/kCn/q7k3/Pv/wAml/mL+0cZ/N+CGSf8Fiv+Clcq7ZP2pLkj0/4Q3Qv/AJApPhzJXvS/8ml/mP8AtLGr7X4Ir3H/AAV0/wCCjd3EYbn9pu4dD1VvB+h4/wDSGpfDORv/AJdf+TS/zKWa5gndT/BGfqP/AAVN/b91XRpPD9/+0RJJZzf6yA+D9DAP5WOazfCuQP8A5c/+TS/zNo55msZXVT8F/kZ9h/wUr/bp0qxTTtP/AGhbyKGLHlovhzSPlx0wfseRWcuEeHpSu6Lv/il/maf6w5v/AM/P/JY/5G1p/wDwV0/4KRaPCIbD9qLUdgHCyeGtGcf+PWJrWPC+RQVlSf8A4FL/ADMJZvmE3rJfcv8AIjuP+Ctv/BRS+Ui7/aWumHTH/CJ6J/SxrnrcGcM4hWqUL/8Ab0v8zWGe5tTd41LfJf5HKWn7bfxt1PxfZeKviv4/udZsrObzbu3i02ztWkjzmQA28EZ3FdwBOQCQSGAINT4WymlhpQw0OV201bXlo2zvw3FudUqsXOpzRXSy/RXP038X/wDBLPWRJcX3hfxh/abh82d21z5cioRyGK9fX8TX55TzLFU4pRimj7xZnha8uavFqRyv/Dtn41f9ByL/AL+v/jWv9rv+R/gbe2yzz+8/Jiv2Q/FgoAKACgAoAKAP090n9mz4AaPplvpVv8GfDMqW8SxrJd6HBNKwAxlndCzt6kkk1+zU8nyunBRVCLt3im/vaufy3W4m4hrVZVHi6ibd9JyS+STSS8kWf+GfvgL/ANES8I/+E1a//G6v+ysr/wCfEP8AwGP+Rn/rDn//AEF1f/Bk/wDMP+GfvgL/ANES8I/+E1a//G6P7Kyv/nxD/wABj/kH+sOf/wDQXV/8GT/zD/hn74C/9ES8I/8AhNWv/wAbo/srK/8AnxD/AMBj/kH+sOf/APQXV/8ABk/8w/4Z++Av/REvCP8A4TVr/wDG6P7Kyv8A58Q/8Bj/AJB/rDn/AP0F1f8AwZP/ADD/AIZ++Av/AERLwj/4TVr/APG6P7Kyv/nxD/wGP+Qf6w5//wBBdX/wZP8AzD/hn74C/wDREvCP/hNWv/xuj+ysr/58Q/8AAY/5B/rDn/8A0F1f/Bk/8w/4Z++Av/REvCP/AITVr/8AG6P7Kyv/AJ8Q/wDAY/5B/rDn/wD0F1f/AAZP/MP+GfvgL/0RLwj/AOE1a/8Axuj+ysr/AOfEP/AY/wCQf6w5/wD9BdX/AMGT/wAw/wCGfvgL/wBES8I/+E1a/wDxuj+ysr/58Q/8Bj/kH+sOf/8AQXV/8GT/AMw/4Z++Av8A0RLwj/4TVr/8bo/srK/+fEP/AAGP+Qf6w5//ANBdX/wZP/M+fP8Agon8HPhb4M+FWj+LfBvgLStHvh4hS0eTSrFLcSRPBM5DLGAGO6JcEjI5x1NfK8WZfgsPgoVaVNRfNbRJaNN9PQ/Q/DjOs1xubVcPia0px5HL3m5WalFaN3a0b9fkfHlfAH7KFABQAUAFABQAjKW6UrJANEZ7mhICvrShdHusdfs7/wDoJpS+FjW5+9nxW0T4p2d7bXGleKL3S7K7fF5Ppku4wvkYO0/w4r+fYJwXNKJ+wYaeEmmmlfpcxf8AhAPiN/0ct4k/8BBT+sU/+fX4ml6f8q/A/Div6DPxoKACgAoAKACgD9dK/eD+PyfTNOvNY1K30nToGluLqdIYIlGS7sQqgfUkUNpK7dkGvRXO/wDin+zrrvgb4jab8PfB+rjxM2rQFtPu7S38lZZUkkinjwXIAjkikBYsBtXccA8eNl+c0sZhalerH2ahq7v7LipRl03i1p301Po834cxGW4ujh6UvayqXWi/5eRk4Thu7uMlv1TT0TK2v/s9+NNGtfDNvaeTqGqeJp7uO2sNOuoLiNRCyDctxFK8bqQxJOQE2HJ640pZvhqtSrf3Y04xk2047826kk18Pzvp544jIMZQw9CWkp1ZzgoxcZfCqdrSjJp3c7W6cuu+lH4ifCDV/ht4Y0LXdb1K1lm1p7sCCyuYbiKNYWRQyzwyOkm7eeh4K457aYTMaWMxM6UE7RUXdpp+9zacskmrct/O5lj8mr5dgaWIqyV5ynGycZL3FB35oyad3O1unL56VNY+H39k+EvC/in+1/M/4SQ3P7j7Pj7P5U/lfe3fPnr0GOnPWt6OJ9tjqmGtbkUXfvzX6eVu+pyYjB/V8qp43mvzyqK1tuRQe/nzdtLdbmz4m/Z68b6R4k8QaTov2a9stC1i504X91fW9mbySDlxDFLKGlcLhike8gMPUVxYfOcNVwtKrUvFzipWScrJ9W0tFfS7stz1MXw3jaOOrYei1JU5cvM3GF3a9kpS1lb7Kbf3mRcfB74h2vhIeNp9CjWx+yJdlf7QgNwts7hFna3D+csRYgCQoFORzyK6v7QwjxPsOb3r8uztzWvy81uXmtra9/I4FlGYSwf1lQ9yzlvHm5U7OShfmcU9OZRt5kPj34W+N/hjcRWXjjS4bG4lLBbX+0YJZlAAO5o43ZkUhgVZgAw+6Tg08Lj8Ljb+xle3WzS7Wu1a6tqt11JxuV47L4RliIqPNZpc0W7NJp2Tbs01Z2s9r3TOfrsPPCgD50/4Kb/8kF0j/sb7f/0luq+S4y/5FcP8a/8ASZH6R4X/API/q/8AXqX/AKXA+I5/+Rdtf+v24/8AQIa/Neh+8dSlSA3fDHwv+JfjWwfVfBvw713V7WOYxSXOmaRNcRrIACULIpAbDKcdcMPWldIDI1DT7/Sb+fStVsZra6tpmiuba4iKSRSKSGRlPKsCCCDyCKYENAHZfAj4YxfFj4h2/hm8uHis44mub54z83lKQML6EsyjPbOe1edmuNeAwbqJa7L1PruCOHI8UZ/DCVG1TScp235VbRebbSv0vc99/sX9nQan/wAKt/4VOP7S+3fY/sn9mj7R5X/P3527d5O35t+7PbGeK+U9pnHJ9Z9t7tr3vpf+W3fpa1vkfuX1PgD6x/Y39n/vefk5eT3+X/n7z3v7O2vNzX6W5tDwH48fDOL4TfES48M2k7yWckS3Ni8h+bymJGG9SGVlz3xnvX1WV414/CKq1rs/VH4Zxtw3HhfPp4Sm26bSlBvfld9H5ppq/W1zhNc40W8IHP2WT/0E13yvZnya3P6QdD064lsv3mk4kIBKsd2fzr8OdOy2P0JVNdyx/ZN9/wBC8v5LWXLL+U19pHufzgV+8n5uFABQAUAFABQB+ulfvB/H51fwU8beH/ht8SNP8feIdKlvl0jzLmytI1BWS7VGMG/LKQgl2MxBzheATXFmWHrYvA1KFJ2c1y37Ju0vny3t52PRyjE4bBZnSxFeLlGD5rK2rjrFa9HJR5v7t9HsegaT+0x4BuNI0mz1r4bHS5NLvNRhA0OeaVWsdQtpIrk7rueRxMrlZEGdhy2ducnx6uR4nnnyVbqUYr3klaVOSlT0jFJrdS62ta+y+ko8U4Nxpurh+WUKrmuVyd1Ui4VbucpNSfuSjbS6d0t3Q034xfC3wk3hXRfD0Ov32m6Rb6xa6tc3tnBbzyR38XlF4UWWRVZFJIVmwSB83PG1XLsdivbyq8sXNU+WzbSdOTnrdRum7bLa+mmvNQzfK8vWEjh+eapVKspOSjFtVIQh7qUpWaUXu97O+tlzPxL8W+ANR8E+G/A/gKbWJ49ElvnuLvV7KKAzGd42BVI5ZNuAhBBY/U547MJh8YsZUxFdRXNGKSi27crle7aX83b/ADfnZhisueWUcJhXN8k6km5JRvzxppWSlLbkd9ezvrZaPhvxz8JdZ8D+HvDPxMfxDaz+GL64ktX0SygnS9glkWQxOZZozCwYN84DjDfd45mrh8fRx08RheV88YpqTas43s1ZO6s9VptuOhicrxOVRwWNc48k5STgoyupqCcWpSjZrkupXe7vHQ29F+P/AIM1PWvEOufEK3v7mz1nX7vUn8LHRbS9tJvOHAWeV1ls5BwDNEGYhV44xXBUyfE0sJSo4drmhBRU+aUZJrrZJqSvrySsr311PYpcRYKtmdfE4pS9nUqc7p8kJxlH+VuTThK3u+0jd26aEXin9oHRtf8AAQs7C7ubHVX8N2ujXNlF4T00xyxwpHGWOoH/AEnayRg+Xt4bgPgAVtSyqpTxznJKUHUdS/PNNNvmtyL3G1LrfbdXOeef0Z5ZGnFuNSNL2VlTptNaxv7V/vFeLs0k9dpK5yfxW8W+C/iB4u8Q+NrFtUhub/Uo5NNt5baPy/JKkSGVhISrghNoUMCC2SMDPZl+GxODw9KjKzS5uZ3fV3VtNd3e9ulrnl5njMHmGIqV1zJ2pqKsre7FRlza6be7a9+tjHvYfh6tzqg03UdZaFbdDorT2UStJLlN4nAkIRceZgqWJIXIGTjpi8Zyx5lG93zav4dbW01e107LfXa/HJZf7SVpS5eVcuivz2jdPXSN+azV3bl01dsauk4z50/4Kb/8kF0j/sb7f/0luq+S4y/5FcP8a/8ASZH6R4X/API/q/8AXqX/AKXA+IZpYzoNtCJFLrdzsy55AKxYOPfB/I1+a9D946lSkBu+GPih8S/BVg+leDfiJrukWskxlkttM1ea3jaQgAuVRgC2FUZ64UelKyYGRqGoX+rX8+q6rfTXN1czNLc3NxKXklkYks7MeWYkkknkk0wIaAOy+BHxOi+E/wAQ7fxNeW7y2ckTW18kY+bymIOV9SGVTjvjHevOzXBPH4R009d16n13BPEkeF8+hi6ibptOM7b8rtqvNNJ262se/wD9ufs3fb/+Fn/8LPj/ALS+3/bftv8AaX+lbP8An28rG7ydvy+Xtzjvnmvk/ZZzyfVvZe7a1raf4r7X63v+B+5/XfD32/8AbH19e15+fm5/3lv+ffJbm9nb3eTlvbrfU8A+O/xOj+LHxDuPE1nA8VnHEttYpIPm8pSTlvQlmY47Zx2r6zKsE8Bg1Te+79T8L424jjxRn88XTTVNJRhfflV9X5ttu3S9jg9c/wCQLef9esn/AKCa9CXws+TW5/S74dtEkRtsuABx82MivxG2jufdK9zV22f96T86yvDzK5ZH8y9fuh8EFABQAUAAz3NABQB+nuk/tJ/s/wCs6ZBqtv8AGbwzElxEsix3etwQyqCM4ZHcMjeoIBFfs1POMqqQUlWir95JP7m7n8t1uGeIaNWVN4So2nbSEmvk0mmvNFn/AIaB+Av/AEW3wj/4Utr/APHKv+1cr/5/w/8AAo/5mf8Aq9n/AP0CVf8AwXP/ACD/AIaB+Av/AEW3wj/4Utr/APHKP7Vyv/n/AA/8Cj/mH+r2f/8AQJV/8Fz/AMg/4aB+Av8A0W3wj/4Utr/8co/tXK/+f8P/AAKP+Yf6vZ//ANAlX/wXP/IP+GgfgL/0W3wj/wCFLa//AByj+1cr/wCf8P8AwKP+Yf6vZ/8A9AlX/wAFz/yD/hoH4C/9Ft8I/wDhS2v/AMco/tXK/wDn/D/wKP8AmH+r2f8A/QJV/wDBc/8AIP8AhoH4C/8ARbfCP/hS2v8A8co/tXK/+f8AD/wKP+Yf6vZ//wBAlX/wXP8AyD/hoH4C/wDRbfCP/hS2v/xyj+1cr/5/w/8AAo/5h/q9n/8A0CVf/Bc/8g/4aB+Av/RbfCP/AIUtr/8AHKP7Vyv/AJ/w/wDAo/5h/q9n/wD0CVf/AAXP/IP+GgfgL/0W3wj/AOFLa/8Axyj+1cr/AOf8P/Ao/wCYf6vZ/wD9AlX/AMFz/wAg/wCGgfgL/wBFt8I/+FLa/wDxyj+1cr/5/wAP/Ao/5h/q9n//AECVf/Bc/wDI+fP+Cifxj+FvjP4V6P4S8G+PdK1i+PiFLt49KvkuFjiSCZCWaMkKd0q4BOTzjoa+V4szDBYjBQpUqik+a+jT0Sa6ep+h+HGS5rgs2q4jE0ZQjyOPvJxu3KL0Ts3on6fM+PK+AP2UKACgAPHNAAOeaACgABB6UbgFAFXXP+QLecf8usn/AKCamXwsa3P6V9FceSBDMMqBuU+lfiE5K2h95FO5u+fa/wCRWVy+U/ExP+CEX/BWg/e/ZCmH/c9+H/8A5YV+4e3pnwXIx3/DiD/grJ/0aNL/AOF34f8A/lhR7emHJIP+HEH/AAVk/wCjRpf/AAu/D/8A8sKPb0w5JB/w4g/4Kyf9GjS/+F34f/8AlhR7emHJIP8AhxB/wVk/6NGl/wDC78P/APywo9vTDkkH/DiD/grJ/wBGjS/+F34f/wDlhR7emHJIP+HEH/BWT/o0aX/wu/D/AP8ALCj29MOSQf8ADiD/AIKyf9GjS/8Ahd+H/wD5YUe3phySD/hxB/wVk/6NGl/8Lvw//wDLCj29MOSQf8OIP+Csv/Ro0v8A4Xfh/wD+WFHt6YckgH/BCD/grL/0aLL/AOF34f8A/lhR7emHJIP+HEH/AAVk/wCjRpf/AAu/D/8A8sKPb0w5JB/w4g/4Kyf9GjS/+F34f/8AlhR7emHJIP8AhxB/wVk/6NGl/wDC78P/APywo9vTDkkH/DiD/grJ/wBGjS/+F34f/wDlhR7emHJIP+HEH/BWX/o0WX/wu/D/AP8ALCj29MOSQf8ADiD/AIKyf9GjS/8Ahd+H/wD5YUe3phySD/hxB/wVk/6NGl/8Lvw//wDLCj29MOSQf8OIP+Csn/Ro0v8A4Xfh/wD+WFHt6fcOSQf8OIP+Csn/AEaNL/4Xfh//AOWFHt6fcOSQf8OH/wDgrLn/AJNHl/8AC68P/wDywo9vT7hySD/hxB/wVk/6NGl/8Lvw/wD/ACwp+3p9w5JB/wAOIP8AgrJ/0aNL/wCF34f/APlhS9tS7hySGn/ghD/wVp3cfsiyY/7Hvw//APJ9J1qbDkYn/Dh//grQD8v7IsmO/wDxXfh//wCWFL21PuHIx4/4IQf8FZe/7I8v/hdeH/8A5YU1WpoOSRz3xc/4Iuf8FOPhZ8KPE/xO8ffsuyafoXhzw9e6prV+fGehy/ZrS3geWaXZFfM77URm2orMcYAJwKbrU2rIFBpn7UKfFEduZ4bayit0cK8rtypPsB0r8ExVTF2alaPZ7/gfomHjh21u2ankeJ/7lt/3zXm/V8x/5/8A/kp1c+E/59v7z6kr9/PzYKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKAPFv8AgpIcf8E7Pj4T/wBEW8U/+mi6prcDyLwWYPEWl2PiHw9fSJbTxrMomjYb1Izyrcg/Wvx6pC6utD7pe5Jxkdf/AKR/ejrOzFp2Z9L1+yHwwUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAeLf8ABSP/AJR2/Hv/ALIt4p/9NF1TW4PY8og/5JxJ/wBeg/lX47V/g/I+6p/x/mcPXkHtH//Z"},38645:(e,t,i)=>{i.d(t,{Z:()=>n});const n=i.p+"assets/images/budgie-add-user-dialog-4a76a1d5811db1f477173c3c1fabb43a.jpg"},26715:(e,t,i)=>{i.d(t,{Z:()=>n});const n=i.p+"assets/images/budgie-arrange-displays-c6b7dca4d418eed7a79be42eabbab2d1.png"},93747:(e,t,i)=>{i.d(t,{Z:()=>n});const n=i.p+"assets/images/budgie-control-center-add-input-method-09685f6a24a0012c3d954350511f449e.jpg"},17750:(e,t,i)=>{i.d(t,{Z:()=>n});const n=i.p+"assets/images/budgie-control-center-background-08d0ef91e1aafde95ab900656618ae4b.jpg"},73249:(e,t,i)=>{i.d(t,{Z:()=>n});const n=i.p+"assets/images/budgie-control-center-date-time-2e2a41c3504dc830843f938bbd142981.jpg"},74063:(e,t,i)=>{i.d(t,{Z:()=>n});const n=i.p+"assets/images/budgie-control-center-default-applications-ba0f2bc0472afc29f3a3bfd62fff4019.jpg"},72264:(e,t,i)=>{i.d(t,{Z:()=>n});const n=i.p+"assets/images/budgie-control-center-keyboard-shortcuts-location-51ebaf6cc1a0f2d2581a35cf1b9a7116.jpg"},7521:(e,t,i)=>{i.d(t,{Z:()=>n});const n=i.p+"assets/images/budgie-control-center-keyboard-shortcuts-popup-e16d754e17feaf2519cfb56d76b95e6c.jpg"},12486:(e,t,i)=>{i.d(t,{Z:()=>n});const n=i.p+"assets/images/budgie-control-center-keyboard-c35874adf88277c7f6368628e9faab58.jpg"},73099:(e,t,i)=>{i.d(t,{Z:()=>n});const n=i.p+"assets/images/budgie-control-center-panel-add-workspace-switcher-4756fd9ee280619d8b3250bc42817117.jpg"},99786:(e,t,i)=>{i.d(t,{Z:()=>n});const n=i.p+"assets/images/budgie-desktop-blank-space-right-click-c41f4ca4d33cfcdbea6b0db8bf37e069.jpg"},65486:(e,t,i)=>{i.d(t,{Z:()=>n});const n=i.p+"assets/images/budgie-desktop-settings-bottom-panel-clock-62957b69b2028aed4498146d258826cf.jpg"},61881:(e,t,i)=>{i.d(t,{Z:()=>n});const n=i.p+"assets/images/budgie-desktop-settings-bottom-panel-4e14285d1a0df0b2b7f8ac1090064038.jpg"},33784:(e,t,i)=>{i.d(t,{Z:()=>n});const n=i.p+"assets/images/budgie-desktop-settings-desktop-section-dbeac4ca05a68e1d4aa726cc015b067c.jpg"},42677:(e,t,i)=>{i.d(t,{Z:()=>n});const n=i.p+"assets/images/budgie-display-confirm-a76d736f32f356662af758fb94f6aafc.jpg"},77218:(e,t,i)=>{i.d(t,{Z:()=>n});const n=i.p+"assets/images/budgie-displays-overview-6bbedd44653525b6c3aba838cf30349d.jpg"},27773:(e,t,i)=>{i.d(t,{Z:()=>n});const n=i.p+"assets/images/budgie-individual-display-settings-2d5ef78b2175bb97fc2e729a90ee5774.jpg"},63730:(e,t,i)=>{i.d(t,{Z:()=>n});const n=i.p+"assets/images/budgie-input-sources-multiple-dd4489d88d1d5a55afa2528664e5f908.jpg"},86420:(e,t,i)=>{i.d(t,{Z:()=>n});const n=i.p+"assets/images/budgie-keep-files-prompt-5b7532e8ea1cf62ad466bf6d2eec702f.jpg"},38896:(e,t,i)=>{i.d(t,{Z:()=>n});const n=i.p+"assets/images/budgie-keyboard-layout-applet-ibus-306635b913e0265ce1f47e1098002e0c.jpg"},85522:(e,t,i)=>{i.d(t,{Z:()=>n});const n=i.p+"assets/images/budgie-keyboard-layout-switcher-f8ab66e42e1f0f982ecb691869490507.jpg"},56272:(e,t,i)=>{i.d(t,{Z:()=>n});const n=i.p+"assets/images/budgie-mouse-settings-4652630acfe19020bb0b29d0155bf012.jpg"},86781:(e,t,i)=>{i.d(t,{Z:()=>n});const n=i.p+"assets/images/budgie-multiple-user-settings-e0957ed6affeef47726232f6fa2c22a0.jpg"},50045:(e,t,i)=>{i.d(t,{Z:()=>n});const n=i.p+"assets/images/budgie-nemo-desktop-folder-898d96b13673ff56b0d1e9bed198808e.jpg"},29656:(e,t,i)=>{i.d(t,{Z:()=>n});const n=i.p+"assets/images/budgie-network-authentication-976c81d75e055000d1146dfd8d26f45f.jpg"},35320:(e,t,i)=>{i.d(t,{Z:()=>n});const n=i.p+"assets/images/budgie-network-hidden-0567bce591f6219bb35378032a3db3e9.jpg"},18399:(e,t,i)=>{i.d(t,{Z:()=>n});const n=i.p+"assets/images/budgie-network-overview-56ca62f1ff834202f557968bddfe6ae8.jpg"},23242:(e,t,i)=>{i.d(t,{Z:()=>n});const n=i.p+"assets/images/budgie-open-with-other-deae0e7e2f5b6a1afc5f79813a668609.jpg"},45728:(e,t,i)=>{i.d(t,{Z:()=>n});const n=i.p+"assets/images/budgie-open-with-196e12963d47d150975ab06f51c54b28.jpg"},67713:(e,t,i)=>{i.d(t,{Z:()=>n});const n=i.p+"assets/images/budgie-panel-with-workspace-switcher-f5efe929dd564a1560a58ce5c108e7b1.jpg"},21178:(e,t,i)=>{i.d(t,{Z:()=>n});const n=i.p+"assets/images/budgie-region-and-languages-335dc9a1b149e6ee8b31960b2786e80f.jpg"},74738:(e,t,i)=>{i.d(t,{Z:()=>n});const n=i.p+"assets/images/budgie-selecting-language-search-0ef7ad4ad481eba3511f505c0d48dd64.png"},34067:(e,t,i)=>{i.d(t,{Z:()=>n});const n=i.p+"assets/images/budgie-selecting-language-1b584e15820bf752584efc6dd7b15aeb.png"},79964:(e,t,i)=>{i.d(t,{Z:()=>n});const n=i.p+"assets/images/budgie-single-user-settings-39514927d322f1eae5e257384a82106b.jpg"},20315:(e,t,i)=>{i.d(t,{Z:()=>n});const n=i.p+"assets/images/budgie-sound-settings-83f0c82715b44956569594953085dad1.jpg"},87872:(e,t,i)=>{i.d(t,{Z:()=>n});const n=i.p+"assets/images/budgie-system-time-and-date-popup-cdcd8a6af79f4efe8cc7d4620468d2a4.jpg"},7722:(e,t,i)=>{i.d(t,{Z:()=>n});const n=i.p+"assets/images/budgie-touchpad-settings-ee9690f056a1ed39ebddd5cd61936608.jpg"},48355:(e,t,i)=>{i.d(t,{Z:()=>n});const n=i.p+"assets/images/budgie-volume-control-cf7733bc82bb3684cc809cf0ec743cef.jpg"},65893:(e,t,i)=>{i.d(t,{Z:()=>n});const n=i.p+"assets/images/budgie-workspace-context-menu-d7ddb2b7d5c1ae6ae9e4b0c0ca4ed11f.jpg"},11145:(e,t,i)=>{i.d(t,{Z:()=>n});const n=i.p+"assets/images/raven-sound-applet-84fdb76d11a39ca554f2bc756205d35e.jpg"},11151:(e,t,i)=>{i.d(t,{Z:()=>d,a:()=>a});var n=i(67294);const s={},o=n.createContext(s);function a(e){const t=n.useContext(o);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function d(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:a(e.components),n.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/cca891e2.a56180c1.js b/assets/js/cca891e2.a56180c1.js deleted file mode 100644 index e8eae02ec..000000000 --- a/assets/js/cca891e2.a56180c1.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[9773],{7857:(e,t,i)=>{i.r(t),i.d(t,{assets:()=>l,contentTitle:()=>o,default:()=>h,frontMatter:()=>n,metadata:()=>a,toc:()=>c});var s=i(85893),r=i(11151);const n={title:"Package Inclusion Policy",summary:"What's needed to include packages into the repository"},o="Package Inclusion Policy",a={id:"packaging/procedures/package-inclusion",title:"Package Inclusion Policy",description:"This policy sets forth the criteria for a package to be accepted for inclusion into the Solus repositories or rejected.",source:"@site/docs/packaging/procedures/package-inclusion.md",sourceDirName:"packaging/procedures",slug:"/packaging/procedures/package-inclusion",permalink:"/docs/packaging/procedures/package-inclusion",draft:!1,unlisted:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/packaging/procedures/package-inclusion.md",tags:[],version:"current",lastUpdatedAt:1732716912e3,frontMatter:{title:"Package Inclusion Policy",summary:"What's needed to include packages into the repository"},sidebar:"packagingSidebar",previous:{title:"Maintainership",permalink:"/docs/packaging/procedures/maintainership"},next:{title:"Release Processes",permalink:"/docs/packaging/procedures/release-processes"}},l={},c=[{value:"Criteria",id:"criteria",level:2},{value:"Explicitly redistributable",id:"explicitly-redistributable",level:3},{value:"Server software",id:"server-software",level:3},{value:"Software age",id:"software-age",level:3},{value:"Stack complexity",id:"stack-complexity",level:3},{value:"Value-add",id:"value-add",level:3},{value:"Rejection",id:"rejection",level:2}];function d(e){const t={a:"a",em:"em",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",p:"p",strong:"strong",ul:"ul",...(0,r.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.header,{children:(0,s.jsx)(t.h1,{id:"package-inclusion-policy",children:"Package Inclusion Policy"})}),"\n",(0,s.jsx)(t.p,{children:"This policy sets forth the criteria for a package to be accepted for inclusion into the Solus repositories or rejected."}),"\n",(0,s.jsx)(t.h2,{id:"criteria",children:"Criteria"}),"\n",(0,s.jsx)(t.h3,{id:"explicitly-redistributable",children:"Explicitly redistributable"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsxs)(t.li,{children:["Software under a free software or open source software license, or license text which explicitly states that it is ",(0,s.jsx)(t.strong,{children:"permissible"})," to redistribute the software. We use the ",(0,s.jsx)(t.a,{href:"https://spdx.org/licenses/",children:"SPDX License List"}),"."]}),"\n",(0,s.jsx)(t.li,{children:"For anything that cannot be redistributed by Solus, there is the possibility for them to be provided as a Flatpak, for Third Party repository inclusion, however the Solus project is not responsible for flatpak or snap implementation of these items. These items should then fetch only at installation time, and not contain non distributable components."}),"\n",(0,s.jsx)(t.li,{children:"Solus supports both VCS (currently only git, this will expand) and traditional software sources (such as tarballs) for packages, equally."}),"\n",(0,s.jsxs)(t.li,{children:["Unless ",(0,s.jsx)(t.strong,{children:"absolutely unavoidable"}),", the sources for a package should be source, and not ",(0,s.jsx)(t.strong,{children:"binary, prebuilt"})," sources. Exceptions may be made in rare cases, such as stage1 bootstrap for a compiler, or requires custom components otherwise impossible to provide in Solus (patched libraries, etc.)"]}),"\n"]}),"\n",(0,s.jsx)(t.h3,{id:"server-software",children:"Server software"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsxs)(t.li,{children:["Mail servers such as Postfix, Dovecot, etc, are ",(0,s.jsx)(t.strong,{children:"not"})," eligible for inclusion. Solus does not provide a server operating system."]}),"\n",(0,s.jsxs)(t.li,{children:["Web servers and database daemons ",(0,s.jsx)(t.strong,{children:"are"})," eligible for inclusion, as they facilitate web developers to work locally."]}),"\n",(0,s.jsx)(t.li,{children:"Anything outside of these may be catered to by the usage of Docker, or other container technology. Thus, container technology must be supported by Solus to support access to ancillary cases."}),"\n"]}),"\n",(0,s.jsx)(t.h3,{id:"software-age",children:"Software age"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsx)(t.li,{children:"DOA (dead-on-arrival) packages are generally rejected from Solus. However, they may be included at the discretion of the project, if they provide unique functionality."}),"\n",(0,s.jsx)(t.li,{children:"Projects with no tags/tarballs which lack traction, may be frozen until a suitable release is made. Tagging releases is an indicator for good release engineering practices."}),"\n",(0,s.jsxs)(t.li,{children:["Typically, we prefer ",(0,s.jsx)(t.strong,{children:"stable"})," tagged releases. However, this may be waived if:","\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsx)(t.li,{children:"The software has significant traction (i.e. prerelease)"}),"\n",(0,s.jsx)(t.li,{children:"A bug fix only exists beyond the latest stable release for a git source"}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(t.h3,{id:"stack-complexity",children:"Stack complexity"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsx)(t.li,{children:"Certain requests may tick all the boxes, but introduce a level of complexity or require a level of engagement not possible to balance for Solus Staff. Under certain situations, a request will be frozen until it has a dedicated maintainer."}),"\n",(0,s.jsx)(t.li,{children:"This extends to requests for full desktop environments. However, this does not extend to minor components like drop-in window managers or panels separate of a dependent stack (i.e. Awesome WM, tint2, etc.)"}),"\n"]}),"\n",(0,s.jsx)(t.h3,{id:"value-add",children:"Value-add"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsxs)(t.li,{children:["A web wrapper which ",(0,s.jsx)(t.strong,{children:"adds value"}),", such as Discord, with the global push-to-talk shortcut, is eligible for inclusion."]}),"\n",(0,s.jsxs)(t.li,{children:["A web page wrapper, that adds ",(0,s.jsx)(t.strong,{children:"no further value"})," other than \u201cconvenient desktop shortcut\u201d or \u201ctray icon\u201d, are ",(0,s.jsx)(t.strong,{children:"not"})," eligible for inclusion. Web browsers already support desktop notifications."]}),"\n",(0,s.jsx)(t.li,{children:"If the newly requested package offers no functionality above that of an alternative already in the repositories, it will very likely be rejected. \u201cIt\u2019s pretty\u201d is never a sufficient reason."}),"\n",(0,s.jsx)(t.li,{children:"If the requested package is curated towards, or developed with the intent to work on, a specific operating system, it will very likely be rejected. This includes packages which require libraries that are built with the intent to work on a specific operating system."}),"\n",(0,s.jsxs)(t.li,{children:["Likewise, when a new package offers a better alternative to an ",(0,s.jsx)(t.strong,{children:"existing"})," package, we should look to replace the old one with the new one, to ensure the repository is always deduplicating."]}),"\n"]}),"\n",(0,s.jsx)(t.h2,{id:"rejection",children:"Rejection"}),"\n",(0,s.jsxs)(t.p,{children:["Solus Staff members reserve the right to permanently reject a package request without the need for further discussion once the rejection is issued. The limited time of contributors should be considered and respected, instead of dragging out and 'necromancing' old issues in a vain attempt to force inclusion of previously rejected software. In the event of any policy change, existing/expired package requests will NOT be reevaluated under new criteria as this would lead to an exponential growth in work upon every policy change, and is physically impossible to handle for a project of ",(0,s.jsx)(t.em,{children:"any"})," size."]})]})}function h(e={}){const{wrapper:t}={...(0,r.a)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(d,{...e})}):d(e)}},11151:(e,t,i)=>{i.d(t,{Z:()=>a,a:()=>o});var s=i(67294);const r={},n=s.createContext(r);function o(e){const t=s.useContext(n);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:o(e.components),s.createElement(n.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/cca891e2.f0382551.js b/assets/js/cca891e2.f0382551.js new file mode 100644 index 000000000..efa8f9f38 --- /dev/null +++ b/assets/js/cca891e2.f0382551.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([["9132"],{36810:function(e,t,i){i.r(t),i.d(t,{metadata:()=>s,contentTitle:()=>a,default:()=>h,assets:()=>l,toc:()=>c,frontMatter:()=>o});var s=JSON.parse('{"id":"packaging/procedures/package-inclusion","title":"Package Inclusion Policy","description":"This policy sets forth the criteria for a package to be accepted for inclusion into the Solus repositories or rejected.","source":"@site/docs/packaging/procedures/package-inclusion.md","sourceDirName":"packaging/procedures","slug":"/packaging/procedures/package-inclusion","permalink":"/docs/packaging/procedures/package-inclusion","draft":false,"unlisted":false,"editUrl":"https://github.com/getsolus/help-center-docs/tree/master/docs/packaging/procedures/package-inclusion.md","tags":[],"version":"current","lastUpdatedAt":1733757592000,"frontMatter":{"title":"Package Inclusion Policy","summary":"What\'s needed to include packages into the repository"},"sidebar":"packagingSidebar","previous":{"title":"Maintainership","permalink":"/docs/packaging/procedures/maintainership"},"next":{"title":"Release Processes","permalink":"/docs/packaging/procedures/release-processes"}}'),r=i("85893"),n=i("50065");let o={title:"Package Inclusion Policy",summary:"What's needed to include packages into the repository"},a="Package Inclusion Policy",l={},c=[{value:"Criteria",id:"criteria",level:2},{value:"Explicitly redistributable",id:"explicitly-redistributable",level:3},{value:"Server software",id:"server-software",level:3},{value:"Software age",id:"software-age",level:3},{value:"Stack complexity",id:"stack-complexity",level:3},{value:"Value-add",id:"value-add",level:3},{value:"Rejection",id:"rejection",level:2}];function d(e){let t={a:"a",em:"em",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",p:"p",strong:"strong",ul:"ul",...(0,n.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.header,{children:(0,r.jsx)(t.h1,{id:"package-inclusion-policy",children:"Package Inclusion Policy"})}),"\n",(0,r.jsx)(t.p,{children:"This policy sets forth the criteria for a package to be accepted for inclusion into the Solus repositories or rejected."}),"\n",(0,r.jsx)(t.h2,{id:"criteria",children:"Criteria"}),"\n",(0,r.jsx)(t.h3,{id:"explicitly-redistributable",children:"Explicitly redistributable"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:["Software under a free software or open source software license, or license text which explicitly states that it is ",(0,r.jsx)(t.strong,{children:"permissible"})," to redistribute the software. We use the ",(0,r.jsx)(t.a,{href:"https://spdx.org/licenses/",children:"SPDX License List"}),"."]}),"\n",(0,r.jsx)(t.li,{children:"For anything that cannot be redistributed by Solus, there is the possibility for them to be provided as a Flatpak, for Third Party repository inclusion, however the Solus project is not responsible for flatpak or snap implementation of these items. These items should then fetch only at installation time, and not contain non distributable components."}),"\n",(0,r.jsx)(t.li,{children:"Solus supports both VCS (currently only git, this will expand) and traditional software sources (such as tarballs) for packages, equally."}),"\n",(0,r.jsxs)(t.li,{children:["Unless ",(0,r.jsx)(t.strong,{children:"absolutely unavoidable"}),", the sources for a package should be source, and not ",(0,r.jsx)(t.strong,{children:"binary, prebuilt"})," sources. Exceptions may be made in rare cases, such as stage1 bootstrap for a compiler, or requires custom components otherwise impossible to provide in Solus (patched libraries, etc.)"]}),"\n"]}),"\n",(0,r.jsx)(t.h3,{id:"server-software",children:"Server software"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:["Mail servers such as Postfix, Dovecot, etc, are ",(0,r.jsx)(t.strong,{children:"not"})," eligible for inclusion. Solus does not provide a server operating system."]}),"\n",(0,r.jsxs)(t.li,{children:["Web servers and database daemons ",(0,r.jsx)(t.strong,{children:"are"})," eligible for inclusion, as they facilitate web developers to work locally."]}),"\n",(0,r.jsx)(t.li,{children:"Anything outside of these may be catered to by the usage of Docker, or other container technology. Thus, container technology must be supported by Solus to support access to ancillary cases."}),"\n"]}),"\n",(0,r.jsx)(t.h3,{id:"software-age",children:"Software age"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsx)(t.li,{children:"DOA (dead-on-arrival) packages are generally rejected from Solus. However, they may be included at the discretion of the project, if they provide unique functionality."}),"\n",(0,r.jsx)(t.li,{children:"Projects with no tags/tarballs which lack traction, may be frozen until a suitable release is made. Tagging releases is an indicator for good release engineering practices."}),"\n",(0,r.jsxs)(t.li,{children:["Typically, we prefer ",(0,r.jsx)(t.strong,{children:"stable"})," tagged releases. However, this may be waived if:","\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsx)(t.li,{children:"The software has significant traction (i.e. prerelease)"}),"\n",(0,r.jsx)(t.li,{children:"A bug fix only exists beyond the latest stable release for a git source"}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(t.h3,{id:"stack-complexity",children:"Stack complexity"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsx)(t.li,{children:"Certain requests may tick all the boxes, but introduce a level of complexity or require a level of engagement not possible to balance for Solus Staff. Under certain situations, a request will be frozen until it has a dedicated maintainer."}),"\n",(0,r.jsx)(t.li,{children:"This extends to requests for full desktop environments. However, this does not extend to minor components like drop-in window managers or panels separate of a dependent stack (i.e. Awesome WM, tint2, etc.)"}),"\n"]}),"\n",(0,r.jsx)(t.h3,{id:"value-add",children:"Value-add"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:["A web wrapper which ",(0,r.jsx)(t.strong,{children:"adds value"}),", such as Discord, with the global push-to-talk shortcut, is eligible for inclusion."]}),"\n",(0,r.jsxs)(t.li,{children:["A web page wrapper, that adds ",(0,r.jsx)(t.strong,{children:"no further value"})," other than \u201Cconvenient desktop shortcut\u201D or \u201Ctray icon\u201D, are ",(0,r.jsx)(t.strong,{children:"not"})," eligible for inclusion. Web browsers already support desktop notifications."]}),"\n",(0,r.jsx)(t.li,{children:"If the newly requested package offers no functionality above that of an alternative already in the repositories, it will very likely be rejected. \u201CIt\u2019s pretty\u201D is never a sufficient reason."}),"\n",(0,r.jsx)(t.li,{children:"If the requested package is curated towards, or developed with the intent to work on, a specific operating system, it will very likely be rejected. This includes packages which require libraries that are built with the intent to work on a specific operating system."}),"\n",(0,r.jsxs)(t.li,{children:["Likewise, when a new package offers a better alternative to an ",(0,r.jsx)(t.strong,{children:"existing"})," package, we should look to replace the old one with the new one, to ensure the repository is always deduplicating."]}),"\n"]}),"\n",(0,r.jsx)(t.h2,{id:"rejection",children:"Rejection"}),"\n",(0,r.jsxs)(t.p,{children:["Solus Staff members reserve the right to permanently reject a package request without the need for further discussion once the rejection is issued. The limited time of contributors should be considered and respected, instead of dragging out and 'necromancing' old issues in a vain attempt to force inclusion of previously rejected software. In the event of any policy change, existing/expired package requests will NOT be reevaluated under new criteria as this would lead to an exponential growth in work upon every policy change, and is physically impossible to handle for a project of ",(0,r.jsx)(t.em,{children:"any"})," size."]})]})}function h(e={}){let{wrapper:t}={...(0,n.a)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(d,{...e})}):d(e)}},50065:function(e,t,i){i.d(t,{Z:function(){return a},a:function(){return o}});var s=i(67294);let r={},n=s.createContext(r);function o(e){let t=s.useContext(n);return s.useMemo(function(){return"function"==typeof e?e(t):{...t,...e}},[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:o(e.components),s.createElement(n.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/ccc49370.682cb85d.js b/assets/js/ccc49370.682cb85d.js new file mode 100644 index 000000000..690551b47 --- /dev/null +++ b/assets/js/ccc49370.682cb85d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([["2998"],{35825:function(e,t,n){n.d(t,{Z:()=>A});var r=n("85893");n("67294");var l=n("74904"),i=n("75700");function o(e){let{children:t,className:n}=e;return(0,r.jsx)("article",{className:n,children:t})}var a=n("27544");let s="title_f1Hy";function c(e){let{className:t}=e,{metadata:n,isBlogPostPage:o}=(0,i.nO)(),{permalink:c,title:u}=n;return(0,r.jsx)(o?"h1":"h2",{className:(0,l.Z)(s,t),children:o?u:(0,r.jsx)(a.Z,{to:c,children:u})})}var u=n("1822"),d=n("67984"),m=n("28291");let h="container_mt6G";function f(e){let{readingTime:t}=e,n=function(){let{selectMessage:e}=(0,d.c)();return t=>{let n=Math.ceil(t);return e(n,(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:n}))}}();return(0,r.jsx)(r.Fragment,{children:n(t)})}function g(e){let{date:t,formattedDate:n}=e;return(0,r.jsx)("time",{dateTime:t,children:n})}function x(){return(0,r.jsx)(r.Fragment,{children:" \xb7 "})}function p(e){let t,{className:n}=e,{metadata:o}=(0,i.nO)(),{date:a,readingTime:s}=o,c=(0,m.P)({day:"numeric",month:"long",year:"numeric",timeZone:"UTC"});return(0,r.jsxs)("div",{className:(0,l.Z)(h,"margin-vert--md",n),children:[(0,r.jsx)(g,{date:a,formattedDate:(t=a,c.format(new Date(t)))}),void 0!==s&&(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(x,{}),(0,r.jsx)(f,{readingTime:s})]})]})}var j=n("91941");let v={authorCol:"authorCol_Hf19",imageOnlyAuthorRow:"imageOnlyAuthorRow_pa_O",imageOnlyAuthorCol:"imageOnlyAuthorCol_G86a"};function b(e){let{className:t}=e,{metadata:{authors:n},assets:o}=(0,i.nO)();if(0===n.length)return null;let a=n.every(e=>{let{name:t}=e;return!t}),s=1===n.length;return(0,r.jsx)("div",{className:(0,l.Z)("margin-top--md margin-bottom--sm",a?v.imageOnlyAuthorRow:"row",t),children:n.map((e,t)=>(0,r.jsx)("div",{className:(0,l.Z)(!a&&(s?"col col--12":"col col--6"),a?v.imageOnlyAuthorCol:v.authorCol),children:(0,r.jsx)(j.Z,{author:{...e,imageURL:o.authorsImageUrls[t]??e.imageURL}})},t))})}function Z(){return(0,r.jsxs)("header",{children:[(0,r.jsx)(c,{}),(0,r.jsx)(p,{}),(0,r.jsx)(b,{})]})}var y=n("3062"),_=n("27913");function N(e){let{children:t,className:n}=e,{isBlogPostPage:o}=(0,i.nO)();return(0,r.jsx)("div",{id:o?y.blogPostContainerID:void 0,className:(0,l.Z)("markdown",n),children:(0,r.jsx)(_.Z,{children:t})})}var w=n("50490"),O=n("57216"),k=n("50905");function L(){return(0,r.jsx)("b",{children:(0,r.jsx)(u.Z,{id:"theme.blog.post.readMore",description:"The label used in blog post item excerpts to link to full blog posts",children:"Read more"})})}function T(e){let{blogPostTitle:t,...n}=e;return(0,r.jsx)(a.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}),...n,children:(0,r.jsx)(L,{})})}function C(){let{metadata:e,isBlogPostPage:t}=(0,i.nO)(),{tags:n,title:o,editUrl:a,hasTruncateMarker:s,lastUpdatedBy:c,lastUpdatedAt:u}=e,d=!t&&s,m=n.length>0;if(!(m||d||a))return null;if(!t)return(0,r.jsxs)("footer",{className:"row docusaurus-mt-lg",children:[m&&(0,r.jsx)("div",{className:(0,l.Z)("col",{"col--9":d}),children:(0,r.jsx)(k.Z,{tags:n})}),d&&(0,r.jsx)("div",{className:(0,l.Z)("col text--right",{"col--3":m}),children:(0,r.jsx)(T,{blogPostTitle:o,to:e.permalink})})]});{let e=!!(a||u||c);return(0,r.jsxs)("footer",{className:"docusaurus-mt-lg",children:[m&&(0,r.jsx)("div",{className:(0,l.Z)("row","margin-top--sm",w.k.blog.blogFooterEditMetaRow),children:(0,r.jsx)("div",{className:"col",children:(0,r.jsx)(k.Z,{tags:n})})}),e&&(0,r.jsx)(O.Z,{className:(0,l.Z)("margin-top--sm",w.k.blog.blogFooterEditMetaRow),editUrl:a,lastUpdatedAt:u,lastUpdatedBy:c})]})}}function A(e){let{children:t,className:n}=e,a=function(){let{isBlogPostPage:e}=(0,i.nO)();return e?void 0:"margin-bottom--xl"}();return(0,r.jsxs)(o,{className:(0,l.Z)(a,n),children:[(0,r.jsx)(Z,{}),(0,r.jsx)(N,{children:t}),(0,r.jsx)(C,{})]})}},57647:function(e,t,n){n.r(t),n.d(t,{default:()=>v});var r=n("85893");n("67294");var l=n("74904"),i=n("81921"),o=n("50490"),a=n("75700"),s=n("30928"),c=n("35825"),u=n("1822"),d=n("15779");function m(e){let{nextItem:t,prevItem:n}=e;return(0,r.jsxs)("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"}),children:[n&&(0,r.jsx)(d.Z,{...n,subLabel:(0,r.jsx)(u.Z,{id:"theme.blog.post.paginator.newerPost",description:"The blog post button label to navigate to the newer/previous post",children:"Newer post"})}),t&&(0,r.jsx)(d.Z,{...t,subLabel:(0,r.jsx)(u.Z,{id:"theme.blog.post.paginator.olderPost",description:"The blog post button label to navigate to the older/next post",children:"Older post"}),isNext:!0})]})}function h(){let{assets:e,metadata:t}=(0,a.nO)(),{title:n,description:l,date:o,tags:s,authors:c,frontMatter:u}=t,{keywords:d}=u,m=e.image??u.image;return(0,r.jsxs)(i.d,{title:u.title_meta??n,description:l,keywords:d,image:m,children:[(0,r.jsx)("meta",{property:"og:type",content:"article"}),(0,r.jsx)("meta",{property:"article:published_time",content:o}),c.some(e=>e.url)&&(0,r.jsx)("meta",{property:"article:author",content:c.map(e=>e.url).filter(Boolean).join(",")}),s.length>0&&(0,r.jsx)("meta",{property:"article:tag",content:s.map(e=>e.label).join(",")})]})}var f=n("50777");function g(){let e=(0,a.iZ)();return(0,r.jsx)(f.Z,{children:(0,r.jsx)("script",{type:"application/ld+json",children:JSON.stringify(e)})})}var x=n("28669"),p=n("38154");function j(e){let{sidebar:t,children:n}=e,{metadata:l,toc:i}=(0,a.nO)(),{nextItem:o,prevItem:u,frontMatter:d}=l,{hide_table_of_contents:h,toc_min_heading_level:f,toc_max_heading_level:g}=d;return(0,r.jsxs)(s.Z,{sidebar:t,toc:!h&&i.length>0?(0,r.jsx)(x.Z,{toc:i,minHeadingLevel:f,maxHeadingLevel:g}):void 0,children:[(0,r.jsx)(p.Z,{metadata:l}),(0,r.jsx)(c.Z,{children:n}),(o||u)&&(0,r.jsx)(m,{nextItem:o,prevItem:u})]})}function v(e){let t=e.content;return(0,r.jsx)(a.n4,{content:e.content,isBlogPostPage:!0,children:(0,r.jsxs)(i.FG,{className:(0,l.Z)(o.k.wrapper.blogPages,o.k.page.blogPostPage),children:[(0,r.jsx)(h,{}),(0,r.jsx)(g,{}),(0,r.jsx)(j,{sidebar:e.sidebar,children:(0,r.jsx)(t,{})})]})})}},43672:function(e,t,n){n.d(t,{Z:function(){return c}});var r=n(85893);n(67294);var l=n(74904),i=n(72372),o=n(50490),a=n(77793);function s(e){let{className:t}=e;return(0,r.jsx)(a.Z,{type:"caution",title:(0,r.jsx)(i.cI,{}),className:(0,l.Z)(t,o.k.common.unlistedBanner),children:(0,r.jsx)(i.eU,{})})}function c(e){return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(i.T$,{}),(0,r.jsx)(s,{...e})]})}},38154:function(e,t,n){n.d(t,{Z:()=>u});var r=n("85893");n("67294");var l=n("74904"),i=n("72372"),o=n("50490"),a=n("77793");function s(e){let{className:t}=e;return(0,r.jsx)(a.Z,{type:"caution",title:(0,r.jsx)(i.ht,{}),className:(0,l.Z)(t,o.k.common.draftBanner),children:(0,r.jsx)(i.xo,{})})}var c=n("43672");function u(e){let{metadata:t}=e,{unlisted:n,frontMatter:l}=t;return(0,r.jsxs)(r.Fragment,{children:[(n||l.unlisted)&&(0,r.jsx)(c.Z,{}),l.draft&&(0,r.jsx)(s,{})]})}},28669:function(e,t,n){n.d(t,{Z:()=>a});var r=n("85893");n("67294");var l=n("74904"),i=n("51515");let o="tableOfContents_bqdL";function a(e){let{className:t,...n}=e;return(0,r.jsx)("div",{className:(0,l.Z)(o,"thin-scrollbar",t),children:(0,r.jsx)(i.Z,{...n,linkClassName:"table-of-contents__link toc-highlight",linkActiveClassName:"table-of-contents__link--active"})})}},51515:function(e,t,n){n.d(t,{Z:()=>c});var r=n("85893"),l=n("67294"),i=n("45237");function o(e){let t=e.getBoundingClientRect();return t.top===t.bottom?o(e.parentNode):t}var a=n("27544");let s=l.memo(function e(t){let{toc:n,className:l,linkClassName:i,isChild:o}=t;return n.length?(0,r.jsx)("ul",{className:o?void 0:l,children:n.map(t=>(0,r.jsxs)("li",{children:[(0,r.jsx)(a.Z,{to:`#${t.id}`,className:i??void 0,dangerouslySetInnerHTML:{__html:t.value}}),(0,r.jsx)(e,{isChild:!0,toc:t.children,className:l,linkClassName:i})]},t.id))}):null});function c(e){let{toc:t,className:n="table-of-contents table-of-contents__left-border",linkClassName:a="table-of-contents__link",linkActiveClassName:c,minHeadingLevel:u,maxHeadingLevel:d,...m}=e,h=(0,i.L)(),f=u??h.tableOfContents.minHeadingLevel,g=d??h.tableOfContents.maxHeadingLevel,x=function(e){let{toc:t,minHeadingLevel:n,maxHeadingLevel:r}=e;return(0,l.useMemo)(()=>(function e(t){let{toc:n,minHeadingLevel:r,maxHeadingLevel:l}=t;return n.flatMap(t=>{var n;let i=e({toc:t.children,minHeadingLevel:r,maxHeadingLevel:l});return(n=t).level>=r&&n.level<=l?[{...t,children:i}]:i})})({toc:function(e){let t=e.map(e=>({...e,parentIndex:-1,children:[]})),n=Array(7).fill(-1);t.forEach((e,t)=>{let r=n.slice(2,e.level);e.parentIndex=Math.max(...r),n[e.level]=t});let r=[];return t.forEach(e=>{let{parentIndex:n,...l}=e;n>=0?t[n].children.push(l):r.push(l)}),r}(t),minHeadingLevel:n,maxHeadingLevel:r}),[t,n,r])}({toc:t,minHeadingLevel:f,maxHeadingLevel:g});return!function(e){let t=(0,l.useRef)(void 0),n=function(){let e=(0,l.useRef)(0),{navbar:{hideOnScroll:t}}=(0,i.L)();return(0,l.useEffect)(()=>{e.current=t?0:document.querySelector(".navbar").clientHeight},[t]),e}();(0,l.useEffect)(()=>{if(!e)return()=>{};let{linkClassName:r,linkActiveClassName:l,minHeadingLevel:i,maxHeadingLevel:a}=e;function s(){var e;let s=(e=r,Array.from(document.getElementsByClassName(e))),c=function(e,t){let{anchorTopOffset:n}=t,r=e.find(e=>o(e).top>=n);if(r){var l;return(l=o(r)).top>0&&l.bottom<window.innerHeight/2?r:e[e.indexOf(r)-1]??null}return e[e.length-1]??null}(function(e){let{minHeadingLevel:t,maxHeadingLevel:n}=e,r=[];for(let e=t;e<=n;e+=1)r.push(`h${e}.anchor`);return Array.from(document.querySelectorAll(r.join()))}({minHeadingLevel:i,maxHeadingLevel:a}),{anchorTopOffset:n.current}),u=s.find(e=>{var t;return c&&c.id===decodeURIComponent((t=e).href.substring(t.href.indexOf("#")+1))});s.forEach(e=>{var n;n=e,e===u?(t.current&&t.current!==n&&t.current.classList.remove(l),n.classList.add(l),t.current=n):n.classList.remove(l)})}return document.addEventListener("scroll",s),document.addEventListener("resize",s),s(),()=>{document.removeEventListener("scroll",s),document.removeEventListener("resize",s)}},[e,n])}((0,l.useMemo)(()=>{if(a&&c)return{linkClassName:a,linkActiveClassName:c,minHeadingLevel:f,maxHeadingLevel:g}},[a,c,f,g])),(0,r.jsx)(s,{toc:x,className:n,linkClassName:a,...m})}},72372:function(e,t,n){n.d(t,{T$:function(){return s},cI:function(){return o},eU:function(){return a},ht:function(){return c},xo:function(){return u}});var r=n(85893);n(67294);var l=n(1822),i=n(50777);function o(){return(0,r.jsx)(l.Z,{id:"theme.contentVisibility.unlistedBanner.title",description:"The unlisted content banner title",children:"Unlisted page"})}function a(){return(0,r.jsx)(l.Z,{id:"theme.contentVisibility.unlistedBanner.message",description:"The unlisted content banner message",children:"This page is unlisted. Search engines will not index it, and only users having a direct link can access it."})}function s(){return(0,r.jsx)(i.Z,{children:(0,r.jsx)("meta",{name:"robots",content:"noindex, nofollow"})})}function c(){return(0,r.jsx)(l.Z,{id:"theme.contentVisibility.draftBanner.title",description:"The draft content banner title",children:"Draft page"})}function u(){return(0,r.jsx)(l.Z,{id:"theme.contentVisibility.draftBanner.message",description:"The draft content banner message",children:"This page is a draft. It will only be visible in dev and be excluded from the production build."})}}}]); \ No newline at end of file diff --git a/assets/js/ccc49370.903a1abc.js b/assets/js/ccc49370.903a1abc.js deleted file mode 100644 index 95566c247..000000000 --- a/assets/js/ccc49370.903a1abc.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[6103],{88987:(e,n,t)=>{t.r(n),t.d(n,{default:()=>b});t(67294);var i=t(36905),a=t(96984),s=t(50563),r=t(58112),o=t(50429),l=t(81782),c=t(55361),d=t(60968),u=t(85893);function m(e){const{nextItem:n,prevItem:t}=e;return(0,u.jsxs)("nav",{className:"pagination-nav docusaurus-mt-lg","aria-label":(0,c.I)({id:"theme.blog.post.paginator.navAriaLabel",message:"Blog post page navigation",description:"The ARIA label for the blog posts pagination"}),children:[t&&(0,u.jsx)(d.Z,{...t,subLabel:(0,u.jsx)(c.Z,{id:"theme.blog.post.paginator.newerPost",description:"The blog post button label to navigate to the newer/previous post",children:"Newer post"})}),n&&(0,u.jsx)(d.Z,{...n,subLabel:(0,u.jsx)(c.Z,{id:"theme.blog.post.paginator.olderPost",description:"The blog post button label to navigate to the older/next post",children:"Older post"}),isNext:!0})]})}function h(){const{assets:e,metadata:n}=(0,r.nO)(),{title:t,description:i,date:s,tags:o,authors:l,frontMatter:c}=n,{keywords:d}=c,m=e.image??c.image;return(0,u.jsxs)(a.d,{title:t,description:i,keywords:d,image:m,children:[(0,u.jsx)("meta",{property:"og:type",content:"article"}),(0,u.jsx)("meta",{property:"article:published_time",content:s}),l.some((e=>e.url))&&(0,u.jsx)("meta",{property:"article:author",content:l.map((e=>e.url)).filter(Boolean).join(",")}),o.length>0&&(0,u.jsx)("meta",{property:"article:tag",content:o.map((e=>e.label)).join(",")})]})}var f=t(79722);function g(){const e=(0,r.iZ)();return(0,u.jsx)(f.Z,{children:(0,u.jsx)("script",{type:"application/ld+json",children:JSON.stringify(e)})})}var p=t(15556),x=t(46086);function v(e){let{sidebar:n,children:t}=e;const{metadata:i,toc:a}=(0,r.nO)(),{nextItem:s,prevItem:c,frontMatter:d}=i,{hide_table_of_contents:h,toc_min_heading_level:f,toc_max_heading_level:g}=d;return(0,u.jsxs)(o.Z,{sidebar:n,toc:!h&&a.length>0?(0,u.jsx)(p.Z,{toc:a,minHeadingLevel:f,maxHeadingLevel:g}):void 0,children:[(0,u.jsx)(x.Z,{metadata:i}),(0,u.jsx)(l.Z,{children:t}),(s||c)&&(0,u.jsx)(m,{nextItem:s,prevItem:c})]})}function b(e){const n=e.content;return(0,u.jsx)(r.n4,{content:e.content,isBlogPostPage:!0,children:(0,u.jsxs)(a.FG,{className:(0,i.Z)(s.k.wrapper.blogPages,s.k.page.blogPostPage),children:[(0,u.jsx)(h,{}),(0,u.jsx)(g,{}),(0,u.jsx)(v,{sidebar:e.sidebar,children:(0,u.jsx)(n,{})})]})})}},40591:(e,n,t)=>{t.d(n,{Z:()=>c});t(67294);var i=t(36905),a=t(64827),s=t(50563),r=t(20906),o=t(85893);function l(e){let{className:n}=e;return(0,o.jsx)(r.Z,{type:"caution",title:(0,o.jsx)(a.cI,{}),className:(0,i.Z)(n,s.k.common.unlistedBanner),children:(0,o.jsx)(a.eU,{})})}function c(e){return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(a.T$,{}),(0,o.jsx)(l,{...e})]})}},46086:(e,n,t)=>{t.d(n,{Z:()=>d});t(67294);var i=t(36905),a=t(64827),s=t(50563),r=t(20906),o=t(85893);function l(e){let{className:n}=e;return(0,o.jsx)(r.Z,{type:"caution",title:(0,o.jsx)(a.ht,{}),className:(0,i.Z)(n,s.k.common.draftBanner),children:(0,o.jsx)(a.xo,{})})}var c=t(40591);function d(e){let{metadata:n}=e;const{unlisted:t,frontMatter:i}=n;return(0,o.jsxs)(o.Fragment,{children:[(t||i.unlisted)&&(0,o.jsx)(c.Z,{}),i.draft&&(0,o.jsx)(l,{})]})}},15556:(e,n,t)=>{t.d(n,{Z:()=>c});t(67294);var i=t(36905),a=t(42536);const s={tableOfContents:"tableOfContents_bqdL",docItemContainer:"docItemContainer_F8PC"};var r=t(85893);const o="table-of-contents__link toc-highlight",l="table-of-contents__link--active";function c(e){let{className:n,...t}=e;return(0,r.jsx)("div",{className:(0,i.Z)(s.tableOfContents,"thin-scrollbar",n),children:(0,r.jsx)(a.Z,{...t,linkClassName:o,linkActiveClassName:l})})}},42536:(e,n,t)=>{t.d(n,{Z:()=>g});var i=t(67294),a=t(39581);function s(e){const n=e.map((e=>({...e,parentIndex:-1,children:[]}))),t=Array(7).fill(-1);n.forEach(((e,n)=>{const i=t.slice(2,e.level);e.parentIndex=Math.max(...i),t[e.level]=n}));const i=[];return n.forEach((e=>{const{parentIndex:t,...a}=e;t>=0?n[t].children.push(a):i.push(a)})),i}function r(e){let{toc:n,minHeadingLevel:t,maxHeadingLevel:i}=e;return n.flatMap((e=>{const n=r({toc:e.children,minHeadingLevel:t,maxHeadingLevel:i});return function(e){return e.level>=t&&e.level<=i}(e)?[{...e,children:n}]:n}))}function o(e){const n=e.getBoundingClientRect();return n.top===n.bottom?o(e.parentNode):n}function l(e,n){let{anchorTopOffset:t}=n;const i=e.find((e=>o(e).top>=t));if(i){return function(e){return e.top>0&&e.bottom<window.innerHeight/2}(o(i))?i:e[e.indexOf(i)-1]??null}return e[e.length-1]??null}function c(){const e=(0,i.useRef)(0),{navbar:{hideOnScroll:n}}=(0,a.L)();return(0,i.useEffect)((()=>{e.current=n?0:document.querySelector(".navbar").clientHeight}),[n]),e}function d(e){const n=(0,i.useRef)(void 0),t=c();(0,i.useEffect)((()=>{if(!e)return()=>{};const{linkClassName:i,linkActiveClassName:a,minHeadingLevel:s,maxHeadingLevel:r}=e;function o(){const e=function(e){return Array.from(document.getElementsByClassName(e))}(i),o=function(e){let{minHeadingLevel:n,maxHeadingLevel:t}=e;const i=[];for(let a=n;a<=t;a+=1)i.push(`h${a}.anchor`);return Array.from(document.querySelectorAll(i.join()))}({minHeadingLevel:s,maxHeadingLevel:r}),c=l(o,{anchorTopOffset:t.current}),d=e.find((e=>c&&c.id===function(e){return decodeURIComponent(e.href.substring(e.href.indexOf("#")+1))}(e)));e.forEach((e=>{!function(e,t){t?(n.current&&n.current!==e&&n.current.classList.remove(a),e.classList.add(a),n.current=e):e.classList.remove(a)}(e,e===d)}))}return document.addEventListener("scroll",o),document.addEventListener("resize",o),o(),()=>{document.removeEventListener("scroll",o),document.removeEventListener("resize",o)}}),[e,t])}var u=t(38208),m=t(85893);function h(e){let{toc:n,className:t,linkClassName:i,isChild:a}=e;return n.length?(0,m.jsx)("ul",{className:a?void 0:t,children:n.map((e=>(0,m.jsxs)("li",{children:[(0,m.jsx)(u.Z,{to:`#${e.id}`,className:i??void 0,dangerouslySetInnerHTML:{__html:e.value}}),(0,m.jsx)(h,{isChild:!0,toc:e.children,className:t,linkClassName:i})]},e.id)))}):null}const f=i.memo(h);function g(e){let{toc:n,className:t="table-of-contents table-of-contents__left-border",linkClassName:o="table-of-contents__link",linkActiveClassName:l,minHeadingLevel:c,maxHeadingLevel:u,...h}=e;const g=(0,a.L)(),p=c??g.tableOfContents.minHeadingLevel,x=u??g.tableOfContents.maxHeadingLevel,v=function(e){let{toc:n,minHeadingLevel:t,maxHeadingLevel:a}=e;return(0,i.useMemo)((()=>r({toc:s(n),minHeadingLevel:t,maxHeadingLevel:a})),[n,t,a])}({toc:n,minHeadingLevel:p,maxHeadingLevel:x});return d((0,i.useMemo)((()=>{if(o&&l)return{linkClassName:o,linkActiveClassName:l,minHeadingLevel:p,maxHeadingLevel:x}}),[o,l,p,x])),(0,m.jsx)(f,{toc:v,className:t,linkClassName:o,...h})}},64827:(e,n,t)=>{t.d(n,{T$:()=>l,cI:()=>r,eU:()=>o,ht:()=>c,xo:()=>d});t(67294);var i=t(55361),a=t(79722),s=t(85893);function r(){return(0,s.jsx)(i.Z,{id:"theme.contentVisibility.unlistedBanner.title",description:"The unlisted content banner title",children:"Unlisted page"})}function o(){return(0,s.jsx)(i.Z,{id:"theme.contentVisibility.unlistedBanner.message",description:"The unlisted content banner message",children:"This page is unlisted. Search engines will not index it, and only users having a direct link can access it."})}function l(){return(0,s.jsx)(a.Z,{children:(0,s.jsx)("meta",{name:"robots",content:"noindex, nofollow"})})}function c(){return(0,s.jsx)(i.Z,{id:"theme.contentVisibility.draftBanner.title",description:"The draft content banner title",children:"Draft page"})}function d(){return(0,s.jsx)(i.Z,{id:"theme.contentVisibility.draftBanner.message",description:"The draft content banner message",children:"This page is a draft. It will only be visible in dev and be excluded from the production build."})}}}]); \ No newline at end of file diff --git a/assets/js/ce4855c1.52c0a384.js b/assets/js/ce4855c1.52c0a384.js new file mode 100644 index 000000000..ca040f0eb --- /dev/null +++ b/assets/js/ce4855c1.52c0a384.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([["2796"],{42202:function(n,e,t){t.r(e),t.d(e,{metadata:()=>s,contentTitle:()=>a,default:()=>d,assets:()=>l,toc:()=>c,frontMatter:()=>o});var s=JSON.parse('{"id":"packaging/translation-instructions","title":"Translation instructions","description":"Users will arrive here from the \\"Translation instructions\\" link on Transifex.","source":"@site/docs/packaging/translation-instructions.md","sourceDirName":"packaging","slug":"/packaging/translation-instructions","permalink":"/docs/packaging/translation-instructions","draft":false,"unlisted":false,"editUrl":"https://github.com/getsolus/help-center-docs/tree/master/docs/packaging/translation-instructions.md","tags":[],"version":"current","lastUpdatedAt":1733757592000,"frontMatter":{"title":"Translation instructions","summary":"Instructions for translators"},"sidebar":"packagingSidebar","previous":{"title":"Rebuilding a stack","permalink":"/docs/packaging/stack-rebuilds"},"next":{"title":"Troubleshooting for Packagers","permalink":"/docs/packaging/troubleshooting-packaging"}}'),i=t("85893"),r=t("50065");let o={title:"Translation instructions",summary:"Instructions for translators"},a="Translation instructions",l={},c=[{value:"Project specific instructions",id:"project-specific-instructions",level:2},{value:"Solus Mate Transition Tool",id:"solus-mate-transition-tool",level:3}];function u(n){let e={a:"a",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",p:"p",ul:"ul",...(0,r.a)(),...n.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(e.header,{children:(0,i.jsx)(e.h1,{id:"translation-instructions",children:"Translation instructions"})}),"\n",(0,i.jsx)(e.p,{children:'Users will arrive here from the "Translation instructions" link on Transifex.'}),"\n",(0,i.jsxs)(e.p,{children:["Please join our ",(0,i.jsx)(e.a,{href:"/docs/user/contributing/getting-involved#matrix-chat",children:"Matrix rooms"})," if you have questions about our translation projects."]}),"\n",(0,i.jsx)(e.h2,{id:"project-specific-instructions",children:"Project specific instructions"}),"\n",(0,i.jsx)(e.h3,{id:"solus-mate-transition-tool",children:"Solus Mate Transition Tool"}),"\n",(0,i.jsx)(e.p,{children:(0,i.jsx)(e.a,{href:"https://app.transifex.com/solus/solus-mate-transition-tool/",children:"Transifex project link"})}),"\n",(0,i.jsxs)(e.ul,{children:["\n",(0,i.jsxs)(e.li,{children:["Strings which include curly braces ",(0,i.jsx)(e.code,{children:"{ }"})," should be translated leaving the curly braces, ",(0,i.jsx)(e.em,{children:"and anything inside the braces"}),", untouched."]}),"\n",(0,i.jsxs)(e.li,{children:["Examples:","\n",(0,i.jsxs)(e.ul,{children:["\n",(0,i.jsxs)(e.li,{children:[(0,i.jsx)(e.code,{children:"{DE} Successfully installed, please reboot to continue."})," translates to:"]}),"\n",(0,i.jsx)(e.li,{children:(0,i.jsx)(e.code,{children:"{DE} Instalado exitosamente, reinicie para continuar."})}),"\n",(0,i.jsxs)(e.li,{children:[(0,i.jsx)(e.code,{children:"Successfully Installed {}"})," translates to:"]}),"\n",(0,i.jsx)(e.li,{children:(0,i.jsx)(e.code,{children:"Instalado exitosamente {}"})}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(e.li,{children:["Do not translate the following strings; leave them untouched:","\n",(0,i.jsxs)(e.ul,{children:["\n",(0,i.jsx)(e.li,{children:(0,i.jsx)(e.code,{children:"Packagekit"})}),"\n",(0,i.jsx)(e.li,{children:(0,i.jsx)(e.code,{children:"XDG_SESSION_DESKTOP"})}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(e.li,{children:"If a string includes a new-line character, be sure to include it in the same place in the translation."}),"\n"]})]})}function d(n={}){let{wrapper:e}={...(0,r.a)(),...n.components};return e?(0,i.jsx)(e,{...n,children:(0,i.jsx)(u,{...n})}):u(n)}},50065:function(n,e,t){t.d(e,{Z:function(){return a},a:function(){return o}});var s=t(67294);let i={},r=s.createContext(i);function o(n){let e=s.useContext(r);return s.useMemo(function(){return"function"==typeof n?n(e):{...e,...n}},[e,n])}function a(n){let e;return e=n.disableParentContext?"function"==typeof n.components?n.components(i):n.components||i:o(n.components),s.createElement(r.Provider,{value:e},n.children)}}}]); \ No newline at end of file diff --git a/assets/js/ce4855c1.6a665116.js b/assets/js/ce4855c1.6a665116.js deleted file mode 100644 index 85582ca09..000000000 --- a/assets/js/ce4855c1.6a665116.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[3440],{66855:(n,e,t)=>{t.r(e),t.d(e,{assets:()=>c,contentTitle:()=>o,default:()=>d,frontMatter:()=>r,metadata:()=>a,toc:()=>l});var s=t(85893),i=t(11151);const r={title:"Translation instructions",summary:"Instructions for translators"},o="Translation instructions",a={id:"packaging/translation-instructions",title:"Translation instructions",description:'Users will arrive here from the "Translation instructions" link on Transifex.',source:"@site/docs/packaging/translation-instructions.md",sourceDirName:"packaging",slug:"/packaging/translation-instructions",permalink:"/docs/packaging/translation-instructions",draft:!1,unlisted:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/packaging/translation-instructions.md",tags:[],version:"current",lastUpdatedAt:1732716912e3,frontMatter:{title:"Translation instructions",summary:"Instructions for translators"},sidebar:"packagingSidebar",previous:{title:"Rebuilding a stack",permalink:"/docs/packaging/stack-rebuilds"},next:{title:"Troubleshooting for Packagers",permalink:"/docs/packaging/troubleshooting-packaging"}},c={},l=[{value:"Project specific instructions",id:"project-specific-instructions",level:2},{value:"Solus Mate Transition Tool",id:"solus-mate-transition-tool",level:3}];function u(n){const e={a:"a",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",p:"p",ul:"ul",...(0,i.a)(),...n.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(e.header,{children:(0,s.jsx)(e.h1,{id:"translation-instructions",children:"Translation instructions"})}),"\n",(0,s.jsx)(e.p,{children:'Users will arrive here from the "Translation instructions" link on Transifex.'}),"\n",(0,s.jsxs)(e.p,{children:["Please join our ",(0,s.jsx)(e.a,{href:"/docs/user/contributing/getting-involved#matrix-chat",children:"Matrix rooms"})," if you have questions about our translation projects."]}),"\n",(0,s.jsx)(e.h2,{id:"project-specific-instructions",children:"Project specific instructions"}),"\n",(0,s.jsx)(e.h3,{id:"solus-mate-transition-tool",children:"Solus Mate Transition Tool"}),"\n",(0,s.jsx)(e.p,{children:(0,s.jsx)(e.a,{href:"https://app.transifex.com/solus/solus-mate-transition-tool/",children:"Transifex project link"})}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsxs)(e.li,{children:["Strings which include curly braces ",(0,s.jsx)(e.code,{children:"{ }"})," should be translated leaving the curly braces, ",(0,s.jsx)(e.em,{children:"and anything inside the braces"}),", untouched."]}),"\n",(0,s.jsxs)(e.li,{children:["Examples:","\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.code,{children:"{DE} Successfully installed, please reboot to continue."})," translates to:"]}),"\n",(0,s.jsx)(e.li,{children:(0,s.jsx)(e.code,{children:"{DE} Instalado exitosamente, reinicie para continuar."})}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.code,{children:"Successfully Installed {}"})," translates to:"]}),"\n",(0,s.jsx)(e.li,{children:(0,s.jsx)(e.code,{children:"Instalado exitosamente {}"})}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(e.li,{children:["Do not translate the following strings; leave them untouched:","\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsx)(e.li,{children:(0,s.jsx)(e.code,{children:"Packagekit"})}),"\n",(0,s.jsx)(e.li,{children:(0,s.jsx)(e.code,{children:"XDG_SESSION_DESKTOP"})}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(e.li,{children:"If a string includes a new-line character, be sure to include it in the same place in the translation."}),"\n"]})]})}function d(n={}){const{wrapper:e}={...(0,i.a)(),...n.components};return e?(0,s.jsx)(e,{...n,children:(0,s.jsx)(u,{...n})}):u(n)}},11151:(n,e,t)=>{t.d(e,{Z:()=>a,a:()=>o});var s=t(67294);const i={},r=s.createContext(i);function o(n){const e=s.useContext(r);return s.useMemo((function(){return"function"==typeof n?n(e):{...e,...n}}),[e,n])}function a(n){let e;return e=n.disableParentContext?"function"==typeof n.components?n.components(i):n.components||i:o(n.components),s.createElement(r.Provider,{value:e},n.children)}}}]); \ No newline at end of file diff --git a/assets/js/cec10a63.96b0fffc.js b/assets/js/cec10a63.96b0fffc.js new file mode 100644 index 000000000..7d42913ec --- /dev/null +++ b/assets/js/cec10a63.96b0fffc.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([["4886"],{87641:function(e,n,s){s.r(n),s.d(n,{metadata:()=>t,contentTitle:()=>l,default:()=>h,assets:()=>d,toc:()=>c,frontMatter:()=>o});var t=JSON.parse('{"id":"user/editions/plasma/configuration","title":"Configuration","description":"Opening System Settings","source":"@site/docs/user/editions/plasma/configuration.md","sourceDirName":"user/editions/plasma","slug":"/user/editions/plasma/configuration","permalink":"/docs/user/editions/plasma/configuration","draft":false,"unlisted":false,"editUrl":"https://github.com/getsolus/help-center-docs/tree/master/docs/user/editions/plasma/configuration.md","tags":[],"version":"current","lastUpdatedAt":1733757592000,"frontMatter":{"title":"Configuration","summary":"Learn how to customize and configure the Plasma Desktop on Solus."},"sidebar":"userSidebar","previous":{"title":"Plasma","permalink":"/docs/user/editions/plasma/"},"next":{"title":"Tips and Tricks","permalink":"/docs/user/editions/plasma/tips-and-tricks"}}'),i=s("85893"),r=s("50065");let o={title:"Configuration",summary:"Learn how to customize and configure the Plasma Desktop on Solus."},l="Configuration",d={},c=[{value:"Opening System Settings",id:"opening-system-settings",level:2},{value:"Date and time",id:"date-and-time",level:2},{value:"Default Applications",id:"default-applications",level:2},{value:"Configuring default applications from System Settings",id:"configuring-default-applications-from-system-settings",level:3},{value:"Configuring default applications from the file manager",id:"configuring-default-applications-from-the-file-manager",level:3},{value:"Displays",id:"displays",level:2},{value:"Keyboard layout",id:"keyboard-layout",level:2},{value:"Configuring keyboard layouts",id:"configuring-keyboard-layouts",level:3},{value:"Using IBus",id:"using-ibus",level:3},{value:"Mouse and touchpad",id:"mouse-and-touchpad",level:2},{value:"Network settings",id:"network-settings",level:2},{value:"Connecting to a hidden Wi-Fi network",id:"connecting-to-a-hidden-wi-fi-network",level:3},{value:"Sound and sound devices",id:"sound-and-sound-devices",level:2},{value:"Users",id:"users",level:2},{value:"Adding user accounts",id:"adding-user-accounts",level:3},{value:"Removing user accounts",id:"removing-user-accounts",level:3},{value:"User interface",id:"user-interface",level:2},{value:"Customizing the desktop",id:"customizing-the-desktop",level:3},{value:"Virtual desktops",id:"virtual-desktops",level:2},{value:"Creating virtual desktops",id:"creating-virtual-desktops",level:3},{value:"Switching between virtual desktops",id:"switching-between-virtual-desktops",level:3}];function a(e){let n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",img:"img",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,r.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.header,{children:(0,i.jsx)(n.h1,{id:"configuration",children:"Configuration"})}),"\n",(0,i.jsx)(n.h2,{id:"opening-system-settings",children:"Opening System Settings"}),"\n",(0,i.jsx)(n.p,{children:"You can open the system settings in Solus Plasma using any of the following methods:"}),"\n",(0,i.jsxs)(n.table,{children:[(0,i.jsx)(n.thead,{children:(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.th,{children:"Method"}),(0,i.jsx)(n.th,{children:"Description"})]})}),(0,i.jsxs)(n.tbody,{children:[(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"Application menu"}),(0,i.jsxs)(n.td,{children:["Open the application menu and go to ",(0,i.jsx)(n.strong,{children:"Settings"})," > ",(0,i.jsx)(n.strong,{children:"System Settings"})]})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"KRunner"}),(0,i.jsxs)(n.td,{children:["Press ",(0,i.jsx)(n.code,{children:"Alt + F2"})," or ",(0,i.jsx)(n.code,{children:"Alt + Space"}),", type ",(0,i.jsx)(n.code,{children:"systemsettings"}),", and press Enter"]})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"Terminal"}),(0,i.jsxs)(n.td,{children:["Open a terminal window and execute ",(0,i.jsx)(n.code,{children:"systemsettings"})]})]})]})]}),"\n",(0,i.jsx)(n.h2,{id:"date-and-time",children:"Date and time"}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsxs)(n.li,{children:["In the ",(0,i.jsx)(n.a,{href:"#opening-system-settings",children:(0,i.jsx)(n.strong,{children:"System Settings"})})," screen, go to ",(0,i.jsx)(n.strong,{children:"Personalization"})," > ",(0,i.jsx)(n.strong,{children:"Regional Settings"})," > ",(0,i.jsx)(n.strong,{children:"Date and Time"}),"."]}),"\n",(0,i.jsxs)(n.li,{children:["Configure the date and time of your system.","\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["If you want Solus to set the date and time automatically, select ",(0,i.jsx)(n.strong,{children:"Set date and time automatically"}),"."]}),"\n",(0,i.jsxs)(n.li,{children:["If you want to set the date and time manually, clear the ",(0,i.jsx)(n.strong,{children:"Set date and time automatically"})," checkbox, then use the available controls.\n",(0,i.jsx)(n.img,{alt:"Plasma date and time settings",src:s(16092).Z+"",width:"1022",height:"730"})]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["(Optional) Configure the time zone of your system.","\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsxs)(n.li,{children:["Go to the ",(0,i.jsx)(n.strong,{children:"Time Zone"})," tab."]}),"\n",(0,i.jsx)(n.li,{children:"Select a time zone from the list."}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["Click ",(0,i.jsx)(n.strong,{children:"Apply"}),"."]}),"\n",(0,i.jsxs)(n.li,{children:["(Optional) Customize how the time and date display in the bottom panel.","\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsx)(n.li,{children:"Right-click the digital clock widget on the bottom panel."}),"\n",(0,i.jsxs)(n.li,{children:["Select ",(0,i.jsx)(n.strong,{children:"Configure Digital Clock..."})]}),"\n",(0,i.jsx)(n.li,{children:"Configure the available settings as needed."}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"default-applications",children:"Default Applications"}),"\n",(0,i.jsx)(n.h3,{id:"configuring-default-applications-from-system-settings",children:"Configuring default applications from System Settings"}),"\n",(0,i.jsxs)(n.p,{children:["In the ",(0,i.jsx)(n.a,{href:"#opening-system-settings",children:(0,i.jsx)(n.strong,{children:"System Settings"})})," screen, go to ",(0,i.jsx)(n.strong,{children:"Personalization"})," > ",(0,i.jsx)(n.strong,{children:"Applications"})," > ",(0,i.jsx)(n.strong,{children:"Default Applications"}),", then use the menus to select your preferred default applications."]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"Default applications",src:s(17494).Z+"",width:"1022",height:"731"})}),"\n",(0,i.jsx)(n.h3,{id:"configuring-default-applications-from-the-file-manager",children:"Configuring default applications from the file manager"}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Open Dolphin."}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Navigate to the folder that contains the file you want to open."}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Right-click the file."}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"Context menu",src:s(26716).Z+"",width:"714",height:"456"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["Go to ",(0,i.jsx)(n.strong,{children:"Open With"})," > ",(0,i.jsx)(n.strong,{children:"Other Application"}),"."]}),"\n",(0,i.jsxs)(n.p,{children:["The ",(0,i.jsx)(n.strong,{children:"Choose Application"})," dialog appears."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Choose the application you want to use from the list."}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["Select ",(0,i.jsx)(n.strong,{children:"Remember application association for all files of type [file type]"}),"."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["Click ",(0,i.jsx)(n.strong,{children:"OK"}),"."]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"Choose application dialog",src:s(60364).Z+"",width:"373",height:"571"})}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"displays",children:"Displays"}),"\n",(0,i.jsx)(n.admonition,{type:"tip",children:(0,i.jsxs)(n.p,{children:["Press ",(0,i.jsx)(n.code,{children:"Super + P"})," to access the screen layout settings."]})}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsxs)(n.li,{children:["In the ",(0,i.jsx)(n.a,{href:"#opening-system-settings",children:(0,i.jsx)(n.strong,{children:"System Settings"})})," screen, go to ",(0,i.jsx)(n.strong,{children:"Hardware"})," > ",(0,i.jsx)(n.strong,{children:"Display and Monitor"})," > ",(0,i.jsx)(n.strong,{children:"Display Configuration"}),"."]}),"\n",(0,i.jsx)(n.li,{children:"Select the display you want to configure."}),"\n",(0,i.jsxs)(n.li,{children:["Configure the available settings as needed.\n",(0,i.jsx)(n.img,{alt:"Screen settings available in Solus Plasma",src:s(94986).Z+"",width:"1021",height:"763"})]}),"\n",(0,i.jsxs)(n.li,{children:["Click ",(0,i.jsx)(n.strong,{children:"Apply"}),"."]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"keyboard-layout",children:"Keyboard layout"}),"\n",(0,i.jsx)(n.h3,{id:"configuring-keyboard-layouts",children:"Configuring keyboard layouts"}),"\n",(0,i.jsx)(n.admonition,{title:"Important",type:"caution",children:(0,i.jsxs)(n.p,{children:["If you need to input languages that do not use Latin characters (for example, Chinese or Japanese), ",(0,i.jsx)(n.a,{href:"#using-ibus",children:"use IBus instead"}),"."]})}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["In the ",(0,i.jsx)(n.a,{href:"#opening-system-settings",children:(0,i.jsx)(n.strong,{children:"System Settings"})})," screen, go to ",(0,i.jsx)(n.strong,{children:"Input Devices"})," > ",(0,i.jsx)(n.strong,{children:"Keyboard"})," > ",(0,i.jsx)(n.strong,{children:"Layouts"}),"."]}),"\n",(0,i.jsxs)(n.p,{children:["The layouts screen appears.\n",(0,i.jsx)(n.img,{alt:"Keyboard layouts",src:s(12963).Z+"",width:"743",height:"728"})]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["Select ",(0,i.jsx)(n.strong,{children:"Configure layouts"}),"."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Configure keyboard layouts as you need."}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["To add a keyboard layout click ",(0,i.jsx)(n.strong,{children:"Add"}),", select a layout from the list, and click ",(0,i.jsx)(n.strong,{children:"OK"}),"."]}),"\n",(0,i.jsxs)(n.li,{children:["To remove a keyboard layout select a layout from the list and click ",(0,i.jsx)(n.strong,{children:"Remove"}),"."]}),"\n",(0,i.jsxs)(n.li,{children:["To order the list of keyboard layouts, select a layout from the list, then use the ",(0,i.jsx)(n.strong,{children:"Move Up"})," and ",(0,i.jsx)(n.strong,{children:"Move Down"})," buttons to reorder the list."]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["Configure a keyboard shortcut to switch between layouts by using the options under ",(0,i.jsx)(n.strong,{children:"Shortcuts for Switching Layout"}),"."]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["To use the default shortcuts Solus Plasma provides, use the ",(0,i.jsx)(n.strong,{children:"Main shortcuts"})," and ",(0,i.jsx)(n.strong,{children:"3rd level shortcuts"})," options."]}),"\n",(0,i.jsxs)(n.li,{children:["To use a custom shortcut, use the ",(0,i.jsx)(n.strong,{children:"Alternative shortcut"})," option."]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["Click ",(0,i.jsx)(n.strong,{children:"Apply"}),"."]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"using-ibus",children:"Using IBus"}),"\n",(0,i.jsx)(n.p,{children:"Solus Plasma includes IBus installed by default. However, you need to enable and integrate IBus with Plasma before usage."}),"\n",(0,i.jsx)(n.admonition,{title:"Important",type:"caution",children:(0,i.jsxs)(n.p,{children:["Using IBus overrides the configuration in the ",(0,i.jsx)(n.strong,{children:"Layouts"})," section of ",(0,i.jsx)(n.strong,{children:"System Settings"})]})}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsxs)(n.li,{children:["Open the ",(0,i.jsx)(n.code,{children:"/home/[username]/.bashrc"})," file with a text editor."]}),"\n",(0,i.jsx)(n.li,{children:"Add the following lines at the end of the file."}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{children:"export GTK_IM_MODULE=ibus\nexport QT_IM_MODULE=ibus\nexport XMODIFIERS=@im=ibus\n"})}),"\n",(0,i.jsxs)(n.ol,{start:"3",children:["\n",(0,i.jsx)(n.li,{children:"Save the file."}),"\n",(0,i.jsxs)(n.li,{children:["Configure IBus to autostart.","\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsxs)(n.li,{children:["In the ",(0,i.jsx)(n.a,{href:"#opening-system-settings",children:(0,i.jsx)(n.strong,{children:"System Settings"})})," screen, go to ",(0,i.jsx)(n.strong,{children:"Workspace"})," > ",(0,i.jsx)(n.strong,{children:"Startup and Shutdown"})," > ",(0,i.jsx)(n.strong,{children:"Autostart"}),"."]}),"\n",(0,i.jsxs)(n.li,{children:["Click ",(0,i.jsx)(n.strong,{children:"Add"}),", then ",(0,i.jsx)(n.strong,{children:"Add Application"}),"."]}),"\n",(0,i.jsxs)(n.li,{children:["In the search box, enter ",(0,i.jsx)(n.code,{children:"ibus-daemon -rxR"})," and press ",(0,i.jsx)(n.strong,{children:"OK"}),"."]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.li,{children:"Log out from your session, then log in again."}),"\n",(0,i.jsxs)(n.li,{children:["Configure keyboard layouts as you need.","\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsxs)(n.li,{children:["Open ",(0,i.jsx)(n.strong,{children:"IBus Preferences"})," from the application launcher."]}),"\n",(0,i.jsxs)(n.li,{children:["In the ",(0,i.jsx)(n.strong,{children:"Input Method"})," tab, add the keyboard layout you need."]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.admonition,{title:"Important",type:"caution",children:(0,i.jsxs)(n.p,{children:["Some keyboard layouts require ",(0,i.jsx)(n.a,{href:"/docs/user/software/localization/ibus",children:"installing additional packages"}),"."]})}),"\n",(0,i.jsx)(n.h2,{id:"mouse-and-touchpad",children:"Mouse and touchpad"}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsxs)(n.li,{children:["In the ",(0,i.jsx)(n.a,{href:"#opening-system-settings",children:(0,i.jsx)(n.strong,{children:"System Settings"})})," screen, go to the appropriate configuration screen:","\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["To configure the mouse, go to ",(0,i.jsx)(n.strong,{children:"Input Devices"})," > ",(0,i.jsx)(n.strong,{children:"Mouse"}),".\n",(0,i.jsx)(n.img,{alt:"Mouse settings",src:s(9975).Z+"",width:"749",height:"343"})]}),"\n",(0,i.jsxs)(n.li,{children:["To configure the touchpad, go to ",(0,i.jsx)(n.strong,{children:"Input Devices"})," > ",(0,i.jsx)(n.strong,{children:"Touchpad"}),".\n",(0,i.jsx)(n.img,{alt:"Touchpad settings",src:s(45608).Z+"",width:"748",height:"591"})]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.li,{children:"Configure the available settings as needed."}),"\n",(0,i.jsxs)(n.li,{children:["Click ",(0,i.jsx)(n.strong,{children:"Apply"}),"."]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"network-settings",children:"Network settings"}),"\n",(0,i.jsxs)(n.p,{children:["The ",(0,i.jsx)(n.strong,{children:"Networks"})," widget on the bottom panel allows you to perform frequent networking tasks, such as connecting to a Wi-Fi network or enabling airplane mode."]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"Networks widget",src:s(95038).Z+"",width:"460",height:"489"})}),"\n",(0,i.jsx)(n.h3,{id:"connecting-to-a-hidden-wi-fi-network",children:"Connecting to a hidden Wi-Fi network"}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["In the ",(0,i.jsx)(n.strong,{children:"System Settings"})," screen, go to ",(0,i.jsx)(n.strong,{children:"Network"})," > ",(0,i.jsx)(n.strong,{children:"Connections"}),"."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["Click the ",(0,i.jsx)(n.strong,{children:"Add new connection"})," icon (+)."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["Select ",(0,i.jsx)(n.strong,{children:"Wi-Fi"}),"."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["Click ",(0,i.jsx)(n.strong,{children:"Create"}),"."]}),"\n",(0,i.jsxs)(n.p,{children:["The ",(0,i.jsx)(n.strong,{children:"New Connection"})," window appears.\n",(0,i.jsx)(n.img,{alt:"New connection settings",src:s(37742).Z+"",width:"651",height:"656"})]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["In the ",(0,i.jsx)(n.strong,{children:"Wi-Fi"})," tab, specify the name (SSID) and basic network settings."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["In the ",(0,i.jsx)(n.strong,{children:"Wi-Fi Security"})," tab, configure the password or other authentication settings."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["Use the ",(0,i.jsx)(n.strong,{children:"IPv4"}),", ",(0,i.jsx)(n.strong,{children:"IPv6"})," and ",(0,i.jsx)(n.strong,{children:"General configuration"})," tabs to configure additional settings, such as DNS servers."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["Click ",(0,i.jsx)(n.strong,{children:"Save"}),"."]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"sound-and-sound-devices",children:"Sound and sound devices"}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"Audio Volume widget",src:s(62716).Z+"",width:"497",height:"489"})}),"\n",(0,i.jsxs)(n.p,{children:["The ",(0,i.jsx)(n.strong,{children:"Audio Volume"})," widget on the bottom panel allows you to perform the following tasks:"]}),"\n",(0,i.jsxs)(n.table,{children:[(0,i.jsx)(n.thead,{children:(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.th,{children:"Task"}),(0,i.jsx)(n.th,{children:"Description"})]})}),(0,i.jsxs)(n.tbody,{children:[(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"Select the active output device"}),(0,i.jsx)(n.td,{children:"Select any of the available output devices to change the active output device of your system."})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"Select the active input device"}),(0,i.jsx)(n.td,{children:"Select any of the available input devices to change the active input device of your system."})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"Control the volume of a device"}),(0,i.jsx)(n.td,{children:"Use the sliders to adjust the master volume of an input/output device."})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"Adjust the volume for a specific app"}),(0,i.jsxs)(n.td,{children:["The ",(0,i.jsx)(n.strong,{children:"Volume"})," tab allows you to control the volume for a specific application."]})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"Open the audio settings"}),(0,i.jsxs)(n.td,{children:["Click the ",(0,i.jsx)(n.strong,{children:"Configure Audio Devices"})," button to open the audio configuration screen in System Settings."]})]})]})]}),"\n",(0,i.jsx)(n.h2,{id:"users",children:"Users"}),"\n",(0,i.jsx)(n.h3,{id:"adding-user-accounts",children:"Adding user accounts"}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["In the ",(0,i.jsx)(n.a,{href:"#opening-system-settings",children:(0,i.jsx)(n.strong,{children:"System Settings"})})," screen, go to ",(0,i.jsx)(n.strong,{children:"Personalization"})," > ",(0,i.jsx)(n.strong,{children:"Users"}),"."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["Click ",(0,i.jsx)(n.strong,{children:"Add New User"}),"."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Configure the necessary settings."}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"Add user account",src:s(26052).Z+"",width:"752",height:"731"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["Click ",(0,i.jsx)(n.strong,{children:"Create"})]}),"\n",(0,i.jsxs)(n.p,{children:["The ",(0,i.jsx)(n.strong,{children:"Authentication Required"})," window appears."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["Specify your user password and click ",(0,i.jsx)(n.strong,{children:"OK"}),"."]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"removing-user-accounts",children:"Removing user accounts"}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["In the ",(0,i.jsx)(n.a,{href:"#opening-system-settings",children:(0,i.jsx)(n.strong,{children:"System Settings"})})," screen, go to ",(0,i.jsx)(n.strong,{children:"Personalization"})," > ",(0,i.jsx)(n.strong,{children:"Users"}),"."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Select an account from the user list."}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["Click ",(0,i.jsx)(n.strong,{children:"Delete User"}),"."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["To delete the the user account files, select ",(0,i.jsx)(n.strong,{children:"Delete files"}),"; to keep the files for posterior use, select ",(0,i.jsx)(n.strong,{children:"Keep files"}),"."]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"Keep or delete user files",src:s(2633).Z+"",width:"671",height:"525"})}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"user-interface",children:"User interface"}),"\n",(0,i.jsx)(n.h3,{id:"customizing-the-desktop",children:"Customizing the desktop"}),"\n",(0,i.jsxs)(n.p,{children:["The ",(0,i.jsx)(n.strong,{children:"Desktop Settings"})," screen allows you to customize various aspects of your desktop, such as the wallpaper and the desktop icons. To open ",(0,i.jsx)(n.strong,{children:"Desktop Settings"})," screen, right-click anywhere on the desktop and select ",(0,i.jsx)(n.strong,{children:"Configure Desktop and Wallpaper..."}),"."]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"Desktop context menu",src:s(993).Z+"",width:"537",height:"355"})}),"\n",(0,i.jsxs)(n.p,{children:["The following table describes how to customize the desktop using the ",(0,i.jsx)(n.strong,{children:"Desktop Folder Settings"})," screen."]}),"\n",(0,i.jsxs)(n.table,{children:[(0,i.jsx)(n.thead,{children:(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.th,{children:"Section"}),(0,i.jsx)(n.th,{children:"Description"})]})}),(0,i.jsxs)(n.tbody,{children:[(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"Change the wallpaper"}),(0,i.jsxs)(n.td,{children:["Go to the ",(0,i.jsx)(n.strong,{children:"Wallpaper"})," section, choose an image from the list, and click ",(0,i.jsx)(n.strong,{children:"OK"}),"."]})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"Hide the desktop icons"}),(0,i.jsxs)(n.td,{children:["Go to the ",(0,i.jsx)(n.strong,{children:"Wallpaper"})," section, change ",(0,i.jsx)(n.strong,{children:"Layout"})," to ",(0,i.jsx)(n.strong,{children:"Desktop"}),", and click ",(0,i.jsx)(n.strong,{children:"OK"}),"."]})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"Configure mouse gestures"}),(0,i.jsxs)(n.td,{children:["Go to the ",(0,i.jsx)(n.strong,{children:"Mouse Actions"})," section to setup mouse gestures."]})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"Change the folder displayed on the desktop"}),(0,i.jsxs)(n.td,{children:["Go to the ",(0,i.jsx)(n.strong,{children:"Location"})," section, select a location in your system, and click ",(0,i.jsx)(n.strong,{children:"OK"}),"."]})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"Change the appearance of the desktop icons"}),(0,i.jsxs)(n.td,{children:["Go to the ",(0,i.jsx)(n.strong,{children:"Icons"})," section, configure the necessary settings, and click ",(0,i.jsx)(n.strong,{children:"OK"}),"."]})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"Display only specific files in the desktop"}),(0,i.jsxs)(n.td,{children:["Go to the ",(0,i.jsx)(n.strong,{children:"Filter"})," section,configure the necessary settings, and click ",(0,i.jsx)(n.strong,{children:"OK"}),"."]})]})]})]}),"\n",(0,i.jsx)(n.admonition,{type:"info",children:(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Icons"})," and ",(0,i.jsx)(n.strong,{children:"Location"})," are only available when the desktop layout is set to ",(0,i.jsx)(n.strong,{children:"Folder View"}),"."]})}),"\n",(0,i.jsx)(n.h2,{id:"virtual-desktops",children:"Virtual desktops"}),"\n",(0,i.jsx)(n.p,{children:"Plasma allows you to have multiple desktops on your computer."}),"\n",(0,i.jsx)(n.p,{children:"Virtual desktops are helpful to keep tasks organized and avoid clutter. For example, you could have one virtual desktop for work, one for school, and one for personal use."}),"\n",(0,i.jsx)(n.p,{children:"Plasma arranges virtual desktops in a grid. You can configure the rows of the grid to suit your needs."}),"\n",(0,i.jsx)(n.admonition,{type:"note",children:(0,i.jsx)(n.p,{children:"Solus Plasma has one virtual desktop and one row by default."})}),"\n",(0,i.jsx)(n.h3,{id:"creating-virtual-desktops",children:"Creating virtual desktops"}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["In the ",(0,i.jsx)(n.a,{href:"#opening-system-settings",children:(0,i.jsx)(n.strong,{children:"System Settings"})})," screen, go to ",(0,i.jsx)(n.strong,{children:"Workspace"})," > ",(0,i.jsx)(n.strong,{children:"Workspace Behavior"})," > ",(0,i.jsx)(n.strong,{children:"Virtual Desktops"}),"."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Define the number of rows in the grid."}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Create a new virtual desktop."}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsxs)(n.li,{children:["Click ",(0,i.jsx)(n.strong,{children:"Add"}),"."]}),"\n",(0,i.jsxs)(n.li,{children:["(Optional) Click the ",(0,i.jsx)(n.strong,{children:"Rename"})," button to change the name of the virtual desktop."]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Repeat the previous step to add multiple virtual desktops."}),"\n",(0,i.jsx)(n.admonition,{type:"caution",children:(0,i.jsx)(n.p,{children:"Plasma arranges the desktops by the rows automatically."})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"(Optional) Configure the behavior of the virtual desktops."}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Navigation wraps around"}),": Lets you cycle through your virtual desktops in a loop using keyboard shortcuts or mouse gestures."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Show animation when switching"}),": Displays animations when switching between virtual desktops."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Show on-screen display when switching"}),": Displays the name of the current desktop when switching between desktops."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Show desktop layout indicators"}),": Displays the virtual desktop grid when you switch between desktops."]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["Click ",(0,i.jsx)(n.strong,{children:"Apply"})]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.admonition,{type:"tip",children:(0,i.jsxs)(n.p,{children:["Plasma displays the virtual desktop grid next to the application launcher button.\n",(0,i.jsx)(n.img,{alt:"Virtual desktop grid",src:s(66882).Z+"",width:"375",height:"325"})]})}),"\n",(0,i.jsx)(n.h3,{id:"switching-between-virtual-desktops",children:"Switching between virtual desktops"}),"\n",(0,i.jsx)(n.p,{children:"The following table outlines the methods to change between desktops in Solus Plasma."}),"\n",(0,i.jsxs)(n.table,{children:[(0,i.jsx)(n.thead,{children:(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.th,{children:"Method"}),(0,i.jsx)(n.th,{children:"Description"})]})}),(0,i.jsxs)(n.tbody,{children:[(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"Using the applet in the bottom panel"}),(0,i.jsx)(n.td,{children:"Use the the virtual desktop grid next to the application launcher button to change between your virtual desktops."})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"Using mouse gestures"}),(0,i.jsx)(n.td,{children:"Move the mouse pointer anywhere in the desktop, then move the mouse wheel to change between your virtual desktops."})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"Using keyboard shortcuts"}),(0,i.jsxs)(n.td,{children:["Open System Settings, go to ",(0,i.jsx)(n.strong,{children:"Workspace"})," > ",(0,i.jsx)(n.strong,{children:"Shortcuts"})," > ",(0,i.jsx)(n.strong,{children:"KWin"}),", then search for ",(0,i.jsx)(n.code,{children:"desktop"})," to see the available keyboard shortcuts to switch between virtual desktops"]})]})]})]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"Keyboard shortcuts to switch between desktops",src:s(45774).Z+"",width:"1150",height:"859"})}),"\n",(0,i.jsx)(n.admonition,{type:"note",children:(0,i.jsx)(n.p,{children:"Some of the keyboard shortcuts are disabled by default."})})]})}function h(e={}){let{wrapper:n}={...(0,r.a)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(a,{...e})}):a(e)}},26052:function(e,n,s){s.d(n,{Z:function(){return t}});let t=s.p+"assets/images/add-user-account-1e83f41522d5b43ae2f29250e52bb758.png"},62716:function(e,n,s){s.d(n,{Z:function(){return t}});let t=s.p+"assets/images/audio-widget-48a0e65d8e699ad8ca493a1e2dfcfb10.png"},60364:function(e,n,s){s.d(n,{Z:function(){return t}});let t=s.p+"assets/images/choose-application-f3747627db0cff378d7192b6c7b253f0.png"},16092:function(e,n,s){s.d(n,{Z:function(){return t}});let t=s.p+"assets/images/date-time-9e18cbfa859270a81d6973cab14ae1b6.png"},17494:function(e,n,s){s.d(n,{Z:function(){return t}});let t=s.p+"assets/images/default-apps-screen-3da638bbc4ab452b8242fb718543a132.png"},993:function(e,n,s){s.d(n,{Z:function(){return t}});let t=s.p+"assets/images/desktop-context-menu-2a7196d846dab6acdff78dacb64b3fd6.png"},26716:function(e,n,s){s.d(n,{Z:function(){return t}});let t=s.p+"assets/images/file-context-menu-default-app-0816ad4ab5c64beeef9817dad6cbaeb7.png"},2633:function(e,n,s){s.d(n,{Z:function(){return t}});let t=s.p+"assets/images/keep-delete-files-9a5622ed38b6dd5a1002312f0a7a01cd.png"},12963:function(e,n,s){s.d(n,{Z:function(){return t}});let t=s.p+"assets/images/keyboard-layouts-468ec6547841069b372a81ef4120a67b.png"},9975:function(e,n,s){s.d(n,{Z:function(){return t}});let t=s.p+"assets/images/mouse-settings-0ec1470b23397d7d0aba492f1f4806fe.png"},95038:function(e,n,s){s.d(n,{Z:function(){return t}});let t=s.p+"assets/images/networks-widget-5446dcc803349c7a20e445393930a00a.png"},37742:function(e,n,s){s.d(n,{Z:function(){return t}});let t=s.p+"assets/images/new-wifi-network-b1c4e7f299993318ae998c66b217fa69.png"},94986:function(e,n,s){s.d(n,{Z:function(){return t}});let t=s.p+"assets/images/screen-configuration-2fd6ef5f5d7a1d590ae67d553f6f58c9.png"},45774:function(e,n,s){s.d(n,{Z:function(){return t}});let t=s.p+"assets/images/switch-desktop-shortcut-list-8b9812e81259bd41b56730a22d11728b.png"},45608:function(e,n,s){s.d(n,{Z:function(){return t}});let t=s.p+"assets/images/touchpad-settings-71fa3d9caf82f2103b978f12bf73a5be.png"},66882:function(e,n,s){s.d(n,{Z:function(){return t}});let t=s.p+"assets/images/vd-grid-bb98a6b6492fe334b36271eac65b4acb.png"},50065:function(e,n,s){s.d(n,{Z:function(){return l},a:function(){return o}});var t=s(67294);let i={},r=t.createContext(i);function o(e){let n=t.useContext(r);return t.useMemo(function(){return"function"==typeof e?e(n):{...n,...e}},[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:o(e.components),t.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/cec10a63.c49b4863.js b/assets/js/cec10a63.c49b4863.js deleted file mode 100644 index c5622db1e..000000000 --- a/assets/js/cec10a63.c49b4863.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[8422],{96928:(e,s,n)=>{n.r(s),n.d(s,{assets:()=>d,contentTitle:()=>o,default:()=>h,frontMatter:()=>r,metadata:()=>l,toc:()=>c});var t=n(85893),i=n(11151);const r={title:"Configuration",summary:"Learn how to customize and configure the Plasma Desktop on Solus."},o="Configuration",l={id:"user/editions/plasma/configuration",title:"Configuration",description:"Opening System Settings",source:"@site/docs/user/editions/plasma/configuration.md",sourceDirName:"user/editions/plasma",slug:"/user/editions/plasma/configuration",permalink:"/docs/user/editions/plasma/configuration",draft:!1,unlisted:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/editions/plasma/configuration.md",tags:[],version:"current",lastUpdatedAt:1732716912e3,frontMatter:{title:"Configuration",summary:"Learn how to customize and configure the Plasma Desktop on Solus."},sidebar:"userSidebar",previous:{title:"Plasma",permalink:"/docs/user/editions/plasma/"},next:{title:"Tips and Tricks",permalink:"/docs/user/editions/plasma/tips-and-tricks"}},d={},c=[{value:"Opening System Settings",id:"opening-system-settings",level:2},{value:"Date and time",id:"date-and-time",level:2},{value:"Default Applications",id:"default-applications",level:2},{value:"Configuring default applications from System Settings",id:"configuring-default-applications-from-system-settings",level:3},{value:"Configuring default applications from the file manager",id:"configuring-default-applications-from-the-file-manager",level:3},{value:"Displays",id:"displays",level:2},{value:"Keyboard layout",id:"keyboard-layout",level:2},{value:"Configuring keyboard layouts",id:"configuring-keyboard-layouts",level:3},{value:"Using IBus",id:"using-ibus",level:3},{value:"Mouse and touchpad",id:"mouse-and-touchpad",level:2},{value:"Network settings",id:"network-settings",level:2},{value:"Connecting to a hidden Wi-Fi network",id:"connecting-to-a-hidden-wi-fi-network",level:3},{value:"Sound and sound devices",id:"sound-and-sound-devices",level:2},{value:"Users",id:"users",level:2},{value:"Adding user accounts",id:"adding-user-accounts",level:3},{value:"Removing user accounts",id:"removing-user-accounts",level:3},{value:"User interface",id:"user-interface",level:2},{value:"Customizing the desktop",id:"customizing-the-desktop",level:3},{value:"Virtual desktops",id:"virtual-desktops",level:2},{value:"Creating virtual desktops",id:"creating-virtual-desktops",level:3},{value:"Switching between virtual desktops",id:"switching-between-virtual-desktops",level:3}];function a(e){const s={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",img:"img",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,i.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(s.header,{children:(0,t.jsx)(s.h1,{id:"configuration",children:"Configuration"})}),"\n",(0,t.jsx)(s.h2,{id:"opening-system-settings",children:"Opening System Settings"}),"\n",(0,t.jsx)(s.p,{children:"You can open the system settings in Solus Plasma using any of the following methods:"}),"\n",(0,t.jsxs)(s.table,{children:[(0,t.jsx)(s.thead,{children:(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.th,{children:"Method"}),(0,t.jsx)(s.th,{children:"Description"})]})}),(0,t.jsxs)(s.tbody,{children:[(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:"Application menu"}),(0,t.jsxs)(s.td,{children:["Open the application menu and go to ",(0,t.jsx)(s.strong,{children:"Settings"})," > ",(0,t.jsx)(s.strong,{children:"System Settings"})]})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:"KRunner"}),(0,t.jsxs)(s.td,{children:["Press ",(0,t.jsx)(s.code,{children:"Alt + F2"})," or ",(0,t.jsx)(s.code,{children:"Alt + Space"}),", type ",(0,t.jsx)(s.code,{children:"systemsettings"}),", and press Enter"]})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:"Terminal"}),(0,t.jsxs)(s.td,{children:["Open a terminal window and execute ",(0,t.jsx)(s.code,{children:"systemsettings"})]})]})]})]}),"\n",(0,t.jsx)(s.h2,{id:"date-and-time",children:"Date and time"}),"\n",(0,t.jsxs)(s.ol,{children:["\n",(0,t.jsxs)(s.li,{children:["In the ",(0,t.jsx)(s.a,{href:"#opening-system-settings",children:(0,t.jsx)(s.strong,{children:"System Settings"})})," screen, go to ",(0,t.jsx)(s.strong,{children:"Personalization"})," > ",(0,t.jsx)(s.strong,{children:"Regional Settings"})," > ",(0,t.jsx)(s.strong,{children:"Date and Time"}),"."]}),"\n",(0,t.jsxs)(s.li,{children:["Configure the date and time of your system.","\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:["If you want Solus to set the date and time automatically, select ",(0,t.jsx)(s.strong,{children:"Set date and time automatically"}),"."]}),"\n",(0,t.jsxs)(s.li,{children:["If you want to set the date and time manually, clear the ",(0,t.jsx)(s.strong,{children:"Set date and time automatically"})," checkbox, then use the available controls.\n",(0,t.jsx)(s.img,{alt:"Plasma date and time settings",src:n(46488).Z+"",width:"1022",height:"730"})]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(s.li,{children:["(Optional) Configure the time zone of your system.","\n",(0,t.jsxs)(s.ol,{children:["\n",(0,t.jsxs)(s.li,{children:["Go to the ",(0,t.jsx)(s.strong,{children:"Time Zone"})," tab."]}),"\n",(0,t.jsx)(s.li,{children:"Select a time zone from the list."}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(s.li,{children:["Click ",(0,t.jsx)(s.strong,{children:"Apply"}),"."]}),"\n",(0,t.jsxs)(s.li,{children:["(Optional) Customize how the time and date display in the bottom panel.","\n",(0,t.jsxs)(s.ol,{children:["\n",(0,t.jsx)(s.li,{children:"Right-click the digital clock widget on the bottom panel."}),"\n",(0,t.jsxs)(s.li,{children:["Select ",(0,t.jsx)(s.strong,{children:"Configure Digital Clock..."})]}),"\n",(0,t.jsx)(s.li,{children:"Configure the available settings as needed."}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(s.h2,{id:"default-applications",children:"Default Applications"}),"\n",(0,t.jsx)(s.h3,{id:"configuring-default-applications-from-system-settings",children:"Configuring default applications from System Settings"}),"\n",(0,t.jsxs)(s.p,{children:["In the ",(0,t.jsx)(s.a,{href:"#opening-system-settings",children:(0,t.jsx)(s.strong,{children:"System Settings"})})," screen, go to ",(0,t.jsx)(s.strong,{children:"Personalization"})," > ",(0,t.jsx)(s.strong,{children:"Applications"})," > ",(0,t.jsx)(s.strong,{children:"Default Applications"}),", then use the menus to select your preferred default applications."]}),"\n",(0,t.jsx)(s.p,{children:(0,t.jsx)(s.img,{alt:"Default applications",src:n(74995).Z+"",width:"1022",height:"731"})}),"\n",(0,t.jsx)(s.h3,{id:"configuring-default-applications-from-the-file-manager",children:"Configuring default applications from the file manager"}),"\n",(0,t.jsxs)(s.ol,{children:["\n",(0,t.jsxs)(s.li,{children:["\n",(0,t.jsx)(s.p,{children:"Open Dolphin."}),"\n"]}),"\n",(0,t.jsxs)(s.li,{children:["\n",(0,t.jsx)(s.p,{children:"Navigate to the folder that contains the file you want to open."}),"\n"]}),"\n",(0,t.jsxs)(s.li,{children:["\n",(0,t.jsx)(s.p,{children:"Right-click the file."}),"\n",(0,t.jsx)(s.p,{children:(0,t.jsx)(s.img,{alt:"Context menu",src:n(9501).Z+"",width:"714",height:"456"})}),"\n"]}),"\n",(0,t.jsxs)(s.li,{children:["\n",(0,t.jsxs)(s.p,{children:["Go to ",(0,t.jsx)(s.strong,{children:"Open With"})," > ",(0,t.jsx)(s.strong,{children:"Other Application"}),"."]}),"\n",(0,t.jsxs)(s.p,{children:["The ",(0,t.jsx)(s.strong,{children:"Choose Application"})," dialog appears."]}),"\n"]}),"\n",(0,t.jsxs)(s.li,{children:["\n",(0,t.jsx)(s.p,{children:"Choose the application you want to use from the list."}),"\n"]}),"\n",(0,t.jsxs)(s.li,{children:["\n",(0,t.jsxs)(s.p,{children:["Select ",(0,t.jsx)(s.strong,{children:"Remember application association for all files of type [file type]"}),"."]}),"\n"]}),"\n",(0,t.jsxs)(s.li,{children:["\n",(0,t.jsxs)(s.p,{children:["Click ",(0,t.jsx)(s.strong,{children:"OK"}),"."]}),"\n",(0,t.jsx)(s.p,{children:(0,t.jsx)(s.img,{alt:"Choose application dialog",src:n(65400).Z+"",width:"373",height:"571"})}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(s.h2,{id:"displays",children:"Displays"}),"\n",(0,t.jsx)(s.admonition,{type:"tip",children:(0,t.jsxs)(s.p,{children:["Press ",(0,t.jsx)(s.code,{children:"Super + P"})," to access the screen layout settings."]})}),"\n",(0,t.jsxs)(s.ol,{children:["\n",(0,t.jsxs)(s.li,{children:["In the ",(0,t.jsx)(s.a,{href:"#opening-system-settings",children:(0,t.jsx)(s.strong,{children:"System Settings"})})," screen, go to ",(0,t.jsx)(s.strong,{children:"Hardware"})," > ",(0,t.jsx)(s.strong,{children:"Display and Monitor"})," > ",(0,t.jsx)(s.strong,{children:"Display Configuration"}),"."]}),"\n",(0,t.jsx)(s.li,{children:"Select the display you want to configure."}),"\n",(0,t.jsxs)(s.li,{children:["Configure the available settings as needed.\n",(0,t.jsx)(s.img,{alt:"Screen settings available in Solus Plasma",src:n(56304).Z+"",width:"1021",height:"763"})]}),"\n",(0,t.jsxs)(s.li,{children:["Click ",(0,t.jsx)(s.strong,{children:"Apply"}),"."]}),"\n"]}),"\n",(0,t.jsx)(s.h2,{id:"keyboard-layout",children:"Keyboard layout"}),"\n",(0,t.jsx)(s.h3,{id:"configuring-keyboard-layouts",children:"Configuring keyboard layouts"}),"\n",(0,t.jsx)(s.admonition,{title:"Important",type:"caution",children:(0,t.jsxs)(s.p,{children:["If you need to input languages that do not use Latin characters (for example, Chinese or Japanese), ",(0,t.jsx)(s.a,{href:"#using-ibus",children:"use IBus instead"}),"."]})}),"\n",(0,t.jsxs)(s.ol,{children:["\n",(0,t.jsxs)(s.li,{children:["\n",(0,t.jsxs)(s.p,{children:["In the ",(0,t.jsx)(s.a,{href:"#opening-system-settings",children:(0,t.jsx)(s.strong,{children:"System Settings"})})," screen, go to ",(0,t.jsx)(s.strong,{children:"Input Devices"})," > ",(0,t.jsx)(s.strong,{children:"Keyboard"})," > ",(0,t.jsx)(s.strong,{children:"Layouts"}),"."]}),"\n",(0,t.jsxs)(s.p,{children:["The layouts screen appears.\n",(0,t.jsx)(s.img,{alt:"Keyboard layouts",src:n(52570).Z+"",width:"743",height:"728"})]}),"\n"]}),"\n",(0,t.jsxs)(s.li,{children:["\n",(0,t.jsxs)(s.p,{children:["Select ",(0,t.jsx)(s.strong,{children:"Configure layouts"}),"."]}),"\n"]}),"\n",(0,t.jsxs)(s.li,{children:["\n",(0,t.jsx)(s.p,{children:"Configure keyboard layouts as you need."}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:["To add a keyboard layout click ",(0,t.jsx)(s.strong,{children:"Add"}),", select a layout from the list, and click ",(0,t.jsx)(s.strong,{children:"OK"}),"."]}),"\n",(0,t.jsxs)(s.li,{children:["To remove a keyboard layout select a layout from the list and click ",(0,t.jsx)(s.strong,{children:"Remove"}),"."]}),"\n",(0,t.jsxs)(s.li,{children:["To order the list of keyboard layouts, select a layout from the list, then use the ",(0,t.jsx)(s.strong,{children:"Move Up"})," and ",(0,t.jsx)(s.strong,{children:"Move Down"})," buttons to reorder the list."]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(s.li,{children:["\n",(0,t.jsxs)(s.p,{children:["Configure a keyboard shortcut to switch between layouts by using the options under ",(0,t.jsx)(s.strong,{children:"Shortcuts for Switching Layout"}),"."]}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:["To use the default shortcuts Solus Plasma provides, use the ",(0,t.jsx)(s.strong,{children:"Main shortcuts"})," and ",(0,t.jsx)(s.strong,{children:"3rd level shortcuts"})," options."]}),"\n",(0,t.jsxs)(s.li,{children:["To use a custom shortcut, use the ",(0,t.jsx)(s.strong,{children:"Alternative shortcut"})," option."]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(s.li,{children:["\n",(0,t.jsxs)(s.p,{children:["Click ",(0,t.jsx)(s.strong,{children:"Apply"}),"."]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(s.h3,{id:"using-ibus",children:"Using IBus"}),"\n",(0,t.jsx)(s.p,{children:"Solus Plasma includes IBus installed by default. However, you need to enable and integrate IBus with Plasma before usage."}),"\n",(0,t.jsx)(s.admonition,{title:"Important",type:"caution",children:(0,t.jsxs)(s.p,{children:["Using IBus overrides the configuration in the ",(0,t.jsx)(s.strong,{children:"Layouts"})," section of ",(0,t.jsx)(s.strong,{children:"System Settings"})]})}),"\n",(0,t.jsxs)(s.ol,{children:["\n",(0,t.jsxs)(s.li,{children:["Open the ",(0,t.jsx)(s.code,{children:"/home/[username]/.bashrc"})," file with a text editor."]}),"\n",(0,t.jsx)(s.li,{children:"Add the following lines at the end of the file."}),"\n"]}),"\n",(0,t.jsx)(s.pre,{children:(0,t.jsx)(s.code,{children:"export GTK_IM_MODULE=ibus\nexport QT_IM_MODULE=ibus\nexport XMODIFIERS=@im=ibus\n"})}),"\n",(0,t.jsxs)(s.ol,{start:"3",children:["\n",(0,t.jsx)(s.li,{children:"Save the file."}),"\n",(0,t.jsxs)(s.li,{children:["Configure IBus to autostart.","\n",(0,t.jsxs)(s.ol,{children:["\n",(0,t.jsxs)(s.li,{children:["In the ",(0,t.jsx)(s.a,{href:"#opening-system-settings",children:(0,t.jsx)(s.strong,{children:"System Settings"})})," screen, go to ",(0,t.jsx)(s.strong,{children:"Workspace"})," > ",(0,t.jsx)(s.strong,{children:"Startup and Shutdown"})," > ",(0,t.jsx)(s.strong,{children:"Autostart"}),"."]}),"\n",(0,t.jsxs)(s.li,{children:["Click ",(0,t.jsx)(s.strong,{children:"Add"}),", then ",(0,t.jsx)(s.strong,{children:"Add Application"}),"."]}),"\n",(0,t.jsxs)(s.li,{children:["In the search box, enter ",(0,t.jsx)(s.code,{children:"ibus-daemon -rxR"})," and press ",(0,t.jsx)(s.strong,{children:"OK"}),"."]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(s.li,{children:"Log out from your session, then log in again."}),"\n",(0,t.jsxs)(s.li,{children:["Configure keyboard layouts as you need.","\n",(0,t.jsxs)(s.ol,{children:["\n",(0,t.jsxs)(s.li,{children:["Open ",(0,t.jsx)(s.strong,{children:"IBus Preferences"})," from the application launcher."]}),"\n",(0,t.jsxs)(s.li,{children:["In the ",(0,t.jsx)(s.strong,{children:"Input Method"})," tab, add the keyboard layout you need."]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(s.admonition,{title:"Important",type:"caution",children:(0,t.jsxs)(s.p,{children:["Some keyboard layouts require ",(0,t.jsx)(s.a,{href:"/docs/user/software/localization/ibus",children:"installing additional packages"}),"."]})}),"\n",(0,t.jsx)(s.h2,{id:"mouse-and-touchpad",children:"Mouse and touchpad"}),"\n",(0,t.jsxs)(s.ol,{children:["\n",(0,t.jsxs)(s.li,{children:["In the ",(0,t.jsx)(s.a,{href:"#opening-system-settings",children:(0,t.jsx)(s.strong,{children:"System Settings"})})," screen, go to the appropriate configuration screen:","\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:["To configure the mouse, go to ",(0,t.jsx)(s.strong,{children:"Input Devices"})," > ",(0,t.jsx)(s.strong,{children:"Mouse"}),".\n",(0,t.jsx)(s.img,{alt:"Mouse settings",src:n(70080).Z+"",width:"749",height:"343"})]}),"\n",(0,t.jsxs)(s.li,{children:["To configure the touchpad, go to ",(0,t.jsx)(s.strong,{children:"Input Devices"})," > ",(0,t.jsx)(s.strong,{children:"Touchpad"}),".\n",(0,t.jsx)(s.img,{alt:"Touchpad settings",src:n(95387).Z+"",width:"748",height:"591"})]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(s.li,{children:"Configure the available settings as needed."}),"\n",(0,t.jsxs)(s.li,{children:["Click ",(0,t.jsx)(s.strong,{children:"Apply"}),"."]}),"\n"]}),"\n",(0,t.jsx)(s.h2,{id:"network-settings",children:"Network settings"}),"\n",(0,t.jsxs)(s.p,{children:["The ",(0,t.jsx)(s.strong,{children:"Networks"})," widget on the bottom panel allows you to perform frequent networking tasks, such as connecting to a Wi-Fi network or enabling airplane mode."]}),"\n",(0,t.jsx)(s.p,{children:(0,t.jsx)(s.img,{alt:"Networks widget",src:n(80253).Z+"",width:"460",height:"489"})}),"\n",(0,t.jsx)(s.h3,{id:"connecting-to-a-hidden-wi-fi-network",children:"Connecting to a hidden Wi-Fi network"}),"\n",(0,t.jsxs)(s.ol,{children:["\n",(0,t.jsxs)(s.li,{children:["\n",(0,t.jsxs)(s.p,{children:["In the ",(0,t.jsx)(s.strong,{children:"System Settings"})," screen, go to ",(0,t.jsx)(s.strong,{children:"Network"})," > ",(0,t.jsx)(s.strong,{children:"Connections"}),"."]}),"\n"]}),"\n",(0,t.jsxs)(s.li,{children:["\n",(0,t.jsxs)(s.p,{children:["Click the ",(0,t.jsx)(s.strong,{children:"Add new connection"})," icon (+)."]}),"\n"]}),"\n",(0,t.jsxs)(s.li,{children:["\n",(0,t.jsxs)(s.p,{children:["Select ",(0,t.jsx)(s.strong,{children:"Wi-Fi"}),"."]}),"\n"]}),"\n",(0,t.jsxs)(s.li,{children:["\n",(0,t.jsxs)(s.p,{children:["Click ",(0,t.jsx)(s.strong,{children:"Create"}),"."]}),"\n",(0,t.jsxs)(s.p,{children:["The ",(0,t.jsx)(s.strong,{children:"New Connection"})," window appears.\n",(0,t.jsx)(s.img,{alt:"New connection settings",src:n(98991).Z+"",width:"651",height:"656"})]}),"\n"]}),"\n",(0,t.jsxs)(s.li,{children:["\n",(0,t.jsxs)(s.p,{children:["In the ",(0,t.jsx)(s.strong,{children:"Wi-Fi"})," tab, specify the name (SSID) and basic network settings."]}),"\n"]}),"\n",(0,t.jsxs)(s.li,{children:["\n",(0,t.jsxs)(s.p,{children:["In the ",(0,t.jsx)(s.strong,{children:"Wi-Fi Security"})," tab, configure the password or other authentication settings."]}),"\n"]}),"\n",(0,t.jsxs)(s.li,{children:["\n",(0,t.jsxs)(s.p,{children:["Use the ",(0,t.jsx)(s.strong,{children:"IPv4"}),", ",(0,t.jsx)(s.strong,{children:"IPv6"})," and ",(0,t.jsx)(s.strong,{children:"General configuration"})," tabs to configure additional settings, such as DNS servers."]}),"\n"]}),"\n",(0,t.jsxs)(s.li,{children:["\n",(0,t.jsxs)(s.p,{children:["Click ",(0,t.jsx)(s.strong,{children:"Save"}),"."]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(s.h2,{id:"sound-and-sound-devices",children:"Sound and sound devices"}),"\n",(0,t.jsx)(s.p,{children:(0,t.jsx)(s.img,{alt:"Audio Volume widget",src:n(14781).Z+"",width:"497",height:"489"})}),"\n",(0,t.jsxs)(s.p,{children:["The ",(0,t.jsx)(s.strong,{children:"Audio Volume"})," widget on the bottom panel allows you to perform the following tasks:"]}),"\n",(0,t.jsxs)(s.table,{children:[(0,t.jsx)(s.thead,{children:(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.th,{children:"Task"}),(0,t.jsx)(s.th,{children:"Description"})]})}),(0,t.jsxs)(s.tbody,{children:[(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:"Select the active output device"}),(0,t.jsx)(s.td,{children:"Select any of the available output devices to change the active output device of your system."})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:"Select the active input device"}),(0,t.jsx)(s.td,{children:"Select any of the available input devices to change the active input device of your system."})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:"Control the volume of a device"}),(0,t.jsx)(s.td,{children:"Use the sliders to adjust the master volume of an input/output device."})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:"Adjust the volume for a specific app"}),(0,t.jsxs)(s.td,{children:["The ",(0,t.jsx)(s.strong,{children:"Volume"})," tab allows you to control the volume for a specific application."]})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:"Open the audio settings"}),(0,t.jsxs)(s.td,{children:["Click the ",(0,t.jsx)(s.strong,{children:"Configure Audio Devices"})," button to open the audio configuration screen in System Settings."]})]})]})]}),"\n",(0,t.jsx)(s.h2,{id:"users",children:"Users"}),"\n",(0,t.jsx)(s.h3,{id:"adding-user-accounts",children:"Adding user accounts"}),"\n",(0,t.jsxs)(s.ol,{children:["\n",(0,t.jsxs)(s.li,{children:["\n",(0,t.jsxs)(s.p,{children:["In the ",(0,t.jsx)(s.a,{href:"#opening-system-settings",children:(0,t.jsx)(s.strong,{children:"System Settings"})})," screen, go to ",(0,t.jsx)(s.strong,{children:"Personalization"})," > ",(0,t.jsx)(s.strong,{children:"Users"}),"."]}),"\n"]}),"\n",(0,t.jsxs)(s.li,{children:["\n",(0,t.jsxs)(s.p,{children:["Click ",(0,t.jsx)(s.strong,{children:"Add New User"}),"."]}),"\n"]}),"\n",(0,t.jsxs)(s.li,{children:["\n",(0,t.jsx)(s.p,{children:"Configure the necessary settings."}),"\n",(0,t.jsx)(s.p,{children:(0,t.jsx)(s.img,{alt:"Add user account",src:n(69367).Z+"",width:"752",height:"731"})}),"\n"]}),"\n",(0,t.jsxs)(s.li,{children:["\n",(0,t.jsxs)(s.p,{children:["Click ",(0,t.jsx)(s.strong,{children:"Create"})]}),"\n",(0,t.jsxs)(s.p,{children:["The ",(0,t.jsx)(s.strong,{children:"Authentication Required"})," window appears."]}),"\n"]}),"\n",(0,t.jsxs)(s.li,{children:["\n",(0,t.jsxs)(s.p,{children:["Specify your user password and click ",(0,t.jsx)(s.strong,{children:"OK"}),"."]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(s.h3,{id:"removing-user-accounts",children:"Removing user accounts"}),"\n",(0,t.jsxs)(s.ol,{children:["\n",(0,t.jsxs)(s.li,{children:["\n",(0,t.jsxs)(s.p,{children:["In the ",(0,t.jsx)(s.a,{href:"#opening-system-settings",children:(0,t.jsx)(s.strong,{children:"System Settings"})})," screen, go to ",(0,t.jsx)(s.strong,{children:"Personalization"})," > ",(0,t.jsx)(s.strong,{children:"Users"}),"."]}),"\n"]}),"\n",(0,t.jsxs)(s.li,{children:["\n",(0,t.jsx)(s.p,{children:"Select an account from the user list."}),"\n"]}),"\n",(0,t.jsxs)(s.li,{children:["\n",(0,t.jsxs)(s.p,{children:["Click ",(0,t.jsx)(s.strong,{children:"Delete User"}),"."]}),"\n"]}),"\n",(0,t.jsxs)(s.li,{children:["\n",(0,t.jsxs)(s.p,{children:["To delete the the user account files, select ",(0,t.jsx)(s.strong,{children:"Delete files"}),"; to keep the files for posterior use, select ",(0,t.jsx)(s.strong,{children:"Keep files"}),"."]}),"\n",(0,t.jsx)(s.p,{children:(0,t.jsx)(s.img,{alt:"Keep or delete user files",src:n(49300).Z+"",width:"671",height:"525"})}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(s.h2,{id:"user-interface",children:"User interface"}),"\n",(0,t.jsx)(s.h3,{id:"customizing-the-desktop",children:"Customizing the desktop"}),"\n",(0,t.jsxs)(s.p,{children:["The ",(0,t.jsx)(s.strong,{children:"Desktop Settings"})," screen allows you to customize various aspects of your desktop, such as the wallpaper and the desktop icons. To open ",(0,t.jsx)(s.strong,{children:"Desktop Settings"})," screen, right-click anywhere on the desktop and select ",(0,t.jsx)(s.strong,{children:"Configure Desktop and Wallpaper..."}),"."]}),"\n",(0,t.jsx)(s.p,{children:(0,t.jsx)(s.img,{alt:"Desktop context menu",src:n(53004).Z+"",width:"537",height:"355"})}),"\n",(0,t.jsxs)(s.p,{children:["The following table describes how to customize the desktop using the ",(0,t.jsx)(s.strong,{children:"Desktop Folder Settings"})," screen."]}),"\n",(0,t.jsxs)(s.table,{children:[(0,t.jsx)(s.thead,{children:(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.th,{children:"Section"}),(0,t.jsx)(s.th,{children:"Description"})]})}),(0,t.jsxs)(s.tbody,{children:[(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:"Change the wallpaper"}),(0,t.jsxs)(s.td,{children:["Go to the ",(0,t.jsx)(s.strong,{children:"Wallpaper"})," section, choose an image from the list, and click ",(0,t.jsx)(s.strong,{children:"OK"}),"."]})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:"Hide the desktop icons"}),(0,t.jsxs)(s.td,{children:["Go to the ",(0,t.jsx)(s.strong,{children:"Wallpaper"})," section, change ",(0,t.jsx)(s.strong,{children:"Layout"})," to ",(0,t.jsx)(s.strong,{children:"Desktop"}),", and click ",(0,t.jsx)(s.strong,{children:"OK"}),"."]})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:"Configure mouse gestures"}),(0,t.jsxs)(s.td,{children:["Go to the ",(0,t.jsx)(s.strong,{children:"Mouse Actions"})," section to setup mouse gestures."]})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:"Change the folder displayed on the desktop"}),(0,t.jsxs)(s.td,{children:["Go to the ",(0,t.jsx)(s.strong,{children:"Location"})," section, select a location in your system, and click ",(0,t.jsx)(s.strong,{children:"OK"}),"."]})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:"Change the appearance of the desktop icons"}),(0,t.jsxs)(s.td,{children:["Go to the ",(0,t.jsx)(s.strong,{children:"Icons"})," section, configure the necessary settings, and click ",(0,t.jsx)(s.strong,{children:"OK"}),"."]})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:"Display only specific files in the desktop"}),(0,t.jsxs)(s.td,{children:["Go to the ",(0,t.jsx)(s.strong,{children:"Filter"})," section,configure the necessary settings, and click ",(0,t.jsx)(s.strong,{children:"OK"}),"."]})]})]})]}),"\n",(0,t.jsx)(s.admonition,{type:"info",children:(0,t.jsxs)(s.p,{children:[(0,t.jsx)(s.strong,{children:"Icons"})," and ",(0,t.jsx)(s.strong,{children:"Location"})," are only available when the desktop layout is set to ",(0,t.jsx)(s.strong,{children:"Folder View"}),"."]})}),"\n",(0,t.jsx)(s.h2,{id:"virtual-desktops",children:"Virtual desktops"}),"\n",(0,t.jsx)(s.p,{children:"Plasma allows you to have multiple desktops on your computer."}),"\n",(0,t.jsx)(s.p,{children:"Virtual desktops are helpful to keep tasks organized and avoid clutter. For example, you could have one virtual desktop for work, one for school, and one for personal use."}),"\n",(0,t.jsx)(s.p,{children:"Plasma arranges virtual desktops in a grid. You can configure the rows of the grid to suit your needs."}),"\n",(0,t.jsx)(s.admonition,{type:"note",children:(0,t.jsx)(s.p,{children:"Solus Plasma has one virtual desktop and one row by default."})}),"\n",(0,t.jsx)(s.h3,{id:"creating-virtual-desktops",children:"Creating virtual desktops"}),"\n",(0,t.jsxs)(s.ol,{children:["\n",(0,t.jsxs)(s.li,{children:["\n",(0,t.jsxs)(s.p,{children:["In the ",(0,t.jsx)(s.a,{href:"#opening-system-settings",children:(0,t.jsx)(s.strong,{children:"System Settings"})})," screen, go to ",(0,t.jsx)(s.strong,{children:"Workspace"})," > ",(0,t.jsx)(s.strong,{children:"Workspace Behavior"})," > ",(0,t.jsx)(s.strong,{children:"Virtual Desktops"}),"."]}),"\n"]}),"\n",(0,t.jsxs)(s.li,{children:["\n",(0,t.jsx)(s.p,{children:"Define the number of rows in the grid."}),"\n"]}),"\n",(0,t.jsxs)(s.li,{children:["\n",(0,t.jsx)(s.p,{children:"Create a new virtual desktop."}),"\n",(0,t.jsxs)(s.ol,{children:["\n",(0,t.jsxs)(s.li,{children:["Click ",(0,t.jsx)(s.strong,{children:"Add"}),"."]}),"\n",(0,t.jsxs)(s.li,{children:["(Optional) Click the ",(0,t.jsx)(s.strong,{children:"Rename"})," button to change the name of the virtual desktop."]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(s.li,{children:["\n",(0,t.jsx)(s.p,{children:"Repeat the previous step to add multiple virtual desktops."}),"\n",(0,t.jsx)(s.admonition,{type:"caution",children:(0,t.jsx)(s.p,{children:"Plasma arranges the desktops by the rows automatically."})}),"\n"]}),"\n",(0,t.jsxs)(s.li,{children:["\n",(0,t.jsx)(s.p,{children:"(Optional) Configure the behavior of the virtual desktops."}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.strong,{children:"Navigation wraps around"}),": Lets you cycle through your virtual desktops in a loop using keyboard shortcuts or mouse gestures."]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.strong,{children:"Show animation when switching"}),": Displays animations when switching between virtual desktops."]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.strong,{children:"Show on-screen display when switching"}),": Displays the name of the current desktop when switching between desktops."]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.strong,{children:"Show desktop layout indicators"}),": Displays the virtual desktop grid when you switch between desktops."]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(s.li,{children:["\n",(0,t.jsxs)(s.p,{children:["Click ",(0,t.jsx)(s.strong,{children:"Apply"})]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(s.admonition,{type:"tip",children:(0,t.jsxs)(s.p,{children:["Plasma displays the virtual desktop grid next to the application launcher button.\n",(0,t.jsx)(s.img,{alt:"Virtual desktop grid",src:n(86582).Z+"",width:"375",height:"325"})]})}),"\n",(0,t.jsx)(s.h3,{id:"switching-between-virtual-desktops",children:"Switching between virtual desktops"}),"\n",(0,t.jsx)(s.p,{children:"The following table outlines the methods to change between desktops in Solus Plasma."}),"\n",(0,t.jsxs)(s.table,{children:[(0,t.jsx)(s.thead,{children:(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.th,{children:"Method"}),(0,t.jsx)(s.th,{children:"Description"})]})}),(0,t.jsxs)(s.tbody,{children:[(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:"Using the applet in the bottom panel"}),(0,t.jsx)(s.td,{children:"Use the the virtual desktop grid next to the application launcher button to change between your virtual desktops."})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:"Using mouse gestures"}),(0,t.jsx)(s.td,{children:"Move the mouse pointer anywhere in the desktop, then move the mouse wheel to change between your virtual desktops."})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:"Using keyboard shortcuts"}),(0,t.jsxs)(s.td,{children:["Open System Settings, go to ",(0,t.jsx)(s.strong,{children:"Workspace"})," > ",(0,t.jsx)(s.strong,{children:"Shortcuts"})," > ",(0,t.jsx)(s.strong,{children:"KWin"}),", then search for ",(0,t.jsx)(s.code,{children:"desktop"})," to see the available keyboard shortcuts to switch between virtual desktops"]})]})]})]}),"\n",(0,t.jsx)(s.p,{children:(0,t.jsx)(s.img,{alt:"Keyboard shortcuts to switch between desktops",src:n(79834).Z+"",width:"1150",height:"859"})}),"\n",(0,t.jsx)(s.admonition,{type:"note",children:(0,t.jsx)(s.p,{children:"Some of the keyboard shortcuts are disabled by default."})})]})}function h(e={}){const{wrapper:s}={...(0,i.a)(),...e.components};return s?(0,t.jsx)(s,{...e,children:(0,t.jsx)(a,{...e})}):a(e)}},69367:(e,s,n)=>{n.d(s,{Z:()=>t});const t=n.p+"assets/images/add-user-account-1e83f41522d5b43ae2f29250e52bb758.png"},14781:(e,s,n)=>{n.d(s,{Z:()=>t});const t=n.p+"assets/images/audio-widget-48a0e65d8e699ad8ca493a1e2dfcfb10.png"},65400:(e,s,n)=>{n.d(s,{Z:()=>t});const t=n.p+"assets/images/choose-application-f3747627db0cff378d7192b6c7b253f0.png"},46488:(e,s,n)=>{n.d(s,{Z:()=>t});const t=n.p+"assets/images/date-time-9e18cbfa859270a81d6973cab14ae1b6.png"},74995:(e,s,n)=>{n.d(s,{Z:()=>t});const t=n.p+"assets/images/default-apps-screen-3da638bbc4ab452b8242fb718543a132.png"},53004:(e,s,n)=>{n.d(s,{Z:()=>t});const t=n.p+"assets/images/desktop-context-menu-2a7196d846dab6acdff78dacb64b3fd6.png"},9501:(e,s,n)=>{n.d(s,{Z:()=>t});const t=n.p+"assets/images/file-context-menu-default-app-0816ad4ab5c64beeef9817dad6cbaeb7.png"},49300:(e,s,n)=>{n.d(s,{Z:()=>t});const t=n.p+"assets/images/keep-delete-files-9a5622ed38b6dd5a1002312f0a7a01cd.png"},52570:(e,s,n)=>{n.d(s,{Z:()=>t});const t=n.p+"assets/images/keyboard-layouts-468ec6547841069b372a81ef4120a67b.png"},70080:(e,s,n)=>{n.d(s,{Z:()=>t});const t=n.p+"assets/images/mouse-settings-0ec1470b23397d7d0aba492f1f4806fe.png"},80253:(e,s,n)=>{n.d(s,{Z:()=>t});const t=n.p+"assets/images/networks-widget-5446dcc803349c7a20e445393930a00a.png"},98991:(e,s,n)=>{n.d(s,{Z:()=>t});const t=n.p+"assets/images/new-wifi-network-b1c4e7f299993318ae998c66b217fa69.png"},56304:(e,s,n)=>{n.d(s,{Z:()=>t});const t=n.p+"assets/images/screen-configuration-2fd6ef5f5d7a1d590ae67d553f6f58c9.png"},79834:(e,s,n)=>{n.d(s,{Z:()=>t});const t=n.p+"assets/images/switch-desktop-shortcut-list-8b9812e81259bd41b56730a22d11728b.png"},95387:(e,s,n)=>{n.d(s,{Z:()=>t});const t=n.p+"assets/images/touchpad-settings-71fa3d9caf82f2103b978f12bf73a5be.png"},86582:(e,s,n)=>{n.d(s,{Z:()=>t});const t=n.p+"assets/images/vd-grid-bb98a6b6492fe334b36271eac65b4acb.png"},11151:(e,s,n)=>{n.d(s,{Z:()=>l,a:()=>o});var t=n(67294);const i={},r=t.createContext(i);function o(e){const s=t.useContext(r);return t.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function l(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:o(e.components),t.createElement(r.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/d00f7e62.20392454.js b/assets/js/d00f7e62.20392454.js deleted file mode 100644 index 5fba4cb8b..000000000 --- a/assets/js/d00f7e62.20392454.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[255],{67868:(e,n,a)=>{a.r(n),a.d(n,{assets:()=>c,contentTitle:()=>i,default:()=>p,frontMatter:()=>s,metadata:()=>r,toc:()=>l});var o=a(85893),t=a(11151);const s={title:"Your First Package Update",summary:"An example of how to build a package that exists in the Solus repos for new packagers."},i="Your First Package Update",r={id:"packaging/your-first-package-update",title:"Your First Package Update",description:"This page will guide you through the steps required to build your first package. This is really a test to make sure that your build environment is set up correctly. You will clone an existing package, build it, then install it, and finally remove it.",source:"@site/docs/packaging/your-first-package-update.md",sourceDirName:"packaging",slug:"/packaging/your-first-package-update",permalink:"/docs/packaging/your-first-package-update",draft:!1,unlisted:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/packaging/your-first-package-update.md",tags:[],version:"current",lastUpdatedAt:1732716912e3,frontMatter:{title:"Your First Package Update",summary:"An example of how to build a package that exists in the Solus repos for new packagers."},sidebar:"packagingSidebar",previous:{title:"Troubleshooting for Packagers",permalink:"/docs/packaging/troubleshooting-packaging"}},c={},l=[{value:"Cloning and building <code>nano</code>",id:"cloning-and-building-nano",level:2},{value:"Installing your new <code>nano</code> package",id:"installing-your-new-nano-package",level:2},{value:"Returning to the repository version (optional)",id:"returning-to-the-repository-version-optional",level:2}];function d(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",header:"header",p:"p",pre:"pre",...(0,t.a)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(n.header,{children:(0,o.jsx)(n.h1,{id:"your-first-package-update",children:"Your First Package Update"})}),"\n",(0,o.jsxs)(n.p,{children:["This page will guide you through the steps required to build your first package. This is really a test to make sure that your ",(0,o.jsx)(n.a,{href:"/docs/packaging/prepare-for-packaging",children:"build environment is set up correctly"}),". You will clone an existing package, build it, then install it, and finally remove it."]}),"\n",(0,o.jsxs)(n.h2,{id:"cloning-and-building-nano",children:["Cloning and building ",(0,o.jsx)(n.code,{children:"nano"})]}),"\n",(0,o.jsxs)(n.p,{children:["For this example we will use the text editor ",(0,o.jsx)(n.code,{children:"nano"}),"."]}),"\n",(0,o.jsx)(n.p,{children:"Change to your packaging directory. Your directory may have a different name or location:"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-bash",children:"cd ~/solus-packages\n"})}),"\n",(0,o.jsxs)(n.p,{children:["Switch to the directory containing the ",(0,o.jsx)(n.code,{children:"nano"})," recipe:"]}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-bash",children:"cd packages/n/nano\n"})}),"\n",(0,o.jsxs)(n.p,{children:["Alternatively, if you've set up the ",(0,o.jsx)(n.a,{href:"/docs/packaging/prepare-for-packaging#set-up-repository-helper-functions-optional",children:"Monorepo Helper Functions"})," you can replace the above to steps by these simple commands",":n"]}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-bash",children:"gotosoluspkgs\ngotopkg nano\n"})}),"\n",(0,o.jsx)(n.p,{children:'Increase the release number by one ("bump" the package) and then check the results:'}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-bash",children:"go-task bump\ngit diff\n"})}),"\n",(0,o.jsx)(n.p,{children:"You should see output from git similar to the following:"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-diff",children:"diff --git a/package.yml b/package.yml\nindex 2ff1756..4bc344c 100644\n--- a/package.yml\n+++ b/package.yml\n@@ -1,6 +1,6 @@\n name : nano\n version : '7.2'\n-release : 161\n+release : 162\n source :\n - https://www.nano-editor.org/dist/v7/nano-7.2.tar.xz : 86f3442768bd2873cec693f83cdf80b4b444ad3cc14760b74361474fc87a4526\n homepage : https://www.nano-editor.org\n"})}),"\n",(0,o.jsx)(n.p,{children:"Next, build the package:"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-bash",children:"go-task\n"})}),"\n",(0,o.jsxs)(n.p,{children:["You will be prompted to enter your password by sudo, and the ",(0,o.jsx)(n.code,{children:"solbuild"})," tool will build the package.\nIf the build is successful, you will have a ",(0,o.jsx)(n.code,{children:"nano"})," package file with a name like ",(0,o.jsx)(n.code,{children:"nano-7.2-161-1-x86_64.eopkg"}),". Run the ",(0,o.jsx)(n.code,{children:"ls"})," tool to check the exact name:"]}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-bash",children:"$ ls\nabi_used_libs files package.yml\nabi_used_symbols nano-7.2-162-1-x86_64.eopkg pspec_x86_64.xml\n"})}),"\n",(0,o.jsx)(n.p,{children:"Congratulations! You have successfully built your first package on Solus."}),"\n",(0,o.jsxs)(n.h2,{id:"installing-your-new-nano-package",children:["Installing your new ",(0,o.jsx)(n.code,{children:"nano"})," package"]}),"\n",(0,o.jsxs)(n.p,{children:["To install your new ",(0,o.jsx)(n.code,{children:"nano"})," package, run the following command. Your filename will probably be slightly different."]}),"\n",(0,o.jsx)(n.p,{children:"This is done so you can test that the package works as expected. Each package submission will require you to describe what testing you did."}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-bash",children:"sudo eopkg it nano-7.2-162-1-x86_64.eopkg\n"})}),"\n",(0,o.jsxs)(n.p,{children:["Testing ",(0,o.jsx)(n.code,{children:"nano"})," is pretty easy. Testing other packages may be more complicated, depending on what they do."]}),"\n",(0,o.jsxs)(n.p,{children:["To test your newly built ",(0,o.jsx)(n.code,{children:"nano"})," package, simply run it on command line, then make sure you can edit and save a file."]}),"\n",(0,o.jsx)(n.h2,{id:"returning-to-the-repository-version-optional",children:"Returning to the repository version (optional)"}),"\n",(0,o.jsx)(n.p,{children:"It is a good idea to remove the package you built, and return to the repository version, once you are done testing."}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-bash",children:"sudo eopkg it --reinstall nano\n"})})]})}function p(e={}){const{wrapper:n}={...(0,t.a)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(d,{...e})}):d(e)}},11151:(e,n,a)=>{a.d(n,{Z:()=>r,a:()=>i});var o=a(67294);const t={},s=o.createContext(t);function i(e){const n=o.useContext(s);return o.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function r(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:i(e.components),o.createElement(s.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/d00f7e62.c0883b3e.js b/assets/js/d00f7e62.c0883b3e.js new file mode 100644 index 000000000..d4f124226 --- /dev/null +++ b/assets/js/d00f7e62.c0883b3e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([["8332"],{55637:function(e,n,a){a.r(n),a.d(n,{metadata:()=>o,contentTitle:()=>r,default:()=>p,assets:()=>l,toc:()=>c,frontMatter:()=>s});var o=JSON.parse('{"id":"packaging/your-first-package-update","title":"Your First Package Update","description":"This page will guide you through the steps required to build your first package. This is really a test to make sure that your build environment is set up correctly. You will clone an existing package, build it, then install it, and finally remove it.","source":"@site/docs/packaging/your-first-package-update.md","sourceDirName":"packaging","slug":"/packaging/your-first-package-update","permalink":"/docs/packaging/your-first-package-update","draft":false,"unlisted":false,"editUrl":"https://github.com/getsolus/help-center-docs/tree/master/docs/packaging/your-first-package-update.md","tags":[],"version":"current","lastUpdatedAt":1733757592000,"frontMatter":{"title":"Your First Package Update","summary":"An example of how to build a package that exists in the Solus repos for new packagers."},"sidebar":"packagingSidebar","previous":{"title":"Troubleshooting for Packagers","permalink":"/docs/packaging/troubleshooting-packaging"}}'),t=a("85893"),i=a("50065");let s={title:"Your First Package Update",summary:"An example of how to build a package that exists in the Solus repos for new packagers."},r="Your First Package Update",l={},c=[{value:"Cloning and building <code>nano</code>",id:"cloning-and-building-nano",level:2},{value:"Installing your new <code>nano</code> package",id:"installing-your-new-nano-package",level:2},{value:"Returning to the repository version (optional)",id:"returning-to-the-repository-version-optional",level:2}];function d(e){let n={a:"a",code:"code",h1:"h1",h2:"h2",header:"header",p:"p",pre:"pre",...(0,i.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.header,{children:(0,t.jsx)(n.h1,{id:"your-first-package-update",children:"Your First Package Update"})}),"\n",(0,t.jsxs)(n.p,{children:["This page will guide you through the steps required to build your first package. This is really a test to make sure that your ",(0,t.jsx)(n.a,{href:"/docs/packaging/prepare-for-packaging",children:"build environment is set up correctly"}),". You will clone an existing package, build it, then install it, and finally remove it."]}),"\n",(0,t.jsxs)(n.h2,{id:"cloning-and-building-nano",children:["Cloning and building ",(0,t.jsx)(n.code,{children:"nano"})]}),"\n",(0,t.jsxs)(n.p,{children:["For this example we will use the text editor ",(0,t.jsx)(n.code,{children:"nano"}),"."]}),"\n",(0,t.jsx)(n.p,{children:"Change to your packaging directory. Your directory may have a different name or location:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"cd ~/solus-packages\n"})}),"\n",(0,t.jsxs)(n.p,{children:["Switch to the directory containing the ",(0,t.jsx)(n.code,{children:"nano"})," recipe:"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"cd packages/n/nano\n"})}),"\n",(0,t.jsxs)(n.p,{children:["Alternatively, if you've set up the ",(0,t.jsx)(n.a,{href:"/docs/packaging/prepare-for-packaging#set-up-repository-helper-functions-optional",children:"Monorepo Helper Functions"})," you can replace the above to steps by these simple commands",":n"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"gotosoluspkgs\ngotopkg nano\n"})}),"\n",(0,t.jsx)(n.p,{children:'Increase the release number by one ("bump" the package) and then check the results:'}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"go-task bump\ngit diff\n"})}),"\n",(0,t.jsx)(n.p,{children:"You should see output from git similar to the following:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-diff",children:"diff --git a/package.yml b/package.yml\nindex 2ff1756..4bc344c 100644\n--- a/package.yml\n+++ b/package.yml\n@@ -1,6 +1,6 @@\n name : nano\n version : '7.2'\n-release : 161\n+release : 162\n source :\n - https://www.nano-editor.org/dist/v7/nano-7.2.tar.xz : 86f3442768bd2873cec693f83cdf80b4b444ad3cc14760b74361474fc87a4526\n homepage : https://www.nano-editor.org\n"})}),"\n",(0,t.jsx)(n.p,{children:"Next, build the package:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"go-task\n"})}),"\n",(0,t.jsxs)(n.p,{children:["You will be prompted to enter your password by sudo, and the ",(0,t.jsx)(n.code,{children:"solbuild"})," tool will build the package.\nIf the build is successful, you will have a ",(0,t.jsx)(n.code,{children:"nano"})," package file with a name like ",(0,t.jsx)(n.code,{children:"nano-7.2-161-1-x86_64.eopkg"}),". Run the ",(0,t.jsx)(n.code,{children:"ls"})," tool to check the exact name:"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"$ ls\nabi_used_libs files package.yml\nabi_used_symbols nano-7.2-162-1-x86_64.eopkg pspec_x86_64.xml\n"})}),"\n",(0,t.jsx)(n.p,{children:"Congratulations! You have successfully built your first package on Solus."}),"\n",(0,t.jsxs)(n.h2,{id:"installing-your-new-nano-package",children:["Installing your new ",(0,t.jsx)(n.code,{children:"nano"})," package"]}),"\n",(0,t.jsxs)(n.p,{children:["To install your new ",(0,t.jsx)(n.code,{children:"nano"})," package, run the following command. Your filename will probably be slightly different."]}),"\n",(0,t.jsx)(n.p,{children:"This is done so you can test that the package works as expected. Each package submission will require you to describe what testing you did."}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"sudo eopkg it nano-7.2-162-1-x86_64.eopkg\n"})}),"\n",(0,t.jsxs)(n.p,{children:["Testing ",(0,t.jsx)(n.code,{children:"nano"})," is pretty easy. Testing other packages may be more complicated, depending on what they do."]}),"\n",(0,t.jsxs)(n.p,{children:["To test your newly built ",(0,t.jsx)(n.code,{children:"nano"})," package, simply run it on command line, then make sure you can edit and save a file."]}),"\n",(0,t.jsx)(n.h2,{id:"returning-to-the-repository-version-optional",children:"Returning to the repository version (optional)"}),"\n",(0,t.jsx)(n.p,{children:"It is a good idea to remove the package you built, and return to the repository version, once you are done testing."}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"sudo eopkg it --reinstall nano\n"})})]})}function p(e={}){let{wrapper:n}={...(0,i.a)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(d,{...e})}):d(e)}},50065:function(e,n,a){a.d(n,{Z:function(){return r},a:function(){return s}});var o=a(67294);let t={},i=o.createContext(t);function s(e){let n=o.useContext(i);return o.useMemo(function(){return"function"==typeof e?e(n):{...n,...e}},[n,e])}function r(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:s(e.components),o.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/d0d2faf6.69666dde.js b/assets/js/d0d2faf6.69666dde.js new file mode 100644 index 000000000..17a0a8d22 --- /dev/null +++ b/assets/js/d0d2faf6.69666dde.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([["7744"],{64348:function(e,s,a){a.r(s),a.d(s,{metadata:()=>t,contentTitle:()=>o,default:()=>h,assets:()=>c,toc:()=>l,frontMatter:()=>i});var t=JSON.parse('{"id":"packaging/procedures/release-processes","title":"Release Processes","description":"This post is intended as both information to users, and guidelines for developers and contributors of Solus. Solus employs a formal architecture to enable the curated rolling release model, which is made possible through the use of ferryd, solbuild and a split-repository model.","source":"@site/docs/packaging/procedures/release-processes.md","sourceDirName":"packaging/procedures","slug":"/packaging/procedures/release-processes","permalink":"/docs/packaging/procedures/release-processes","draft":false,"unlisted":false,"editUrl":"https://github.com/getsolus/help-center-docs/tree/master/docs/packaging/procedures/release-processes.md","tags":[],"version":"current","lastUpdatedAt":1733757592000,"frontMatter":{"title":"Release Processes","summary":"Release Processes"},"sidebar":"packagingSidebar","previous":{"title":"Package Inclusion Policy","permalink":"/docs/packaging/procedures/package-inclusion"},"next":{"title":"Requesting a Package Update","permalink":"/docs/packaging/procedures/request-a-package-update"}}'),n=a("85893"),r=a("50065");let i={title:"Release Processes",summary:"Release Processes"},o="Release Processes",c={},l=[{value:"Repository staging",id:"repository-staging",level:2},{value:"Weekly Sync - Every Friday",id:"weekly-sync---every-friday",level:2},{value:"Package deprecation",id:"package-deprecation",level:2},{value:"Deprecating a package",id:"deprecating-a-package",level:3},{value:"Un-deprecating a package",id:"un-deprecating-a-package",level:3},{value:"Major stack changes",id:"major-stack-changes",level:2}];function d(e){let s={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",ol:"ol",p:"p",strong:"strong",...(0,r.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(s.header,{children:(0,n.jsx)(s.h1,{id:"release-processes",children:"Release Processes"})}),"\n",(0,n.jsx)(s.p,{children:"This post is intended as both information to users, and guidelines for developers and contributors of Solus. Solus employs a formal architecture to enable the curated rolling release model, which is made possible through the use of ferryd, solbuild and a split-repository model."}),"\n",(0,n.jsx)(s.h2,{id:"repository-staging",children:"Repository staging"}),"\n",(0,n.jsxs)(s.p,{children:["All package builds for Solus, updates or otherwise, will always enter the ",(0,n.jsx)(s.code,{children:"unstable"})," repository first. Consequently, all Solus developers and contributors should ensure ",(0,n.jsx)(s.code,{children:"solbuild"})," is configured to use the unstable target. As and when the weekly stabilization efforts have completed, the ",(0,n.jsx)(s.code,{children:"unstable"})," repository will be pulled into ",(0,n.jsx)(s.code,{children:"shannon"}),", the stable target."]}),"\n",(0,n.jsxs)(s.p,{children:["This effectively means that ",(0,n.jsx)(s.code,{children:"shannon"})," is a rolling snapshot of ",(0,n.jsx)(s.code,{children:"unstable"}),". Note that the weekly sync will not make each repository match identically - the ",(0,n.jsx)(s.strong,{children:"tip"})," of every package in ",(0,n.jsx)(s.code,{children:"unstable"})," will be merged into ",(0,n.jsx)(s.code,{children:"shannon"}),". This ensures that the ",(0,n.jsx)(s.code,{children:"shannon"})," update path is cost-efficient in terms of package availability, and that the delta packages provided on ",(0,n.jsx)(s.code,{children:"shannon"})," match the true update path for those users. Lastly, this also ensures that there are no unintended packages arriving in shannon from older builds."]}),"\n",(0,n.jsxs)(s.p,{children:["Solus installations always default to the ",(0,n.jsx)(s.code,{children:"shannon"})," repository, making shannon the published distribution, and ",(0,n.jsx)(s.code,{children:"unstable"})," the development distribution."]}),"\n",(0,n.jsx)(s.h2,{id:"weekly-sync---every-friday",children:"Weekly Sync - Every Friday"}),"\n",(0,n.jsx)(s.p,{children:"At minimum there shall be one sync per week - this will always be on a Friday. As a result, users are never more than a few days away from unstable. This allows packagers to make deeper changes to Solus and still have time to stabilize the repository before releasing changes on the Friday."}),"\n",(0,n.jsxs)(s.p,{children:["Given the high volume of changes within Solus in any sync window, the Friday sync should be viewed more as a release than a simple sync. All developers and contributors should try their best to ensure that their changes do not introduce regressions, and that existing update paths are ",(0,n.jsx)(s.strong,{children:"always respected"}),"."]}),"\n",(0,n.jsx)(s.p,{children:"Minor syncs during the week, and correctional syncs shortly after the Friday-sync, are permitted assuming they do not introduce breaking changes to shannon. These may include minor packaging changes, security updates, etc."}),"\n",(0,n.jsx)(s.h2,{id:"package-deprecation",children:"Package deprecation"}),"\n",(0,n.jsx)(s.p,{children:"There are times when a package may need to be deprecated or even renamed. Packagers owning these changes must first communicate the need to ensure a coordinated deprecation."}),"\n",(0,n.jsxs)(s.p,{children:["Deprecated packages will remove themselves from the users systems as the first operation in an update or package install using the package manager, once marked as ",(0,n.jsx)(s.code,{children:"Obsolete"})," in the index."]}),"\n",(0,n.jsx)(s.h3,{id:"deprecating-a-package",children:"Deprecating a package"}),"\n",(0,n.jsx)(s.p,{children:"Follow these steps to submit a package for deprecation:"}),"\n",(0,n.jsxs)(s.ol,{children:["\n",(0,n.jsxs)(s.li,{children:["Create a new branch in the Solus ",(0,n.jsx)(s.code,{children:"packages"})," repository ",(0,n.jsx)(s.a,{href:"https://github.com/getsolus/packages",children:"on GitHub"}),' (forking it first if necessary) with a suitable name such as "deprecate-foobar"']}),"\n",(0,n.jsxs)(s.li,{children:["Edit ",(0,n.jsx)(s.code,{children:"repo_data/distribution.xml.in"})]}),"\n",(0,n.jsxs)(s.li,{children:["Add the package you wish to deprecate at the end of the ",(0,n.jsx)(s.code,{children:"<Obsoletes>"})," section"]}),"\n",(0,n.jsxs)(s.li,{children:["Change directory to repo_data (",(0,n.jsx)(s.code,{children:"cd repo_data"}),"), then run the ",(0,n.jsx)(s.code,{children:"merged_repos.sh"})," script"]}),"\n",(0,n.jsxs)(s.li,{children:["Remove the package from the Solus ",(0,n.jsx)(s.code,{children:"packages"})," repository, for example ",(0,n.jsx)(s.code,{children:"rm -fr packages/f/foobar"})]}),"\n",(0,n.jsx)(s.li,{children:"Commit and push your changes to your repository/branch"}),"\n",(0,n.jsx)(s.li,{children:"Open a Pull Request on GitHub"}),"\n"]}),"\n",(0,n.jsx)(s.h3,{id:"un-deprecating-a-package",children:"Un-deprecating a package"}),"\n",(0,n.jsx)(s.p,{children:"The above steps also apply to un-deprecating a package, with the following additions:"}),"\n",(0,n.jsxs)(s.ol,{children:["\n",(0,n.jsxs)(s.li,{children:["Create a new branch in the Solus ",(0,n.jsx)(s.code,{children:"packages"})," repository ",(0,n.jsx)(s.a,{href:"https://github.com/getsolus/packages",children:"on GitHub"}),' (forking it first if necessary) with a suitable name such as "undeprecate-foobar"']}),"\n",(0,n.jsxs)(s.li,{children:["Find the commit deprecating the package and restore the package within the repository structure. For example restore all files in packages/f/foobar or use ",(0,n.jsx)(s.code,{children:"git revert"})," if appropriate"]}),"\n",(0,n.jsxs)(s.li,{children:["Edit ",(0,n.jsx)(s.code,{children:"repo_data/distribution.xml.in"})," and remove the package you wish to undeprecate in the ",(0,n.jsx)(s.code,{children:"<Obsoletes>"})," section"]}),"\n",(0,n.jsxs)(s.li,{children:["Change directory to repo_data (",(0,n.jsx)(s.code,{children:"cd repo_data"}),"), then run the ",(0,n.jsx)(s.code,{children:"merged_repos.sh"})," script"]}),"\n",(0,n.jsxs)(s.li,{children:["Open a Pull Request on GitHub and ask a Solus Staff member to use available tooling to update the repository files, then index the repository with ",(0,n.jsx)(s.code,{children:"ferryctl index unstable"})," (or do it yourself if you have the ability)"]}),"\n",(0,n.jsx)(s.li,{children:"Bump or update the package"}),"\n"]}),"\n",(0,n.jsx)(s.h2,{id:"major-stack-changes",children:"Major stack changes"}),"\n",(0,n.jsx)(s.p,{children:"Large stack upgrades should begin as closely to the last Friday sync as possible, to ensure there is plenty of time for the work to be completed, integrated, and tested for regressions."})]})}function h(e={}){let{wrapper:s}={...(0,r.a)(),...e.components};return s?(0,n.jsx)(s,{...e,children:(0,n.jsx)(d,{...e})}):d(e)}},50065:function(e,s,a){a.d(s,{Z:function(){return o},a:function(){return i}});var t=a(67294);let n={},r=t.createContext(n);function i(e){let s=t.useContext(r);return t.useMemo(function(){return"function"==typeof e?e(s):{...s,...e}},[s,e])}function o(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:i(e.components),t.createElement(r.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/d0d2faf6.f0f9583d.js b/assets/js/d0d2faf6.f0f9583d.js deleted file mode 100644 index 77212a107..000000000 --- a/assets/js/d0d2faf6.f0f9583d.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[4507],{79267:(e,s,a)=>{a.r(s),a.d(s,{assets:()=>c,contentTitle:()=>o,default:()=>h,frontMatter:()=>r,metadata:()=>i,toc:()=>l});var t=a(85893),n=a(11151);const r={title:"Release Processes",summary:"Release Processes"},o="Release Processes",i={id:"packaging/procedures/release-processes",title:"Release Processes",description:"This post is intended as both information to users, and guidelines for developers and contributors of Solus. Solus employs a formal architecture to enable the curated rolling release model, which is made possible through the use of ferryd, solbuild and a split-repository model.",source:"@site/docs/packaging/procedures/release-processes.md",sourceDirName:"packaging/procedures",slug:"/packaging/procedures/release-processes",permalink:"/docs/packaging/procedures/release-processes",draft:!1,unlisted:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/packaging/procedures/release-processes.md",tags:[],version:"current",lastUpdatedAt:1732716912e3,frontMatter:{title:"Release Processes",summary:"Release Processes"},sidebar:"packagingSidebar",previous:{title:"Package Inclusion Policy",permalink:"/docs/packaging/procedures/package-inclusion"},next:{title:"Requesting a Package Update",permalink:"/docs/packaging/procedures/request-a-package-update"}},c={},l=[{value:"Repository staging",id:"repository-staging",level:2},{value:"Weekly Sync - Every Friday",id:"weekly-sync---every-friday",level:2},{value:"Package deprecation",id:"package-deprecation",level:2},{value:"Deprecating a package",id:"deprecating-a-package",level:3},{value:"Un-deprecating a package",id:"un-deprecating-a-package",level:3},{value:"Major stack changes",id:"major-stack-changes",level:2}];function d(e){const s={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",ol:"ol",p:"p",strong:"strong",...(0,n.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(s.header,{children:(0,t.jsx)(s.h1,{id:"release-processes",children:"Release Processes"})}),"\n",(0,t.jsx)(s.p,{children:"This post is intended as both information to users, and guidelines for developers and contributors of Solus. Solus employs a formal architecture to enable the curated rolling release model, which is made possible through the use of ferryd, solbuild and a split-repository model."}),"\n",(0,t.jsx)(s.h2,{id:"repository-staging",children:"Repository staging"}),"\n",(0,t.jsxs)(s.p,{children:["All package builds for Solus, updates or otherwise, will always enter the ",(0,t.jsx)(s.code,{children:"unstable"})," repository first. Consequently, all Solus developers and contributors should ensure ",(0,t.jsx)(s.code,{children:"solbuild"})," is configured to use the unstable target. As and when the weekly stabilization efforts have completed, the ",(0,t.jsx)(s.code,{children:"unstable"})," repository will be pulled into ",(0,t.jsx)(s.code,{children:"shannon"}),", the stable target."]}),"\n",(0,t.jsxs)(s.p,{children:["This effectively means that ",(0,t.jsx)(s.code,{children:"shannon"})," is a rolling snapshot of ",(0,t.jsx)(s.code,{children:"unstable"}),". Note that the weekly sync will not make each repository match identically - the ",(0,t.jsx)(s.strong,{children:"tip"})," of every package in ",(0,t.jsx)(s.code,{children:"unstable"})," will be merged into ",(0,t.jsx)(s.code,{children:"shannon"}),". This ensures that the ",(0,t.jsx)(s.code,{children:"shannon"})," update path is cost-efficient in terms of package availability, and that the delta packages provided on ",(0,t.jsx)(s.code,{children:"shannon"})," match the true update path for those users. Lastly, this also ensures that there are no unintended packages arriving in shannon from older builds."]}),"\n",(0,t.jsxs)(s.p,{children:["Solus installations always default to the ",(0,t.jsx)(s.code,{children:"shannon"})," repository, making shannon the published distribution, and ",(0,t.jsx)(s.code,{children:"unstable"})," the development distribution."]}),"\n",(0,t.jsx)(s.h2,{id:"weekly-sync---every-friday",children:"Weekly Sync - Every Friday"}),"\n",(0,t.jsx)(s.p,{children:"At minimum there shall be one sync per week - this will always be on a Friday. As a result, users are never more than a few days away from unstable. This allows packagers to make deeper changes to Solus and still have time to stabilize the repository before releasing changes on the Friday."}),"\n",(0,t.jsxs)(s.p,{children:["Given the high volume of changes within Solus in any sync window, the Friday sync should be viewed more as a release than a simple sync. All developers and contributors should try their best to ensure that their changes do not introduce regressions, and that existing update paths are ",(0,t.jsx)(s.strong,{children:"always respected"}),"."]}),"\n",(0,t.jsx)(s.p,{children:"Minor syncs during the week, and correctional syncs shortly after the Friday-sync, are permitted assuming they do not introduce breaking changes to shannon. These may include minor packaging changes, security updates, etc."}),"\n",(0,t.jsx)(s.h2,{id:"package-deprecation",children:"Package deprecation"}),"\n",(0,t.jsx)(s.p,{children:"There are times when a package may need to be deprecated or even renamed. Packagers owning these changes must first communicate the need to ensure a coordinated deprecation."}),"\n",(0,t.jsxs)(s.p,{children:["Deprecated packages will remove themselves from the users systems as the first operation in an update or package install using the package manager, once marked as ",(0,t.jsx)(s.code,{children:"Obsolete"})," in the index."]}),"\n",(0,t.jsx)(s.h3,{id:"deprecating-a-package",children:"Deprecating a package"}),"\n",(0,t.jsx)(s.p,{children:"Follow these steps to submit a package for deprecation:"}),"\n",(0,t.jsxs)(s.ol,{children:["\n",(0,t.jsxs)(s.li,{children:["Create a new branch in the Solus ",(0,t.jsx)(s.code,{children:"packages"})," repository ",(0,t.jsx)(s.a,{href:"https://github.com/getsolus/packages",children:"on GitHub"}),' (forking it first if necessary) with a suitable name such as "deprecate-foobar"']}),"\n",(0,t.jsxs)(s.li,{children:["Edit ",(0,t.jsx)(s.code,{children:"repo_data/distribution.xml.in"})]}),"\n",(0,t.jsxs)(s.li,{children:["Add the package you wish to deprecate at the end of the ",(0,t.jsx)(s.code,{children:"<Obsoletes>"})," section"]}),"\n",(0,t.jsxs)(s.li,{children:["Change directory to repo_data (",(0,t.jsx)(s.code,{children:"cd repo_data"}),"), then run the ",(0,t.jsx)(s.code,{children:"merged_repos.sh"})," script"]}),"\n",(0,t.jsxs)(s.li,{children:["Remove the package from the Solus ",(0,t.jsx)(s.code,{children:"packages"})," repository, for example ",(0,t.jsx)(s.code,{children:"rm -fr packages/f/foobar"})]}),"\n",(0,t.jsx)(s.li,{children:"Commit and push your changes to your repository/branch"}),"\n",(0,t.jsx)(s.li,{children:"Open a Pull Request on GitHub"}),"\n"]}),"\n",(0,t.jsx)(s.h3,{id:"un-deprecating-a-package",children:"Un-deprecating a package"}),"\n",(0,t.jsx)(s.p,{children:"The above steps also apply to un-deprecating a package, with the following additions:"}),"\n",(0,t.jsxs)(s.ol,{children:["\n",(0,t.jsxs)(s.li,{children:["Create a new branch in the Solus ",(0,t.jsx)(s.code,{children:"packages"})," repository ",(0,t.jsx)(s.a,{href:"https://github.com/getsolus/packages",children:"on GitHub"}),' (forking it first if necessary) with a suitable name such as "undeprecate-foobar"']}),"\n",(0,t.jsxs)(s.li,{children:["Find the commit deprecating the package and restore the package within the repository structure. For example restore all files in packages/f/foobar or use ",(0,t.jsx)(s.code,{children:"git revert"})," if appropriate"]}),"\n",(0,t.jsxs)(s.li,{children:["Edit ",(0,t.jsx)(s.code,{children:"repo_data/distribution.xml.in"})," and remove the package you wish to undeprecate in the ",(0,t.jsx)(s.code,{children:"<Obsoletes>"})," section"]}),"\n",(0,t.jsxs)(s.li,{children:["Change directory to repo_data (",(0,t.jsx)(s.code,{children:"cd repo_data"}),"), then run the ",(0,t.jsx)(s.code,{children:"merged_repos.sh"})," script"]}),"\n",(0,t.jsxs)(s.li,{children:["Open a Pull Request on GitHub and ask a Solus Staff member to use available tooling to update the repository files, then index the repository with ",(0,t.jsx)(s.code,{children:"ferryctl index unstable"})," (or do it yourself if you have the ability)"]}),"\n",(0,t.jsx)(s.li,{children:"Bump or update the package"}),"\n"]}),"\n",(0,t.jsx)(s.h2,{id:"major-stack-changes",children:"Major stack changes"}),"\n",(0,t.jsx)(s.p,{children:"Large stack upgrades should begin as closely to the last Friday sync as possible, to ensure there is plenty of time for the work to be completed, integrated, and tested for regressions."})]})}function h(e={}){const{wrapper:s}={...(0,n.a)(),...e.components};return s?(0,t.jsx)(s,{...e,children:(0,t.jsx)(d,{...e})}):d(e)}},11151:(e,s,a)=>{a.d(s,{Z:()=>i,a:()=>o});var t=a(67294);const n={},r=t.createContext(n);function o(e){const s=t.useContext(r);return t.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function i(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:o(e.components),t.createElement(r.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/d20919b7.02c2f2df.js b/assets/js/d20919b7.02c2f2df.js deleted file mode 100644 index ce4374597..000000000 --- a/assets/js/d20919b7.02c2f2df.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[2627],{20570:e=>{e.exports=JSON.parse('{"tag":{"label":"cleanup","permalink":"/blog/tags/cleanup","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/cleanup","page":1,"postsPerPage":1,"totalPages":1,"totalCount":1,"blogDescription":"The Solus Development (b)log!","blogTitle":"Solus DevLog"}}')}}]); \ No newline at end of file diff --git a/assets/js/d20919b7.cf59cb9e.js b/assets/js/d20919b7.cf59cb9e.js new file mode 100644 index 000000000..54ff8ce37 --- /dev/null +++ b/assets/js/d20919b7.cf59cb9e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([["3237"],{33273:function(e){e.exports=JSON.parse('{"tag":{"label":"cleanup","permalink":"/blog/tags/cleanup","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/cleanup","page":1,"postsPerPage":1,"totalPages":1,"totalCount":1,"blogDescription":"The Solus Development (b)log!","blogTitle":"Solus DevLog"}}')}}]); \ No newline at end of file diff --git a/assets/js/d2363c7a.3ca2df4f.js b/assets/js/d2363c7a.3ca2df4f.js deleted file mode 100644 index 20f137ed1..000000000 --- a/assets/js/d2363c7a.3ca2df4f.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[2741],{1629:e=>{e.exports=JSON.parse('{"author":{"name":"Muhammad Alfi Syahrin","title":"Solus Staff","page":{"permalink":"/blog/authors/alfi"},"socials":{"github":"https://github.com/malfisya"},"imageURL":"https://avatars.githubusercontent.com/u/101771435","key":"alfi","count":1},"listMetadata":{"permalink":"/blog/authors/alfi","page":1,"postsPerPage":1,"totalPages":1,"totalCount":1,"blogDescription":"The Solus Development (b)log!","blogTitle":"Solus DevLog"}}')}}]); \ No newline at end of file diff --git a/assets/js/d2363c7a.ffbb0747.js b/assets/js/d2363c7a.ffbb0747.js new file mode 100644 index 000000000..89380369d --- /dev/null +++ b/assets/js/d2363c7a.ffbb0747.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([["4154"],{1846:function(t){t.exports=JSON.parse('{"author":{"name":"Muhammad Alfi Syahrin","title":"Solus Staff","page":{"permalink":"/blog/authors/alfi"},"socials":{"github":"https://github.com/malfisya"},"imageURL":"https://avatars.githubusercontent.com/u/101771435","key":"alfi","count":1},"listMetadata":{"permalink":"/blog/authors/alfi","page":1,"postsPerPage":1,"totalPages":1,"totalCount":1,"blogDescription":"The Solus Development (b)log!","blogTitle":"Solus DevLog"}}')}}]); \ No newline at end of file diff --git a/assets/js/d4762887.462d875b.js b/assets/js/d4762887.462d875b.js deleted file mode 100644 index 5d7cbfaf6..000000000 --- a/assets/js/d4762887.462d875b.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[3624],{1108:(e,t,o)=>{o.r(t),o.d(t,{assets:()=>r,contentTitle:()=>l,default:()=>d,frontMatter:()=>i,metadata:()=>a,toc:()=>u});var s=o(85893),n=o(11151);const i={title:"Installation Issues",summary:"Troubleshooting the Solus installation process"},l="Installation Issues",a={id:"user/troubleshooting/installation",title:"Installation Issues",description:"This article covers various issues that you may come across during installation of Solus.",source:"@site/docs/user/troubleshooting/installation.md",sourceDirName:"user/troubleshooting",slug:"/user/troubleshooting/installation",permalink:"/docs/user/troubleshooting/installation",draft:!1,unlisted:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/troubleshooting/installation.md",tags:[],version:"current",lastUpdatedAt:1732716912e3,frontMatter:{title:"Installation Issues",summary:"Troubleshooting the Solus installation process"},sidebar:"userSidebar",previous:{title:"Boot Rescue",permalink:"/docs/user/troubleshooting/boot-rescue"},next:{title:"Plasma Troubleshooting",permalink:"/docs/user/troubleshooting/plasma"}},r={},u=[{value:"Can't install in EFI mode",id:"cant-install-in-efi-mode",level:2},{value:"I can't boot into Solus after installation!",id:"i-cant-boot-into-solus-after-installation",level:2},{value:"Legacy/BIOS installation",id:"legacybios-installation",level:3},{value:"EFI",id:"efi",level:3}];function c(e){const t={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",p:"p",...(0,n.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.header,{children:(0,s.jsx)(t.h1,{id:"installation-issues",children:"Installation Issues"})}),"\n",(0,s.jsx)(t.p,{children:"This article covers various issues that you may come across during installation of Solus."}),"\n",(0,s.jsx)(t.h2,{id:"cant-install-in-efi-mode",children:"Can't install in EFI mode"}),"\n",(0,s.jsxs)(t.p,{children:["The live ISO will attempt to install Solus by the same method it was booted. If it is unable to install the boot loader to the ESP, then it is likely booted in legacy mode. Ensure that the ISO has been created via a ",(0,s.jsx)(t.a,{href:"/docs/user/quick-start/installation",children:"supported method"})," and that an EFI boot is selected from the boot options."]}),"\n",(0,s.jsxs)(t.p,{children:["You can check whether the Solus ISO has booted in EFI mode by checking the for the existence of ",(0,s.jsx)(t.code,{children:"ls /sys/firmware/efi"})," (if it's not found, then it's booted in legacy mode)."]}),"\n",(0,s.jsx)(t.h2,{id:"i-cant-boot-into-solus-after-installation",children:"I can't boot into Solus after installation!"}),"\n",(0,s.jsx)(t.p,{children:"There are some misunderstandings with how legacy and EFI boot work (usually implemented as UEFI). These sections cover the common misconceptions."}),"\n",(0,s.jsx)(t.h3,{id:"legacybios-installation",children:"Legacy/BIOS installation"}),"\n",(0,s.jsx)(t.p,{children:"Legacy installations on Solus use the GRUB boot loader on an MBR disk. Only one boot loader can be used on an MBR disk, so if you haven't installed the Solus boot loader on the MBR, you will need to boot into the other OS and update GRUB prior to being able to boot Solus. This will also be required on each update of the kernel to ensure you're booting the latest release."}),"\n",(0,s.jsx)(t.h3,{id:"efi",children:"EFI"}),"\n",(0,s.jsxs)(t.p,{children:["EFI allows for multiple boot loaders to be installed, which means you can boot the Solus boot loader directly. To ensure you are booting Solus you need to boot ",(0,s.jsx)(t.code,{children:"Linux Boot Manager"})," from the EFI options. Common keys for bringing up a boot menu or the options during boot are hitting ",(0,s.jsx)(t.code,{children:"Esc/F2/F9/F10/F11/F12"})," during boot (this differs per motherboard). If a boot loader for another OS is not listed in the menu, then it is not correctly registered (and therefore not installed correctly). You can make the Solus boot menu appear via ",(0,s.jsx)(t.a,{href:"/docs/user/quick-start/boot-management#displaying-the-boot-menu-by-default-every-boot",children:"Displaying the Solus boot menu on boot"})," which should be able to boot Windows (as it's registered with UEFI properly) as well as Solus, but not other systems."]})]})}function d(e={}){const{wrapper:t}={...(0,n.a)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(c,{...e})}):c(e)}},11151:(e,t,o)=>{o.d(t,{Z:()=>a,a:()=>l});var s=o(67294);const n={},i=s.createContext(n);function l(e){const t=s.useContext(i);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:l(e.components),s.createElement(i.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/d4762887.879a74c2.js b/assets/js/d4762887.879a74c2.js new file mode 100644 index 000000000..bea2d074d --- /dev/null +++ b/assets/js/d4762887.879a74c2.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([["151"],{4984:function(e,t,o){o.r(t),o.d(t,{metadata:()=>n,contentTitle:()=>a,default:()=>d,assets:()=>r,toc:()=>u,frontMatter:()=>l});var n=JSON.parse('{"id":"user/troubleshooting/installation","title":"Installation Issues","description":"This article covers various issues that you may come across during installation of Solus.","source":"@site/docs/user/troubleshooting/installation.md","sourceDirName":"user/troubleshooting","slug":"/user/troubleshooting/installation","permalink":"/docs/user/troubleshooting/installation","draft":false,"unlisted":false,"editUrl":"https://github.com/getsolus/help-center-docs/tree/master/docs/user/troubleshooting/installation.md","tags":[],"version":"current","lastUpdatedAt":1733757592000,"frontMatter":{"title":"Installation Issues","summary":"Troubleshooting the Solus installation process"},"sidebar":"userSidebar","previous":{"title":"Boot Rescue","permalink":"/docs/user/troubleshooting/boot-rescue"},"next":{"title":"Plasma Troubleshooting","permalink":"/docs/user/troubleshooting/plasma"}}'),s=o("85893"),i=o("50065");let l={title:"Installation Issues",summary:"Troubleshooting the Solus installation process"},a="Installation Issues",r={},u=[{value:"Can't install in EFI mode",id:"cant-install-in-efi-mode",level:2},{value:"I can't boot into Solus after installation!",id:"i-cant-boot-into-solus-after-installation",level:2},{value:"Legacy/BIOS installation",id:"legacybios-installation",level:3},{value:"EFI",id:"efi",level:3}];function c(e){let t={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",p:"p",...(0,i.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.header,{children:(0,s.jsx)(t.h1,{id:"installation-issues",children:"Installation Issues"})}),"\n",(0,s.jsx)(t.p,{children:"This article covers various issues that you may come across during installation of Solus."}),"\n",(0,s.jsx)(t.h2,{id:"cant-install-in-efi-mode",children:"Can't install in EFI mode"}),"\n",(0,s.jsxs)(t.p,{children:["The live ISO will attempt to install Solus by the same method it was booted. If it is unable to install the boot loader to the ESP, then it is likely booted in legacy mode. Ensure that the ISO has been created via a ",(0,s.jsx)(t.a,{href:"/docs/user/quick-start/installation",children:"supported method"})," and that an EFI boot is selected from the boot options."]}),"\n",(0,s.jsxs)(t.p,{children:["You can check whether the Solus ISO has booted in EFI mode by checking the for the existence of ",(0,s.jsx)(t.code,{children:"ls /sys/firmware/efi"})," (if it's not found, then it's booted in legacy mode)."]}),"\n",(0,s.jsx)(t.h2,{id:"i-cant-boot-into-solus-after-installation",children:"I can't boot into Solus after installation!"}),"\n",(0,s.jsx)(t.p,{children:"There are some misunderstandings with how legacy and EFI boot work (usually implemented as UEFI). These sections cover the common misconceptions."}),"\n",(0,s.jsx)(t.h3,{id:"legacybios-installation",children:"Legacy/BIOS installation"}),"\n",(0,s.jsx)(t.p,{children:"Legacy installations on Solus use the GRUB boot loader on an MBR disk. Only one boot loader can be used on an MBR disk, so if you haven't installed the Solus boot loader on the MBR, you will need to boot into the other OS and update GRUB prior to being able to boot Solus. This will also be required on each update of the kernel to ensure you're booting the latest release."}),"\n",(0,s.jsx)(t.h3,{id:"efi",children:"EFI"}),"\n",(0,s.jsxs)(t.p,{children:["EFI allows for multiple boot loaders to be installed, which means you can boot the Solus boot loader directly. To ensure you are booting Solus you need to boot ",(0,s.jsx)(t.code,{children:"Linux Boot Manager"})," from the EFI options. Common keys for bringing up a boot menu or the options during boot are hitting ",(0,s.jsx)(t.code,{children:"Esc/F2/F9/F10/F11/F12"})," during boot (this differs per motherboard). If a boot loader for another OS is not listed in the menu, then it is not correctly registered (and therefore not installed correctly). You can make the Solus boot menu appear via ",(0,s.jsx)(t.a,{href:"/docs/user/quick-start/boot-management#displaying-the-boot-menu-by-default-every-boot",children:"Displaying the Solus boot menu on boot"})," which should be able to boot Windows (as it's registered with UEFI properly) as well as Solus, but not other systems."]})]})}function d(e={}){let{wrapper:t}={...(0,i.a)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(c,{...e})}):c(e)}},50065:function(e,t,o){o.d(t,{Z:function(){return a},a:function(){return l}});var n=o(67294);let s={},i=n.createContext(s);function l(e){let t=n.useContext(i);return n.useMemo(function(){return"function"==typeof e?e(t):{...t,...e}},[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:l(e.components),n.createElement(i.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/d5670106.484a3fb0.js b/assets/js/d5670106.484a3fb0.js deleted file mode 100644 index 22d4fbd6d..000000000 --- a/assets/js/d5670106.484a3fb0.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[1950],{60908:(e,s,o)=>{o.r(s),o.d(s,{assets:()=>c,contentTitle:()=>l,default:()=>h,frontMatter:()=>i,metadata:()=>t,toc:()=>a});var n=o(85893),r=o(11151);const i={title:"Plasma Troubleshooting",summary:"Troubleshooting Issues With the Plasma Desktop"},l="Plasma Desktop Troubleshooting",t={id:"user/troubleshooting/plasma",title:"Plasma Troubleshooting",description:"This contains fixes for various issues you might encounter with the Plasma desktop environment.",source:"@site/docs/user/troubleshooting/plasma.md",sourceDirName:"user/troubleshooting",slug:"/user/troubleshooting/plasma",permalink:"/docs/user/troubleshooting/plasma",draft:!1,unlisted:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/troubleshooting/plasma.md",tags:[],version:"current",lastUpdatedAt:1732716912e3,frontMatter:{title:"Plasma Troubleshooting",summary:"Troubleshooting Issues With the Plasma Desktop"},sidebar:"userSidebar",previous:{title:"Installation Issues",permalink:"/docs/user/troubleshooting/installation"}},c={},a=[{value:"Desktop no longer responds to clicks, cursor stuck in "move" mode (cross)",id:"desktop-no-longer-responds-to-clicks-cursor-stuck-in-move-mode-cross",level:2},{value:"Application windows look corrupt / incomplete",id:"application-windows-look-corrupt--incomplete",level:2}];function d(e){const s={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",header:"header",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,r.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(s.header,{children:(0,n.jsx)(s.h1,{id:"plasma-desktop-troubleshooting",children:"Plasma Desktop Troubleshooting"})}),"\n",(0,n.jsx)(s.p,{children:"This contains fixes for various issues you might encounter with the Plasma desktop environment."}),"\n",(0,n.jsx)(s.h2,{id:"desktop-no-longer-responds-to-clicks-cursor-stuck-in-move-mode-cross",children:'Desktop no longer responds to clicks, cursor stuck in "move" mode (cross)'}),"\n",(0,n.jsx)(s.p,{children:"This is often caused by a Firefox bug. It can be triggered by various things, like moving Firefox windows."}),"\n",(0,n.jsx)(s.p,{children:(0,n.jsx)(s.strong,{children:"Symptoms:"})}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"Can't click on anything on the desktop."}),"\n",(0,n.jsx)(s.li,{children:"Bringing up windows with keyboard shortcuts (ex: Super for the app menu, F9 for a drop down terminal) works, but they don't get focused. You can't interact with them."}),"\n",(0,n.jsx)(s.li,{children:"Mouse cursor is stuck in move mode, it looks like a cross."}),"\n"]}),"\n",(0,n.jsxs)(s.p,{children:["You may not need to reboot to recover from this state. Killing all ",(0,n.jsx)(s.code,{children:"firefox"})," processes may be all that's necessary. To do so:"]}),"\n",(0,n.jsxs)(s.ol,{children:["\n",(0,n.jsxs)(s.li,{children:["Open a virtual terminal by pressing ",(0,n.jsx)(s.code,{children:"Ctrl+Alt+F3"}),"."]}),"\n",(0,n.jsxs)(s.li,{children:["Run the following to kill all ",(0,n.jsx)(s.code,{children:"firefox"})," windows:"]}),"\n"]}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-bash",children:"killall firefox\n"})}),"\n",(0,n.jsx)(s.p,{children:"This should close all Firefox windows."}),"\n",(0,n.jsxs)(s.ol,{children:["\n",(0,n.jsxs)(s.li,{children:["Return to the Plasma session by pressing ",(0,n.jsx)(s.code,{children:"Ctrl+Alt+F2"}),".\nYou should now be able to use Plasma normally."]}),"\n"]}),"\n",(0,n.jsx)(s.h2,{id:"application-windows-look-corrupt--incomplete",children:"Application windows look corrupt / incomplete"}),"\n",(0,n.jsx)(s.p,{children:(0,n.jsx)(s.strong,{children:"Symptoms"})}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"Application windows look corrupt. For example, NeoChat does not display room or user icons."}),"\n",(0,n.jsx)(s.li,{children:"Menus in an application are blank."}),"\n"]}),"\n",(0,n.jsx)(s.p,{children:"You may be able to fix this by clearing KDE / Plasma cache files."}),"\n",(0,n.jsx)(s.admonition,{title:"Important",type:"caution",children:(0,n.jsx)(s.p,{children:"You should not be logged into your Plasma session while deleting the cache files, booting from a live USB is necessary."})}),"\n",(0,n.jsxs)(s.ol,{children:["\n",(0,n.jsx)(s.li,{children:"While still logged into your Plasma session, go to your home directory:"}),"\n"]}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-bash",children:"cd\n"})}),"\n",(0,n.jsxs)(s.ol,{children:["\n",(0,n.jsx)(s.li,{children:"Run these commands to back up the following directories:"}),"\n"]}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-bash",children:"cp -av ~/.kde{,.bak}\ncp -av ~/.config{,.bak}\ncp -av ~/.local{,.bak}\ncp -av ~/share{,.bak}\n"})}),"\n",(0,n.jsxs)(s.p,{children:["The commands create a copy of the folders. Each copy has the ",(0,n.jsx)(s.code,{children:".bak"})," extension (Example: ",(0,n.jsx)(s.code,{children:"~/.config.bak"}),"). These can be used to recover configuration files, if necessary."]}),"\n",(0,n.jsxs)(s.ol,{children:["\n",(0,n.jsx)(s.li,{children:"Shut down the system."}),"\n",(0,n.jsxs)(s.li,{children:["Boot from a live USB, which you can create from one of the ",(0,n.jsx)(s.a,{href:"https://getsol.us/download/",children:"Solus installers"}),"."]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"/docs/user/troubleshooting/boot-rescue#mounting-your-system",children:"Mount your hard drive's file system"}),"."]}),"\n",(0,n.jsxs)(s.li,{children:["Change to your user's directory where you mounted your file system. For example, if you used ",(0,n.jsx)(s.code,{children:"/mount"}),":"]}),"\n"]}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-bash",children:"cd /mount/home/username\n"})}),"\n",(0,n.jsx)(s.p,{children:'Replace "username" with the username you use for Solus.\nYou can make sure the directory is correct by listing the files:'}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-bash",children:"ls -laH\n"})}),"\n",(0,n.jsx)(s.p,{children:"You should see the files you would usually see in your home directory when logged into Solus normally."}),"\n",(0,n.jsx)(s.admonition,{title:"Important",type:"caution",children:(0,n.jsxs)(s.p,{children:["Avoid deleting the following directories: ",(0,n.jsx)(s.code,{children:"~/.kde"}),", ",(0,n.jsx)(s.code,{children:"~/.kde4"}),", ",(0,n.jsx)(s.code,{children:"~/.local"}),", and ",(0,n.jsx)(s.code,{children:"~/.config"})]})}),"\n",(0,n.jsxs)(s.ol,{children:["\n",(0,n.jsx)(s.li,{children:"Remove the various caches that Plasma uses.\nExecute the following commands:"}),"\n"]}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-bash",children:"rm -rf .cache/plasmashell*\nrm -rf .cache/org.kde.dirmodel-qml.kcache\nrm -rf .cache/kioexec/ .cache/krunner/ .cache/ksycoca5*\nrm -rf .cache/krunnerbookmarkrunnerfirefoxdbfile.sqlite\n\ncd ../.local/\nrm -rf kate/ kded5/ klipper/ knewstuff3/ kscreen/ konsole/ kwalletd/ ksysguard/ kmail2/ kcookiejar/ kactivitymanagerd/\n\ncd ../share/\nrm -rf dolphin kate kcookiejar kded5 keyrings klipper kmail2 knewstuff3 konsole kscreen ksysguard kwalletd kxmlgui5 plasma_engine_comic plasma plasma_notes org.kde.gwenview\n\ncd ../.config/\nrm -f plasma*\nrm -rf kde* akonadi* KDE kconf_updaterc baloo* dolphinrc drkonqirc gwenviewrc kmail2rc k*rc katemetainfos\n"})}),"\n",(0,n.jsxs)(s.ol,{children:["\n",(0,n.jsx)(s.li,{children:"Shut down the live environment and remove the live USB drive."}),"\n",(0,n.jsx)(s.li,{children:"Reboot back into your regular Plasma session. Verify the issue is fixed."}),"\n",(0,n.jsx)(s.li,{children:"If you experience system instability, restore the previously backed up folders."}),"\n"]}),"\n",(0,n.jsx)(s.p,{children:"To restore an entire directory:"}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{children:"cp -rav .kde.bak/share/config/ .kde/share/config\n"})}),"\n",(0,n.jsx)(s.p,{children:"After restoring the files or directories, restart your system."})]})}function h(e={}){const{wrapper:s}={...(0,r.a)(),...e.components};return s?(0,n.jsx)(s,{...e,children:(0,n.jsx)(d,{...e})}):d(e)}},11151:(e,s,o)=>{o.d(s,{Z:()=>t,a:()=>l});var n=o(67294);const r={},i=n.createContext(r);function l(e){const s=n.useContext(i);return n.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function t(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:l(e.components),n.createElement(i.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/d5670106.cbe2d220.js b/assets/js/d5670106.cbe2d220.js new file mode 100644 index 000000000..85213523c --- /dev/null +++ b/assets/js/d5670106.cbe2d220.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([["1265"],{3302:function(e,n,o){o.r(n),o.d(n,{metadata:()=>s,contentTitle:()=>t,default:()=>h,assets:()=>c,toc:()=>a,frontMatter:()=>l});var s=JSON.parse('{"id":"user/troubleshooting/plasma","title":"Plasma Troubleshooting","description":"This contains fixes for various issues you might encounter with the Plasma desktop environment.","source":"@site/docs/user/troubleshooting/plasma.md","sourceDirName":"user/troubleshooting","slug":"/user/troubleshooting/plasma","permalink":"/docs/user/troubleshooting/plasma","draft":false,"unlisted":false,"editUrl":"https://github.com/getsolus/help-center-docs/tree/master/docs/user/troubleshooting/plasma.md","tags":[],"version":"current","lastUpdatedAt":1733757592000,"frontMatter":{"title":"Plasma Troubleshooting","summary":"Troubleshooting Issues With the Plasma Desktop"},"sidebar":"userSidebar","previous":{"title":"Installation Issues","permalink":"/docs/user/troubleshooting/installation"}}'),r=o("85893"),i=o("50065");let l={title:"Plasma Troubleshooting",summary:"Troubleshooting Issues With the Plasma Desktop"},t="Plasma Desktop Troubleshooting",c={},a=[{value:"Desktop no longer responds to clicks, cursor stuck in "move" mode (cross)",id:"desktop-no-longer-responds-to-clicks-cursor-stuck-in-move-mode-cross",level:2},{value:"Application windows look corrupt / incomplete",id:"application-windows-look-corrupt--incomplete",level:2}];function d(e){let n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",header:"header",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,i.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.header,{children:(0,r.jsx)(n.h1,{id:"plasma-desktop-troubleshooting",children:"Plasma Desktop Troubleshooting"})}),"\n",(0,r.jsx)(n.p,{children:"This contains fixes for various issues you might encounter with the Plasma desktop environment."}),"\n",(0,r.jsx)(n.h2,{id:"desktop-no-longer-responds-to-clicks-cursor-stuck-in-move-mode-cross",children:'Desktop no longer responds to clicks, cursor stuck in "move" mode (cross)'}),"\n",(0,r.jsx)(n.p,{children:"This is often caused by a Firefox bug. It can be triggered by various things, like moving Firefox windows."}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"Symptoms:"})}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Can't click on anything on the desktop."}),"\n",(0,r.jsx)(n.li,{children:"Bringing up windows with keyboard shortcuts (ex: Super for the app menu, F9 for a drop down terminal) works, but they don't get focused. You can't interact with them."}),"\n",(0,r.jsx)(n.li,{children:"Mouse cursor is stuck in move mode, it looks like a cross."}),"\n"]}),"\n",(0,r.jsxs)(n.p,{children:["You may not need to reboot to recover from this state. Killing all ",(0,r.jsx)(n.code,{children:"firefox"})," processes may be all that's necessary. To do so:"]}),"\n",(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsxs)(n.li,{children:["Open a virtual terminal by pressing ",(0,r.jsx)(n.code,{children:"Ctrl+Alt+F3"}),"."]}),"\n",(0,r.jsxs)(n.li,{children:["Run the following to kill all ",(0,r.jsx)(n.code,{children:"firefox"})," windows:"]}),"\n"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"killall firefox\n"})}),"\n",(0,r.jsx)(n.p,{children:"This should close all Firefox windows."}),"\n",(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsxs)(n.li,{children:["Return to the Plasma session by pressing ",(0,r.jsx)(n.code,{children:"Ctrl+Alt+F2"}),".\nYou should now be able to use Plasma normally."]}),"\n"]}),"\n",(0,r.jsx)(n.h2,{id:"application-windows-look-corrupt--incomplete",children:"Application windows look corrupt / incomplete"}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"Symptoms"})}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Application windows look corrupt. For example, NeoChat does not display room or user icons."}),"\n",(0,r.jsx)(n.li,{children:"Menus in an application are blank."}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"You may be able to fix this by clearing KDE / Plasma cache files."}),"\n",(0,r.jsx)(n.admonition,{title:"Important",type:"caution",children:(0,r.jsx)(n.p,{children:"You should not be logged into your Plasma session while deleting the cache files, booting from a live USB is necessary."})}),"\n",(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsx)(n.li,{children:"While still logged into your Plasma session, go to your home directory:"}),"\n"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"cd\n"})}),"\n",(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsx)(n.li,{children:"Run these commands to back up the following directories:"}),"\n"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"cp -av ~/.kde{,.bak}\ncp -av ~/.config{,.bak}\ncp -av ~/.local{,.bak}\ncp -av ~/share{,.bak}\n"})}),"\n",(0,r.jsxs)(n.p,{children:["The commands create a copy of the folders. Each copy has the ",(0,r.jsx)(n.code,{children:".bak"})," extension (Example: ",(0,r.jsx)(n.code,{children:"~/.config.bak"}),"). These can be used to recover configuration files, if necessary."]}),"\n",(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsx)(n.li,{children:"Shut down the system."}),"\n",(0,r.jsxs)(n.li,{children:["Boot from a live USB, which you can create from one of the ",(0,r.jsx)(n.a,{href:"https://getsol.us/download/",children:"Solus installers"}),"."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.a,{href:"/docs/user/troubleshooting/boot-rescue#mounting-your-system",children:"Mount your hard drive's file system"}),"."]}),"\n",(0,r.jsxs)(n.li,{children:["Change to your user's directory where you mounted your file system. For example, if you used ",(0,r.jsx)(n.code,{children:"/mount"}),":"]}),"\n"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"cd /mount/home/username\n"})}),"\n",(0,r.jsx)(n.p,{children:'Replace "username" with the username you use for Solus.\nYou can make sure the directory is correct by listing the files:'}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"ls -laH\n"})}),"\n",(0,r.jsx)(n.p,{children:"You should see the files you would usually see in your home directory when logged into Solus normally."}),"\n",(0,r.jsx)(n.admonition,{title:"Important",type:"caution",children:(0,r.jsxs)(n.p,{children:["Avoid deleting the following directories: ",(0,r.jsx)(n.code,{children:"~/.kde"}),", ",(0,r.jsx)(n.code,{children:"~/.kde4"}),", ",(0,r.jsx)(n.code,{children:"~/.local"}),", and ",(0,r.jsx)(n.code,{children:"~/.config"})]})}),"\n",(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsx)(n.li,{children:"Remove the various caches that Plasma uses.\nExecute the following commands:"}),"\n"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"rm -rf .cache/plasmashell*\nrm -rf .cache/org.kde.dirmodel-qml.kcache\nrm -rf .cache/kioexec/ .cache/krunner/ .cache/ksycoca5*\nrm -rf .cache/krunnerbookmarkrunnerfirefoxdbfile.sqlite\n\ncd ../.local/\nrm -rf kate/ kded5/ klipper/ knewstuff3/ kscreen/ konsole/ kwalletd/ ksysguard/ kmail2/ kcookiejar/ kactivitymanagerd/\n\ncd ../share/\nrm -rf dolphin kate kcookiejar kded5 keyrings klipper kmail2 knewstuff3 konsole kscreen ksysguard kwalletd kxmlgui5 plasma_engine_comic plasma plasma_notes org.kde.gwenview\n\ncd ../.config/\nrm -f plasma*\nrm -rf kde* akonadi* KDE kconf_updaterc baloo* dolphinrc drkonqirc gwenviewrc kmail2rc k*rc katemetainfos\n"})}),"\n",(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsx)(n.li,{children:"Shut down the live environment and remove the live USB drive."}),"\n",(0,r.jsx)(n.li,{children:"Reboot back into your regular Plasma session. Verify the issue is fixed."}),"\n",(0,r.jsx)(n.li,{children:"If you experience system instability, restore the previously backed up folders."}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"To restore an entire directory:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{children:"cp -rav .kde.bak/share/config/ .kde/share/config\n"})}),"\n",(0,r.jsx)(n.p,{children:"After restoring the files or directories, restart your system."})]})}function h(e={}){let{wrapper:n}={...(0,i.a)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(d,{...e})}):d(e)}},50065:function(e,n,o){o.d(n,{Z:function(){return t},a:function(){return l}});var s=o(67294);let r={},i=s.createContext(r);function l(e){let n=s.useContext(i);return s.useMemo(function(){return"function"==typeof e?e(n):{...n,...e}},[n,e])}function t(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:l(e.components),s.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/d9c798e8.7a81ce36.js b/assets/js/d9c798e8.7a81ce36.js deleted file mode 100644 index 7b5e362f0..000000000 --- a/assets/js/d9c798e8.7a81ce36.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[807],{37275:e=>{e.exports=JSON.parse('{"categoryGeneratedIndex":{"title":"Peripherals","slug":"/category/peripherals","permalink":"/docs/category/peripherals","sidebar":"userSidebar","navigation":{"previous":{"title":"Apple","permalink":"/docs/user/hardware/mobile/apple"},"next":{"title":"Mice and Touchpads","permalink":"/docs/user/hardware/peripherals/mice-and-touchpads"}}}}')}}]); \ No newline at end of file diff --git a/assets/js/d9c798e8.bb19fe27.js b/assets/js/d9c798e8.bb19fe27.js new file mode 100644 index 000000000..d83cb589f --- /dev/null +++ b/assets/js/d9c798e8.bb19fe27.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([["9661"],{16618:function(e){e.exports=JSON.parse('{"categoryGeneratedIndex":{"title":"Peripherals","slug":"/category/peripherals","permalink":"/docs/category/peripherals","sidebar":"userSidebar","navigation":{"previous":{"title":"Apple","permalink":"/docs/user/hardware/mobile/apple"},"next":{"title":"Mice and Touchpads","permalink":"/docs/user/hardware/peripherals/mice-and-touchpads"}}}}')}}]); \ No newline at end of file diff --git a/assets/js/da0423b8.bc82e401.js b/assets/js/da0423b8.bc82e401.js new file mode 100644 index 000000000..24cc1d183 --- /dev/null +++ b/assets/js/da0423b8.bc82e401.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([["7469"],{81125:function(e){e.exports=JSON.parse('{"tag":{"label":"housekeeping","permalink":"/blog/tags/housekeeping","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/housekeeping","page":1,"postsPerPage":1,"totalPages":1,"totalCount":1,"blogDescription":"The Solus Development (b)log!","blogTitle":"Solus DevLog"}}')}}]); \ No newline at end of file diff --git a/assets/js/da0423b8.d2dff3fd.js b/assets/js/da0423b8.d2dff3fd.js deleted file mode 100644 index e66503a8a..000000000 --- a/assets/js/da0423b8.d2dff3fd.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[3090],{5930:e=>{e.exports=JSON.parse('{"tag":{"label":"housekeeping","permalink":"/blog/tags/housekeeping","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/housekeeping","page":1,"postsPerPage":1,"totalPages":1,"totalCount":1,"blogDescription":"The Solus Development (b)log!","blogTitle":"Solus DevLog"}}')}}]); \ No newline at end of file diff --git a/assets/js/da62f019.3506ee34.js b/assets/js/da62f019.3506ee34.js deleted file mode 100644 index c443d9c06..000000000 --- a/assets/js/da62f019.3506ee34.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[1821],{98171:e=>{e.exports=JSON.parse('{"categoryGeneratedIndex":{"title":"Quick Start","slug":"/category/quick-start","permalink":"/docs/category/quick-start","sidebar":"userSidebar","navigation":{"previous":{"title":"Welcome","permalink":"/docs/user/intro"},"next":{"title":"Boot Management","permalink":"/docs/user/quick-start/boot-management"}}}}')}}]); \ No newline at end of file diff --git a/assets/js/da62f019.a85685fc.js b/assets/js/da62f019.a85685fc.js new file mode 100644 index 000000000..1385e5b83 --- /dev/null +++ b/assets/js/da62f019.a85685fc.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([["506"],{53158:function(e){e.exports=JSON.parse('{"categoryGeneratedIndex":{"title":"Quick Start","slug":"/category/quick-start","permalink":"/docs/category/quick-start","sidebar":"userSidebar","navigation":{"previous":{"title":"Welcome","permalink":"/docs/user/intro"},"next":{"title":"Boot Management","permalink":"/docs/user/quick-start/boot-management"}}}}')}}]); \ No newline at end of file diff --git a/assets/js/dabd6b33.60a83e2a.js b/assets/js/dabd6b33.60a83e2a.js new file mode 100644 index 000000000..b2ac765b3 --- /dev/null +++ b/assets/js/dabd6b33.60a83e2a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([["8194"],{70032:function(e,o,t){t.r(o),t.d(o,{metadata:()=>n,contentTitle:()=>a,default:()=>g,assets:()=>c,toc:()=>d,frontMatter:()=>s});var n=JSON.parse('{"id":"packaging/advanced-config/eopkg-configuration","title":"Eopkg Configuration","description":"The eopkg configuration file changes how eopkg works. The first section in the config has settings for the process of building a package. The second section allows you to configure the directories that eopkg uses for various operations. Lastly, the [general] section contains settings for the general operation of eopkg.","source":"@site/docs/packaging/advanced-config/eopkg-configuration.md","sourceDirName":"packaging/advanced-config","slug":"/packaging/advanced-config/eopkg-configuration","permalink":"/docs/packaging/advanced-config/eopkg-configuration","draft":false,"unlisted":false,"editUrl":"https://github.com/getsolus/help-center-docs/tree/master/docs/packaging/advanced-config/eopkg-configuration.md","tags":[],"version":"current","lastUpdatedAt":1733757592000,"frontMatter":{"title":"Eopkg Configuration","summary":"Modifying the eopkg configuration"},"sidebar":"packagingSidebar","previous":{"title":"Advanced Configuration","permalink":"/docs/category/advanced-configuration"},"next":{"title":"Local Repository","permalink":"/docs/packaging/advanced-config/local-repository"}}'),i=t("85893"),r=t("50065");let s={title:"Eopkg Configuration",summary:"Modifying the eopkg configuration"},a="Eopkg Configuration",c={},d=[{value:"Copying the default configuration",id:"copying-the-default-configuration",level:2},{value:"Notable keys",id:"notable-keys",level:2},{value:"Restoring defaults",id:"restoring-defaults",level:2}];function l(e){let o={code:"code",h1:"h1",h2:"h2",header:"header",p:"p",pre:"pre",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,r.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(o.header,{children:(0,i.jsx)(o.h1,{id:"eopkg-configuration",children:"Eopkg Configuration"})}),"\n",(0,i.jsxs)(o.p,{children:["The ",(0,i.jsx)(o.code,{children:"eopkg"})," configuration file changes how ",(0,i.jsx)(o.code,{children:"eopkg"})," works. The first section in the config has settings for the process of building a package. The second section allows you to configure the directories that ",(0,i.jsx)(o.code,{children:"eopkg"})," uses for various operations. Lastly, the ",(0,i.jsx)(o.code,{children:"[general]"})," section contains settings for the general operation of ",(0,i.jsx)(o.code,{children:"eopkg"}),"."]}),"\n",(0,i.jsx)(o.h2,{id:"copying-the-default-configuration",children:"Copying the default configuration"}),"\n",(0,i.jsxs)(o.p,{children:["Solus aims to be a stateless operating system, so the default configuration file for ",(0,i.jsx)(o.code,{children:"eopkg"})," is saved to ",(0,i.jsx)(o.code,{children:"/usr/share/defaults/eopkg/eopkg.conf"}),". To modify the configuration, you'll have to start by copying the default configuration file into ",(0,i.jsx)(o.code,{children:"/etc/eopkg"})," so it will override the default file:"]}),"\n",(0,i.jsx)(o.pre,{children:(0,i.jsx)(o.code,{className:"language-bash",children:"sudo mkdir -p /etc/eopkg && sudo cp /usr/share/defaults/eopkg/eopkg.conf /etc/eopkg/eopkg.conf\n"})}),"\n",(0,i.jsx)(o.p,{children:"Once the file has been copied, you can edit it with your text editor of choice."}),"\n",(0,i.jsx)(o.h2,{id:"notable-keys",children:"Notable keys"}),"\n",(0,i.jsx)(o.p,{children:"Most keys in the config you'll probably want to leave untouched. However, some are useful to know about:"}),"\n",(0,i.jsxs)(o.table,{children:[(0,i.jsx)(o.thead,{children:(0,i.jsxs)(o.tr,{children:[(0,i.jsx)(o.th,{children:"Key"}),(0,i.jsx)(o.th,{children:"Description"}),(0,i.jsx)(o.th,{children:"Values"})]})}),(0,i.jsxs)(o.tbody,{children:[(0,i.jsxs)(o.tr,{children:[(0,i.jsx)(o.td,{children:"generateDebug"}),(0,i.jsx)(o.td,{children:"Whether or not debug symbol subpackages will be generated"}),(0,i.jsx)(o.td,{children:"True / False"})]}),(0,i.jsxs)(o.tr,{children:[(0,i.jsx)(o.td,{children:"jobs"}),(0,i.jsx)(o.td,{children:"How many building jobs to use when compiling the source"}),(0,i.jsx)(o.td,{children:"auto / number"})]}),(0,i.jsxs)(o.tr,{children:[(0,i.jsx)(o.td,{children:"retry_attempts"}),(0,i.jsx)(o.td,{children:"How many times to retry downloading a package during install"}),(0,i.jsx)(o.td,{children:"number"})]})]})]}),"\n",(0,i.jsx)(o.h2,{id:"restoring-defaults",children:"Restoring defaults"}),"\n",(0,i.jsxs)(o.p,{children:["If at any time you want to go back to the default configuration, simply remove the config file in ",(0,i.jsx)(o.code,{children:"/etc/eopkg"}),"."]})]})}function g(e={}){let{wrapper:o}={...(0,r.a)(),...e.components};return o?(0,i.jsx)(o,{...e,children:(0,i.jsx)(l,{...e})}):l(e)}},50065:function(e,o,t){t.d(o,{Z:function(){return a},a:function(){return s}});var n=t(67294);let i={},r=n.createContext(i);function s(e){let o=n.useContext(r);return n.useMemo(function(){return"function"==typeof e?e(o):{...o,...e}},[o,e])}function a(e){let o;return o=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:s(e.components),n.createElement(r.Provider,{value:o},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/dabd6b33.ca399a8f.js b/assets/js/dabd6b33.ca399a8f.js deleted file mode 100644 index bf07139db..000000000 --- a/assets/js/dabd6b33.ca399a8f.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[1059],{37101:(e,o,t)=>{t.r(o),t.d(o,{assets:()=>c,contentTitle:()=>r,default:()=>g,frontMatter:()=>s,metadata:()=>a,toc:()=>d});var n=t(85893),i=t(11151);const s={title:"Eopkg Configuration",summary:"Modifying the eopkg configuration"},r="Eopkg Configuration",a={id:"packaging/advanced-config/eopkg-configuration",title:"Eopkg Configuration",description:"The eopkg configuration file changes how eopkg works. The first section in the config has settings for the process of building a package. The second section allows you to configure the directories that eopkg uses for various operations. Lastly, the [general] section contains settings for the general operation of eopkg.",source:"@site/docs/packaging/advanced-config/eopkg-configuration.md",sourceDirName:"packaging/advanced-config",slug:"/packaging/advanced-config/eopkg-configuration",permalink:"/docs/packaging/advanced-config/eopkg-configuration",draft:!1,unlisted:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/packaging/advanced-config/eopkg-configuration.md",tags:[],version:"current",lastUpdatedAt:1732716912e3,frontMatter:{title:"Eopkg Configuration",summary:"Modifying the eopkg configuration"},sidebar:"packagingSidebar",previous:{title:"Advanced Configuration",permalink:"/docs/category/advanced-configuration"},next:{title:"Local Repository",permalink:"/docs/packaging/advanced-config/local-repository"}},c={},d=[{value:"Copying the default configuration",id:"copying-the-default-configuration",level:2},{value:"Notable keys",id:"notable-keys",level:2},{value:"Restoring defaults",id:"restoring-defaults",level:2}];function l(e){const o={code:"code",h1:"h1",h2:"h2",header:"header",p:"p",pre:"pre",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,i.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(o.header,{children:(0,n.jsx)(o.h1,{id:"eopkg-configuration",children:"Eopkg Configuration"})}),"\n",(0,n.jsxs)(o.p,{children:["The ",(0,n.jsx)(o.code,{children:"eopkg"})," configuration file changes how ",(0,n.jsx)(o.code,{children:"eopkg"})," works. The first section in the config has settings for the process of building a package. The second section allows you to configure the directories that ",(0,n.jsx)(o.code,{children:"eopkg"})," uses for various operations. Lastly, the ",(0,n.jsx)(o.code,{children:"[general]"})," section contains settings for the general operation of ",(0,n.jsx)(o.code,{children:"eopkg"}),"."]}),"\n",(0,n.jsx)(o.h2,{id:"copying-the-default-configuration",children:"Copying the default configuration"}),"\n",(0,n.jsxs)(o.p,{children:["Solus aims to be a stateless operating system, so the default configuration file for ",(0,n.jsx)(o.code,{children:"eopkg"})," is saved to ",(0,n.jsx)(o.code,{children:"/usr/share/defaults/eopkg/eopkg.conf"}),". To modify the configuration, you'll have to start by copying the default configuration file into ",(0,n.jsx)(o.code,{children:"/etc/eopkg"})," so it will override the default file:"]}),"\n",(0,n.jsx)(o.pre,{children:(0,n.jsx)(o.code,{className:"language-bash",children:"sudo mkdir -p /etc/eopkg && sudo cp /usr/share/defaults/eopkg/eopkg.conf /etc/eopkg/eopkg.conf\n"})}),"\n",(0,n.jsx)(o.p,{children:"Once the file has been copied, you can edit it with your text editor of choice."}),"\n",(0,n.jsx)(o.h2,{id:"notable-keys",children:"Notable keys"}),"\n",(0,n.jsx)(o.p,{children:"Most keys in the config you'll probably want to leave untouched. However, some are useful to know about:"}),"\n",(0,n.jsxs)(o.table,{children:[(0,n.jsx)(o.thead,{children:(0,n.jsxs)(o.tr,{children:[(0,n.jsx)(o.th,{children:"Key"}),(0,n.jsx)(o.th,{children:"Description"}),(0,n.jsx)(o.th,{children:"Values"})]})}),(0,n.jsxs)(o.tbody,{children:[(0,n.jsxs)(o.tr,{children:[(0,n.jsx)(o.td,{children:"generateDebug"}),(0,n.jsx)(o.td,{children:"Whether or not debug symbol subpackages will be generated"}),(0,n.jsx)(o.td,{children:"True / False"})]}),(0,n.jsxs)(o.tr,{children:[(0,n.jsx)(o.td,{children:"jobs"}),(0,n.jsx)(o.td,{children:"How many building jobs to use when compiling the source"}),(0,n.jsx)(o.td,{children:"auto / number"})]}),(0,n.jsxs)(o.tr,{children:[(0,n.jsx)(o.td,{children:"retry_attempts"}),(0,n.jsx)(o.td,{children:"How many times to retry downloading a package during install"}),(0,n.jsx)(o.td,{children:"number"})]})]})]}),"\n",(0,n.jsx)(o.h2,{id:"restoring-defaults",children:"Restoring defaults"}),"\n",(0,n.jsxs)(o.p,{children:["If at any time you want to go back to the default configuration, simply remove the config file in ",(0,n.jsx)(o.code,{children:"/etc/eopkg"}),"."]})]})}function g(e={}){const{wrapper:o}={...(0,i.a)(),...e.components};return o?(0,n.jsx)(o,{...e,children:(0,n.jsx)(l,{...e})}):l(e)}},11151:(e,o,t)=>{t.d(o,{Z:()=>a,a:()=>r});var n=t(67294);const i={},s=n.createContext(i);function r(e){const o=n.useContext(s);return n.useMemo((function(){return"function"==typeof e?e(o):{...o,...e}}),[o,e])}function a(e){let o;return o=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:r(e.components),n.createElement(s.Provider,{value:o},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/ddc41e4a.571d60b8.js b/assets/js/ddc41e4a.571d60b8.js new file mode 100644 index 000000000..b06bb3f11 --- /dev/null +++ b/assets/js/ddc41e4a.571d60b8.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([["5297"],{58737:function(e,t,n){n.r(t),n.d(t,{metadata:()=>s,contentTitle:()=>i,default:()=>l,assets:()=>d,toc:()=>a,frontMatter:()=>u});var s=JSON.parse('{"id":"user/software/sound/index","title":"Sound","description":"Solus comes with PipeWire configured by default.","source":"@site/docs/user/software/sound/index.md","sourceDirName":"user/software/sound","slug":"/user/software/sound/","permalink":"/docs/user/software/sound/","draft":false,"unlisted":false,"editUrl":"https://github.com/getsolus/help-center-docs/tree/master/docs/user/software/sound/index.md","tags":[],"version":"current","lastUpdatedAt":1733757592000,"frontMatter":{"title":"Sound","summary":"Configuration of sound systems on Solus"},"sidebar":"userSidebar","previous":{"title":"XRDP","permalink":"/docs/user/software/networking/xrdp"},"next":{"title":"Third Party","permalink":"/docs/user/software/third-party/"}}'),r=n("85893"),o=n("50065");let u={title:"Sound",summary:"Configuration of sound systems on Solus"},i="Sound",d={},a=[];function c(e){let t={h1:"h1",header:"header",p:"p",...(0,o.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.header,{children:(0,r.jsx)(t.h1,{id:"sound",children:"Sound"})}),"\n",(0,r.jsx)(t.p,{children:"Solus comes with PipeWire configured by default."})]})}function l(e={}){let{wrapper:t}={...(0,o.a)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(c,{...e})}):c(e)}},50065:function(e,t,n){n.d(t,{Z:function(){return i},a:function(){return u}});var s=n(67294);let r={},o=s.createContext(r);function u(e){let t=s.useContext(o);return s.useMemo(function(){return"function"==typeof e?e(t):{...t,...e}},[t,e])}function i(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:u(e.components),s.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/ddc41e4a.f4d67b46.js b/assets/js/ddc41e4a.f4d67b46.js deleted file mode 100644 index 8b57d82fd..000000000 --- a/assets/js/ddc41e4a.f4d67b46.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[9451],{3619:(e,t,s)=>{s.r(t),s.d(t,{assets:()=>i,contentTitle:()=>u,default:()=>l,frontMatter:()=>r,metadata:()=>d,toc:()=>a});var n=s(85893),o=s(11151);const r={title:"Sound",summary:"Configuration of sound systems on Solus"},u="Sound",d={id:"user/software/sound/index",title:"Sound",description:"Solus comes with PipeWire configured by default.",source:"@site/docs/user/software/sound/index.md",sourceDirName:"user/software/sound",slug:"/user/software/sound/",permalink:"/docs/user/software/sound/",draft:!1,unlisted:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/software/sound/index.md",tags:[],version:"current",lastUpdatedAt:1732716912e3,frontMatter:{title:"Sound",summary:"Configuration of sound systems on Solus"},sidebar:"userSidebar",previous:{title:"XRDP",permalink:"/docs/user/software/networking/xrdp"},next:{title:"Third Party",permalink:"/docs/user/software/third-party/"}},i={},a=[];function c(e){const t={h1:"h1",header:"header",p:"p",...(0,o.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.header,{children:(0,n.jsx)(t.h1,{id:"sound",children:"Sound"})}),"\n",(0,n.jsx)(t.p,{children:"Solus comes with PipeWire configured by default."})]})}function l(e={}){const{wrapper:t}={...(0,o.a)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(c,{...e})}):c(e)}},11151:(e,t,s)=>{s.d(t,{Z:()=>d,a:()=>u});var n=s(67294);const o={},r=n.createContext(o);function u(e){const t=n.useContext(r);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function d(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:u(e.components),n.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/e083e94b.534a88b9.js b/assets/js/e083e94b.534a88b9.js new file mode 100644 index 000000000..822a6a308 --- /dev/null +++ b/assets/js/e083e94b.534a88b9.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([["5826"],{37925:function(e,n,t){t.r(n),t.d(n,{metadata:()=>s,contentTitle:()=>o,default:()=>p,assets:()=>l,toc:()=>c,frontMatter:()=>r});var s=JSON.parse('{"id":"user/software/third-party/snap","title":"Snap","description":"Note that snaps are going to be removed from Solus in the future,","source":"@site/docs/user/software/third-party/snap.md","sourceDirName":"user/software/third-party","slug":"/user/software/third-party/snap","permalink":"/docs/user/software/third-party/snap","draft":false,"unlisted":false,"editUrl":"https://github.com/getsolus/help-center-docs/tree/master/docs/user/software/third-party/snap.md","tags":[],"version":"current","lastUpdatedAt":1733757592000,"frontMatter":{"title":"Snap","summary":"Working with snaps"},"sidebar":"userSidebar","previous":{"title":"Third Party","permalink":"/docs/user/software/third-party/"},"next":{"title":"Utilities","permalink":"/docs/category/utilities"}}'),a=t("85893"),i=t("50065");let r={title:"Snap",summary:"Working with snaps"},o="Snap",l={},c=[{value:"Confinement warning",id:"confinement-warning",level:2},{value:"Migrating to Flatpak",id:"migrating-to-flatpak",level:2}];function d(e){let n={a:"a",admonition:"admonition",blockquote:"blockquote",code:"code",h1:"h1",h2:"h2",header:"header",li:"li",p:"p",ul:"ul",...(0,i.a)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(n.header,{children:(0,a.jsx)(n.h1,{id:"snap",children:"Snap"})}),"\n",(0,a.jsx)(n.admonition,{type:"warning",children:(0,a.jsxs)(n.p,{children:["Note that snaps are going to be ",(0,a.jsx)(n.a,{href:"https://github.com/getsolus/packages/issues/325",children:"removed from Solus in the future"}),",\nand are not fully confined in Solus with Linux 6.9 and newer.\nSee the section on confinement below."]})}),"\n",(0,a.jsxs)(n.p,{children:[(0,a.jsx)(n.a,{href:"https://snapcraft.io/",children:"Snaps"})," are a way of installing third-party packages.\nThe ",(0,a.jsx)(n.code,{children:"snapd"})," package installs the CLI client that can be used to install and run snaps."]}),"\n",(0,a.jsx)(n.h2,{id:"confinement-warning",children:"Confinement warning"}),"\n",(0,a.jsxs)(n.p,{children:["Snaps are usually protected using ",(0,a.jsx)(n.code,{children:"strict"})," confinement,\nensuring that snaps can't access more of your system than needed.\nThe ",(0,a.jsx)(n.code,{children:"snap"})," command provided by Solus shows a warning when strict confinement is not available.\nFor example:"]}),"\n",(0,a.jsxs)(n.blockquote,{children:["\n",(0,a.jsxs)(n.p,{children:["WARNING: snap is running with partial confinement. See ",(0,a.jsx)(n.a,{href:"https://help.getsol.us/docs/user/software/third-party/snap",children:"https://help.getsol.us/docs/user/software/third-party/snap"})," for details"]}),"\n"]}),"\n",(0,a.jsxs)(n.p,{children:["We recommend ",(0,a.jsx)(n.a,{href:"#migrating-to-flatpak",children:"migrating to Flatpak"})," when possible.\nThe warning can be silenced by running ",(0,a.jsx)(n.code,{children:"sudo snap hide-confinement-warning"}),"."]}),"\n",(0,a.jsx)(n.h2,{id:"migrating-to-flatpak",children:"Migrating to Flatpak"}),"\n",(0,a.jsxs)(n.p,{children:["The ",(0,a.jsx)(n.code,{children:"unsnap"})," package can be used to migrate from snap to Flatpak.\nWhile it does not actively remove user data in ",(0,a.jsx)(n.code,{children:"~/snap"})," or ",(0,a.jsx)(n.code,{children:"/var/lib/snapd"}),",\nwe cannot guarantee that no data gets removed on accident.\nPlease ensure you have system backups that include snap data."]}),"\n",(0,a.jsxs)(n.p,{children:["Run ",(0,a.jsx)(n.code,{children:"sudo unsnap"})," before migrating to see if all your snaps have known equivalents.\nLook for lines containing ",(0,a.jsx)(n.code,{children:"No equivalent flatpak for <name> found"}),".\nCheck out ",(0,a.jsx)(n.a,{href:"https://github.com/getsolus/packages/issues/3282",children:"this issue"})," if you encounter such snaps."]}),"\n",(0,a.jsxs)(n.p,{children:["Running ",(0,a.jsx)(n.code,{children:"sudo unsnap auto"})," will migrate as many snaps to Flatpak as possible.\nIt will also uninstall ",(0,a.jsx)(n.code,{children:"snapd"})," if all snaps were migrated."]}),"\n",(0,a.jsxs)(n.p,{children:["If ",(0,a.jsx)(n.code,{children:"unsnap"})," is unable to find an equivalent Flatpak for a snap, you have the following options:"]}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsxs)(n.li,{children:["Search for an equivalent Flatpak manually, and ",(0,a.jsx)(n.a,{href:"https://github.com/getsolus/packages/issues/3282",children:"report it"})," if possible."]}),"\n",(0,a.jsx)(n.li,{children:"Install an equivalent tool from the package manager if possible."}),"\n",(0,a.jsx)(n.li,{children:"Uninstall the snap manually if it is not needed."}),"\n"]}),"\n",(0,a.jsxs)(n.p,{children:["It is possible to rerun ",(0,a.jsx)(n.code,{children:"sudo unsnap auto"})," to finish removing ",(0,a.jsx)(n.code,{children:"snapd"}),"."]})]})}function p(e={}){let{wrapper:n}={...(0,i.a)(),...e.components};return n?(0,a.jsx)(n,{...e,children:(0,a.jsx)(d,{...e})}):d(e)}},50065:function(e,n,t){t.d(n,{Z:function(){return o},a:function(){return r}});var s=t(67294);let a={},i=s.createContext(a);function r(e){let n=s.useContext(i);return s.useMemo(function(){return"function"==typeof e?e(n):{...n,...e}},[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:r(e.components),s.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/e083e94b.f1de6fb8.js b/assets/js/e083e94b.f1de6fb8.js deleted file mode 100644 index 63a826fd3..000000000 --- a/assets/js/e083e94b.f1de6fb8.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[3056],{83514:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>l,contentTitle:()=>r,default:()=>p,frontMatter:()=>i,metadata:()=>o,toc:()=>c});var t=s(85893),a=s(11151);const i={title:"Snap",summary:"Working with snaps"},r="Snap",o={id:"user/software/third-party/snap",title:"Snap",description:"Note that snaps are going to be removed from Solus in the future,",source:"@site/docs/user/software/third-party/snap.md",sourceDirName:"user/software/third-party",slug:"/user/software/third-party/snap",permalink:"/docs/user/software/third-party/snap",draft:!1,unlisted:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/software/third-party/snap.md",tags:[],version:"current",lastUpdatedAt:1732716912e3,frontMatter:{title:"Snap",summary:"Working with snaps"},sidebar:"userSidebar",previous:{title:"Third Party",permalink:"/docs/user/software/third-party/"},next:{title:"Utilities",permalink:"/docs/category/utilities"}},l={},c=[{value:"Confinement warning",id:"confinement-warning",level:2},{value:"Migrating to Flatpak",id:"migrating-to-flatpak",level:2}];function d(e){const n={a:"a",admonition:"admonition",blockquote:"blockquote",code:"code",h1:"h1",h2:"h2",header:"header",li:"li",p:"p",ul:"ul",...(0,a.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.header,{children:(0,t.jsx)(n.h1,{id:"snap",children:"Snap"})}),"\n",(0,t.jsx)(n.admonition,{type:"warning",children:(0,t.jsxs)(n.p,{children:["Note that snaps are going to be ",(0,t.jsx)(n.a,{href:"https://github.com/getsolus/packages/issues/325",children:"removed from Solus in the future"}),",\nand are not fully confined in Solus with Linux 6.9 and newer.\nSee the section on confinement below."]})}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.a,{href:"https://snapcraft.io/",children:"Snaps"})," are a way of installing third-party packages.\nThe ",(0,t.jsx)(n.code,{children:"snapd"})," package installs the CLI client that can be used to install and run snaps."]}),"\n",(0,t.jsx)(n.h2,{id:"confinement-warning",children:"Confinement warning"}),"\n",(0,t.jsxs)(n.p,{children:["Snaps are usually protected using ",(0,t.jsx)(n.code,{children:"strict"})," confinement,\nensuring that snaps can't access more of your system than needed.\nThe ",(0,t.jsx)(n.code,{children:"snap"})," command provided by Solus shows a warning when strict confinement is not available.\nFor example:"]}),"\n",(0,t.jsxs)(n.blockquote,{children:["\n",(0,t.jsxs)(n.p,{children:["WARNING: snap is running with partial confinement. See ",(0,t.jsx)(n.a,{href:"https://help.getsol.us/docs/user/software/third-party/snap",children:"https://help.getsol.us/docs/user/software/third-party/snap"})," for details"]}),"\n"]}),"\n",(0,t.jsxs)(n.p,{children:["We recommend ",(0,t.jsx)(n.a,{href:"#migrating-to-flatpak",children:"migrating to Flatpak"})," when possible.\nThe warning can be silenced by running ",(0,t.jsx)(n.code,{children:"sudo snap hide-confinement-warning"}),"."]}),"\n",(0,t.jsx)(n.h2,{id:"migrating-to-flatpak",children:"Migrating to Flatpak"}),"\n",(0,t.jsxs)(n.p,{children:["The ",(0,t.jsx)(n.code,{children:"unsnap"})," package can be used to migrate from snap to Flatpak.\nWhile it does not actively remove user data in ",(0,t.jsx)(n.code,{children:"~/snap"})," or ",(0,t.jsx)(n.code,{children:"/var/lib/snapd"}),",\nwe cannot guarantee that no data gets removed on accident.\nPlease ensure you have system backups that include snap data."]}),"\n",(0,t.jsxs)(n.p,{children:["Run ",(0,t.jsx)(n.code,{children:"sudo unsnap"})," before migrating to see if all your snaps have known equivalents.\nLook for lines containing ",(0,t.jsx)(n.code,{children:"No equivalent flatpak for <name> found"}),".\nCheck out ",(0,t.jsx)(n.a,{href:"https://github.com/getsolus/packages/issues/3282",children:"this issue"})," if you encounter such snaps."]}),"\n",(0,t.jsxs)(n.p,{children:["Running ",(0,t.jsx)(n.code,{children:"sudo unsnap auto"})," will migrate as many snaps to Flatpak as possible.\nIt will also uninstall ",(0,t.jsx)(n.code,{children:"snapd"})," if all snaps were migrated."]}),"\n",(0,t.jsxs)(n.p,{children:["If ",(0,t.jsx)(n.code,{children:"unsnap"})," is unable to find an equivalent Flatpak for a snap, you have the following options:"]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["Search for an equivalent Flatpak manually, and ",(0,t.jsx)(n.a,{href:"https://github.com/getsolus/packages/issues/3282",children:"report it"})," if possible."]}),"\n",(0,t.jsx)(n.li,{children:"Install an equivalent tool from the package manager if possible."}),"\n",(0,t.jsx)(n.li,{children:"Uninstall the snap manually if it is not needed."}),"\n"]}),"\n",(0,t.jsxs)(n.p,{children:["It is possible to rerun ",(0,t.jsx)(n.code,{children:"sudo unsnap auto"})," to finish removing ",(0,t.jsx)(n.code,{children:"snapd"}),"."]})]})}function p(e={}){const{wrapper:n}={...(0,a.a)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(d,{...e})}):d(e)}},11151:(e,n,s)=>{s.d(n,{Z:()=>o,a:()=>r});var t=s(67294);const a={},i=t.createContext(a);function r(e){const n=t.useContext(i);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:r(e.components),t.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/e4134e95.baf1413e.js b/assets/js/e4134e95.baf1413e.js new file mode 100644 index 000000000..438030b3b --- /dev/null +++ b/assets/js/e4134e95.baf1413e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([["3928"],{42288:function(e){e.exports=JSON.parse('{"tag":{"label":"devlog","permalink":"/blog/tags/devlog","allTagsPath":"/blog/tags","count":4,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/devlog","page":1,"postsPerPage":4,"totalPages":1,"totalCount":4,"blogDescription":"The Solus Development (b)log!","blogTitle":"Solus DevLog"}}')}}]); \ No newline at end of file diff --git a/assets/js/e4134e95.e4a2ef15.js b/assets/js/e4134e95.e4a2ef15.js deleted file mode 100644 index a5e047f21..000000000 --- a/assets/js/e4134e95.e4a2ef15.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[8621],{80700:e=>{e.exports=JSON.parse('{"tag":{"label":"devlog","permalink":"/blog/tags/devlog","allTagsPath":"/blog/tags","count":4,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/devlog","page":1,"postsPerPage":4,"totalPages":1,"totalCount":4,"blogDescription":"The Solus Development (b)log!","blogTitle":"Solus DevLog"}}')}}]); \ No newline at end of file diff --git a/assets/js/e5595530.3c3b46b7.js b/assets/js/e5595530.3c3b46b7.js deleted file mode 100644 index 50af604ad..000000000 --- a/assets/js/e5595530.3c3b46b7.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[1648],{4183:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>i,contentTitle:()=>s,default:()=>h,frontMatter:()=>l,metadata:()=>d,toc:()=>a});var r=n(85893),o=n(11151);const l={title:"Boot Management",summary:"Guide to customizing the Solus boot process"},s="Boot Management",d={id:"user/quick-start/boot-management",title:"Boot Management",description:"clr-boot-manager",source:"@site/docs/user/quick-start/boot-management.md",sourceDirName:"user/quick-start",slug:"/user/quick-start/boot-management",permalink:"/docs/user/quick-start/boot-management",draft:!1,unlisted:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/quick-start/boot-management.md",tags:[],version:"current",lastUpdatedAt:1732716912e3,frontMatter:{title:"Boot Management",summary:"Guide to customizing the Solus boot process"},sidebar:"userSidebar",previous:{title:"Quick Start",permalink:"/docs/category/quick-start"},next:{title:"Default Applications",permalink:"/docs/user/quick-start/default-applications"}},i={},a=[{value:"clr-boot-manager",id:"clr-boot-manager",level:2},{value:"Open the boot menu",id:"open-the-boot-menu",level:3},{value:"Displaying the boot menu by default every boot",id:"displaying-the-boot-menu-by-default-every-boot",level:3},{value:"Adding kernel parameters",id:"adding-kernel-parameters",level:3},{value:"Kernels",id:"kernels",level:2},{value:"Installing a different kernel branch",id:"installing-a-different-kernel-branch",level:3},{value:"Change the default kernel branch to boot",id:"change-the-default-kernel-branch-to-boot",level:3}];function c(e){const t={br:"br",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",p:"p",pre:"pre",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,o.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.header,{children:(0,r.jsx)(t.h1,{id:"boot-management",children:"Boot Management"})}),"\n",(0,r.jsx)(t.h2,{id:"clr-boot-manager",children:"clr-boot-manager"}),"\n",(0,r.jsxs)(t.p,{children:["Solus leverages ",(0,r.jsx)(t.code,{children:"clr-boot-manager"})," from the Clear Linux* project to manage its boot process.\nOn legacy BIOS systems, ",(0,r.jsx)(t.code,{children:"clr-boot-manager"})," will configure ",(0,r.jsx)(t.code,{children:"GRUB2"})," to properly boot your system.",(0,r.jsx)(t.br,{}),"\n","On modern UEFI systems, ",(0,r.jsx)(t.code,{children:"clr-boot-manager"})," will configure ",(0,r.jsx)(t.code,{children:"systemd-boot"})," instead.",(0,r.jsx)(t.br,{}),"\n","This means that any time we want to modify the boot process, ",(0,r.jsx)(t.code,{children:"clr-boot-manager"})," will be involved.",(0,r.jsx)(t.br,{}),"\n","Trying to modify the configurations manually may work temporarily, but will be overwritten eventually."]}),"\n",(0,r.jsx)(t.h3,{id:"open-the-boot-menu",children:"Open the boot menu"}),"\n",(0,r.jsx)(t.p,{children:"By default, EFI installs will not show the boot menu and boot directly into Solus. By hitting space bar (repeatedly) during boot, the boot menu will appear (it may take a couple of goes to get the timing right)."}),"\n",(0,r.jsx)(t.h3,{id:"displaying-the-boot-menu-by-default-every-boot",children:"Displaying the boot menu by default every boot"}),"\n",(0,r.jsx)(t.p,{children:"The following command will set the timeout of the boot loader to five seconds so that it appears by default:"}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:"sudo clr-boot-manager set-timeout 5 && sudo clr-boot-manager update\n"})}),"\n",(0,r.jsx)(t.h3,{id:"adding-kernel-parameters",children:"Adding kernel parameters"}),"\n",(0,r.jsxs)(t.p,{children:["Kernel parameters can be appended to boot via creating a file for ",(0,r.jsx)(t.code,{children:"clr-boot-manager"})," to use when updating kernels. For example, to add ",(0,r.jsx)(t.code,{children:"nomodeset"})," to boot options, you would create a file in ",(0,r.jsx)(t.code,{children:"/etc/kernel/cmdline.d"})," (as sudo):"]}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:"sudo mkdir -p /etc/kernel/cmdline.d\necho 'nomodeset' | sudo tee /etc/kernel/cmdline.d/40_nomodeset.conf\n"})}),"\n",(0,r.jsxs)(t.p,{children:["The settings should be on one line with a space between them. You will need to run ",(0,r.jsx)(t.code,{children:"sudo clr-boot-manager update"})," for the options to be appended to boot."]}),"\n",(0,r.jsx)(t.h2,{id:"kernels",children:"Kernels"}),"\n",(0,r.jsx)(t.h3,{id:"installing-a-different-kernel-branch",children:"Installing a different kernel branch"}),"\n",(0,r.jsxs)(t.p,{children:["By default, Solus utilizes our linux-current kernel. The separate kernel branches can be added by installing the ",(0,r.jsx)(t.code,{children:"linux-lts"})," or ",(0,r.jsx)(t.code,{children:"linux-current"})," packages. Note that each kernel has separate module packages, so if you use these kernel modules, you'll need to install the one related to the kernel you are adding."]}),"\n",(0,r.jsxs)(t.table,{children:[(0,r.jsx)(t.thead,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.th,{children:"linux-lts"}),(0,r.jsx)(t.th,{children:"linux-current"})]})}),(0,r.jsxs)(t.tbody,{children:[(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"bbswitch"}),(0,r.jsx)(t.td,{children:"bbswitch-current"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"broadcom-sta"}),(0,r.jsx)(t.td,{children:"broadcom-sta-current"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"linux-lts-headers"}),(0,r.jsx)(t.td,{children:"linux-current-headers"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"nvidia-470-glx-driver"}),(0,r.jsx)(t.td,{children:"nvidia-470-glx-driver-current"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"nvidia-beta-driver"}),(0,r.jsx)(t.td,{children:"nvidia-beta-driver-current"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"nvidia-developer-driver"}),(0,r.jsx)(t.td,{children:"nvidia-developer-driver-current"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"nvidia-glx-driver"}),(0,r.jsx)(t.td,{children:"nvidia-glx-driver-current"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"openrazer"}),(0,r.jsx)(t.td,{children:"openrazer-current"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"rtl8852bu"}),(0,r.jsx)(t.td,{children:"rtl8852bu-current"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"v4l2loopback"}),(0,r.jsx)(t.td,{children:"v4l2loopback-current"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"vhba-module"}),(0,r.jsx)(t.td,{children:"vhba-module-current"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"virtualbox"}),(0,r.jsx)(t.td,{children:"virtualbox-current"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"xone"}),(0,r.jsx)(t.td,{children:"xone-current"})]})]})]}),"\n",(0,r.jsx)(t.h3,{id:"change-the-default-kernel-branch-to-boot",children:"Change the default kernel branch to boot"}),"\n",(0,r.jsxs)(t.p,{children:["After successfully booting into a kernel from the ",(0,r.jsx)(t.code,{children:"current"})," or ",(0,r.jsx)(t.code,{children:"lts"})," branches running ",(0,r.jsx)(t.code,{children:"sudo clr-boot-manager update"})," will make the booted kernel branch the default boot option going forward."]})]})}function h(e={}){const{wrapper:t}={...(0,o.a)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(c,{...e})}):c(e)}},11151:(e,t,n)=>{n.d(t,{Z:()=>d,a:()=>s});var r=n(67294);const o={},l=r.createContext(o);function s(e){const t=r.useContext(l);return r.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function d(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:s(e.components),r.createElement(l.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/e5595530.8eb3fe79.js b/assets/js/e5595530.8eb3fe79.js new file mode 100644 index 000000000..f7bc18c4d --- /dev/null +++ b/assets/js/e5595530.8eb3fe79.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([["7220"],{54587:function(e,t,n){n.r(t),n.d(t,{metadata:()=>r,contentTitle:()=>s,default:()=>h,assets:()=>i,toc:()=>a,frontMatter:()=>d});var r=JSON.parse('{"id":"user/quick-start/boot-management","title":"Boot Management","description":"clr-boot-manager","source":"@site/docs/user/quick-start/boot-management.md","sourceDirName":"user/quick-start","slug":"/user/quick-start/boot-management","permalink":"/docs/user/quick-start/boot-management","draft":false,"unlisted":false,"editUrl":"https://github.com/getsolus/help-center-docs/tree/master/docs/user/quick-start/boot-management.md","tags":[],"version":"current","lastUpdatedAt":1733757592000,"frontMatter":{"title":"Boot Management","summary":"Guide to customizing the Solus boot process"},"sidebar":"userSidebar","previous":{"title":"Quick Start","permalink":"/docs/category/quick-start"},"next":{"title":"Default Applications","permalink":"/docs/user/quick-start/default-applications"}}'),o=n("85893"),l=n("50065");let d={title:"Boot Management",summary:"Guide to customizing the Solus boot process"},s="Boot Management",i={},a=[{value:"clr-boot-manager",id:"clr-boot-manager",level:2},{value:"Open the boot menu",id:"open-the-boot-menu",level:3},{value:"Displaying the boot menu by default every boot",id:"displaying-the-boot-menu-by-default-every-boot",level:3},{value:"Adding kernel parameters",id:"adding-kernel-parameters",level:3},{value:"Kernels",id:"kernels",level:2},{value:"Installing a different kernel branch",id:"installing-a-different-kernel-branch",level:3},{value:"Change the default kernel branch to boot",id:"change-the-default-kernel-branch-to-boot",level:3}];function c(e){let t={br:"br",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",p:"p",pre:"pre",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,l.a)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(t.header,{children:(0,o.jsx)(t.h1,{id:"boot-management",children:"Boot Management"})}),"\n",(0,o.jsx)(t.h2,{id:"clr-boot-manager",children:"clr-boot-manager"}),"\n",(0,o.jsxs)(t.p,{children:["Solus leverages ",(0,o.jsx)(t.code,{children:"clr-boot-manager"})," from the Clear Linux* project to manage its boot process.\nOn legacy BIOS systems, ",(0,o.jsx)(t.code,{children:"clr-boot-manager"})," will configure ",(0,o.jsx)(t.code,{children:"GRUB2"})," to properly boot your system.",(0,o.jsx)(t.br,{}),"\n","On modern UEFI systems, ",(0,o.jsx)(t.code,{children:"clr-boot-manager"})," will configure ",(0,o.jsx)(t.code,{children:"systemd-boot"})," instead.",(0,o.jsx)(t.br,{}),"\n","This means that any time we want to modify the boot process, ",(0,o.jsx)(t.code,{children:"clr-boot-manager"})," will be involved.",(0,o.jsx)(t.br,{}),"\n","Trying to modify the configurations manually may work temporarily, but will be overwritten eventually."]}),"\n",(0,o.jsx)(t.h3,{id:"open-the-boot-menu",children:"Open the boot menu"}),"\n",(0,o.jsx)(t.p,{children:"By default, EFI installs will not show the boot menu and boot directly into Solus. By hitting space bar (repeatedly) during boot, the boot menu will appear (it may take a couple of goes to get the timing right)."}),"\n",(0,o.jsx)(t.h3,{id:"displaying-the-boot-menu-by-default-every-boot",children:"Displaying the boot menu by default every boot"}),"\n",(0,o.jsx)(t.p,{children:"The following command will set the timeout of the boot loader to five seconds so that it appears by default:"}),"\n",(0,o.jsx)(t.pre,{children:(0,o.jsx)(t.code,{className:"language-bash",children:"sudo clr-boot-manager set-timeout 5 && sudo clr-boot-manager update\n"})}),"\n",(0,o.jsx)(t.h3,{id:"adding-kernel-parameters",children:"Adding kernel parameters"}),"\n",(0,o.jsxs)(t.p,{children:["Kernel parameters can be appended to boot via creating a file for ",(0,o.jsx)(t.code,{children:"clr-boot-manager"})," to use when updating kernels. For example, to add ",(0,o.jsx)(t.code,{children:"nomodeset"})," to boot options, you would create a file in ",(0,o.jsx)(t.code,{children:"/etc/kernel/cmdline.d"})," (as sudo):"]}),"\n",(0,o.jsx)(t.pre,{children:(0,o.jsx)(t.code,{className:"language-bash",children:"sudo mkdir -p /etc/kernel/cmdline.d\necho 'nomodeset' | sudo tee /etc/kernel/cmdline.d/40_nomodeset.conf\n"})}),"\n",(0,o.jsxs)(t.p,{children:["The settings should be on one line with a space between them. You will need to run ",(0,o.jsx)(t.code,{children:"sudo clr-boot-manager update"})," for the options to be appended to boot."]}),"\n",(0,o.jsx)(t.h2,{id:"kernels",children:"Kernels"}),"\n",(0,o.jsx)(t.h3,{id:"installing-a-different-kernel-branch",children:"Installing a different kernel branch"}),"\n",(0,o.jsxs)(t.p,{children:["By default, Solus utilizes our linux-current kernel. The separate kernel branches can be added by installing the ",(0,o.jsx)(t.code,{children:"linux-lts"})," or ",(0,o.jsx)(t.code,{children:"linux-current"})," packages. Note that each kernel has separate module packages, so if you use these kernel modules, you'll need to install the one related to the kernel you are adding."]}),"\n",(0,o.jsxs)(t.table,{children:[(0,o.jsx)(t.thead,{children:(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.th,{children:"linux-lts"}),(0,o.jsx)(t.th,{children:"linux-current"})]})}),(0,o.jsxs)(t.tbody,{children:[(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.td,{children:"bbswitch"}),(0,o.jsx)(t.td,{children:"bbswitch-current"})]}),(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.td,{children:"broadcom-sta"}),(0,o.jsx)(t.td,{children:"broadcom-sta-current"})]}),(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.td,{children:"linux-lts-headers"}),(0,o.jsx)(t.td,{children:"linux-current-headers"})]}),(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.td,{children:"nvidia-470-glx-driver"}),(0,o.jsx)(t.td,{children:"nvidia-470-glx-driver-current"})]}),(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.td,{children:"nvidia-beta-driver"}),(0,o.jsx)(t.td,{children:"nvidia-beta-driver-current"})]}),(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.td,{children:"nvidia-developer-driver"}),(0,o.jsx)(t.td,{children:"nvidia-developer-driver-current"})]}),(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.td,{children:"nvidia-glx-driver"}),(0,o.jsx)(t.td,{children:"nvidia-glx-driver-current"})]}),(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.td,{children:"openrazer"}),(0,o.jsx)(t.td,{children:"openrazer-current"})]}),(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.td,{children:"rtl8852bu"}),(0,o.jsx)(t.td,{children:"rtl8852bu-current"})]}),(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.td,{children:"v4l2loopback"}),(0,o.jsx)(t.td,{children:"v4l2loopback-current"})]}),(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.td,{children:"vhba-module"}),(0,o.jsx)(t.td,{children:"vhba-module-current"})]}),(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.td,{children:"virtualbox"}),(0,o.jsx)(t.td,{children:"virtualbox-current"})]}),(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.td,{children:"xone"}),(0,o.jsx)(t.td,{children:"xone-current"})]})]})]}),"\n",(0,o.jsx)(t.h3,{id:"change-the-default-kernel-branch-to-boot",children:"Change the default kernel branch to boot"}),"\n",(0,o.jsxs)(t.p,{children:["After successfully booting into a kernel from the ",(0,o.jsx)(t.code,{children:"current"})," or ",(0,o.jsx)(t.code,{children:"lts"})," branches running ",(0,o.jsx)(t.code,{children:"sudo clr-boot-manager update"})," will make the booted kernel branch the default boot option going forward."]})]})}function h(e={}){let{wrapper:t}={...(0,l.a)(),...e.components};return t?(0,o.jsx)(t,{...e,children:(0,o.jsx)(c,{...e})}):c(e)}},50065:function(e,t,n){n.d(t,{Z:function(){return s},a:function(){return d}});var r=n(67294);let o={},l=r.createContext(o);function d(e){let t=r.useContext(l);return r.useMemo(function(){return"function"==typeof e?e(t):{...t,...e}},[t,e])}function s(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:d(e.components),r.createElement(l.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/ea6d9109.ade06918.js b/assets/js/ea6d9109.ade06918.js new file mode 100644 index 000000000..0a55ffba6 --- /dev/null +++ b/assets/js/ea6d9109.ade06918.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([["6381"],{92145:function(e){e.exports=JSON.parse('{"categoryGeneratedIndex":{"title":"Web","slug":"/category/web","permalink":"/docs/category/web","sidebar":"userSidebar","navigation":{"previous":{"title":"VirtualBox","permalink":"/docs/user/software/virtualization/virtualbox"},"next":{"title":"Open Broadcaster Software (OBS)","permalink":"/docs/user/software/web/obs"}}}}')}}]); \ No newline at end of file diff --git a/assets/js/ea6d9109.f94baf95.js b/assets/js/ea6d9109.f94baf95.js deleted file mode 100644 index 7659d5c53..000000000 --- a/assets/js/ea6d9109.f94baf95.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[812],{88930:e=>{e.exports=JSON.parse('{"categoryGeneratedIndex":{"title":"Web","slug":"/category/web","permalink":"/docs/category/web","sidebar":"userSidebar","navigation":{"previous":{"title":"VirtualBox","permalink":"/docs/user/software/virtualization/virtualbox"},"next":{"title":"Open Broadcaster Software (OBS)","permalink":"/docs/user/software/web/obs"}}}}')}}]); \ No newline at end of file diff --git a/assets/js/eb074ba1.42ac8859.js b/assets/js/eb074ba1.42ac8859.js deleted file mode 100644 index c9aa9f38d..000000000 --- a/assets/js/eb074ba1.42ac8859.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[3705],{45247:(e,s,t)=>{t.r(s),t.d(s,{assets:()=>c,contentTitle:()=>o,default:()=>h,frontMatter:()=>i,metadata:()=>d,toc:()=>a});var r=t(85893),n=t(11151);const i={title:"Configuration File Locations",summary:"Location of configuration files on Solus"},o="Configuration File Locations",d={id:"user/software/configuration_files",title:"Configuration File Locations",description:"These are the standard locations on a Solus installation for software configuration files.",source:"@site/docs/user/software/configuration_files.md",sourceDirName:"user/software",slug:"/user/software/configuration_files",permalink:"/docs/user/software/configuration_files",draft:!1,unlisted:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/software/configuration_files.md",tags:[],version:"current",lastUpdatedAt:1732716912e3,frontMatter:{title:"Configuration File Locations",summary:"Location of configuration files on Solus"},sidebar:"userSidebar",previous:{title:"Command Line",permalink:"/docs/user/software/command-line/"},next:{title:"Desktops",permalink:"/docs/user/software/desktops/"}},c={},a=[];function l(e){const s={a:"a",admonition:"admonition",code:"code",h1:"h1",header:"header",p:"p",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,n.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(s.header,{children:(0,r.jsx)(s.h1,{id:"configuration-file-locations",children:"Configuration File Locations"})}),"\n",(0,r.jsx)(s.p,{children:"These are the standard locations on a Solus installation for software configuration files."}),"\n",(0,r.jsx)(s.admonition,{type:"note",children:(0,r.jsxs)(s.p,{children:['Solus uses a "stateless" system configuration. For what that means see the ',(0,r.jsx)(s.a,{href:"https://www.clearlinux.org/clear-linux-documentation/reference/manpages/stateless.7.html",children:"Clear Linux Guide to Stateless Configuration"}),"."]})}),"\n",(0,r.jsxs)(s.table,{children:[(0,r.jsx)(s.thead,{children:(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.th,{children:"Type"}),(0,r.jsx)(s.th,{children:"Applies to"}),(0,r.jsx)(s.th,{children:"Location(s)"}),(0,r.jsx)(s.th,{children:"Priority"})]})}),(0,r.jsxs)(s.tbody,{children:[(0,r.jsxs)(s.tr,{children:[(0,r.jsxs)(s.td,{children:[(0,r.jsx)(s.strong,{children:"User"}),(0,r.jsx)("br",{}),"- preserved during package updates"]}),(0,r.jsx)(s.td,{children:"Per-user"}),(0,r.jsxs)(s.td,{children:[(0,r.jsx)(s.code,{children:"~/.config/"}),(0,r.jsx)("br",{}),(0,r.jsx)(s.code,{children:"~/"}),(0,r.jsx)("br",{}),"others"]}),(0,r.jsx)(s.td,{children:"Highest"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsxs)(s.td,{children:[(0,r.jsx)(s.strong,{children:"System"}),(0,r.jsx)("br",{}),"- preserved during package updates"]}),(0,r.jsx)(s.td,{children:"All users on the system"}),(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"/etc/"})}),(0,r.jsx)(s.td,{})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsxs)(s.td,{children:[(0,r.jsx)(s.strong,{children:"OS provided"})," (aka defaults)",(0,r.jsx)("br",{}),"- ",(0,r.jsx)(s.strong,{children:"overridden"})," by package updates"]}),(0,r.jsx)(s.td,{children:"All users on the system"}),(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"/usr/share/defaults/"})}),(0,r.jsx)(s.td,{children:"Lowest"})]})]})]}),"\n",(0,r.jsx)(s.p,{children:"A user configuration file overrides the system configuration, and the system configuration overrides the OS provided configuration. If no user configuration is provided, then the system configuration is used, and if no system configuration is provided, then the OS provided configuration is used."}),"\n",(0,r.jsxs)(s.p,{children:["Different software expects user configuration files in different places. Many software packages store these under the ",(0,r.jsx)(s.code,{children:"XDG_CONFIG_HOME"})," directory: ",(0,r.jsx)(s.code,{children:"~/.config"}),". Some applications insist on placing them straight into the home directory. For example the ",(0,r.jsx)(s.code,{children:"fish"})," shell uses the ",(0,r.jsx)(s.code,{children:"~/.config/fish"})," directory to store user configurations, while the ",(0,r.jsx)(s.code,{children:"bash"})," shell uses the ",(0,r.jsx)(s.code,{children:"~/.bashrc"})," configuration file straight from the home directory. Consult documentation before customizing software to ensure you put things in the right place."]}),"\n",(0,r.jsx)(s.p,{children:"Some common configuration files:"}),"\n",(0,r.jsxs)(s.table,{children:[(0,r.jsx)(s.thead,{children:(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.th,{children:"Software"}),(0,r.jsx)(s.th,{children:"Configuration files"})]})}),(0,r.jsxs)(s.tbody,{children:[(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"apcupsd"}),(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"/etc/changeme"})})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"cups"}),(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"/etc/cups/"})})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.a,{href:"/docs/user/software/networking/samba",children:"samba"})}),(0,r.jsxs)(s.td,{children:[(0,r.jsx)(s.code,{children:"/etc/samba/smb.conf"}),(0,r.jsx)("br",{}),(0,r.jsx)(s.code,{children:"/usr/share/defaults/samba/"})]})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"pam"}),(0,r.jsxs)(s.td,{children:[(0,r.jsx)(s.code,{children:"/etc/pam.d/"}),(0,r.jsx)("br",{}),(0,r.jsx)(s.code,{children:"/usr/share/defaults/etc/pam.d/"})]})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"ssh"}),(0,r.jsxs)(s.td,{children:[(0,r.jsx)(s.code,{children:"$HOME/.ssh/"}),(0,r.jsx)("br",{}),(0,r.jsx)(s.code,{children:"/usr/share/defaults/etc/ssh/"})]})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"ssl"}),(0,r.jsxs)(s.td,{children:[(0,r.jsx)(s.code,{children:"/etc/ssl/"}),(0,r.jsx)("br",{}),(0,r.jsx)(s.code,{children:"/usr/share/defaults/etc/ssl/"})]})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.a,{href:"/docs/user/software/networking/tigervnc",children:"tigervnc"})}),(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"$HOME/.vnc/xstartup"})})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.a,{href:"/docs/user/software/networking/xrdp",children:"xrdp"})}),(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"/etc/X11/Xwrapper.config"})})]})]})]})]})}function h(e={}){const{wrapper:s}={...(0,n.a)(),...e.components};return s?(0,r.jsx)(s,{...e,children:(0,r.jsx)(l,{...e})}):l(e)}},11151:(e,s,t)=>{t.d(s,{Z:()=>d,a:()=>o});var r=t(67294);const n={},i=r.createContext(n);function o(e){const s=r.useContext(i);return r.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function d(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:o(e.components),r.createElement(i.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/eb074ba1.7903bbcc.js b/assets/js/eb074ba1.7903bbcc.js new file mode 100644 index 000000000..e3a05132c --- /dev/null +++ b/assets/js/eb074ba1.7903bbcc.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([["6218"],{76283:function(e,s,t){t.r(s),t.d(s,{metadata:()=>r,contentTitle:()=>d,default:()=>h,assets:()=>c,toc:()=>l,frontMatter:()=>o});var r=JSON.parse('{"id":"user/software/configuration_files","title":"Configuration File Locations","description":"These are the standard locations on a Solus installation for software configuration files.","source":"@site/docs/user/software/configuration_files.md","sourceDirName":"user/software","slug":"/user/software/configuration_files","permalink":"/docs/user/software/configuration_files","draft":false,"unlisted":false,"editUrl":"https://github.com/getsolus/help-center-docs/tree/master/docs/user/software/configuration_files.md","tags":[],"version":"current","lastUpdatedAt":1733757592000,"frontMatter":{"title":"Configuration File Locations","summary":"Location of configuration files on Solus"},"sidebar":"userSidebar","previous":{"title":"Command Line","permalink":"/docs/user/software/command-line/"},"next":{"title":"Desktops","permalink":"/docs/user/software/desktops/"}}'),n=t("85893"),i=t("50065");let o={title:"Configuration File Locations",summary:"Location of configuration files on Solus"},d="Configuration File Locations",c={},l=[];function a(e){let s={a:"a",admonition:"admonition",code:"code",h1:"h1",header:"header",p:"p",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,i.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(s.header,{children:(0,n.jsx)(s.h1,{id:"configuration-file-locations",children:"Configuration File Locations"})}),"\n",(0,n.jsx)(s.p,{children:"These are the standard locations on a Solus installation for software configuration files."}),"\n",(0,n.jsx)(s.admonition,{type:"note",children:(0,n.jsxs)(s.p,{children:['Solus uses a "stateless" system configuration. For what that means see the ',(0,n.jsx)(s.a,{href:"https://www.clearlinux.org/clear-linux-documentation/reference/manpages/stateless.7.html",children:"Clear Linux Guide to Stateless Configuration"}),"."]})}),"\n",(0,n.jsxs)(s.table,{children:[(0,n.jsx)(s.thead,{children:(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.th,{children:"Type"}),(0,n.jsx)(s.th,{children:"Applies to"}),(0,n.jsx)(s.th,{children:"Location(s)"}),(0,n.jsx)(s.th,{children:"Priority"})]})}),(0,n.jsxs)(s.tbody,{children:[(0,n.jsxs)(s.tr,{children:[(0,n.jsxs)(s.td,{children:[(0,n.jsx)(s.strong,{children:"User"}),(0,n.jsx)("br",{}),"- preserved during package updates"]}),(0,n.jsx)(s.td,{children:"Per-user"}),(0,n.jsxs)(s.td,{children:[(0,n.jsx)(s.code,{children:"~/.config/"}),(0,n.jsx)("br",{}),(0,n.jsx)(s.code,{children:"~/"}),(0,n.jsx)("br",{}),"others"]}),(0,n.jsx)(s.td,{children:"Highest"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsxs)(s.td,{children:[(0,n.jsx)(s.strong,{children:"System"}),(0,n.jsx)("br",{}),"- preserved during package updates"]}),(0,n.jsx)(s.td,{children:"All users on the system"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"/etc/"})}),(0,n.jsx)(s.td,{})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsxs)(s.td,{children:[(0,n.jsx)(s.strong,{children:"OS provided"})," (aka defaults)",(0,n.jsx)("br",{}),"- ",(0,n.jsx)(s.strong,{children:"overridden"})," by package updates"]}),(0,n.jsx)(s.td,{children:"All users on the system"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"/usr/share/defaults/"})}),(0,n.jsx)(s.td,{children:"Lowest"})]})]})]}),"\n",(0,n.jsx)(s.p,{children:"A user configuration file overrides the system configuration, and the system configuration overrides the OS provided configuration. If no user configuration is provided, then the system configuration is used, and if no system configuration is provided, then the OS provided configuration is used."}),"\n",(0,n.jsxs)(s.p,{children:["Different software expects user configuration files in different places. Many software packages store these under the ",(0,n.jsx)(s.code,{children:"XDG_CONFIG_HOME"})," directory: ",(0,n.jsx)(s.code,{children:"~/.config"}),". Some applications insist on placing them straight into the home directory. For example the ",(0,n.jsx)(s.code,{children:"fish"})," shell uses the ",(0,n.jsx)(s.code,{children:"~/.config/fish"})," directory to store user configurations, while the ",(0,n.jsx)(s.code,{children:"bash"})," shell uses the ",(0,n.jsx)(s.code,{children:"~/.bashrc"})," configuration file straight from the home directory. Consult documentation before customizing software to ensure you put things in the right place."]}),"\n",(0,n.jsx)(s.p,{children:"Some common configuration files:"}),"\n",(0,n.jsxs)(s.table,{children:[(0,n.jsx)(s.thead,{children:(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.th,{children:"Software"}),(0,n.jsx)(s.th,{children:"Configuration files"})]})}),(0,n.jsxs)(s.tbody,{children:[(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"apcupsd"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"/etc/changeme"})})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"cups"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"/etc/cups/"})})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.a,{href:"/docs/user/software/networking/samba",children:"samba"})}),(0,n.jsxs)(s.td,{children:[(0,n.jsx)(s.code,{children:"/etc/samba/smb.conf"}),(0,n.jsx)("br",{}),(0,n.jsx)(s.code,{children:"/usr/share/defaults/samba/"})]})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"pam"}),(0,n.jsxs)(s.td,{children:[(0,n.jsx)(s.code,{children:"/etc/pam.d/"}),(0,n.jsx)("br",{}),(0,n.jsx)(s.code,{children:"/usr/share/defaults/etc/pam.d/"})]})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"ssh"}),(0,n.jsxs)(s.td,{children:[(0,n.jsx)(s.code,{children:"$HOME/.ssh/"}),(0,n.jsx)("br",{}),(0,n.jsx)(s.code,{children:"/usr/share/defaults/etc/ssh/"})]})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"ssl"}),(0,n.jsxs)(s.td,{children:[(0,n.jsx)(s.code,{children:"/etc/ssl/"}),(0,n.jsx)("br",{}),(0,n.jsx)(s.code,{children:"/usr/share/defaults/etc/ssl/"})]})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.a,{href:"/docs/user/software/networking/tigervnc",children:"tigervnc"})}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"$HOME/.vnc/xstartup"})})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.a,{href:"/docs/user/software/networking/xrdp",children:"xrdp"})}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"/etc/X11/Xwrapper.config"})})]})]})]})]})}function h(e={}){let{wrapper:s}={...(0,i.a)(),...e.components};return s?(0,n.jsx)(s,{...e,children:(0,n.jsx)(a,{...e})}):a(e)}},50065:function(e,s,t){t.d(s,{Z:function(){return d},a:function(){return o}});var r=t(67294);let n={},i=r.createContext(n);function o(e){let s=r.useContext(i);return r.useMemo(function(){return"function"==typeof e?e(s):{...s,...e}},[s,e])}function d(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:o(e.components),r.createElement(i.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/ec4e4367.b33b2a81.js b/assets/js/ec4e4367.b33b2a81.js deleted file mode 100644 index f497cc2a5..000000000 --- a/assets/js/ec4e4367.b33b2a81.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[4529],{76130:(e,o,r)=>{r.r(o),r.d(o,{assets:()=>a,contentTitle:()=>s,default:()=>u,frontMatter:()=>i,metadata:()=>d,toc:()=>l});var n=r(85893),t=r(11151);const i={title:"Android",summary:"Quick guide to working with Android devices on Solus"},s="Android",d={id:"user/hardware/mobile/android",title:"Android",description:"For the most part, Android devices will work out of the box on Solus. The experience is similar to other operating systems.",source:"@site/docs/user/hardware/mobile/android.md",sourceDirName:"user/hardware/mobile",slug:"/user/hardware/mobile/android",permalink:"/docs/user/hardware/mobile/android",draft:!1,unlisted:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/hardware/mobile/android.md",tags:[],version:"current",lastUpdatedAt:1732716912e3,frontMatter:{title:"Android",summary:"Quick guide to working with Android devices on Solus"},sidebar:"userSidebar",previous:{title:"Mobile",permalink:"/docs/category/mobile"},next:{title:"Apple",permalink:"/docs/user/hardware/mobile/apple"}},a={},l=[{value:"File management",id:"file-management",level:2},{value:"Developer tools",id:"developer-tools",level:2}];function c(e){const o={code:"code",h1:"h1",h2:"h2",header:"header",p:"p",pre:"pre",...(0,t.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(o.header,{children:(0,n.jsx)(o.h1,{id:"android",children:"Android"})}),"\n",(0,n.jsx)(o.p,{children:"For the most part, Android devices will work out of the box on Solus. The experience is similar to other operating systems."}),"\n",(0,n.jsx)(o.h2,{id:"file-management",children:"File management"}),"\n",(0,n.jsx)(o.p,{children:"TODO: Tutorial on accessing files from a file browser. Android screenshots would be nice to have."}),"\n",(0,n.jsx)(o.h2,{id:"developer-tools",children:"Developer tools"}),"\n",(0,n.jsxs)(o.p,{children:["Whether you are an Android developer or just need ",(0,n.jsx)(o.code,{children:"adb"})," or ",(0,n.jsx)(o.code,{children:"fastboot"})," for installing a ROM, we've got you covered! We just need to install ",(0,n.jsx)(o.code,{children:"android-tools"})," from the Software Center or command-line:"]}),"\n",(0,n.jsx)(o.pre,{children:(0,n.jsx)(o.code,{className:"language-bash",children:"sudo eopkg install android-tools\n"})})]})}function u(e={}){const{wrapper:o}={...(0,t.a)(),...e.components};return o?(0,n.jsx)(o,{...e,children:(0,n.jsx)(c,{...e})}):c(e)}},11151:(e,o,r)=>{r.d(o,{Z:()=>d,a:()=>s});var n=r(67294);const t={},i=n.createContext(t);function s(e){const o=n.useContext(i);return n.useMemo((function(){return"function"==typeof e?e(o):{...o,...e}}),[o,e])}function d(e){let o;return o=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:s(e.components),n.createElement(i.Provider,{value:o},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/ec4e4367.b8aea460.js b/assets/js/ec4e4367.b8aea460.js new file mode 100644 index 000000000..e00fafa4b --- /dev/null +++ b/assets/js/ec4e4367.b8aea460.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([["8410"],{74675:function(e,o,r){r.r(o),r.d(o,{metadata:()=>n,contentTitle:()=>d,default:()=>u,assets:()=>l,toc:()=>a,frontMatter:()=>s});var n=JSON.parse('{"id":"user/hardware/mobile/android","title":"Android","description":"For the most part, Android devices will work out of the box on Solus. The experience is similar to other operating systems.","source":"@site/docs/user/hardware/mobile/android.md","sourceDirName":"user/hardware/mobile","slug":"/user/hardware/mobile/android","permalink":"/docs/user/hardware/mobile/android","draft":false,"unlisted":false,"editUrl":"https://github.com/getsolus/help-center-docs/tree/master/docs/user/hardware/mobile/android.md","tags":[],"version":"current","lastUpdatedAt":1733757592000,"frontMatter":{"title":"Android","summary":"Quick guide to working with Android devices on Solus"},"sidebar":"userSidebar","previous":{"title":"Mobile","permalink":"/docs/category/mobile"},"next":{"title":"Apple","permalink":"/docs/user/hardware/mobile/apple"}}'),t=r("85893"),i=r("50065");let s={title:"Android",summary:"Quick guide to working with Android devices on Solus"},d="Android",l={},a=[{value:"File management",id:"file-management",level:2},{value:"Developer tools",id:"developer-tools",level:2}];function c(e){let o={code:"code",h1:"h1",h2:"h2",header:"header",p:"p",pre:"pre",...(0,i.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(o.header,{children:(0,t.jsx)(o.h1,{id:"android",children:"Android"})}),"\n",(0,t.jsx)(o.p,{children:"For the most part, Android devices will work out of the box on Solus. The experience is similar to other operating systems."}),"\n",(0,t.jsx)(o.h2,{id:"file-management",children:"File management"}),"\n",(0,t.jsx)(o.p,{children:"TODO: Tutorial on accessing files from a file browser. Android screenshots would be nice to have."}),"\n",(0,t.jsx)(o.h2,{id:"developer-tools",children:"Developer tools"}),"\n",(0,t.jsxs)(o.p,{children:["Whether you are an Android developer or just need ",(0,t.jsx)(o.code,{children:"adb"})," or ",(0,t.jsx)(o.code,{children:"fastboot"})," for installing a ROM, we've got you covered! We just need to install ",(0,t.jsx)(o.code,{children:"android-tools"})," from the Software Center or command-line:"]}),"\n",(0,t.jsx)(o.pre,{children:(0,t.jsx)(o.code,{className:"language-bash",children:"sudo eopkg install android-tools\n"})})]})}function u(e={}){let{wrapper:o}={...(0,i.a)(),...e.components};return o?(0,t.jsx)(o,{...e,children:(0,t.jsx)(c,{...e})}):c(e)}},50065:function(e,o,r){r.d(o,{Z:function(){return d},a:function(){return s}});var n=r(67294);let t={},i=n.createContext(t);function s(e){let o=n.useContext(i);return n.useMemo(function(){return"function"==typeof e?e(o):{...o,...e}},[o,e])}function d(e){let o;return o=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:s(e.components),n.createElement(i.Provider,{value:o},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/ecdeb26c.1fe9d20f.js b/assets/js/ecdeb26c.1fe9d20f.js new file mode 100644 index 000000000..45d522c54 --- /dev/null +++ b/assets/js/ecdeb26c.1fe9d20f.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([["1828"],{76047:function(e,t,n){n.r(t),n.d(t,{assets:function(){return r},contentTitle:function(){return i},default:function(){return c},frontMatter:function(){return l},metadata:function(){return o},toc:function(){return u}});var o=n(82417),a=n(85893),s=n(50065);let l={title:"Don't call me MATE, pal!",slug:"don't-call-me-mate-pal",authors:"david",tags:["MATE","devlog","solus"],hide_table_of_contents:!1},i=void 0,r={authorsImageUrls:[void 0]},u=[];function d(e){let t={a:"a",em:"em",p:"p",...(0,s.a)(),...e.components};return(0,a.jsxs)(t.p,{children:["Back in our ",(0,a.jsx)(t.a,{href:"https://getsol.us/2023/07/08/solus-4-4-released/",children:"4.4 release post"})," we announced that Solus would stop shipping a MATE ISO, mostly because MATE showed no signs of moving away from X11 and towards wayland. At the beginning of this year, we shipped our new XFCE ISO as a beta. And now we're getting ready to ship the ",(0,a.jsx)(t.em,{children:"Solus MATE Transition Tool"})," to move existing users off of MATE."]})}function c(e={}){let{wrapper:t}={...(0,s.a)(),...e.components};return t?(0,a.jsx)(t,{...e,children:(0,a.jsx)(d,{...e})}):d(e)}},50065:function(e,t,n){n.d(t,{Z:function(){return i},a:function(){return l}});var o=n(67294);let a={},s=o.createContext(a);function l(e){let t=o.useContext(s);return o.useMemo(function(){return"function"==typeof e?e(t):{...t,...e}},[t,e])}function i(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:l(e.components),o.createElement(s.Provider,{value:t},e.children)}},82417:function(e){e.exports=JSON.parse('{"permalink":"/blog/don\'t-call-me-mate-pal","source":"@site/devlog/2024-01-29-dont-call-me-mate.md","title":"Don\'t call me MATE, pal!","description":"Back in our 4.4 release post we announced that Solus would stop shipping a MATE ISO, mostly because MATE showed no signs of moving away from X11 and towards wayland. At the beginning of this year, we shipped our new XFCE ISO as a beta. And now we\'re getting ready to ship the Solus MATE Transition Tool to move existing users off of MATE.","date":"2024-01-29T00:00:00.000Z","tags":[{"inline":true,"label":"MATE","permalink":"/blog/tags/mate"},{"inline":true,"label":"devlog","permalink":"/blog/tags/devlog"},{"inline":true,"label":"solus","permalink":"/blog/tags/solus"}],"readingTime":2.645,"hasTruncateMarker":true,"authors":[{"name":"David Harder","title":"Solus Staff","page":{"permalink":"/blog/authors/david"},"socials":{"github":"https://github.com/davidjharder"},"imageURL":"https://avatars.githubusercontent.com/u/23007135","key":"david"}],"frontMatter":{"title":"Don\'t call me MATE, pal!","slug":"don\'t-call-me-mate-pal","authors":"david","tags":["MATE","devlog","solus"],"hide_table_of_contents":false},"unlisted":false,"prevItem":{"title":"Intro to Optimizing Packages on Solus","permalink":"/blog/solus-optimizing-packages"},"nextItem":{"title":"eopkg is dead, long live eopkg","permalink":"/blog/eopkg-is-dead-long-live-eopkg"}}')}}]); \ No newline at end of file diff --git a/assets/js/ecdeb26c.df2e94ce.js b/assets/js/ecdeb26c.df2e94ce.js deleted file mode 100644 index 962854046..000000000 --- a/assets/js/ecdeb26c.df2e94ce.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[1971],{35247:(e,t,o)=>{o.r(t),o.d(t,{assets:()=>r,contentTitle:()=>l,default:()=>p,frontMatter:()=>s,metadata:()=>i,toc:()=>d});var n=o(85893),a=o(11151);const s={title:"Don't call me MATE, pal!",slug:"don't-call-me-mate-pal",authors:"david",tags:["MATE","devlog","solus"],hide_table_of_contents:!1},l=void 0,i={permalink:"/blog/don't-call-me-mate-pal",source:"@site/devlog/2024-01-29-dont-call-me-mate.md",title:"Don't call me MATE, pal!",description:"Back in our 4.4 release post we announced that Solus would stop shipping a MATE ISO, mostly because MATE showed no signs of moving away from X11 and towards wayland. At the beginning of this year, we shipped our new XFCE ISO as a beta. And now we're getting ready to ship the Solus MATE Transition Tool to move existing users off of MATE.",date:"2024-01-29T00:00:00.000Z",tags:[{inline:!0,label:"MATE",permalink:"/blog/tags/mate"},{inline:!0,label:"devlog",permalink:"/blog/tags/devlog"},{inline:!0,label:"solus",permalink:"/blog/tags/solus"}],readingTime:2.645,hasTruncateMarker:!0,authors:[{name:"David Harder",title:"Solus Staff",page:{permalink:"/blog/authors/david"},socials:{github:"https://github.com/davidjharder"},imageURL:"https://avatars.githubusercontent.com/u/23007135",key:"david"}],frontMatter:{title:"Don't call me MATE, pal!",slug:"don't-call-me-mate-pal",authors:"david",tags:["MATE","devlog","solus"],hide_table_of_contents:!1},unlisted:!1,prevItem:{title:"Intro to Optimizing Packages on Solus",permalink:"/blog/solus-optimizing-packages"},nextItem:{title:"eopkg is dead, long live eopkg",permalink:"/blog/eopkg-is-dead-long-live-eopkg"}},r={authorsImageUrls:[void 0]},d=[];function u(e){const t={a:"a",em:"em",p:"p",...(0,a.a)(),...e.components};return(0,n.jsxs)(t.p,{children:["Back in our ",(0,n.jsx)(t.a,{href:"https://getsol.us/2023/07/08/solus-4-4-released/",children:"4.4 release post"})," we announced that Solus would stop shipping a MATE ISO, mostly because MATE showed no signs of moving away from X11 and towards wayland. At the beginning of this year, we shipped our new XFCE ISO as a beta. And now we're getting ready to ship the ",(0,n.jsx)(t.em,{children:"Solus MATE Transition Tool"})," to move existing users off of MATE."]})}function p(e={}){const{wrapper:t}={...(0,a.a)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(u,{...e})}):u(e)}},11151:(e,t,o)=>{o.d(t,{Z:()=>i,a:()=>l});var n=o(67294);const a={},s=n.createContext(a);function l(e){const t=n.useContext(s);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function i(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:l(e.components),n.createElement(s.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/ed2a5927.ee16d26e.js b/assets/js/ed2a5927.ee16d26e.js new file mode 100644 index 000000000..351e6ef69 --- /dev/null +++ b/assets/js/ed2a5927.ee16d26e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([["7265"],{62077:function(e,t,r){r.r(t),r.d(t,{metadata:()=>n,contentTitle:()=>i,default:()=>d,assets:()=>c,toc:()=>u,frontMatter:()=>o});var n=JSON.parse('{"id":"user/quick-start/software-center/index","title":"Software Center","description":"You can install software ranging from Google Chrome to LibreOffice, as well as update software, via our Software Center.","source":"@site/docs/user/quick-start/software-center/index.md","sourceDirName":"user/quick-start/software-center","slug":"/user/quick-start/software-center/","permalink":"/docs/user/quick-start/software-center/","draft":false,"unlisted":false,"editUrl":"https://github.com/getsolus/help-center-docs/tree/master/docs/user/quick-start/software-center/index.md","tags":[],"version":"current","lastUpdatedAt":1733757592000,"frontMatter":{"title":"Software Center","summary":"Introduction to the Solus Software Center"},"sidebar":"userSidebar","previous":{"title":"System Requirements","permalink":"/docs/user/quick-start/installation/system-requirements"},"next":{"title":"Contributing","permalink":"/docs/category/contributing"}}'),s=r("85893"),a=r("50065");let o={title:"Software Center",summary:"Introduction to the Solus Software Center"},i="Software Center",c={},u=[];function l(e){let t={a:"a",code:"code",h1:"h1",header:"header",img:"img",p:"p",...(0,a.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.header,{children:(0,s.jsx)(t.h1,{id:"software-center",children:"Software Center"})}),"\n",(0,s.jsx)(t.p,{children:"You can install software ranging from Google Chrome to LibreOffice, as well as update software, via our Software Center."}),"\n",(0,s.jsx)(t.p,{children:(0,s.jsx)(t.img,{alt:"Software Center",src:r(56326).Z+"",width:"949",height:"698"})}),"\n",(0,s.jsxs)(t.p,{children:["Solus uses the ",(0,s.jsx)(t.code,{children:"eopkg"})," package manager, which is not compatible with either ",(0,s.jsx)(t.code,{children:"deb"})," or ",(0,s.jsx)(t.code,{children:"rpm"})," packages offered by other Linux-based operating systems.\nFor information on how to use eopkg directly, see the ",(0,s.jsx)(t.a,{href:"/docs/category/package-management/",children:"Package Management section"})]}),"\n",(0,s.jsx)(t.p,{children:'You can also use a number of distribution-agnostic (or "universal") package managers to install applications, including Snap, Flatpak, and AppImage.'})]})}function d(e={}){let{wrapper:t}={...(0,a.a)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(l,{...e})}):l(e)}},56326:function(e,t,r){r.d(t,{Z:function(){return n}});let n=r.p+"assets/images/solus-sc-563436dafaad570539db7231fc5ed77e.jpg"},50065:function(e,t,r){r.d(t,{Z:function(){return i},a:function(){return o}});var n=r(67294);let s={},a=n.createContext(s);function o(e){let t=n.useContext(a);return n.useMemo(function(){return"function"==typeof e?e(t):{...t,...e}},[t,e])}function i(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:o(e.components),n.createElement(a.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/ed2a5927.f68db7ff.js b/assets/js/ed2a5927.f68db7ff.js deleted file mode 100644 index 947734893..000000000 --- a/assets/js/ed2a5927.f68db7ff.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[4560],{18653:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>c,contentTitle:()=>a,default:()=>l,frontMatter:()=>o,metadata:()=>i,toc:()=>u});var n=r(85893),s=r(11151);const o={title:"Software Center",summary:"Introduction to the Solus Software Center"},a="Software Center",i={id:"user/quick-start/software-center/index",title:"Software Center",description:"You can install software ranging from Google Chrome to LibreOffice, as well as update software, via our Software Center.",source:"@site/docs/user/quick-start/software-center/index.md",sourceDirName:"user/quick-start/software-center",slug:"/user/quick-start/software-center/",permalink:"/docs/user/quick-start/software-center/",draft:!1,unlisted:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/quick-start/software-center/index.md",tags:[],version:"current",lastUpdatedAt:1732716912e3,frontMatter:{title:"Software Center",summary:"Introduction to the Solus Software Center"},sidebar:"userSidebar",previous:{title:"System Requirements",permalink:"/docs/user/quick-start/installation/system-requirements"},next:{title:"Contributing",permalink:"/docs/category/contributing"}},c={},u=[];function d(e){const t={a:"a",code:"code",h1:"h1",header:"header",img:"img",p:"p",...(0,s.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.header,{children:(0,n.jsx)(t.h1,{id:"software-center",children:"Software Center"})}),"\n",(0,n.jsx)(t.p,{children:"You can install software ranging from Google Chrome to LibreOffice, as well as update software, via our Software Center."}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.img,{alt:"Software Center",src:r(34830).Z+"",width:"949",height:"698"})}),"\n",(0,n.jsxs)(t.p,{children:["Solus uses the ",(0,n.jsx)(t.code,{children:"eopkg"})," package manager, which is not compatible with either ",(0,n.jsx)(t.code,{children:"deb"})," or ",(0,n.jsx)(t.code,{children:"rpm"})," packages offered by other Linux-based operating systems.\nFor information on how to use eopkg directly, see the ",(0,n.jsx)(t.a,{href:"/docs/category/package-management/",children:"Package Management section"})]}),"\n",(0,n.jsx)(t.p,{children:'You can also use a number of distribution-agnostic (or "universal") package managers to install applications, including Snap, Flatpak, and AppImage.'})]})}function l(e={}){const{wrapper:t}={...(0,s.a)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(d,{...e})}):d(e)}},34830:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r.p+"assets/images/solus-sc-563436dafaad570539db7231fc5ed77e.jpg"},11151:(e,t,r)=>{r.d(t,{Z:()=>i,a:()=>a});var n=r(67294);const s={},o=n.createContext(s);function a(e){const t=n.useContext(o);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function i(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:a(e.components),n.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/ef8b811a.38a80317.js b/assets/js/ef8b811a.38a80317.js new file mode 100644 index 000000000..e003096cf --- /dev/null +++ b/assets/js/ef8b811a.38a80317.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([["2134"],{96007:function(t){t.exports=JSON.parse('{"authors":[{"name":"Joey Riches","title":"Solus Staff","page":{"permalink":"/blog/authors/joey"},"socials":{"github":"https://github.com/joebonrichie"},"imageURL":"https://avatars.githubusercontent.com/u/5338090","key":"joey","count":2},{"name":"David Harder","title":"Solus Staff","page":{"permalink":"/blog/authors/david"},"socials":{"github":"https://github.com/davidjharder"},"imageURL":"https://avatars.githubusercontent.com/u/23007135","key":"david","count":2},{"name":"Muhammad Alfi Syahrin","title":"Solus Staff","page":{"permalink":"/blog/authors/alfi"},"socials":{"github":"https://github.com/malfisya"},"imageURL":"https://avatars.githubusercontent.com/u/101771435","key":"alfi","count":1}]}')}}]); \ No newline at end of file diff --git a/assets/js/ef8b811a.5c57c19d.js b/assets/js/ef8b811a.5c57c19d.js deleted file mode 100644 index 6d4ea9a72..000000000 --- a/assets/js/ef8b811a.5c57c19d.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[2644],{89441:t=>{t.exports=JSON.parse('{"authors":[{"name":"Joey Riches","title":"Solus Staff","page":{"permalink":"/blog/authors/joey"},"socials":{"github":"https://github.com/joebonrichie"},"imageURL":"https://avatars.githubusercontent.com/u/5338090","key":"joey","count":2},{"name":"David Harder","title":"Solus Staff","page":{"permalink":"/blog/authors/david"},"socials":{"github":"https://github.com/davidjharder"},"imageURL":"https://avatars.githubusercontent.com/u/23007135","key":"david","count":2},{"name":"Muhammad Alfi Syahrin","title":"Solus Staff","page":{"permalink":"/blog/authors/alfi"},"socials":{"github":"https://github.com/malfisya"},"imageURL":"https://avatars.githubusercontent.com/u/101771435","key":"alfi","count":1}]}')}}]); \ No newline at end of file diff --git a/assets/js/f0629c21.220ef5fc.js b/assets/js/f0629c21.220ef5fc.js deleted file mode 100644 index 38c6dce7d..000000000 --- a/assets/js/f0629c21.220ef5fc.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[3375],{53126:(e,n,o)=>{o.r(n),o.d(n,{assets:()=>a,contentTitle:()=>l,default:()=>u,frontMatter:()=>t,metadata:()=>r,toc:()=>d});var s=o(85893),i=o(11151);const t={title:"Open Broadcaster Software (OBS)",summary:"A quick start guide to OBS on Solus"},l="Open Broadcaster Software (OBS)",r={id:"user/software/web/obs",title:"Open Broadcaster Software (OBS)",description:"This article covers the installation of OBS Studio as well as the use of third-party plugins.",source:"@site/docs/user/software/web/obs.md",sourceDirName:"user/software/web",slug:"/user/software/web/obs",permalink:"/docs/user/software/web/obs",draft:!1,unlisted:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/software/web/obs.md",tags:[],version:"current",lastUpdatedAt:1732716912e3,frontMatter:{title:"Open Broadcaster Software (OBS)",summary:"A quick start guide to OBS on Solus"},sidebar:"userSidebar",previous:{title:"Web",permalink:"/docs/category/web"},next:{title:"Troubleshooting",permalink:"/docs/user/troubleshooting/"}},a={},d=[{value:"Installation",id:"installation",level:2},{value:"Virtual camera",id:"virtual-camera",level:2},{value:"Plugins",id:"plugins",level:2},{value:"Known working plugins",id:"known-working-plugins",level:3},{value:"Input Overlay",id:"input-overlay",level:4}];function c(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",header:"header",img:"img",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,i.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.header,{children:(0,s.jsx)(n.h1,{id:"open-broadcaster-software-obs",children:"Open Broadcaster Software (OBS)"})}),"\n",(0,s.jsx)(n.p,{children:"This article covers the installation of OBS Studio as well as the use of third-party plugins."}),"\n",(0,s.jsx)(n.h2,{id:"installation",children:"Installation"}),"\n",(0,s.jsxs)(n.p,{children:["To install OBS Studio, either open up the Software Center and type ",(0,s.jsx)(n.code,{children:"obs-studio"})," into the Search section or run the following command:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"sudo eopkg install obs-studio\n"})}),"\n",(0,s.jsx)(n.h2,{id:"virtual-camera",children:"Virtual camera"}),"\n",(0,s.jsx)(n.p,{children:'OBS includes a virtual webcam device which can be used to send your OBS stream to video conferencing programs. In order to use this on Solus, you must first install from our repository a separate kernel module that is responsible for creating the necessary "loopback" device. There are two versions of this software available in the repository, you must choose the version that corresponds to the kernel you have installed.'}),"\n",(0,s.jsx)(n.p,{children:"To find out which kernel is installed, run:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"uname -r\n"})}),"\n",(0,s.jsxs)(n.p,{children:["This should return a version which ends in ",(0,s.jsx)(n.code,{children:".current"})," or ",(0,s.jsx)(n.code,{children:".lts"}),"."]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:['If you are running the "current" kernel, install ',(0,s.jsx)(n.code,{children:"v4l2loopback-current"}),": ",(0,s.jsx)(n.code,{children:"sudo eopkg install v4l2loopback-current"})]}),"\n",(0,s.jsxs)(n.li,{children:['If you are running the "lts" kernel, install ',(0,s.jsx)(n.code,{children:"v4l2loopback"}),": ",(0,s.jsx)(n.code,{children:"sudo eopkg install v4l2loopback"})]}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"Once v4l2loopback is installed, reboot your computer. Next time you start OBS, it will prompt you for your password to set up v4l2loopback. After that, the virtual camera should be available as a webcam in other programs."}),"\n",(0,s.jsx)(n.h2,{id:"plugins",children:"Plugins"}),"\n",(0,s.jsxs)(n.p,{children:["All OBS Studio plugins should be installed into their own respective folders inside the ",(0,s.jsx)(n.code,{children:"~/.config/obs-studio/plugins"})," folder. If this folder does not exist for you, you'll need to create it before copying plugins into it."]}),"\n",(0,s.jsx)(n.p,{children:"When installing a plugin, the directory tree should look something like the following:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{children:"plugins\n\u2514\u2500\u2500 plugin-name\n \u251c\u2500\u2500 bin\n \u2502\xa0\xa0 \u2514\u2500\u2500 64bit\n \u2502\xa0\xa0 \u2514\u2500\u2500 filename.so\n \u251c\u2500\u2500 data\n \u2502\xa0\xa0 \u2514\u2500\u2500 locale\n \u2502\xa0\xa0 \u2514\u2500\u2500 en-US.ini\n"})}),"\n",(0,s.jsxs)(n.p,{children:["In essence, you should have ",(0,s.jsx)(n.code,{children:"bin/64bit"})," folders inside the plugin folder, with any shared object plugin files inside that. As OBS Studio for Solus only supports 64-bit, the plugin ",(0,s.jsx)(n.strong,{children:"must"})," support 64-bit as well."]}),"\n",(0,s.jsxs)(n.p,{children:["Additionally, the plugin may come with additional files or folders, such as locale information. That locale information should be located in ",(0,s.jsx)(n.code,{children:"data/locale"}),"."]}),"\n",(0,s.jsxs)(n.p,{children:["Most Linux-supporting plugins should provide pre-compiled tarballs or zip files that you can extract to get a pre-made / ready folder structure that you can simply copy / paste into ",(0,s.jsx)(n.code,{children:"~/.config/obs-studio/plugins"})]}),"\n",(0,s.jsx)(n.h3,{id:"known-working-plugins",children:"Known working plugins"}),"\n",(0,s.jsx)(n.h4,{id:"input-overlay",children:"Input Overlay"}),"\n",(0,s.jsxs)(n.p,{children:["The Input Overlay plugin enables you to show an input overlay of your gamepad, mouse, or keyboard. Pre-compiled release files are available on the Releases section of the ",(0,s.jsx)(n.a,{href:"https://github.com/univrsal/input-overlay",children:"developer's website"}),"."]}),"\n",(0,s.jsx)(n.p,{children:"To install Input Overlay, download the input-overlay-vNUM.zip file from their releases page, where NUM is the latest release number, such as 4.4."}),"\n",(0,s.jsx)(n.p,{children:"Next, we'll install a library necessary to use the Input Overlay plugin, as well as an unzip tool to make the installation process easier. Run the following command:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"sudo eopkg install libuiohook unzip\n"})}),"\n",(0,s.jsx)(n.p,{children:"Next, click on the zip file in your File Manager to open up the Extract tool (such as File Roller). You will be presented with contents like the following."}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.img,{alt:"Input Overlay Zip",src:o(45594).Z+"",width:"770",height:"348"})}),"\n",(0,s.jsxs)(n.p,{children:["Let's extract this to our Downloads folder to make the process of copying the contents we need more easily. Click the Extract button in the image indicated above. This will present you with a file dialog. Navigate to the Downloads folder and click Extract. This will create a folder, likely called something similar to ",(0,s.jsx)(n.code,{children:"input-overlay.v4.4"}),"."]}),"\n",(0,s.jsx)(n.p,{children:"Next let's run the following commands in the Terminal. The commands below will:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Remove our zip file to make our directory renaming more reliable."}),"\n",(0,s.jsx)(n.li,{children:"Move our extracted input overlay in our Downloads directory to one which is without a version number, to make it easier for future commands."}),"\n",(0,s.jsx)(n.li,{children:"Extract all the preset zips and remove their zip files"}),"\n",(0,s.jsxs)(n.li,{children:["Create an ",(0,s.jsx)(n.code,{children:"input-overlay"})," folder in ",(0,s.jsx)(n.code,{children:"~/.config/obs-studio/plugins"})," as well as creating the ",(0,s.jsx)(n.code,{children:"plugins"})," folder if needed."]}),"\n",(0,s.jsx)(n.li,{children:"Copy over the necessary and recommended folders and files to our input-overlay plugin folder."}),"\n"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:'rm ~/Downloads/input-overlay*.zip\nmv ~/Downloads/input-overlay.v* ~/Downloads/input-overlay\ncd ~/Downloads/input-overlay/presets\nfor file in `ls *.zip`; do unzip "${file}" -d "${file:0:-4}"; done\nrm *.zip\nmkdir -p ~/.config/obs-studio/plugins/input-overlay\ncp -R ~/Downloads/input-overlay/plugin-linux/* ~/.config/obs-studio/plugins/input-overlay/\ncp -R ~/Downloads/input-overlay/presets ~/.config/obs-studio/plugins/input-overlay/\n'})}),"\n",(0,s.jsx)(n.p,{children:"Now the Input Overlay source is available to us as a source (if you have OBS Studio already open, restart it), as shown in the below screenshot."}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.img,{alt:"Input Overlay: Source Menu",src:o(27549).Z+"",width:"1000",height:"600"})}),"\n",(0,s.jsx)(n.p,{children:"Upon clicking on this source, we'll be presented with the usual add / use existing source dialog."}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.img,{alt:"Input Overlay: Add Existing Source",src:o(52985).Z+"",width:"791",height:"540"})}),"\n",(0,s.jsx)(n.p,{children:"After naming a source, such as \"Mouse\", click OK and you'll be presented with a dialog that looks similar to below. Do note that yours will be empty by default, as you've not yet selected an Overlay image file and Layout config file yet."}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.img,{alt:"Input Overlay: Main Source",src:o(1515).Z+"",width:"1032",height:"783"})}),"\n",(0,s.jsxs)(n.p,{children:["This is where the presets come in handy. Click the Browse button for Overlay image file and navigate to ",(0,s.jsx)(n.code,{children:".config/obs-studio/plugins/presets"})," and then the respective preset you want, such as mouse, and then the PNG within it. ",(0,s.jsx)(n.strong,{children:"You will need to enable hidden files"})," in the file dialog by using the keyboard combination ",(0,s.jsx)(n.code,{children:"Ctrl+H"})," to see ",(0,s.jsx)(n.code,{children:".config"})]}),"\n",(0,s.jsxs)(n.p,{children:["Next, do the same for Layout config overlay, but instead go to the same folder as your PNG and select the ",(0,s.jsx)(n.code,{children:"ini"})," file."]}),"\n",(0,s.jsx)(n.p,{children:'If you\'re using a mouse or gamepad, be sure to check the "Mouse overlay" or "Gamepad overlay" boxes respectively and tweak settings as you see fit.'})]})}function u(e={}){const{wrapper:n}={...(0,i.a)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(c,{...e})}):c(e)}},52985:(e,n,o)=>{o.d(n,{Z:()=>s});const s=o.p+"assets/images/input-overlay-source-add-existing-d472cc90ae7590dd14f41fa8e7a249d5.jpg"},1515:(e,n,o)=>{o.d(n,{Z:()=>s});const s=o.p+"assets/images/input-overlay-source-main-8fdfb8ec5ad7ba5006f03737eebcc8c8.jpg"},27549:(e,n,o)=>{o.d(n,{Z:()=>s});const s=o.p+"assets/images/input-overlay-source-menu-ef421b6d9afa2c80e8f2c84e15adb843.jpg"},45594:(e,n,o)=>{o.d(n,{Z:()=>s});const s=o.p+"assets/images/input-overlay-zip-12cbf3b807ebdf130723291e940f425d.jpg"},11151:(e,n,o)=>{o.d(n,{Z:()=>r,a:()=>l});var s=o(67294);const i={},t=s.createContext(i);function l(e){const n=s.useContext(t);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function r(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:l(e.components),s.createElement(t.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/f0629c21.8c4a1e13.js b/assets/js/f0629c21.8c4a1e13.js new file mode 100644 index 000000000..fff6334fa --- /dev/null +++ b/assets/js/f0629c21.8c4a1e13.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([["4639"],{19549:function(e,n,o){o.r(n),o.d(n,{metadata:()=>i,contentTitle:()=>r,default:()=>u,assets:()=>a,toc:()=>d,frontMatter:()=>l});var i=JSON.parse('{"id":"user/software/web/obs","title":"Open Broadcaster Software (OBS)","description":"This article covers the installation of OBS Studio as well as the use of third-party plugins.","source":"@site/docs/user/software/web/obs.md","sourceDirName":"user/software/web","slug":"/user/software/web/obs","permalink":"/docs/user/software/web/obs","draft":false,"unlisted":false,"editUrl":"https://github.com/getsolus/help-center-docs/tree/master/docs/user/software/web/obs.md","tags":[],"version":"current","lastUpdatedAt":1733757592000,"frontMatter":{"title":"Open Broadcaster Software (OBS)","summary":"A quick start guide to OBS on Solus"},"sidebar":"userSidebar","previous":{"title":"Web","permalink":"/docs/category/web"},"next":{"title":"Troubleshooting","permalink":"/docs/user/troubleshooting/"}}'),t=o("85893"),s=o("50065");let l={title:"Open Broadcaster Software (OBS)",summary:"A quick start guide to OBS on Solus"},r="Open Broadcaster Software (OBS)",a={},d=[{value:"Installation",id:"installation",level:2},{value:"Virtual camera",id:"virtual-camera",level:2},{value:"Plugins",id:"plugins",level:2},{value:"Known working plugins",id:"known-working-plugins",level:3},{value:"Input Overlay",id:"input-overlay",level:4}];function c(e){let n={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",header:"header",img:"img",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,s.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.header,{children:(0,t.jsx)(n.h1,{id:"open-broadcaster-software-obs",children:"Open Broadcaster Software (OBS)"})}),"\n",(0,t.jsx)(n.p,{children:"This article covers the installation of OBS Studio as well as the use of third-party plugins."}),"\n",(0,t.jsx)(n.h2,{id:"installation",children:"Installation"}),"\n",(0,t.jsxs)(n.p,{children:["To install OBS Studio, either open up the Software Center and type ",(0,t.jsx)(n.code,{children:"obs-studio"})," into the Search section or run the following command:"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"sudo eopkg install obs-studio\n"})}),"\n",(0,t.jsx)(n.h2,{id:"virtual-camera",children:"Virtual camera"}),"\n",(0,t.jsx)(n.p,{children:'OBS includes a virtual webcam device which can be used to send your OBS stream to video conferencing programs. In order to use this on Solus, you must first install from our repository a separate kernel module that is responsible for creating the necessary "loopback" device. There are two versions of this software available in the repository, you must choose the version that corresponds to the kernel you have installed.'}),"\n",(0,t.jsx)(n.p,{children:"To find out which kernel is installed, run:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"uname -r\n"})}),"\n",(0,t.jsxs)(n.p,{children:["This should return a version which ends in ",(0,t.jsx)(n.code,{children:".current"})," or ",(0,t.jsx)(n.code,{children:".lts"}),"."]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:['If you are running the "current" kernel, install ',(0,t.jsx)(n.code,{children:"v4l2loopback-current"}),": ",(0,t.jsx)(n.code,{children:"sudo eopkg install v4l2loopback-current"})]}),"\n",(0,t.jsxs)(n.li,{children:['If you are running the "lts" kernel, install ',(0,t.jsx)(n.code,{children:"v4l2loopback"}),": ",(0,t.jsx)(n.code,{children:"sudo eopkg install v4l2loopback"})]}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:"Once v4l2loopback is installed, reboot your computer. Next time you start OBS, it will prompt you for your password to set up v4l2loopback. After that, the virtual camera should be available as a webcam in other programs."}),"\n",(0,t.jsx)(n.h2,{id:"plugins",children:"Plugins"}),"\n",(0,t.jsxs)(n.p,{children:["All OBS Studio plugins should be installed into their own respective folders inside the ",(0,t.jsx)(n.code,{children:"~/.config/obs-studio/plugins"})," folder. If this folder does not exist for you, you'll need to create it before copying plugins into it."]}),"\n",(0,t.jsx)(n.p,{children:"When installing a plugin, the directory tree should look something like the following:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{children:"plugins\n\u2514\u2500\u2500 plugin-name\n \u251C\u2500\u2500 bin\n \u2502\xa0\xa0 \u2514\u2500\u2500 64bit\n \u2502\xa0\xa0 \u2514\u2500\u2500 filename.so\n \u251C\u2500\u2500 data\n \u2502\xa0\xa0 \u2514\u2500\u2500 locale\n \u2502\xa0\xa0 \u2514\u2500\u2500 en-US.ini\n"})}),"\n",(0,t.jsxs)(n.p,{children:["In essence, you should have ",(0,t.jsx)(n.code,{children:"bin/64bit"})," folders inside the plugin folder, with any shared object plugin files inside that. As OBS Studio for Solus only supports 64-bit, the plugin ",(0,t.jsx)(n.strong,{children:"must"})," support 64-bit as well."]}),"\n",(0,t.jsxs)(n.p,{children:["Additionally, the plugin may come with additional files or folders, such as locale information. That locale information should be located in ",(0,t.jsx)(n.code,{children:"data/locale"}),"."]}),"\n",(0,t.jsxs)(n.p,{children:["Most Linux-supporting plugins should provide pre-compiled tarballs or zip files that you can extract to get a pre-made / ready folder structure that you can simply copy / paste into ",(0,t.jsx)(n.code,{children:"~/.config/obs-studio/plugins"})]}),"\n",(0,t.jsx)(n.h3,{id:"known-working-plugins",children:"Known working plugins"}),"\n",(0,t.jsx)(n.h4,{id:"input-overlay",children:"Input Overlay"}),"\n",(0,t.jsxs)(n.p,{children:["The Input Overlay plugin enables you to show an input overlay of your gamepad, mouse, or keyboard. Pre-compiled release files are available on the Releases section of the ",(0,t.jsx)(n.a,{href:"https://github.com/univrsal/input-overlay",children:"developer's website"}),"."]}),"\n",(0,t.jsx)(n.p,{children:"To install Input Overlay, download the input-overlay-vNUM.zip file from their releases page, where NUM is the latest release number, such as 4.4."}),"\n",(0,t.jsx)(n.p,{children:"Next, we'll install a library necessary to use the Input Overlay plugin, as well as an unzip tool to make the installation process easier. Run the following command:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"sudo eopkg install libuiohook unzip\n"})}),"\n",(0,t.jsx)(n.p,{children:"Next, click on the zip file in your File Manager to open up the Extract tool (such as File Roller). You will be presented with contents like the following."}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"Input Overlay Zip",src:o(10307).Z+"",width:"770",height:"348"})}),"\n",(0,t.jsxs)(n.p,{children:["Let's extract this to our Downloads folder to make the process of copying the contents we need more easily. Click the Extract button in the image indicated above. This will present you with a file dialog. Navigate to the Downloads folder and click Extract. This will create a folder, likely called something similar to ",(0,t.jsx)(n.code,{children:"input-overlay.v4.4"}),"."]}),"\n",(0,t.jsx)(n.p,{children:"Next let's run the following commands in the Terminal. The commands below will:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"Remove our zip file to make our directory renaming more reliable."}),"\n",(0,t.jsx)(n.li,{children:"Move our extracted input overlay in our Downloads directory to one which is without a version number, to make it easier for future commands."}),"\n",(0,t.jsx)(n.li,{children:"Extract all the preset zips and remove their zip files"}),"\n",(0,t.jsxs)(n.li,{children:["Create an ",(0,t.jsx)(n.code,{children:"input-overlay"})," folder in ",(0,t.jsx)(n.code,{children:"~/.config/obs-studio/plugins"})," as well as creating the ",(0,t.jsx)(n.code,{children:"plugins"})," folder if needed."]}),"\n",(0,t.jsx)(n.li,{children:"Copy over the necessary and recommended folders and files to our input-overlay plugin folder."}),"\n"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:'rm ~/Downloads/input-overlay*.zip\nmv ~/Downloads/input-overlay.v* ~/Downloads/input-overlay\ncd ~/Downloads/input-overlay/presets\nfor file in `ls *.zip`; do unzip "${file}" -d "${file:0:-4}"; done\nrm *.zip\nmkdir -p ~/.config/obs-studio/plugins/input-overlay\ncp -R ~/Downloads/input-overlay/plugin-linux/* ~/.config/obs-studio/plugins/input-overlay/\ncp -R ~/Downloads/input-overlay/presets ~/.config/obs-studio/plugins/input-overlay/\n'})}),"\n",(0,t.jsx)(n.p,{children:"Now the Input Overlay source is available to us as a source (if you have OBS Studio already open, restart it), as shown in the below screenshot."}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"Input Overlay: Source Menu",src:o(39785).Z+"",width:"1000",height:"600"})}),"\n",(0,t.jsx)(n.p,{children:"Upon clicking on this source, we'll be presented with the usual add / use existing source dialog."}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"Input Overlay: Add Existing Source",src:o(62470).Z+"",width:"791",height:"540"})}),"\n",(0,t.jsx)(n.p,{children:"After naming a source, such as \"Mouse\", click OK and you'll be presented with a dialog that looks similar to below. Do note that yours will be empty by default, as you've not yet selected an Overlay image file and Layout config file yet."}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"Input Overlay: Main Source",src:o(22768).Z+"",width:"1032",height:"783"})}),"\n",(0,t.jsxs)(n.p,{children:["This is where the presets come in handy. Click the Browse button for Overlay image file and navigate to ",(0,t.jsx)(n.code,{children:".config/obs-studio/plugins/presets"})," and then the respective preset you want, such as mouse, and then the PNG within it. ",(0,t.jsx)(n.strong,{children:"You will need to enable hidden files"})," in the file dialog by using the keyboard combination ",(0,t.jsx)(n.code,{children:"Ctrl+H"})," to see ",(0,t.jsx)(n.code,{children:".config"})]}),"\n",(0,t.jsxs)(n.p,{children:["Next, do the same for Layout config overlay, but instead go to the same folder as your PNG and select the ",(0,t.jsx)(n.code,{children:"ini"})," file."]}),"\n",(0,t.jsx)(n.p,{children:'If you\'re using a mouse or gamepad, be sure to check the "Mouse overlay" or "Gamepad overlay" boxes respectively and tweak settings as you see fit.'})]})}function u(e={}){let{wrapper:n}={...(0,s.a)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(c,{...e})}):c(e)}},62470:function(e,n,o){o.d(n,{Z:function(){return i}});let i=o.p+"assets/images/input-overlay-source-add-existing-d472cc90ae7590dd14f41fa8e7a249d5.jpg"},22768:function(e,n,o){o.d(n,{Z:function(){return i}});let i=o.p+"assets/images/input-overlay-source-main-8fdfb8ec5ad7ba5006f03737eebcc8c8.jpg"},39785:function(e,n,o){o.d(n,{Z:function(){return i}});let i=o.p+"assets/images/input-overlay-source-menu-ef421b6d9afa2c80e8f2c84e15adb843.jpg"},10307:function(e,n,o){o.d(n,{Z:function(){return i}});let i=o.p+"assets/images/input-overlay-zip-12cbf3b807ebdf130723291e940f425d.jpg"},50065:function(e,n,o){o.d(n,{Z:function(){return r},a:function(){return l}});var i=o(67294);let t={},s=i.createContext(t);function l(e){let n=i.useContext(s);return i.useMemo(function(){return"function"==typeof e?e(n):{...n,...e}},[n,e])}function r(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:l(e.components),i.createElement(s.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/f1d13e1b.736a2c39.js b/assets/js/f1d13e1b.736a2c39.js deleted file mode 100644 index 8ff07203a..000000000 --- a/assets/js/f1d13e1b.736a2c39.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[5462],{16467:(e,t,s)=>{s.r(t),s.d(t,{assets:()=>d,contentTitle:()=>o,default:()=>l,frontMatter:()=>i,metadata:()=>a,toc:()=>c});var r=s(85893),n=s(11151);const i={title:"Tips and Tricks",summary:"Helpful tips and tricks for using MATE on Solus"},o="Tips and Tricks",a={id:"user/editions/mate/tips-and-tricks",title:"Tips and Tricks",description:"MATE Keyboard Shortcuts",source:"@site/docs/user/editions/mate/tips-and-tricks.md",sourceDirName:"user/editions/mate",slug:"/user/editions/mate/tips-and-tricks",permalink:"/docs/user/editions/mate/tips-and-tricks",draft:!1,unlisted:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/editions/mate/tips-and-tricks.md",tags:[],version:"current",lastUpdatedAt:1732716912e3,frontMatter:{title:"Tips and Tricks",summary:"Helpful tips and tricks for using MATE on Solus"},sidebar:"userSidebar",previous:{title:"Configuration",permalink:"/docs/user/editions/mate/configuration"},next:{title:"Plasma",permalink:"/docs/user/editions/plasma/"}},d={},c=[{value:"MATE Keyboard Shortcuts",id:"mate-keyboard-shortcuts",level:2}];function u(e){const t={h1:"h1",h2:"h2",header:"header",p:"p",...(0,n.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.header,{children:(0,r.jsx)(t.h1,{id:"tips-and-tricks",children:"Tips and Tricks"})}),"\n",(0,r.jsx)(t.h2,{id:"mate-keyboard-shortcuts",children:"MATE Keyboard Shortcuts"}),"\n",(0,r.jsx)(t.p,{children:"TODO: Provide a table of short-cuts like we did for Budgie"}),"\n",(0,r.jsx)(t.p,{children:"TODO: Add a few other tips and tricks useful to MATE users"})]})}function l(e={}){const{wrapper:t}={...(0,n.a)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(u,{...e})}):u(e)}},11151:(e,t,s)=>{s.d(t,{Z:()=>a,a:()=>o});var r=s(67294);const n={},i=r.createContext(n);function o(e){const t=r.useContext(i);return r.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:o(e.components),r.createElement(i.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/f1d13e1b.a2a60264.js b/assets/js/f1d13e1b.a2a60264.js new file mode 100644 index 000000000..a5ab5e3fa --- /dev/null +++ b/assets/js/f1d13e1b.a2a60264.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([["9227"],{64954:function(e,t,s){s.r(t),s.d(t,{metadata:()=>r,contentTitle:()=>a,default:()=>l,assets:()=>d,toc:()=>c,frontMatter:()=>o});var r=JSON.parse('{"id":"user/editions/mate/tips-and-tricks","title":"Tips and Tricks","description":"MATE Keyboard Shortcuts","source":"@site/docs/user/editions/mate/tips-and-tricks.md","sourceDirName":"user/editions/mate","slug":"/user/editions/mate/tips-and-tricks","permalink":"/docs/user/editions/mate/tips-and-tricks","draft":false,"unlisted":false,"editUrl":"https://github.com/getsolus/help-center-docs/tree/master/docs/user/editions/mate/tips-and-tricks.md","tags":[],"version":"current","lastUpdatedAt":1733757592000,"frontMatter":{"title":"Tips and Tricks","summary":"Helpful tips and tricks for using MATE on Solus"},"sidebar":"userSidebar","previous":{"title":"Configuration","permalink":"/docs/user/editions/mate/configuration"},"next":{"title":"Plasma","permalink":"/docs/user/editions/plasma/"}}'),n=s("85893"),i=s("50065");let o={title:"Tips and Tricks",summary:"Helpful tips and tricks for using MATE on Solus"},a="Tips and Tricks",d={},c=[{value:"MATE Keyboard Shortcuts",id:"mate-keyboard-shortcuts",level:2}];function u(e){let t={h1:"h1",h2:"h2",header:"header",p:"p",...(0,i.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.header,{children:(0,n.jsx)(t.h1,{id:"tips-and-tricks",children:"Tips and Tricks"})}),"\n",(0,n.jsx)(t.h2,{id:"mate-keyboard-shortcuts",children:"MATE Keyboard Shortcuts"}),"\n",(0,n.jsx)(t.p,{children:"TODO: Provide a table of short-cuts like we did for Budgie"}),"\n",(0,n.jsx)(t.p,{children:"TODO: Add a few other tips and tricks useful to MATE users"})]})}function l(e={}){let{wrapper:t}={...(0,i.a)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(u,{...e})}):u(e)}},50065:function(e,t,s){s.d(t,{Z:function(){return a},a:function(){return o}});var r=s(67294);let n={},i=r.createContext(n);function o(e){let t=r.useContext(i);return r.useMemo(function(){return"function"==typeof e?e(t):{...t,...e}},[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:o(e.components),r.createElement(i.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/f32bcb79.1a54b319.js b/assets/js/f32bcb79.1a54b319.js new file mode 100644 index 000000000..900ab4004 --- /dev/null +++ b/assets/js/f32bcb79.1a54b319.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([["8025"],{24816:function(t){t.exports=JSON.parse('{"tag":{"label":"firstpost","permalink":"/blog/tags/firstpost","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/firstpost","page":1,"postsPerPage":1,"totalPages":1,"totalCount":1,"blogDescription":"The Solus Development (b)log!","blogTitle":"Solus DevLog"}}')}}]); \ No newline at end of file diff --git a/assets/js/f32bcb79.c99ad29c.js b/assets/js/f32bcb79.c99ad29c.js deleted file mode 100644 index 77a1f5362..000000000 --- a/assets/js/f32bcb79.c99ad29c.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[6515],{15631:e=>{e.exports=JSON.parse('{"tag":{"label":"firstpost","permalink":"/blog/tags/firstpost","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/firstpost","page":1,"postsPerPage":1,"totalPages":1,"totalCount":1,"blogDescription":"The Solus Development (b)log!","blogTitle":"Solus DevLog"}}')}}]); \ No newline at end of file diff --git a/assets/js/f35b91b6.239937fe.js b/assets/js/f35b91b6.239937fe.js deleted file mode 100644 index 2f81052b4..000000000 --- a/assets/js/f35b91b6.239937fe.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[9749],{78677:(e,o,t)=>{t.r(o),t.d(o,{assets:()=>r,contentTitle:()=>i,default:()=>h,frontMatter:()=>n,metadata:()=>a,toc:()=>u});var s=t(85893),l=t(11151);const n={title:"Welcome to the Solus Devlog",description:"Welcome to the Solus Development Log.",slug:"welcome-solus-devlog-v1",authors:"joey",tags:["hello","devlog","firstpost","solus"],hide_table_of_contents:!1},i=void 0,a={permalink:"/blog/welcome-solus-devlog-v1",source:"@site/devlog/2024-01-13-welcome-devlog.md",title:"Welcome to the Solus Devlog",description:"Welcome to the Solus Development Log.",date:"2024-01-13T00:00:00.000Z",tags:[{inline:!0,label:"hello",permalink:"/blog/tags/hello"},{inline:!0,label:"devlog",permalink:"/blog/tags/devlog"},{inline:!0,label:"firstpost",permalink:"/blog/tags/firstpost"},{inline:!0,label:"solus",permalink:"/blog/tags/solus"}],readingTime:.9,hasTruncateMarker:!0,authors:[{name:"Joey Riches",title:"Solus Staff",page:{permalink:"/blog/authors/joey"},socials:{github:"https://github.com/joebonrichie"},imageURL:"https://avatars.githubusercontent.com/u/5338090",key:"joey"}],frontMatter:{title:"Welcome to the Solus Devlog",description:"Welcome to the Solus Development Log.",slug:"welcome-solus-devlog-v1",authors:"joey",tags:["hello","devlog","firstpost","solus"],hide_table_of_contents:!1},unlisted:!1,prevItem:{title:"eopkg is dead, long live eopkg",permalink:"/blog/eopkg-is-dead-long-live-eopkg"}},r={authorsImageUrls:[void 0]},u=[];function c(e){const o={a:"a",p:"p",...(0,l.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(o.p,{children:"Welcome to the Solus Development Log."}),"\n",(0,s.jsx)(o.p,{children:"The Solus Development Log will be used by Solus Staff and outside contributors to highlight wins and changes in Solus. Keep an eye on this space."}),"\n",(0,s.jsx)(o.p,{children:"The Solus DevLog has been setup to facilitate improved communication with the outside world; wins, significant changes, as well as challenges, within Solus. Solus Staff and contributors are encouraged to use this space."}),"\n",(0,s.jsxs)(o.p,{children:["The DevLog has been setup as a separate entity to the ",(0,s.jsx)(o.a,{href:"https://getsol.us/blog/",children:"Solus Blog"})," to encourage more short form development content that doesn't require the same level of polish as an official blog post."]}),"\n",(0,s.jsx)(o.p,{children:"It is hoped that this will be used to help communicate what's going on in Solus such that our short-term and medium-term progress, goals, and ambitions are less of a black box to the outside world."}),"\n",(0,s.jsxs)(o.p,{children:["Additionally, we believe it will help provide context to any of our murmurings for any users who keep an eye on the ",(0,s.jsx)(o.a,{href:"https://github.com/getsolus/",children:"getsolus"})," GitHub organization page and the ",(0,s.jsx)(o.a,{href:"https://matrix.to/#/#solus:matrix.org",children:"Solus"})," Matrix channels."]}),"\n",(0,s.jsx)(o.p,{children:"Hope to see you back at this space soon with more content!"})]})}function h(e={}){const{wrapper:o}={...(0,l.a)(),...e.components};return o?(0,s.jsx)(o,{...e,children:(0,s.jsx)(c,{...e})}):c(e)}},11151:(e,o,t)=>{t.d(o,{Z:()=>a,a:()=>i});var s=t(67294);const l={},n=s.createContext(l);function i(e){const o=s.useContext(n);return s.useMemo((function(){return"function"==typeof e?e(o):{...o,...e}}),[o,e])}function a(e){let o;return o=e.disableParentContext?"function"==typeof e.components?e.components(l):e.components||l:i(e.components),s.createElement(n.Provider,{value:o},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/f35b91b6.d946cc37.js b/assets/js/f35b91b6.d946cc37.js new file mode 100644 index 000000000..5ad079a43 --- /dev/null +++ b/assets/js/f35b91b6.d946cc37.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([["8719"],{74298:function(e,t,o){o.r(t),o.d(t,{assets:function(){return a},contentTitle:function(){return r},default:function(){return h},frontMatter:function(){return i},metadata:function(){return n},toc:function(){return u}});var n=o(42650),s=o(85893),l=o(50065);let i={title:"Welcome to the Solus Devlog",description:"Welcome to the Solus Development Log.",slug:"welcome-solus-devlog-v1",authors:"joey",tags:["hello","devlog","firstpost","solus"],hide_table_of_contents:!1},r=void 0,a={authorsImageUrls:[void 0]},u=[];function c(e){let t={a:"a",p:"p",...(0,l.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.p,{children:"Welcome to the Solus Development Log."}),"\n",(0,s.jsx)(t.p,{children:"The Solus Development Log will be used by Solus Staff and outside contributors to highlight wins and changes in Solus. Keep an eye on this space."}),"\n",(0,s.jsx)(t.p,{children:"The Solus DevLog has been setup to facilitate improved communication with the outside world; wins, significant changes, as well as challenges, within Solus. Solus Staff and contributors are encouraged to use this space."}),"\n",(0,s.jsxs)(t.p,{children:["The DevLog has been setup as a separate entity to the ",(0,s.jsx)(t.a,{href:"https://getsol.us/blog/",children:"Solus Blog"})," to encourage more short form development content that doesn't require the same level of polish as an official blog post."]}),"\n",(0,s.jsx)(t.p,{children:"It is hoped that this will be used to help communicate what's going on in Solus such that our short-term and medium-term progress, goals, and ambitions are less of a black box to the outside world."}),"\n",(0,s.jsxs)(t.p,{children:["Additionally, we believe it will help provide context to any of our murmurings for any users who keep an eye on the ",(0,s.jsx)(t.a,{href:"https://github.com/getsolus/",children:"getsolus"})," GitHub organization page and the ",(0,s.jsx)(t.a,{href:"https://matrix.to/#/#solus:matrix.org",children:"Solus"})," Matrix channels."]}),"\n",(0,s.jsx)(t.p,{children:"Hope to see you back at this space soon with more content!"})]})}function h(e={}){let{wrapper:t}={...(0,l.a)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(c,{...e})}):c(e)}},50065:function(e,t,o){o.d(t,{Z:function(){return r},a:function(){return i}});var n=o(67294);let s={},l=n.createContext(s);function i(e){let t=n.useContext(l);return n.useMemo(function(){return"function"==typeof e?e(t):{...t,...e}},[t,e])}function r(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:i(e.components),n.createElement(l.Provider,{value:t},e.children)}},42650:function(e){e.exports=JSON.parse('{"permalink":"/blog/welcome-solus-devlog-v1","source":"@site/devlog/2024-01-13-welcome-devlog.md","title":"Welcome to the Solus Devlog","description":"Welcome to the Solus Development Log.","date":"2024-01-13T00:00:00.000Z","tags":[{"inline":true,"label":"hello","permalink":"/blog/tags/hello"},{"inline":true,"label":"devlog","permalink":"/blog/tags/devlog"},{"inline":true,"label":"firstpost","permalink":"/blog/tags/firstpost"},{"inline":true,"label":"solus","permalink":"/blog/tags/solus"}],"readingTime":0.9,"hasTruncateMarker":true,"authors":[{"name":"Joey Riches","title":"Solus Staff","page":{"permalink":"/blog/authors/joey"},"socials":{"github":"https://github.com/joebonrichie"},"imageURL":"https://avatars.githubusercontent.com/u/5338090","key":"joey"}],"frontMatter":{"title":"Welcome to the Solus Devlog","description":"Welcome to the Solus Development Log.","slug":"welcome-solus-devlog-v1","authors":"joey","tags":["hello","devlog","firstpost","solus"],"hide_table_of_contents":false},"unlisted":false,"prevItem":{"title":"eopkg is dead, long live eopkg","permalink":"/blog/eopkg-is-dead-long-live-eopkg"}}')}}]); \ No newline at end of file diff --git a/assets/js/f3d58343.a6934cc2.js b/assets/js/f3d58343.a6934cc2.js new file mode 100644 index 000000000..7f006c2e5 --- /dev/null +++ b/assets/js/f3d58343.a6934cc2.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([["7269"],{50073:function(e){e.exports=JSON.parse('{"author":{"name":"David Harder","title":"Solus Staff","page":{"permalink":"/blog/authors/david"},"socials":{"github":"https://github.com/davidjharder"},"imageURL":"https://avatars.githubusercontent.com/u/23007135","key":"david","count":2},"listMetadata":{"permalink":"/blog/authors/david","page":1,"postsPerPage":2,"totalPages":1,"totalCount":2,"blogDescription":"The Solus Development (b)log!","blogTitle":"Solus DevLog"}}')}}]); \ No newline at end of file diff --git a/assets/js/f3d58343.c90fcc92.js b/assets/js/f3d58343.c90fcc92.js deleted file mode 100644 index 870b5c5e7..000000000 --- a/assets/js/f3d58343.c90fcc92.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[8812],{11741:e=>{e.exports=JSON.parse('{"author":{"name":"David Harder","title":"Solus Staff","page":{"permalink":"/blog/authors/david"},"socials":{"github":"https://github.com/davidjharder"},"imageURL":"https://avatars.githubusercontent.com/u/23007135","key":"david","count":2},"listMetadata":{"permalink":"/blog/authors/david","page":1,"postsPerPage":2,"totalPages":1,"totalCount":2,"blogDescription":"The Solus Development (b)log!","blogTitle":"Solus DevLog"}}')}}]); \ No newline at end of file diff --git a/assets/js/f4aa4739.a946a5ba.js b/assets/js/f4aa4739.a946a5ba.js new file mode 100644 index 000000000..d15def7b6 --- /dev/null +++ b/assets/js/f4aa4739.a946a5ba.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([["9832"],{19332:function(e,i,t){t.r(i),t.d(i,{metadata:()=>n,contentTitle:()=>r,default:()=>a,assets:()=>u,toc:()=>c,frontMatter:()=>d});var n=JSON.parse('{"id":"user/editions/budgie/index","title":"Budgie","description":"TODO: Add Budgie branding image","source":"@site/docs/user/editions/budgie/index.md","sourceDirName":"user/editions/budgie","slug":"/user/editions/budgie/","permalink":"/docs/user/editions/budgie/","draft":false,"unlisted":false,"editUrl":"https://github.com/getsolus/help-center-docs/tree/master/docs/user/editions/budgie/index.md","tags":[],"version":"current","lastUpdatedAt":1733757592000,"frontMatter":{"title":"Budgie","summary":"A quick introduction to the Budgie Edition of Solus"},"sidebar":"userSidebar","previous":{"title":"Editions","permalink":"/docs/user/editions/"},"next":{"title":"Configuration","permalink":"/docs/user/editions/budgie/configuration"}}'),s=t("85893"),o=t("50065");let d={title:"Budgie",summary:"A quick introduction to the Budgie Edition of Solus"},r="Budgie Desktop",u={},c=[];function l(e){let i={a:"a",blockquote:"blockquote",h1:"h1",header:"header",li:"li",p:"p",ul:"ul",...(0,o.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(i.header,{children:(0,s.jsx)(i.h1,{id:"budgie-desktop",children:"Budgie Desktop"})}),"\n",(0,s.jsxs)(i.blockquote,{children:["\n",(0,s.jsx)(i.p,{children:"TODO: Add Budgie branding image"}),"\n"]}),"\n",(0,s.jsx)(i.p,{children:"Budgie is the flagship Edition of Solus. It was originally started by Solus and has now been spun off into its own distro-agnostic project. They describe it as:"}),"\n",(0,s.jsxs)(i.blockquote,{children:["\n",(0,s.jsx)(i.p,{children:"The Budgie Desktop is a feature-rich, modern desktop designed to keep out the way of the user."}),"\n"]}),"\n",(0,s.jsx)(i.p,{children:"Here are some links related to this project that you may find helpful:"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsx)(i.li,{children:(0,s.jsx)(i.a,{href:"https://github.com/BuddiesOfBudgie",children:"Homepage"})}),"\n",(0,s.jsx)(i.li,{children:(0,s.jsx)(i.a,{href:"https://blog.buddiesofbudgie.org/",children:"News"})}),"\n",(0,s.jsx)(i.li,{children:(0,s.jsx)(i.a,{href:"https://github.com/BuddiesOfBudgie/budgie-desktop/issues",children:"Support"})}),"\n"]}),"\n",(0,s.jsx)(i.p,{children:(0,s.jsx)(i.a,{href:"configuration",children:"Go to Budgie Configuration"})}),"\n",(0,s.jsx)(i.p,{children:(0,s.jsx)(i.a,{href:"tips-and-tricks",children:"Go to Budgie Tips and Tricks"})})]})}function a(e={}){let{wrapper:i}={...(0,o.a)(),...e.components};return i?(0,s.jsx)(i,{...e,children:(0,s.jsx)(l,{...e})}):l(e)}},50065:function(e,i,t){t.d(i,{Z:function(){return r},a:function(){return d}});var n=t(67294);let s={},o=n.createContext(s);function d(e){let i=n.useContext(o);return n.useMemo(function(){return"function"==typeof e?e(i):{...i,...e}},[i,e])}function r(e){let i;return i=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:d(e.components),n.createElement(o.Provider,{value:i},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/f4aa4739.af7c7acb.js b/assets/js/f4aa4739.af7c7acb.js deleted file mode 100644 index d34864a30..000000000 --- a/assets/js/f4aa4739.af7c7acb.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[9170],{75340:(e,i,t)=>{t.r(i),t.d(i,{assets:()=>u,contentTitle:()=>d,default:()=>a,frontMatter:()=>o,metadata:()=>r,toc:()=>c});var n=t(85893),s=t(11151);const o={title:"Budgie",summary:"A quick introduction to the Budgie Edition of Solus"},d="Budgie Desktop",r={id:"user/editions/budgie/index",title:"Budgie",description:"TODO: Add Budgie branding image",source:"@site/docs/user/editions/budgie/index.md",sourceDirName:"user/editions/budgie",slug:"/user/editions/budgie/",permalink:"/docs/user/editions/budgie/",draft:!1,unlisted:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/editions/budgie/index.md",tags:[],version:"current",lastUpdatedAt:1732716912e3,frontMatter:{title:"Budgie",summary:"A quick introduction to the Budgie Edition of Solus"},sidebar:"userSidebar",previous:{title:"Editions",permalink:"/docs/user/editions/"},next:{title:"Configuration",permalink:"/docs/user/editions/budgie/configuration"}},u={},c=[];function l(e){const i={a:"a",blockquote:"blockquote",h1:"h1",header:"header",li:"li",p:"p",ul:"ul",...(0,s.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(i.header,{children:(0,n.jsx)(i.h1,{id:"budgie-desktop",children:"Budgie Desktop"})}),"\n",(0,n.jsxs)(i.blockquote,{children:["\n",(0,n.jsx)(i.p,{children:"TODO: Add Budgie branding image"}),"\n"]}),"\n",(0,n.jsx)(i.p,{children:"Budgie is the flagship Edition of Solus. It was originally started by Solus and has now been spun off into its own distro-agnostic project. They describe it as:"}),"\n",(0,n.jsxs)(i.blockquote,{children:["\n",(0,n.jsx)(i.p,{children:"The Budgie Desktop is a feature-rich, modern desktop designed to keep out the way of the user."}),"\n"]}),"\n",(0,n.jsx)(i.p,{children:"Here are some links related to this project that you may find helpful:"}),"\n",(0,n.jsxs)(i.ul,{children:["\n",(0,n.jsx)(i.li,{children:(0,n.jsx)(i.a,{href:"https://github.com/BuddiesOfBudgie",children:"Homepage"})}),"\n",(0,n.jsx)(i.li,{children:(0,n.jsx)(i.a,{href:"https://blog.buddiesofbudgie.org/",children:"News"})}),"\n",(0,n.jsx)(i.li,{children:(0,n.jsx)(i.a,{href:"https://github.com/BuddiesOfBudgie/budgie-desktop/issues",children:"Support"})}),"\n"]}),"\n",(0,n.jsx)(i.p,{children:(0,n.jsx)(i.a,{href:"configuration",children:"Go to Budgie Configuration"})}),"\n",(0,n.jsx)(i.p,{children:(0,n.jsx)(i.a,{href:"tips-and-tricks",children:"Go to Budgie Tips and Tricks"})})]})}function a(e={}){const{wrapper:i}={...(0,s.a)(),...e.components};return i?(0,n.jsx)(i,{...e,children:(0,n.jsx)(l,{...e})}):l(e)}},11151:(e,i,t)=>{t.d(i,{Z:()=>r,a:()=>d});var n=t(67294);const s={},o=n.createContext(s);function d(e){const i=n.useContext(o);return n.useMemo((function(){return"function"==typeof e?e(i):{...i,...e}}),[i,e])}function r(e){let i;return i=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:d(e.components),n.createElement(o.Provider,{value:i},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/f4c9601b.556d1b17.js b/assets/js/f4c9601b.556d1b17.js new file mode 100644 index 000000000..754c25d12 --- /dev/null +++ b/assets/js/f4c9601b.556d1b17.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([["2991"],{5545:function(A,g,C){C.r(g),C.d(g,{metadata:()=>e,contentTitle:()=>t,default:()=>B,assets:()=>r,toc:()=>i,frontMatter:()=>n});var e=JSON.parse('{"id":"user/quick-start/installation/secure-boot","title":"Booting with Secure Boot Enabled","description":"Since Solus 4.4 Secure Boot is now supported. When you first boot the ISO, and, if you have Secure Boot enabled in your UEFI firmware; you will have to perform the one-time-step of manually enrolling the Solus certificate. The following guide will walk you through this. If you already have Solus installed and wish to enable Secure Boot, skip ahead here.","source":"@site/docs/user/quick-start/installation/secure-boot.md","sourceDirName":"user/quick-start/installation","slug":"/user/quick-start/installation/secure-boot","permalink":"/docs/user/quick-start/installation/secure-boot","draft":false,"unlisted":false,"editUrl":"https://github.com/getsolus/help-center-docs/tree/master/docs/user/quick-start/installation/secure-boot.md","tags":[],"version":"current","lastUpdatedAt":1733757592000,"frontMatter":{"title":"Booting with Secure Boot Enabled","summary":"Instructions for enrolling the Solus Certificate when Secure Boot is enabled"},"sidebar":"userSidebar","previous":{"title":"Disk Partitioning","permalink":"/docs/user/quick-start/installation/disks"},"next":{"title":"System Requirements","permalink":"/docs/user/quick-start/installation/system-requirements"}}'),o=C("85893"),I=C("50065");let n={title:"Booting with Secure Boot Enabled",summary:"Instructions for enrolling the Solus Certificate when Secure Boot is enabled"},t="Booting with Secure Boot Enabled",r={},i=[{value:"Enrolling the Solus certificate",id:"enrolling-the-solus-certificate",level:2},{value:"Enabling Secure Boot on an existing install",id:"enabling-secure-boot-on-an-existing-install",level:2},{value:"Final tips",id:"final-tips",level:3},{value:"Useful links for additional reading",id:"useful-links-for-additional-reading",level:2}];function a(A){let g={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",img:"img",li:"li",p:"p",ul:"ul",...(0,I.a)(),...A.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(g.header,{children:(0,o.jsx)(g.h1,{id:"booting-with-secure-boot-enabled",children:"Booting with Secure Boot Enabled"})}),"\n",(0,o.jsxs)(g.p,{children:["Since Solus 4.4 Secure Boot is now supported. When you first boot the ISO, and, if you have Secure Boot enabled in your UEFI firmware; you will have to perform the one-time-step of manually enrolling the Solus certificate. The following guide will walk you through this. If you already have Solus installed and wish to enable Secure Boot, skip ahead ",(0,o.jsx)(g.a,{href:"#enabling-secure-boot-on-an-existing-install",children:"here"}),"."]}),"\n",(0,o.jsx)("em",{children:"Note that this only applies to machines with UEFI firmware, if your machine uses the older BIOS firmware you can safely ignore this article. If you wish to avoid having to do this step then you may disable Secure Boot in your machine's UEFI firmware interface."}),"\n",(0,o.jsx)(g.h2,{id:"enrolling-the-solus-certificate",children:"Enrolling the Solus certificate"}),"\n",(0,o.jsxs)(g.p,{children:["After ",(0,o.jsx)(g.a,{href:"/docs/user/quick-start/installation/#boot-the-media",children:"booting"})," the ISO from USB/DVD and, if Secure Boot is enabled in your device's UEFI firmware. A warning will appear concerning a Secure Boot violation, press ",(0,o.jsx)(g.code,{children:"Enter"})," on your keyboard to continue."]}),"\n",(0,o.jsx)(g.p,{children:(0,o.jsx)(g.img,{alt:"Secure Boot violation",src:C(26071).Z+"",width:"807",height:"577"})}),"\n",(0,o.jsxs)(g.p,{children:["Now, it will provide 10 seconds in order to continue to MOK (Machine Owner Key) Management, press ",(0,o.jsx)(g.code,{children:"Enter"})," again within the timeframe to do so."]}),"\n",(0,o.jsx)(g.p,{children:(0,o.jsx)(g.img,{alt:"Continue to MOK Management",src:C(62572).Z+"",width:"811",height:"581"})}),"\n",(0,o.jsxs)(g.p,{children:["Use the down ",(0,o.jsx)(g.code,{children:"\u2193"})," arrow key on your keyboard to select ",(0,o.jsx)(g.code,{children:"Enroll Key from Disk"})," and press ",(0,o.jsx)(g.code,{children:"Enter"})," to continue."]}),"\n",(0,o.jsx)(g.p,{children:(0,o.jsx)(g.img,{alt:"Enroll Key from Disk",src:C(30485).Z+"",width:"809",height:"581"})}),"\n",(0,o.jsxs)(g.p,{children:["Here you'll need to find the ",(0,o.jsx)(g.code,{children:"solus-enroll-me.cer"})," certificate, it should normally be located in the ",(0,o.jsx)(g.code,{children:"SOLUSESP"})," directory. Use the arrow keys to select a directory, ",(0,o.jsx)(g.code,{children:"Enter"})," to enter it and ",(0,o.jsx)(g.code,{children:"Esc"})," to go back."]}),"\n",(0,o.jsx)(g.p,{children:(0,o.jsx)(g.img,{alt:"Enroll the Solus Certificate",src:C(68409).Z+"",width:"804",height:"577"})}),"\n",(0,o.jsxs)(g.p,{children:["Once you found the ",(0,o.jsx)(g.code,{children:"solus-enroll-me.cer"})," certificate, press ",(0,o.jsx)(g.code,{children:"Enter"})," to enroll it, and press the ",(0,o.jsx)(g.code,{children:"\u2193"})," and ",(0,o.jsx)(g.code,{children:"Enter"})," key to continue. Finally, when confirming you wish to Enroll the key(s) press the ",(0,o.jsx)(g.code,{children:"\u2193"}),' key to select "Yes" and ',(0,o.jsx)(g.code,{children:"Enter"})," again."]}),"\n",(0,o.jsxs)(g.p,{children:["Now, with the Solus certificate enrolled, press ",(0,o.jsx)(g.code,{children:"Enter"})," to reboot the machine, boot the ISO from USB/DVD again and it should continue booting to the installer."]}),"\n",(0,o.jsx)(g.p,{children:(0,o.jsx)(g.img,{alt:"Confirm Key Enrollment",src:C(29468).Z+"",width:"816",height:"586"})}),"\n",(0,o.jsx)("em",{children:"Once Solus is installed you will not have to enroll the certificate again as it will stay enrolled."}),"\n",(0,o.jsx)(g.h2,{id:"enabling-secure-boot-on-an-existing-install",children:"Enabling Secure Boot on an existing install"}),"\n",(0,o.jsxs)(g.p,{children:["If you already have Solus installed and wish to enable Secure Boot then there is one extra step you must perform BEFORE continuing with ",(0,o.jsx)(g.a,{href:"#enrolling-the-solus-certificate",children:"Enrolling the Solus Certificate"})," as normal."]}),"\n",(0,o.jsxs)(g.p,{children:["Firstly, you must confirm you have ",(0,o.jsx)(g.code,{children:"clr-boot-manager, version: 3.2.12, release: 29"})," (or later) installed, run ",(0,o.jsx)(g.code,{children:"eopkg info clr-boot-manager"})," to confirm this. This version of ",(0,o.jsx)(g.code,{children:"clr-boot-manager"})," will have created a new UEFI boot entry on your machine called ",(0,o.jsx)(g.code,{children:"Solus Linux Bootloader"})," that can be booted from with Secure Boot enabled."]}),"\n",(0,o.jsx)(g.admonition,{title:"Before continuing, it is important to note the screenshots provided here are for example only, your UEFI firmware interface will almost certainly look different.",type:"note"}),"\n",(0,o.jsxs)(g.p,{children:["Reboot your machine and select the appropriate keyboard button during startup to choose a boot device. The correct key will vary from machine to machine but some common keys are ",(0,o.jsx)(g.code,{children:"F2"}),", ",(0,o.jsx)(g.code,{children:"F11"}),", ",(0,o.jsx)(g.code,{children:"F12"}),", or ",(0,o.jsx)(g.code,{children:"Esc"}),". From the boot selection interface, select the ",(0,o.jsx)(g.code,{children:"Solus Linux Bootloader"})," entry and boot from it. If you've manage to successfully boot then you can continue with enabling Secure Boot."]}),"\n",(0,o.jsxs)("em",{children:["If there is no entry called ",(0,o.jsx)(g.code,{children:"Solus Linux Bootloader"}),", reboot, log back in, open a terminal and run ",(0,o.jsx)(g.code,{children:"sudo clr-boot-manager update"}),"."]}),"\n",(0,o.jsx)(g.p,{children:(0,o.jsx)(g.img,{alt:"UEFI Choose Boot Device",src:C(5011).Z+"",width:"645",height:"463"})}),"\n",(0,o.jsxs)(g.p,{children:["After successfully booting from the new ",(0,o.jsx)(g.code,{children:"Solus Linux Bootloader"})," UEFI entry, open a terminal, input ",(0,o.jsx)(g.code,{children:"systemctl reboot --firmware-setup"})," and press ",(0,o.jsx)(g.code,{children:"Enter"}),". This will reboot you into your machine's UEFI firmware interface. Once there, you will have to find and enable the Secure Boot setting. Where this is located varies from machine to machine. Some common places it can be located under are ",(0,o.jsx)(g.code,{children:"Windows OS Configuration"}),", ",(0,o.jsx)(g.code,{children:"Security"})," or ",(0,o.jsx)(g.code,{children:"Device Manager"}),"."]}),"\n",(0,o.jsx)(g.p,{children:(0,o.jsx)(g.img,{alt:"UEFI Secure Boot Configuration",src:C(78463).Z+"",width:"645",height:"460"})}),"\n",(0,o.jsxs)(g.p,{children:["Once you've found and enabled the Secure Boot setting then reboot once again from the ",(0,o.jsx)(g.code,{children:"Solus Linux Bootloader"})," UEFI entry. From there you can continue with the instructions: ",(0,o.jsx)(g.a,{href:"#enrolling-the-solus-certificate",children:"Enrolling the Solus Certificate"}),", bearing in mind you are booting from a disk rather than from a USB/DVD."]}),"\n",(0,o.jsxs)("em",{children:[" Remember to save settings after enabling Secure Boot! (usually ",(0,o.jsx)(g.code,{children:"F10"}),")"]}),"\n",(0,o.jsx)(g.h3,{id:"final-tips",children:"Final tips"}),"\n",(0,o.jsxs)(g.p,{children:["Once you've successfully enabled and booted your Solus install with Secure Boot enabled. Go back into your machine's UEFI firmware interface and change the default boot device to ",(0,o.jsx)(g.code,{children:"Solus Linux Bootloader"}),"."]}),"\n",(0,o.jsxs)(g.p,{children:["You can run ",(0,o.jsx)(g.code,{children:'bootctl status | grep "Secure Boot"'})," in a terminal to verify Secure Boot is enabled."]}),"\n",(0,o.jsxs)(g.p,{children:["It is possible to delete the old Solus UEFI boot entry with ",(0,o.jsx)(g.code,{children:"efibootmgr"})," once Secure Boot is enabled successfully, However, caution is required and as such, instructions to do so are not provided here."]}),"\n",(0,o.jsx)(g.h1,{id:"why-is-enrolling-the-solus-certificate-necessary",children:"Why is enrolling the Solus certificate necessary?"}),"\n",(0,o.jsxs)(g.p,{children:["In order to avoid the one time step of enrolling the Solus certificate, Solus would have to get it's own ",(0,o.jsx)(g.code,{children:"shim"})," EFI executable signed by Microsoft. Currently, the following actions must be completed to do this:"]}),"\n",(0,o.jsxs)(g.ul,{children:["\n",(0,o.jsx)(g.li,{children:"Obtain an EV Certificate (expensive!)"}),"\n",(0,o.jsx)(g.li,{children:"Register for the Microsoft Windows Hardware Developer Program."}),"\n",(0,o.jsxs)(g.li,{children:["Implement any additional security requirements as required by the ",(0,o.jsx)(g.a,{href:"https://github.com/rhboot/shim-review/",children:"shim-review"})," process."]}),"\n"]}),"\n",(0,o.jsxs)(g.p,{children:["Currently, we are using a third-party ",(0,o.jsx)(g.code,{children:"shim"})," that is already signed by Microsoft, the downside is the Solus (vendor) certificate is not already embedded and trusted in the ",(0,o.jsx)(g.code,{children:"shim"})," executable, and as such, requires the user to enroll the Solus certificate manually on first boot."]}),"\n",(0,o.jsx)(g.p,{children:"We appreciate that having the enroll the certificate may be confusing to users and, the process to do so may not be self-explanatory. Especially, as Secure Boot is generally enabled by default for the majority of machines."}),"\n",(0,o.jsx)(g.p,{children:"However, it is also important to consider the following:"}),"\n",(0,o.jsxs)(g.ul,{children:["\n",(0,o.jsx)(g.li,{children:"Obtaining an EV certificate is an expensive investment."}),"\n",(0,o.jsx)(g.li,{children:"Enrolling the Solus certificate is only required once, and, only if Secure Boot is enabled."}),"\n"]}),"\n",(0,o.jsxs)(g.p,{children:["As such, we are not currently looking to our get our own ",(0,o.jsx)(g.code,{children:"shim"})," signed by Microsoft. However, thanks to our supporters on ",(0,o.jsx)(g.a,{href:"https://opencollective.com/getsolus",children:"OpenCollective"}),", it is indeed within our budget to obtain an EV certificate in the future which would unblock the additional requirements."]}),"\n",(0,o.jsx)(g.h2,{id:"useful-links-for-additional-reading",children:"Useful links for additional reading"}),"\n",(0,o.jsxs)(g.ul,{children:["\n",(0,o.jsx)(g.li,{children:(0,o.jsx)(g.a,{href:"https://learn.microsoft.com/windows-hardware/drivers/dashboard/file-signing-reqs",children:"https://learn.microsoft.com/windows-hardware/drivers/dashboard/file-signing-reqs"})}),"\n",(0,o.jsx)(g.li,{children:(0,o.jsx)(g.a,{href:"https://github.com/rhboot/shim-review/",children:"https://github.com/rhboot/shim-review/"})}),"\n",(0,o.jsx)(g.li,{children:(0,o.jsx)(g.a,{href:"https://github.com/rhboot/shim/",children:"https://github.com/rhboot/shim/"})}),"\n"]})]})}function B(A={}){let{wrapper:g}={...(0,I.a)(),...A.components};return g?(0,o.jsx)(g,{...A,children:(0,o.jsx)(a,{...A})}):a(A)}},26071:function(A,g,C){C.d(g,{Z:function(){return e}});let e="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAycAAAJBCAIAAADTEV0NAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAOiElEQVR4Xu3dW3bayAJAUXJXBqshMdz7oTSp6IHBxgeB9179IReiJGSMTgsHn04AAAAAAAAAAAAAAPDT/BqWz8MyAABfN12W/jeMAgDwXVQXAEBBdQEAFFQXAEBBdQEAFFQXAEBBdQEAFFQXAEDh93LgdDr7tFQAgC+Y/n426l8b1TXbXBsAgCuuXL3yDiMAQEF1AQAUVBcAQEF1AQAUVBcAQEF1AQAUVBcAQEF1AQAUVBcAQEF1AQAUVBcAQGH37zACPNzmnyebpo3x+U/B7o2fVjd9uD7A07nWBXQuDTRN//TQenzup73xy603rg9wBKoLeBoXooAfRXUBzyS8gJ9DdQHP4b0/4Kfx2/TAE+wl12V8cQ1sb3zPvesDBFzrAp7gegzt3bo3vufe9QG+leoCnmMzifb+4eHe+J571wcIqC4AgILqAp5pfTlq7zLV3viee9cH+G6qC3gaSQT8KP4NI9C5ZNait/bya298mk7n8z+3urIFHN+vYfnPy9X8srX5i64AAFyx6qi/S95hBAAoqC4AgILqAgAoqC4AgILqAgAoqC4AgILqAgAoqC4AgILqAgAoqC4AgILqAgAoqC4AgILqAgAoqC4AgILqAgAoqC4AgILqAgAoqC4AgILqAgAoqC4AgILqAgAoqC4AgILqAgAoqC4AgILqAgAo/F4OwFOdz6fT6TRN218+0Dzz7Jvm/45pP/SQx3WZ5PYZPnGXKzafBuPIh/aeOYvvy95qV4xH+HTnfb/PF59vmwf80xN+7vt1+8rwulzr4s2dz8vT5Dx4Op2m6c8L/bjC5vr3ujLDQ+bfc+Vx7dncn0+c/z5xlz2LU/745XpXN+2tNo+Pt9417enfI3zvfR9i8/u1Hnm4ze3uuffJcGXmu7YLx6e6+Okup8838x6Pa0yuGytnb4Vxqr11AL6Vdxh5c/eWx73r3+u757/X0fZnbKPP2eyqRb3NV1A2vzy4Z+3kT9sufBPVxctYnEfHk+t84hzHZ5uDV2yuv7ndxfjm4Dogbp//+uO6y+Z+zu6afHM/Z4ubRuuD8BCLab9pK2vzd+Q8FNvF3vHZHB93eHN581uzHhwn35xnfdMnrLc7Ds4+nHxc/8P9H0f2Bme3HDc4Du8w8hour6rzf+PIvLwYn22+8l5WWLx8n7bW39vu9cH18mVkYW/+y/J6E3v2Htd68vGmG+3t53jTt9rc83mw2YGLy6bHXdo7Pnvjey7rbK6/foyX1RbLj7We9t7HddpZ+fr+377dy/J6E3AornXxVtYv02vTf/9DfMvKC5+4S+Yrj+vTPtzilZu+aH68H+7A6FFn4st5fT7N3+6ulU/3rw8cnOrilTzqrPkQh9qZKx64nw+c6l4P6Y/LJA95IJfse+y078rBgZPq4rU85NT7EOMlliOfTh67n8c5/qfhoX3imtM3OcI+HNNjn4fwuvxeF8cyvi6Pr9S8qDmJbtefmO96mt37cF6FnztoqC4OZzwB7L30P+vkd+92713/VWSPa68GxuU+1D60d3z2xh/lK/OvD2zvK/sPL+HXsPznyf7cnzqYnVfvGS1ejtfn2vWTdvPWzcHZ5k2b2x3Hp61fYx9vXQ+O49fnv/1cuDn5OL7ezw/vMo5f38/R9f28xd5+bh6cxZeb+7O3/i0HduHG43D7+Lgbm0f+4sqte4dotJ5w7bz6uZsHL/bmH+91ff3Nw77e/3FwHN/b7jjnen4orZ6Bf5dUF8Cb86oOpdVP3N8l7zACvLPVCQB4Gv+GEeDd7L0NBzyX6gJ4NzILjsk7jAAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFD4vRwAeJ7zeTlSmqblCMADqS7gcPr6eW7tAT+EdxgBAAqqCwCgoLoAAAqqCwCgoLoAAAqqCwCgoLoAAAqqCwCg4FNSgSO4fC7q/HGl+cekLrfrU1OBx3OtCwCgoLoAAAreYQRe0vnfP504TdM4OH45LwM8nWtdwOu55NRsHFmsCXAcqgt4TzoMOBrVBQBQUF3AG3KhCzgg1QW8J8kFHI3qAt7T4h85Ajyd6gLe0OKDJACOQHUBABRUF/CeXO4CjkZ1AQAU/EUg4PVM03Q+n8frWK5sAcenuoCXtPnBEIvBzXUAnsU7jAAABdUFAFBQXQAABb/XBRzB4rfgn/VL8c/aLvAjuNYFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABZ+SChzO2YeVAu9IdQEHMk3LEYC34R1GAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKPxeDvznfF6OAADwab+GZZ0FAPBY02XJO4wAAAXVBQBQUF0AAAXVBQBQUF0AAAXVBQBQUF0AAAXVBQAAAAAAANzu/9RxiIRrIM4UAAAAAElFTkSuQmCC"},62572:function(A,g,C){C.d(g,{Z:function(){return e}});let e="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAysAAAJFCAIAAABSvP+VAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAQEklEQVR4Xu3d227iyAJAUfpoPpZP4nPPgyPH7VsgwMbQa2k0gsIUhXPxlp1OTicAAAAAAAAAAADe2Z/5wJfLfAAAgLucx1v/m4wCAFBQYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAAtf/mA3+7+M2sAAB3OH//HtZvPxTYYPWZAADs2DmT5SokAEBNgQEA1BQYAEBNgQEA1BQYAEBNgQEA1BQYAEBNgQEA1BQYAEBNgQEA1BQYAEDtqr8LCbzW7C+LDX+qdRx80l9uHeYfJx/vrv6Zs5vG9xf87Pf18S4Xuw7egHNgcHRj+gz/TUf2XS4r9XO/8XXH9fw4vvXQqh83YMczPuLAMygw4C5bwbQ1DsDJVUj4YFkDbb3Q1vhNrjzhB/BeFBgc3fn8dT1xqJBli6z+4NRycDryqKzZ+ZGjnYeuN1vn7BLbML66zc5L7+yH6fzLCXd26XRwOj57iZ31D3d31jOOb61nuvGPOwF4OVch4Q2Mh9jZIXm0PAZfc/Tdmu1KW0/fWedNVnPkvPh5uPtNU2Y5+Xh39aHl4HSd07dw/fqH8a3tt9Yz3p3dBo5JgcF72Dls33qsXc7wO1uv+8DD/6PmWfWo/fAoR1sP8FSuQsI7Of99RfIXhhmG/99vZxk7D11v+U4fsuzTxn64dfJbtz9tP2V1Paft7YF3p8CAg1rNzYeE3aqhdYb5r+meW7cf3Lr+W7cH3oWrkHB0Q4Uc2cGXB3BACgy4y1Pza+cM0/HDdN+t63/29kDMVUg4uvFi3HTktNElo/HRy+JHqa704+vOFrD1itPNhtv769l6X1vrWY7/znSe8fbOUre231rPcnxn8tPt2w9mqwIO68984MvXF70vY+C9HOq71qEWA/QW3wS+b7kKCXyOxTe7F1g9AQYw4yok8N5mufPa/Dotrh6+fD3AMSkw4L0dMHEOuCTgaFyFBACoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgNp/8wH4OJfLfOR8no98kvH9PvttXi5Pf4mbTD/QwcKGlxtfaHp39ik3G5zeDdZ5WEf7/IGYc2B8vvG7/Pk8PxZ+pOaodrR9OAZN/CEeXmj6ctOViK0t2QcIDss5MODTHL91NBngHBh8uMvF+YbnsnuBX3AOjH/XeB5iPIKO5yRmx9Rfj2+Zbj+bZLme2fmSm06frD539Lv5p5OsPne0M8lp+/2OD41m61xuv+WmeaZ3f9wJ97hy8p31TN/XbHD5vsaHZoPT8dlL7Oy34e7OesbxrfVMN75yV8BHcg6Mf9d4PDj//fM641HhzvEdqxtvrefXZoe3X6xz1fj02e1b5996v1vzbG2/emO8fdM8M1vjU8MMw/+vd+v2g3E9yzc1DA53Vx9aDk73z2zPbD1lZhjf2n5rPePd2W341zgHxj9kdqyaWR3csbX91vhLHGoxjzV9a+fFWZnrLZ+yFRxbljP8aOiSK926nmc72nrgTSkw/iHXH/NOa4eZ4TA/HR8m3BrfsZz8SZZH+uyl7/SqdQ4fzTHpnmH8hPnx8+S0sZ5b13br9qftp6yu57S9PbBFgcG61aPjdHB6EN0aXzUcq4YNnnrcWj3S7yzsUN5lnb1bP39u3X5w6/6/dXvAz4EB1G7tIeDzKDD4wXAaaXpjZmv8CHaO9I9a9qPm2fLs+dl36/5/9vbwMRQYn2/8/j77Rr81PlbLeGyYXmq8fnzLdPudQhot59+3tc1ynq31X2O68q159vfD6Mf1zPbScpGrD/1inof48XXvNJ3/mpm3tp+OT22tf8ut2w+WK4F/zZ/5wJevr0hfHnA0z/6qfPb8U+VrscMHAp5k8cX1fcs5MHgniy/mB3v2/BzHeMoKeAn/FhKObnaYfHgePXv+LePrXnb/6ShPcv77t6j4EEBMgcHRPfvQ+Oz5t7zqdRn5EMALuQoJAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFD7bz7wK5fLfOR8no/c5HK5d4ZXme2Kg7+LcbUHXycAfJjHnAMbj9/n89ftZZNdb+e5l8veo/e7c/7hucNOuH8/BIQXALzEYwoMAIDrPeYqZObZ52yePT8AwCkosK2fi1odnw6OV/RmI9PBcZuth6aP/lhXW5Oszv8oq/vhUeP76589ZbA6DwDwWH/mA1++jsNXtstp48g9e/osCJbjq3enlg9NR1bnXz5lx3LjW6ea7YfT7vZbb/xR49fcXh0cXPN+AYAtiyPp960HnwMbD+SXt/3HjHeavuthv1/v1j126/ajxSfEuh83AAB+58EFxk2GU1DTULsn4O63vx4A4FEU2IvNkmt67vAl9bOzHgDgUfw2CgCA2qELbHZF7L1c87NWV77Brc22xn/t4RMCAKse828hl4ft8Smzh34cH4yPbv1c1Gye4e7y9ujHt3C6cf4tq5Ps2FrnY8eX659tvzV+zVsAAFYtyuH71mMK7Mg+4C0AAO9oESHftw59FfLXLq6mAQAH9pkFNl5QW7QnAMDrfexvo1BdAMBhfeY5MACAI1NgAAA1BQYAUFNgAAA1BQYAUFNgAAA1BQYAUFNgAAA1BQYAULvqd+L7G4sAAA/0Zz7wRXMBADzW999MdBUSAKCmwAAAagoMAKCmwAAAagoMAKCmwAAAagoMAKCmwAAAAAAAAAAAAAAAAAAAAAAAAOB1/g8woPo/FVU5nQAAAABJRU5ErkJggg=="},30485:function(A,g,C){C.d(g,{Z:function(){return e}});let e="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAykAAAJFCAIAAABWSS+oAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAQRElEQVR4Xu3d23LayAJAUXIqH8sn8bnnQRmNpoWwALMNylqVB9yI1iXB2iUR+3QCAAAAAAAAAAAAAACWfi0eXxaPAQB43nn4+n/D1wAAvI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDo/B4HTqeLn7EKAPCE8/gTVf91pb0mN14DAMBVX17Dcs8RAKCjvQAAOtoLAKCjvQAAOtoLAKCjvQAAOtoLAKCjvQAAOtoLAKCjvQAAOtoLAKCz+fscgTe0/jVhT/7q1eWET061x7S6eUXLL4ddGwaXXwbb+bYul7969+EYXPeCTzKfd8/nsU4eMKfM81PdZVrRcnXLLZFZW7K/IOClXPcCTqdPqBw1BhyD617AD3AJB/hrue4FB3Hj81Ln8/jBqRvummf55UuvS+2c/Mb2LPdrGFzv1/zUMLgcH1Zx47hNX97Ynnl8a3uWC+88FMDbct0LjmA+H09/liPT42H86oP58V3zDLbGl6YZ7q2He5efLCNmvfE39uvq8svjMxyZrZcMpvGt5be2Z/5yeAx8Ite94CMN9bDTcuHz6krMfuuXbKXGlvUMX5qKZKd7t+fV3m17gB+kveAjXa2QnzrBTxk3x9wrTJPvzK+r23Pvtt27/Gn7JVe357S9PHBs2guOY0+X/J2mypmOz57iuXf5yb3H/97lgWPweS/gM9xbQgDvSXvBAU235/gp9x7/Vy8PvBXtBZ9kPuMOp975mtB8Vh6uEq1P1VefemCeb/Hlep+0nH/PzFvLL8eXtrZ/y73LT9ZbAnyiX4vHf76XeGMDfMm3SuCq1TeH8duE614Ae62veAHcS3sB7DXcc3TRC3iAnzEBcAe9BTzJdS8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgM7vcQB4J5fLOAL3Op/HEeAHaS/4AM6dPEa7wxtyzxEAoKO9AAA62gsAoKO9AAA62gsAoKO9AAA62gsAoKO9AAA62gsAoKO9AAA62gsAoOP3OQJ7LX854JO/YvJyeXaGbzHv0XdtzJvsF/DOXPcCdpky5Xz+0xbP/JLmG6+9XG49++2+t5PKLQc+l/YCvjaH1+R7kwXgr+KeI/CIF+XXi6YFeB/aC3jKcKNteUfyfB4/ULVceLiWNo8sB2/Ps348fznbGXNbq57dHr+9XwBL7jkCj5s7Y/qzHJker8fnKFk+nkcGW/Ns2dqeLw3Lb82zNT5/OTwGWNNeAAAd9xyBo9l5rQvgR2gv4Gjc8gPemXuOwCNcWwJ4jPYCvjZ8bv27wuvy4p+k+ur5t/zUeoGP8Gvx+M+3ivm/7QA/7q3ej8uemDdpiIxhfPjPgLP5VVcHl+Nb8yxnuDo+P3vb1vL3jk+u7tcPWh954NVW77vxHai94K15P/IM/36gt3rfje9A9xwBADraCwCgo70AADp+vhe8p/nzAdMHMcePC8A+w7+f//5PAeAnuO4FANDRXgAAHfcc4Qguw0+dOp1Op9P5u3+0wLyWYeat8bX9Sz5peUBeva6lJ3fwyZcDH8F1LziC+VR9Pp9fd9remnlrfG3/ks+YCmY+FFfD9EW2dvByuezZjK2XA0eiveCAnMJnL41RgAe45wjH9BHBMV+gGp84nMf28e85PvBX0V5wNJfLZT5bzyfv4YNEW+PzU7PXnfiHsLi63qvLPLBJ9+7vcrH9Kx2mmq1XuhycrOffv17gs7jnCIdy9Yx+uVzO5/O6Ztbj87PD+LcbwuIb1zu/cDnDPOcw//71bo3Phj1aWg9+ud4bswGfznUvOJTz4tLOfj9yjn/RSucjcGP+G08Ndh7ML9d429UXXh0EDsB1LziaTzlnr7Pm8o9h/KdMR/IVx3O+1nVjl68OAgfguhfwA6arU5fFR9OmwcUiB7fc2auHYj0IHIPrXnBMrpoAvCftBQf0EeE133cbn/jnOtA4eiB7dvDG8QE+mvaCI5jP0HtO6qf/Lr8cHz6HNI9Mtl61Nb62tcDWetfjX5oXWy5/dfB0bf7H7vEt55lGbq99a73LVwFH9WvxeP7ucDqdTg99/wG+y5934DNBcDyOxr1WR0zbwcutOmr8luW6F/AZVhkB8JH8P0fgfQ334IQXcADaC3hfYgs4Hu0F72n4XI6P6fAM/37gjfi8FwBAR3sBAHTcc4QjuPpjob79s1LzWoaZt8bX9i9528PzLA/Uva99xsMbPHny5cBbcd0LjmA+JZ/PLzw9b828Nb62f8nbHptn/qE708uvBuuLbG3w5bJrM7ZeDnwi7QUH5FT9pZdGKsAN7jnCMQmLj/DYX9Pqp2YDn0R7wdFcLv+eleeT9PCBoa3x+anZi07wt9e7XOnt7VnPc5d7j8Nysf0BNEw1W690OThZz79/vcB7cs8RDuXqmftyOZ3/+yGnrfH52WH8FdY1s17pnu3ZGh8Mc06ePw5b47N5qrX14JfrvTEb8Clc94JDOS8u4ezXn8sfW+P6VeuRLfORufGSG08Ndh7kL9d429UXXh0EPoj2gqP50HPz1ZqZgml9pepnTVv1WObetmd/p1UDn8s9R+DnLe+1DabB+alvz513c3t/rw4Cn0V7wTE5PQO8J+0FB3SY8BpuwB3env116Qs+nfaCI5jPxHtO3qf/Lr80n9fneZY3AbdetTW+trXAcr3Lttjanq15bri6kVcHT9vrvddynsnttW+t94H9Bd7Wr8XjP2/uZ77RAN/L+5Fn+PcDvdX7bnwHuu4FANDRXgAAHe0FANDRXgAAHe0FANDRXgAAHe0FANDRXgAAHe0FANDRXgAAHe0FANDRXgAAnd/jAPB+pt/MCsABaC94a+fzOALAR3PPEQCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCg83sc+MflMo4AAPCkX4vHagsA4Hudh6/dcwQA6GgvAICO9gIA6GgvAICO9gIA6GgvAICO9gIA6GgvAAAAAAAAAAAAAAAAAAAAgOP7P/7OB7w235xvAAAAAElFTkSuQmCC"},68409:function(A,g,C){C.d(g,{Z:function(){return e}});let e="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAyQAAAJBCAIAAAA4JuYOAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAX2ElEQVR4Xu3d4ZaiOrcFUPqO87A+ko97f1BfOk1IBGQpWnOOHudgjDsBFVcBVU4TAAAAAAAAwD/+TNM0TfdFKwAAz7nN//u/f1sBADiTsAUAECRsAQAECVsAAEHCFgBAkLAFABAkbAEABAlbAABB/9U37v64KQDAE24/f8r0r3/C1qztBADAWO+gldOIAABBwhYAQJCwBQAQJGwBAAQJWwAAQcIWAECQsAUAECRsAQAECVsAAEHCFgBAkLAFABC08t2IAFssvgVsy9eqlods6Tx2v28qshhxvrnlgQBncWQLOKKklvlfaRk7K+VsGWt21ogAhwlbwG/hsBbwFsIWAECQa7aAI2636X7/e+FUfbho77Vcvf6r7XXjriNVbedB/cUcNg4BsMqRLeCgkk5WA9D8r7T09Pr32svNxfIWdedefYDTCVvAcS9LKntz1ar0JAFWOY0IPOv27ynFaX+s2dv/gHaS00vGBRC2gPPtPQq1t/9Z3jUu8Ks4jQgcMR8l+iyvOeMJsCBsAUF7M1mv/972vc6qA9D6M03TNP3sY+Z9jePqwBaLdNK7YKt3jdTD/r32Wbl3vMtadKv3cr36beoaDwEwa3LUz5KwBdBlrwhs1+wxfpacRgRY1+w3AY7w24gAf/XOLQIcJmwB/CVdAadzGhEAIEjYAgAIErYAAIKELQCAIGELACBI2AIACBK2AACChC0AgCBhCwAgSNgCAAgStgAAgoQtAIAgYQsAIEjYAgAIErYAAIKELQCAIGELACBI2AIACBK2AACChC0AgCBhCwAgSNgCAAj6b9nAr3e/L1tut3/a55svduLo9/u+IhuH3tjtxXqz6rW3tve8gt5se+0DBx6yy97XYc+izlnTnuuUIvXNMsRs0Vjf3DKHvRPeuN32loUoR7bY6r37rLNGX3xObLFx6I3dcu73lbXrzarX3tre8wp6s+21D+x9yOr279nec6yts3faY3P9epSSouZ/dcsxux7Yrm/PrrKQJmyxouyn7LCAvZ6MX/B9nEZkabGLtMc85vWfN68ci9a3bv/tB5OAHmGL3dqLIRa744efOr3+vfaeXv/V9tVTIfXNoh732CfNlvqrfQarPO7fPimna4dYXa+B1f5lRRb1e+3lruLhuD2DOou7HupNsp1/Xbn3JM7G6zWoUzfW7bvqH7Y6mZ7V7Vw3rk5+sN3accfbYfCkr/av22E7pxE5ov7YKDu++V9p6en177X39Pr32svNxXKvf33XLotHDeqfaO8kD1jMf+969fqX5Y3tvTp7DeosnsEt2s69+Zebi+XBfFb16tTqOnvrz+aeq8UHNvbvbefVSQ7Wd7X/4t76rtX+ve3Ta4ddHNlit3o397xzq7UO1+99Emxx7FEMvGyTPvO8X8pZq3Cgzn3DLwxefDtfdmJ8KGGLc2z/ae92m+7//t5WvV/bXme2t3/PWXVm7YfNifXb4m+0d7329k+72nzSXrC+5Q1++FW6d5Kn9D93vwQLwhbn2LVjXezF6v3yrjrT/v49Z9WZOh82J9a/lL3rtbd/2tXmk3b99Z1jzTzPLRHnxP4n7pdgwTVb8Enmj4ctHyrwLqtRBn4zYYuTzT8RDjzsMNvYrej1P6t9l8GHzfP1r/lD9t712ts/7V3zOWvcvXX29r+a0+e/seDGbrDwZ5qmafp57cyvoWvuynmlem9SXg+lsU4Sq6ni4Uuo17/XPj2a0sb22WJF6pZx+9SUqh3YPrvqT1XNunh91+yZ9lUb5/9kncV2G8ywV2fqr9dqe6/O3udlGtZfrFdRHtIb9+Ggs0Wd1ZuLu2bj+osJP6wzGLent53rUm2dwXZb9F+dZ92+t/+iHVrNK/ZnSdiCS/DuA/h0zZ78Z8lpRHi/5v0JwPfw24jwHs5NAPwSwha8h3QF8Es4jQgAECRsAQAECVsAAEGu2Xq/xYXSU/NHX1zccwrbMyS9Ye//fvHR6cMt6p+rN9tee2t7zw/10c/viT5lnhzjyNZ1PXzj3f0t4z3evj3T9XvS4z7csButzrNtOTzcxvqHrdbvzbbX3tre8+JWt0/bcu76tvWvaTDP1e3GxxG2LqHsX87d0QAAb+c04vstAtb2vLW9J1ukt2e6fs+7xt0rPc9Pr//pbJ9jbLfvIGx9gHIMuX7XjRtn43dpXWFeLv17der2RWMp0t5VjOcz7ay/OueHQ0yPNl1bsHfXauNq/3Jvr3G2Wr9u7xn0H49bZtsuzMuzLfUfKvUHN1dbyvJiO7QPGWg7P6y/sDrhttq4yDPaIQbPS6tMeFGnXpHV5XbcVasbpJ1q21KWF/XHDyntq3Muy7PV+gu99e21l7uKxbjlIeM643n2Bm3rlLvqe8erzCs5jfgZ2rdl+y4q7675X2nZbu4/qNNrnG8u7hrU6Vnt3Kt/2GqduaU2GPfAPNv6ve3Ta+8Z9x+PW5bLf9v5D+rXD39SW6QMt1iuLeYz0D58S/3tnnz4FovtP3heVpU+of5j7fapt3m9XHtyfR/Wr/XWt9e+fT7jOuN5Lm6WlrZOXa0ekYtwZOsDHHvPbH9Ubx9xru3z+Q5nre/eOnv7H/b2Hfobh/4C199615zh9lm9Zr/KpxC2vsf8A039Dt+yX5gfVX4YKlb3FKuNPQfms6v+G504z7bU3u22t/8x7TwPm19vn+tS8z/xeTnLpbbPu/T2q/xawtZXqfdx8wfw4b1e+8B5rzG3b9yD7JrPgfpvce48VzfIru027e9/wOkFOYXnBT6Ca7aA15nj6fMh9V0+ff5ptg+sEra+x3xI43SHyx5+4O9UNtfe7ba3/5OeH+7YwZjnxx3bXv/Y/NO2zz/t2PZJzz9d/yyfMk/2ErYuoby76rfZ+C3XPqSc2Cpv12N7vV6dun3LSbRenZ7n62+0Op9S4WGp3jzHFdp72/m327mdZ2vcfzzuFr36bZ1xwXYtxvOc1Vu4Xt5re/2e9t4t89/bPlA2dbv9t8y/N2Jd55kt3I6+Zfu02783em99x/Nv6z+0qP9w5ov+D632782zN3qrng8X9Geapmn6eXLaZxo+hVfvATYaFOm3Q7p+8bKBaDUb/2fJkS2+QfP6psvPvvB9vK8vzpEtPtViz+J1u1296Ww3mPJvinT96SVD8FCTo36WhC0AgBM0OcppRACAPGELACBI2AIACPJ1Pd+j/VWU11x+V8ZND3cPfAvNwMvW611evD1/m/Tr53D9F19G3e6XpsC4va3Ra38j77vfyZGt71HewLfbz/Lqbu50r9lxvGZdaq9Zrxe4r/1OeNvy0GqdLxBar/Tr51j9eU1fuYto90sJvcq99in2vBer9dsWfglhC+A3iqafntePCFfgNCJsUg4JfJyz5nxWnat5zXp97uvndBfZCOlppOvzWYStX2Fx7HreC5TG2235SbC3/6zusGip28tj2/6r6iJb5tkzmH9dZ7XIoH/d3rPav665utxun9U6Y+Mii/UaaOvUjbOHdR5u54V60HYTFePt1j5wdRUW26etU+4qtqzCbDHuap3VPluGeH6eq/1D26FdwUX9Xnu5q9g+bqtXfDxuuffh0IMiZflhEb6J04hf6L72Raq328+/0tKa2/f2Lxb9e3XK8sP6s9Jtsdyrv13pPy5ST7u+OXhIbW//0mfRf2+dWZl23VIa6+WxttuB+ezqXNevn4LeuGV5+xDT2nr16vTGfaieXn1zb52e7fNsF8py278sb68/tujWq99rPzzuqrlC2zIet57hWNunlF0s80s4svW1tr+Z9+6z9vYf2z7PsxyY/4mT3Ftqb/93+ZR5vsVFNs6uuLBw4CELZfRdnh8XrkDY+kLzTm3+Ea3o7ebmzu1+cG//no3dXmZ1/g8nudiYc8tG5emoWw7bPm7agfU6cfInltrl2LjPvH6OuWb9h68Q+FbC1m+xdze3t3/PWXVy5o+NeZ6rHyElVdTrsmu96s5tqV0OPzBh13o93M67DAaKOjDu86+fAz69PnwZ12x9p7M+0gDOZb/ELyRs/TrzD9nb7e3fc7U6uwzC68P5POxwzFllD9c5/MBzvWsau8Z95vXzpKvV39X5i+3dbny6P9M0TdPPcz4/944Pf6jy1q337Kt7+UWHe3UN04n9e+11464X22IF65ZF+6ot86/bF8Ot9p+Nx536/cfjzjdrvToDW6odrrN3PqvrO9CrP24fPF/tuIP1GtSZbZz89jqL9mnzELNendX2uvJq/17nqdO/p12pqb9Nbkdf/71H7WpfnU9ZLsbrO1utPyt3banDx6lfOdM0TdPPkrAFXN0v3DX9wlW+Pk8KDzUvkp8lpxGBK7r/4vMszf6at/nNr0NO5LcRgSu6/funJb4+eRw4V8UL/LbXISHCFnBRv+qD7Vet7Gfx1PA8pxEBAIKELQCAIGELACBI2AIACBK2AACChC0AgCBhCwAgSNgCAAgStgAAgoQtAIAgYQsAIEjYAgAIErYAAIKELQCAIGELACBI2AIACBK2AACChC0AgCBhCwAgSNgCAAgStgAAgoQtAIAgYQsAIEjYAgAIErYAAIKELQCAIGELACBI2AIACBK2AACChC0AgCBhCwAgSNgCAAgStgAAgoQtAIAgYQsAIEjYAgAIErYAAIKELQCAIGELACBI2AIACBK2AACChC0AgCBhCwAgSNgCAAgStgAAgoQtAIAgYQsAIEjYAgAIErYAAIKELQCAIGELACBI2AIACBK2AACChC0AgCBhCwAgSNgCAAgStgAAgoQtAIAgYQsAIEjYAgAIErYAAIKELQCAIGELACBI2AIACBK2AACChC0AgCBhCwAgSNgCAAgStgAAgoQtAIAgYQsAIEjYAgAIErYAAIKELQCAIGELACBI2AIACBK2AACChC0AgCBhCwAgSNgCAAgStgAAgoQtAIAgYQsAIEjYAgAIErYAAIKELQCAIGELACBI2AIACBK2AACChC0AgCBhCwAgSNgCAAgStgAAgoQtAIAgYQsAIEjYAgAIErYAAIKELQCAIGELACBI2AIACBK2AACChC0AgCBhCwAgSNgCAAgStgAAgoQtAIAgYQsAIEjYAgAIErYAAIKELQCAIGELACBI2AIACBK2AACChC0AgCBhCwAgSNgCAAgStgAAgoQtAIAgYQsAIEjYAgAIErYAAIKELQCAIGELACDov2UDcG33+7IFbrdlC3AdwhZ8JB+uzIRvuD6nEQEAgoQtAIAgYQsAIEjYAgAIErYAAIKELQCAIGELACBI2AIACBK2AACChC0AgCBhCwAgyHcjAu+0+tV+t9uO9tWviZy7rd4F8GKObAHvVPLQ7fZPNhq09+4CuCZhC7iQXnjqta9yWAu4FGELuJZeSOq1A1ycsAVcRXs9VjG4a8FhLeBqXCAPXEIvTvXaAT6FI1vAJfSORe26Ct5hLeCChC3gKgYhaXAXwMUJW8CXcFgLuCZhC7gWF2kBX0bYAi7kcNJyWAu4LL+NCLxTSVeLmFW31xGq7iZgAR9B2ALeqReVzmoHeDunEQEAgoQtAIAgYQsAIEjYAgAIErYAAIKELQCAIH/6AXid8leynv9LDSeWmvzJLiDJkS3gdU5MMyeWAogStoDfzmEtIErYAgAIcs0W8GaLb0UsR5jq9sVhp9Xvq16tU45a9a7xclgLSHNkC3inknXmf6Wl11iWe5lp8ZCyvFoK4AUc2QI+yWrS2q4X0QByhC3gog4cgjrwEIA0YQu4osVJwI12HaNyWAt4DddsAQAECVvAF7rfHxwPc1gLeBlhC3idEoDKQjlRWOLR3FK3r/524aJUr047IsCLuWYLeJ3VI0mrjdO/7b3l2mr7auPUbwc4nSNbAABBwhYAQJCwBQAQ5Jot+BTlIqP5Sm/XHDFbvB78IgBcjiNbAABBwhYAQJDTiMBf9//9NarbZ/5phN78e+0AL+DIFvDXp2eR3vx77QAvIGwBAAQJWwAAQa7Zgq9VLlSalVNpvfZVc+e5T71cbhbjOlOnf6m5uKyq117uKh6Ou0s9XGJ9e+2D9QU+nSNb8J3Kh/estPTa99pbp9e/LG9s79XJOTZur3+vvSwv2oEv4MgW/Arz53dOXb9NCc+P/nyF1nie7b3P2Dv/vf2BKxO24Dvdbrf7/V4nhnM/vwf1BwOdm2CeNJjnvHbzf+v2s+Z/Vh3gIwhb8LUWx2nm9FDd/6wD9R92uLiz5n9WHeAjuGYL4ARz3Fy2Aghb8K3Sn/1P1n/y4W+3d/69/r124Jv8maZp+t+3xM9veYe34ZJ+3pnzZ/OW81CLT/HykF779O9dbf9yDdN816DOql7/tmYZaNFz1qszdeY/aG/VE4iu76J9+wwX6hnODdWdwEvN7+PqHfyzJGzBp1iJJtC8HoQteJsmR/0sOY0IABAkbAEABAlbAABB/s4WfIrFtTguzaHm9QDX5cgWAECQsAUAECRsAQAECVsAAEHCFgBAkLAFABAkbAEABAlbAABB/qgpfKT5604BuD5hCz5M9X3yAHwApxEBAIKELQCAIGELACBI2AIACBK2AACChC0AgCBhCwAgSNgCAAgStgAAgoQtAIAgYQsAIEjYAgAIErYAAIKELQCAIGELACBI2AIACBK2AACChC0AgCBhCwAgSNgCAAgStgAAgoQtAIAgYQsAIEjYAgAIErYAAIKELQCAIGELACBI2AIACBK2AACChC0AgCBhCwAgSNgCAAgStgAAgoQtAIAgYQsAIEjYAgAIErYAAIKELQCAIGELACBI2AIACBK2AACChC0AgCBhCwAgSNgCAAgStgAAgoQtAIAgYQsAIEjYAgAIErYAAIKELQCAIGELACBI2AIACBK2AACChC0AgCBhCwAgSNgCAAgStgAAgoQtAIAgYQsAIEjYAgAIErYAAIKELQCAIGELACBI2AIACBK2AACChC0AgCBhCwAgSNgCAAgStgAAgoQtAIAgYQsAIEjYAgAIErYAAIKELQCAIGELACBI2AIACBK2AACChC0AgCBhCwAgSNgCAAgStgAAgoQtAIAgYQsAIEjYAgAIErYAAIKELQCAIGELACBI2AIACBK2AACChC0AgCBhCwAgSNgCAAgStgAAgoQtAIAgYQsAIEjYAgAIErYAAIKELQCAIGELACBI2AIACBK2AACChC0AgCBhCwAgSNgCAAgStgAAgoQtAIAgYQsAIEjYAgAIErYAAIKELQCAIGELACBI2AIACBK2AACChC0AgCBhCwAgSNgCAAgStgAAgoQtAIAgYQsAIEjYAgAIErYAAIKELQCAIGELACBI2AIACBK2AACChC0AgCBhCwAgSNgCAAgStgAAgoQtAIAgYQsAIEjYAgAIErYAAIKELQCAIGELACBI2AIACBK2AACChC0AgCBhCwAgSNgCAAgStgAAgoQtAIAgYQsAIEjYAgAIErYAAIKELQCAIGELACBI2AIACBK2AACChC0AgCBhCwAgSNgCAAgStgAAgoQtAIAgYQsAIEjYAgAIErYAAIKELQCAIGELACBI2AIACBK2AACChC0AgCBhCwAgSNgCAAgStgAAgoQtAIAgYQsAIEjYAgAIErYAAIKELQCAIGELACBI2AIACBK2AACChC0AgCBhCwAgSNgCAAgStgAAgoQtAIAgYQsAIEjYAgAIErYAAIKELQCAIGELACBI2AIACBK2AACChC0AgCBhCwAgSNgCAAgStgAAgoQtAIAgYQsAIEjYAgAIErYAAIKELQCAIGELACBI2AIACBK2AACChC0AgCBhCwAgSNgCAAgStgAAgoQtAIAgYQsAIEjYAgAIErYAAIKELQCAIGELACBI2AIACBK2AACChC0AgCBhCwAgSNgCAAgStgAAgoQtAIAgYQsAIEjYAgAIErYAAIKELQCAIGELACBI2AIACBK2AACChC0AgCBhCwAgSNgCAAgStgAAgoQtAIAgYQsAIEjYAgAIErYAAIKELQCAIGELACBI2AIACBK2AACChC0AgCBhCwAgSNgCAAgStgAAgoQtAIAgYQsAIEjYAgAIErYAAIKELQCAIGELACBI2AIACBK2AACC/ls2TNP9vmwBAOCYP9M0TZN4BQBwrtv8P6cRAQCChC0AgCBhCwAgSNgCAAgStgAAgoQtAIAgYQsAIEjYAgAAAAAAAAAAAADgK/w/O572RyDxlzcAAAAASUVORK5CYII="},29468:function(A,g,C){C.d(g,{Z:function(){return e}});let e="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAzAAAAJKCAIAAAB8pDdfAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAM3ElEQVR4Xu3d0VLiygJAUeaWH5tP4nPvA8eYaQiiMu4krFXzgE1sMloFu7ojnE4AAAAAAAAAAAAAAEDizzjw4TwOAADwI9M4cDqdTqf/jQMAAPwuQQYAEBNkAAAxQQYAEBNkAAAxQQYAEBNkAAAxQQYAEHsbB66cvUEsAMAPTLffDvbD50F28elEAAAMHlzYsmUJABATZAAAMUEGABATZAAAMUEGABATZAAAMUEGABATZAAAMUEGABATZAAAMUEGABB79LMsgQO4+ZFqT/+k2vlRhpnXxu84n/86+Bsz3PSseQaXae/MeeeA4Vdz8xjgwKyQwQuZX+an6R++5K/NvDa+5jofvzrDmmfNs3QntmaXe6//X/P3zr+X62OAYxNk8Lru1wMAv0aQwUvTZKfT6Xz+6YrUI8tjFzcXwJYLlo9PBRyJa8jgRS0vz5ojYLi4am18vmv23IBYTn4zUJ54PsP8N+e5ecz9h7g5D8AaK2Twim7mwiXRrhPkeny+dxh/lnna4fbSU85nrbS+Os/g2/MM5wO8Ditk8IqmxaLX47YTCk88kydOteYXHgLYO0EGL+p4lfCNxDy9r/8NIz906d3lPMf7aQPPJciAg/hG9MzltPzeb8xzbTnJ9UOseeQY4JBcQwYv7eerQZzeQ+qRH6arxICbBBm8rkcCYguG7b9Pfen4Oy31pXmWfv8bgb0TZPBC5hf7B1/4l8cvzREzzzPs0A037o+vWabSnWw6fXY+1746z/X4tZtnO8zzyLkBr+nPOPDhv2cdzyAAS54VgcddPWPcfu6wQgbwBVfPrQBP4K8sAT4xbFOqMeDpBBnAJxQY8K/ZsgQAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAIDY2zgA8OvO53FkC6ZpHAH4RwQZsBXbCaBtBiJwYLYsAQBiggwAICbIAABiggwAICbIAABiggwAICbIAABiggwAICbIAABiggwAICbIAABiggzYjfP5r0+ZHL4E2C9BBuyMCAOOR5AB+6PJgIMRZAAAsbdxAGCHhjWzafrrS4CNs0IG7Mwltoar+y/jl3/DvQDbJ8iA/bEABhyMIAMAiAkyYJcskgFHIsgAAGKCDAAg5m0vgN2bpvFjlGxoAvsiyIDdGDJr+aUCA3bNliUAQEyQAQDEBBkAQMw1ZEBovvLrckH+di4EG87HJzEB/5YVMgCAmCADAIgJMmA3zufz+f3dxpa3AfZOkAEAxAQZAEBMkAEAxLztBXAEw/Vk0/tHKa2NA2yKFTJgNy45NV/OP1TX9G4eWRsH2BpBBuzJHGHzjcfNWQawNbYsgYO4Xv2apml4dwxBBmyTIAMO4mZsLQcvcXbzMICWLUsAgJggA45m3qYc9isBNsuWJbAnc2AtNx/XrhVbGwfYGkEG7MlaUX11HGBTbFkCAMQEGQBATJABAMRcQwaEhj+B3NpfRG7tfIDDskIGABATZAAAMUEGABATZAAAMUEGABATZAAAMUEGABATZAAAMW8MC2zF2fuwAq9KkAG9aRpHAF6KLUsAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgNjbOLDifB5HAAB4ij/jwAcJBgDwXNM4cDqdbFkCAOQEGQBATJABAMQEGQBATJABAMQEGQBATJABAMQEGQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDr+D+VT1dp1SpSzAAAAABJRU5ErkJggg=="},5011:function(A,g,C){C.d(g,{Z:function(){return e}});let e=C.p+"assets/images/uefi-choosing-boot-device-62df6cbf7123313a863cc3e6199c5eae.png"},78463:function(A,g,C){C.d(g,{Z:function(){return e}});let e="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAoUAAAHMCAIAAAAs9EW6AAAACXBIWXMAAA7EAAAOxAGVKw4bAAAXpklEQVR4Xu3da5ajOLYGUOKunmt5SORo8/5QpUqplwGDD47Ye9XqxkIcZIz1BTjCuSwAAADAV7G8FssAwHs8lmX5v7oRAHg7eQwA8eQxAMSTxwAQTx4DQDx5DADx5DEAxJPHABDvf3XDsvz+/U/dBACc6uvrV/mwk8dJ1Q8AOEX3utf9agCIJ48BIJ48BoB48hgA4sljAIgnjwEgnjwGgHjyGADiyWMAiCePASCePAaAeMPvr4Yo1Te73vOr1Nuvn31xnL9//7O9Qrn37Vt1nVjqFLuOA3wnro+5lxQPX1+/0n+55W5yZpwyzl3blocoPzxmUur3739eqXzMZI8h44F3ksfwSXKCpocnXkrmVAZCuF8Nn+2iEL2o7GF3Gw+cTh5zL19fv9KdyTT/lrNwdbsyr+q2l9eR3eW81bzOAaM63faysbr23WtSv/t8J7qdy8aq7OHj3G1sj0NbpGxMnu4Xbu6rWF7T/7VvBnizdjKtTstuHozaR31G/dtNuuZ5UPZ5Wn/L7pJRz0nB+XJyYsGnm2RtY9uSTYpXD0fLcB/NmflYfH7MPX31fsNoi7zhRnv7tw4PNVx+4i8egS1eP87w7blfzX19/X3verk+866uz+Igw4A85pNcfY11dX3am8lA4n4195IuiOtWxhwu+B7kMR9pFNuj9r3OqrPX0/1WV5bzzp/r6XGA78fvV3M71UQ8+vB4e3v6HLpcqHomozpdbVq0+93YnpSjLdu7us9iVL98R7fLVeeku2peP7XsOs5l/+7atrFsn4+nfb5wH82Z+VgWeQzsZIqAFzVvIn/vBGzz2w1kuJg8Bp7Lt3+bn+uBc/h7J2ATGQyXcn0MAPHkMQDEk8cAEE8eA0A8eQwA8eQxAMSTxwAQTx4DQDx5DADxht/P5btqAeBtOnnsW/EA4M3crwaAePIYAOLJYwCIJ48BIJ48BoB48hgA4sljAIgnjwEg3n/fB7KuRTMA8BaPx7K4PgaAO5DHABBPHgNAPHkMAPHkMQDEk8cAEE8eA0A8eQwA8eQxAMSTxwAQTx4DQDx5DADx5DEAxJPHABBPHgNAPHkMAPHkMQDEk8cAEE8eA0A8eQwA8eQxAMT7X90AwKkej/+W1/W/5UCPx9aRlINfbjP+SjXI5eVxbj8+J3J9DHChFBXr+u/83ibH+20fQzn4+4y/lbPzlHG+su0r5DHAVXKeJe+/5OKDyGOA9xHJjPj8GODdyuvm7nK+ZTpvz6uyef+yc3Xt3pUqPP58mFp27u531N59juXyxud1wKhOt33v8TnXV15a37lbgB9gNKd3M2m+qrt8YNv24VM5pUYVno5n42C6/as+I3mQyXxfo/buwzd4PB6L62OA2xpFwqj9IjnbHjt/63hX52V//9bhod6BPAb4bNWl4UXSZWWZc1fv9+r6dyOPAT5b1IXg1fu9uv7d+P1qgPf5rGu+dEHMe8hjgKvkjzOTq7Ntb3zu7T8yqjNq3+usOnu9eb9+vxrgWuWc3n74mj6XLRdyezZqX5qMr+qXPxB0Cz6d+Of1D7Rveb7LuE5X1Xnp7Xdje7L9+Jwi/X61PAaASCmP3a8GgHjyGADiyWMAiHf+3x+n++BwLr/fAHxvro8BIJ48BoB459+vTsq7ize5g72u68aRVLdGN271Zu392xfHedbx2V4n2dt/o27N9qA9let0t52v7TqwCd/YY+c/e7C3/5vlt113kPO1XQc2+VyXXB+niebxeKSp5w7zzvYxlIO/z/hbeVo/ZZzbt50fn+11kr39t8uV13V9ZS/zbedruw5swnfV+6FxZm//95uf3fO1XQc2+Vzn53Ger9PDvACBpCBwc+fncUskcwciGbizqz4/bpXXzd3lPF3O2/OqbN6/7Fxdu3elCuufDzXLzt39jtq7z7Fc3vi8DhjV6bafdXwmdcpV3cZJ/7L9sPZo5/Gn5XJV1Zi1/UeqAXefPj9H9Zqn06FsTMv5NClXdRsn/cv2pOo80a2TN89ru/tt67f9R7r7TXa9Xbp1JuO/oau+v7qdd8o5tzv/tqu6ywe2bR8+1c7Ro4Jb2kd9Rv3bTbryIJP5vkbt3YdP5V1Xm8zrtGuftlTj36UtW7aXO5ocyeph23/SuXqYl9sifFfpHMwv9fxhpV37tOVph5FJndFytnHbdu38YV5ui7S21Gm73UeaE953fbxROYeWRu0XyTNmnj032tV52d+/dXiorwjZ6TE3GaEMZolIgvfv8RQXBefpBc91uzze6D3z2uPve7PL9fu9uv652uPTdeBJHdhkYmO1+bPY5cRSfLR1XR5//xu6T0/GA+fOgU26dtXZ1XnuxFIf7VPzOGq+u3q/V9d/v5SFe68O338cyhG+vvftz5RvrzwXUjZPzo506qUO20/DScFdttc5Ns6R7fv93t7x+9WfNTelC766lT8+9/i8nrLwcdJPAHyE8/O4uhK6eu7eGw97+4+M6oza9zqrzl5n7XdvnVH/UfteUWH8eDyids0dbIzDjd2yUf9R+15n1dkrar83cf7vV7d3JvN8lBsfxa/7dnsugwpJNdSq/ujGY7n33Ng1r3+gfcvzXcZ1uqrOS2+/G9uT149P0tbpHofUUq2tWsr29vnOdZ9FuffRcnrYbc9r8/L8iczbl/1Pik9UvezVa57X5vayJS2Xm0z6V+17jeqUY2iX08Nue16blauejr95uzx5at063T3eUJocrspjONdZ5yfA3aTcPP9+NQCwlzwGgHjyGADinf/3xz7nA4C9XB8DQDx5DADxzr9fneU/Nn2x/Szb64/+fvRW2r8re3Gc24/PZ6n+RLj8w+K8NrfnbnkZTpHPr3NPrnnZ+dquA5twlquuj9Ps1mZG25KM2s+yvX6eoJPccjc5M04Z5yvbfoR8lEaedoBXjE6ux2vfSDUqm8zXdh3YhLNcksflJci3n+gB4HXn53EZxiKZuynPyfJchRDr6pKUf134+XGlTOXRBXQ1P1ZBXvVfe18ynBvb/mWf3NJKFR5/PkwtO3fHM2rvjq1crsaZV2XzcU6M6nTb9x4fYK+/33n/ye3le67qnFeV7e17tFuqa1R/aVbxZudfH4+s65on+i3LORtyYxUnWZV2Vf+yZrk8kTfvZlVVf9Q+kvu8WCfL4yy3auuM2vPDavkbq55+vRpOld7H3ROtbcyd03+5ZdSYTVaVJvUn4+Q9rro+3pglr7h0F3nKfuz8reNdnZf9/VuHh/pj5SR20LjaiyF3eMO9Xhwnp7gqj/Mc92JqjjZPk2n633rdedop+9LdLdfXB+5sXZfH379xnTPyxLnhxFKc6Ko8Psvdrl2uHs/V9ckXx+l/XSJzN+XJmLI5hXRe9XqaOt/v6X2fH3+KNEHXrQA/WHXVzhXC8ngUe3vb97q6zqh9r7Pq7BW1X2B5e+y9eXfMfeWls27Zpdm8+sC1LJ6n+2qPbXsVDKk9F3wUnx+Xq6r+WVt/ZFTncHs5zrLzaITJfJxV56W3343tyfbj81mqA16eMHnt/HWBVzTv1CWfX+WqbmO3fZ3evi5P3mP1M++Dt0nzz/l5HKiaagHg/lJ4hd2vBgCy75PH+X5jeyMXAG7u7n/vtJ3b1AB8ru9zfQwAn0seA0A8eQwA8S75/Hj+d6430f7a14vjfGz72sXR37+Wfbq+698Hv9/8/Nz4Oj511uu1sY7zCj7d+dfHeSJIcsvd5NnnlHHu3Tb137WV6fIVj8ejPOaj83PXKzJ31uu1q85151U+gMBFzs9juJucwfUKNmt/dgHOJY/DmNre46eF8XXnlUiGS53/+fH6979hV86D1Ts5r+q2l9NodzlvNa9zwKhOt71sLMd5QLd+Uq3qNh7e7zfWviKj83PyOparqsbueZjXVs6qs9fkPOnWn/Svjh5woqu+v7qdXPK8Uz3c0j7qM+rfbtLVnXdGdUbt3YcTZcGy7KRgt8+kP8nkmOSXvlo72WRp1o5eju7rVTqrTqnsXG6yZV/dxrZ/1m0EDkvvqavuV6/rWr69t8sbbrS3f+vwUF+0cdjmvmPmx+26F32+36eqgR2os3GTw/WXP1udfujghzv/fnVpbe5uXf0evrr+3fy057tde+61tvRZzjvIZ9V5g/lQ09r5QQP2ujaPW1e/h6+ufzc/7fnusjFu58rsmafU3Fl13mNyxIQxXOT8+9VpBqxbIUKbf87PVwhjuM75ebzRaFocte91Vp29ftp+76+N5C0cz6Q8DmlBGMNFLvn96moiy5UPt6cbj+VC1TMZ1elqZ9t2vxvbk3K0ZXulmtTKh6P6o6GO+tPacpyT9nXsnoe5fbRcqtrLOmXn0UiyyUtcDqB6OHq+o/rd/lV94ETp/XVJHgMAG6U8DrtfDQBk8hgA4sljAIgnjwEgnjwGgHjyGADinf99maM/ajzdY/P3IHb/nvJuTj9uG49P3q8/MwUIdP71cZ7K13Xtfr3AKbbXzAFz6Xhed+5x275t3i8Agc7PYz6Xi2OAKPIYAOKd//nxxOhz3F3tZeOW67n17390r+zcrT9qL/fVXc5bzescMKrTbd97fLK286R+NYZ212UfAJ665Puru/PyaB7f2959+FQe0qjC0/22wdP2GfVvN+nKg0zm+xq1dx/O5f2W/UcF97anhwCMpAnz8uvjvTPy3v4b5Wx7bPut42xX52V//9bhob7uxD2eVQfgh7gwj9M1UzXFp58CSrlb2ZKX2/6vaId0bv3W1fVP1B6cZc/4568jAHMX5nFXd46uAqCMhG7/E316/avtGv/kdQRg7trfr07T8fZrrCtUF21M3OH1AviZrs3jiRyTG/Ny1G3Uvteozqh9r7Pq7HXWfp/WedoBgInzf786T8rlxVb3wivvcW97Uu1oYlTncPta/Dpx2Xk0wmQ+zjbM2v1ubE82Hp+qW35e5aqyQ9u+POsPwESaPM/PY36UMr8BOCBNpGH3q/kGhDHAWd79+9V8OjelAa4gj9lHAANcwf1qAIgnjwEgnjwGgHjyGADiyWMAiCePASCePAaAePIYAOLJYwCIJ48BIJ48BoB48hgA4sljAIgnjwEgnjwGgHjyGADiyWMAiCePASCePAaAePIYAOLJYwCIJ48BIJ48BoB48hgA4sljAIgnjwEgnjwGgHjyGADiyWMAiCePASCePAaAePIYAOLJYwCIJ48BIJ48BoB48hgA4sljAIgnjwEgnjwGgHjyGADiyWMAiCePASCePAaAePIYAOLJYwCIJ48BIJ48BoB48hgA4sljAIgnjwEgnjwGgHjyGADiyWMAiCePASCePAaAePIYAOLJYwCIJ48BIJ48BoB48hgA4sljAIgnjwEgnjwGgHjyGADiyWMAiCePASCePAaAePIYAOLJYwCIJ48BIJ48BoB48hgA4sljAIgnjwEgnjwGgHjyGADiyWMAiCePASCePAaAePIYAOLJYwCIJ48BIJ48BoB48hgA4sljAIgnjwEgnjwGgHjyGADiyWMAiCePASCePAaAePIYAOLJYwCIJ48BIJ48BoB48hgA4sljAIgnjwEgnjwGgHjyGADiyWMAiCePASCePAaAePIYAOLJYwCIJ48BIJ48BoB48hgA4sljAIgnjwEgnjwGgHjyGADiyWMAiCePASCePAaAePIYAOLJYwCIJ48BIJ48BoB48hgA4sljAIgnjwEgnjwGgHjyGADiyWMAiCePASCePAaAePIYAOLJYwCIJ48BIJ48BoB48hgA4sljAIgnjwEgnjwGgHjyGADiyWMAiCePASCePAaAePIYAOLJYwCIJ48BIJ48BoB48hgA4sljAIgnjwEgnjwGgHjyGADiyWMAiCePASCePAaAePIYAOLJYwCIJ48BIJ48BoB48hgA4sljAIgnjwEgnjwGgHjyGADiyWMAiCePASCePAaAePIYAOLJYwCIJ48BIJ48BoB48hgA4sljAIgnjwEgnjwGgHjyGADiyWMAiCePASCePAaAePIYAOLJYwCIJ48BIJ48BoB48hgA4sljAIgnjwEgnjwGgHjyGADiyWMAiCePASCePAaAePIYAOLJYwCIJ48BIJ48BoB48hgA4sljAIgnjwEgnjwGgHjyGADiyWMAiCePASCePAaAePIYAOLJYwCIJ48BIJ48BoB48hgA4sljAIgnjwEgnjwGgHjyGADiyWMAiPdVLK/FMgDwHo/F9TEA3IE8BoB48hgA4sljAIgnjwEgnjwGgHjyGADiyWMAiPe/umFZfv/+p24CAE719fWrfNjJ46TqBwCconvd6341AMSTxwAQTx4DQDx5DADx5DEAxJPHABBPHgNAPHkMAPGG3wdSeNQNAMBua91QcH0MAPHkMQDE23K/Gs63rp37No/HY2lWpcaRts68/2Hruu6qvLd/ZddBKJUbbt+qkou0FV58XlHa82T5+9mlDtVTmxyH1uGXDBLXx8TIs9Xj8ehOi7m9O5NmbZ15/2P21tzbv1U+r2VzwfLo5YcH5L1XDhcM154npe7zKhO626G097yFljzmFtopkuzY/N4NHpLyyHQPbBnGx44/7CWPuQvhwTvl880PLtyEz4+5hfWCTyWrC5pcf1d72VheM41M+nfrH7C3Ttm/Gkz5HOd13vC83un08+3xeKzrmsuWxfce/088npxCHhOsnX3SvFY2Lk23pDvrjea4NFfube9Wmxj1H9XPHTaa1Emr0kJZudt5r6uf19vko7RR9XS6m6cOj+LUPXz8P+54ciJ5TLAqS3JLkts3Tkkbu2V7+99ZyoO0UK97l8Bdb9Seb7vMn2AuLkQ5QB5zC69PXimNqnmwnXZzt7IlL7f972nXOHd13mt+PG9r+yC398yqU/HA8T+wCd+APOYzdGeop3Nlt0MVwHnerFbd2fZxpuN2OBi2mBzP76d7DCfP99jxnxTkG5PHfIYtM1R1XQKnG51aZe7CMf7eifs6cY5LOV0uzI26jdpH9vbvShW6x+GU+gfk/UYN4GrlFe3k+B+W68+Lf9fDS9dXsfzvq/779z/Lsnx9/frT3j9R4BXlLFNNRpNVrdy5nEC7twdzqb3tSbWjp9r+8/qVSefRqtFxK0fSPT5Ve7mqbExefF5RtjyjrH1qW57U6Dg8Pc7z8WzZNZ/j3xe3m7PyGADeY5az7lcDQDx5DADx5DEAxJPHABBPHgNAPHkMAPFO+H6u7p/QTdorW/4g7wpn7Xf+F4rztVs8rbD6Oip4pvqj3uTEN87p9b2vf6BXr4/zWdg9HbdLm79Y5Fzrum4Zz/w9M1l7Sv0tFYD8Pno8HvP31DGH63fngbaFn+ClPK5OGucQ8BF2ReYBV9fnW3rpfnU651IMv37+3S3OX39Gc1fXByaufgNurL+xGz/BS3l8tSqh2/ivfhTo9j8mlyqLlI3tTyHdTUa6nXfVL59s2xkYWaf/SPbr80lZvztHtbtoW/Ly9v3y6d6Xx9XJneRTLSVQzqGlORfXda3eRZW9/ZPuqJYiEbOyfrWvLG21Zb+v15/3BLom77v0ML2/5u2V8g1YdSjfs1XNvPa/3s9mAL639+Xx03PraYcrlO+3v9fsdvX4r64PP0EbgaXRuyy3jzpkbf0cyWm5XAWl9+Xxe0zeaQBL7wq1nDdej8zXK/AzXZLH5cmdfyrsJuXpJ+7pBYHvrZw0UjZPppED81g5B86L88NdksdV+qbzz1kI3MexaNy+ybH6/GQv/f3xRD4RTz8jU8H0k2Z+2Modfoif9nzhFfnNsvGNs7FbVtZf/r4m2VtnV38+2lex/O+r/vv3P8uyfH39+tPeD7yzlOdr9bA6EcvorbYqG7NRVCeT/eaHSbcxt+fG8mF3k3b8VfuB+m0HoFW9uZL5PDNq7xrV704I3V1U9b2vv6l/X9Zuzsbn8SdqQ/FcV9cHIMIsZ6+6X/39rOva/RH4LFfXB+DOXB/vMLm5dIqr6wMQapazl/x+9Xd1dUZeXR+A29qSx26iAsC1fH4MAPHkMQDEk8cAEE8eA0A8eQwA8eQxAMSTxwAQTx4DQLzh94Gkb/MCAN6gk8fFN2oCAO/gfjUAxJPHABBPHgNAPHkMAPHkMQDEk8cAEE8eA0A8eQwAAAAAwB38PyZrkDdbrqQ1AAAAAElFTkSuQmCC"},50065:function(A,g,C){C.d(g,{Z:function(){return t},a:function(){return n}});var e=C(67294);let o={},I=e.createContext(o);function n(A){let g=e.useContext(I);return e.useMemo(function(){return"function"==typeof A?A(g):{...g,...A}},[g,A])}function t(A){let g;return g=A.disableParentContext?"function"==typeof A.components?A.components(o):A.components||o:n(A.components),e.createElement(I.Provider,{value:g},A.children)}}}]); \ No newline at end of file diff --git a/assets/js/f4c9601b.688d28e5.js b/assets/js/f4c9601b.688d28e5.js deleted file mode 100644 index bf38c95d0..000000000 --- a/assets/js/f4c9601b.688d28e5.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[2595],{39910:(A,g,C)=>{C.r(g),C.d(g,{assets:()=>r,contentTitle:()=>n,default:()=>s,frontMatter:()=>I,metadata:()=>t,toc:()=>i});var e=C(85893),o=C(11151);const I={title:"Booting with Secure Boot Enabled",summary:"Instructions for enrolling the Solus Certificate when Secure Boot is enabled"},n="Booting with Secure Boot Enabled",t={id:"user/quick-start/installation/secure-boot",title:"Booting with Secure Boot Enabled",description:"Since Solus 4.4 Secure Boot is now supported. When you first boot the ISO, and, if you have Secure Boot enabled in your UEFI firmware; you will have to perform the one-time-step of manually enrolling the Solus certificate. The following guide will walk you through this. If you already have Solus installed and wish to enable Secure Boot, skip ahead here.",source:"@site/docs/user/quick-start/installation/secure-boot.md",sourceDirName:"user/quick-start/installation",slug:"/user/quick-start/installation/secure-boot",permalink:"/docs/user/quick-start/installation/secure-boot",draft:!1,unlisted:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/quick-start/installation/secure-boot.md",tags:[],version:"current",lastUpdatedAt:1732716912e3,frontMatter:{title:"Booting with Secure Boot Enabled",summary:"Instructions for enrolling the Solus Certificate when Secure Boot is enabled"},sidebar:"userSidebar",previous:{title:"Disk Partitioning",permalink:"/docs/user/quick-start/installation/disks"},next:{title:"System Requirements",permalink:"/docs/user/quick-start/installation/system-requirements"}},r={},i=[{value:"Enrolling the Solus certificate",id:"enrolling-the-solus-certificate",level:2},{value:"Enabling Secure Boot on an existing install",id:"enabling-secure-boot-on-an-existing-install",level:2},{value:"Final tips",id:"final-tips",level:3},{value:"Useful links for additional reading",id:"useful-links-for-additional-reading",level:2}];function a(A){const g={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",img:"img",li:"li",p:"p",ul:"ul",...(0,o.a)(),...A.components};return(0,e.jsxs)(e.Fragment,{children:[(0,e.jsx)(g.header,{children:(0,e.jsx)(g.h1,{id:"booting-with-secure-boot-enabled",children:"Booting with Secure Boot Enabled"})}),"\n",(0,e.jsxs)(g.p,{children:["Since Solus 4.4 Secure Boot is now supported. When you first boot the ISO, and, if you have Secure Boot enabled in your UEFI firmware; you will have to perform the one-time-step of manually enrolling the Solus certificate. The following guide will walk you through this. If you already have Solus installed and wish to enable Secure Boot, skip ahead ",(0,e.jsx)(g.a,{href:"#enabling-secure-boot-on-an-existing-install",children:"here"}),"."]}),"\n",(0,e.jsx)("em",{children:"Note that this only applies to machines with UEFI firmware, if your machine uses the older BIOS firmware you can safely ignore this article. If you wish to avoid having to do this step then you may disable Secure Boot in your machine's UEFI firmware interface."}),"\n",(0,e.jsx)(g.h2,{id:"enrolling-the-solus-certificate",children:"Enrolling the Solus certificate"}),"\n",(0,e.jsxs)(g.p,{children:["After ",(0,e.jsx)(g.a,{href:"/docs/user/quick-start/installation/#boot-the-media",children:"booting"})," the ISO from USB/DVD and, if Secure Boot is enabled in your device's UEFI firmware. A warning will appear concerning a Secure Boot violation, press ",(0,e.jsx)(g.code,{children:"Enter"})," on your keyboard to continue."]}),"\n",(0,e.jsx)(g.p,{children:(0,e.jsx)(g.img,{alt:"Secure Boot violation",src:C(95762).Z+"",width:"807",height:"577"})}),"\n",(0,e.jsxs)(g.p,{children:["Now, it will provide 10 seconds in order to continue to MOK (Machine Owner Key) Management, press ",(0,e.jsx)(g.code,{children:"Enter"})," again within the timeframe to do so."]}),"\n",(0,e.jsx)(g.p,{children:(0,e.jsx)(g.img,{alt:"Continue to MOK Management",src:C(48979).Z+"",width:"811",height:"581"})}),"\n",(0,e.jsxs)(g.p,{children:["Use the down ",(0,e.jsx)(g.code,{children:"\u2193"})," arrow key on your keyboard to select ",(0,e.jsx)(g.code,{children:"Enroll Key from Disk"})," and press ",(0,e.jsx)(g.code,{children:"Enter"})," to continue."]}),"\n",(0,e.jsx)(g.p,{children:(0,e.jsx)(g.img,{alt:"Enroll Key from Disk",src:C(35529).Z+"",width:"809",height:"581"})}),"\n",(0,e.jsxs)(g.p,{children:["Here you'll need to find the ",(0,e.jsx)(g.code,{children:"solus-enroll-me.cer"})," certificate, it should normally be located in the ",(0,e.jsx)(g.code,{children:"SOLUSESP"})," directory. Use the arrow keys to select a directory, ",(0,e.jsx)(g.code,{children:"Enter"})," to enter it and ",(0,e.jsx)(g.code,{children:"Esc"})," to go back."]}),"\n",(0,e.jsx)(g.p,{children:(0,e.jsx)(g.img,{alt:"Enroll the Solus Certificate",src:C(91370).Z+"",width:"804",height:"577"})}),"\n",(0,e.jsxs)(g.p,{children:["Once you found the ",(0,e.jsx)(g.code,{children:"solus-enroll-me.cer"})," certificate, press ",(0,e.jsx)(g.code,{children:"Enter"})," to enroll it, and press the ",(0,e.jsx)(g.code,{children:"\u2193"})," and ",(0,e.jsx)(g.code,{children:"Enter"})," key to continue. Finally, when confirming you wish to Enroll the key(s) press the ",(0,e.jsx)(g.code,{children:"\u2193"}),' key to select "Yes" and ',(0,e.jsx)(g.code,{children:"Enter"})," again."]}),"\n",(0,e.jsxs)(g.p,{children:["Now, with the Solus certificate enrolled, press ",(0,e.jsx)(g.code,{children:"Enter"})," to reboot the machine, boot the ISO from USB/DVD again and it should continue booting to the installer."]}),"\n",(0,e.jsx)(g.p,{children:(0,e.jsx)(g.img,{alt:"Confirm Key Enrollment",src:C(51754).Z+"",width:"816",height:"586"})}),"\n",(0,e.jsx)("em",{children:"Once Solus is installed you will not have to enroll the certificate again as it will stay enrolled."}),"\n",(0,e.jsx)(g.h2,{id:"enabling-secure-boot-on-an-existing-install",children:"Enabling Secure Boot on an existing install"}),"\n",(0,e.jsxs)(g.p,{children:["If you already have Solus installed and wish to enable Secure Boot then there is one extra step you must perform BEFORE continuing with ",(0,e.jsx)(g.a,{href:"#enrolling-the-solus-certificate",children:"Enrolling the Solus Certificate"})," as normal."]}),"\n",(0,e.jsxs)(g.p,{children:["Firstly, you must confirm you have ",(0,e.jsx)(g.code,{children:"clr-boot-manager, version: 3.2.12, release: 29"})," (or later) installed, run ",(0,e.jsx)(g.code,{children:"eopkg info clr-boot-manager"})," to confirm this. This version of ",(0,e.jsx)(g.code,{children:"clr-boot-manager"})," will have created a new UEFI boot entry on your machine called ",(0,e.jsx)(g.code,{children:"Solus Linux Bootloader"})," that can be booted from with Secure Boot enabled."]}),"\n",(0,e.jsx)(g.admonition,{title:"Before continuing, it is important to note the screenshots provided here are for example only, your UEFI firmware interface will almost certainly look different.",type:"note"}),"\n",(0,e.jsxs)(g.p,{children:["Reboot your machine and select the appropriate keyboard button during startup to choose a boot device. The correct key will vary from machine to machine but some common keys are ",(0,e.jsx)(g.code,{children:"F2"}),", ",(0,e.jsx)(g.code,{children:"F11"}),", ",(0,e.jsx)(g.code,{children:"F12"}),", or ",(0,e.jsx)(g.code,{children:"Esc"}),". From the boot selection interface, select the ",(0,e.jsx)(g.code,{children:"Solus Linux Bootloader"})," entry and boot from it. If you've manage to successfully boot then you can continue with enabling Secure Boot."]}),"\n",(0,e.jsxs)("em",{children:["If there is no entry called ",(0,e.jsx)(g.code,{children:"Solus Linux Bootloader"}),", reboot, log back in, open a terminal and run ",(0,e.jsx)(g.code,{children:"sudo clr-boot-manager update"}),"."]}),"\n",(0,e.jsx)(g.p,{children:(0,e.jsx)(g.img,{alt:"UEFI Choose Boot Device",src:C(23506).Z+"",width:"645",height:"463"})}),"\n",(0,e.jsxs)(g.p,{children:["After successfully booting from the new ",(0,e.jsx)(g.code,{children:"Solus Linux Bootloader"})," UEFI entry, open a terminal, input ",(0,e.jsx)(g.code,{children:"systemctl reboot --firmware-setup"})," and press ",(0,e.jsx)(g.code,{children:"Enter"}),". This will reboot you into your machine's UEFI firmware interface. Once there, you will have to find and enable the Secure Boot setting. Where this is located varies from machine to machine. Some common places it can be located under are ",(0,e.jsx)(g.code,{children:"Windows OS Configuration"}),", ",(0,e.jsx)(g.code,{children:"Security"})," or ",(0,e.jsx)(g.code,{children:"Device Manager"}),"."]}),"\n",(0,e.jsx)(g.p,{children:(0,e.jsx)(g.img,{alt:"UEFI Secure Boot Configuration",src:C(61857).Z+"",width:"645",height:"460"})}),"\n",(0,e.jsxs)(g.p,{children:["Once you've found and enabled the Secure Boot setting then reboot once again from the ",(0,e.jsx)(g.code,{children:"Solus Linux Bootloader"})," UEFI entry. From there you can continue with the instructions: ",(0,e.jsx)(g.a,{href:"#enrolling-the-solus-certificate",children:"Enrolling the Solus Certificate"}),", bearing in mind you are booting from a disk rather than from a USB/DVD."]}),"\n",(0,e.jsxs)("em",{children:[" Remember to save settings after enabling Secure Boot! (usually ",(0,e.jsx)(g.code,{children:"F10"}),")"]}),"\n",(0,e.jsx)(g.h3,{id:"final-tips",children:"Final tips"}),"\n",(0,e.jsxs)(g.p,{children:["Once you've successfully enabled and booted your Solus install with Secure Boot enabled. Go back into your machine's UEFI firmware interface and change the default boot device to ",(0,e.jsx)(g.code,{children:"Solus Linux Bootloader"}),"."]}),"\n",(0,e.jsxs)(g.p,{children:["You can run ",(0,e.jsx)(g.code,{children:'bootctl status | grep "Secure Boot"'})," in a terminal to verify Secure Boot is enabled."]}),"\n",(0,e.jsxs)(g.p,{children:["It is possible to delete the old Solus UEFI boot entry with ",(0,e.jsx)(g.code,{children:"efibootmgr"})," once Secure Boot is enabled successfully, However, caution is required and as such, instructions to do so are not provided here."]}),"\n",(0,e.jsx)(g.h1,{id:"why-is-enrolling-the-solus-certificate-necessary",children:"Why is enrolling the Solus certificate necessary?"}),"\n",(0,e.jsxs)(g.p,{children:["In order to avoid the one time step of enrolling the Solus certificate, Solus would have to get it's own ",(0,e.jsx)(g.code,{children:"shim"})," EFI executable signed by Microsoft. Currently, the following actions must be completed to do this:"]}),"\n",(0,e.jsxs)(g.ul,{children:["\n",(0,e.jsx)(g.li,{children:"Obtain an EV Certificate (expensive!)"}),"\n",(0,e.jsx)(g.li,{children:"Register for the Microsoft Windows Hardware Developer Program."}),"\n",(0,e.jsxs)(g.li,{children:["Implement any additional security requirements as required by the ",(0,e.jsx)(g.a,{href:"https://github.com/rhboot/shim-review/",children:"shim-review"})," process."]}),"\n"]}),"\n",(0,e.jsxs)(g.p,{children:["Currently, we are using a third-party ",(0,e.jsx)(g.code,{children:"shim"})," that is already signed by Microsoft, the downside is the Solus (vendor) certificate is not already embedded and trusted in the ",(0,e.jsx)(g.code,{children:"shim"})," executable, and as such, requires the user to enroll the Solus certificate manually on first boot."]}),"\n",(0,e.jsx)(g.p,{children:"We appreciate that having the enroll the certificate may be confusing to users and, the process to do so may not be self-explanatory. Especially, as Secure Boot is generally enabled by default for the majority of machines."}),"\n",(0,e.jsx)(g.p,{children:"However, it is also important to consider the following:"}),"\n",(0,e.jsxs)(g.ul,{children:["\n",(0,e.jsx)(g.li,{children:"Obtaining an EV certificate is an expensive investment."}),"\n",(0,e.jsx)(g.li,{children:"Enrolling the Solus certificate is only required once, and, only if Secure Boot is enabled."}),"\n"]}),"\n",(0,e.jsxs)(g.p,{children:["As such, we are not currently looking to our get our own ",(0,e.jsx)(g.code,{children:"shim"})," signed by Microsoft. However, thanks to our supporters on ",(0,e.jsx)(g.a,{href:"https://opencollective.com/getsolus",children:"OpenCollective"}),", it is indeed within our budget to obtain an EV certificate in the future which would unblock the additional requirements."]}),"\n",(0,e.jsx)(g.h2,{id:"useful-links-for-additional-reading",children:"Useful links for additional reading"}),"\n",(0,e.jsxs)(g.ul,{children:["\n",(0,e.jsx)(g.li,{children:(0,e.jsx)(g.a,{href:"https://learn.microsoft.com/windows-hardware/drivers/dashboard/file-signing-reqs",children:"https://learn.microsoft.com/windows-hardware/drivers/dashboard/file-signing-reqs"})}),"\n",(0,e.jsx)(g.li,{children:(0,e.jsx)(g.a,{href:"https://github.com/rhboot/shim-review/",children:"https://github.com/rhboot/shim-review/"})}),"\n",(0,e.jsx)(g.li,{children:(0,e.jsx)(g.a,{href:"https://github.com/rhboot/shim/",children:"https://github.com/rhboot/shim/"})}),"\n"]})]})}function s(A={}){const{wrapper:g}={...(0,o.a)(),...A.components};return g?(0,e.jsx)(g,{...A,children:(0,e.jsx)(a,{...A})}):a(A)}},95762:(A,g,C)=>{C.d(g,{Z:()=>e});const e="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAycAAAJBCAIAAADTEV0NAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAOiElEQVR4Xu3dW3bayAJAUXJXBqshMdz7oTSp6IHBxgeB9179IReiJGSMTgsHn04AAAAAAAAAAAAAAPDT/BqWz8MyAABfN12W/jeMAgDwXVQXAEBBdQEAFFQXAEBBdQEAFFQXAEBBdQEAFFQXAEDh93LgdDr7tFQAgC+Y/n426l8b1TXbXBsAgCuuXL3yDiMAQEF1AQAUVBcAQEF1AQAUVBcAQEF1AQAUVBcAQEF1AQAUVBcAQEF1AQAUVBcAQGH37zACPNzmnyebpo3x+U/B7o2fVjd9uD7A07nWBXQuDTRN//TQenzup73xy603rg9wBKoLeBoXooAfRXUBzyS8gJ9DdQHP4b0/4Kfx2/TAE+wl12V8cQ1sb3zPvesDBFzrAp7gegzt3bo3vufe9QG+leoCnmMzifb+4eHe+J571wcIqC4AgILqAp5pfTlq7zLV3viee9cH+G6qC3gaSQT8KP4NI9C5ZNait/bya298mk7n8z+3urIFHN+vYfnPy9X8srX5i64AAFyx6qi/S95hBAAoqC4AgILqAgAoqC4AgILqAgAoqC4AgILqAgAoqC4AgILqAgAoqC4AgILqAgAoqC4AgILqAgAoqC4AgILqAgAoqC4AgILqAgAoqC4AgILqAgAoqC4AgILqAgAoqC4AgILqAgAoqC4AgILqAgAo/F4OwFOdz6fT6TRN218+0Dzz7Jvm/45pP/SQx3WZ5PYZPnGXKzafBuPIh/aeOYvvy95qV4xH+HTnfb/PF59vmwf80xN+7vt1+8rwulzr4s2dz8vT5Dx4Op2m6c8L/bjC5vr3ujLDQ+bfc+Vx7dncn0+c/z5xlz2LU/745XpXN+2tNo+Pt9417enfI3zvfR9i8/u1Hnm4ze3uuffJcGXmu7YLx6e6+Okup8838x6Pa0yuGytnb4Vxqr11AL6Vdxh5c/eWx73r3+u757/X0fZnbKPP2eyqRb3NV1A2vzy4Z+3kT9sufBPVxctYnEfHk+t84hzHZ5uDV2yuv7ndxfjm4Dogbp//+uO6y+Z+zu6afHM/Z4ubRuuD8BCLab9pK2vzd+Q8FNvF3vHZHB93eHN581uzHhwn35xnfdMnrLc7Ds4+nHxc/8P9H0f2Bme3HDc4Du8w8hour6rzf+PIvLwYn22+8l5WWLx8n7bW39vu9cH18mVkYW/+y/J6E3v2Htd68vGmG+3t53jTt9rc83mw2YGLy6bHXdo7Pnvjey7rbK6/foyX1RbLj7We9t7HddpZ+fr+377dy/J6E3AornXxVtYv02vTf/9DfMvKC5+4S+Yrj+vTPtzilZu+aH68H+7A6FFn4st5fT7N3+6ulU/3rw8cnOrilTzqrPkQh9qZKx64nw+c6l4P6Y/LJA95IJfse+y078rBgZPq4rU85NT7EOMlliOfTh67n8c5/qfhoX3imtM3OcI+HNNjn4fwuvxeF8cyvi6Pr9S8qDmJbtefmO96mt37cF6FnztoqC4OZzwB7L30P+vkd+92713/VWSPa68GxuU+1D60d3z2xh/lK/OvD2zvK/sPL+HXsPznyf7cnzqYnVfvGS1ejtfn2vWTdvPWzcHZ5k2b2x3Hp61fYx9vXQ+O49fnv/1cuDn5OL7ezw/vMo5f38/R9f28xd5+bh6cxZeb+7O3/i0HduHG43D7+Lgbm0f+4sqte4dotJ5w7bz6uZsHL/bmH+91ff3Nw77e/3FwHN/b7jjnen4orZ6Bf5dUF8Cb86oOpdVP3N8l7zACvLPVCQB4Gv+GEeDd7L0NBzyX6gJ4NzILjsk7jAAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFD4vRwAeJ7zeTlSmqblCMADqS7gcPr6eW7tAT+EdxgBAAqqCwCgoLoAAAqqCwCgoLoAAAqqCwCgoLoAAAqqCwCg4FNSgSO4fC7q/HGl+cekLrfrU1OBx3OtCwCgoLoAAAreYQRe0vnfP504TdM4OH45LwM8nWtdwOu55NRsHFmsCXAcqgt4TzoMOBrVBQBQUF3AG3KhCzgg1QW8J8kFHI3qAt7T4h85Ajyd6gLe0OKDJACOQHUBABRUF/CeXO4CjkZ1AQAU/EUg4PVM03Q+n8frWK5sAcenuoCXtPnBEIvBzXUAnsU7jAAABdUFAFBQXQAABb/XBRzB4rfgn/VL8c/aLvAjuNYFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABdUFAFBQXQAABZ+SChzO2YeVAu9IdQEHMk3LEYC34R1GAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKPxeDvznfF6OAADwab+GZZ0FAPBY02XJO4wAAAXVBQBQUF0AAAXVBQBQUF0AAAXVBQBQUF0AAAXVBQAAAAAAANzu/9RxiIRrIM4UAAAAAElFTkSuQmCC"},48979:(A,g,C)=>{C.d(g,{Z:()=>e});const e="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAysAAAJFCAIAAABSvP+VAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAQEklEQVR4Xu3d227iyAJAUfpoPpZP4nPPgyPH7VsgwMbQa2k0gsIUhXPxlp1OTicAAAAAAAAAAADe2Z/5wJfLfAAAgLucx1v/m4wCAFBQYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAAtf/mA3+7+M2sAAB3OH//HtZvPxTYYPWZAADs2DmT5SokAEBNgQEA1BQYAEBNgQEA1BQYAEBNgQEA1BQYAEBNgQEA1BQYAEBNgQEA1BQYAEDtqr8LCbzW7C+LDX+qdRx80l9uHeYfJx/vrv6Zs5vG9xf87Pf18S4Xuw7egHNgcHRj+gz/TUf2XS4r9XO/8XXH9fw4vvXQqh83YMczPuLAMygw4C5bwbQ1DsDJVUj4YFkDbb3Q1vhNrjzhB/BeFBgc3fn8dT1xqJBli6z+4NRycDryqKzZ+ZGjnYeuN1vn7BLbML66zc5L7+yH6fzLCXd26XRwOj57iZ31D3d31jOOb61nuvGPOwF4OVch4Q2Mh9jZIXm0PAZfc/Tdmu1KW0/fWedNVnPkvPh5uPtNU2Y5+Xh39aHl4HSd07dw/fqH8a3tt9Yz3p3dBo5JgcF72Dls33qsXc7wO1uv+8DD/6PmWfWo/fAoR1sP8FSuQsI7Of99RfIXhhmG/99vZxk7D11v+U4fsuzTxn64dfJbtz9tP2V1Paft7YF3p8CAg1rNzYeE3aqhdYb5r+meW7cf3Lr+W7cH3oWrkHB0Q4Uc2cGXB3BACgy4y1Pza+cM0/HDdN+t63/29kDMVUg4uvFi3HTktNElo/HRy+JHqa704+vOFrD1itPNhtv769l6X1vrWY7/znSe8fbOUre231rPcnxn8tPt2w9mqwIO68984MvXF70vY+C9HOq71qEWA/QW3wS+b7kKCXyOxTe7F1g9AQYw4yok8N5mufPa/Dotrh6+fD3AMSkw4L0dMHEOuCTgaFyFBACoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgNp/8wH4OJfLfOR8no98kvH9PvttXi5Pf4mbTD/QwcKGlxtfaHp39ik3G5zeDdZ5WEf7/IGYc2B8vvG7/Pk8PxZ+pOaodrR9OAZN/CEeXmj6ctOViK0t2QcIDss5MODTHL91NBngHBh8uMvF+YbnsnuBX3AOjH/XeB5iPIKO5yRmx9Rfj2+Zbj+bZLme2fmSm06frD539Lv5p5OsPne0M8lp+/2OD41m61xuv+WmeaZ3f9wJ97hy8p31TN/XbHD5vsaHZoPT8dlL7Oy34e7OesbxrfVMN75yV8BHcg6Mf9d4PDj//fM641HhzvEdqxtvrefXZoe3X6xz1fj02e1b5996v1vzbG2/emO8fdM8M1vjU8MMw/+vd+v2g3E9yzc1DA53Vx9aDk73z2zPbD1lZhjf2n5rPePd2W341zgHxj9kdqyaWR3csbX91vhLHGoxjzV9a+fFWZnrLZ+yFRxbljP8aOiSK926nmc72nrgTSkw/iHXH/NOa4eZ4TA/HR8m3BrfsZz8SZZH+uyl7/SqdQ4fzTHpnmH8hPnx8+S0sZ5b13br9qftp6yu57S9PbBFgcG61aPjdHB6EN0aXzUcq4YNnnrcWj3S7yzsUN5lnb1bP39u3X5w6/6/dXvAz4EB1G7tIeDzKDD4wXAaaXpjZmv8CHaO9I9a9qPm2fLs+dl36/5/9vbwMRQYn2/8/j77Rr81PlbLeGyYXmq8fnzLdPudQhot59+3tc1ynq31X2O68q159vfD6Mf1zPbScpGrD/1inof48XXvNJ3/mpm3tp+OT22tf8ut2w+WK4F/zZ/5wJevr0hfHnA0z/6qfPb8U+VrscMHAp5k8cX1fcs5MHgniy/mB3v2/BzHeMoKeAn/FhKObnaYfHgePXv+LePrXnb/6ShPcv77t6j4EEBMgcHRPfvQ+Oz5t7zqdRn5EMALuQoJAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFD7bz7wK5fLfOR8no/c5HK5d4ZXme2Kg7+LcbUHXycAfJjHnAMbj9/n89ftZZNdb+e5l8veo/e7c/7hucNOuH8/BIQXALzEYwoMAIDrPeYqZObZ52yePT8AwCkosK2fi1odnw6OV/RmI9PBcZuth6aP/lhXW5Oszv8oq/vhUeP76589ZbA6DwDwWH/mA1++jsNXtstp48g9e/osCJbjq3enlg9NR1bnXz5lx3LjW6ea7YfT7vZbb/xR49fcXh0cXPN+AYAtiyPp960HnwMbD+SXt/3HjHeavuthv1/v1j126/ajxSfEuh83AAB+58EFxk2GU1DTULsn4O63vx4A4FEU2IvNkmt67vAl9bOzHgDgUfw2CgCA2qELbHZF7L1c87NWV77Brc22xn/t4RMCAKse828hl4ft8Smzh34cH4yPbv1c1Gye4e7y9ujHt3C6cf4tq5Ps2FrnY8eX659tvzV+zVsAAFYtyuH71mMK7Mg+4C0AAO9oESHftw59FfLXLq6mAQAH9pkFNl5QW7QnAMDrfexvo1BdAMBhfeY5MACAI1NgAAA1BQYAUFNgAAA1BQYAUFNgAAA1BQYAUFNgAAA1BQYAULvqd+L7G4sAAA/0Zz7wRXMBADzW999MdBUSAKCmwAAAagoMAKCmwAAAagoMAKCmwAAAagoMAKCmwAAAAAAAAAAAAAAAAAAAAAAAAOB1/g8woPo/FVU5nQAAAABJRU5ErkJggg=="},35529:(A,g,C)=>{C.d(g,{Z:()=>e});const e="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAykAAAJFCAIAAABWSS+oAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAQRElEQVR4Xu3d23LayAJAUXIqH8sn8bnnQRmNpoWwALMNylqVB9yI1iXB2iUR+3QCAAAAAAAAAAAAAACWfi0eXxaPAQB43nn4+n/D1wAAvI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDo/B4HTqeLn7EKAPCE8/gTVf91pb0mN14DAMBVX17Dcs8RAKCjvQAAOtoLAKCjvQAAOtoLAKCjvQAAOtoLAKCjvQAAOtoLAKCjvQAAOtoLAKCz+fscgTe0/jVhT/7q1eWET061x7S6eUXLL4ddGwaXXwbb+bYul7969+EYXPeCTzKfd8/nsU4eMKfM81PdZVrRcnXLLZFZW7K/IOClXPcCTqdPqBw1BhyD617AD3AJB/hrue4FB3Hj81Ln8/jBqRvummf55UuvS+2c/Mb2LPdrGFzv1/zUMLgcH1Zx47hNX97Ynnl8a3uWC+88FMDbct0LjmA+H09/liPT42H86oP58V3zDLbGl6YZ7q2He5efLCNmvfE39uvq8svjMxyZrZcMpvGt5be2Z/5yeAx8Ite94CMN9bDTcuHz6krMfuuXbKXGlvUMX5qKZKd7t+fV3m17gB+kveAjXa2QnzrBTxk3x9wrTJPvzK+r23Pvtt27/Gn7JVe357S9PHBs2guOY0+X/J2mypmOz57iuXf5yb3H/97lgWPweS/gM9xbQgDvSXvBAU235/gp9x7/Vy8PvBXtBZ9kPuMOp975mtB8Vh6uEq1P1VefemCeb/Hlep+0nH/PzFvLL8eXtrZ/y73LT9ZbAnyiX4vHf76XeGMDfMm3SuCq1TeH8duE614Ae62veAHcS3sB7DXcc3TRC3iAnzEBcAe9BTzJdS8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgI72AgDoaC8AgM7vcQB4J5fLOAL3Op/HEeAHaS/4AM6dPEa7wxtyzxEAoKO9AAA62gsAoKO9AAA62gsAoKO9AAA62gsAoKO9AAA62gsAoKO9AAA62gsAoOP3OQJ7LX854JO/YvJyeXaGbzHv0XdtzJvsF/DOXPcCdpky5Xz+0xbP/JLmG6+9XG49++2+t5PKLQc+l/YCvjaH1+R7kwXgr+KeI/CIF+XXi6YFeB/aC3jKcKNteUfyfB4/ULVceLiWNo8sB2/Ps348fznbGXNbq57dHr+9XwBL7jkCj5s7Y/qzHJker8fnKFk+nkcGW/Ns2dqeLw3Lb82zNT5/OTwGWNNeAAAd9xyBo9l5rQvgR2gv4Gjc8gPemXuOwCNcWwJ4jPYCvjZ8bv27wuvy4p+k+ur5t/zUeoGP8Gvx+M+3ivm/7QA/7q3ej8uemDdpiIxhfPjPgLP5VVcHl+Nb8yxnuDo+P3vb1vL3jk+u7tcPWh954NVW77vxHai94K15P/IM/36gt3rfje9A9xwBADraCwCgo70AADp+vhe8p/nzAdMHMcePC8A+w7+f//5PAeAnuO4FANDRXgAAHfcc4Qguw0+dOp1Op9P5u3+0wLyWYeat8bX9Sz5peUBeva6lJ3fwyZcDH8F1LziC+VR9Pp9fd9remnlrfG3/ks+YCmY+FFfD9EW2dvByuezZjK2XA0eiveCAnMJnL41RgAe45wjH9BHBMV+gGp84nMf28e85PvBX0V5wNJfLZT5bzyfv4YNEW+PzU7PXnfiHsLi63qvLPLBJ9+7vcrH9Kx2mmq1XuhycrOffv17gs7jnCIdy9Yx+uVzO5/O6Ztbj87PD+LcbwuIb1zu/cDnDPOcw//71bo3Phj1aWg9+ud4bswGfznUvOJTz4tLOfj9yjn/RSucjcGP+G08Ndh7ML9d429UXXh0EDsB1LziaTzlnr7Pm8o9h/KdMR/IVx3O+1nVjl68OAgfguhfwA6arU5fFR9OmwcUiB7fc2auHYj0IHIPrXnBMrpoAvCftBQf0EeE133cbn/jnOtA4eiB7dvDG8QE+mvaCI5jP0HtO6qf/Lr8cHz6HNI9Mtl61Nb62tcDWetfjX5oXWy5/dfB0bf7H7vEt55lGbq99a73LVwFH9WvxeP7ucDqdTg99/wG+y5934DNBcDyOxr1WR0zbwcutOmr8luW6F/AZVhkB8JH8P0fgfQ334IQXcADaC3hfYgs4Hu0F72n4XI6P6fAM/37gjfi8FwBAR3sBAHTcc4QjuPpjob79s1LzWoaZt8bX9i9528PzLA/Uva99xsMbPHny5cBbcd0LjmA+JZ/PLzw9b828Nb62f8nbHptn/qE708uvBuuLbG3w5bJrM7ZeDnwi7QUH5FT9pZdGKsAN7jnCMQmLj/DYX9Pqp2YDn0R7wdFcLv+eleeT9PCBoa3x+anZi07wt9e7XOnt7VnPc5d7j8Nysf0BNEw1W690OThZz79/vcB7cs8RDuXqmftyOZ3/+yGnrfH52WH8FdY1s17pnu3ZGh8Mc06ePw5b47N5qrX14JfrvTEb8Clc94JDOS8u4ezXn8sfW+P6VeuRLfORufGSG08Ndh7kL9d429UXXh0EPoj2gqP50HPz1ZqZgml9pepnTVv1WObetmd/p1UDn8s9R+DnLe+1DabB+alvz513c3t/rw4Cn0V7wTE5PQO8J+0FB3SY8BpuwB3env116Qs+nfaCI5jPxHtO3qf/Lr80n9fneZY3AbdetTW+trXAcr3Lttjanq15bri6kVcHT9vrvddynsnttW+t94H9Bd7Wr8XjP2/uZ77RAN/L+5Fn+PcDvdX7bnwHuu4FANDRXgAAHe0FANDRXgAAHe0FANDRXgAAHe0FANDRXgAAHe0FANDRXgAAHe0FANDRXgAAnd/jAPB+pt/MCsABaC94a+fzOALAR3PPEQCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCg83sc+MflMo4AAPCkX4vHagsA4Hudh6/dcwQA6GgvAICO9gIA6GgvAICO9gIA6GgvAICO9gIA6GgvAAAAAAAAAAAAAAAAAAAAgOP7P/7OB7w235xvAAAAAElFTkSuQmCC"},91370:(A,g,C)=>{C.d(g,{Z:()=>e});const e="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAyQAAAJBCAIAAAA4JuYOAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAX2ElEQVR4Xu3d4ZaiOrcFUPqO87A+ko97f1BfOk1IBGQpWnOOHudgjDsBFVcBVU4TAAAAAAAAwD/+TNM0TfdFKwAAz7nN//u/f1sBADiTsAUAECRsAQAECVsAAEHCFgBAkLAFABAkbAEABAlbAABB/9U37v64KQDAE24/f8r0r3/C1qztBADAWO+gldOIAABBwhYAQJCwBQAQJGwBAAQJWwAAQcIWAECQsAUAECRsAQAECVsAAEHCFgBAkLAFABC08t2IAFssvgVsy9eqlods6Tx2v28qshhxvrnlgQBncWQLOKKklvlfaRk7K+VsGWt21ogAhwlbwG/hsBbwFsIWAECQa7aAI2636X7/e+FUfbho77Vcvf6r7XXjriNVbedB/cUcNg4BsMqRLeCgkk5WA9D8r7T09Pr32svNxfIWdedefYDTCVvAcS9LKntz1ar0JAFWOY0IPOv27ynFaX+s2dv/gHaS00vGBRC2gPPtPQq1t/9Z3jUu8Ks4jQgcMR8l+iyvOeMJsCBsAUF7M1mv/972vc6qA9D6M03TNP3sY+Z9jePqwBaLdNK7YKt3jdTD/r32Wbl3vMtadKv3cr36beoaDwEwa3LUz5KwBdBlrwhs1+wxfpacRgRY1+w3AY7w24gAf/XOLQIcJmwB/CVdAadzGhEAIEjYAgAIErYAAIKELQCAIGELACBI2AIACBK2AACChC0AgCBhCwAgSNgCAAgStgAAgoQtAIAgYQsAIEjYAgAIErYAAIKELQCAIGELACBI2AIACBK2AACChC0AgCBhCwAgSNgCAAj6b9nAr3e/L1tut3/a55svduLo9/u+IhuH3tjtxXqz6rW3tve8gt5se+0DBx6yy97XYc+izlnTnuuUIvXNMsRs0Vjf3DKHvRPeuN32loUoR7bY6r37rLNGX3xObLFx6I3dcu73lbXrzarX3tre8wp6s+21D+x9yOr279nec6yts3faY3P9epSSouZ/dcsxux7Yrm/PrrKQJmyxouyn7LCAvZ6MX/B9nEZkabGLtMc85vWfN68ci9a3bv/tB5OAHmGL3dqLIRa744efOr3+vfaeXv/V9tVTIfXNoh732CfNlvqrfQarPO7fPimna4dYXa+B1f5lRRb1e+3lruLhuD2DOou7HupNsp1/Xbn3JM7G6zWoUzfW7bvqH7Y6mZ7V7Vw3rk5+sN3accfbYfCkr/av22E7pxE5ov7YKDu++V9p6en177X39Pr32svNxXKvf33XLotHDeqfaO8kD1jMf+969fqX5Y3tvTp7DeosnsEt2s69+Zebi+XBfFb16tTqOnvrz+aeq8UHNvbvbefVSQ7Wd7X/4t76rtX+ve3Ta4ddHNlit3o397xzq7UO1+99Emxx7FEMvGyTPvO8X8pZq3Cgzn3DLwxefDtfdmJ8KGGLc2z/ae92m+7//t5WvV/bXme2t3/PWXVm7YfNifXb4m+0d7329k+72nzSXrC+5Q1++FW6d5Kn9D93vwQLwhbn2LVjXezF6v3yrjrT/v49Z9WZOh82J9a/lL3rtbd/2tXmk3b99Z1jzTzPLRHnxP4n7pdgwTVb8Enmj4ctHyrwLqtRBn4zYYuTzT8RDjzsMNvYrej1P6t9l8GHzfP1r/lD9t712ts/7V3zOWvcvXX29r+a0+e/seDGbrDwZ5qmafp57cyvoWvuynmlem9SXg+lsU4Sq6ni4Uuo17/XPj2a0sb22WJF6pZx+9SUqh3YPrvqT1XNunh91+yZ9lUb5/9kncV2G8ywV2fqr9dqe6/O3udlGtZfrFdRHtIb9+Ggs0Wd1ZuLu2bj+osJP6wzGLent53rUm2dwXZb9F+dZ92+t/+iHVrNK/ZnSdiCS/DuA/h0zZ78Z8lpRHi/5v0JwPfw24jwHs5NAPwSwha8h3QF8Es4jQgAECRsAQAECVsAAEGu2Xq/xYXSU/NHX1zccwrbMyS9Ye//fvHR6cMt6p+rN9tee2t7zw/10c/viT5lnhzjyNZ1PXzj3f0t4z3evj3T9XvS4z7csButzrNtOTzcxvqHrdbvzbbX3tre8+JWt0/bcu76tvWvaTDP1e3GxxG2LqHsX87d0QAAb+c04vstAtb2vLW9J1ukt2e6fs+7xt0rPc9Pr//pbJ9jbLfvIGx9gHIMuX7XjRtn43dpXWFeLv17der2RWMp0t5VjOcz7ay/OueHQ0yPNl1bsHfXauNq/3Jvr3G2Wr9u7xn0H49bZtsuzMuzLfUfKvUHN1dbyvJiO7QPGWg7P6y/sDrhttq4yDPaIQbPS6tMeFGnXpHV5XbcVasbpJ1q21KWF/XHDyntq3Muy7PV+gu99e21l7uKxbjlIeM643n2Bm3rlLvqe8erzCs5jfgZ2rdl+y4q7675X2nZbu4/qNNrnG8u7hrU6Vnt3Kt/2GqduaU2GPfAPNv6ve3Ta+8Z9x+PW5bLf9v5D+rXD39SW6QMt1iuLeYz0D58S/3tnnz4FovtP3heVpU+of5j7fapt3m9XHtyfR/Wr/XWt9e+fT7jOuN5Lm6WlrZOXa0ekYtwZOsDHHvPbH9Ubx9xru3z+Q5nre/eOnv7H/b2Hfobh/4C199615zh9lm9Zr/KpxC2vsf8A039Dt+yX5gfVX4YKlb3FKuNPQfms6v+G504z7bU3u22t/8x7TwPm19vn+tS8z/xeTnLpbbPu/T2q/xawtZXqfdx8wfw4b1e+8B5rzG3b9yD7JrPgfpvce48VzfIru027e9/wOkFOYXnBT6Ca7aA15nj6fMh9V0+ff5ptg+sEra+x3xI43SHyx5+4O9UNtfe7ba3/5OeH+7YwZjnxx3bXv/Y/NO2zz/t2PZJzz9d/yyfMk/2ErYuoby76rfZ+C3XPqSc2Cpv12N7vV6dun3LSbRenZ7n62+0Op9S4WGp3jzHFdp72/m327mdZ2vcfzzuFr36bZ1xwXYtxvOc1Vu4Xt5re/2e9t4t89/bPlA2dbv9t8y/N2Jd55kt3I6+Zfu02783em99x/Nv6z+0qP9w5ov+D632782zN3qrng8X9Geapmn6eXLaZxo+hVfvATYaFOm3Q7p+8bKBaDUb/2fJkS2+QfP6psvPvvB9vK8vzpEtPtViz+J1u1296Ww3mPJvinT96SVD8FCTo36WhC0AgBM0OcppRACAPGELACBI2AIACPJ1Pd+j/VWU11x+V8ZND3cPfAvNwMvW611evD1/m/Tr53D9F19G3e6XpsC4va3Ra38j77vfyZGt71HewLfbz/Lqbu50r9lxvGZdaq9Zrxe4r/1OeNvy0GqdLxBar/Tr51j9eU1fuYto90sJvcq99in2vBer9dsWfglhC+A3iqafntePCFfgNCJsUg4JfJyz5nxWnat5zXp97uvndBfZCOlppOvzWYStX2Fx7HreC5TG2235SbC3/6zusGip28tj2/6r6iJb5tkzmH9dZ7XIoH/d3rPav665utxun9U6Y+Mii/UaaOvUjbOHdR5u54V60HYTFePt1j5wdRUW26etU+4qtqzCbDHuap3VPluGeH6eq/1D26FdwUX9Xnu5q9g+bqtXfDxuuffh0IMiZflhEb6J04hf6L72Raq328+/0tKa2/f2Lxb9e3XK8sP6s9Jtsdyrv13pPy5ST7u+OXhIbW//0mfRf2+dWZl23VIa6+WxttuB+ezqXNevn4LeuGV5+xDT2nr16vTGfaieXn1zb52e7fNsF8py278sb68/tujWq99rPzzuqrlC2zIet57hWNunlF0s80s4svW1tr+Z9+6z9vYf2z7PsxyY/4mT3Ftqb/93+ZR5vsVFNs6uuLBw4CELZfRdnh8XrkDY+kLzTm3+Ea3o7ebmzu1+cG//no3dXmZ1/g8nudiYc8tG5emoWw7bPm7agfU6cfInltrl2LjPvH6OuWb9h68Q+FbC1m+xdze3t3/PWXVy5o+NeZ6rHyElVdTrsmu96s5tqV0OPzBh13o93M67DAaKOjDu86+fAz69PnwZ12x9p7M+0gDOZb/ELyRs/TrzD9nb7e3fc7U6uwzC68P5POxwzFllD9c5/MBzvWsau8Z95vXzpKvV39X5i+3dbny6P9M0TdPPcz4/944Pf6jy1q337Kt7+UWHe3UN04n9e+11464X22IF65ZF+6ot86/bF8Ot9p+Nx536/cfjzjdrvToDW6odrrN3PqvrO9CrP24fPF/tuIP1GtSZbZz89jqL9mnzELNendX2uvJq/17nqdO/p12pqb9Nbkdf/71H7WpfnU9ZLsbrO1utPyt3banDx6lfOdM0TdPPkrAFXN0v3DX9wlW+Pk8KDzUvkp8lpxGBK7r/4vMszf6at/nNr0NO5LcRgSu6/funJb4+eRw4V8UL/LbXISHCFnBRv+qD7Vet7Gfx1PA8pxEBAIKELQCAIGELACBI2AIACBK2AACChC0AgCBhCwAgSNgCAAgStgAAgoQtAIAgYQsAIEjYAgAIErYAAIKELQCAIGELACBI2AIACBK2AACChC0AgCBhCwAgSNgCAAgStgAAgoQtAIAgYQsAIEjYAgAIErYAAIKELQCAIGELACBI2AIACBK2AACChC0AgCBhCwAgSNgCAAgStgAAgoQtAIAgYQsAIEjYAgAIErYAAIKELQCAIGELACBI2AIACBK2AACChC0AgCBhCwAgSNgCAAgStgAAgoQtAIAgYQsAIEjYAgAIErYAAIKELQCAIGELACBI2AIACBK2AACChC0AgCBhCwAgSNgCAAgStgAAgoQtAIAgYQsAIEjYAgAIErYAAIKELQCAIGELACBI2AIACBK2AACChC0AgCBhCwAgSNgCAAgStgAAgoQtAIAgYQsAIEjYAgAIErYAAIKELQCAIGELACBI2AIACBK2AACChC0AgCBhCwAgSNgCAAgStgAAgoQtAIAgYQsAIEjYAgAIErYAAIKELQCAIGELACBI2AIACBK2AACChC0AgCBhCwAgSNgCAAgStgAAgoQtAIAgYQsAIEjYAgAIErYAAIKELQCAIGELACBI2AIACBK2AACChC0AgCBhCwAgSNgCAAgStgAAgoQtAIAgYQsAIEjYAgAIErYAAIKELQCAIGELACBI2AIACBK2AACChC0AgCBhCwAgSNgCAAgStgAAgoQtAIAgYQsAIEjYAgAIErYAAIKELQCAIGELACDov2UDcG33+7IFbrdlC3AdwhZ8JB+uzIRvuD6nEQEAgoQtAIAgYQsAIEjYAgAIErYAAIKELQCAIGELACBI2AIACBK2AACChC0AgCBhCwAgyHcjAu+0+tV+t9uO9tWviZy7rd4F8GKObAHvVPLQ7fZPNhq09+4CuCZhC7iQXnjqta9yWAu4FGELuJZeSOq1A1ycsAVcRXs9VjG4a8FhLeBqXCAPXEIvTvXaAT6FI1vAJfSORe26Ct5hLeCChC3gKgYhaXAXwMUJW8CXcFgLuCZhC7gWF2kBX0bYAi7kcNJyWAu4LL+NCLxTSVeLmFW31xGq7iZgAR9B2ALeqReVzmoHeDunEQEAgoQtAIAgYQsAIEjYAgAIErYAAIKELQCAIH/6AXid8leynv9LDSeWmvzJLiDJkS3gdU5MMyeWAogStoDfzmEtIErYAgAIcs0W8GaLb0UsR5jq9sVhp9Xvq16tU45a9a7xclgLSHNkC3inknXmf6Wl11iWe5lp8ZCyvFoK4AUc2QI+yWrS2q4X0QByhC3gog4cgjrwEIA0YQu4osVJwI12HaNyWAt4DddsAQAECVvAF7rfHxwPc1gLeBlhC3idEoDKQjlRWOLR3FK3r/524aJUr047IsCLuWYLeJ3VI0mrjdO/7b3l2mr7auPUbwc4nSNbAABBwhYAQJCwBQAQ5Jot+BTlIqP5Sm/XHDFbvB78IgBcjiNbAABBwhYAQJDTiMBf9//9NarbZ/5phN78e+0AL+DIFvDXp2eR3vx77QAvIGwBAAQJWwAAQa7Zgq9VLlSalVNpvfZVc+e5T71cbhbjOlOnf6m5uKyq117uKh6Ou0s9XGJ9e+2D9QU+nSNb8J3Kh/estPTa99pbp9e/LG9s79XJOTZur3+vvSwv2oEv4MgW/Arz53dOXb9NCc+P/nyF1nie7b3P2Dv/vf2BKxO24Dvdbrf7/V4nhnM/vwf1BwOdm2CeNJjnvHbzf+v2s+Z/Vh3gIwhb8LUWx2nm9FDd/6wD9R92uLiz5n9WHeAjuGYL4ARz3Fy2Aghb8K3Sn/1P1n/y4W+3d/69/r124Jv8maZp+t+3xM9veYe34ZJ+3pnzZ/OW81CLT/HykF779O9dbf9yDdN816DOql7/tmYZaNFz1qszdeY/aG/VE4iu76J9+wwX6hnODdWdwEvN7+PqHfyzJGzBp1iJJtC8HoQteJsmR/0sOY0IABAkbAEABAlbAABB/s4WfIrFtTguzaHm9QDX5cgWAECQsAUAECRsAQAECVsAAEHCFgBAkLAFABAkbAEABAlbAABB/qgpfKT5604BuD5hCz5M9X3yAHwApxEBAIKELQCAIGELACBI2AIACBK2AACChC0AgCBhCwAgSNgCAAgStgAAgoQtAIAgYQsAIEjYAgAIErYAAIKELQCAIGELACBI2AIACBK2AACChC0AgCBhCwAgSNgCAAgStgAAgoQtAIAgYQsAIEjYAgAIErYAAIKELQCAIGELACBI2AIACBK2AACChC0AgCBhCwAgSNgCAAgStgAAgoQtAIAgYQsAIEjYAgAIErYAAIKELQCAIGELACBI2AIACBK2AACChC0AgCBhCwAgSNgCAAgStgAAgoQtAIAgYQsAIEjYAgAIErYAAIKELQCAIGELACBI2AIACBK2AACChC0AgCBhCwAgSNgCAAgStgAAgoQtAIAgYQsAIEjYAgAIErYAAIKELQCAIGELACBI2AIACBK2AACChC0AgCBhCwAgSNgCAAgStgAAgoQtAIAgYQsAIEjYAgAIErYAAIKELQCAIGELACBI2AIACBK2AACChC0AgCBhCwAgSNgCAAgStgAAgoQtAIAgYQsAIEjYAgAIErYAAIKELQCAIGELACBI2AIACBK2AACChC0AgCBhCwAgSNgCAAgStgAAgoQtAIAgYQsAIEjYAgAIErYAAIKELQCAIGELACBI2AIACBK2AACChC0AgCBhCwAgSNgCAAgStgAAgoQtAIAgYQsAIEjYAgAIErYAAIKELQCAIGELACBI2AIACBK2AACChC0AgCBhCwAgSNgCAAgStgAAgoQtAIAgYQsAIEjYAgAIErYAAIKELQCAIGELACBI2AIACBK2AACChC0AgCBhCwAgSNgCAAgStgAAgoQtAIAgYQsAIEjYAgAIErYAAIKELQCAIGELACBI2AIACBK2AACChC0AgCBhCwAgSNgCAAgStgAAgoQtAIAgYQsAIEjYAgAIErYAAIKELQCAIGELACBI2AIACBK2AACChC0AgCBhCwAgSNgCAAgStgAAgoQtAIAgYQsAIEjYAgAIErYAAIKELQCAIGELACBI2AIACBK2AACChC0AgCBhCwAgSNgCAAgStgAAgoQtAIAgYQsAIEjYAgAIErYAAIKELQCAIGELACBI2AIACBK2AACChC0AgCBhCwAgSNgCAAgStgAAgoQtAIAgYQsAIEjYAgAIErYAAIKELQCAIGELACBI2AIACBK2AACChC0AgCBhCwAgSNgCAAgStgAAgoQtAIAgYQsAIEjYAgAIErYAAIKELQCAIGELACBI2AIACBK2AACChC0AgCBhCwAgSNgCAAgStgAAgoQtAIAgYQsAIEjYAgAIErYAAIKELQCAIGELACBI2AIACBK2AACChC0AgCBhCwAgSNgCAAgStgAAgoQtAIAgYQsAIEjYAgAIErYAAIKELQCAIGELACBI2AIACBK2AACChC0AgCBhCwAgSNgCAAgStgAAgoQtAIAgYQsAIEjYAgAIErYAAIKELQCAIGELACBI2AIACBK2AACChC0AgCBhCwAgSNgCAAgStgAAgoQtAIAgYQsAIEjYAgAIErYAAIKELQCAIGELACBI2AIACBK2AACC/ls2TNP9vmwBAOCYP9M0TZN4BQBwrtv8P6cRAQCChC0AgCBhCwAgSNgCAAgStgAAgoQtAIAgYQsAIEjYAgAAAAAAAAAAAADgK/w/O572RyDxlzcAAAAASUVORK5CYII="},51754:(A,g,C)=>{C.d(g,{Z:()=>e});const e="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAzAAAAJKCAIAAAB8pDdfAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAM3ElEQVR4Xu3d0VLiygJAUeaWH5tP4nPvA8eYaQiiMu4krFXzgE1sMloFu7ojnE4AAAAAAAAAAAAAAEDizzjw4TwOAADwI9M4cDqdTqf/jQMAAPwuQQYAEBNkAAAxQQYAEBNkAAAxQQYAEBNkAAAxQQYAEHsbB66cvUEsAMAPTLffDvbD50F28elEAAAMHlzYsmUJABATZAAAMUEGABATZAAAMUEGABATZAAAMUEGABATZAAAMUEGABATZAAAMUEGABB79LMsgQO4+ZFqT/+k2vlRhpnXxu84n/86+Bsz3PSseQaXae/MeeeA4Vdz8xjgwKyQwQuZX+an6R++5K/NvDa+5jofvzrDmmfNs3QntmaXe6//X/P3zr+X62OAYxNk8Lru1wMAv0aQwUvTZKfT6Xz+6YrUI8tjFzcXwJYLlo9PBRyJa8jgRS0vz5ojYLi4am18vmv23IBYTn4zUJ54PsP8N+e5ecz9h7g5D8AaK2Twim7mwiXRrhPkeny+dxh/lnna4fbSU85nrbS+Os/g2/MM5wO8Ditk8IqmxaLX47YTCk88kydOteYXHgLYO0EGL+p4lfCNxDy9r/8NIz906d3lPMf7aQPPJciAg/hG9MzltPzeb8xzbTnJ9UOseeQY4JBcQwYv7eerQZzeQ+qRH6arxICbBBm8rkcCYguG7b9Pfen4Oy31pXmWfv8bgb0TZPBC5hf7B1/4l8cvzREzzzPs0A037o+vWabSnWw6fXY+1746z/X4tZtnO8zzyLkBr+nPOPDhv2cdzyAAS54VgcddPWPcfu6wQgbwBVfPrQBP4K8sAT4xbFOqMeDpBBnAJxQY8K/ZsgQAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAIDY2zgA8OvO53FkC6ZpHAH4RwQZsBXbCaBtBiJwYLYsAQBiggwAICbIAABiggwAICbIAABiggwAICbIAABiggwAICbIAABiggwAICbIAABiggzYjfP5r0+ZHL4E2C9BBuyMCAOOR5AB+6PJgIMRZAAAsbdxAGCHhjWzafrrS4CNs0IG7Mwltoar+y/jl3/DvQDbJ8iA/bEABhyMIAMAiAkyYJcskgFHIsgAAGKCDAAg5m0vgN2bpvFjlGxoAvsiyIDdGDJr+aUCA3bNliUAQEyQAQDEBBkAQMw1ZEBovvLrckH+di4EG87HJzEB/5YVMgCAmCADAIgJMmA3zufz+f3dxpa3AfZOkAEAxAQZAEBMkAEAxLztBXAEw/Vk0/tHKa2NA2yKFTJgNy45NV/OP1TX9G4eWRsH2BpBBuzJHGHzjcfNWQawNbYsgYO4Xv2apml4dwxBBmyTIAMO4mZsLQcvcXbzMICWLUsAgJggA45m3qYc9isBNsuWJbAnc2AtNx/XrhVbGwfYGkEG7MlaUX11HGBTbFkCAMQEGQBATJABAMRcQwaEhj+B3NpfRG7tfIDDskIGABATZAAAMUEGABATZAAAMUEGABATZAAAMUEGABATZAAAMW8MC2zF2fuwAq9KkAG9aRpHAF6KLUsAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgNjbOLDifB5HAAB4ij/jwAcJBgDwXNM4cDqdbFkCAOQEGQBATJABAMQEGQBATJABAMQEGQBATJABAMQEGQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDr+D+VT1dp1SpSzAAAAABJRU5ErkJggg=="},23506:(A,g,C)=>{C.d(g,{Z:()=>e});const e=C.p+"assets/images/uefi-choosing-boot-device-62df6cbf7123313a863cc3e6199c5eae.png"},61857:(A,g,C)=>{C.d(g,{Z:()=>e});const e="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAoUAAAHMCAIAAAAs9EW6AAAACXBIWXMAAA7EAAAOxAGVKw4bAAAXpklEQVR4Xu3da5ajOLYGUOKunmt5SORo8/5QpUqplwGDD47Ye9XqxkIcZIz1BTjCuSwAAADAV7G8FssAwHs8lmX5v7oRAHg7eQwA8eQxAMSTxwAQTx4DQDx5DADx5DEAxJPHABDvf3XDsvz+/U/dBACc6uvrV/mwk8dJ1Q8AOEX3utf9agCIJ48BIJ48BoB48hgA4sljAIgnjwEgnjwGgHjyGADiyWMAiCePASCePAaAeMPvr4Yo1Te73vOr1Nuvn31xnL9//7O9Qrn37Vt1nVjqFLuOA3wnro+5lxQPX1+/0n+55W5yZpwyzl3blocoPzxmUur3739eqXzMZI8h44F3ksfwSXKCpocnXkrmVAZCuF8Nn+2iEL2o7GF3Gw+cTh5zL19fv9KdyTT/lrNwdbsyr+q2l9eR3eW81bzOAaM63faysbr23WtSv/t8J7qdy8aq7OHj3G1sj0NbpGxMnu4Xbu6rWF7T/7VvBnizdjKtTstuHozaR31G/dtNuuZ5UPZ5Wn/L7pJRz0nB+XJyYsGnm2RtY9uSTYpXD0fLcB/NmflYfH7MPX31fsNoi7zhRnv7tw4PNVx+4i8egS1eP87w7blfzX19/X3verk+866uz+Igw4A85pNcfY11dX3am8lA4n4195IuiOtWxhwu+B7kMR9pFNuj9r3OqrPX0/1WV5bzzp/r6XGA78fvV3M71UQ8+vB4e3v6HLpcqHomozpdbVq0+93YnpSjLdu7us9iVL98R7fLVeeku2peP7XsOs5l/+7atrFsn4+nfb5wH82Z+VgWeQzsZIqAFzVvIn/vBGzz2w1kuJg8Bp7Lt3+bn+uBc/h7J2ATGQyXcn0MAPHkMQDEk8cAEE8eA0A8eQwA8eQxAMSTxwAQTx4DQDx5DADxht/P5btqAeBtOnnsW/EA4M3crwaAePIYAOLJYwCIJ48BIJ48BoB48hgA4sljAIgnjwEg3n/fB7KuRTMA8BaPx7K4PgaAO5DHABBPHgNAPHkMAPHkMQDEk8cAEE8eA0A8eQwA8eQxAMSTxwAQTx4DQDx5DADx5DEAxJPHABBPHgNAPHkMAPHkMQDEk8cAEE8eA0A8eQwA8eQxAMT7X90AwKkej/+W1/W/5UCPx9aRlINfbjP+SjXI5eVxbj8+J3J9DHChFBXr+u/83ibH+20fQzn4+4y/lbPzlHG+su0r5DHAVXKeJe+/5OKDyGOA9xHJjPj8GODdyuvm7nK+ZTpvz6uyef+yc3Xt3pUqPP58mFp27u531N59juXyxud1wKhOt33v8TnXV15a37lbgB9gNKd3M2m+qrt8YNv24VM5pUYVno5n42C6/as+I3mQyXxfo/buwzd4PB6L62OA2xpFwqj9IjnbHjt/63hX52V//9bhod6BPAb4bNWl4UXSZWWZc1fv9+r6dyOPAT5b1IXg1fu9uv7d+P1qgPf5rGu+dEHMe8hjgKvkjzOTq7Ntb3zu7T8yqjNq3+usOnu9eb9+vxrgWuWc3n74mj6XLRdyezZqX5qMr+qXPxB0Cz6d+Of1D7Rveb7LuE5X1Xnp7Xdje7L9+Jwi/X61PAaASCmP3a8GgHjyGADiyWMAiHf+3x+n++BwLr/fAHxvro8BIJ48BoB459+vTsq7ize5g72u68aRVLdGN271Zu392xfHedbx2V4n2dt/o27N9qA9let0t52v7TqwCd/YY+c/e7C3/5vlt113kPO1XQc2+VyXXB+niebxeKSp5w7zzvYxlIO/z/hbeVo/ZZzbt50fn+11kr39t8uV13V9ZS/zbedruw5swnfV+6FxZm//95uf3fO1XQc2+Vzn53Ger9PDvACBpCBwc+fncUskcwciGbizqz4/bpXXzd3lPF3O2/OqbN6/7Fxdu3elCuufDzXLzt39jtq7z7Fc3vi8DhjV6bafdXwmdcpV3cZJ/7L9sPZo5/Gn5XJV1Zi1/UeqAXefPj9H9Zqn06FsTMv5NClXdRsn/cv2pOo80a2TN89ru/tt67f9R7r7TXa9Xbp1JuO/oau+v7qdd8o5tzv/tqu6ywe2bR8+1c7Ro4Jb2kd9Rv3bTbryIJP5vkbt3YdP5V1Xm8zrtGuftlTj36UtW7aXO5ocyeph23/SuXqYl9sifFfpHMwv9fxhpV37tOVph5FJndFytnHbdu38YV5ui7S21Gm73UeaE953fbxROYeWRu0XyTNmnj032tV52d+/dXiorwjZ6TE3GaEMZolIgvfv8RQXBefpBc91uzze6D3z2uPve7PL9fu9uv652uPTdeBJHdhkYmO1+bPY5cRSfLR1XR5//xu6T0/GA+fOgU26dtXZ1XnuxFIf7VPzOGq+u3q/V9d/v5SFe68O338cyhG+vvftz5RvrzwXUjZPzo506qUO20/DScFdttc5Ns6R7fv93t7x+9WfNTelC766lT8+9/i8nrLwcdJPAHyE8/O4uhK6eu7eGw97+4+M6oza9zqrzl5n7XdvnVH/UfteUWH8eDyids0dbIzDjd2yUf9R+15n1dkrar83cf7vV7d3JvN8lBsfxa/7dnsugwpJNdSq/ujGY7n33Ng1r3+gfcvzXcZ1uqrOS2+/G9uT149P0tbpHofUUq2tWsr29vnOdZ9FuffRcnrYbc9r8/L8iczbl/1Pik9UvezVa57X5vayJS2Xm0z6V+17jeqUY2iX08Nue16blauejr95uzx5at063T3eUJocrspjONdZ5yfA3aTcPP9+NQCwlzwGgHjyGADinf/3xz7nA4C9XB8DQDx5DADxzr9fneU/Nn2x/Szb64/+fvRW2r8re3Gc24/PZ6n+RLj8w+K8NrfnbnkZTpHPr3NPrnnZ+dquA5twlquuj9Ps1mZG25KM2s+yvX6eoJPccjc5M04Z5yvbfoR8lEaedoBXjE6ux2vfSDUqm8zXdh3YhLNcksflJci3n+gB4HXn53EZxiKZuynPyfJchRDr6pKUf134+XGlTOXRBXQ1P1ZBXvVfe18ynBvb/mWf3NJKFR5/PkwtO3fHM2rvjq1crsaZV2XzcU6M6nTb9x4fYK+/33n/ye3le67qnFeV7e17tFuqa1R/aVbxZudfH4+s65on+i3LORtyYxUnWZV2Vf+yZrk8kTfvZlVVf9Q+kvu8WCfL4yy3auuM2vPDavkbq55+vRpOld7H3ROtbcyd03+5ZdSYTVaVJvUn4+Q9rro+3pglr7h0F3nKfuz8reNdnZf9/VuHh/pj5SR20LjaiyF3eMO9Xhwnp7gqj/Mc92JqjjZPk2n633rdedop+9LdLdfXB+5sXZfH379xnTPyxLnhxFKc6Ko8Psvdrl2uHs/V9ckXx+l/XSJzN+XJmLI5hXRe9XqaOt/v6X2fH3+KNEHXrQA/WHXVzhXC8ngUe3vb97q6zqh9r7Pq7BW1X2B5e+y9eXfMfeWls27Zpdm8+sC1LJ6n+2qPbXsVDKk9F3wUnx+Xq6r+WVt/ZFTncHs5zrLzaITJfJxV56W3343tyfbj81mqA16eMHnt/HWBVzTv1CWfX+WqbmO3fZ3evi5P3mP1M++Dt0nzz/l5HKiaagHg/lJ4hd2vBgCy75PH+X5jeyMXAG7u7n/vtJ3b1AB8ru9zfQwAn0seA0A8eQwA8S75/Hj+d6430f7a14vjfGz72sXR37+Wfbq+698Hv9/8/Nz4Oj511uu1sY7zCj7d+dfHeSJIcsvd5NnnlHHu3Tb137WV6fIVj8ejPOaj83PXKzJ31uu1q85151U+gMBFzs9juJucwfUKNmt/dgHOJY/DmNre46eF8XXnlUiGS53/+fH6979hV86D1Ts5r+q2l9NodzlvNa9zwKhOt71sLMd5QLd+Uq3qNh7e7zfWviKj83PyOparqsbueZjXVs6qs9fkPOnWn/Svjh5woqu+v7qdXPK8Uz3c0j7qM+rfbtLVnXdGdUbt3YcTZcGy7KRgt8+kP8nkmOSXvlo72WRp1o5eju7rVTqrTqnsXG6yZV/dxrZ/1m0EDkvvqavuV6/rWr69t8sbbrS3f+vwUF+0cdjmvmPmx+26F32+36eqgR2os3GTw/WXP1udfujghzv/fnVpbe5uXf0evrr+3fy057tde+61tvRZzjvIZ9V5g/lQ09r5QQP2ujaPW1e/h6+ufzc/7fnusjFu58rsmafU3Fl13mNyxIQxXOT8+9VpBqxbIUKbf87PVwhjuM75ebzRaFocte91Vp29ftp+76+N5C0cz6Q8DmlBGMNFLvn96moiy5UPt6cbj+VC1TMZ1elqZ9t2vxvbk3K0ZXulmtTKh6P6o6GO+tPacpyT9nXsnoe5fbRcqtrLOmXn0UiyyUtcDqB6OHq+o/rd/lV94ETp/XVJHgMAG6U8DrtfDQBk8hgA4sljAIgnjwEgnjwGgHjyGADinf99maM/ajzdY/P3IHb/nvJuTj9uG49P3q8/MwUIdP71cZ7K13Xtfr3AKbbXzAFz6Xhed+5x275t3i8Agc7PYz6Xi2OAKPIYAOKd//nxxOhz3F3tZeOW67n17390r+zcrT9qL/fVXc5bzescMKrTbd97fLK286R+NYZ212UfAJ665Puru/PyaB7f2959+FQe0qjC0/22wdP2GfVvN+nKg0zm+xq1dx/O5f2W/UcF97anhwCMpAnz8uvjvTPy3v4b5Wx7bPut42xX52V//9bhob7uxD2eVQfgh7gwj9M1UzXFp58CSrlb2ZKX2/6vaId0bv3W1fVP1B6cZc/4568jAHMX5nFXd46uAqCMhG7/E316/avtGv/kdQRg7trfr07T8fZrrCtUF21M3OH1AviZrs3jiRyTG/Ny1G3Uvteozqh9r7Pq7HXWfp/WedoBgInzf786T8rlxVb3wivvcW97Uu1oYlTncPta/Dpx2Xk0wmQ+zjbM2v1ubE82Hp+qW35e5aqyQ9u+POsPwESaPM/PY36UMr8BOCBNpGH3q/kGhDHAWd79+9V8OjelAa4gj9lHAANcwf1qAIgnjwEgnjwGgHjyGADiyWMAiCePASCePAaAePIYAOLJYwCIJ48BIJ48BoB48hgA4sljAIgnjwEgnjwGgHjyGADiyWMAiCePASCePAaAePIYAOLJYwCIJ48BIJ48BoB48hgA4sljAIgnjwEgnjwGgHjyGADiyWMAiCePASCePAaAePIYAOLJYwCIJ48BIJ48BoB48hgA4sljAIgnjwEgnjwGgHjyGADiyWMAiCePASCePAaAePIYAOLJYwCIJ48BIJ48BoB48hgA4sljAIgnjwEgnjwGgHjyGADiyWMAiCePASCePAaAePIYAOLJYwCIJ48BIJ48BoB48hgA4sljAIgnjwEgnjwGgHjyGADiyWMAiCePASCePAaAePIYAOLJYwCIJ48BIJ48BoB48hgA4sljAIgnjwEgnjwGgHjyGADiyWMAiCePASCePAaAePIYAOLJYwCIJ48BIJ48BoB48hgA4sljAIgnjwEgnjwGgHjyGADiyWMAiCePASCePAaAePIYAOLJYwCIJ48BIJ48BoB48hgA4sljAIgnjwEgnjwGgHjyGADiyWMAiCePASCePAaAePIYAOLJYwCIJ48BIJ48BoB48hgA4sljAIgnjwEgnjwGgHjyGADiyWMAiCePASCePAaAePIYAOLJYwCIJ48BIJ48BoB48hgA4sljAIgnjwEgnjwGgHjyGADiyWMAiCePASCePAaAePIYAOLJYwCIJ48BIJ48BoB48hgA4sljAIgnjwEgnjwGgHjyGADiyWMAiCePASCePAaAePIYAOLJYwCIJ48BIJ48BoB48hgA4sljAIgnjwEgnjwGgHjyGADiyWMAiCePASCePAaAePIYAOLJYwCIJ48BIJ48BoB48hgA4sljAIgnjwEgnjwGgHjyGADiyWMAiCePASCePAaAePIYAOLJYwCIJ48BIJ48BoB48hgA4sljAIgnjwEgnjwGgHjyGADiyWMAiCePASCePAaAePIYAOLJYwCIJ48BIJ48BoB48hgA4sljAIgnjwEgnjwGgHjyGADiyWMAiCePASCePAaAePIYAOLJYwCIJ48BIJ48BoB48hgA4sljAIgnjwEgnjwGgHjyGADiyWMAiCePASCePAaAePIYAOLJYwCIJ48BIJ48BoB48hgA4sljAIgnjwEgnjwGgHjyGADiyWMAiPdVLK/FMgDwHo/F9TEA3IE8BoB48hgA4sljAIgnjwEgnjwGgHjyGADiyWMAiPe/umFZfv/+p24CAE719fWrfNjJ46TqBwCconvd6341AMSTxwAQTx4DQDx5DADx5DEAxJPHABBPHgNAPHkMAPGG3wdSeNQNAMBua91QcH0MAPHkMQDE23K/Gs63rp37No/HY2lWpcaRts68/2Hruu6qvLd/ZddBKJUbbt+qkou0FV58XlHa82T5+9mlDtVTmxyH1uGXDBLXx8TIs9Xj8ehOi7m9O5NmbZ15/2P21tzbv1U+r2VzwfLo5YcH5L1XDhcM154npe7zKhO626G097yFljzmFtopkuzY/N4NHpLyyHQPbBnGx44/7CWPuQvhwTvl880PLtyEz4+5hfWCTyWrC5pcf1d72VheM41M+nfrH7C3Ttm/Gkz5HOd13vC83un08+3xeKzrmsuWxfce/088npxCHhOsnX3SvFY2Lk23pDvrjea4NFfube9Wmxj1H9XPHTaa1Emr0kJZudt5r6uf19vko7RR9XS6m6cOj+LUPXz8P+54ciJ5TLAqS3JLkts3Tkkbu2V7+99ZyoO0UK97l8Bdb9Seb7vMn2AuLkQ5QB5zC69PXimNqnmwnXZzt7IlL7f972nXOHd13mt+PG9r+yC398yqU/HA8T+wCd+APOYzdGeop3Nlt0MVwHnerFbd2fZxpuN2OBi2mBzP76d7DCfP99jxnxTkG5PHfIYtM1R1XQKnG51aZe7CMf7eifs6cY5LOV0uzI26jdpH9vbvShW6x+GU+gfk/UYN4GrlFe3k+B+W68+Lf9fDS9dXsfzvq/779z/Lsnx9/frT3j9R4BXlLFNNRpNVrdy5nEC7twdzqb3tSbWjp9r+8/qVSefRqtFxK0fSPT5Ve7mqbExefF5RtjyjrH1qW57U6Dg8Pc7z8WzZNZ/j3xe3m7PyGADeY5az7lcDQDx5DADx5DEAxJPHABBPHgNAPHkMAPFO+H6u7p/QTdorW/4g7wpn7Xf+F4rztVs8rbD6Oip4pvqj3uTEN87p9b2vf6BXr4/zWdg9HbdLm79Y5Fzrum4Zz/w9M1l7Sv0tFYD8Pno8HvP31DGH63fngbaFn+ClPK5OGucQ8BF2ReYBV9fnW3rpfnU651IMv37+3S3OX39Gc1fXByaufgNurL+xGz/BS3l8tSqh2/ivfhTo9j8mlyqLlI3tTyHdTUa6nXfVL59s2xkYWaf/SPbr80lZvztHtbtoW/Ly9v3y6d6Xx9XJneRTLSVQzqGlORfXda3eRZW9/ZPuqJYiEbOyfrWvLG21Zb+v15/3BLom77v0ML2/5u2V8g1YdSjfs1XNvPa/3s9mAL639+Xx03PraYcrlO+3v9fsdvX4r64PP0EbgaXRuyy3jzpkbf0cyWm5XAWl9+Xxe0zeaQBL7wq1nDdej8zXK/AzXZLH5cmdfyrsJuXpJ+7pBYHvrZw0UjZPppED81g5B86L88NdksdV+qbzz1kI3MexaNy+ybH6/GQv/f3xRD4RTz8jU8H0k2Z+2Modfoif9nzhFfnNsvGNs7FbVtZf/r4m2VtnV38+2lex/O+r/vv3P8uyfH39+tPeD7yzlOdr9bA6EcvorbYqG7NRVCeT/eaHSbcxt+fG8mF3k3b8VfuB+m0HoFW9uZL5PDNq7xrV704I3V1U9b2vv6l/X9Zuzsbn8SdqQ/FcV9cHIMIsZ6+6X/39rOva/RH4LFfXB+DOXB/vMLm5dIqr6wMQapazl/x+9Xd1dUZeXR+A29qSx26iAsC1fH4MAPHkMQDEk8cAEE8eA0A8eQwA8eQxAMSTxwAQTx4DQLzh94Gkb/MCAN6gk8fFN2oCAO/gfjUAxJPHABBPHgNAPHkMAPHkMQDEk8cAEE8eA0A8eQwAAAAAwB38PyZrkDdbrqQ1AAAAAElFTkSuQmCC"},11151:(A,g,C)=>{C.d(g,{Z:()=>t,a:()=>n});var e=C(67294);const o={},I=e.createContext(o);function n(A){const g=e.useContext(I);return e.useMemo((function(){return"function"==typeof A?A(g):{...g,...A}}),[g,A])}function t(A){let g;return g=A.disableParentContext?"function"==typeof A.components?A.components(o):A.components||o:n(A.components),e.createElement(I.Provider,{value:g},A.children)}}}]); \ No newline at end of file diff --git a/assets/js/f6faa2b4.27a4bd74.js b/assets/js/f6faa2b4.27a4bd74.js new file mode 100644 index 000000000..0761e6b88 --- /dev/null +++ b/assets/js/f6faa2b4.27a4bd74.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([["1878"],{51472:function(e,n,t){t.r(n),t.d(n,{metadata:()=>o,contentTitle:()=>d,default:()=>u,assets:()=>l,toc:()=>a,frontMatter:()=>r});var o=JSON.parse('{"id":"user/hardware/peripherals/midi-keyboard","title":"MIDI Keyboards","description":"These instructions will guide you through how to set up and use a USB-connected MIDI keyboard on Solus. This will easily let you use the keyboard to play music with a wide set of instruments.","source":"@site/docs/user/hardware/peripherals/midi-keyboard.md","sourceDirName":"user/hardware/peripherals","slug":"/user/hardware/peripherals/midi-keyboard","permalink":"/docs/user/hardware/peripherals/midi-keyboard","draft":false,"unlisted":false,"editUrl":"https://github.com/getsolus/help-center-docs/tree/master/docs/user/hardware/peripherals/midi-keyboard.md","tags":[],"version":"current","lastUpdatedAt":1733757592000,"frontMatter":{"title":"MIDI Keyboards","summary":"Guide for installing and configuring MIDI keyboards on Solus"},"sidebar":"userSidebar","previous":{"title":"Mice and Touchpads","permalink":"/docs/user/hardware/peripherals/mice-and-touchpads"},"next":{"title":"Printers and Scanners","permalink":"/docs/user/hardware/peripherals/printers-and-scanners"}}'),s=t("85893"),i=t("50065");let r={title:"MIDI Keyboards",summary:"Guide for installing and configuring MIDI keyboards on Solus"},d="MIDI Keyboards",l={},a=[{value:"Installing required software",id:"installing-required-software",level:2},{value:"Setting up the soundfont in qsynth",id:"setting-up-the-soundfont-in-qsynth",level:2},{value:"Connecting the keyboard",id:"connecting-the-keyboard",level:2},{value:"Keyboard compatibility",id:"keyboard-compatibility",level:2},{value:"M-audio",id:"m-audio",level:3}];function c(e){let n={code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",header:"header",img:"img",li:"li",ol:"ol",p:"p",pre:"pre",ul:"ul",...(0,i.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.header,{children:(0,s.jsx)(n.h1,{id:"midi-keyboards",children:"MIDI Keyboards"})}),"\n",(0,s.jsx)(n.p,{children:"These instructions will guide you through how to set up and use a USB-connected MIDI keyboard on Solus. This will easily let you use the keyboard to play music with a wide set of instruments."}),"\n",(0,s.jsx)(n.h2,{id:"installing-required-software",children:"Installing required software"}),"\n",(0,s.jsx)(n.p,{children:"We will need to install three packages in order to use the keyboard:"}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"qsynth"})," - A frontend for ",(0,s.jsx)(n.code,{children:"fluidsynth"})]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"qjackctl"})," - A controller for the JACK audio server"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"fluid-soundfont"})," - An open source soundfont to use with ",(0,s.jsx)(n.code,{children:"fluidsynth"})]}),"\n"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"sudo eopkg it qsynth qjackctl fluid-soundfont\n"})}),"\n",(0,s.jsx)(n.h2,{id:"setting-up-the-soundfont-in-qsynth",children:"Setting up the soundfont in qsynth"}),"\n",(0,s.jsxs)(n.p,{children:["In order to use the soundfont, we need to open up ",(0,s.jsx)(n.code,{children:"qsynth"})," and set the soundfont. For the purposes of this article, it would be ",(0,s.jsx)(n.code,{children:"FluidR3.sf2"}),", however any other soundfont should work fine too. You set the soundfont by clicking on ",(0,s.jsx)(n.code,{children:"Setup..."})," and navigating to ",(0,s.jsx)(n.code,{children:"Soundfonts"}),". There you just need click ",(0,s.jsx)(n.code,{children:"Open..."})," and navigate to the soundfont of your liking. The soundfont that we will be using will be placed in ",(0,s.jsx)(n.code,{children:"/usr/share/sounds/sf2/"})," by default."]}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.img,{alt:"QSynth SoundFont",src:t(917).Z+"",width:"1039",height:"517"})}),"\n",(0,s.jsx)(n.h2,{id:"connecting-the-keyboard",children:"Connecting the keyboard"}),"\n",(0,s.jsxs)(n.p,{children:["At this stage you need to first verify that the keyboard is plugged in and turned on. Now we just need to open up ",(0,s.jsx)(n.code,{children:"qjackctl"})," to connect the keyboard on a software level. In ",(0,s.jsx)(n.code,{children:"qjackctl"})," you press on ",(0,s.jsx)(n.code,{children:"Graph"})," and drag the keyboard's output to the input called ",(0,s.jsx)(n.code,{children:"FLUID Synth"})," (Your keyboard name will probably differ from the on in the image below). This step will need to be done every time you disconnect or turn off you keyboard."]}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.img,{alt:"QJackCtl Connect",src:t(94433).Z+"",width:"717",height:"629"})}),"\n",(0,s.jsxs)(n.p,{children:["You should now be ready to play on the keyboard using ",(0,s.jsx)(n.code,{children:"qsynth"}),"."]}),"\n",(0,s.jsx)(n.h2,{id:"keyboard-compatibility",children:"Keyboard compatibility"}),"\n",(0,s.jsx)(n.p,{children:"The following keyboards have been tested and/or suggested to function correctly by our users."}),"\n",(0,s.jsxs)(n.p,{children:["This list should not suggest that ",(0,s.jsx)(n.em,{children:"only"})," such devices listed below are compatible with Solus, as there may be devices not listed below that are in fact compatible."]}),"\n",(0,s.jsx)(n.h3,{id:"m-audio",children:"M-audio"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"KeyRig 49"}),"\n"]})]})}function u(e={}){let{wrapper:n}={...(0,i.a)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(c,{...e})}):c(e)}},94433:function(e,n,t){t.d(n,{Z:function(){return o}});let o=t.p+"assets/images/qjackctl-connect-ec819e2ca49b8af3c5a395ebad0a2bba.jpg"},917:function(e,n,t){t.d(n,{Z:function(){return o}});let o=t.p+"assets/images/qsynth-soundfont-3bfc213f843495358dedf524b6ed7fc6.jpg"},50065:function(e,n,t){t.d(n,{Z:function(){return d},a:function(){return r}});var o=t(67294);let s={},i=o.createContext(s);function r(e){let n=o.useContext(i);return o.useMemo(function(){return"function"==typeof e?e(n):{...n,...e}},[n,e])}function d(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:r(e.components),o.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/f6faa2b4.d52872e4.js b/assets/js/f6faa2b4.d52872e4.js deleted file mode 100644 index 3c5139b99..000000000 --- a/assets/js/f6faa2b4.d52872e4.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[8143],{40396:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>a,contentTitle:()=>r,default:()=>h,frontMatter:()=>i,metadata:()=>d,toc:()=>l});var o=t(85893),s=t(11151);const i={title:"MIDI Keyboards",summary:"Guide for installing and configuring MIDI keyboards on Solus"},r="MIDI Keyboards",d={id:"user/hardware/peripherals/midi-keyboard",title:"MIDI Keyboards",description:"These instructions will guide you through how to set up and use a USB-connected MIDI keyboard on Solus. This will easily let you use the keyboard to play music with a wide set of instruments.",source:"@site/docs/user/hardware/peripherals/midi-keyboard.md",sourceDirName:"user/hardware/peripherals",slug:"/user/hardware/peripherals/midi-keyboard",permalink:"/docs/user/hardware/peripherals/midi-keyboard",draft:!1,unlisted:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/hardware/peripherals/midi-keyboard.md",tags:[],version:"current",lastUpdatedAt:1732716912e3,frontMatter:{title:"MIDI Keyboards",summary:"Guide for installing and configuring MIDI keyboards on Solus"},sidebar:"userSidebar",previous:{title:"Mice and Touchpads",permalink:"/docs/user/hardware/peripherals/mice-and-touchpads"},next:{title:"Printers and Scanners",permalink:"/docs/user/hardware/peripherals/printers-and-scanners"}},a={},l=[{value:"Installing required software",id:"installing-required-software",level:2},{value:"Setting up the soundfont in qsynth",id:"setting-up-the-soundfont-in-qsynth",level:2},{value:"Connecting the keyboard",id:"connecting-the-keyboard",level:2},{value:"Keyboard compatibility",id:"keyboard-compatibility",level:2},{value:"M-audio",id:"m-audio",level:3}];function c(e){const n={code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",header:"header",img:"img",li:"li",ol:"ol",p:"p",pre:"pre",ul:"ul",...(0,s.a)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(n.header,{children:(0,o.jsx)(n.h1,{id:"midi-keyboards",children:"MIDI Keyboards"})}),"\n",(0,o.jsx)(n.p,{children:"These instructions will guide you through how to set up and use a USB-connected MIDI keyboard on Solus. This will easily let you use the keyboard to play music with a wide set of instruments."}),"\n",(0,o.jsx)(n.h2,{id:"installing-required-software",children:"Installing required software"}),"\n",(0,o.jsx)(n.p,{children:"We will need to install three packages in order to use the keyboard:"}),"\n",(0,o.jsxs)(n.ol,{children:["\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.code,{children:"qsynth"})," - A frontend for ",(0,o.jsx)(n.code,{children:"fluidsynth"})]}),"\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.code,{children:"qjackctl"})," - A controller for the JACK audio server"]}),"\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.code,{children:"fluid-soundfont"})," - An open source soundfont to use with ",(0,o.jsx)(n.code,{children:"fluidsynth"})]}),"\n"]}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-bash",children:"sudo eopkg it qsynth qjackctl fluid-soundfont\n"})}),"\n",(0,o.jsx)(n.h2,{id:"setting-up-the-soundfont-in-qsynth",children:"Setting up the soundfont in qsynth"}),"\n",(0,o.jsxs)(n.p,{children:["In order to use the soundfont, we need to open up ",(0,o.jsx)(n.code,{children:"qsynth"})," and set the soundfont. For the purposes of this article, it would be ",(0,o.jsx)(n.code,{children:"FluidR3.sf2"}),", however any other soundfont should work fine too. You set the soundfont by clicking on ",(0,o.jsx)(n.code,{children:"Setup..."})," and navigating to ",(0,o.jsx)(n.code,{children:"Soundfonts"}),". There you just need click ",(0,o.jsx)(n.code,{children:"Open..."})," and navigate to the soundfont of your liking. The soundfont that we will be using will be placed in ",(0,o.jsx)(n.code,{children:"/usr/share/sounds/sf2/"})," by default."]}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.img,{alt:"QSynth SoundFont",src:t(3815).Z+"",width:"1039",height:"517"})}),"\n",(0,o.jsx)(n.h2,{id:"connecting-the-keyboard",children:"Connecting the keyboard"}),"\n",(0,o.jsxs)(n.p,{children:["At this stage you need to first verify that the keyboard is plugged in and turned on. Now we just need to open up ",(0,o.jsx)(n.code,{children:"qjackctl"})," to connect the keyboard on a software level. In ",(0,o.jsx)(n.code,{children:"qjackctl"})," you press on ",(0,o.jsx)(n.code,{children:"Graph"})," and drag the keyboard's output to the input called ",(0,o.jsx)(n.code,{children:"FLUID Synth"})," (Your keyboard name will probably differ from the on in the image below). This step will need to be done every time you disconnect or turn off you keyboard."]}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.img,{alt:"QJackCtl Connect",src:t(68950).Z+"",width:"717",height:"629"})}),"\n",(0,o.jsxs)(n.p,{children:["You should now be ready to play on the keyboard using ",(0,o.jsx)(n.code,{children:"qsynth"}),"."]}),"\n",(0,o.jsx)(n.h2,{id:"keyboard-compatibility",children:"Keyboard compatibility"}),"\n",(0,o.jsx)(n.p,{children:"The following keyboards have been tested and/or suggested to function correctly by our users."}),"\n",(0,o.jsxs)(n.p,{children:["This list should not suggest that ",(0,o.jsx)(n.em,{children:"only"})," such devices listed below are compatible with Solus, as there may be devices not listed below that are in fact compatible."]}),"\n",(0,o.jsx)(n.h3,{id:"m-audio",children:"M-audio"}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsx)(n.li,{children:"KeyRig 49"}),"\n"]})]})}function h(e={}){const{wrapper:n}={...(0,s.a)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(c,{...e})}):c(e)}},68950:(e,n,t)=>{t.d(n,{Z:()=>o});const o=t.p+"assets/images/qjackctl-connect-ec819e2ca49b8af3c5a395ebad0a2bba.jpg"},3815:(e,n,t)=>{t.d(n,{Z:()=>o});const o=t.p+"assets/images/qsynth-soundfont-3bfc213f843495358dedf524b6ed7fc6.jpg"},11151:(e,n,t)=>{t.d(n,{Z:()=>d,a:()=>r});var o=t(67294);const s={},i=o.createContext(s);function r(e){const n=o.useContext(i);return o.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function d(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:r(e.components),o.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/f81c1134.0ddf9775.js b/assets/js/f81c1134.0ddf9775.js new file mode 100644 index 000000000..328e263b1 --- /dev/null +++ b/assets/js/f81c1134.0ddf9775.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([["5524"],{5865:function(e){e.exports=JSON.parse('{"archive":{"blogPosts":[{"id":"clean-clean-clean","metadata":{"permalink":"/blog/clean-clean-clean","source":"@site/devlog/2024-11-21-clean-cleanl-clean.md","title":"Clean, clean, clean!","description":"Hello everyone! Alfi here, member of Solus Cleanup Crew. It\'s been more than a year since I started contributing to Solus and I want to talk about it. About what I did, what we did, what we accomplished so far, and what we want to do next.","date":"2024-11-21T00:00:00.000Z","tags":[{"inline":true,"label":"housekeeping","permalink":"/blog/tags/housekeeping"},{"inline":true,"label":"cleanup","permalink":"/blog/tags/cleanup"},{"inline":true,"label":"devlog","permalink":"/blog/tags/devlog"},{"inline":true,"label":"solus","permalink":"/blog/tags/solus"}],"readingTime":5.585,"hasTruncateMarker":true,"authors":[{"name":"Muhammad Alfi Syahrin","title":"Solus Staff","page":{"permalink":"/blog/authors/alfi"},"socials":{"github":"https://github.com/malfisya"},"imageURL":"https://avatars.githubusercontent.com/u/101771435","key":"alfi"}],"frontMatter":{"title":"Clean, clean, clean!","slug":"clean-clean-clean","authors":"alfi","tags":["housekeeping","cleanup","devlog","solus"],"hide_table_of_contents":false},"unlisted":false,"nextItem":{"title":"Intro to Optimizing Packages on Solus","permalink":"/blog/solus-optimizing-packages"}},"content":"Hello everyone! Alfi here, member of Solus Cleanup Crew. It\'s been more than a year since I started contributing to Solus and I want to talk about it. About what I did, what we did, what we accomplished so far, and what we want to do next.\\n\\n\x3c!-- truncate --\x3e\\n\\n## A bit of background\\n\\nI started contributing in October 2023, when Solus participated in [Hacktoberfest](https://getsol.us/2023/10/01/solus-and-hacktoberfest-2023/). Hacktoberfest is a month-long event that encourage people to contribute to open source project in exchange for some digital merchandise. Finally, an excuse to contribute to something I use every day. Although, as an accountant, all of this is new experience to me. It was confusing at first, but I persisted. Finally, I got the hang of it and I managed to submit around 100 pull request during the month of the event. I was very excited and motivated. During the month, a few people joined the event and contributed to Solus, but then November came and most of the contribution slowed down. I was the only one left that continued doing the beginner tasks, mostly adding homepage to packages.\\n\\nAt the start of January 2024, Jakob Gezelius ([androidnisse](https://github.com/androidnisse)) comes in and starts contributing to homepage task too. Worried that we would stepped on each other\'s feet, we started a private chat to organize the tasks between ourselves. Until May, the two of us had been chipping away at the homepage task which at this point left 650 packages without a homepage. Then we had more contributors joining. I decided to make a group chat to accommodate all the people joining. It was called \\"Solus Homepage Team\\" at the time. More contributors and staff members joined the room, then it was renamed as \\"Solus Cleanup Crew\\" and moved under the official Solus matrix space.\\n\\n## What is it?\\n\\nSolus cleanup crew is a group of community contributors as as well staff members with the goal of bringing the Solus package repository up to current standard. It is a subset of the packaging room on our matrix channel. We organize the work on all the cleanup related tasks.\\n\\n## Why bother?\\n\\nSolus has been updating their tooling and infrastructure since its resurrection. While most of the tooling changes can be accomplished by staff members alone, there are things that they cannot do. While many consider Solus repository as small, it still contains more than 6000 packages. Some packages have never even gotten an update since Solus was first created! We want to get rid of all its cruft before we can migrate to a better tooling. That\'s where the community contributor can come in and help.\\n\\nFor me personally, it is a chance to learn something new and fill my time with more purpose. Sometimes, I feel like a slob scrolling through things, opening the same three apps over and over or sleeping midday. Technically speaking, doing packaging is still scrolling through things, still opening the same three apps over and over, and I still get my midday nap, but now it is with purpose. I love that what I do can be enjoyed by other people. It is mostly invisible and not even noticed by people, but the chance of it helping people gives me so much joy. Why bother? Because I love it.\\n\\n## What we accomplished\\n\\nWe create a few repository wide task that can done with little reading of our packaging guide. The keen-eyed of you may have already seen these tasks. It is always attached at the end of every Sync Updates since July. These are the tasks we did:\\n|No. | Task | Date Started | Start count | Current count|\\n|----|-------------| ------| ------------|--------------|\\n|1.| [Adding homepage key to package.yml](https://github.com/getsolus/packages/issues/411)|30-09-2023|2300|8\\n|2.| [Adding AppStream metainfo to all font packages](https://github.com/getsolus/packages/issues/449)|06-10-2023| 38 | Done \uD83C\uDF89|\\n|3.| [Adding AppStream metainfo to all graphical applications](https://github.com/getsolus/packages/issues/1389)|22-01-2024|316|198|\\n|4.| [Applying new cargo macros](https://github.com/getsolus/packages/issues/3111)|27-06-2024|37| Done \uD83C\uDF89|\\n|5.| [Changing all packages with homepages pointing to wiki.gnome.org](https://github.com/getsolus/packages/issues/4116)|20-10-2024|87|62|\\n|6.| [Adding monitoring.yml](https://github.com/getsolus/packages/issues/4121)|21-10-2024|3070|2937|\\n|7.| [Tagging packages that do not build](https://github.com/getsolus/packages/issues?q=is%3Aopen+is%3Aissue+label%3A%22Packaging+Problem%22)|Ongoing| N/A| 13\\n|8.| [Tagging packages that should be deprecated](https://github.com/getsolus/packages/issues?q=is%3Aopen+is%3Aissue+label%3A%22Package%3A+Removal+Request%22)|Ongoing| N/A| 25\\n\\nAs you can see from the table above, we just completed two tasks and we are close to completing homepage task. Packages that do not build also are also getting solved one by one. Right now, there are 12 people in Solus Cleanup Crew Matrix room, 6 of them are new contributors. We also create a new AppStream metainfo documentation, clean up our issue templates, implement a better tagging system for organizing issues and much more. Solus Cleanup Crew is also becoming a place where we can onboard new contributors and recruit new staff. I thought we accomplished a lot and I am happy with it.\\n\\n## What next?\\n\\nWe want to focus on adding appstream metainfo for remaining 200 packages, in line with the goal of 4.7 ISO. It will not be easy nor quick, but we will try our best. We want Solus users to have the best experience possible when we finally say goodbye to `solus-sc` and switch to modern software center (Gnome Software and KDE Discover). We want you to be able to install all graphical application from software center and have all the relevant information (Legible screenshot, Hi-Res Icon, good description, etc).\\n\\nWe also want to add more [monitoring.yml](https://help.getsol.us/docs/packaging/monitoring.yml) files to packages, so we can utilize our proof-of-concept [\\"Package Update Monitor\\"](https://shared.getsol.us/justin/updates/) created by [Justin Zobel](https://github.com/Justinzobel). I, myself and [Joey Riches](https://github.com/joebonrichie) will explore the possibility of curating our own \\"Editor\'s Choice\\" and \\"Featured Apps\\" in Gnome Software, made possible by [`gnome-app-list`](https://gitlab.gnome.org/GNOME/gnome-app-list). I think the road ahead is very exciting for us and hopefully for you too!\\n\\n## Want to help?\\n\\nWe are always eager for people to join and spend their time contributing to Solus. There are many ways you can [contribute](https://help.getsol.us/docs/user/contributing/getting-involved), but for me it is packaging. For me, packaging can be relaxing, sometimes frustrating, but always gives me joy at the end. If you are interested to dip your toe on packaging and want to help us, here are the simple steps:\\n\\n1. Join the Solus Packaging Room on Matrix\\n2. Read and practice our [packaging documentation](https://help.getsol.us/docs/packaging/)\\n3. Submit your first Pull Request. We recommend doing the wiki gnome task or monitoring task\\n4. Follow along the review process until your PR gets merged\\n5. Continue on contributing and you might get invited to Solus Cleanup Crew\\n\\n## Closing thoughts\\n\\nI want to thank all the contributors that made all of this possible. It was such a wonderful effort from everyone and we will strive to keep that up. Let me know if you are interested in a follow-up blog about the detail of doing packaging for Solus. _Terima kasih dan sampai jumpa_!"},{"id":"solus-optimizing-packages","metadata":{"permalink":"/blog/solus-optimizing-packages","source":"@site/devlog/2024-02-09-Intro-to-optimizing-packages-on-solus.md","title":"Intro to Optimizing Packages on Solus","description":"Explore how to employ advanced compiler techniques such as PGO, BOLT & Glibc HWCaps to squeeze extra performance from packages using libwebp as a test vehicle","date":"2024-02-09T00:00:00.000Z","tags":[{"inline":true,"label":"pgo","permalink":"/blog/tags/pgo"},{"inline":true,"label":"lto","permalink":"/blog/tags/lto"},{"inline":true,"label":"solus","permalink":"/blog/tags/solus"},{"inline":true,"label":"packaging","permalink":"/blog/tags/packaging"},{"inline":true,"label":"optimization","permalink":"/blog/tags/optimization"},{"inline":true,"label":"3","permalink":"/blog/tags/3"},{"inline":true,"label":"clang","permalink":"/blog/tags/clang"},{"inline":true,"label":"gnu","permalink":"/blog/tags/gnu"},{"inline":true,"label":"llvm","permalink":"/blog/tags/llvm"},{"inline":true,"label":"glibc","permalink":"/blog/tags/glibc"},{"inline":true,"label":"hwcaps","permalink":"/blog/tags/hwcaps"},{"inline":true,"label":"x86_64-v3","permalink":"/blog/tags/x-86-64-v-3"}],"readingTime":22.32,"hasTruncateMarker":true,"authors":[{"name":"Joey Riches","title":"Solus Staff","page":{"permalink":"/blog/authors/joey"},"socials":{"github":"https://github.com/joebonrichie"},"imageURL":"https://avatars.githubusercontent.com/u/5338090","key":"joey"}],"frontMatter":{"title":"Intro to Optimizing Packages on Solus","description":"Explore how to employ advanced compiler techniques such as PGO, BOLT & Glibc HWCaps to squeeze extra performance from packages using libwebp as a test vehicle","slug":"solus-optimizing-packages","authors":"joey","tags":["pgo","lto","solus","packaging","optimization","3","clang","gnu","llvm","glibc","hwcaps","x86_64-v3"],"hide_table_of_contents":false},"unlisted":false,"prevItem":{"title":"Clean, clean, clean!","permalink":"/blog/clean-clean-clean"},"nextItem":{"title":"Don\'t call me MATE, pal!","permalink":"/blog/don\'t-call-me-mate-pal"}},"content":"We\'ll explore how to build packages with advanced compiler techniques in order to squeeze more performance out of the box for packages in Solus. We\'ll be using the story of how `libwebp` was optimized for and how it led to an unexpected side quest.\\n\\n\x3c!-- truncate --\x3e\\n\x3c!-- cspell:disable-next-line --\x3e\\n\\n# Cual es la causa\\n\\nLinux distributions have a lot of control over how a source-based package gets compiled and shipped to users as part of a binary repository. Aggressive and advanced compiler optimization techniques, as well as other methods can be used to provide greater out of the box performance for end users. This can greatly benefit users running on older hardware to provide a snappier end-user experience; reducing time waiting on a heavy workload to finish; or even improved battery life; amongst other improvements.\\n\\nPart of the problem is, a packager\'s time is limited. So how, as a distribution, do you choose to try provide faster compatible packages for an end user. A historic approach is to simply change the default compiler flags for _all_ packages, such as enabling [LTO](https://en.wikipedia.org/wiki/Interprocedural_optimization) by default. Whilst this approach can work well, at Solus the philosophy is slightly different where a packager can trivially enable several advanced compiler optimization techniques such as [PGO](https://en.wikipedia.org/wiki/Profile-guided_optimization) without too much faffing around on a _targeted_ package.\\n\\nThe benefits of such an approach are:\\n\\n- Can target the performance of a specific package to benefit _all_ users\\n- A compiler optimization may improve one package, but may not apply globally to all packages.\\n\\nThe downsides are such:\\n\\n- Requires additional packager time to benchmark and experiment with different optimization strategies.\\n- Requires the packager to _choose_ and invest time into improving performance of a package.\\n- Requires the packager to find an appropriate benchmark to test the package against.\\n- Experimenting with compiler optimizations may not bear fruit: no meaningful improvement in performance, or there may be some other bottleneck.\\n\\n# Optimization Techniques Available\\n\\n- speed:\\n - As simple as it gets really, build a package with `-O3` instead of `-O2` as well as any other flags deemed worthy to be included as part of the `speed` flags. The main drawback of this is that `-O3` is not guaranteed to produce faster results than building with `-O2` and typically will produce bigger binaries. The days of `-O3` outright breaking your program in weird unexpected ways is largely behind us.\\n- LTO:\\n - Compared to some other distributions `-flto` is not yet enabled by default on Solus. LTO is almost guaranteed to provide a %1 or slightly larger performance improvement as well as a smaller binary at the cost of increased compiling times and memory usage during build. When combined with other optimization techniques such as PGO the LTO optimization can really stretch its legs and provide even greater uplift!\\n- Clang:\\n - Not strictly an optimization, but, building a package with `clang` instead of `gcc` and `ld.ldd` to link instead of the infamous `ld.bfd` may provide a faster package out of the box. You\'ll have to be careful of subtle ABI differences if building with `clang`. If in doubt, and, `clang` is the obvious choice, perform safety rebuilds on all reverse dependencies of the package.\\n- PGO:\\n - Profile guided optimization. Build once with instrumentation in order to collect profile data when ran. Run the program using a representative workload in order to collect profiling data. Build the program again with the profiling data provided in order to build an optimized variant.\\n- BOLT:\\n - Binary optimization and layout tool. You can think of this as \\"post-link PGO\\" where you instrument a binary with `bolt` to collect profiling data. Run that binary. Then finally reorganize the binary layout using the collected profile data. This generally works better on large statically linked binaries but smaller binaries or libraries such as found in a typical package can benefit too. This optimization is still quite new.\\n\\nRegardless, that\'s enough word spaghetti, let\'s look at the process to actually optimize a package.\\n\\n# Optimizing a Package\\n\\nRight, to begin with we\'ll have to start on choosing an actual package to benchmark and optimize. I\'ve heard the `.webp` file format is becoming increasingly common on the web, slowly replacing `.png` and `.jpg` file formats due to the strong backing of Google (for better or for worst). An improvement in decoding time for `.webp` files would benefit any user using a web browser casually browsing the web.\\n\\nLet\'s have a look at the `package.yml` build recipe for `libwebp`.\\n\\n\x3c!-- prettier-ignore --\x3e\\n```yaml\\nname : libwebp\\nversion : 1.3.2\\nrelease : 25\\nsource :\\n - https://github.com/webmproject/libwebp/archive/refs/tags/v1.3.2.tar.gz : c2c2f521fa468e3c5949ab698c2da410f5dce1c5e99f5ad9e70e0e8446b86505\\nhomepage : https://developers.google.com/speed/webp/\\nlicense : BSD-3-Clause\\ncomponent : multimedia.codecs\\nsummary : A new image format for the web\\ndescription: |\\n WebP is a new image format that provides lossless and lossy compression for images on the web. WebP lossless images are 26% smaller in size compared to PNGs. WebP lossy images are 25-34% smaller in size compared to JPEG images at equivalent SSIM index. WebP supports lossless transparency (also known as alpha channel) with just 22% additional bytes. Transparency is also supported with lossy compression and typically provides 3x smaller file sizes compared to PNG when lossy compression is acceptable for the red/green/blue color channels.\\nemul32 : yes\\npatterns :\\n - devel : /usr/share/man\\nbuilddeps :\\n - pkgconfig32(glu)\\n - pkgconfig32(glut)\\n - pkgconfig32(libpng)\\n - pkgconfig32(libtiff-4)\\n - pkgconfig32(libturbojpeg)\\n - pkgconfig32(zlib)\\n - giflib-devel\\nsetup : |\\n %reconfigure --disable-static --enable-everything\\nbuild : |\\n %make\\ninstall : |\\n %make_install\\n```\\n\\nOkay, looks to be a quite simple affair. A simple configure, make, make install as well as `emul32` being enabled specifying the -32bit packages are also provided from this recipe. Next step is to look for a repeatable and easy way to benchmark it. We\'ll begin by looking at the `pspec_x86_64.xml` file which lists all the files produced from the `package.yml` recipe as well as some metadata.\\n\\n```xml\\n <Name>libwebp</Name>\\n <Summary xml:lang=\\"en\\">A new image format for the web</Summary>\\n <Description xml:lang=\\"en\\">WebP is a new image format that provides lossless and lossy compression for images on the web. WebP lossless images are 26% smaller in size compared to PNGs. WebP lossy images are 25-34% smaller in size compared to JPEG images at equivalent SSIM index. WebP supports lossless transparency (also known as alpha channel) with just 22% additional bytes. Transparency is also supported with lossy compression and typically provides 3x smaller file sizes compared to PNG when lossy compression is acceptable for the red/green/blue color channels.\\n</Description>\\n <PartOf>multimedia.codecs</PartOf>\\n <Files>\\n <Path fileType=\\"executable\\">/usr/bin/cwebp</Path>\\n <Path fileType=\\"executable\\">/usr/bin/dwebp</Path>\\n <Path fileType=\\"executable\\">/usr/bin/gif2webp</Path>\\n <Path fileType=\\"executable\\">/usr/bin/img2webp</Path>\\n <Path fileType=\\"executable\\">/usr/bin/vwebp</Path>\\n <Path fileType=\\"executable\\">/usr/bin/webpinfo</Path>\\n <Path fileType=\\"executable\\">/usr/bin/webpmux</Path>\\n```\\n\\nPerfect, we have `dwebp` and `cwebp` binaries available in the main package, which from a guess can be used to decode and encode `.webp` files. Let\'s try it out.\\n\\n```\\n$ dwebp -h\\nUsage: dwebp in_file [options] [-o out_file]\\n\\nDecodes the WebP image file to PNG format [Default].\\nNote: Animated WebP files are not supported.\\n$ cwebp -h\\nUsage:\\n\\n cwebp [options] -q quality input.png -o output.webp\\n```\\n\\nAwesome, these binaries do exactly what we need to benchmark `libwebp`, but, we are also indirectly testing `libpng` as well for this benchmark, we\'ll have to keep an eye out for that.\\n\\nOne extra step we have to do is ensure these binaries are actually linking against their own library, as upstream developers can have a habit of making sure their binaries don\'t link against their own libraries and end up being self-contained. Run `ldd` to verify.\\n\\n\x3c!-- spellchecker:disable --\x3e\\n\\n```\\n$ ldd /usr/bin/dwebp\\n\\tlinux-vdso.so.1 (0x00007ffed8733000)\\n\\tlibwebpdemux.so.2 => /usr/lib/libwebpdemux.so.2.0.14 (0x00007f7473bb4000)\\n\\tlibwebp.so.7 => /usr/lib/libwebp.so.7.1.8 (0x00007f7473ae2000)\\n\\tlibpng16.so.16 => /usr/lib/libpng16.so.16 (0x00007f7473aa6000)\\n\\tlibc.so.6 => /usr/lib/glibc-hwcaps/x86-64-v3/libc.so.6 (0x00007f74738a9000)\\n\\tlibsharpyuv.so.0 => /usr/lib/libsharpyuv.so.0.0.1 (0x00007f747389e000)\\n\\tlibm.so.6 => /usr/lib/glibc-hwcaps/x86-64-v3/libm.so.6 (0x00007f74737b8000)\\n\\tlibz.so.1 => /usr/lib/libz.so.1.3.0 (0x00007f7473200000)\\n\\t/usr/lib64/ld-linux-x86-64.so.2 (0x00007f7473bea000)\\n```\\n\\n\x3c!-- spellchecker:enable --\x3e\\n\\nAwesome in this case both `dwebp` and `cwebp` link against `libwebp.so` so we can be confident that any performance improvements will be applicable to all packages in the repository linking against `libwebp`.\\n\\nLet\'s grab a couple of `.webp` files from [here](https://developers.google.com/speed/webp/gallery1) to test with. We\'ll just use the largest image size available in this case to reduce noise as much as possible when running benchmarks as well as allow any potential optimizations to stretch their legs a little more.\\n\\nNow having done the prep work, lets actually benchmark the damn thing using `hyperfine` for the time being.\\n\\n```\\n$ hyperfine \\"dwebp ~/3.webp -o /dev/null\\"\\nBenchmark 1: dwebp ~/3.webp -o /dev/null\\n Time (mean \xb1 \u03C3): 202.2 ms \xb1 0.3 ms [User: 198.9 ms, System: 3.0 ms]\\n Range (min \u2026 max): 201.8 ms \u2026 202.7 ms 14 runs\\n$ hyperfine \\"cwebp ~/PNG_Test.png -o /dev/null\\"\\nBenchmark 1: cwebp ~/PNG_Test.png -o /dev/null\\n Time (mean \xb1 \u03C3): 1.423 s \xb1 0.009 s [User: 1.346 s, System: 0.076 s]\\n Range (min \u2026 max): 1.410 s \u2026 1.435 s 10 runs\\n```\\n\\nThere, we have our a basic baseline for encode and decode performance. We mostly care about decode performance here but improved encoding performance would also not go amiss.\\n\\n## Let\'s Start Obvious\\n\\nLet\'s start basic, enabling the `speed` optimization which basically builds with `-O3` instead of `-O2` as well as any other flags that are deemed to be worthy to be part of the `speed` group. As well as, the `lto` optimization which builds with link time optimization allowing for inter-procedural optimizations to take place.\\n\\n\x3c!-- prettier-ignore --\x3e\\n```yaml\\noptimize:\\n - speed\\n - lto\\n```\\n\\nMoment of truth...\\n\\n```\\n$ hyperfine \\"dwebp ~/3.webp -o /dev/null\\"\\nBenchmark 1: dwebp ~/3.webp -o /dev/null\\n Time (mean \xb1 \u03C3): 200.0 ms \xb1 1.5 ms [User: 197.3 ms, System: 2.5 ms]\\n Range (min \u2026 max): 198.1 ms \u2026 203.2 ms 15 runs\\n$ hyperfine \\"cwebp ~/PNG_Test.png -o /dev/null\\"\\nBenchmark 1: cwebp ~/PNG_Test.png -o /dev/null\\n Time (mean \xb1 \u03C3): 1.353 s \xb1 0.012 s [User: 1.281 s, System: 0.071 s]\\n Range (min \u2026 max): 1.336 s \u2026 1.369 s 10 runs\\n```\\n\\nWell okay, we got a very minor uplift in decoding performance and a slightly higher improvement in encoding performance, but nothing too much to write home about. Luckily we have several more optimizations to explore...\\n\\n## PGO is great, except, when it isn\'t.\\n\\nNext step is to explore PGO (Profile Guided Optimization). For our `libwebp` package, looks like we already hit a bit of a snafu. There\'s no test suite included in the tarball! That\'s a bit of a disappointment as a test suite such as `make check` is by far and away the easiest and most comprehensive workload that can be used for profiling as part of PGO, especially for smaller libraries. However, we can still experiment with the just built `dwebp` and `cwebp` binaries as a suitable workload for PGO.\\n\\nLuckily, as part of the package.yml format all you have to do is provide a profile for automatic PGO. After chrooting into the build environment and fiddling around a bit we end up with:\\n\\n\x3c!-- prettier-ignore --\x3e\\n```yaml\\nprofile : |\\n ./examples/dwebp webp_js/test_webp_js.webp -o test_png.png\\n ./examples/cwebp test_png.png -o /dev/null\\n```\\n\\nAfter specifying that, 6 builds will now be performed instead of 2:\\n\\n- emul32:\\n - Instrumented build\\n - Run profiling workload\\n - Optimized build using profiling data\\n- x86_64:\\n - Instrumented build\\n - Run profiling workload\\n - Optimized build using profiling data\\n\\nFor this relatively small package it increases the build time from 1m1.672s to 1m42.199s\\n\\nThe next moment of truth...\\n\\n```\\n$ hyperfine \\"dwebp ~/3.webp -o /dev/null\\"\\nBenchmark 1: dwebp ~/3.webp -o /dev/null\\n Time (mean \xb1 \u03C3): 204.1 ms \xb1 2.2 ms [User: 201.3 ms, System: 2.7 ms]\\n Range (min \u2026 max): 201.6 ms \u2026 207.1 ms 14 runs\\n$ hyperfine \\"cwebp ~/PNG_Test.png -o /dev/null\\"\\nBenchmark 1: cwebp ~/PNG_Test.png -o /dev/null\\n Time (mean \xb1 \u03C3): 1.349 s \xb1 0.010 s [User: 1.266 s, System: 0.082 s]\\n Range (min \u2026 max): 1.335 s \u2026 1.374 s 10 runs\\n```\\n\\nWell... That\'s interesting. We actually regress in performance for decode performance whilst gaining another small bump in encoding performance. Worse still, we get a bunch of `profile count data file not found [-Wmissing-profile]` warning messages during the optimized build indicating to us our profiling workload isn\'t comprehensive enough and doesn\'t cover enough code paths. The lack of a handy `make check` that could be used as a profiling workload is really hurting us here. For now, let\'s put a pin in exploring PGO, it isn\'t a dead end but more work needs to be done curating a more comprehensive workload to chuck at it in this particular case, whilst other, easier, optimization techniques are still available to us.\\n\\n\x3c!-- cspell:disable-next-line --\x3e\\n\\n## 256 Vector Units go brrrrrr...\\n\\nThe next obvious step is to explore `glibc` hardware capabilities. For those unaware both `clang` and `gnu` compilers provide `x86_64-v2`, `x86_64-v3` and `x86_64-v4` micro-architecture build options on top of the baseline of `x86_64`. These enable the use of targeting additional CPU instruction sets during compilation for better performance. For example, `-sse4.2` for `x86_64-v2`, `-avx2` for `x86_64-v3`, and `-avx512` for `x86_64-v4`.\\n\\nWhilst that\'s great \'n all, if a program is built with `x86_64-v3` and gains an additional ~10% uplift in performance, it\'s no good if a `x86_64-v2` compatible cpu can\'t run it. Luckily the `glibc` loader that\'s found on almost general purpose linux installs provides a way to load higher or lower micro-architecture libraries if they\'re installed and supported.\\n\\nOn top of all that, the `package.yml` format provides an incredibly simple way of providing `x86_64-v3` built libraries by enabling the `avx2 : yes` flag.\\n\\nWith `avx2 : yes` enabled in the `libwebp` package three builds are performed.\\n\\n- emul32\\n- x86_64-v3\\n- x86_64\\n\\nWe now see these additional files in the `pspec_x86_64.xml` file\\n\\n```diff\\n+ <Path fileType=\\"library\\">/usr/lib64/glibc-hwcaps/x86-64-v3/libsharpyuv.so.0</Path>\\n+ <Path fileType=\\"library\\">/usr/lib64/glibc-hwcaps/x86-64-v3/libsharpyuv.so.0.0.1</Path>\\n+ <Path fileType=\\"library\\">/usr/lib64/glibc-hwcaps/x86-64-v3/libwebp.so.7</Path>\\n+ <Path fileType=\\"library\\">/usr/lib64/glibc-hwcaps/x86-64-v3/libwebp.so.7.1.8</Path>\\n+ <Path fileType=\\"library\\">/usr/lib64/glibc-hwcaps/x86-64-v3/libwebpdecoder.so.3</Path>\\n+ <Path fileType=\\"library\\">/usr/lib64/glibc-hwcaps/x86-64-v3/libwebpdecoder.so.3.1.8</Path>\\n+ <Path fileType=\\"library\\">/usr/lib64/glibc-hwcaps/x86-64-v3/libwebpdemux.so.2</Path>\\n+ <Path fileType=\\"library\\">/usr/lib64/glibc-hwcaps/x86-64-v3/libwebpdemux.so.2.0.14</Path>\\n+ <Path fileType=\\"library\\">/usr/lib64/glibc-hwcaps/x86-64-v3/libwebpmux.so.3</Path>\\n+ <Path fileType=\\"library\\">/usr/lib64/glibc-hwcaps/x86-64-v3/libwebpmux.so.3.0.13</Path>\\n```\\n\\nLet\'s rerun `lld` on `dwebp` after installing the new package and...\\n\\n\x3c!-- spellchecker:disable --\x3e\\n\\n```\\n$ ldd /usr/bin/dwebp\\n\\tlinux-vdso.so.1 (0x00007ffeab5b1000)\\n\\tlibwebpdemux.so.2 => /usr/lib/glibc-hwcaps/x86-64-v3/libwebpdemux.so.2.0.14 (0x00007f9a351d5000)\\n\\tlibwebp.so.7 => /usr/lib/glibc-hwcaps/x86-64-v3/libwebp.so.7.1.8 (0x00007f9a3510b000)\\n\\tlibpng16.so.16 => /usr/lib/libpng16.so.16 (0x00007f9a350cf000)\\n\\tlibc.so.6 => /usr/lib/glibc-hwcaps/x86-64-v3/libc.so.6 (0x00007f9a34ed2000)\\n\\tlibsharpyuv.so.0 => /usr/lib/glibc-hwcaps/x86-64-v3/libsharpyuv.so.0.0.1 (0x00007f9a34ec1000)\\n\\tlibm.so.6 => /usr/lib/glibc-hwcaps/x86-64-v3/libm.so.6 (0x00007f9a34ddb000)\\n\\tlibz.so.1 => /usr/lib/glibc-hwcaps/x86-64-v3/libz.so.1.3 (0x00007f9a34dbb000)\\n\\t/usr/lib64/ld-linux-x86-64.so.2 (0x00007f9a3520b000)\\n```\\n\\n\x3c!-- spellchecker:enable --\x3e\\n\\nWe can crucially see that `dwebp` is now loading the `x86-64-v3` built `libwebp.so` lib from `/usr/lib/glibc-hwcaps/x86-64-v3/libwebp.so.7.1.8`, success! Let\'s what our performance looks like.\\n\\n```\\n$ hyperfine \\"dwebp ~/3.webp -o /dev/null\\"\\nBenchmark 1: dwebp ~/3.webp -o /dev/null\\n Time (mean \xb1 \u03C3): 198.2 ms \xb1 1.2 ms [User: 195.4 ms, System: 2.5 ms]\\n Range (min \u2026 max): 197.0 ms \u2026 200.5 ms 14 runs\\n$ hyperfine \\"cwebp ~/PNG_Test.png -o /dev/null\\"\\nBenchmark 1: cwebp ~/PNG_Test.png -o /dev/null\\n Time (mean \xb1 \u03C3): 1.313 s \xb1 0.009 s [User: 1.243 s, System: 0.078 s]\\n Range (min \u2026 max): 1.308 s \u2026 1.341 s 10 runs\\n```\\n\\nLet\'s recap so far:\\n\\n| Optimization | Decode | Encode | Size |\\n| ----------------------- | ------------------ | ------- | ------- |\\n| Baseline | 202.2 ms | 1.399 s | 1.33 MB |\\n| Speed + LTO | 200.0 ms | 1.353 s | 1.73 MB |\\n| Speed + LTO + PGO | 204.1 ms :warning: | 1.349 s | 1.07 MB |\\n| Speed + LTO + x86_64-v3 | 198.2 ms | 1.313 s | 3.17 MB |\\n\\nWhilst we\'re still getting an additional speedup it isn\'t really anything to write home about. A measly ~2% improvement in decoding performance and a fairly respectable ~7% improvement in encoding performance for our test case. However, increasing the package size by an extra ~2MiB from providing a bunch of extra libs in `/usr/lib/glibc-hwcaps/x86-64-v3/` just ain\'t worth it. This hints that either the compiler optimizations aren\'t really effective here or we\'re being bottle-necked by something else.\\n\\nSo far, we\'ve been benchmarking fairly simply using `hyperfine`, let\'s swap that out for `perf` so we can get a callgraph.\\n\\n## Something about `perf` to the rescue\\n\\n`perf record -o dwebp.data -- dwebp ~/3.webp -o /dev/null`\\n\\n`perf record -o cwebp.data -- cwebp ~/PNG_Test.png -o /dev/null`\\n\\nLet\'s look at `dwebp` first with `perf report -i dwebp.data`.\\n\\n![Perf report dwebp](img/2024-02-09-intro-to-optimizing/perf_report_dwebp_png.webp)\\n\\nWell god damn, literally all of our time is being spent in `libz.so` it\'s no wonder our compiler optimizations were hardly improving performance.\\n\\nLet\'s also look at the `cwebp` report, we\'ve generally been getting better results from it.\\n\\n![Perf report cwebp](img/2024-02-09-intro-to-optimizing/perf_report_cwebp_png.webp)\\n\\nOkay, much more of our time is being spent in `libwebp.so` itself here which helps to explain why we were seeing a better performance uplift. Still 5.68% of our time is being spent in `libz`.\\n\\n## Choosing Wisely\\n\\nYou may remember early on, when I said we are also indirectly testing `libpng`. Well... after some more digging, that\'s exactly what\'s happening here. Re-running the `dwebp` binary it says this\\n\\n> Decodes the WebP image file to PNG format\\n\\nTurns out, it\'s more accurate to say we are _directly_ testing `libpng` and by extension `zlib`. It isn\'t `libwebp` that\'s spending all of its time in `libz.so`, it\'s `libpng`! This is exactly the reason you have to be careful about the benchmarks chosen and, ensure you understand what they\'re doing.\\n\\nHowever, the good news about this little snafu is:\\n\\n1. `dwebp` can be used to translate to another image format such as `.yuv` that\'ll more accurately remove the bottleneck from `libz.so`.\\n2. We now know that `libpng` has a huge bottleneck in `libz.so` and speeding up `zlib` _should_ dramatically speed up `libpng` performance.\\n\\n## Adjusting the Benchmark\\n\\nAfter reverting the `libwebp` package to the baseline let\'s use our adjusted decoding benchmark.\\n\\nWe\'ll now use `dwebp ~/3.webp -yuv -o /dev/null` for a decoding test, let\'s run that with `perf` to ensure we\'re exclusively testing `libwebp.so` here.\\n\\n![Perf report dwebp to yuv](img/2024-02-09-intro-to-optimizing/perf_report_dwebp_yuv.webp)\\n\\nOkay that\'s awesome, no `libpng.so` or `libz.so` to mess with our tests!\\n\\nLet\'s reapply our optimizations, keeping those which apply an uplift\\n\\n| Optimization | Decode | Size |\\n| ----------------------- | ----------------- | ------- |\\n| Baseline | 14.7 ms | 1.33 MB |\\n| Speed | 14.5 ms | 1.56 MB |\\n| LTO | 14.6 ms | 1.40 MB |\\n| PGO | 18.0 ms :warning: | 1.07 MB |\\n| x86-64-v3 | 12.7 ms | 2.35 MB |\\n| Speed + LTO + x86-64-v3 | 12.3 ms | 3.17 MB |\\n\\nOkay, this is great, whilst we aren\'t getting much from speed or LTO, we are getting a big uplift from x86-64-v3 libraries and when combined with the other optimizations we\'re getting an uplift in performance of around ~16% at the cost of close to thrice the installed package size.\\n\\n### Partial Profiling\\n\\nOnce again we see that PGO regresses performance hard, however, that smaller size is giving a good hint! We already know that the profiling workload we gave it isn\'t very comprehensive due to the bunch of `-Wmissing-profile` warnings we get during the optimized build. By default, PGO will aggressively inline and apply additional optimizations to code that\'s part of the profiling workload while everything else will be optimized for size. The idea being, hot-path code is fast and code that doesn\'t matter is small. However, what happens when you can\'t craft a comprehensive workload, as seems to be the case here? Luckily GCC has a flag for exactly that `-fprofile-partial-training`. GCC docs state that:\\n\\n> In some cases it is not practical to train all possible hot paths in the program. (For example, program may contain functions specific for a given hardware and training may not cover all hardware configurations program is run on.) With -fprofile-partial-training profile feedback will be ignored for all functions not executed during the train run leading them to be optimized as if they were compiled without profile feedback. This leads to better performance when train run is not representative but also leads to significantly bigger code.\\n\\nOkay, let\'s try it out, all we need to do is specify in our `package.yml` recipe.\\n\\n\x3c!-- prettier-ignore --\x3e\\n```yaml\\nenvironment: |\\n if [[ -n ${PGO_USE_BUILD} ]]; then\\n export CFLAGS=\\"${CFLAGS} -fprofile-partial-training\\"\\n export CXXFLAGS=\\"${CXXFLAGS} -fprofile-partial-training\\"\\n fi\\n```\\n\\nAnd the results:\\n\\n| Optimization | Decode | Size |\\n| ------------------------------------- | ------- | ------- |\\n| Speed + LTO + x86-64-v3 | 12.3 ms | 3.17 MB |\\n| Speed + LTO + x86-64-v3 + Partial PGO | 12.5 ms | 3.13 MB |\\n\\nWell, it was worth a try. This highlights how useless PGO can be when you don\'t or can\'t provide it a good workload. Interestingly, we don\'t get the size bloat that was promised, in fact, the opposite.\\n\\n# Final libwebp Results\\n\\n| Benchmark | Time Before | Time After | Size Before | Size After |\\n| ----------------------------------- | ----------- | ---------- | ----------- | ---------- |\\n| \\"dwebp ~/3.webp -yuv -o /dev/null\\" | 14.5 ms | 12.3 ms | 1.33 MB | 3.17 MB |\\n| \\"cwebp ~/PNG_Test.png -o /dev/null\\" | 1.399 s | 1.313 s | -- | -- |\\n\\nIn the end, we get a very healthy ~16% improvement in decoding from a .webp to .yuv file. As well as a respectable 6% improvement in encoding from a .png to .webp file. However, the increased package size is very unfortunate. It\'s possible to tweak the x86-64-v3 build and only ship the libs that actually improve performance in order to get the installed size back to an acceptable level.\\n\\n# \\"Next-Generation\\" Side Quest\\n\\nNow, you probably remember earlier due to our unrepresentative benchmark we found out that `libpng` is getting highly bottlenecked by `libz.so`. This now seems like a perfect opportunity to take a look at zlib and circle-back to our original benchmark that we were using.\\n\\nZlib is widely employed throughout the ecosystem and, as such you\'d think it would be highly-optimized for performance. However, that isn\'t really the case. Zlib is written in an old-fashioned way of C and tries to be _extremely_ portable; supporting dozens of systems that have fallen out of common use. As such, it\'s hard to apply architecture specific optimizations that wouldn\'t break some old system or without introducing code spaghetti. There have been a couple of attempts to merge AArch64 and x86_64 optimizations into the canonical zlib library without success.\\n\\nHowever, there is some light in this tunnel as various forks of zlib having been popping up, applying new optimizations on top of zlib. The most promising of these looks be to [zlib-ng](https://github.com/zlib-ng/zlib-ng/). When built in compatible mode, it promises to be API compatible with canonical zlib and _tries_ to be as ABI compatible as possible.\\n\\nLet\'s just go for it, replacing Solus\' `zlib` package with zlib-ng built in compatible mode. It\'s a bit scary due to how integral zlib is in a typical Linux install, but, how hard could it be?\\n\\n\x3c!-- cspell:disable-next-line --\x3e\\n\\n## I Zee a Purty lil\' Package\\n\\nWell that was simple. Here\'s what our zlib-ng `package.yml` recipe looks like.\\n\\n\x3c!-- spellchecker:disable --\x3e\\n\x3c!-- prettier-ignore --\x3e\\n```yaml\\nname : zlib\\nversion : 2.1.5\\nrelease : 28\\nsource :\\n - https://github.com/zlib-ng/zlib-ng/archive/refs/tags/2.1.5.tar.gz : 3f6576971397b379d4205ae5451ff5a68edf6c103b2f03c4188ed7075fbb5f04\\nhomepage : https://github.com/zlib-ng/zlib-ng\\nlicense : ZLIB\\ncomponent : system.base\\nsummary : zlib replacement with optimizations for next generation systems.\\ndescription:\\n - A zlib data compression library for the next generation systems. ABI/API compatible mode.\\ndevel : yes\\nemul32 : yes\\nsetup : |\\n %cmake_ninja \\\\\\n -DZLIB_COMPAT=ON \\\\\\n -DWITH_GTEST=OFF \\\\\\n -DBUILD_SHARED_LIBS=ON \\\\\\n -DINSTALL_LIB_DIR=%libdir%\\nbuild : |\\n %ninja_build\\ninstall : |\\n %ninja_install\\ncheck : |\\n %ninja_check\\n```\\n\\n\x3c!-- spellchecker:enable --\x3e\\n\\nAfter building it, all the files seem to be in the right place and the test suite is passing. Let\'s just install it overwriting our canonical `zlib` package and hope our system doesn\'t die... I think the word is YOLO.\\n\\n```\\n$ hyperfine \\"dwebp ~/3.webp -o /dev/null\\"\\nBenchmark 1: dwebp ~/3.webp -o /dev/null\\n Time (mean \xb1 \u03C3): 198.6 ms \xb1 2.3 ms [User: 194.3 ms, System: 3.6 ms]\\n Range (min \u2026 max): 196.3 ms \u2026 203.3 ms 14 runs\\n$ sudo eopkg it zlib-2.1.5-28-1-x86_64.eopkg\\n...\\n$ $ hyperfine \\"dwebp ~/3.webp -o /dev/null\\"\\nBenchmark 1: dwebp ~/3.webp -o /dev/null\\n Time (mean \xb1 \u03C3): 87.6 ms \xb1 0.7 ms [User: 84.7 ms, System: 2.6 ms]\\n Range (min \u2026 max): 86.5 ms \u2026 88.7 ms 33 runs\\n```\\n\\nWell, hot diggity damn. Swapping out the zlib package for a more performant variant has instantly more than halved(!!) our decoding time.\\n\\nWe need to find a more contained `libpng` benchmark here that removes the `libwebp` stuff to really confirm the findings here. After some sleuthing the `libpng` source repository has a [pngtopng.c](https://github.com/glennrp/libpng/blob/libpng16/contrib/examples/pngtopng.c) file we can compile to use the system libpng library.\\n\\nChanging the header from `#include \\"../../png.h\\"` to `#include <png.h>` then running `gcc -Ofast pngtopng.c -lpng16 -o pngtopng` to compile it, we have a libpng benchmark. We can reuse our test .png file from earlier. Ending up with: `./pngtopng ~/PNG_Test.png /dev/null` for our benchmark.\\n\\n| Library | Time |\\n| ---------------- | -------- |\\n| zlib (canonical) | 1.464 s |\\n| zlib-ng (compat) | 896.6 ms |\\n\\nWell. This is pretty much inline with our flawed `dwebp` benchmark from earlier. Swapping out zlib almost halves `libpng` decoding time.\\n\\n## Squeezing more from zlib-ng\\n\\nHowever, we\'re not done yet. We still have our compiler optimizations available to us to squeeze more performance from `zlib-ng`.\\n\\n| Optimization | Decode | Size |\\n| ----------------------------- | -------- | --------- |\\n| Baseline | 896.6 ms | 141.00 KB |\\n| Speed | 883.6 ms | 182.00 KB |\\n| LTO | 892.7 ms | 133.00 KB |\\n| PGO | 894.6 ms | 141.00 KB |\\n| x86-64-v3 | 892.5 ms | 295.00 KB |\\n| Speed + LTO | 882.6 ms | 170.00 KB |\\n| Speed + LTO + PGO + x86-64-v3 | 882.5 ms | 250.00 KB |\\n\\nIt looks like in this case the simple speed + LTO optimizations is the way to go. Speed gives the majority of the speedup but LTO helps bring back down the package size again. However, it\'s only a 1.5% improvement from baseline for this benchmark. We can always re-benchmark it later, testing zlib performance more directly instead of via libpng. It shows how good a job the zlib-ng developers have done that it\'s so performant right out of the gate.\\n\\n# Final Words\\n\\nWe\'ve shown the process of how a package can be optimized in Solus, through the failings and wins here I hope some good tips and tricks were provided in avoiding common pitfalls. Additional benchmarking strategies such as BOLT or Polly optimizations were not discussed and it\'ll be good material for a future blog post.\\n\\nSome other important things such as tweaking the system for benchmarking in order to get representative and consistent results were also not discussed. This is especially important in power budget constrained systems such as laptops and worth bearing in mind.\\n\\nRegardless, I hope the story of how `libwebp` was optimized for was entertaining and some things were learnt for anyone looking to optimize packages in Solus for the future."},{"id":"don\'t-call-me-mate-pal","metadata":{"permalink":"/blog/don\'t-call-me-mate-pal","source":"@site/devlog/2024-01-29-dont-call-me-mate.md","title":"Don\'t call me MATE, pal!","description":"Back in our 4.4 release post we announced that Solus would stop shipping a MATE ISO, mostly because MATE showed no signs of moving away from X11 and towards wayland. At the beginning of this year, we shipped our new XFCE ISO as a beta. And now we\'re getting ready to ship the Solus MATE Transition Tool to move existing users off of MATE.","date":"2024-01-29T00:00:00.000Z","tags":[{"inline":true,"label":"MATE","permalink":"/blog/tags/mate"},{"inline":true,"label":"devlog","permalink":"/blog/tags/devlog"},{"inline":true,"label":"solus","permalink":"/blog/tags/solus"}],"readingTime":2.645,"hasTruncateMarker":true,"authors":[{"name":"David Harder","title":"Solus Staff","page":{"permalink":"/blog/authors/david"},"socials":{"github":"https://github.com/davidjharder"},"imageURL":"https://avatars.githubusercontent.com/u/23007135","key":"david"}],"frontMatter":{"title":"Don\'t call me MATE, pal!","slug":"don\'t-call-me-mate-pal","authors":"david","tags":["MATE","devlog","solus"],"hide_table_of_contents":false},"unlisted":false,"prevItem":{"title":"Intro to Optimizing Packages on Solus","permalink":"/blog/solus-optimizing-packages"},"nextItem":{"title":"eopkg is dead, long live eopkg","permalink":"/blog/eopkg-is-dead-long-live-eopkg"}},"content":"Back in our [4.4 release post](https://getsol.us/2023/07/08/solus-4-4-released/) we announced that Solus would stop shipping a MATE ISO, mostly because MATE showed no signs of moving away from X11 and towards wayland. At the beginning of this year, we shipped our new XFCE ISO as a beta. And now we\'re getting ready to ship the _Solus MATE Transition Tool_ to move existing users off of MATE.\\n\\n\x3c!-- truncate --\x3e\\n\\n## The problem\\n\\nMATE and XFCE are similar enough that eager Solusians can, and have, installed XCFE on their MATE machines with nothing more than a couple of `eopkg` commands. We\'re pretty sure our resident `bash` script enthusiast (ermo) could hammer out a working transition script in an evening. But we want a more polished experience. We know _you_ follow Solus news; after all, you\'re reading this. However, we assume there are users who dutifully update their systems, but have no interest in keeping up with our blog posts. How do we get their attention and prompt them to move away from MATE?\\n\\n## Introducing the Solus MATE Transition Tool\\n\\nWe\'re pleased to show off the _MATE Transition Tool_, which we plan to include in normal updates to MATE systems in the coming weeks. Most of the work on this tool was done by Joey; more on his efforts in the section below. Here\'s how MATE users will encounter the tool:\\n\\n:::note\\n\\nThese screenshots are current as of the publishing of this post, we may change things as we continue testing.\\n\\n:::\\n\\n1. Users will get a notification on every start-up informing them that they need to transition away from MATE.\\n\\n![Notification: Solus Transition Service](img/2024-01-29-dont-call-me-mate/notification.png)\\n\\n2. Clicking on that notification will launch the Solus MATE Transition Tool.\\n\\n![MATE Transition Tool Launch](img/2024-01-29-dont-call-me-mate/MTT-launch.png)\\n\\n3. Users select either Solus Budgie or Solus XFCE. The tool installs the selected edition, removes MATE, and prompts for a reboot\\n4. The tool removes itself after a successful transition.\\n\\nSimple. At least, that\'s what we want users to think.\\n\\n## How the Mate Transition Tool is actually part of our Python2 work\\n\\nThe story of the MATE Transition Tool is actually tied up in our fight to drag `eopkg` into the current decade. As I wrote previously, we\'re somewhat embarrassed by the amount of Solus tooling which _still_ relies on Python2. One such tool is the Solus Software Center `solus-sc`. A while back, the team decided the sane thing to do was to ditch `solus-sc` in favor of _KDE Discover_ and _GNOME Software_ . This would have the additional benefit of promoting flatpak applications to first-class citizens. The problem is _Discover_ and _Software_ have no way to talk to our package manager `eopkg`. We need an API. Luckily, other projects have encountered the same issue, leading to [`packagekit`](https://www.freedesktop.org/software/PackageKit/pk-intro.html).\\n\\nJoey has been doing the dirty work of bolting `packagekit` support onto `eopkg`, and saw an opportunity: If `eopkg` could be upgraded to understand some of `packagekit`, then he could write a special-purpose application to move users off MATE without asking them to run scary bash scripts (sorry ermo). We\'re rather pleased with this solution. MATE users get a simple transition and Solus gets closer to checking `solus-sc` off [the list.](https://github.com/getsolus/packages/issues/270)"},{"id":"eopkg-is-dead-long-live-eopkg","metadata":{"permalink":"/blog/eopkg-is-dead-long-live-eopkg","source":"@site/devlog/2024-01-19-eopkg-is-dead.md","title":"eopkg is dead, long live eopkg","description":"Close watchers of our packages repository may have noticed some strange looking items:","date":"2024-01-19T00:00:00.000Z","tags":[{"inline":true,"label":"eopkg","permalink":"/blog/tags/eopkg"},{"inline":true,"label":"devlog","permalink":"/blog/tags/devlog"},{"inline":true,"label":"moss","permalink":"/blog/tags/moss"},{"inline":true,"label":"solus","permalink":"/blog/tags/solus"}],"readingTime":1.645,"hasTruncateMarker":true,"authors":[{"name":"David Harder","title":"Solus Staff","page":{"permalink":"/blog/authors/david"},"socials":{"github":"https://github.com/davidjharder"},"imageURL":"https://avatars.githubusercontent.com/u/23007135","key":"david"}],"frontMatter":{"title":"eopkg is dead, long live eopkg","slug":"eopkg-is-dead-long-live-eopkg","authors":"david","tags":["eopkg","devlog","moss","solus"],"hide_table_of_contents":false},"unlisted":false,"prevItem":{"title":"Don\'t call me MATE, pal!","permalink":"/blog/don\'t-call-me-mate-pal"},"nextItem":{"title":"Welcome to the Solus Devlog","permalink":"/blog/welcome-solus-devlog-v1"}},"content":"Close watchers of our [packages repository](https://github.com/getsolus/packages) may have noticed some strange looking items:\\n\\n- [Initial inclusion of eopkg4-bin](https://github.com/getsolus/packages/pull/1305)\\n- [Testing the eopkg4-bin package](https://github.com/getsolus/packages/issues/1316) Warning: Minions GIF\\n\\nIt\'s a long story.\\n\\n\x3c!-- truncate --\x3e\\n\\nOur package manager `eopkg` is written in Python2. Python2 was originally planned to hit end-of-life all the way back in 2015! So Solus contributors past and present have wrestled with three thorny issues:\\n\\n- Do we really want to just port `eopkg` to python3? Surely we could build something newer and shinier.\\n- How exactly do we want to port `eopkg` to Python3? (We\'ll call this ported version `eopkg3` for short)\\n- How do we make sure `eopkg3` works even if something goes wrong with the Python3 libraries on someone\'s machine?\\n\\nHere\'s the plan to solve this: Ikey and friends over at Serpent OS are actively building a new package manager [_moss_](https://github.com/serpent-os/moss) that we are excited about. And they\'re building it with Solus in mind as an eventual user. This will be our fix for the first problem. In the meantime, we\'re taking a pragmatic approach to the last two issues so that (frankly) we can do more exciting things.\\n\\nSheepman, Livingsilver, and others completed a [direct Python3 port](https://github.com/getsolus/eopkg/commits/python3), which we never expect our users to actually run directly like a traditional Python program. Instead, that port will be compiled into a _binary_ using [nuitka](https://nuitka.net/doc/download.html). We\'re calling this compiled `eopkg3` binary `eopkg4-bin` for now. Critically, this binary will have _no dependencies_ other than `libc`. If we can successfully swap `eopkg` with `eopkg4-bin` on user\'s machines, then we\'ve solved the last issue: Python3 can be updated without worrying about also wrecking the package manager. Got it?\\n\\nBut what about Python2? Well, now that Evan and Joey have seen off a [successful ISO release](https://getsol.us/2024/01/08/solus-4-5-released/) with a `calamares` based installer, we can cross `os-installer` [off the list](https://github.com/getsolus/packages/issues/270). And `eopkg4-bin` will let us cross off a whole bunch more. The rest of that list is a story for another day."},{"id":"welcome-solus-devlog-v1","metadata":{"permalink":"/blog/welcome-solus-devlog-v1","source":"@site/devlog/2024-01-13-welcome-devlog.md","title":"Welcome to the Solus Devlog","description":"Welcome to the Solus Development Log.","date":"2024-01-13T00:00:00.000Z","tags":[{"inline":true,"label":"hello","permalink":"/blog/tags/hello"},{"inline":true,"label":"devlog","permalink":"/blog/tags/devlog"},{"inline":true,"label":"firstpost","permalink":"/blog/tags/firstpost"},{"inline":true,"label":"solus","permalink":"/blog/tags/solus"}],"readingTime":0.9,"hasTruncateMarker":true,"authors":[{"name":"Joey Riches","title":"Solus Staff","page":{"permalink":"/blog/authors/joey"},"socials":{"github":"https://github.com/joebonrichie"},"imageURL":"https://avatars.githubusercontent.com/u/5338090","key":"joey"}],"frontMatter":{"title":"Welcome to the Solus Devlog","description":"Welcome to the Solus Development Log.","slug":"welcome-solus-devlog-v1","authors":"joey","tags":["hello","devlog","firstpost","solus"],"hide_table_of_contents":false},"unlisted":false,"prevItem":{"title":"eopkg is dead, long live eopkg","permalink":"/blog/eopkg-is-dead-long-live-eopkg"}},"content":"Welcome to the Solus Development Log.\\n\\nThe Solus Development Log will be used by Solus Staff and outside contributors to highlight wins and changes in Solus. Keep an eye on this space.\\n\\n\x3c!-- truncate --\x3e\\n\\nThe Solus DevLog has been setup to facilitate improved communication with the outside world; wins, significant changes, as well as challenges, within Solus. Solus Staff and contributors are encouraged to use this space.\\n\\nThe DevLog has been setup as a separate entity to the [Solus Blog](https://getsol.us/blog/) to encourage more short form development content that doesn\'t require the same level of polish as an official blog post.\\n\\nIt is hoped that this will be used to help communicate what\'s going on in Solus such that our short-term and medium-term progress, goals, and ambitions are less of a black box to the outside world.\\n\\nAdditionally, we believe it will help provide context to any of our murmurings for any users who keep an eye on the [getsolus](https://github.com/getsolus/) GitHub organization page and the [Solus](https://matrix.to/#/#solus:matrix.org) Matrix channels.\\n\\nHope to see you back at this space soon with more content!"}]}}')}}]); \ No newline at end of file diff --git a/assets/js/f81c1134.ac31f1df.js b/assets/js/f81c1134.ac31f1df.js deleted file mode 100644 index 5a33afebb..000000000 --- a/assets/js/f81c1134.ac31f1df.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[4031],{4108:e=>{e.exports=JSON.parse('{"archive":{"blogPosts":[{"id":"clean-clean-clean","metadata":{"permalink":"/blog/clean-clean-clean","source":"@site/devlog/2024-11-21-clean-cleanl-clean.md","title":"Clean, clean, clean!","description":"Hello everyone! Alfi here, member of Solus Cleanup Crew. It\'s been more than a year since I started contributing to Solus and I want to talk about it. About what I did, what we did, what we accomplished so far, and what we want to do next.","date":"2024-11-21T00:00:00.000Z","tags":[{"inline":true,"label":"housekeeping","permalink":"/blog/tags/housekeeping"},{"inline":true,"label":"cleanup","permalink":"/blog/tags/cleanup"},{"inline":true,"label":"devlog","permalink":"/blog/tags/devlog"},{"inline":true,"label":"solus","permalink":"/blog/tags/solus"}],"readingTime":5.585,"hasTruncateMarker":true,"authors":[{"name":"Muhammad Alfi Syahrin","title":"Solus Staff","page":{"permalink":"/blog/authors/alfi"},"socials":{"github":"https://github.com/malfisya"},"imageURL":"https://avatars.githubusercontent.com/u/101771435","key":"alfi"}],"frontMatter":{"title":"Clean, clean, clean!","slug":"clean-clean-clean","authors":"alfi","tags":["housekeeping","cleanup","devlog","solus"],"hide_table_of_contents":false},"unlisted":false,"nextItem":{"title":"Intro to Optimizing Packages on Solus","permalink":"/blog/solus-optimizing-packages"}},"content":"Hello everyone! Alfi here, member of Solus Cleanup Crew. It\'s been more than a year since I started contributing to Solus and I want to talk about it. About what I did, what we did, what we accomplished so far, and what we want to do next.\\n\\n\x3c!-- truncate --\x3e\\n\\n## A bit of background\\n\\nI started contributing in October 2023, when Solus participated in [Hacktoberfest](https://getsol.us/2023/10/01/solus-and-hacktoberfest-2023/). Hacktoberfest is a month-long event that encourage people to contribute to open source project in exchange for some digital merchandise. Finally, an excuse to contribute to something I use every day. Although, as an accountant, all of this is new experience to me. It was confusing at first, but I persisted. Finally, I got the hang of it and I managed to submit around 100 pull request during the month of the event. I was very excited and motivated. During the month, a few people joined the event and contributed to Solus, but then November came and most of the contribution slowed down. I was the only one left that continued doing the beginner tasks, mostly adding homepage to packages.\\n\\nAt the start of January 2024, Jakob Gezelius ([androidnisse](https://github.com/androidnisse)) comes in and starts contributing to homepage task too. Worried that we would stepped on each other\'s feet, we started a private chat to organize the tasks between ourselves. Until May, the two of us had been chipping away at the homepage task which at this point left 650 packages without a homepage. Then we had more contributors joining. I decided to make a group chat to accommodate all the people joining. It was called \\"Solus Homepage Team\\" at the time. More contributors and staff members joined the room, then it was renamed as \\"Solus Cleanup Crew\\" and moved under the official Solus matrix space.\\n\\n## What is it?\\n\\nSolus cleanup crew is a group of community contributors as as well staff members with the goal of bringing the Solus package repository up to current standard. It is a subset of the packaging room on our matrix channel. We organize the work on all the cleanup related tasks.\\n\\n## Why bother?\\n\\nSolus has been updating their tooling and infrastructure since its resurrection. While most of the tooling changes can be accomplished by staff members alone, there are things that they cannot do. While many consider Solus repository as small, it still contains more than 6000 packages. Some packages have never even gotten an update since Solus was first created! We want to get rid of all its cruft before we can migrate to a better tooling. That\'s where the community contributor can come in and help.\\n\\nFor me personally, it is a chance to learn something new and fill my time with more purpose. Sometimes, I feel like a slob scrolling through things, opening the same three apps over and over or sleeping midday. Technically speaking, doing packaging is still scrolling through things, still opening the same three apps over and over, and I still get my midday nap, but now it is with purpose. I love that what I do can be enjoyed by other people. It is mostly invisible and not even noticed by people, but the chance of it helping people gives me so much joy. Why bother? Because I love it.\\n\\n## What we accomplished\\n\\nWe create a few repository wide task that can done with little reading of our packaging guide. The keen-eyed of you may have already seen these tasks. It is always attached at the end of every Sync Updates since July. These are the tasks we did:\\n|No. | Task | Date Started | Start count | Current count|\\n|----|-------------| ------| ------------|--------------|\\n|1.| [Adding homepage key to package.yml](https://github.com/getsolus/packages/issues/411)|30-09-2023|2300|8\\n|2.| [Adding AppStream metainfo to all font packages](https://github.com/getsolus/packages/issues/449)|06-10-2023| 38 | Done \ud83c\udf89|\\n|3.| [Adding AppStream metainfo to all graphical applications](https://github.com/getsolus/packages/issues/1389)|22-01-2024|316|198|\\n|4.| [Applying new cargo macros](https://github.com/getsolus/packages/issues/3111)|27-06-2024|37| Done \ud83c\udf89|\\n|5.| [Changing all packages with homepages pointing to wiki.gnome.org](https://github.com/getsolus/packages/issues/4116)|20-10-2024|87|62|\\n|6.| [Adding monitoring.yml](https://github.com/getsolus/packages/issues/4121)|21-10-2024|3070|2937|\\n|7.| [Tagging packages that do not build](https://github.com/getsolus/packages/issues?q=is%3Aopen+is%3Aissue+label%3A%22Packaging+Problem%22)|Ongoing| N/A| 13\\n|8.| [Tagging packages that should be deprecated](https://github.com/getsolus/packages/issues?q=is%3Aopen+is%3Aissue+label%3A%22Package%3A+Removal+Request%22)|Ongoing| N/A| 25\\n\\nAs you can see from the table above, we just completed two tasks and we are close to completing homepage task. Packages that do not build also are also getting solved one by one. Right now, there are 12 people in Solus Cleanup Crew Matrix room, 6 of them are new contributors. We also create a new AppStream metainfo documentation, clean up our issue templates, implement a better tagging system for organizing issues and much more. Solus Cleanup Crew is also becoming a place where we can onboard new contributors and recruit new staff. I thought we accomplished a lot and I am happy with it.\\n\\n## What next?\\n\\nWe want to focus on adding appstream metainfo for remaining 200 packages, in line with the goal of 4.7 ISO. It will not be easy nor quick, but we will try our best. We want Solus users to have the best experience possible when we finally say goodbye to `solus-sc` and switch to modern software center (Gnome Software and KDE Discover). We want you to be able to install all graphical application from software center and have all the relevant information (Legible screenshot, Hi-Res Icon, good description, etc).\\n\\nWe also want to add more [monitoring.yml](https://help.getsol.us/docs/packaging/monitoring.yml) files to packages, so we can utilize our proof-of-concept [\\"Package Update Monitor\\"](https://shared.getsol.us/justin/updates/) created by [Justin Zobel](https://github.com/Justinzobel). I, myself and [Joey Riches](https://github.com/joebonrichie) will explore the possibility of curating our own \\"Editor\'s Choice\\" and \\"Featured Apps\\" in Gnome Software, made possible by [`gnome-app-list`](https://gitlab.gnome.org/GNOME/gnome-app-list). I think the road ahead is very exciting for us and hopefully for you too!\\n\\n## Want to help?\\n\\nWe are always eager for people to join and spend their time contributing to Solus. There are many ways you can [contribute](https://help.getsol.us/docs/user/contributing/getting-involved), but for me it is packaging. For me, packaging can be relaxing, sometimes frustrating, but always gives me joy at the end. If you are interested to dip your toe on packaging and want to help us, here are the simple steps:\\n\\n1. Join the Solus Packaging Room on Matrix\\n2. Read and practice our [packaging documentation](https://help.getsol.us/docs/packaging/)\\n3. Submit your first Pull Request. We recommend doing the wiki gnome task or monitoring task\\n4. Follow along the review process until your PR gets merged\\n5. Continue on contributing and you might get invited to Solus Cleanup Crew\\n\\n## Closing thoughts\\n\\nI want to thank all the contributors that made all of this possible. It was such a wonderful effort from everyone and we will strive to keep that up. Let me know if you are interested in a follow-up blog about the detail of doing packaging for Solus. _Terima kasih dan sampai jumpa_!"},{"id":"solus-optimizing-packages","metadata":{"permalink":"/blog/solus-optimizing-packages","source":"@site/devlog/2024-02-09-Intro-to-optimizing-packages-on-solus.md","title":"Intro to Optimizing Packages on Solus","description":"Explore how to employ advanced compiler techniques such as PGO, BOLT & Glibc HWCaps to squeeze extra performance from packages using libwebp as a test vehicle","date":"2024-02-09T00:00:00.000Z","tags":[{"inline":true,"label":"pgo","permalink":"/blog/tags/pgo"},{"inline":true,"label":"lto","permalink":"/blog/tags/lto"},{"inline":true,"label":"solus","permalink":"/blog/tags/solus"},{"inline":true,"label":"packaging","permalink":"/blog/tags/packaging"},{"inline":true,"label":"optimization","permalink":"/blog/tags/optimization"},{"inline":true,"label":"3","permalink":"/blog/tags/3"},{"inline":true,"label":"clang","permalink":"/blog/tags/clang"},{"inline":true,"label":"gnu","permalink":"/blog/tags/gnu"},{"inline":true,"label":"llvm","permalink":"/blog/tags/llvm"},{"inline":true,"label":"glibc","permalink":"/blog/tags/glibc"},{"inline":true,"label":"hwcaps","permalink":"/blog/tags/hwcaps"},{"inline":true,"label":"x86_64-v3","permalink":"/blog/tags/x-86-64-v-3"}],"readingTime":22.32,"hasTruncateMarker":true,"authors":[{"name":"Joey Riches","title":"Solus Staff","page":{"permalink":"/blog/authors/joey"},"socials":{"github":"https://github.com/joebonrichie"},"imageURL":"https://avatars.githubusercontent.com/u/5338090","key":"joey"}],"frontMatter":{"title":"Intro to Optimizing Packages on Solus","description":"Explore how to employ advanced compiler techniques such as PGO, BOLT & Glibc HWCaps to squeeze extra performance from packages using libwebp as a test vehicle","slug":"solus-optimizing-packages","authors":"joey","tags":["pgo","lto","solus","packaging","optimization","3","clang","gnu","llvm","glibc","hwcaps","x86_64-v3"],"hide_table_of_contents":false},"unlisted":false,"prevItem":{"title":"Clean, clean, clean!","permalink":"/blog/clean-clean-clean"},"nextItem":{"title":"Don\'t call me MATE, pal!","permalink":"/blog/don\'t-call-me-mate-pal"}},"content":"We\'ll explore how to build packages with advanced compiler techniques in order to squeeze more performance out of the box for packages in Solus. We\'ll be using the story of how `libwebp` was optimized for and how it led to an unexpected side quest.\\n\\n\x3c!-- truncate --\x3e\\n\x3c!-- cspell:disable-next-line --\x3e\\n\\n# Cual es la causa\\n\\nLinux distributions have a lot of control over how a source-based package gets compiled and shipped to users as part of a binary repository. Aggressive and advanced compiler optimization techniques, as well as other methods can be used to provide greater out of the box performance for end users. This can greatly benefit users running on older hardware to provide a snappier end-user experience; reducing time waiting on a heavy workload to finish; or even improved battery life; amongst other improvements.\\n\\nPart of the problem is, a packager\'s time is limited. So how, as a distribution, do you choose to try provide faster compatible packages for an end user. A historic approach is to simply change the default compiler flags for _all_ packages, such as enabling [LTO](https://en.wikipedia.org/wiki/Interprocedural_optimization) by default. Whilst this approach can work well, at Solus the philosophy is slightly different where a packager can trivially enable several advanced compiler optimization techniques such as [PGO](https://en.wikipedia.org/wiki/Profile-guided_optimization) without too much faffing around on a _targeted_ package.\\n\\nThe benefits of such an approach are:\\n\\n- Can target the performance of a specific package to benefit _all_ users\\n- A compiler optimization may improve one package, but may not apply globally to all packages.\\n\\nThe downsides are such:\\n\\n- Requires additional packager time to benchmark and experiment with different optimization strategies.\\n- Requires the packager to _choose_ and invest time into improving performance of a package.\\n- Requires the packager to find an appropriate benchmark to test the package against.\\n- Experimenting with compiler optimizations may not bear fruit: no meaningful improvement in performance, or there may be some other bottleneck.\\n\\n# Optimization Techniques Available\\n\\n- speed:\\n - As simple as it gets really, build a package with `-O3` instead of `-O2` as well as any other flags deemed worthy to be included as part of the `speed` flags. The main drawback of this is that `-O3` is not guaranteed to produce faster results than building with `-O2` and typically will produce bigger binaries. The days of `-O3` outright breaking your program in weird unexpected ways is largely behind us.\\n- LTO:\\n - Compared to some other distributions `-flto` is not yet enabled by default on Solus. LTO is almost guaranteed to provide a %1 or slightly larger performance improvement as well as a smaller binary at the cost of increased compiling times and memory usage during build. When combined with other optimization techniques such as PGO the LTO optimization can really stretch its legs and provide even greater uplift!\\n- Clang:\\n - Not strictly an optimization, but, building a package with `clang` instead of `gcc` and `ld.ldd` to link instead of the infamous `ld.bfd` may provide a faster package out of the box. You\'ll have to be careful of subtle ABI differences if building with `clang`. If in doubt, and, `clang` is the obvious choice, perform safety rebuilds on all reverse dependencies of the package.\\n- PGO:\\n - Profile guided optimization. Build once with instrumentation in order to collect profile data when ran. Run the program using a representative workload in order to collect profiling data. Build the program again with the profiling data provided in order to build an optimized variant.\\n- BOLT:\\n - Binary optimization and layout tool. You can think of this as \\"post-link PGO\\" where you instrument a binary with `bolt` to collect profiling data. Run that binary. Then finally reorganize the binary layout using the collected profile data. This generally works better on large statically linked binaries but smaller binaries or libraries such as found in a typical package can benefit too. This optimization is still quite new.\\n\\nRegardless, that\'s enough word spaghetti, let\'s look at the process to actually optimize a package.\\n\\n# Optimizing a Package\\n\\nRight, to begin with we\'ll have to start on choosing an actual package to benchmark and optimize. I\'ve heard the `.webp` file format is becoming increasingly common on the web, slowly replacing `.png` and `.jpg` file formats due to the strong backing of Google (for better or for worst). An improvement in decoding time for `.webp` files would benefit any user using a web browser casually browsing the web.\\n\\nLet\'s have a look at the `package.yml` build recipe for `libwebp`.\\n\\n\x3c!-- prettier-ignore --\x3e\\n```yaml\\nname : libwebp\\nversion : 1.3.2\\nrelease : 25\\nsource :\\n - https://github.com/webmproject/libwebp/archive/refs/tags/v1.3.2.tar.gz : c2c2f521fa468e3c5949ab698c2da410f5dce1c5e99f5ad9e70e0e8446b86505\\nhomepage : https://developers.google.com/speed/webp/\\nlicense : BSD-3-Clause\\ncomponent : multimedia.codecs\\nsummary : A new image format for the web\\ndescription: |\\n WebP is a new image format that provides lossless and lossy compression for images on the web. WebP lossless images are 26% smaller in size compared to PNGs. WebP lossy images are 25-34% smaller in size compared to JPEG images at equivalent SSIM index. WebP supports lossless transparency (also known as alpha channel) with just 22% additional bytes. Transparency is also supported with lossy compression and typically provides 3x smaller file sizes compared to PNG when lossy compression is acceptable for the red/green/blue color channels.\\nemul32 : yes\\npatterns :\\n - devel : /usr/share/man\\nbuilddeps :\\n - pkgconfig32(glu)\\n - pkgconfig32(glut)\\n - pkgconfig32(libpng)\\n - pkgconfig32(libtiff-4)\\n - pkgconfig32(libturbojpeg)\\n - pkgconfig32(zlib)\\n - giflib-devel\\nsetup : |\\n %reconfigure --disable-static --enable-everything\\nbuild : |\\n %make\\ninstall : |\\n %make_install\\n```\\n\\nOkay, looks to be a quite simple affair. A simple configure, make, make install as well as `emul32` being enabled specifying the -32bit packages are also provided from this recipe. Next step is to look for a repeatable and easy way to benchmark it. We\'ll begin by looking at the `pspec_x86_64.xml` file which lists all the files produced from the `package.yml` recipe as well as some metadata.\\n\\n```xml\\n <Name>libwebp</Name>\\n <Summary xml:lang=\\"en\\">A new image format for the web</Summary>\\n <Description xml:lang=\\"en\\">WebP is a new image format that provides lossless and lossy compression for images on the web. WebP lossless images are 26% smaller in size compared to PNGs. WebP lossy images are 25-34% smaller in size compared to JPEG images at equivalent SSIM index. WebP supports lossless transparency (also known as alpha channel) with just 22% additional bytes. Transparency is also supported with lossy compression and typically provides 3x smaller file sizes compared to PNG when lossy compression is acceptable for the red/green/blue color channels.\\n</Description>\\n <PartOf>multimedia.codecs</PartOf>\\n <Files>\\n <Path fileType=\\"executable\\">/usr/bin/cwebp</Path>\\n <Path fileType=\\"executable\\">/usr/bin/dwebp</Path>\\n <Path fileType=\\"executable\\">/usr/bin/gif2webp</Path>\\n <Path fileType=\\"executable\\">/usr/bin/img2webp</Path>\\n <Path fileType=\\"executable\\">/usr/bin/vwebp</Path>\\n <Path fileType=\\"executable\\">/usr/bin/webpinfo</Path>\\n <Path fileType=\\"executable\\">/usr/bin/webpmux</Path>\\n```\\n\\nPerfect, we have `dwebp` and `cwebp` binaries available in the main package, which from a guess can be used to decode and encode `.webp` files. Let\'s try it out.\\n\\n```\\n$ dwebp -h\\nUsage: dwebp in_file [options] [-o out_file]\\n\\nDecodes the WebP image file to PNG format [Default].\\nNote: Animated WebP files are not supported.\\n$ cwebp -h\\nUsage:\\n\\n cwebp [options] -q quality input.png -o output.webp\\n```\\n\\nAwesome, these binaries do exactly what we need to benchmark `libwebp`, but, we are also indirectly testing `libpng` as well for this benchmark, we\'ll have to keep an eye out for that.\\n\\nOne extra step we have to do is ensure these binaries are actually linking against their own library, as upstream developers can have a habit of making sure their binaries don\'t link against their own libraries and end up being self-contained. Run `ldd` to verify.\\n\\n\x3c!-- spellchecker:disable --\x3e\\n\\n```\\n$ ldd /usr/bin/dwebp\\n\\tlinux-vdso.so.1 (0x00007ffed8733000)\\n\\tlibwebpdemux.so.2 => /usr/lib/libwebpdemux.so.2.0.14 (0x00007f7473bb4000)\\n\\tlibwebp.so.7 => /usr/lib/libwebp.so.7.1.8 (0x00007f7473ae2000)\\n\\tlibpng16.so.16 => /usr/lib/libpng16.so.16 (0x00007f7473aa6000)\\n\\tlibc.so.6 => /usr/lib/glibc-hwcaps/x86-64-v3/libc.so.6 (0x00007f74738a9000)\\n\\tlibsharpyuv.so.0 => /usr/lib/libsharpyuv.so.0.0.1 (0x00007f747389e000)\\n\\tlibm.so.6 => /usr/lib/glibc-hwcaps/x86-64-v3/libm.so.6 (0x00007f74737b8000)\\n\\tlibz.so.1 => /usr/lib/libz.so.1.3.0 (0x00007f7473200000)\\n\\t/usr/lib64/ld-linux-x86-64.so.2 (0x00007f7473bea000)\\n```\\n\\n\x3c!-- spellchecker:enable --\x3e\\n\\nAwesome in this case both `dwebp` and `cwebp` link against `libwebp.so` so we can be confident that any performance improvements will be applicable to all packages in the repository linking against `libwebp`.\\n\\nLet\'s grab a couple of `.webp` files from [here](https://developers.google.com/speed/webp/gallery1) to test with. We\'ll just use the largest image size available in this case to reduce noise as much as possible when running benchmarks as well as allow any potential optimizations to stretch their legs a little more.\\n\\nNow having done the prep work, lets actually benchmark the damn thing using `hyperfine` for the time being.\\n\\n```\\n$ hyperfine \\"dwebp ~/3.webp -o /dev/null\\"\\nBenchmark 1: dwebp ~/3.webp -o /dev/null\\n Time (mean \xb1 \u03c3): 202.2 ms \xb1 0.3 ms [User: 198.9 ms, System: 3.0 ms]\\n Range (min \u2026 max): 201.8 ms \u2026 202.7 ms 14 runs\\n$ hyperfine \\"cwebp ~/PNG_Test.png -o /dev/null\\"\\nBenchmark 1: cwebp ~/PNG_Test.png -o /dev/null\\n Time (mean \xb1 \u03c3): 1.423 s \xb1 0.009 s [User: 1.346 s, System: 0.076 s]\\n Range (min \u2026 max): 1.410 s \u2026 1.435 s 10 runs\\n```\\n\\nThere, we have our a basic baseline for encode and decode performance. We mostly care about decode performance here but improved encoding performance would also not go amiss.\\n\\n## Let\'s Start Obvious\\n\\nLet\'s start basic, enabling the `speed` optimization which basically builds with `-O3` instead of `-O2` as well as any other flags that are deemed to be worthy to be part of the `speed` group. As well as, the `lto` optimization which builds with link time optimization allowing for inter-procedural optimizations to take place.\\n\\n\x3c!-- prettier-ignore --\x3e\\n```yaml\\noptimize:\\n - speed\\n - lto\\n```\\n\\nMoment of truth...\\n\\n```\\n$ hyperfine \\"dwebp ~/3.webp -o /dev/null\\"\\nBenchmark 1: dwebp ~/3.webp -o /dev/null\\n Time (mean \xb1 \u03c3): 200.0 ms \xb1 1.5 ms [User: 197.3 ms, System: 2.5 ms]\\n Range (min \u2026 max): 198.1 ms \u2026 203.2 ms 15 runs\\n$ hyperfine \\"cwebp ~/PNG_Test.png -o /dev/null\\"\\nBenchmark 1: cwebp ~/PNG_Test.png -o /dev/null\\n Time (mean \xb1 \u03c3): 1.353 s \xb1 0.012 s [User: 1.281 s, System: 0.071 s]\\n Range (min \u2026 max): 1.336 s \u2026 1.369 s 10 runs\\n```\\n\\nWell okay, we got a very minor uplift in decoding performance and a slightly higher improvement in encoding performance, but nothing too much to write home about. Luckily we have several more optimizations to explore...\\n\\n## PGO is great, except, when it isn\'t.\\n\\nNext step is to explore PGO (Profile Guided Optimization). For our `libwebp` package, looks like we already hit a bit of a snafu. There\'s no test suite included in the tarball! That\'s a bit of a disappointment as a test suite such as `make check` is by far and away the easiest and most comprehensive workload that can be used for profiling as part of PGO, especially for smaller libraries. However, we can still experiment with the just built `dwebp` and `cwebp` binaries as a suitable workload for PGO.\\n\\nLuckily, as part of the package.yml format all you have to do is provide a profile for automatic PGO. After chrooting into the build environment and fiddling around a bit we end up with:\\n\\n\x3c!-- prettier-ignore --\x3e\\n```yaml\\nprofile : |\\n ./examples/dwebp webp_js/test_webp_js.webp -o test_png.png\\n ./examples/cwebp test_png.png -o /dev/null\\n```\\n\\nAfter specifying that, 6 builds will now be performed instead of 2:\\n\\n- emul32:\\n - Instrumented build\\n - Run profiling workload\\n - Optimized build using profiling data\\n- x86_64:\\n - Instrumented build\\n - Run profiling workload\\n - Optimized build using profiling data\\n\\nFor this relatively small package it increases the build time from 1m1.672s to 1m42.199s\\n\\nThe next moment of truth...\\n\\n```\\n$ hyperfine \\"dwebp ~/3.webp -o /dev/null\\"\\nBenchmark 1: dwebp ~/3.webp -o /dev/null\\n Time (mean \xb1 \u03c3): 204.1 ms \xb1 2.2 ms [User: 201.3 ms, System: 2.7 ms]\\n Range (min \u2026 max): 201.6 ms \u2026 207.1 ms 14 runs\\n$ hyperfine \\"cwebp ~/PNG_Test.png -o /dev/null\\"\\nBenchmark 1: cwebp ~/PNG_Test.png -o /dev/null\\n Time (mean \xb1 \u03c3): 1.349 s \xb1 0.010 s [User: 1.266 s, System: 0.082 s]\\n Range (min \u2026 max): 1.335 s \u2026 1.374 s 10 runs\\n```\\n\\nWell... That\'s interesting. We actually regress in performance for decode performance whilst gaining another small bump in encoding performance. Worse still, we get a bunch of `profile count data file not found [-Wmissing-profile]` warning messages during the optimized build indicating to us our profiling workload isn\'t comprehensive enough and doesn\'t cover enough code paths. The lack of a handy `make check` that could be used as a profiling workload is really hurting us here. For now, let\'s put a pin in exploring PGO, it isn\'t a dead end but more work needs to be done curating a more comprehensive workload to chuck at it in this particular case, whilst other, easier, optimization techniques are still available to us.\\n\\n\x3c!-- cspell:disable-next-line --\x3e\\n\\n## 256 Vector Units go brrrrrr...\\n\\nThe next obvious step is to explore `glibc` hardware capabilities. For those unaware both `clang` and `gnu` compilers provide `x86_64-v2`, `x86_64-v3` and `x86_64-v4` micro-architecture build options on top of the baseline of `x86_64`. These enable the use of targeting additional CPU instruction sets during compilation for better performance. For example, `-sse4.2` for `x86_64-v2`, `-avx2` for `x86_64-v3`, and `-avx512` for `x86_64-v4`.\\n\\nWhilst that\'s great \'n all, if a program is built with `x86_64-v3` and gains an additional ~10% uplift in performance, it\'s no good if a `x86_64-v2` compatible cpu can\'t run it. Luckily the `glibc` loader that\'s found on almost general purpose linux installs provides a way to load higher or lower micro-architecture libraries if they\'re installed and supported.\\n\\nOn top of all that, the `package.yml` format provides an incredibly simple way of providing `x86_64-v3` built libraries by enabling the `avx2 : yes` flag.\\n\\nWith `avx2 : yes` enabled in the `libwebp` package three builds are performed.\\n\\n- emul32\\n- x86_64-v3\\n- x86_64\\n\\nWe now see these additional files in the `pspec_x86_64.xml` file\\n\\n```diff\\n+ <Path fileType=\\"library\\">/usr/lib64/glibc-hwcaps/x86-64-v3/libsharpyuv.so.0</Path>\\n+ <Path fileType=\\"library\\">/usr/lib64/glibc-hwcaps/x86-64-v3/libsharpyuv.so.0.0.1</Path>\\n+ <Path fileType=\\"library\\">/usr/lib64/glibc-hwcaps/x86-64-v3/libwebp.so.7</Path>\\n+ <Path fileType=\\"library\\">/usr/lib64/glibc-hwcaps/x86-64-v3/libwebp.so.7.1.8</Path>\\n+ <Path fileType=\\"library\\">/usr/lib64/glibc-hwcaps/x86-64-v3/libwebpdecoder.so.3</Path>\\n+ <Path fileType=\\"library\\">/usr/lib64/glibc-hwcaps/x86-64-v3/libwebpdecoder.so.3.1.8</Path>\\n+ <Path fileType=\\"library\\">/usr/lib64/glibc-hwcaps/x86-64-v3/libwebpdemux.so.2</Path>\\n+ <Path fileType=\\"library\\">/usr/lib64/glibc-hwcaps/x86-64-v3/libwebpdemux.so.2.0.14</Path>\\n+ <Path fileType=\\"library\\">/usr/lib64/glibc-hwcaps/x86-64-v3/libwebpmux.so.3</Path>\\n+ <Path fileType=\\"library\\">/usr/lib64/glibc-hwcaps/x86-64-v3/libwebpmux.so.3.0.13</Path>\\n```\\n\\nLet\'s rerun `lld` on `dwebp` after installing the new package and...\\n\\n\x3c!-- spellchecker:disable --\x3e\\n\\n```\\n$ ldd /usr/bin/dwebp\\n\\tlinux-vdso.so.1 (0x00007ffeab5b1000)\\n\\tlibwebpdemux.so.2 => /usr/lib/glibc-hwcaps/x86-64-v3/libwebpdemux.so.2.0.14 (0x00007f9a351d5000)\\n\\tlibwebp.so.7 => /usr/lib/glibc-hwcaps/x86-64-v3/libwebp.so.7.1.8 (0x00007f9a3510b000)\\n\\tlibpng16.so.16 => /usr/lib/libpng16.so.16 (0x00007f9a350cf000)\\n\\tlibc.so.6 => /usr/lib/glibc-hwcaps/x86-64-v3/libc.so.6 (0x00007f9a34ed2000)\\n\\tlibsharpyuv.so.0 => /usr/lib/glibc-hwcaps/x86-64-v3/libsharpyuv.so.0.0.1 (0x00007f9a34ec1000)\\n\\tlibm.so.6 => /usr/lib/glibc-hwcaps/x86-64-v3/libm.so.6 (0x00007f9a34ddb000)\\n\\tlibz.so.1 => /usr/lib/glibc-hwcaps/x86-64-v3/libz.so.1.3 (0x00007f9a34dbb000)\\n\\t/usr/lib64/ld-linux-x86-64.so.2 (0x00007f9a3520b000)\\n```\\n\\n\x3c!-- spellchecker:enable --\x3e\\n\\nWe can crucially see that `dwebp` is now loading the `x86-64-v3` built `libwebp.so` lib from `/usr/lib/glibc-hwcaps/x86-64-v3/libwebp.so.7.1.8`, success! Let\'s what our performance looks like.\\n\\n```\\n$ hyperfine \\"dwebp ~/3.webp -o /dev/null\\"\\nBenchmark 1: dwebp ~/3.webp -o /dev/null\\n Time (mean \xb1 \u03c3): 198.2 ms \xb1 1.2 ms [User: 195.4 ms, System: 2.5 ms]\\n Range (min \u2026 max): 197.0 ms \u2026 200.5 ms 14 runs\\n$ hyperfine \\"cwebp ~/PNG_Test.png -o /dev/null\\"\\nBenchmark 1: cwebp ~/PNG_Test.png -o /dev/null\\n Time (mean \xb1 \u03c3): 1.313 s \xb1 0.009 s [User: 1.243 s, System: 0.078 s]\\n Range (min \u2026 max): 1.308 s \u2026 1.341 s 10 runs\\n```\\n\\nLet\'s recap so far:\\n\\n| Optimization | Decode | Encode | Size |\\n| ----------------------- | ------------------ | ------- | ------- |\\n| Baseline | 202.2 ms | 1.399 s | 1.33 MB |\\n| Speed + LTO | 200.0 ms | 1.353 s | 1.73 MB |\\n| Speed + LTO + PGO | 204.1 ms :warning: | 1.349 s | 1.07 MB |\\n| Speed + LTO + x86_64-v3 | 198.2 ms | 1.313 s | 3.17 MB |\\n\\nWhilst we\'re still getting an additional speedup it isn\'t really anything to write home about. A measly ~2% improvement in decoding performance and a fairly respectable ~7% improvement in encoding performance for our test case. However, increasing the package size by an extra ~2MiB from providing a bunch of extra libs in `/usr/lib/glibc-hwcaps/x86-64-v3/` just ain\'t worth it. This hints that either the compiler optimizations aren\'t really effective here or we\'re being bottle-necked by something else.\\n\\nSo far, we\'ve been benchmarking fairly simply using `hyperfine`, let\'s swap that out for `perf` so we can get a callgraph.\\n\\n## Something about `perf` to the rescue\\n\\n`perf record -o dwebp.data -- dwebp ~/3.webp -o /dev/null`\\n\\n`perf record -o cwebp.data -- cwebp ~/PNG_Test.png -o /dev/null`\\n\\nLet\'s look at `dwebp` first with `perf report -i dwebp.data`.\\n\\n![Perf report dwebp](img/2024-02-09-intro-to-optimizing/perf_report_dwebp_png.webp)\\n\\nWell god damn, literally all of our time is being spent in `libz.so` it\'s no wonder our compiler optimizations were hardly improving performance.\\n\\nLet\'s also look at the `cwebp` report, we\'ve generally been getting better results from it.\\n\\n![Perf report cwebp](img/2024-02-09-intro-to-optimizing/perf_report_cwebp_png.webp)\\n\\nOkay, much more of our time is being spent in `libwebp.so` itself here which helps to explain why we were seeing a better performance uplift. Still 5.68% of our time is being spent in `libz`.\\n\\n## Choosing Wisely\\n\\nYou may remember early on, when I said we are also indirectly testing `libpng`. Well... after some more digging, that\'s exactly what\'s happening here. Re-running the `dwebp` binary it says this\\n\\n> Decodes the WebP image file to PNG format\\n\\nTurns out, it\'s more accurate to say we are _directly_ testing `libpng` and by extension `zlib`. It isn\'t `libwebp` that\'s spending all of its time in `libz.so`, it\'s `libpng`! This is exactly the reason you have to be careful about the benchmarks chosen and, ensure you understand what they\'re doing.\\n\\nHowever, the good news about this little snafu is:\\n\\n1. `dwebp` can be used to translate to another image format such as `.yuv` that\'ll more accurately remove the bottleneck from `libz.so`.\\n2. We now know that `libpng` has a huge bottleneck in `libz.so` and speeding up `zlib` _should_ dramatically speed up `libpng` performance.\\n\\n## Adjusting the Benchmark\\n\\nAfter reverting the `libwebp` package to the baseline let\'s use our adjusted decoding benchmark.\\n\\nWe\'ll now use `dwebp ~/3.webp -yuv -o /dev/null` for a decoding test, let\'s run that with `perf` to ensure we\'re exclusively testing `libwebp.so` here.\\n\\n![Perf report dwebp to yuv](img/2024-02-09-intro-to-optimizing/perf_report_dwebp_yuv.webp)\\n\\nOkay that\'s awesome, no `libpng.so` or `libz.so` to mess with our tests!\\n\\nLet\'s reapply our optimizations, keeping those which apply an uplift\\n\\n| Optimization | Decode | Size |\\n| ----------------------- | ----------------- | ------- |\\n| Baseline | 14.7 ms | 1.33 MB |\\n| Speed | 14.5 ms | 1.56 MB |\\n| LTO | 14.6 ms | 1.40 MB |\\n| PGO | 18.0 ms :warning: | 1.07 MB |\\n| x86-64-v3 | 12.7 ms | 2.35 MB |\\n| Speed + LTO + x86-64-v3 | 12.3 ms | 3.17 MB |\\n\\nOkay, this is great, whilst we aren\'t getting much from speed or LTO, we are getting a big uplift from x86-64-v3 libraries and when combined with the other optimizations we\'re getting an uplift in performance of around ~16% at the cost of close to thrice the installed package size.\\n\\n### Partial Profiling\\n\\nOnce again we see that PGO regresses performance hard, however, that smaller size is giving a good hint! We already know that the profiling workload we gave it isn\'t very comprehensive due to the bunch of `-Wmissing-profile` warnings we get during the optimized build. By default, PGO will aggressively inline and apply additional optimizations to code that\'s part of the profiling workload while everything else will be optimized for size. The idea being, hot-path code is fast and code that doesn\'t matter is small. However, what happens when you can\'t craft a comprehensive workload, as seems to be the case here? Luckily GCC has a flag for exactly that `-fprofile-partial-training`. GCC docs state that:\\n\\n> In some cases it is not practical to train all possible hot paths in the program. (For example, program may contain functions specific for a given hardware and training may not cover all hardware configurations program is run on.) With -fprofile-partial-training profile feedback will be ignored for all functions not executed during the train run leading them to be optimized as if they were compiled without profile feedback. This leads to better performance when train run is not representative but also leads to significantly bigger code.\\n\\nOkay, let\'s try it out, all we need to do is specify in our `package.yml` recipe.\\n\\n\x3c!-- prettier-ignore --\x3e\\n```yaml\\nenvironment: |\\n if [[ -n ${PGO_USE_BUILD} ]]; then\\n export CFLAGS=\\"${CFLAGS} -fprofile-partial-training\\"\\n export CXXFLAGS=\\"${CXXFLAGS} -fprofile-partial-training\\"\\n fi\\n```\\n\\nAnd the results:\\n\\n| Optimization | Decode | Size |\\n| ------------------------------------- | ------- | ------- |\\n| Speed + LTO + x86-64-v3 | 12.3 ms | 3.17 MB |\\n| Speed + LTO + x86-64-v3 + Partial PGO | 12.5 ms | 3.13 MB |\\n\\nWell, it was worth a try. This highlights how useless PGO can be when you don\'t or can\'t provide it a good workload. Interestingly, we don\'t get the size bloat that was promised, in fact, the opposite.\\n\\n# Final libwebp Results\\n\\n| Benchmark | Time Before | Time After | Size Before | Size After |\\n| ----------------------------------- | ----------- | ---------- | ----------- | ---------- |\\n| \\"dwebp ~/3.webp -yuv -o /dev/null\\" | 14.5 ms | 12.3 ms | 1.33 MB | 3.17 MB |\\n| \\"cwebp ~/PNG_Test.png -o /dev/null\\" | 1.399 s | 1.313 s | -- | -- |\\n\\nIn the end, we get a very healthy ~16% improvement in decoding from a .webp to .yuv file. As well as a respectable 6% improvement in encoding from a .png to .webp file. However, the increased package size is very unfortunate. It\'s possible to tweak the x86-64-v3 build and only ship the libs that actually improve performance in order to get the installed size back to an acceptable level.\\n\\n# \\"Next-Generation\\" Side Quest\\n\\nNow, you probably remember earlier due to our unrepresentative benchmark we found out that `libpng` is getting highly bottlenecked by `libz.so`. This now seems like a perfect opportunity to take a look at zlib and circle-back to our original benchmark that we were using.\\n\\nZlib is widely employed throughout the ecosystem and, as such you\'d think it would be highly-optimized for performance. However, that isn\'t really the case. Zlib is written in an old-fashioned way of C and tries to be _extremely_ portable; supporting dozens of systems that have fallen out of common use. As such, it\'s hard to apply architecture specific optimizations that wouldn\'t break some old system or without introducing code spaghetti. There have been a couple of attempts to merge AArch64 and x86_64 optimizations into the canonical zlib library without success.\\n\\nHowever, there is some light in this tunnel as various forks of zlib having been popping up, applying new optimizations on top of zlib. The most promising of these looks be to [zlib-ng](https://github.com/zlib-ng/zlib-ng/). When built in compatible mode, it promises to be API compatible with canonical zlib and _tries_ to be as ABI compatible as possible.\\n\\nLet\'s just go for it, replacing Solus\' `zlib` package with zlib-ng built in compatible mode. It\'s a bit scary due to how integral zlib is in a typical Linux install, but, how hard could it be?\\n\\n\x3c!-- cspell:disable-next-line --\x3e\\n\\n## I Zee a Purty lil\' Package\\n\\nWell that was simple. Here\'s what our zlib-ng `package.yml` recipe looks like.\\n\\n\x3c!-- spellchecker:disable --\x3e\\n\x3c!-- prettier-ignore --\x3e\\n```yaml\\nname : zlib\\nversion : 2.1.5\\nrelease : 28\\nsource :\\n - https://github.com/zlib-ng/zlib-ng/archive/refs/tags/2.1.5.tar.gz : 3f6576971397b379d4205ae5451ff5a68edf6c103b2f03c4188ed7075fbb5f04\\nhomepage : https://github.com/zlib-ng/zlib-ng\\nlicense : ZLIB\\ncomponent : system.base\\nsummary : zlib replacement with optimizations for next generation systems.\\ndescription:\\n - A zlib data compression library for the next generation systems. ABI/API compatible mode.\\ndevel : yes\\nemul32 : yes\\nsetup : |\\n %cmake_ninja \\\\\\n -DZLIB_COMPAT=ON \\\\\\n -DWITH_GTEST=OFF \\\\\\n -DBUILD_SHARED_LIBS=ON \\\\\\n -DINSTALL_LIB_DIR=%libdir%\\nbuild : |\\n %ninja_build\\ninstall : |\\n %ninja_install\\ncheck : |\\n %ninja_check\\n```\\n\\n\x3c!-- spellchecker:enable --\x3e\\n\\nAfter building it, all the files seem to be in the right place and the test suite is passing. Let\'s just install it overwriting our canonical `zlib` package and hope our system doesn\'t die... I think the word is YOLO.\\n\\n```\\n$ hyperfine \\"dwebp ~/3.webp -o /dev/null\\"\\nBenchmark 1: dwebp ~/3.webp -o /dev/null\\n Time (mean \xb1 \u03c3): 198.6 ms \xb1 2.3 ms [User: 194.3 ms, System: 3.6 ms]\\n Range (min \u2026 max): 196.3 ms \u2026 203.3 ms 14 runs\\n$ sudo eopkg it zlib-2.1.5-28-1-x86_64.eopkg\\n...\\n$ $ hyperfine \\"dwebp ~/3.webp -o /dev/null\\"\\nBenchmark 1: dwebp ~/3.webp -o /dev/null\\n Time (mean \xb1 \u03c3): 87.6 ms \xb1 0.7 ms [User: 84.7 ms, System: 2.6 ms]\\n Range (min \u2026 max): 86.5 ms \u2026 88.7 ms 33 runs\\n```\\n\\nWell, hot diggity damn. Swapping out the zlib package for a more performant variant has instantly more than halved(!!) our decoding time.\\n\\nWe need to find a more contained `libpng` benchmark here that removes the `libwebp` stuff to really confirm the findings here. After some sleuthing the `libpng` source repository has a [pngtopng.c](https://github.com/glennrp/libpng/blob/libpng16/contrib/examples/pngtopng.c) file we can compile to use the system libpng library.\\n\\nChanging the header from `#include \\"../../png.h\\"` to `#include <png.h>` then running `gcc -Ofast pngtopng.c -lpng16 -o pngtopng` to compile it, we have a libpng benchmark. We can reuse our test .png file from earlier. Ending up with: `./pngtopng ~/PNG_Test.png /dev/null` for our benchmark.\\n\\n| Library | Time |\\n| ---------------- | -------- |\\n| zlib (canonical) | 1.464 s |\\n| zlib-ng (compat) | 896.6 ms |\\n\\nWell. This is pretty much inline with our flawed `dwebp` benchmark from earlier. Swapping out zlib almost halves `libpng` decoding time.\\n\\n## Squeezing more from zlib-ng\\n\\nHowever, we\'re not done yet. We still have our compiler optimizations available to us to squeeze more performance from `zlib-ng`.\\n\\n| Optimization | Decode | Size |\\n| ----------------------------- | -------- | --------- |\\n| Baseline | 896.6 ms | 141.00 KB |\\n| Speed | 883.6 ms | 182.00 KB |\\n| LTO | 892.7 ms | 133.00 KB |\\n| PGO | 894.6 ms | 141.00 KB |\\n| x86-64-v3 | 892.5 ms | 295.00 KB |\\n| Speed + LTO | 882.6 ms | 170.00 KB |\\n| Speed + LTO + PGO + x86-64-v3 | 882.5 ms | 250.00 KB |\\n\\nIt looks like in this case the simple speed + LTO optimizations is the way to go. Speed gives the majority of the speedup but LTO helps bring back down the package size again. However, it\'s only a 1.5% improvement from baseline for this benchmark. We can always re-benchmark it later, testing zlib performance more directly instead of via libpng. It shows how good a job the zlib-ng developers have done that it\'s so performant right out of the gate.\\n\\n# Final Words\\n\\nWe\'ve shown the process of how a package can be optimized in Solus, through the failings and wins here I hope some good tips and tricks were provided in avoiding common pitfalls. Additional benchmarking strategies such as BOLT or Polly optimizations were not discussed and it\'ll be good material for a future blog post.\\n\\nSome other important things such as tweaking the system for benchmarking in order to get representative and consistent results were also not discussed. This is especially important in power budget constrained systems such as laptops and worth bearing in mind.\\n\\nRegardless, I hope the story of how `libwebp` was optimized for was entertaining and some things were learnt for anyone looking to optimize packages in Solus for the future."},{"id":"don\'t-call-me-mate-pal","metadata":{"permalink":"/blog/don\'t-call-me-mate-pal","source":"@site/devlog/2024-01-29-dont-call-me-mate.md","title":"Don\'t call me MATE, pal!","description":"Back in our 4.4 release post we announced that Solus would stop shipping a MATE ISO, mostly because MATE showed no signs of moving away from X11 and towards wayland. At the beginning of this year, we shipped our new XFCE ISO as a beta. And now we\'re getting ready to ship the Solus MATE Transition Tool to move existing users off of MATE.","date":"2024-01-29T00:00:00.000Z","tags":[{"inline":true,"label":"MATE","permalink":"/blog/tags/mate"},{"inline":true,"label":"devlog","permalink":"/blog/tags/devlog"},{"inline":true,"label":"solus","permalink":"/blog/tags/solus"}],"readingTime":2.645,"hasTruncateMarker":true,"authors":[{"name":"David Harder","title":"Solus Staff","page":{"permalink":"/blog/authors/david"},"socials":{"github":"https://github.com/davidjharder"},"imageURL":"https://avatars.githubusercontent.com/u/23007135","key":"david"}],"frontMatter":{"title":"Don\'t call me MATE, pal!","slug":"don\'t-call-me-mate-pal","authors":"david","tags":["MATE","devlog","solus"],"hide_table_of_contents":false},"unlisted":false,"prevItem":{"title":"Intro to Optimizing Packages on Solus","permalink":"/blog/solus-optimizing-packages"},"nextItem":{"title":"eopkg is dead, long live eopkg","permalink":"/blog/eopkg-is-dead-long-live-eopkg"}},"content":"Back in our [4.4 release post](https://getsol.us/2023/07/08/solus-4-4-released/) we announced that Solus would stop shipping a MATE ISO, mostly because MATE showed no signs of moving away from X11 and towards wayland. At the beginning of this year, we shipped our new XFCE ISO as a beta. And now we\'re getting ready to ship the _Solus MATE Transition Tool_ to move existing users off of MATE.\\n\\n\x3c!-- truncate --\x3e\\n\\n## The problem\\n\\nMATE and XFCE are similar enough that eager Solusians can, and have, installed XCFE on their MATE machines with nothing more than a couple of `eopkg` commands. We\'re pretty sure our resident `bash` script enthusiast (ermo) could hammer out a working transition script in an evening. But we want a more polished experience. We know _you_ follow Solus news; after all, you\'re reading this. However, we assume there are users who dutifully update their systems, but have no interest in keeping up with our blog posts. How do we get their attention and prompt them to move away from MATE?\\n\\n## Introducing the Solus MATE Transition Tool\\n\\nWe\'re pleased to show off the _MATE Transition Tool_, which we plan to include in normal updates to MATE systems in the coming weeks. Most of the work on this tool was done by Joey; more on his efforts in the section below. Here\'s how MATE users will encounter the tool:\\n\\n:::note\\n\\nThese screenshots are current as of the publishing of this post, we may change things as we continue testing.\\n\\n:::\\n\\n1. Users will get a notification on every start-up informing them that they need to transition away from MATE.\\n\\n![Notification: Solus Transition Service](img/2024-01-29-dont-call-me-mate/notification.png)\\n\\n2. Clicking on that notification will launch the Solus MATE Transition Tool.\\n\\n![MATE Transition Tool Launch](img/2024-01-29-dont-call-me-mate/MTT-launch.png)\\n\\n3. Users select either Solus Budgie or Solus XFCE. The tool installs the selected edition, removes MATE, and prompts for a reboot\\n4. The tool removes itself after a successful transition.\\n\\nSimple. At least, that\'s what we want users to think.\\n\\n## How the Mate Transition Tool is actually part of our Python2 work\\n\\nThe story of the MATE Transition Tool is actually tied up in our fight to drag `eopkg` into the current decade. As I wrote previously, we\'re somewhat embarrassed by the amount of Solus tooling which _still_ relies on Python2. One such tool is the Solus Software Center `solus-sc`. A while back, the team decided the sane thing to do was to ditch `solus-sc` in favor of _KDE Discover_ and _GNOME Software_ . This would have the additional benefit of promoting flatpak applications to first-class citizens. The problem is _Discover_ and _Software_ have no way to talk to our package manager `eopkg`. We need an API. Luckily, other projects have encountered the same issue, leading to [`packagekit`](https://www.freedesktop.org/software/PackageKit/pk-intro.html).\\n\\nJoey has been doing the dirty work of bolting `packagekit` support onto `eopkg`, and saw an opportunity: If `eopkg` could be upgraded to understand some of `packagekit`, then he could write a special-purpose application to move users off MATE without asking them to run scary bash scripts (sorry ermo). We\'re rather pleased with this solution. MATE users get a simple transition and Solus gets closer to checking `solus-sc` off [the list.](https://github.com/getsolus/packages/issues/270)"},{"id":"eopkg-is-dead-long-live-eopkg","metadata":{"permalink":"/blog/eopkg-is-dead-long-live-eopkg","source":"@site/devlog/2024-01-19-eopkg-is-dead.md","title":"eopkg is dead, long live eopkg","description":"Close watchers of our packages repository may have noticed some strange looking items:","date":"2024-01-19T00:00:00.000Z","tags":[{"inline":true,"label":"eopkg","permalink":"/blog/tags/eopkg"},{"inline":true,"label":"devlog","permalink":"/blog/tags/devlog"},{"inline":true,"label":"moss","permalink":"/blog/tags/moss"},{"inline":true,"label":"solus","permalink":"/blog/tags/solus"}],"readingTime":1.645,"hasTruncateMarker":true,"authors":[{"name":"David Harder","title":"Solus Staff","page":{"permalink":"/blog/authors/david"},"socials":{"github":"https://github.com/davidjharder"},"imageURL":"https://avatars.githubusercontent.com/u/23007135","key":"david"}],"frontMatter":{"title":"eopkg is dead, long live eopkg","slug":"eopkg-is-dead-long-live-eopkg","authors":"david","tags":["eopkg","devlog","moss","solus"],"hide_table_of_contents":false},"unlisted":false,"prevItem":{"title":"Don\'t call me MATE, pal!","permalink":"/blog/don\'t-call-me-mate-pal"},"nextItem":{"title":"Welcome to the Solus Devlog","permalink":"/blog/welcome-solus-devlog-v1"}},"content":"Close watchers of our [packages repository](https://github.com/getsolus/packages) may have noticed some strange looking items:\\n\\n- [Initial inclusion of eopkg4-bin](https://github.com/getsolus/packages/pull/1305)\\n- [Testing the eopkg4-bin package](https://github.com/getsolus/packages/issues/1316) Warning: Minions GIF\\n\\nIt\'s a long story.\\n\\n\x3c!-- truncate --\x3e\\n\\nOur package manager `eopkg` is written in Python2. Python2 was originally planned to hit end-of-life all the way back in 2015! So Solus contributors past and present have wrestled with three thorny issues:\\n\\n- Do we really want to just port `eopkg` to python3? Surely we could build something newer and shinier.\\n- How exactly do we want to port `eopkg` to Python3? (We\'ll call this ported version `eopkg3` for short)\\n- How do we make sure `eopkg3` works even if something goes wrong with the Python3 libraries on someone\'s machine?\\n\\nHere\'s the plan to solve this: Ikey and friends over at Serpent OS are actively building a new package manager [_moss_](https://github.com/serpent-os/moss) that we are excited about. And they\'re building it with Solus in mind as an eventual user. This will be our fix for the first problem. In the meantime, we\'re taking a pragmatic approach to the last two issues so that (frankly) we can do more exciting things.\\n\\nSheepman, Livingsilver, and others completed a [direct Python3 port](https://github.com/getsolus/eopkg/commits/python3), which we never expect our users to actually run directly like a traditional Python program. Instead, that port will be compiled into a _binary_ using [nuitka](https://nuitka.net/doc/download.html). We\'re calling this compiled `eopkg3` binary `eopkg4-bin` for now. Critically, this binary will have _no dependencies_ other than `libc`. If we can successfully swap `eopkg` with `eopkg4-bin` on user\'s machines, then we\'ve solved the last issue: Python3 can be updated without worrying about also wrecking the package manager. Got it?\\n\\nBut what about Python2? Well, now that Evan and Joey have seen off a [successful ISO release](https://getsol.us/2024/01/08/solus-4-5-released/) with a `calamares` based installer, we can cross `os-installer` [off the list](https://github.com/getsolus/packages/issues/270). And `eopkg4-bin` will let us cross off a whole bunch more. The rest of that list is a story for another day."},{"id":"welcome-solus-devlog-v1","metadata":{"permalink":"/blog/welcome-solus-devlog-v1","source":"@site/devlog/2024-01-13-welcome-devlog.md","title":"Welcome to the Solus Devlog","description":"Welcome to the Solus Development Log.","date":"2024-01-13T00:00:00.000Z","tags":[{"inline":true,"label":"hello","permalink":"/blog/tags/hello"},{"inline":true,"label":"devlog","permalink":"/blog/tags/devlog"},{"inline":true,"label":"firstpost","permalink":"/blog/tags/firstpost"},{"inline":true,"label":"solus","permalink":"/blog/tags/solus"}],"readingTime":0.9,"hasTruncateMarker":true,"authors":[{"name":"Joey Riches","title":"Solus Staff","page":{"permalink":"/blog/authors/joey"},"socials":{"github":"https://github.com/joebonrichie"},"imageURL":"https://avatars.githubusercontent.com/u/5338090","key":"joey"}],"frontMatter":{"title":"Welcome to the Solus Devlog","description":"Welcome to the Solus Development Log.","slug":"welcome-solus-devlog-v1","authors":"joey","tags":["hello","devlog","firstpost","solus"],"hide_table_of_contents":false},"unlisted":false,"prevItem":{"title":"eopkg is dead, long live eopkg","permalink":"/blog/eopkg-is-dead-long-live-eopkg"}},"content":"Welcome to the Solus Development Log.\\n\\nThe Solus Development Log will be used by Solus Staff and outside contributors to highlight wins and changes in Solus. Keep an eye on this space.\\n\\n\x3c!-- truncate --\x3e\\n\\nThe Solus DevLog has been setup to facilitate improved communication with the outside world; wins, significant changes, as well as challenges, within Solus. Solus Staff and contributors are encouraged to use this space.\\n\\nThe DevLog has been setup as a separate entity to the [Solus Blog](https://getsol.us/blog/) to encourage more short form development content that doesn\'t require the same level of polish as an official blog post.\\n\\nIt is hoped that this will be used to help communicate what\'s going on in Solus such that our short-term and medium-term progress, goals, and ambitions are less of a black box to the outside world.\\n\\nAdditionally, we believe it will help provide context to any of our murmurings for any users who keep an eye on the [getsolus](https://github.com/getsolus/) GitHub organization page and the [Solus](https://matrix.to/#/#solus:matrix.org) Matrix channels.\\n\\nHope to see you back at this space soon with more content!"}]}}')}}]); \ No newline at end of file diff --git a/assets/js/f82cd581.9acf415a.js b/assets/js/f82cd581.9acf415a.js new file mode 100644 index 000000000..5f9a035ed --- /dev/null +++ b/assets/js/f82cd581.9acf415a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([["1402"],{67553:function(e){e.exports=JSON.parse('{"tag":{"label":"hello","permalink":"/blog/tags/hello","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/hello","page":1,"postsPerPage":1,"totalPages":1,"totalCount":1,"blogDescription":"The Solus Development (b)log!","blogTitle":"Solus DevLog"}}')}}]); \ No newline at end of file diff --git a/assets/js/f82cd581.a3280881.js b/assets/js/f82cd581.a3280881.js deleted file mode 100644 index 1b79e57d0..000000000 --- a/assets/js/f82cd581.a3280881.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[8626],{56664:e=>{e.exports=JSON.parse('{"tag":{"label":"hello","permalink":"/blog/tags/hello","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/hello","page":1,"postsPerPage":1,"totalPages":1,"totalCount":1,"blogDescription":"The Solus Development (b)log!","blogTitle":"Solus DevLog"}}')}}]); \ No newline at end of file diff --git a/assets/js/f8dd8223.22ff61c6.js b/assets/js/f8dd8223.22ff61c6.js deleted file mode 100644 index 3fec27e39..000000000 --- a/assets/js/f8dd8223.22ff61c6.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[7212],{4606:(e,s,t)=>{t.r(s),t.d(s,{assets:()=>d,contentTitle:()=>o,default:()=>h,frontMatter:()=>a,metadata:()=>l,toc:()=>c});var n=t(85893),r=t(11151);const a={title:"PostgreSQL",summary:"A quick guide to using Postgres on Solus"},o="PostgreSQL server",l={id:"user/software/development/postgresql",title:"PostgreSQL",description:"PostgreSQL is an open source object-relational database system. The postgresql package in Solus includes the PostgreSQL library, client and server.",source:"@site/docs/user/software/development/postgresql.md",sourceDirName:"user/software/development",slug:"/user/software/development/postgresql",permalink:"/docs/user/software/development/postgresql",draft:!1,unlisted:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/software/development/postgresql.md",tags:[],version:"current",lastUpdatedAt:1732716912e3,frontMatter:{title:"PostgreSQL",summary:"A quick guide to using Postgres on Solus"},sidebar:"userSidebar",previous:{title:"Java",permalink:"/docs/user/software/development/java"},next:{title:"R and RStudio",permalink:"/docs/user/software/development/r-and-rstudio"}},d={},c=[{value:"Usage",id:"usage",level:2},{value:"Updating to 17",id:"updating-to-17",level:2}];function i(e){const s={a:"a",code:"code",h1:"h1",h2:"h2",header:"header",li:"li",ol:"ol",p:"p",pre:"pre",...(0,r.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(s.header,{children:(0,n.jsx)(s.h1,{id:"postgresql-server",children:"PostgreSQL server"})}),"\n",(0,n.jsxs)(s.p,{children:[(0,n.jsx)(s.a,{href:"https://www.postgresql.org/",children:"PostgreSQL"})," is an open source object-relational database system. The ",(0,n.jsx)(s.code,{children:"postgresql"})," package in Solus includes the PostgreSQL library, client and server."]}),"\n",(0,n.jsx)(s.h2,{id:"usage",children:"Usage"}),"\n",(0,n.jsx)(s.p,{children:"PostgreSQL can be installed either from the Software Center or via terminal:"}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-bash",children:"sudo eopkg install postgresql\n"})}),"\n",(0,n.jsx)(s.p,{children:"Management of the server can be done using Systemd:"}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-bash",children:"sudo systemctl enable postgresql # Start the server on boot\nsudo systemctl start postgresql # Start the server now\nsudo systemctl stop postgresql # Stop the server\n"})}),"\n",(0,n.jsx)(s.p,{children:"It is possible to connect to the database using the PostgreSQL user:"}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-bash",children:"sudo -u postgres psql\n"})}),"\n",(0,n.jsxs)(s.p,{children:["Note that all local connections are trusted and can access all databases by default. This can be changed in ",(0,n.jsx)(s.code,{children:"/var/db/pgsql/data/pg_hba.conf"}),", see the ",(0,n.jsx)(s.a,{href:"https://www.postgresql.org/docs/current/auth-pg-hba-conf.html",children:"PostgreSQL documentation"})," for more details."]}),"\n",(0,n.jsx)(s.h2,{id:"updating-to-17",children:"Updating to 17"}),"\n",(0,n.jsxs)(s.p,{children:["Because PostgreSQL is included as a single package, the only way to perform a major upgrade of PostgreSQL is via a backup/restore. The procedure below describes the upgrade process as it applies to Solus. See the ",(0,n.jsx)(s.a,{href:"https://www.postgresql.org/docs/17/upgrading.html#UPGRADING-VIA-PGDUMPALL",children:"PostgreSQL documentation"})," for more details."]}),"\n",(0,n.jsxs)(s.ol,{children:["\n",(0,n.jsx)(s.li,{children:"If you have already updated PostgreSQL, downgrade PostgreSQL back to 16.4:"}),"\n"]}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-bash",children:"sudo eopkg it https://cdn.getsol.us/repo/shannon/p/postgresql/postgresql-16.4-51-1-x86_64.eopkg \\\n https://cdn.getsol.us/repo/shannon/p/postgresql/postgresql-libpq-16.4-51-1-x86_64.eopkg\n"})}),"\n",(0,n.jsxs)(s.ol,{start:"2",children:["\n",(0,n.jsx)(s.li,{children:"(Re)start PostgreSQL:"}),"\n"]}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-bash",children:"sudo systemctl restart postgresql\n"})}),"\n",(0,n.jsxs)(s.ol,{start:"3",children:["\n",(0,n.jsx)(s.li,{children:"Create a backup of all current data:"}),"\n"]}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-bash",children:"sudo -u postgres pg_dumpall -f /tmp/backup.sql\n"})}),"\n",(0,n.jsxs)(s.p,{children:["The location of the backup may be one of your choosing, but keep in mind that the ",(0,n.jsx)(s.code,{children:"postgres"})," user needs to have write permissions on the given location."]}),"\n",(0,n.jsxs)(s.ol,{start:"4",children:["\n",(0,n.jsx)(s.li,{children:"Stop PostgreSQL:"}),"\n"]}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-bash",children:"sudo systemctl stop postgresql\n"})}),"\n",(0,n.jsxs)(s.ol,{start:"5",children:["\n",(0,n.jsx)(s.li,{children:"Rename the old data directory. This directory contains the old configuration and the original database, but requires significant disk space."}),"\n"]}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-bash",children:"sudo mv /var/db/pgsql/data /var/db/pgsql/data.old\n"})}),"\n",(0,n.jsxs)(s.ol,{start:"6",children:["\n",(0,n.jsx)(s.li,{children:"Create a new data directory:"}),"\n"]}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-bash",children:"sudo mkdir /var/db/pgsql/data\nsudo chown postgres: /var/db/pgsql/data\n"})}),"\n",(0,n.jsxs)(s.ol,{start:"7",children:["\n",(0,n.jsx)(s.li,{children:"Upgrade PostgreSQL:"}),"\n"]}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-bash",children:"sudo eopkg upgrade\n"})}),"\n",(0,n.jsxs)(s.ol,{start:"8",children:["\n",(0,n.jsx)(s.li,{children:"Start PostgreSQL:"}),"\n"]}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-bash",children:"sudo systemctl start postgresql\n"})}),"\n",(0,n.jsxs)(s.ol,{start:"9",children:["\n",(0,n.jsx)(s.li,{children:"Restore the data:"}),"\n"]}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-bash",children:"sudo -u postgres psql < /tmp/backup.sql\n"})}),"\n",(0,n.jsxs)(s.ol,{start:"10",children:["\n",(0,n.jsxs)(s.li,{children:["\n",(0,n.jsxs)(s.p,{children:["(optional) Update the configuration files in ",(0,n.jsx)(s.code,{children:"/var/db/pgsql/data"})," based on the configuration in ",(0,n.jsx)(s.code,{children:"/var/db/pgsql/data.old"}),". Restart PostgreSQL afterwards."]}),"\n"]}),"\n",(0,n.jsxs)(s.li,{children:["\n",(0,n.jsx)(s.p,{children:"Verify that the migration was successful and your data is there."}),"\n"]}),"\n",(0,n.jsxs)(s.li,{children:["\n",(0,n.jsx)(s.p,{children:"Remove the backup and data dump:"}),"\n"]}),"\n"]}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-bash",children:"sudo rm -r /var/db/pgsql/data.old /tmp/backup.sql\n"})})]})}function h(e={}){const{wrapper:s}={...(0,r.a)(),...e.components};return s?(0,n.jsx)(s,{...e,children:(0,n.jsx)(i,{...e})}):i(e)}},11151:(e,s,t)=>{t.d(s,{Z:()=>l,a:()=>o});var n=t(67294);const r={},a=n.createContext(r);function o(e){const s=n.useContext(a);return n.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function l(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:o(e.components),n.createElement(a.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/f8dd8223.50c5bc73.js b/assets/js/f8dd8223.50c5bc73.js new file mode 100644 index 000000000..1bfd15649 --- /dev/null +++ b/assets/js/f8dd8223.50c5bc73.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([["5466"],{2964:function(e,s,t){t.r(s),t.d(s,{metadata:()=>n,contentTitle:()=>l,default:()=>h,assets:()=>d,toc:()=>i,frontMatter:()=>o});var n=JSON.parse('{"id":"user/software/development/postgresql","title":"PostgreSQL","description":"PostgreSQL is an open source object-relational database system. The postgresql package in Solus includes the PostgreSQL library, client and server.","source":"@site/docs/user/software/development/postgresql.md","sourceDirName":"user/software/development","slug":"/user/software/development/postgresql","permalink":"/docs/user/software/development/postgresql","draft":false,"unlisted":false,"editUrl":"https://github.com/getsolus/help-center-docs/tree/master/docs/user/software/development/postgresql.md","tags":[],"version":"current","lastUpdatedAt":1733757592000,"frontMatter":{"title":"PostgreSQL","summary":"A quick guide to using Postgres on Solus"},"sidebar":"userSidebar","previous":{"title":"Java","permalink":"/docs/user/software/development/java"},"next":{"title":"R and RStudio","permalink":"/docs/user/software/development/r-and-rstudio"}}'),r=t("85893"),a=t("50065");let o={title:"PostgreSQL",summary:"A quick guide to using Postgres on Solus"},l="PostgreSQL server",d={},i=[{value:"Usage",id:"usage",level:2},{value:"Updating to 17",id:"updating-to-17",level:2}];function c(e){let s={a:"a",code:"code",h1:"h1",h2:"h2",header:"header",li:"li",ol:"ol",p:"p",pre:"pre",...(0,a.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(s.header,{children:(0,r.jsx)(s.h1,{id:"postgresql-server",children:"PostgreSQL server"})}),"\n",(0,r.jsxs)(s.p,{children:[(0,r.jsx)(s.a,{href:"https://www.postgresql.org/",children:"PostgreSQL"})," is an open source object-relational database system. The ",(0,r.jsx)(s.code,{children:"postgresql"})," package in Solus includes the PostgreSQL library, client and server."]}),"\n",(0,r.jsx)(s.h2,{id:"usage",children:"Usage"}),"\n",(0,r.jsx)(s.p,{children:"PostgreSQL can be installed either from the Software Center or via terminal:"}),"\n",(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-bash",children:"sudo eopkg install postgresql\n"})}),"\n",(0,r.jsx)(s.p,{children:"Management of the server can be done using Systemd:"}),"\n",(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-bash",children:"sudo systemctl enable postgresql # Start the server on boot\nsudo systemctl start postgresql # Start the server now\nsudo systemctl stop postgresql # Stop the server\n"})}),"\n",(0,r.jsx)(s.p,{children:"It is possible to connect to the database using the PostgreSQL user:"}),"\n",(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-bash",children:"sudo -u postgres psql\n"})}),"\n",(0,r.jsxs)(s.p,{children:["Note that all local connections are trusted and can access all databases by default. This can be changed in ",(0,r.jsx)(s.code,{children:"/var/db/pgsql/data/pg_hba.conf"}),", see the ",(0,r.jsx)(s.a,{href:"https://www.postgresql.org/docs/current/auth-pg-hba-conf.html",children:"PostgreSQL documentation"})," for more details."]}),"\n",(0,r.jsx)(s.h2,{id:"updating-to-17",children:"Updating to 17"}),"\n",(0,r.jsxs)(s.p,{children:["Because PostgreSQL is included as a single package, the only way to perform a major upgrade of PostgreSQL is via a backup/restore. The procedure below describes the upgrade process as it applies to Solus. See the ",(0,r.jsx)(s.a,{href:"https://www.postgresql.org/docs/17/upgrading.html#UPGRADING-VIA-PGDUMPALL",children:"PostgreSQL documentation"})," for more details."]}),"\n",(0,r.jsxs)(s.ol,{children:["\n",(0,r.jsx)(s.li,{children:"If you have already updated PostgreSQL, downgrade PostgreSQL back to 16.4:"}),"\n"]}),"\n",(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-bash",children:"sudo eopkg it https://cdn.getsol.us/repo/shannon/p/postgresql/postgresql-16.4-51-1-x86_64.eopkg \\\n https://cdn.getsol.us/repo/shannon/p/postgresql/postgresql-libpq-16.4-51-1-x86_64.eopkg\n"})}),"\n",(0,r.jsxs)(s.ol,{start:"2",children:["\n",(0,r.jsx)(s.li,{children:"(Re)start PostgreSQL:"}),"\n"]}),"\n",(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-bash",children:"sudo systemctl restart postgresql\n"})}),"\n",(0,r.jsxs)(s.ol,{start:"3",children:["\n",(0,r.jsx)(s.li,{children:"Create a backup of all current data:"}),"\n"]}),"\n",(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-bash",children:"sudo -u postgres pg_dumpall -f /tmp/backup.sql\n"})}),"\n",(0,r.jsxs)(s.p,{children:["The location of the backup may be one of your choosing, but keep in mind that the ",(0,r.jsx)(s.code,{children:"postgres"})," user needs to have write permissions on the given location."]}),"\n",(0,r.jsxs)(s.ol,{start:"4",children:["\n",(0,r.jsx)(s.li,{children:"Stop PostgreSQL:"}),"\n"]}),"\n",(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-bash",children:"sudo systemctl stop postgresql\n"})}),"\n",(0,r.jsxs)(s.ol,{start:"5",children:["\n",(0,r.jsx)(s.li,{children:"Rename the old data directory. This directory contains the old configuration and the original database, but requires significant disk space."}),"\n"]}),"\n",(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-bash",children:"sudo mv /var/db/pgsql/data /var/db/pgsql/data.old\n"})}),"\n",(0,r.jsxs)(s.ol,{start:"6",children:["\n",(0,r.jsx)(s.li,{children:"Create a new data directory:"}),"\n"]}),"\n",(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-bash",children:"sudo mkdir /var/db/pgsql/data\nsudo chown postgres: /var/db/pgsql/data\n"})}),"\n",(0,r.jsxs)(s.ol,{start:"7",children:["\n",(0,r.jsx)(s.li,{children:"Upgrade PostgreSQL:"}),"\n"]}),"\n",(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-bash",children:"sudo eopkg upgrade\n"})}),"\n",(0,r.jsxs)(s.ol,{start:"8",children:["\n",(0,r.jsx)(s.li,{children:"Start PostgreSQL:"}),"\n"]}),"\n",(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-bash",children:"sudo systemctl start postgresql\n"})}),"\n",(0,r.jsxs)(s.ol,{start:"9",children:["\n",(0,r.jsx)(s.li,{children:"Restore the data:"}),"\n"]}),"\n",(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-bash",children:"sudo -u postgres psql < /tmp/backup.sql\n"})}),"\n",(0,r.jsxs)(s.ol,{start:"10",children:["\n",(0,r.jsxs)(s.li,{children:["\n",(0,r.jsxs)(s.p,{children:["(optional) Update the configuration files in ",(0,r.jsx)(s.code,{children:"/var/db/pgsql/data"})," based on the configuration in ",(0,r.jsx)(s.code,{children:"/var/db/pgsql/data.old"}),". Restart PostgreSQL afterwards."]}),"\n"]}),"\n",(0,r.jsxs)(s.li,{children:["\n",(0,r.jsx)(s.p,{children:"Verify that the migration was successful and your data is there."}),"\n"]}),"\n",(0,r.jsxs)(s.li,{children:["\n",(0,r.jsx)(s.p,{children:"Remove the backup and data dump:"}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-bash",children:"sudo rm -r /var/db/pgsql/data.old /tmp/backup.sql\n"})})]})}function h(e={}){let{wrapper:s}={...(0,a.a)(),...e.components};return s?(0,r.jsx)(s,{...e,children:(0,r.jsx)(c,{...e})}):c(e)}},50065:function(e,s,t){t.d(s,{Z:function(){return l},a:function(){return o}});var n=t(67294);let r={},a=n.createContext(r);function o(e){let s=n.useContext(a);return n.useMemo(function(){return"function"==typeof e?e(s):{...s,...e}},[s,e])}function l(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:o(e.components),n.createElement(a.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/fb6dc457.58cf99c8.js b/assets/js/fb6dc457.58cf99c8.js deleted file mode 100644 index 36d1a1150..000000000 --- a/assets/js/fb6dc457.58cf99c8.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[5482],{77123:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>c,contentTitle:()=>a,default:()=>h,frontMatter:()=>s,metadata:()=>d,toc:()=>r});var t=i(85893),o=i(11151);const s={title:"Configuration",summary:"Help for configuring GNOME Shell on Solus"},a="Configuration",d={id:"user/editions/gnome/configuration",title:"Configuration",description:"System",source:"@site/docs/user/editions/gnome/configuration.md",sourceDirName:"user/editions/gnome",slug:"/user/editions/gnome/configuration",permalink:"/docs/user/editions/gnome/configuration",draft:!1,unlisted:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/editions/gnome/configuration.md",tags:[],version:"current",lastUpdatedAt:1732716912e3,frontMatter:{title:"Configuration",summary:"Help for configuring GNOME Shell on Solus"},sidebar:"userSidebar",previous:{title:"GNOME",permalink:"/docs/user/editions/gnome/"},next:{title:"Tips and Tricks",permalink:"/docs/user/editions/gnome/tips-and-tricks"}},c={},r=[{value:"System",id:"system",level:2},{value:"Date and time",id:"date-and-time",level:3},{value:"Default applications",id:"default-applications",level:3},{value:"Displays",id:"displays",level:2},{value:"Keyboard layout",id:"keyboard-layout",level:2},{value:"IBus",id:"ibus",level:3},{value:"Language",id:"language",level:2},{value:"Mouse and touchpad",id:"mouse-and-touchpad",level:2},{value:"Mouse",id:"mouse",level:3},{value:"Touchpad",id:"touchpad",level:3},{value:"Testing",id:"testing",level:3},{value:"Networking",id:"networking",level:2},{value:"Non-hidden network",id:"non-hidden-network",level:3},{value:"Hidden network",id:"hidden-network",level:3},{value:"Sound and sound devices",id:"sound-and-sound-devices",level:2},{value:"Settings",id:"settings",level:3},{value:"Users",id:"users",level:2},{value:"Adding a user",id:"adding-a-user",level:3},{value:"Removing a user",id:"removing-a-user",level:3},{value:"User interface",id:"user-interface",level:2},{value:"Desktop background",id:"desktop-background",level:3},{value:"Desktop icons",id:"desktop-icons",level:3},{value:"Workspaces",id:"workspaces",level:2},{value:"Keyboard Shortcuts",id:"keyboard-shortcuts",level:3}];function l(e){const n={a:"a",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",header:"header",img:"img",li:"li",p:"p",ul:"ul",...(0,o.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.header,{children:(0,t.jsx)(n.h1,{id:"configuration",children:"Configuration"})}),"\n",(0,t.jsx)(n.h2,{id:"system",children:"System"}),"\n",(0,t.jsx)(n.h3,{id:"date-and-time",children:"Date and time"}),"\n",(0,t.jsxs)(n.p,{children:["To change the date and time settings in GNOME, you can open the Overlay using the ",(0,t.jsx)(n.code,{children:"Super"}),' button on your keyboard or by clicking the applications icon in the dock and then finding and clicking on "Date & Time".']}),"\n",(0,t.jsx)(n.p,{children:'You will be presented with the following window. This window provides you with the ability to enable / disable automatic date & time, automatic time zone changing, and the time format. You will need to click on "Unlock" and input your user password before changes can be made.'}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"GNOME Date and Time",src:i(56935).Z+"",width:"742",height:"384"})}),"\n",(0,t.jsx)(n.p,{children:'If you wish to change how the time is displayed in the top panel, go back to the Applications Overlay and then find and click on "Tweak Tool". You can now show the date and / or seconds by opening the Top Bar section.'}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"GNOME Tweak Tool: Top Bar",src:i(94202).Z+"",width:"906",height:"656"})}),"\n",(0,t.jsx)(n.h3,{id:"default-applications",children:"Default applications"}),"\n",(0,t.jsxs)(n.p,{children:["With GNOME, you will need to open the Overlay using the ",(0,t.jsx)(n.code,{children:"Super"}),' button on your keyboard or by clicking the applications icon in the dock and then finding and clicking on "Details".']}),"\n",(0,t.jsx)(n.p,{children:'Upon entering the Details section, click on "Default Applications" and then use the drop down boxes to select a different default application for each category. For most categories, you will need to have installed alternative applications before you can change the default settings. For instance, if you wish to change the default video player from GNOME MPV to VLC then you must first install VLC (available in the Software Center).'}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"GNOME Default Applications",src:i(53885).Z+"",width:"742",height:"517"})}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.em,{children:"Note: In the image above, we've changed the Web browser and Photo viewer."})}),"\n",(0,t.jsx)(n.p,{children:'You can specify default applications for individual file types by right clicking on a file and then clicking on "Open With Other Application".'}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"GNOME Context Menu ",src:i(72964).Z+"",width:"324",height:"417"})}),"\n",(0,t.jsx)(n.p,{children:'Next, select the application you wish to use from the list. You may need to click "View All Applications" if you can\'t see the one you would like to use. Finish by clicking "Select". In the future, all files with the same file type will open with the same application.'}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"GNOME Application Selection",src:i(72191).Z+"",width:"426",height:"405"})}),"\n",(0,t.jsx)(n.h2,{id:"displays",children:"Displays"}),"\n",(0,t.jsx)(n.p,{children:'In GNOME, You can configure your display(s) simply by right clicking anywhere on the desktop and clicking "Display Settings".'}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"GNOME Desktop Context Menu",src:i(51729).Z+"",width:"210",height:"152"})}),"\n",(0,t.jsxs)(n.p,{children:["Alternatively, you can open the Overlay using the ",(0,t.jsx)(n.code,{children:"Super"}),' button on your keyboard or by clicking the applications icon in the dock and then finding and clicking on "Displays".']}),"\n",(0,t.jsx)(n.p,{children:"You will then be shown the following window."}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"GNOME Displays Overview",src:i(20241).Z+"",width:"742",height:"345"})}),"\n",(0,t.jsx)(n.p,{children:"Click on the individual display you wish to configure. You will now be able to select if you wish to use this monitor as the primary or secondary display, mirror it with another display, or turn it off. This window also gives you the size and aspect ratio, ability to rotate the display, and ability to change the resolution."}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"GNOME Individual Display Settings",src:i(94287).Z+"",width:"741",height:"365"})}),"\n",(0,t.jsx)(n.p,{children:"Going back to the Displays section, you also have the option to arrange your displays. Click the \u201cArrange Combined Displays\u201d button and then drag your displays so they are arranged to your liking."}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"GNOME Arrange Displays",src:i(59556).Z+"",width:"742",height:"381"})}),"\n",(0,t.jsx)(n.p,{children:'Click "Apply" once you are happy with your changes. You will be shown a message asking if the display looks OK, if it does, click on "Keep Changes" within 20 seconds.'}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"GNOME Confirm Display Settings",src:i(24798).Z+"",width:"502",height:"142"})}),"\n",(0,t.jsx)(n.h2,{id:"keyboard-layout",children:"Keyboard layout"}),"\n",(0,t.jsxs)(n.p,{children:["With GNOME, open the Overlay using the ",(0,t.jsx)(n.code,{children:"Super"}),' button on your keyboard or by clicking the applications icon in the dock and then find and click on "Region and Language".']}),"\n",(0,t.jsx)(n.p,{children:"You will now be shown the following dialog."}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"GNOME Region and Languages",src:i(92266).Z+"",width:"742",height:"345"})}),"\n",(0,t.jsxs)(n.p,{children:["Click the ",(0,t.jsx)(n.code,{children:"+"})," button to add an input source (keyboard layout). You will be shown the following dialog."]}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"GNOME Add Input Source",src:i(88175).Z+"",width:"742",height:"410"})}),"\n",(0,t.jsxs)(n.p,{children:["Here you can select the language and then keyboard layout within each language section. If it does not appear in this list, click the ",(0,t.jsx)(n.code,{children:"\u22ee"})," button (three vertical dots). This will enable you to search for the keyboard layout you wish to use."]}),"\n",(0,t.jsx)(n.p,{children:'After choosing the keyboard layout, click "Done". You will be brought back to the following dialog with your new keyboard layout. In the image below, we are now using English (US), Finnish, and Swedish layout.'}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"GNOME New Input Source Added",src:i(39324).Z+"",width:"742",height:"363"})}),"\n",(0,t.jsxs)(n.p,{children:["You can remove a keyboard layout by clicking on one of the items, for instance Swedish, then clicking the ",(0,t.jsx)(n.code,{children:"-"})," button."]}),"\n",(0,t.jsxs)(n.p,{children:["If you wish to use multiple keyboard layouts, you can switch between them by using the keyboard shortcut ",(0,t.jsx)(n.code,{children:"Super + Space"})," or by clicking on the keyboard layout icon shown in the system tray. The icon will automatically appear when you have 2 or more keyboard layouts selected."]}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"GNOME Keyboard Indicator",src:i(12837).Z+"",width:"206",height:"168"})}),"\n",(0,t.jsx)(n.h3,{id:"ibus",children:"IBus"}),"\n",(0,t.jsxs)(n.p,{children:["For ease of use, GNOME has IBus up and running by default. If you need an additional IBus IME see: ",(0,t.jsx)(n.a,{href:"/docs/user/software/localization/ibus/",children:"IBus"})]}),"\n",(0,t.jsxs)(n.p,{children:["You can now switch between your layouts by using the keyboard shortcut ",(0,t.jsx)(n.code,{children:"Super + Space"})," or by clicking on the keyboard layout icon shown in the system tray."]}),"\n",(0,t.jsx)(n.h2,{id:"language",children:"Language"}),"\n",(0,t.jsxs)(n.p,{children:["With GNOME, open the Overlay using the ",(0,t.jsx)(n.code,{children:"Super"}),' button on your keyboard or by clicking the applications icon in the dock and then find and click on "Region and Language".']}),"\n",(0,t.jsx)(n.p,{children:"You will now be shown the following window. This window allows you to change your language, formatting for dates and times and the language of your keyboard."}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"GNOME Region and Languages",src:i(92266).Z+"",width:"742",height:"345"})}),"\n",(0,t.jsx)(n.p,{children:'Start by clicking "Language". This brings up a selection of languages to chose from.'}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"GNOME Selecting Language",src:i(45905).Z+"",width:"742",height:"489"})}),"\n",(0,t.jsx)(n.p,{children:"If your language does not appear in the list, click the \u22ee button at the bottom (three vertical dots) to show all the available languages. You can use the search box to go directly to your choice or scroll down the list."}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"GNOME Language Search",src:i(5623).Z+"",width:"742",height:"489"})}),"\n",(0,t.jsxs)(n.p,{children:['Once you have selected the language you wish to use, click "Done". You ',(0,t.jsx)(n.em,{children:"may"})," need to logout and login to your computer for it to take affect."]}),"\n",(0,t.jsx)(n.h2,{id:"mouse-and-touchpad",children:"Mouse and touchpad"}),"\n",(0,t.jsxs)(n.p,{children:["With GNOME, open the Overlay using the ",(0,t.jsx)(n.code,{children:"Super"}),' button on your keyboard or by clicking the applications icon in the dock and then find and click on "Mouse and Touchpad". You will see either settings for your mouse or trackpad, depending on the device.']}),"\n",(0,t.jsx)(n.h3,{id:"mouse",children:"Mouse"}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"GNOME Mouse Settings",src:i(19580).Z+"",width:"742",height:"585"})}),"\n",(0,t.jsx)(n.p,{children:"For mice, you can set:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"The primary button (usually left click) to be left or right."}),"\n",(0,t.jsx)(n.li,{children:"Mouse speed."}),"\n",(0,t.jsx)(n.li,{children:'Enabling / disabling "natural scrolling" (reversed scrolling direction).'}),"\n"]}),"\n",(0,t.jsx)(n.h3,{id:"touchpad",children:"Touchpad"}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"GNOME Touchpad Settings",src:i(62903).Z+"",width:"742",height:"585"})}),"\n",(0,t.jsx)(n.p,{children:"For touchpads, you can set:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"The primary button (usually left click) to be left or right."}),"\n",(0,t.jsx)(n.li,{children:"Enabling / disabling of the touchpad."}),"\n",(0,t.jsx)(n.li,{children:'Enabling / disabling "natural scrolling" (reversed scrolling direction).'}),"\n",(0,t.jsx)(n.li,{children:"Touchpad speed."}),"\n",(0,t.jsx)(n.li,{children:"Enabling / disabling of Tap to Click."}),"\n"]}),"\n",(0,t.jsx)(n.h3,{id:"testing",children:"Testing"}),"\n",(0,t.jsx)(n.p,{children:'You can test your settings by clicking the "Test Your Settings" button in the top right of the window.'}),"\n",(0,t.jsx)(n.h2,{id:"networking",children:"Networking"}),"\n",(0,t.jsx)(n.p,{children:'Easily change network settings with GNOME by left or right clicking on the system tray in the top panel and then clicking on "WiFi Not Connected".'}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"GNOME Network Indicator",src:i(41694).Z+"",width:"331",height:"500"})}),"\n",(0,t.jsxs)(n.p,{children:["Alternatively, you can open the Overlay using the ",(0,t.jsx)(n.code,{children:"Super"}),' button on your keyboard or by clicking the applications icon in the dock and then finding and clicking on "Network".']}),"\n",(0,t.jsx)(n.h3,{id:"non-hidden-network",children:"Non-hidden network"}),"\n",(0,t.jsx)(n.p,{children:'Once you have opened the "WiFi Not Connected" menu, click on "Select Network". Click on the network you wish to join and then on "Connect".'}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"GNOME Network Selection",src:i(19750).Z+"",width:"500",height:"479"})}),"\n",(0,t.jsx)(n.p,{children:'You may now be prompted to authenticate with the network. Type in your password and then click "Connect".'}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"GNOME Network Authentication",src:i(49755).Z+"",width:"550",height:"244"})}),"\n",(0,t.jsx)(n.p,{children:"If your password is correct, you will now be authenticated with the network."}),"\n",(0,t.jsx)(n.h3,{id:"hidden-network",children:"Hidden network"}),"\n",(0,t.jsx)(n.p,{children:'To join a hidden network, open the "WiFi Not Connected" menu and click on "WiFi Settings".'}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"GNOME Network Overview",src:i(13917).Z+"",width:"742",height:"491"})}),"\n",(0,t.jsx)(n.p,{children:"Next, click on \u201cConnect to Hidden Network...\u201d. It will show the following dialog, where you type the network name and type of security (if any)."}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"GNOME Hidden Network",src:i(36258).Z+"",width:"741",height:"490"})}),"\n",(0,t.jsx)(n.p,{children:"If the network is found and has a password, you will be prompted to authenticate with the network."}),"\n",(0,t.jsx)(n.h2,{id:"sound-and-sound-devices",children:"Sound and sound devices"}),"\n",(0,t.jsx)(n.p,{children:"With GNOME, the volume can be changed by left or right clicking the system tray in the top panel and then simply dragging the volume slider with your mouse."}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"GNOME Volume Control",src:i(44483).Z+"",width:"300",height:"370"})}),"\n",(0,t.jsx)(n.h3,{id:"settings",children:"Settings"}),"\n",(0,t.jsxs)(n.p,{children:["You can access sound settings, including individual application volume controls, and a simple speaker test by opening the Overlay using the ",(0,t.jsx)(n.code,{children:"Super"}),' button on your keyboard or by clicking the applications icon in the dock and then finding and clicking on "Sound".']}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"GNOME Sound Settings",src:i(31401).Z+"",width:"742",height:"495"})}),"\n",(0,t.jsx)(n.h2,{id:"users",children:"Users"}),"\n",(0,t.jsx)(n.p,{children:'To add and remove users with GNOME, you can click on the icons in the far right of the top panel. Click on your name and then on "Account Setting".'}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"GNOME User Indicator",src:i(27121).Z+"",width:"283",height:"323"})}),"\n",(0,t.jsxs)(n.p,{children:["Alternatively, you can open the Overlay using the ",(0,t.jsx)(n.code,{children:"Super"}),' button on your keyboard or by clicking the applications icon in the dock and then finding and clicking on "Users".']}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"GNOME User Settings",src:i(51215).Z+"",width:"742",height:"453"})}),"\n",(0,t.jsx)(n.p,{children:'To manage your own or other accounts, you first need to authenticate. Click the "Unlock" button in the top right corner and type your password. Note that you are required to be an administrator. If you\'re the only user on the system, then your account is an administrator by default.'}),"\n",(0,t.jsx)(n.p,{children:'In the event the password provided is correct, the "Unlock" button will change to "Add User..."'}),"\n",(0,t.jsx)(n.h3,{id:"adding-a-user",children:"Adding a user"}),"\n",(0,t.jsx)(n.p,{children:'To add a user, click the "Add User..." button in the top right corner of the Users window.'}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"GNOME Add User Button",src:i(53854).Z+"",width:"225",height:"65"})}),"\n",(0,t.jsx)(n.p,{children:"This will open the Add User window (shown below)."}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"GNOME Add User Dialog",src:i(72158).Z+"",width:"466",height:"546"})}),"\n",(0,t.jsx)(n.p,{children:'Fill in the required items and then finish adding the new user by clicking "Add" in the top right corner.'}),"\n",(0,t.jsx)(n.h3,{id:"removing-a-user",children:"Removing a user"}),"\n",(0,t.jsx)(n.p,{children:'To remove a user, open the Users window and then click on the user you wish to remove. Now click on the red "Remove User..." button in the bottom right corner.'}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"GNOME User List",src:i(81379).Z+"",width:"742",height:"592"})}),"\n",(0,t.jsx)(n.p,{children:"Upon clicking to remove the user, you will be given the option to keep their files, delete their files, or cancel the removal of the user\u2019s account."}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"GNOME Keep Files Prompt",src:i(41361).Z+"",width:"508",height:"162"})}),"\n",(0,t.jsx)(n.h2,{id:"user-interface",children:"User interface"}),"\n",(0,t.jsx)(n.h3,{id:"desktop-background",children:"Desktop background"}),"\n",(0,t.jsx)(n.p,{children:'The GNOME desktop background can be changed by simply right clicking anywhere on the desktop and selecting "Change background".'}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"GNOME Background Right Click Menu",src:i(36198).Z+"",width:"212",height:"150"})}),"\n",(0,t.jsx)(n.p,{children:'Alternatively, you can open the Applications Overlay by clicking the applications icon in the dock and then finding and clicking on "Background".'}),"\n",(0,t.jsx)(n.p,{children:'You will have two options, Background and Lock Screen. Click "Background".'}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"GNOME Settings Background Section",src:i(77101).Z+"",width:"742",height:"515"})}),"\n",(0,t.jsx)(n.p,{children:'In this section, you can choose between Solus wallpapers, pictures in your Pictures folder, or solid colors. After choosing, click "Select".'}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"GNOME Background Selection",src:i(71955).Z+"",width:"830",height:"468"})}),"\n",(0,t.jsx)(n.h3,{id:"desktop-icons",children:"Desktop icons"}),"\n",(0,t.jsxs)(n.p,{children:["In GNOME, you can enable desktop items by opening the Overlay using the ",(0,t.jsx)(n.code,{children:"Super"}),' button on your keyboard or by clicking the Applications icon in the dock and then search for and open "Tweak Tool". You can then toggle them on and off by clicking "Icons on Desktop" under the Desktop section.']}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"GNOME Tweak Tool",src:i(8338).Z+"",width:"904",height:"654"})}),"\n",(0,t.jsx)(n.p,{children:'You may now add things to your Desktop. This can be done by dragging an item onto the Desktop or by right clicking an icon and selecting Copy to / Move to Desktop. Alternatively, click on the "Files" icon in the dock and then move the files you want to the Desktop folder (as shown in the image below). Please note, the Desktop folder is not visible in "Files" until you\'ve enabled the Desktop icons.'}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"GNOME Desktop Folder",src:i(62778).Z+"",width:"884",height:"415"})}),"\n",(0,t.jsx)(n.h2,{id:"workspaces",children:"Workspaces"}),"\n",(0,t.jsx)(n.p,{children:"GNOME enables the switching of workspaces via the Workspace Switcher on the right side of the Activities Overview screen. Application windows can be dragged from the Activities Overview to a workspace, whether it is empty / new, or one that already has windows in it."}),"\n",(0,t.jsx)(n.h3,{id:"keyboard-shortcuts",children:"Keyboard Shortcuts"}),"\n",(0,t.jsx)(n.p,{children:"GNOME provides a variety of keyboard shortcuts for workspaces."}),"\n",(0,t.jsx)(n.p,{children:"To view these shortcuts open the Keyboard application and scroll to the Navigation section."}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"GNOME Workspaces Keyboard Shortcuts",src:i(36663).Z+"",width:"740",height:"395"})})]})}function h(e={}){const{wrapper:n}={...(0,o.a)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(l,{...e})}):l(e)}},88175:(e,n,i)=>{i.d(n,{Z:()=>t});const t=i.p+"assets/images/gnome-add-input-source-d437c5e7831ecdb1e489aa21ac60d526.png"},53854:(e,n,i)=>{i.d(n,{Z:()=>t});const t="data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEASABIAAD/2wBDAAIBAQEBAQIBAQECAgICAgQDAgICAgUEBAMEBgUGBgYFBgYGBwkIBgcJBwYGCAsICQoKCgoKBggLDAsKDAkKCgr/2wBDAQICAgICAgUDAwUKBwYHCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgr/wAARCABBAOEDAREAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD9c9Ph1SC+km+0FoHXBQrjB9a/KYUqsajd9D66UoONupqQ3UwABTIx1rrjz9jF8pKk7MSoY1UU2S7D45UDeZ6nmrjFCbHmdQ2Bkgnr6U3Gz0QiWFwo54wa0jHQlu5I11tXGepq22lYncR7iWJd23cKluSQ0rkD38mzMa/gaxnKql7qLUY9Sv8A2w018mnLZSsXXll+6PxrP20faKnJaspwtG9x19qcGk25muA2xPvnPSpxGJw2ChzzdkOnSqVpcsRbfU7TU4PNsXLgjqRirp4mhiIXpu6FKnUpytIdFCTGGeY8n1q40uZXuS5Ddio20scE9afs3F2Dm6jZ4Fx8s+D2pypAphh1i/euCR3FHs7R1DmuyCaO2Iyz8n6VhPDUpK0tS1UknoZer6BpupQBZ13sjbgG6A1xvL8JTjzQikzeOJrX3MKPwvpS6sbaexyrDliMg/0rneHUqtrfM6PbzUL3OI8U/s2eEpru81fSL+9gvJpfMjmiuWUK/Y46VjLBOOx2Us0nZKSKvw+8FfE3wdqMl5qvxMvdSQFcw3aqQFB5wcda5Z0KsZfu9Doq4jC1oW5bM7Xx7+0mfhLo0Go3WgX+q27yLHO2nRbjHnjOO4HeumlKo0ouN/PY4IYNV5aSsZWufEL4P/Gbwa/2vULuwgujtNxPGYwp+prmq0suq+67xl95vShj8LPTU42X4FWWgT2+p+CPHsd7beXtFtPMrBh7Y715tTJ+WTnGab+49P8AtmVSPJUhYzPinpHjTWPDjW8Xgeb7Zp43Wl6jgqMf3QATz059frXNg8JjMFWcpv3H0LhXw1WSs7ep46ngP9oO406bxHr2k2t7vJYQrJsIToFJb7xxxxgelepXx+Bp8iV4o76UKTk43u+ljI8G/G3wr4NefwpeeH72yup5D5zNkAY+8Qe5r0KmH+tQVWMk0Z1MPVU+W2p0lx8dPhhrcQ0ObxV9qvLIbraKWTJQ+2eD9a4/7Px0ZKcY2iyfZQi3rqH/AAtex/6DH/jq/wCFbfVanYPZxPznX/gtH/wU+QYX9q665/6kvQf/AJX1+2LIMpW1N/8AgT/zPx/+0cY/tfghR/wWl/4KfgbR+1fdY/7EvQf/AJX0/wCwcq/kf/gT/wAw/tDF/wA34IP+H03/AAVAHP8Aw1fdf+EXoH/yvoWQ5Sv+Xf8A5M/8xf2hi/5vwQ1v+C0P/BT1zlv2rbr/AMIzQf8A5ApPIMpf/Lt/+BP/ADH/AGhjP5vwQ4f8Fpv+CoA6ftX3X/hF6B/8r6f9hZV/z7f/AIE/8xf2hi/5vwQ4f8Fqv+CoY4H7WN1/4Regf/K+msjytfYf/gT/AMwePxb+1+CD/h9V/wAFQ85P7WN1/wCEXoH/AMr6f9h5V/z7/F/5i+v4v+b8EL/w+t/4KjYx/wANZXWP+xL0D/5X0f2Hlf8Az7/F/wCYfXsX/N+CG/8AD6n/AIKh/wDR2F1/4Regf/K+j+w8r/59/i/8w+vYv+b8EOh/4LXf8FRrd/Mh/axuQ3r/AMIVoH/yvqf7AyhS5vZ6+r/zH9fxdrc34IbP/wAFp/8AgqDc7vP/AGrrlt3UHwVoHP8A5T6ynw1kdRWlRv6t/wCZSzLHR2n+CGQf8Fof+Cnlsnl2/wC1ZcoP9nwVoA/9x9XDh/J6ceWNKy9X/mJ5jjZO7l+CJP8Ah9Z/wVFxt/4ayuv/AAi9A/8AlfWiyPK0v4f4v/Mn6/i/5vwQN/wWr/4KiNyf2sbr/wAIrQP/AJX0/wCxMrf2Pxf+YfXsV/N+CEP/AAWn/wCCoLHJ/avuv/CL0D/5X0v7Dyr/AJ9/i/8AMPr+L/m/BDW/4LR/8FPmOW/auuj/ANyZoP8A8gUnkWVP7D/8Cf8AmNY/Fr7X4IYf+Czv/BTo/wDN1l1/4Rmg/wDyBU/2BlH/AD7f/gT/AMx/2hi/5vwQv/D53/gp1jH/AA1Xc/8AhGaD/wDIFH+r+Uf8+/8AyZ/5h/aGL/m/BDG/4LLf8FNX+9+1Vd/+EdoX/wAgVH+rmTX/AIb/APApf5j/ALSxv834Iaf+CyX/AAUyPX9qi6/8I7Qv/kCn/q7k3/Pv/wAml/mL+0cZ/N+CGSf8Fiv+Clcq7ZP2pLkj0/4Q3Qv/AJApPhzJXvS/8ml/mP8AtLGr7X4Ir3H/AAV0/wCCjd3EYbn9pu4dD1VvB+h4/wDSGpfDORv/AJdf+TS/zKWa5gndT/BGfqP/AAVN/b91XRpPD9/+0RJJZzf6yA+D9DAP5WOazfCuQP8A5c/+TS/zNo55msZXVT8F/kZ9h/wUr/bp0qxTTtP/AGhbyKGLHlovhzSPlx0wfseRWcuEeHpSu6Lv/il/maf6w5v/AM/P/JY/5G1p/wDwV0/4KRaPCIbD9qLUdgHCyeGtGcf+PWJrWPC+RQVlSf8A4FL/ADMJZvmE3rJfcv8AIjuP+Ctv/BRS+Ui7/aWumHTH/CJ6J/SxrnrcGcM4hWqUL/8Ab0v8zWGe5tTd41LfJf5HKWn7bfxt1PxfZeKviv4/udZsrObzbu3i02ztWkjzmQA28EZ3FdwBOQCQSGAINT4WymlhpQw0OV201bXlo2zvw3FudUqsXOpzRXSy/RXP038X/wDBLPWRJcX3hfxh/abh82d21z5cioRyGK9fX8TX55TzLFU4pRimj7xZnha8uavFqRyv/Dtn41f9ByL/AL+v/jWv9rv+R/gbe2yzz+8/Jiv2Q/FgoAKACgAoAKAP090n9mz4AaPplvpVv8GfDMqW8SxrJd6HBNKwAxlndCzt6kkk1+zU8nyunBRVCLt3im/vaufy3W4m4hrVZVHi6ibd9JyS+STSS8kWf+GfvgL/ANES8I/+E1a//G6v+ysr/wCfEP8AwGP+Rn/rDn//AEF1f/Bk/wDMP+GfvgL/ANES8I/+E1a//G6P7Kyv/nxD/wABj/kH+sOf/wDQXV/8GT/zD/hn74C/9ES8I/8AhNWv/wAbo/srK/8AnxD/AMBj/kH+sOf/APQXV/8ABk/8w/4Z++Av/REvCP8A4TVr/wDG6P7Kyv8A58Q/8Bj/AJB/rDn/AP0F1f8AwZP/ADD/AIZ++Av/AERLwj/4TVr/APG6P7Kyv/nxD/wGP+Qf6w5//wBBdX/wZP8AzD/hn74C/wDREvCP/hNWv/xuj+ysr/58Q/8AAY/5B/rDn/8A0F1f/Bk/8w/4Z++Av/REvCP/AITVr/8AG6P7Kyv/AJ8Q/wDAY/5B/rDn/wD0F1f/AAZP/MP+GfvgL/0RLwj/AOE1a/8Axuj+ysr/AOfEP/AY/wCQf6w5/wD9BdX/AMGT/wAw/wCGfvgL/wBES8I/+E1a/wDxuj+ysr/58Q/8Bj/kH+sOf/8AQXV/8GT/AMw/4Z++Av8A0RLwj/4TVr/8bo/srK/+fEP/AAGP+Qf6w5//ANBdX/wZP/M+fP8Agon8HPhb4M+FWj+LfBvgLStHvh4hS0eTSrFLcSRPBM5DLGAGO6JcEjI5x1NfK8WZfgsPgoVaVNRfNbRJaNN9PQ/Q/DjOs1xubVcPia0px5HL3m5WalFaN3a0b9fkfHlfAH7KFABQAUAFABQAjKW6UrJANEZ7mhICvrShdHusdfs7/wDoJpS+FjW5+9nxW0T4p2d7bXGleKL3S7K7fF5Ppku4wvkYO0/w4r+fYJwXNKJ+wYaeEmmmlfpcxf8AhAPiN/0ct4k/8BBT+sU/+fX4ml6f8q/A/Div6DPxoKACgAoAKACgD9dK/eD+PyfTNOvNY1K30nToGluLqdIYIlGS7sQqgfUkUNpK7dkGvRXO/wDin+zrrvgb4jab8PfB+rjxM2rQFtPu7S38lZZUkkinjwXIAjkikBYsBtXccA8eNl+c0sZhalerH2ahq7v7LipRl03i1p301Po834cxGW4ujh6UvayqXWi/5eRk4Thu7uMlv1TT0TK2v/s9+NNGtfDNvaeTqGqeJp7uO2sNOuoLiNRCyDctxFK8bqQxJOQE2HJ640pZvhqtSrf3Y04xk2047826kk18Pzvp544jIMZQw9CWkp1ZzgoxcZfCqdrSjJp3c7W6cuu+lH4ifCDV/ht4Y0LXdb1K1lm1p7sCCyuYbiKNYWRQyzwyOkm7eeh4K457aYTMaWMxM6UE7RUXdpp+9zacskmrct/O5lj8mr5dgaWIqyV5ynGycZL3FB35oyad3O1unL56VNY+H39k+EvC/in+1/M/4SQ3P7j7Pj7P5U/lfe3fPnr0GOnPWt6OJ9tjqmGtbkUXfvzX6eVu+pyYjB/V8qp43mvzyqK1tuRQe/nzdtLdbmz4m/Z68b6R4k8QaTov2a9stC1i504X91fW9mbySDlxDFLKGlcLhike8gMPUVxYfOcNVwtKrUvFzipWScrJ9W0tFfS7stz1MXw3jaOOrYei1JU5cvM3GF3a9kpS1lb7Kbf3mRcfB74h2vhIeNp9CjWx+yJdlf7QgNwts7hFna3D+csRYgCQoFORzyK6v7QwjxPsOb3r8uztzWvy81uXmtra9/I4FlGYSwf1lQ9yzlvHm5U7OShfmcU9OZRt5kPj34W+N/hjcRWXjjS4bG4lLBbX+0YJZlAAO5o43ZkUhgVZgAw+6Tg08Lj8Ljb+xle3WzS7Wu1a6tqt11JxuV47L4RliIqPNZpc0W7NJp2Tbs01Z2s9r3TOfrsPPCgD50/4Kb/8kF0j/sb7f/0luq+S4y/5FcP8a/8ASZH6R4X/API/q/8AXqX/AKXA+I5/+Rdtf+v24/8AQIa/Neh+8dSlSA3fDHwv+JfjWwfVfBvw713V7WOYxSXOmaRNcRrIACULIpAbDKcdcMPWldIDI1DT7/Sb+fStVsZra6tpmiuba4iKSRSKSGRlPKsCCCDyCKYENAHZfAj4YxfFj4h2/hm8uHis44mub54z83lKQML6EsyjPbOe1edmuNeAwbqJa7L1PruCOHI8UZ/DCVG1TScp235VbRebbSv0vc99/sX9nQan/wAKt/4VOP7S+3fY/sn9mj7R5X/P3527d5O35t+7PbGeK+U9pnHJ9Z9t7tr3vpf+W3fpa1vkfuX1PgD6x/Y39n/vefk5eT3+X/n7z3v7O2vNzX6W5tDwH48fDOL4TfES48M2k7yWckS3Ni8h+bymJGG9SGVlz3xnvX1WV414/CKq1rs/VH4Zxtw3HhfPp4Sm26bSlBvfld9H5ppq/W1zhNc40W8IHP2WT/0E13yvZnya3P6QdD064lsv3mk4kIBKsd2fzr8OdOy2P0JVNdyx/ZN9/wBC8v5LWXLL+U19pHufzgV+8n5uFABQAUAFABQB+ulfvB/H51fwU8beH/ht8SNP8feIdKlvl0jzLmytI1BWS7VGMG/LKQgl2MxBzheATXFmWHrYvA1KFJ2c1y37Ju0vny3t52PRyjE4bBZnSxFeLlGD5rK2rjrFa9HJR5v7t9HsegaT+0x4BuNI0mz1r4bHS5NLvNRhA0OeaVWsdQtpIrk7rueRxMrlZEGdhy2ducnx6uR4nnnyVbqUYr3klaVOSlT0jFJrdS62ta+y+ko8U4Nxpurh+WUKrmuVyd1Ui4VbucpNSfuSjbS6d0t3Q034xfC3wk3hXRfD0Ov32m6Rb6xa6tc3tnBbzyR38XlF4UWWRVZFJIVmwSB83PG1XLsdivbyq8sXNU+WzbSdOTnrdRum7bLa+mmvNQzfK8vWEjh+eapVKspOSjFtVIQh7qUpWaUXu97O+tlzPxL8W+ANR8E+G/A/gKbWJ49ElvnuLvV7KKAzGd42BVI5ZNuAhBBY/U547MJh8YsZUxFdRXNGKSi27crle7aX83b/ADfnZhisueWUcJhXN8k6km5JRvzxppWSlLbkd9ezvrZaPhvxz8JdZ8D+HvDPxMfxDaz+GL64ktX0SygnS9glkWQxOZZozCwYN84DjDfd45mrh8fRx08RheV88YpqTas43s1ZO6s9VptuOhicrxOVRwWNc48k5STgoyupqCcWpSjZrkupXe7vHQ29F+P/AIM1PWvEOufEK3v7mz1nX7vUn8LHRbS9tJvOHAWeV1ls5BwDNEGYhV44xXBUyfE0sJSo4drmhBRU+aUZJrrZJqSvrySsr311PYpcRYKtmdfE4pS9nUqc7p8kJxlH+VuTThK3u+0jd26aEXin9oHRtf8AAQs7C7ubHVX8N2ujXNlF4T00xyxwpHGWOoH/AEnayRg+Xt4bgPgAVtSyqpTxznJKUHUdS/PNNNvmtyL3G1LrfbdXOeef0Z5ZGnFuNSNL2VlTptNaxv7V/vFeLs0k9dpK5yfxW8W+C/iB4u8Q+NrFtUhub/Uo5NNt5baPy/JKkSGVhISrghNoUMCC2SMDPZl+GxODw9KjKzS5uZ3fV3VtNd3e9ulrnl5njMHmGIqV1zJ2pqKsre7FRlza6be7a9+tjHvYfh6tzqg03UdZaFbdDorT2UStJLlN4nAkIRceZgqWJIXIGTjpi8Zyx5lG93zav4dbW01e107LfXa/HJZf7SVpS5eVcuivz2jdPXSN+azV3bl01dsauk4z50/4Kb/8kF0j/sb7f/0luq+S4y/5FcP8a/8ASZH6R4X/API/q/8AXqX/AKXA+IZpYzoNtCJFLrdzsy55AKxYOPfB/I1+a9D946lSkBu+GPih8S/BVg+leDfiJrukWskxlkttM1ea3jaQgAuVRgC2FUZ64UelKyYGRqGoX+rX8+q6rfTXN1czNLc3NxKXklkYks7MeWYkkknkk0wIaAOy+BHxOi+E/wAQ7fxNeW7y2ckTW18kY+bymIOV9SGVTjvjHevOzXBPH4R009d16n13BPEkeF8+hi6ibptOM7b8rtqvNNJ262se/wD9ufs3fb/+Fn/8LPj/ALS+3/bftv8AaX+lbP8An28rG7ydvy+Xtzjvnmvk/ZZzyfVvZe7a1raf4r7X63v+B+5/XfD32/8AbH19e15+fm5/3lv+ffJbm9nb3eTlvbrfU8A+O/xOj+LHxDuPE1nA8VnHEttYpIPm8pSTlvQlmY47Zx2r6zKsE8Bg1Te+79T8L424jjxRn88XTTVNJRhfflV9X5ttu3S9jg9c/wCQLef9esn/AKCa9CXws+TW5/S74dtEkRtsuABx82MivxG2jufdK9zV22f96T86yvDzK5ZH8y9fuh8EFABQAUAAz3NABQB+nuk/tJ/s/wCs6ZBqtv8AGbwzElxEsix3etwQyqCM4ZHcMjeoIBFfs1POMqqQUlWir95JP7m7n8t1uGeIaNWVN4So2nbSEmvk0mmvNFn/AIaB+Av/AEW3wj/4Utr/APHKv+1cr/5/w/8AAo/5mf8Aq9n/AP0CVf8AwXP/ACD/AIaB+Av/AEW3wj/4Utr/APHKP7Vyv/n/AA/8Cj/mH+r2f/8AQJV/8Fz/AMg/4aB+Av8A0W3wj/4Utr/8co/tXK/+f8P/AAKP+Yf6vZ//ANAlX/wXP/IP+GgfgL/0W3wj/wCFLa//AByj+1cr/wCf8P8AwKP+Yf6vZ/8A9AlX/wAFz/yD/hoH4C/9Ft8I/wDhS2v/AMco/tXK/wDn/D/wKP8AmH+r2f8A/QJV/wDBc/8AIP8AhoH4C/8ARbfCP/hS2v8A8co/tXK/+f8AD/wKP+Yf6vZ//wBAlX/wXP8AyD/hoH4C/wDRbfCP/hS2v/xyj+1cr/5/w/8AAo/5h/q9n/8A0CVf/Bc/8g/4aB+Av/RbfCP/AIUtr/8AHKP7Vyv/AJ/w/wDAo/5h/q9n/wD0CVf/AAXP/IP+GgfgL/0W3wj/AOFLa/8Axyj+1cr/AOf8P/Ao/wCYf6vZ/wD9AlX/AMFz/wAg/wCGgfgL/wBFt8I/+FLa/wDxyj+1cr/5/wAP/Ao/5h/q9n//AECVf/Bc/wDI+fP+Cifxj+FvjP4V6P4S8G+PdK1i+PiFLt49KvkuFjiSCZCWaMkKd0q4BOTzjoa+V4szDBYjBQpUqik+a+jT0Sa6ep+h+HGS5rgs2q4jE0ZQjyOPvJxu3KL0Ts3on6fM+PK+AP2UKACgAPHNAAOeaACgABB6UbgFAFXXP+QLecf8usn/AKCamXwsa3P6V9FceSBDMMqBuU+lfiE5K2h95FO5u+fa/wCRWVy+U/ExP+CEX/BWg/e/ZCmH/c9+H/8A5YV+4e3pnwXIx3/DiD/grJ/0aNL/AOF34f8A/lhR7emHJIP+HEH/AAVk/wCjRpf/AAu/D/8A8sKPb0w5JB/w4g/4Kyf9GjS/+F34f/8AlhR7emHJIP8AhxB/wVk/6NGl/wDC78P/APywo9vTDkkH/DiD/grJ/wBGjS/+F34f/wDlhR7emHJIP+HEH/BWT/o0aX/wu/D/AP8ALCj29MOSQf8ADiD/AIKyf9GjS/8Ahd+H/wD5YUe3phySD/hxB/wVk/6NGl/8Lvw//wDLCj29MOSQf8OIP+Csv/Ro0v8A4Xfh/wD+WFHt6YckgH/BCD/grL/0aLL/AOF34f8A/lhR7emHJIP+HEH/AAVk/wCjRpf/AAu/D/8A8sKPb0w5JB/w4g/4Kyf9GjS/+F34f/8AlhR7emHJIP8AhxB/wVk/6NGl/wDC78P/APywo9vTDkkH/DiD/grJ/wBGjS/+F34f/wDlhR7emHJIP+HEH/BWX/o0WX/wu/D/AP8ALCj29MOSQf8ADiD/AIKyf9GjS/8Ahd+H/wD5YUe3phySD/hxB/wVk/6NGl/8Lvw//wDLCj29MOSQf8OIP+Csn/Ro0v8A4Xfh/wD+WFHt6fcOSQf8OIP+Csn/AEaNL/4Xfh//AOWFHt6fcOSQf8OH/wDgrLn/AJNHl/8AC68P/wDywo9vT7hySD/hxB/wVk/6NGl/8Lvw/wD/ACwp+3p9w5JB/wAOIP8AgrJ/0aNL/wCF34f/APlhS9tS7hySGn/ghD/wVp3cfsiyY/7Hvw//APJ9J1qbDkYn/Dh//grQD8v7IsmO/wDxXfh//wCWFL21PuHIx4/4IQf8FZe/7I8v/hdeH/8A5YU1WpoOSRz3xc/4Iuf8FOPhZ8KPE/xO8ffsuyafoXhzw9e6prV+fGehy/ZrS3geWaXZFfM77URm2orMcYAJwKbrU2rIFBpn7UKfFEduZ4bayit0cK8rtypPsB0r8ExVTF2alaPZ7/gfomHjh21u2ankeJ/7lt/3zXm/V8x/5/8A/kp1c+E/59v7z6kr9/PzYKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKAPFv8AgpIcf8E7Pj4T/wBEW8U/+mi6prcDyLwWYPEWl2PiHw9fSJbTxrMomjYb1Izyrcg/Wvx6pC6utD7pe5Jxkdf/AKR/ejrOzFp2Z9L1+yHwwUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAeLf8ABSP/AJR2/Hv/ALIt4p/9NF1TW4PY8og/5JxJ/wBeg/lX47V/g/I+6p/x/mcPXkHtH//Z"},72158:(e,n,i)=>{i.d(n,{Z:()=>t});const t=i.p+"assets/images/gnome-add-user-dialog-4a76a1d5811db1f477173c3c1fabb43a.jpg"},59556:(e,n,i)=>{i.d(n,{Z:()=>t});const t=i.p+"assets/images/gnome-arrange-displays-c6b7dca4d418eed7a79be42eabbab2d1.png"},36198:(e,n,i)=>{i.d(n,{Z:()=>t});const t=i.p+"assets/images/gnome-background-right-click-296958d96e0cd78b4bd122538368baf6.jpg"},77101:(e,n,i)=>{i.d(n,{Z:()=>t});const t=i.p+"assets/images/gnome-background-section-ca69ba209a6e21b75235377cfe37096a.jpg"},71955:(e,n,i)=>{i.d(n,{Z:()=>t});const t=i.p+"assets/images/gnome-background-selection-2b69c07e0327d086c99d3925edefd0de.jpg"},53885:(e,n,i)=>{i.d(n,{Z:()=>t});const t=i.p+"assets/images/gnome-configuring-default-applications-c38e8846a0f5406e2a929ceed630e0ac.jpg"},56935:(e,n,i)=>{i.d(n,{Z:()=>t});const t=i.p+"assets/images/gnome-date-and-time-aa3c32f3601912751b47792bed13d861.jpg"},24798:(e,n,i)=>{i.d(n,{Z:()=>t});const t=i.p+"assets/images/gnome-display-confirm-73e76e471778f250fce7a77b06ebf4cc.jpg"},51729:(e,n,i)=>{i.d(n,{Z:()=>t});const t=i.p+"assets/images/gnome-display-right-click-0e3734d006161e208d66f1dbbfd5b284.jpg"},20241:(e,n,i)=>{i.d(n,{Z:()=>t});const t=i.p+"assets/images/gnome-displays-overview-6bbedd44653525b6c3aba838cf30349d.jpg"},94287:(e,n,i)=>{i.d(n,{Z:()=>t});const t=i.p+"assets/images/gnome-individual-display-settings-2d5ef78b2175bb97fc2e729a90ee5774.jpg"},41361:(e,n,i)=>{i.d(n,{Z:()=>t});const t=i.p+"assets/images/gnome-keep-files-prompt-5b7532e8ea1cf62ad466bf6d2eec702f.jpg"},19580:(e,n,i)=>{i.d(n,{Z:()=>t});const t=i.p+"assets/images/gnome-mouse-settings-4652630acfe19020bb0b29d0155bf012.jpg"},81379:(e,n,i)=>{i.d(n,{Z:()=>t});const t=i.p+"assets/images/gnome-multiple-user-settings-e0957ed6affeef47726232f6fa2c22a0.jpg"},62778:(e,n,i)=>{i.d(n,{Z:()=>t});const t=i.p+"assets/images/gnome-nautilus-desktop-folder-d8e82c2d25e2d637fc2f63e85241c255.jpg"},49755:(e,n,i)=>{i.d(n,{Z:()=>t});const t=i.p+"assets/images/gnome-network-authentication-306d93017ccbe74f3760db30ad3be13c.jpg"},36258:(e,n,i)=>{i.d(n,{Z:()=>t});const t=i.p+"assets/images/gnome-network-hidden-0567bce591f6219bb35378032a3db3e9.jpg"},13917:(e,n,i)=>{i.d(n,{Z:()=>t});const t=i.p+"assets/images/gnome-network-overview-56ca62f1ff834202f557968bddfe6ae8.jpg"},19750:(e,n,i)=>{i.d(n,{Z:()=>t});const t=i.p+"assets/images/gnome-network-select-b153e6a0d6a6394708fd70d376d84dc9.jpg"},72964:(e,n,i)=>{i.d(n,{Z:()=>t});const t=i.p+"assets/images/gnome-open-with-right-click-f8c5019ecbc6f6cb589c6117c20c85b4.jpg"},72191:(e,n,i)=>{i.d(n,{Z:()=>t});const t=i.p+"assets/images/gnome-open-with-select-application-7c831e8489c82c5ac4df9f3bd5a85644.jpg"},39324:(e,n,i)=>{i.d(n,{Z:()=>t});const t=i.p+"assets/images/gnome-region-and-languages-newlang-4bb2078c2e13e3b57093c6b6c8b68695.jpg"},92266:(e,n,i)=>{i.d(n,{Z:()=>t});const t=i.p+"assets/images/gnome-region-and-languages-335dc9a1b149e6ee8b31960b2786e80f.jpg"},5623:(e,n,i)=>{i.d(n,{Z:()=>t});const t=i.p+"assets/images/gnome-selecting-language-search-0ef7ad4ad481eba3511f505c0d48dd64.png"},45905:(e,n,i)=>{i.d(n,{Z:()=>t});const t=i.p+"assets/images/gnome-selecting-language-1b584e15820bf752584efc6dd7b15aeb.png"},51215:(e,n,i)=>{i.d(n,{Z:()=>t});const t=i.p+"assets/images/gnome-single-user-settings-39514927d322f1eae5e257384a82106b.jpg"},31401:(e,n,i)=>{i.d(n,{Z:()=>t});const t=i.p+"assets/images/gnome-sound-settings-83f0c82715b44956569594953085dad1.jpg"},12837:(e,n,i)=>{i.d(n,{Z:()=>t});const t=i.p+"assets/images/gnome-top-panel-keyboard-layout-c727398da89fe9a7bbae669ab07699d7.jpg"},41694:(e,n,i)=>{i.d(n,{Z:()=>t});const t=i.p+"assets/images/gnome-top-panel-network-click-23903f435151287556210b48a2731783.jpg"},27121:(e,n,i)=>{i.d(n,{Z:()=>t});const t=i.p+"assets/images/gnome-top-panel-right-click-10a13ee21a2ed1ad21315bfdd76e4041.jpg"},62903:(e,n,i)=>{i.d(n,{Z:()=>t});const t=i.p+"assets/images/gnome-touchpad-settings-ee9690f056a1ed39ebddd5cd61936608.jpg"},8338:(e,n,i)=>{i.d(n,{Z:()=>t});const t=i.p+"assets/images/gnome-tweak-tool-desktop-46f30603727af27af46f394d0df8f07e.jpg"},94202:(e,n,i)=>{i.d(n,{Z:()=>t});const t=i.p+"assets/images/gnome-tweak-tool-top-bar-212f1978bc9194fbe0d5a1f49da0ef38.jpg"},44483:(e,n,i)=>{i.d(n,{Z:()=>t});const t=i.p+"assets/images/gnome-volume-control-fc9ad5c29a7859a4532adde7ed56df46.jpg"},36663:(e,n,i)=>{i.d(n,{Z:()=>t});const t=i.p+"assets/images/workspace-shortcuts-gcc-f4f5e863caf0c2532f4d3cbc633b5f8a.jpg"},11151:(e,n,i)=>{i.d(n,{Z:()=>d,a:()=>a});var t=i(67294);const o={},s=t.createContext(o);function a(e){const n=t.useContext(s);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function d(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:a(e.components),t.createElement(s.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/fb6dc457.e87ac9bb.js b/assets/js/fb6dc457.e87ac9bb.js new file mode 100644 index 000000000..98add234e --- /dev/null +++ b/assets/js/fb6dc457.e87ac9bb.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([["7127"],{65631:function(e,n,t){t.r(n),t.d(n,{metadata:()=>i,contentTitle:()=>r,default:()=>h,assets:()=>c,toc:()=>l,frontMatter:()=>a});var i=JSON.parse('{"id":"user/editions/gnome/configuration","title":"Configuration","description":"System","source":"@site/docs/user/editions/gnome/configuration.md","sourceDirName":"user/editions/gnome","slug":"/user/editions/gnome/configuration","permalink":"/docs/user/editions/gnome/configuration","draft":false,"unlisted":false,"editUrl":"https://github.com/getsolus/help-center-docs/tree/master/docs/user/editions/gnome/configuration.md","tags":[],"version":"current","lastUpdatedAt":1733757592000,"frontMatter":{"title":"Configuration","summary":"Help for configuring GNOME Shell on Solus"},"sidebar":"userSidebar","previous":{"title":"GNOME","permalink":"/docs/user/editions/gnome/"},"next":{"title":"Tips and Tricks","permalink":"/docs/user/editions/gnome/tips-and-tricks"}}'),o=t("85893"),s=t("50065");let a={title:"Configuration",summary:"Help for configuring GNOME Shell on Solus"},r="Configuration",c={},l=[{value:"System",id:"system",level:2},{value:"Date and time",id:"date-and-time",level:3},{value:"Default applications",id:"default-applications",level:3},{value:"Displays",id:"displays",level:2},{value:"Keyboard layout",id:"keyboard-layout",level:2},{value:"IBus",id:"ibus",level:3},{value:"Language",id:"language",level:2},{value:"Mouse and touchpad",id:"mouse-and-touchpad",level:2},{value:"Mouse",id:"mouse",level:3},{value:"Touchpad",id:"touchpad",level:3},{value:"Testing",id:"testing",level:3},{value:"Networking",id:"networking",level:2},{value:"Non-hidden network",id:"non-hidden-network",level:3},{value:"Hidden network",id:"hidden-network",level:3},{value:"Sound and sound devices",id:"sound-and-sound-devices",level:2},{value:"Settings",id:"settings",level:3},{value:"Users",id:"users",level:2},{value:"Adding a user",id:"adding-a-user",level:3},{value:"Removing a user",id:"removing-a-user",level:3},{value:"User interface",id:"user-interface",level:2},{value:"Desktop background",id:"desktop-background",level:3},{value:"Desktop icons",id:"desktop-icons",level:3},{value:"Workspaces",id:"workspaces",level:2},{value:"Keyboard Shortcuts",id:"keyboard-shortcuts",level:3}];function d(e){let n={a:"a",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",header:"header",img:"img",li:"li",p:"p",ul:"ul",...(0,s.a)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(n.header,{children:(0,o.jsx)(n.h1,{id:"configuration",children:"Configuration"})}),"\n",(0,o.jsx)(n.h2,{id:"system",children:"System"}),"\n",(0,o.jsx)(n.h3,{id:"date-and-time",children:"Date and time"}),"\n",(0,o.jsxs)(n.p,{children:["To change the date and time settings in GNOME, you can open the Overlay using the ",(0,o.jsx)(n.code,{children:"Super"}),' button on your keyboard or by clicking the applications icon in the dock and then finding and clicking on "Date & Time".']}),"\n",(0,o.jsx)(n.p,{children:'You will be presented with the following window. This window provides you with the ability to enable / disable automatic date & time, automatic time zone changing, and the time format. You will need to click on "Unlock" and input your user password before changes can be made.'}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.img,{alt:"GNOME Date and Time",src:t(46441).Z+"",width:"742",height:"384"})}),"\n",(0,o.jsx)(n.p,{children:'If you wish to change how the time is displayed in the top panel, go back to the Applications Overlay and then find and click on "Tweak Tool". You can now show the date and / or seconds by opening the Top Bar section.'}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.img,{alt:"GNOME Tweak Tool: Top Bar",src:t(79797).Z+"",width:"906",height:"656"})}),"\n",(0,o.jsx)(n.h3,{id:"default-applications",children:"Default applications"}),"\n",(0,o.jsxs)(n.p,{children:["With GNOME, you will need to open the Overlay using the ",(0,o.jsx)(n.code,{children:"Super"}),' button on your keyboard or by clicking the applications icon in the dock and then finding and clicking on "Details".']}),"\n",(0,o.jsx)(n.p,{children:'Upon entering the Details section, click on "Default Applications" and then use the drop down boxes to select a different default application for each category. For most categories, you will need to have installed alternative applications before you can change the default settings. For instance, if you wish to change the default video player from GNOME MPV to VLC then you must first install VLC (available in the Software Center).'}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.img,{alt:"GNOME Default Applications",src:t(89711).Z+"",width:"742",height:"517"})}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.em,{children:"Note: In the image above, we've changed the Web browser and Photo viewer."})}),"\n",(0,o.jsx)(n.p,{children:'You can specify default applications for individual file types by right clicking on a file and then clicking on "Open With Other Application".'}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.img,{alt:"GNOME Context Menu ",src:t(16406).Z+"",width:"324",height:"417"})}),"\n",(0,o.jsx)(n.p,{children:'Next, select the application you wish to use from the list. You may need to click "View All Applications" if you can\'t see the one you would like to use. Finish by clicking "Select". In the future, all files with the same file type will open with the same application.'}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.img,{alt:"GNOME Application Selection",src:t(45332).Z+"",width:"426",height:"405"})}),"\n",(0,o.jsx)(n.h2,{id:"displays",children:"Displays"}),"\n",(0,o.jsx)(n.p,{children:'In GNOME, You can configure your display(s) simply by right clicking anywhere on the desktop and clicking "Display Settings".'}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.img,{alt:"GNOME Desktop Context Menu",src:t(47859).Z+"",width:"210",height:"152"})}),"\n",(0,o.jsxs)(n.p,{children:["Alternatively, you can open the Overlay using the ",(0,o.jsx)(n.code,{children:"Super"}),' button on your keyboard or by clicking the applications icon in the dock and then finding and clicking on "Displays".']}),"\n",(0,o.jsx)(n.p,{children:"You will then be shown the following window."}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.img,{alt:"GNOME Displays Overview",src:t(98609).Z+"",width:"742",height:"345"})}),"\n",(0,o.jsx)(n.p,{children:"Click on the individual display you wish to configure. You will now be able to select if you wish to use this monitor as the primary or secondary display, mirror it with another display, or turn it off. This window also gives you the size and aspect ratio, ability to rotate the display, and ability to change the resolution."}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.img,{alt:"GNOME Individual Display Settings",src:t(72880).Z+"",width:"741",height:"365"})}),"\n",(0,o.jsx)(n.p,{children:"Going back to the Displays section, you also have the option to arrange your displays. Click the \u201CArrange Combined Displays\u201D button and then drag your displays so they are arranged to your liking."}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.img,{alt:"GNOME Arrange Displays",src:t(37866).Z+"",width:"742",height:"381"})}),"\n",(0,o.jsx)(n.p,{children:'Click "Apply" once you are happy with your changes. You will be shown a message asking if the display looks OK, if it does, click on "Keep Changes" within 20 seconds.'}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.img,{alt:"GNOME Confirm Display Settings",src:t(50497).Z+"",width:"502",height:"142"})}),"\n",(0,o.jsx)(n.h2,{id:"keyboard-layout",children:"Keyboard layout"}),"\n",(0,o.jsxs)(n.p,{children:["With GNOME, open the Overlay using the ",(0,o.jsx)(n.code,{children:"Super"}),' button on your keyboard or by clicking the applications icon in the dock and then find and click on "Region and Language".']}),"\n",(0,o.jsx)(n.p,{children:"You will now be shown the following dialog."}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.img,{alt:"GNOME Region and Languages",src:t(23037).Z+"",width:"742",height:"345"})}),"\n",(0,o.jsxs)(n.p,{children:["Click the ",(0,o.jsx)(n.code,{children:"+"})," button to add an input source (keyboard layout). You will be shown the following dialog."]}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.img,{alt:"GNOME Add Input Source",src:t(2233).Z+"",width:"742",height:"410"})}),"\n",(0,o.jsxs)(n.p,{children:["Here you can select the language and then keyboard layout within each language section. If it does not appear in this list, click the ",(0,o.jsx)(n.code,{children:"\u22EE"})," button (three vertical dots). This will enable you to search for the keyboard layout you wish to use."]}),"\n",(0,o.jsx)(n.p,{children:'After choosing the keyboard layout, click "Done". You will be brought back to the following dialog with your new keyboard layout. In the image below, we are now using English (US), Finnish, and Swedish layout.'}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.img,{alt:"GNOME New Input Source Added",src:t(63310).Z+"",width:"742",height:"363"})}),"\n",(0,o.jsxs)(n.p,{children:["You can remove a keyboard layout by clicking on one of the items, for instance Swedish, then clicking the ",(0,o.jsx)(n.code,{children:"-"})," button."]}),"\n",(0,o.jsxs)(n.p,{children:["If you wish to use multiple keyboard layouts, you can switch between them by using the keyboard shortcut ",(0,o.jsx)(n.code,{children:"Super + Space"})," or by clicking on the keyboard layout icon shown in the system tray. The icon will automatically appear when you have 2 or more keyboard layouts selected."]}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.img,{alt:"GNOME Keyboard Indicator",src:t(45186).Z+"",width:"206",height:"168"})}),"\n",(0,o.jsx)(n.h3,{id:"ibus",children:"IBus"}),"\n",(0,o.jsxs)(n.p,{children:["For ease of use, GNOME has IBus up and running by default. If you need an additional IBus IME see: ",(0,o.jsx)(n.a,{href:"/docs/user/software/localization/ibus/",children:"IBus"})]}),"\n",(0,o.jsxs)(n.p,{children:["You can now switch between your layouts by using the keyboard shortcut ",(0,o.jsx)(n.code,{children:"Super + Space"})," or by clicking on the keyboard layout icon shown in the system tray."]}),"\n",(0,o.jsx)(n.h2,{id:"language",children:"Language"}),"\n",(0,o.jsxs)(n.p,{children:["With GNOME, open the Overlay using the ",(0,o.jsx)(n.code,{children:"Super"}),' button on your keyboard or by clicking the applications icon in the dock and then find and click on "Region and Language".']}),"\n",(0,o.jsx)(n.p,{children:"You will now be shown the following window. This window allows you to change your language, formatting for dates and times and the language of your keyboard."}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.img,{alt:"GNOME Region and Languages",src:t(23037).Z+"",width:"742",height:"345"})}),"\n",(0,o.jsx)(n.p,{children:'Start by clicking "Language". This brings up a selection of languages to chose from.'}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.img,{alt:"GNOME Selecting Language",src:t(17578).Z+"",width:"742",height:"489"})}),"\n",(0,o.jsx)(n.p,{children:"If your language does not appear in the list, click the \u22EE button at the bottom (three vertical dots) to show all the available languages. You can use the search box to go directly to your choice or scroll down the list."}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.img,{alt:"GNOME Language Search",src:t(17222).Z+"",width:"742",height:"489"})}),"\n",(0,o.jsxs)(n.p,{children:['Once you have selected the language you wish to use, click "Done". You ',(0,o.jsx)(n.em,{children:"may"})," need to logout and login to your computer for it to take affect."]}),"\n",(0,o.jsx)(n.h2,{id:"mouse-and-touchpad",children:"Mouse and touchpad"}),"\n",(0,o.jsxs)(n.p,{children:["With GNOME, open the Overlay using the ",(0,o.jsx)(n.code,{children:"Super"}),' button on your keyboard or by clicking the applications icon in the dock and then find and click on "Mouse and Touchpad". You will see either settings for your mouse or trackpad, depending on the device.']}),"\n",(0,o.jsx)(n.h3,{id:"mouse",children:"Mouse"}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.img,{alt:"GNOME Mouse Settings",src:t(16802).Z+"",width:"742",height:"585"})}),"\n",(0,o.jsx)(n.p,{children:"For mice, you can set:"}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsx)(n.li,{children:"The primary button (usually left click) to be left or right."}),"\n",(0,o.jsx)(n.li,{children:"Mouse speed."}),"\n",(0,o.jsx)(n.li,{children:'Enabling / disabling "natural scrolling" (reversed scrolling direction).'}),"\n"]}),"\n",(0,o.jsx)(n.h3,{id:"touchpad",children:"Touchpad"}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.img,{alt:"GNOME Touchpad Settings",src:t(48076).Z+"",width:"742",height:"585"})}),"\n",(0,o.jsx)(n.p,{children:"For touchpads, you can set:"}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsx)(n.li,{children:"The primary button (usually left click) to be left or right."}),"\n",(0,o.jsx)(n.li,{children:"Enabling / disabling of the touchpad."}),"\n",(0,o.jsx)(n.li,{children:'Enabling / disabling "natural scrolling" (reversed scrolling direction).'}),"\n",(0,o.jsx)(n.li,{children:"Touchpad speed."}),"\n",(0,o.jsx)(n.li,{children:"Enabling / disabling of Tap to Click."}),"\n"]}),"\n",(0,o.jsx)(n.h3,{id:"testing",children:"Testing"}),"\n",(0,o.jsx)(n.p,{children:'You can test your settings by clicking the "Test Your Settings" button in the top right of the window.'}),"\n",(0,o.jsx)(n.h2,{id:"networking",children:"Networking"}),"\n",(0,o.jsx)(n.p,{children:'Easily change network settings with GNOME by left or right clicking on the system tray in the top panel and then clicking on "WiFi Not Connected".'}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.img,{alt:"GNOME Network Indicator",src:t(20047).Z+"",width:"331",height:"500"})}),"\n",(0,o.jsxs)(n.p,{children:["Alternatively, you can open the Overlay using the ",(0,o.jsx)(n.code,{children:"Super"}),' button on your keyboard or by clicking the applications icon in the dock and then finding and clicking on "Network".']}),"\n",(0,o.jsx)(n.h3,{id:"non-hidden-network",children:"Non-hidden network"}),"\n",(0,o.jsx)(n.p,{children:'Once you have opened the "WiFi Not Connected" menu, click on "Select Network". Click on the network you wish to join and then on "Connect".'}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.img,{alt:"GNOME Network Selection",src:t(90827).Z+"",width:"500",height:"479"})}),"\n",(0,o.jsx)(n.p,{children:'You may now be prompted to authenticate with the network. Type in your password and then click "Connect".'}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.img,{alt:"GNOME Network Authentication",src:t(39639).Z+"",width:"550",height:"244"})}),"\n",(0,o.jsx)(n.p,{children:"If your password is correct, you will now be authenticated with the network."}),"\n",(0,o.jsx)(n.h3,{id:"hidden-network",children:"Hidden network"}),"\n",(0,o.jsx)(n.p,{children:'To join a hidden network, open the "WiFi Not Connected" menu and click on "WiFi Settings".'}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.img,{alt:"GNOME Network Overview",src:t(15866).Z+"",width:"742",height:"491"})}),"\n",(0,o.jsx)(n.p,{children:"Next, click on \u201CConnect to Hidden Network...\u201D. It will show the following dialog, where you type the network name and type of security (if any)."}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.img,{alt:"GNOME Hidden Network",src:t(75421).Z+"",width:"741",height:"490"})}),"\n",(0,o.jsx)(n.p,{children:"If the network is found and has a password, you will be prompted to authenticate with the network."}),"\n",(0,o.jsx)(n.h2,{id:"sound-and-sound-devices",children:"Sound and sound devices"}),"\n",(0,o.jsx)(n.p,{children:"With GNOME, the volume can be changed by left or right clicking the system tray in the top panel and then simply dragging the volume slider with your mouse."}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.img,{alt:"GNOME Volume Control",src:t(75535).Z+"",width:"300",height:"370"})}),"\n",(0,o.jsx)(n.h3,{id:"settings",children:"Settings"}),"\n",(0,o.jsxs)(n.p,{children:["You can access sound settings, including individual application volume controls, and a simple speaker test by opening the Overlay using the ",(0,o.jsx)(n.code,{children:"Super"}),' button on your keyboard or by clicking the applications icon in the dock and then finding and clicking on "Sound".']}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.img,{alt:"GNOME Sound Settings",src:t(71917).Z+"",width:"742",height:"495"})}),"\n",(0,o.jsx)(n.h2,{id:"users",children:"Users"}),"\n",(0,o.jsx)(n.p,{children:'To add and remove users with GNOME, you can click on the icons in the far right of the top panel. Click on your name and then on "Account Setting".'}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.img,{alt:"GNOME User Indicator",src:t(15025).Z+"",width:"283",height:"323"})}),"\n",(0,o.jsxs)(n.p,{children:["Alternatively, you can open the Overlay using the ",(0,o.jsx)(n.code,{children:"Super"}),' button on your keyboard or by clicking the applications icon in the dock and then finding and clicking on "Users".']}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.img,{alt:"GNOME User Settings",src:t(70089).Z+"",width:"742",height:"453"})}),"\n",(0,o.jsx)(n.p,{children:'To manage your own or other accounts, you first need to authenticate. Click the "Unlock" button in the top right corner and type your password. Note that you are required to be an administrator. If you\'re the only user on the system, then your account is an administrator by default.'}),"\n",(0,o.jsx)(n.p,{children:'In the event the password provided is correct, the "Unlock" button will change to "Add User..."'}),"\n",(0,o.jsx)(n.h3,{id:"adding-a-user",children:"Adding a user"}),"\n",(0,o.jsx)(n.p,{children:'To add a user, click the "Add User..." button in the top right corner of the Users window.'}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.img,{alt:"GNOME Add User Button",src:t(1661).Z+"",width:"225",height:"65"})}),"\n",(0,o.jsx)(n.p,{children:"This will open the Add User window (shown below)."}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.img,{alt:"GNOME Add User Dialog",src:t(12442).Z+"",width:"466",height:"546"})}),"\n",(0,o.jsx)(n.p,{children:'Fill in the required items and then finish adding the new user by clicking "Add" in the top right corner.'}),"\n",(0,o.jsx)(n.h3,{id:"removing-a-user",children:"Removing a user"}),"\n",(0,o.jsx)(n.p,{children:'To remove a user, open the Users window and then click on the user you wish to remove. Now click on the red "Remove User..." button in the bottom right corner.'}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.img,{alt:"GNOME User List",src:t(51048).Z+"",width:"742",height:"592"})}),"\n",(0,o.jsx)(n.p,{children:"Upon clicking to remove the user, you will be given the option to keep their files, delete their files, or cancel the removal of the user\u2019s account."}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.img,{alt:"GNOME Keep Files Prompt",src:t(78562).Z+"",width:"508",height:"162"})}),"\n",(0,o.jsx)(n.h2,{id:"user-interface",children:"User interface"}),"\n",(0,o.jsx)(n.h3,{id:"desktop-background",children:"Desktop background"}),"\n",(0,o.jsx)(n.p,{children:'The GNOME desktop background can be changed by simply right clicking anywhere on the desktop and selecting "Change background".'}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.img,{alt:"GNOME Background Right Click Menu",src:t(55164).Z+"",width:"212",height:"150"})}),"\n",(0,o.jsx)(n.p,{children:'Alternatively, you can open the Applications Overlay by clicking the applications icon in the dock and then finding and clicking on "Background".'}),"\n",(0,o.jsx)(n.p,{children:'You will have two options, Background and Lock Screen. Click "Background".'}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.img,{alt:"GNOME Settings Background Section",src:t(84645).Z+"",width:"742",height:"515"})}),"\n",(0,o.jsx)(n.p,{children:'In this section, you can choose between Solus wallpapers, pictures in your Pictures folder, or solid colors. After choosing, click "Select".'}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.img,{alt:"GNOME Background Selection",src:t(22832).Z+"",width:"830",height:"468"})}),"\n",(0,o.jsx)(n.h3,{id:"desktop-icons",children:"Desktop icons"}),"\n",(0,o.jsxs)(n.p,{children:["In GNOME, you can enable desktop items by opening the Overlay using the ",(0,o.jsx)(n.code,{children:"Super"}),' button on your keyboard or by clicking the Applications icon in the dock and then search for and open "Tweak Tool". You can then toggle them on and off by clicking "Icons on Desktop" under the Desktop section.']}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.img,{alt:"GNOME Tweak Tool",src:t(29542).Z+"",width:"904",height:"654"})}),"\n",(0,o.jsx)(n.p,{children:'You may now add things to your Desktop. This can be done by dragging an item onto the Desktop or by right clicking an icon and selecting Copy to / Move to Desktop. Alternatively, click on the "Files" icon in the dock and then move the files you want to the Desktop folder (as shown in the image below). Please note, the Desktop folder is not visible in "Files" until you\'ve enabled the Desktop icons.'}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.img,{alt:"GNOME Desktop Folder",src:t(80181).Z+"",width:"884",height:"415"})}),"\n",(0,o.jsx)(n.h2,{id:"workspaces",children:"Workspaces"}),"\n",(0,o.jsx)(n.p,{children:"GNOME enables the switching of workspaces via the Workspace Switcher on the right side of the Activities Overview screen. Application windows can be dragged from the Activities Overview to a workspace, whether it is empty / new, or one that already has windows in it."}),"\n",(0,o.jsx)(n.h3,{id:"keyboard-shortcuts",children:"Keyboard Shortcuts"}),"\n",(0,o.jsx)(n.p,{children:"GNOME provides a variety of keyboard shortcuts for workspaces."}),"\n",(0,o.jsx)(n.p,{children:"To view these shortcuts open the Keyboard application and scroll to the Navigation section."}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.img,{alt:"GNOME Workspaces Keyboard Shortcuts",src:t(36950).Z+"",width:"740",height:"395"})})]})}function h(e={}){let{wrapper:n}={...(0,s.a)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(d,{...e})}):d(e)}},2233:function(e,n,t){t.d(n,{Z:function(){return i}});let i=t.p+"assets/images/gnome-add-input-source-d437c5e7831ecdb1e489aa21ac60d526.png"},1661:function(e,n,t){t.d(n,{Z:function(){return i}});let i="data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEASABIAAD/2wBDAAIBAQEBAQIBAQECAgICAgQDAgICAgUEBAMEBgUGBgYFBgYGBwkIBgcJBwYGCAsICQoKCgoKBggLDAsKDAkKCgr/2wBDAQICAgICAgUDAwUKBwYHCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgr/wAARCABBAOEDAREAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD9c9Ph1SC+km+0FoHXBQrjB9a/KYUqsajd9D66UoONupqQ3UwABTIx1rrjz9jF8pKk7MSoY1UU2S7D45UDeZ6nmrjFCbHmdQ2Bkgnr6U3Gz0QiWFwo54wa0jHQlu5I11tXGepq22lYncR7iWJd23cKluSQ0rkD38mzMa/gaxnKql7qLUY9Sv8A2w018mnLZSsXXll+6PxrP20faKnJaspwtG9x19qcGk25muA2xPvnPSpxGJw2ChzzdkOnSqVpcsRbfU7TU4PNsXLgjqRirp4mhiIXpu6FKnUpytIdFCTGGeY8n1q40uZXuS5Ddio20scE9afs3F2Dm6jZ4Fx8s+D2pypAphh1i/euCR3FHs7R1DmuyCaO2Iyz8n6VhPDUpK0tS1UknoZer6BpupQBZ13sjbgG6A1xvL8JTjzQikzeOJrX3MKPwvpS6sbaexyrDliMg/0rneHUqtrfM6PbzUL3OI8U/s2eEpru81fSL+9gvJpfMjmiuWUK/Y46VjLBOOx2Us0nZKSKvw+8FfE3wdqMl5qvxMvdSQFcw3aqQFB5wcda5Z0KsZfu9Doq4jC1oW5bM7Xx7+0mfhLo0Go3WgX+q27yLHO2nRbjHnjOO4HeumlKo0ouN/PY4IYNV5aSsZWufEL4P/Gbwa/2vULuwgujtNxPGYwp+prmq0suq+67xl95vShj8LPTU42X4FWWgT2+p+CPHsd7beXtFtPMrBh7Y715tTJ+WTnGab+49P8AtmVSPJUhYzPinpHjTWPDjW8Xgeb7Zp43Wl6jgqMf3QATz059frXNg8JjMFWcpv3H0LhXw1WSs7ep46ngP9oO406bxHr2k2t7vJYQrJsIToFJb7xxxxgelepXx+Bp8iV4o76UKTk43u+ljI8G/G3wr4NefwpeeH72yup5D5zNkAY+8Qe5r0KmH+tQVWMk0Z1MPVU+W2p0lx8dPhhrcQ0ObxV9qvLIbraKWTJQ+2eD9a4/7Px0ZKcY2iyfZQi3rqH/AAtex/6DH/jq/wCFbfVanYPZxPznX/gtH/wU+QYX9q665/6kvQf/AJX1+2LIMpW1N/8AgT/zPx/+0cY/tfghR/wWl/4KfgbR+1fdY/7EvQf/AJX0/wCwcq/kf/gT/wAw/tDF/wA34IP+H03/AAVAHP8Aw1fdf+EXoH/yvoWQ5Sv+Xf8A5M/8xf2hi/5vwQ1v+C0P/BT1zlv2rbr/AMIzQf8A5ApPIMpf/Lt/+BP/ADH/AGhjP5vwQ4f8Fpv+CoA6ftX3X/hF6B/8r6f9hZV/z7f/AIE/8xf2hi/5vwQ4f8Fqv+CoY4H7WN1/4Regf/K+msjytfYf/gT/AMwePxb+1+CD/h9V/wAFQ85P7WN1/wCEXoH/AMr6f9h5V/z7/F/5i+v4v+b8EL/w+t/4KjYx/wANZXWP+xL0D/5X0f2Hlf8Az7/F/wCYfXsX/N+CG/8AD6n/AIKh/wDR2F1/4Regf/K+j+w8r/59/i/8w+vYv+b8EOh/4LXf8FRrd/Mh/axuQ3r/AMIVoH/yvqf7AyhS5vZ6+r/zH9fxdrc34IbP/wAFp/8AgqDc7vP/AGrrlt3UHwVoHP8A5T6ynw1kdRWlRv6t/wCZSzLHR2n+CGQf8Fof+Cnlsnl2/wC1ZcoP9nwVoA/9x9XDh/J6ceWNKy9X/mJ5jjZO7l+CJP8Ah9Z/wVFxt/4ayuv/AAi9A/8AlfWiyPK0v4f4v/Mn6/i/5vwQN/wWr/4KiNyf2sbr/wAIrQP/AJX0/wCxMrf2Pxf+YfXsV/N+CEP/AAWn/wCCoLHJ/avuv/CL0D/5X0v7Dyr/AJ9/i/8AMPr+L/m/BDW/4LR/8FPmOW/auuj/ANyZoP8A8gUnkWVP7D/8Cf8AmNY/Fr7X4IYf+Czv/BTo/wDN1l1/4Rmg/wDyBU/2BlH/AD7f/gT/AMx/2hi/5vwQv/D53/gp1jH/AA1Xc/8AhGaD/wDIFH+r+Uf8+/8AyZ/5h/aGL/m/BDG/4LLf8FNX+9+1Vd/+EdoX/wAgVH+rmTX/AIb/APApf5j/ALSxv834Iaf+CyX/AAUyPX9qi6/8I7Qv/kCn/q7k3/Pv/wAml/mL+0cZ/N+CGSf8Fiv+Clcq7ZP2pLkj0/4Q3Qv/AJApPhzJXvS/8ml/mP8AtLGr7X4Ir3H/AAV0/wCCjd3EYbn9pu4dD1VvB+h4/wDSGpfDORv/AJdf+TS/zKWa5gndT/BGfqP/AAVN/b91XRpPD9/+0RJJZzf6yA+D9DAP5WOazfCuQP8A5c/+TS/zNo55msZXVT8F/kZ9h/wUr/bp0qxTTtP/AGhbyKGLHlovhzSPlx0wfseRWcuEeHpSu6Lv/il/maf6w5v/AM/P/JY/5G1p/wDwV0/4KRaPCIbD9qLUdgHCyeGtGcf+PWJrWPC+RQVlSf8A4FL/ADMJZvmE3rJfcv8AIjuP+Ctv/BRS+Ui7/aWumHTH/CJ6J/SxrnrcGcM4hWqUL/8Ab0v8zWGe5tTd41LfJf5HKWn7bfxt1PxfZeKviv4/udZsrObzbu3i02ztWkjzmQA28EZ3FdwBOQCQSGAINT4WymlhpQw0OV201bXlo2zvw3FudUqsXOpzRXSy/RXP038X/wDBLPWRJcX3hfxh/abh82d21z5cioRyGK9fX8TX55TzLFU4pRimj7xZnha8uavFqRyv/Dtn41f9ByL/AL+v/jWv9rv+R/gbe2yzz+8/Jiv2Q/FgoAKACgAoAKAP090n9mz4AaPplvpVv8GfDMqW8SxrJd6HBNKwAxlndCzt6kkk1+zU8nyunBRVCLt3im/vaufy3W4m4hrVZVHi6ibd9JyS+STSS8kWf+GfvgL/ANES8I/+E1a//G6v+ysr/wCfEP8AwGP+Rn/rDn//AEF1f/Bk/wDMP+GfvgL/ANES8I/+E1a//G6P7Kyv/nxD/wABj/kH+sOf/wDQXV/8GT/zD/hn74C/9ES8I/8AhNWv/wAbo/srK/8AnxD/AMBj/kH+sOf/APQXV/8ABk/8w/4Z++Av/REvCP8A4TVr/wDG6P7Kyv8A58Q/8Bj/AJB/rDn/AP0F1f8AwZP/ADD/AIZ++Av/AERLwj/4TVr/APG6P7Kyv/nxD/wGP+Qf6w5//wBBdX/wZP8AzD/hn74C/wDREvCP/hNWv/xuj+ysr/58Q/8AAY/5B/rDn/8A0F1f/Bk/8w/4Z++Av/REvCP/AITVr/8AG6P7Kyv/AJ8Q/wDAY/5B/rDn/wD0F1f/AAZP/MP+GfvgL/0RLwj/AOE1a/8Axuj+ysr/AOfEP/AY/wCQf6w5/wD9BdX/AMGT/wAw/wCGfvgL/wBES8I/+E1a/wDxuj+ysr/58Q/8Bj/kH+sOf/8AQXV/8GT/AMw/4Z++Av8A0RLwj/4TVr/8bo/srK/+fEP/AAGP+Qf6w5//ANBdX/wZP/M+fP8Agon8HPhb4M+FWj+LfBvgLStHvh4hS0eTSrFLcSRPBM5DLGAGO6JcEjI5x1NfK8WZfgsPgoVaVNRfNbRJaNN9PQ/Q/DjOs1xubVcPia0px5HL3m5WalFaN3a0b9fkfHlfAH7KFABQAUAFABQAjKW6UrJANEZ7mhICvrShdHusdfs7/wDoJpS+FjW5+9nxW0T4p2d7bXGleKL3S7K7fF5Ppku4wvkYO0/w4r+fYJwXNKJ+wYaeEmmmlfpcxf8AhAPiN/0ct4k/8BBT+sU/+fX4ml6f8q/A/Div6DPxoKACgAoAKACgD9dK/eD+PyfTNOvNY1K30nToGluLqdIYIlGS7sQqgfUkUNpK7dkGvRXO/wDin+zrrvgb4jab8PfB+rjxM2rQFtPu7S38lZZUkkinjwXIAjkikBYsBtXccA8eNl+c0sZhalerH2ahq7v7LipRl03i1p301Po834cxGW4ujh6UvayqXWi/5eRk4Thu7uMlv1TT0TK2v/s9+NNGtfDNvaeTqGqeJp7uO2sNOuoLiNRCyDctxFK8bqQxJOQE2HJ640pZvhqtSrf3Y04xk2047826kk18Pzvp544jIMZQw9CWkp1ZzgoxcZfCqdrSjJp3c7W6cuu+lH4ifCDV/ht4Y0LXdb1K1lm1p7sCCyuYbiKNYWRQyzwyOkm7eeh4K457aYTMaWMxM6UE7RUXdpp+9zacskmrct/O5lj8mr5dgaWIqyV5ynGycZL3FB35oyad3O1unL56VNY+H39k+EvC/in+1/M/4SQ3P7j7Pj7P5U/lfe3fPnr0GOnPWt6OJ9tjqmGtbkUXfvzX6eVu+pyYjB/V8qp43mvzyqK1tuRQe/nzdtLdbmz4m/Z68b6R4k8QaTov2a9stC1i504X91fW9mbySDlxDFLKGlcLhike8gMPUVxYfOcNVwtKrUvFzipWScrJ9W0tFfS7stz1MXw3jaOOrYei1JU5cvM3GF3a9kpS1lb7Kbf3mRcfB74h2vhIeNp9CjWx+yJdlf7QgNwts7hFna3D+csRYgCQoFORzyK6v7QwjxPsOb3r8uztzWvy81uXmtra9/I4FlGYSwf1lQ9yzlvHm5U7OShfmcU9OZRt5kPj34W+N/hjcRWXjjS4bG4lLBbX+0YJZlAAO5o43ZkUhgVZgAw+6Tg08Lj8Ljb+xle3WzS7Wu1a6tqt11JxuV47L4RliIqPNZpc0W7NJp2Tbs01Z2s9r3TOfrsPPCgD50/4Kb/8kF0j/sb7f/0luq+S4y/5FcP8a/8ASZH6R4X/API/q/8AXqX/AKXA+I5/+Rdtf+v24/8AQIa/Neh+8dSlSA3fDHwv+JfjWwfVfBvw713V7WOYxSXOmaRNcRrIACULIpAbDKcdcMPWldIDI1DT7/Sb+fStVsZra6tpmiuba4iKSRSKSGRlPKsCCCDyCKYENAHZfAj4YxfFj4h2/hm8uHis44mub54z83lKQML6EsyjPbOe1edmuNeAwbqJa7L1PruCOHI8UZ/DCVG1TScp235VbRebbSv0vc99/sX9nQan/wAKt/4VOP7S+3fY/sn9mj7R5X/P3527d5O35t+7PbGeK+U9pnHJ9Z9t7tr3vpf+W3fpa1vkfuX1PgD6x/Y39n/vefk5eT3+X/n7z3v7O2vNzX6W5tDwH48fDOL4TfES48M2k7yWckS3Ni8h+bymJGG9SGVlz3xnvX1WV414/CKq1rs/VH4Zxtw3HhfPp4Sm26bSlBvfld9H5ppq/W1zhNc40W8IHP2WT/0E13yvZnya3P6QdD064lsv3mk4kIBKsd2fzr8OdOy2P0JVNdyx/ZN9/wBC8v5LWXLL+U19pHufzgV+8n5uFABQAUAFABQB+ulfvB/H51fwU8beH/ht8SNP8feIdKlvl0jzLmytI1BWS7VGMG/LKQgl2MxBzheATXFmWHrYvA1KFJ2c1y37Ju0vny3t52PRyjE4bBZnSxFeLlGD5rK2rjrFa9HJR5v7t9HsegaT+0x4BuNI0mz1r4bHS5NLvNRhA0OeaVWsdQtpIrk7rueRxMrlZEGdhy2ducnx6uR4nnnyVbqUYr3klaVOSlT0jFJrdS62ta+y+ko8U4Nxpurh+WUKrmuVyd1Ui4VbucpNSfuSjbS6d0t3Q034xfC3wk3hXRfD0Ov32m6Rb6xa6tc3tnBbzyR38XlF4UWWRVZFJIVmwSB83PG1XLsdivbyq8sXNU+WzbSdOTnrdRum7bLa+mmvNQzfK8vWEjh+eapVKspOSjFtVIQh7qUpWaUXu97O+tlzPxL8W+ANR8E+G/A/gKbWJ49ElvnuLvV7KKAzGd42BVI5ZNuAhBBY/U547MJh8YsZUxFdRXNGKSi27crle7aX83b/ADfnZhisueWUcJhXN8k6km5JRvzxppWSlLbkd9ezvrZaPhvxz8JdZ8D+HvDPxMfxDaz+GL64ktX0SygnS9glkWQxOZZozCwYN84DjDfd45mrh8fRx08RheV88YpqTas43s1ZO6s9VptuOhicrxOVRwWNc48k5STgoyupqCcWpSjZrkupXe7vHQ29F+P/AIM1PWvEOufEK3v7mz1nX7vUn8LHRbS9tJvOHAWeV1ls5BwDNEGYhV44xXBUyfE0sJSo4drmhBRU+aUZJrrZJqSvrySsr311PYpcRYKtmdfE4pS9nUqc7p8kJxlH+VuTThK3u+0jd26aEXin9oHRtf8AAQs7C7ubHVX8N2ujXNlF4T00xyxwpHGWOoH/AEnayRg+Xt4bgPgAVtSyqpTxznJKUHUdS/PNNNvmtyL3G1LrfbdXOeef0Z5ZGnFuNSNL2VlTptNaxv7V/vFeLs0k9dpK5yfxW8W+C/iB4u8Q+NrFtUhub/Uo5NNt5baPy/JKkSGVhISrghNoUMCC2SMDPZl+GxODw9KjKzS5uZ3fV3VtNd3e9ulrnl5njMHmGIqV1zJ2pqKsre7FRlza6be7a9+tjHvYfh6tzqg03UdZaFbdDorT2UStJLlN4nAkIRceZgqWJIXIGTjpi8Zyx5lG93zav4dbW01e107LfXa/HJZf7SVpS5eVcuivz2jdPXSN+azV3bl01dsauk4z50/4Kb/8kF0j/sb7f/0luq+S4y/5FcP8a/8ASZH6R4X/API/q/8AXqX/AKXA+IZpYzoNtCJFLrdzsy55AKxYOPfB/I1+a9D946lSkBu+GPih8S/BVg+leDfiJrukWskxlkttM1ea3jaQgAuVRgC2FUZ64UelKyYGRqGoX+rX8+q6rfTXN1czNLc3NxKXklkYks7MeWYkkknkk0wIaAOy+BHxOi+E/wAQ7fxNeW7y2ckTW18kY+bymIOV9SGVTjvjHevOzXBPH4R009d16n13BPEkeF8+hi6ibptOM7b8rtqvNNJ262se/wD9ufs3fb/+Fn/8LPj/ALS+3/bftv8AaX+lbP8An28rG7ydvy+Xtzjvnmvk/ZZzyfVvZe7a1raf4r7X63v+B+5/XfD32/8AbH19e15+fm5/3lv+ffJbm9nb3eTlvbrfU8A+O/xOj+LHxDuPE1nA8VnHEttYpIPm8pSTlvQlmY47Zx2r6zKsE8Bg1Te+79T8L424jjxRn88XTTVNJRhfflV9X5ttu3S9jg9c/wCQLef9esn/AKCa9CXws+TW5/S74dtEkRtsuABx82MivxG2jufdK9zV22f96T86yvDzK5ZH8y9fuh8EFABQAUAAz3NABQB+nuk/tJ/s/wCs6ZBqtv8AGbwzElxEsix3etwQyqCM4ZHcMjeoIBFfs1POMqqQUlWir95JP7m7n8t1uGeIaNWVN4So2nbSEmvk0mmvNFn/AIaB+Av/AEW3wj/4Utr/APHKv+1cr/5/w/8AAo/5mf8Aq9n/AP0CVf8AwXP/ACD/AIaB+Av/AEW3wj/4Utr/APHKP7Vyv/n/AA/8Cj/mH+r2f/8AQJV/8Fz/AMg/4aB+Av8A0W3wj/4Utr/8co/tXK/+f8P/AAKP+Yf6vZ//ANAlX/wXP/IP+GgfgL/0W3wj/wCFLa//AByj+1cr/wCf8P8AwKP+Yf6vZ/8A9AlX/wAFz/yD/hoH4C/9Ft8I/wDhS2v/AMco/tXK/wDn/D/wKP8AmH+r2f8A/QJV/wDBc/8AIP8AhoH4C/8ARbfCP/hS2v8A8co/tXK/+f8AD/wKP+Yf6vZ//wBAlX/wXP8AyD/hoH4C/wDRbfCP/hS2v/xyj+1cr/5/w/8AAo/5h/q9n/8A0CVf/Bc/8g/4aB+Av/RbfCP/AIUtr/8AHKP7Vyv/AJ/w/wDAo/5h/q9n/wD0CVf/AAXP/IP+GgfgL/0W3wj/AOFLa/8Axyj+1cr/AOf8P/Ao/wCYf6vZ/wD9AlX/AMFz/wAg/wCGgfgL/wBFt8I/+FLa/wDxyj+1cr/5/wAP/Ao/5h/q9n//AECVf/Bc/wDI+fP+Cifxj+FvjP4V6P4S8G+PdK1i+PiFLt49KvkuFjiSCZCWaMkKd0q4BOTzjoa+V4szDBYjBQpUqik+a+jT0Sa6ep+h+HGS5rgs2q4jE0ZQjyOPvJxu3KL0Ts3on6fM+PK+AP2UKACgAPHNAAOeaACgABB6UbgFAFXXP+QLecf8usn/AKCamXwsa3P6V9FceSBDMMqBuU+lfiE5K2h95FO5u+fa/wCRWVy+U/ExP+CEX/BWg/e/ZCmH/c9+H/8A5YV+4e3pnwXIx3/DiD/grJ/0aNL/AOF34f8A/lhR7emHJIP+HEH/AAVk/wCjRpf/AAu/D/8A8sKPb0w5JB/w4g/4Kyf9GjS/+F34f/8AlhR7emHJIP8AhxB/wVk/6NGl/wDC78P/APywo9vTDkkH/DiD/grJ/wBGjS/+F34f/wDlhR7emHJIP+HEH/BWT/o0aX/wu/D/AP8ALCj29MOSQf8ADiD/AIKyf9GjS/8Ahd+H/wD5YUe3phySD/hxB/wVk/6NGl/8Lvw//wDLCj29MOSQf8OIP+Csv/Ro0v8A4Xfh/wD+WFHt6YckgH/BCD/grL/0aLL/AOF34f8A/lhR7emHJIP+HEH/AAVk/wCjRpf/AAu/D/8A8sKPb0w5JB/w4g/4Kyf9GjS/+F34f/8AlhR7emHJIP8AhxB/wVk/6NGl/wDC78P/APywo9vTDkkH/DiD/grJ/wBGjS/+F34f/wDlhR7emHJIP+HEH/BWX/o0WX/wu/D/AP8ALCj29MOSQf8ADiD/AIKyf9GjS/8Ahd+H/wD5YUe3phySD/hxB/wVk/6NGl/8Lvw//wDLCj29MOSQf8OIP+Csn/Ro0v8A4Xfh/wD+WFHt6fcOSQf8OIP+Csn/AEaNL/4Xfh//AOWFHt6fcOSQf8OH/wDgrLn/AJNHl/8AC68P/wDywo9vT7hySD/hxB/wVk/6NGl/8Lvw/wD/ACwp+3p9w5JB/wAOIP8AgrJ/0aNL/wCF34f/APlhS9tS7hySGn/ghD/wVp3cfsiyY/7Hvw//APJ9J1qbDkYn/Dh//grQD8v7IsmO/wDxXfh//wCWFL21PuHIx4/4IQf8FZe/7I8v/hdeH/8A5YU1WpoOSRz3xc/4Iuf8FOPhZ8KPE/xO8ffsuyafoXhzw9e6prV+fGehy/ZrS3geWaXZFfM77URm2orMcYAJwKbrU2rIFBpn7UKfFEduZ4bayit0cK8rtypPsB0r8ExVTF2alaPZ7/gfomHjh21u2ankeJ/7lt/3zXm/V8x/5/8A/kp1c+E/59v7z6kr9/PzYKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKAPFv8AgpIcf8E7Pj4T/wBEW8U/+mi6prcDyLwWYPEWl2PiHw9fSJbTxrMomjYb1Izyrcg/Wvx6pC6utD7pe5Jxkdf/AKR/ejrOzFp2Z9L1+yHwwUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAeLf8ABSP/AJR2/Hv/ALIt4p/9NF1TW4PY8og/5JxJ/wBeg/lX47V/g/I+6p/x/mcPXkHtH//Z"},12442:function(e,n,t){t.d(n,{Z:function(){return i}});let i=t.p+"assets/images/gnome-add-user-dialog-4a76a1d5811db1f477173c3c1fabb43a.jpg"},37866:function(e,n,t){t.d(n,{Z:function(){return i}});let i=t.p+"assets/images/gnome-arrange-displays-c6b7dca4d418eed7a79be42eabbab2d1.png"},55164:function(e,n,t){t.d(n,{Z:function(){return i}});let i=t.p+"assets/images/gnome-background-right-click-296958d96e0cd78b4bd122538368baf6.jpg"},84645:function(e,n,t){t.d(n,{Z:function(){return i}});let i=t.p+"assets/images/gnome-background-section-ca69ba209a6e21b75235377cfe37096a.jpg"},22832:function(e,n,t){t.d(n,{Z:function(){return i}});let i=t.p+"assets/images/gnome-background-selection-2b69c07e0327d086c99d3925edefd0de.jpg"},89711:function(e,n,t){t.d(n,{Z:function(){return i}});let i=t.p+"assets/images/gnome-configuring-default-applications-c38e8846a0f5406e2a929ceed630e0ac.jpg"},46441:function(e,n,t){t.d(n,{Z:function(){return i}});let i=t.p+"assets/images/gnome-date-and-time-aa3c32f3601912751b47792bed13d861.jpg"},50497:function(e,n,t){t.d(n,{Z:function(){return i}});let i=t.p+"assets/images/gnome-display-confirm-73e76e471778f250fce7a77b06ebf4cc.jpg"},47859:function(e,n,t){t.d(n,{Z:function(){return i}});let i=t.p+"assets/images/gnome-display-right-click-0e3734d006161e208d66f1dbbfd5b284.jpg"},98609:function(e,n,t){t.d(n,{Z:function(){return i}});let i=t.p+"assets/images/gnome-displays-overview-6bbedd44653525b6c3aba838cf30349d.jpg"},72880:function(e,n,t){t.d(n,{Z:function(){return i}});let i=t.p+"assets/images/gnome-individual-display-settings-2d5ef78b2175bb97fc2e729a90ee5774.jpg"},78562:function(e,n,t){t.d(n,{Z:function(){return i}});let i=t.p+"assets/images/gnome-keep-files-prompt-5b7532e8ea1cf62ad466bf6d2eec702f.jpg"},16802:function(e,n,t){t.d(n,{Z:function(){return i}});let i=t.p+"assets/images/gnome-mouse-settings-4652630acfe19020bb0b29d0155bf012.jpg"},51048:function(e,n,t){t.d(n,{Z:function(){return i}});let i=t.p+"assets/images/gnome-multiple-user-settings-e0957ed6affeef47726232f6fa2c22a0.jpg"},80181:function(e,n,t){t.d(n,{Z:function(){return i}});let i=t.p+"assets/images/gnome-nautilus-desktop-folder-d8e82c2d25e2d637fc2f63e85241c255.jpg"},39639:function(e,n,t){t.d(n,{Z:function(){return i}});let i=t.p+"assets/images/gnome-network-authentication-306d93017ccbe74f3760db30ad3be13c.jpg"},75421:function(e,n,t){t.d(n,{Z:function(){return i}});let i=t.p+"assets/images/gnome-network-hidden-0567bce591f6219bb35378032a3db3e9.jpg"},15866:function(e,n,t){t.d(n,{Z:function(){return i}});let i=t.p+"assets/images/gnome-network-overview-56ca62f1ff834202f557968bddfe6ae8.jpg"},90827:function(e,n,t){t.d(n,{Z:function(){return i}});let i=t.p+"assets/images/gnome-network-select-b153e6a0d6a6394708fd70d376d84dc9.jpg"},16406:function(e,n,t){t.d(n,{Z:function(){return i}});let i=t.p+"assets/images/gnome-open-with-right-click-f8c5019ecbc6f6cb589c6117c20c85b4.jpg"},45332:function(e,n,t){t.d(n,{Z:function(){return i}});let i=t.p+"assets/images/gnome-open-with-select-application-7c831e8489c82c5ac4df9f3bd5a85644.jpg"},63310:function(e,n,t){t.d(n,{Z:function(){return i}});let i=t.p+"assets/images/gnome-region-and-languages-newlang-4bb2078c2e13e3b57093c6b6c8b68695.jpg"},23037:function(e,n,t){t.d(n,{Z:function(){return i}});let i=t.p+"assets/images/gnome-region-and-languages-335dc9a1b149e6ee8b31960b2786e80f.jpg"},17222:function(e,n,t){t.d(n,{Z:function(){return i}});let i=t.p+"assets/images/gnome-selecting-language-search-0ef7ad4ad481eba3511f505c0d48dd64.png"},17578:function(e,n,t){t.d(n,{Z:function(){return i}});let i=t.p+"assets/images/gnome-selecting-language-1b584e15820bf752584efc6dd7b15aeb.png"},70089:function(e,n,t){t.d(n,{Z:function(){return i}});let i=t.p+"assets/images/gnome-single-user-settings-39514927d322f1eae5e257384a82106b.jpg"},71917:function(e,n,t){t.d(n,{Z:function(){return i}});let i=t.p+"assets/images/gnome-sound-settings-83f0c82715b44956569594953085dad1.jpg"},45186:function(e,n,t){t.d(n,{Z:function(){return i}});let i=t.p+"assets/images/gnome-top-panel-keyboard-layout-c727398da89fe9a7bbae669ab07699d7.jpg"},20047:function(e,n,t){t.d(n,{Z:function(){return i}});let i=t.p+"assets/images/gnome-top-panel-network-click-23903f435151287556210b48a2731783.jpg"},15025:function(e,n,t){t.d(n,{Z:function(){return i}});let i=t.p+"assets/images/gnome-top-panel-right-click-10a13ee21a2ed1ad21315bfdd76e4041.jpg"},48076:function(e,n,t){t.d(n,{Z:function(){return i}});let i=t.p+"assets/images/gnome-touchpad-settings-ee9690f056a1ed39ebddd5cd61936608.jpg"},29542:function(e,n,t){t.d(n,{Z:function(){return i}});let i=t.p+"assets/images/gnome-tweak-tool-desktop-46f30603727af27af46f394d0df8f07e.jpg"},79797:function(e,n,t){t.d(n,{Z:function(){return i}});let i=t.p+"assets/images/gnome-tweak-tool-top-bar-212f1978bc9194fbe0d5a1f49da0ef38.jpg"},75535:function(e,n,t){t.d(n,{Z:function(){return i}});let i=t.p+"assets/images/gnome-volume-control-fc9ad5c29a7859a4532adde7ed56df46.jpg"},36950:function(e,n,t){t.d(n,{Z:function(){return i}});let i=t.p+"assets/images/workspace-shortcuts-gcc-f4f5e863caf0c2532f4d3cbc633b5f8a.jpg"},50065:function(e,n,t){t.d(n,{Z:function(){return r},a:function(){return a}});var i=t(67294);let o={},s=i.createContext(o);function a(e){let n=i.useContext(s);return i.useMemo(function(){return"function"==typeof e?e(n):{...n,...e}},[n,e])}function r(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:a(e.components),i.createElement(s.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/fb8d634e.09f44ff6.js b/assets/js/fb8d634e.09f44ff6.js new file mode 100644 index 000000000..3bab51e04 --- /dev/null +++ b/assets/js/fb8d634e.09f44ff6.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([["4983"],{21144:function(e,t,n){n.r(t),n.d(t,{metadata:()=>i,contentTitle:()=>l,default:()=>u,assets:()=>c,toc:()=>d,frontMatter:()=>r});var i=JSON.parse('{"id":"user/editions/gnome/index","title":"GNOME","description":"GNOME Shell is provided by default with the GNOME Edition of Solus. They describe it as:","source":"@site/docs/user/editions/gnome/index.md","sourceDirName":"user/editions/gnome","slug":"/user/editions/gnome/","permalink":"/docs/user/editions/gnome/","draft":false,"unlisted":false,"editUrl":"https://github.com/getsolus/help-center-docs/tree/master/docs/user/editions/gnome/index.md","tags":[],"version":"current","lastUpdatedAt":1733757592000,"frontMatter":{"title":"GNOME","summary":"A quick introduction to the GNOME Edition of Solus"},"sidebar":"userSidebar","previous":{"title":"Tips and Tricks","permalink":"/docs/user/editions/budgie/tips-and-tricks"},"next":{"title":"Configuration","permalink":"/docs/user/editions/gnome/configuration"}}'),o=n("85893"),s=n("50065");let r={title:"GNOME",summary:"A quick introduction to the GNOME Edition of Solus"},l="GNOME Shell",c={},d=[];function a(e){let t={a:"a",blockquote:"blockquote",h1:"h1",header:"header",li:"li",p:"p",ul:"ul",...(0,s.a)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(t.header,{children:(0,o.jsx)(t.h1,{id:"gnome-shell",children:"GNOME Shell"})}),"\n",(0,o.jsx)(t.p,{children:"GNOME Shell is provided by default with the GNOME Edition of Solus. They describe it as:"}),"\n",(0,o.jsxs)(t.blockquote,{children:["\n",(0,o.jsx)(t.p,{children:"Provides core interface functions like switching windows, launching applications or see your notifications. It takes advantage of the capabilities of modern graphics hardware and introduces innovative user interface concepts to provide a delightful and easy to use experience. GNOME Shell is the defining technology of the GNOME 3 user experience."}),"\n"]}),"\n",(0,o.jsx)(t.p,{children:"Here are some links related to this project that you may find helpful:"}),"\n",(0,o.jsxs)(t.ul,{children:["\n",(0,o.jsx)(t.li,{children:(0,o.jsx)(t.a,{href:"https://www.gnome.org/",children:"Homepage"})}),"\n",(0,o.jsx)(t.li,{children:(0,o.jsx)(t.a,{href:"https://thisweek.gnome.org/",children:"News"})}),"\n",(0,o.jsx)(t.li,{children:(0,o.jsx)(t.a,{href:"https://help.gnome.org/users/gnome-help/stable/",children:"Support"})}),"\n"]}),"\n",(0,o.jsx)(t.p,{children:(0,o.jsx)(t.a,{href:"configuration",children:"Go to GNOME Configuration"})}),"\n",(0,o.jsx)(t.p,{children:(0,o.jsx)(t.a,{href:"tips-and-tricks",children:"Go to GNOME Tips and Tricks"})})]})}function u(e={}){let{wrapper:t}={...(0,s.a)(),...e.components};return t?(0,o.jsx)(t,{...e,children:(0,o.jsx)(a,{...e})}):a(e)}},50065:function(e,t,n){n.d(t,{Z:function(){return l},a:function(){return r}});var i=n(67294);let o={},s=i.createContext(o);function r(e){let t=i.useContext(s);return i.useMemo(function(){return"function"==typeof e?e(t):{...t,...e}},[t,e])}function l(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:r(e.components),i.createElement(s.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/fb8d634e.bd00f4ee.js b/assets/js/fb8d634e.bd00f4ee.js deleted file mode 100644 index d85f9ce41..000000000 --- a/assets/js/fb8d634e.bd00f4ee.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[999],{86591:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>d,contentTitle:()=>r,default:()=>u,frontMatter:()=>s,metadata:()=>c,toc:()=>l});var i=t(85893),o=t(11151);const s={title:"GNOME",summary:"A quick introduction to the GNOME Edition of Solus"},r="GNOME Shell",c={id:"user/editions/gnome/index",title:"GNOME",description:"GNOME Shell is provided by default with the GNOME Edition of Solus. They describe it as:",source:"@site/docs/user/editions/gnome/index.md",sourceDirName:"user/editions/gnome",slug:"/user/editions/gnome/",permalink:"/docs/user/editions/gnome/",draft:!1,unlisted:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/editions/gnome/index.md",tags:[],version:"current",lastUpdatedAt:1732716912e3,frontMatter:{title:"GNOME",summary:"A quick introduction to the GNOME Edition of Solus"},sidebar:"userSidebar",previous:{title:"Tips and Tricks",permalink:"/docs/user/editions/budgie/tips-and-tricks"},next:{title:"Configuration",permalink:"/docs/user/editions/gnome/configuration"}},d={},l=[];function a(e){const n={a:"a",blockquote:"blockquote",h1:"h1",header:"header",li:"li",p:"p",ul:"ul",...(0,o.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.header,{children:(0,i.jsx)(n.h1,{id:"gnome-shell",children:"GNOME Shell"})}),"\n",(0,i.jsx)(n.p,{children:"GNOME Shell is provided by default with the GNOME Edition of Solus. They describe it as:"}),"\n",(0,i.jsxs)(n.blockquote,{children:["\n",(0,i.jsx)(n.p,{children:"Provides core interface functions like switching windows, launching applications or see your notifications. It takes advantage of the capabilities of modern graphics hardware and introduces innovative user interface concepts to provide a delightful and easy to use experience. GNOME Shell is the defining technology of the GNOME 3 user experience."}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"Here are some links related to this project that you may find helpful:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"https://www.gnome.org/",children:"Homepage"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"https://thisweek.gnome.org/",children:"News"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"https://help.gnome.org/users/gnome-help/stable/",children:"Support"})}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.a,{href:"configuration",children:"Go to GNOME Configuration"})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.a,{href:"tips-and-tricks",children:"Go to GNOME Tips and Tricks"})})]})}function u(e={}){const{wrapper:n}={...(0,o.a)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(a,{...e})}):a(e)}},11151:(e,n,t)=>{t.d(n,{Z:()=>c,a:()=>r});var i=t(67294);const o={},s=i.createContext(o);function r(e){const n=i.useContext(s);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:r(e.components),i.createElement(s.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/fc733b73.c3b7228b.js b/assets/js/fc733b73.c3b7228b.js new file mode 100644 index 000000000..6ef4dffdb --- /dev/null +++ b/assets/js/fc733b73.c3b7228b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([["1848"],{75103:function(e,n,t){t.r(n),t.d(n,{metadata:()=>s,contentTitle:()=>l,default:()=>h,assets:()=>d,toc:()=>a,frontMatter:()=>r});var s=JSON.parse('{"id":"user/software/development/r-and-rstudio","title":"R and RStudio","description":"Covers the basics of how to install R and RStudio on Solus and how to install required dependencies for installing additional CRAN libraries.","source":"@site/docs/user/software/development/r-and-rstudio.md","sourceDirName":"user/software/development","slug":"/user/software/development/r-and-rstudio","permalink":"/docs/user/software/development/r-and-rstudio","draft":false,"unlisted":false,"editUrl":"https://github.com/getsolus/help-center-docs/tree/master/docs/user/software/development/r-and-rstudio.md","tags":[],"version":"current","lastUpdatedAt":1733757592000,"frontMatter":{"title":"R and RStudio","summary":"Quick start guide for R and RStudio on Solus"},"sidebar":"userSidebar","previous":{"title":"PostgreSQL","permalink":"/docs/user/software/development/postgresql"},"next":{"title":"Rust","permalink":"/docs/user/software/development/rust"}}'),o=t("85893"),i=t("50065");let r={title:"R and RStudio",summary:"Quick start guide for R and RStudio on Solus"},l="R and RStudio",d={},a=[{value:"Downloading R",id:"downloading-r",level:2},{value:"Downloading RStudio",id:"downloading-rstudio",level:2},{value:"How to use <code>install.packages()</code> on Solus",id:"how-to-use-installpackages-on-solus",level:3}];function c(e){let n={code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",p:"p",strong:"strong",ul:"ul",...(0,i.a)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(n.header,{children:(0,o.jsx)(n.h1,{id:"r-and-rstudio",children:"R and RStudio"})}),"\n",(0,o.jsx)(n.p,{children:"Covers the basics of how to install R and RStudio on Solus and how to install required dependencies for installing additional CRAN libraries."}),"\n",(0,o.jsx)(n.h2,{id:"downloading-r",children:"Downloading R"}),"\n",(0,o.jsxs)(n.p,{children:["It is recommended to download R before downloading RStudio. This can be accomplished easily in any of three ways.\n",(0,o.jsx)(n.strong,{children:"NOTE:"})," Both R and RStudio are available natively on Solus thanks to their amazing maintainers, it is not necessary to go to either software's respective website."]}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsxs)(n.li,{children:['The easiest way to do this is to search for "R" within the ',(0,o.jsx)(n.strong,{children:"Software Center"})]}),"\n",(0,o.jsxs)(n.li,{children:["Alternatively you can enter the ",(0,o.jsx)(n.strong,{children:"Software Center"}),", select ",(0,o.jsx)(n.strong,{children:"Programming Languages & Tools"}),", then select ",(0,o.jsx)(n.strong,{children:"Programming"})," and scroll down until you see ",(0,o.jsx)(n.strong,{children:"r"}),". ",(0,o.jsx)(n.em,{children:"The list itself is in alphabetical order so it will be near the bottom."})]}),"\n",(0,o.jsxs)(n.li,{children:["The third option for installation is to open your terminal and enter the command ",(0,o.jsx)(n.code,{children:"sudo eopkg it r"})]}),"\n"]}),"\n",(0,o.jsx)(n.h2,{id:"downloading-rstudio",children:"Downloading RStudio"}),"\n",(0,o.jsx)(n.p,{children:"The first step in setting up RStudio is to download and install it. This can be accomplished in the same ways as R in the prior step."}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsxs)(n.li,{children:['The easiest way to do this is to search for "RStudio" within the ',(0,o.jsx)(n.strong,{children:"Software Center"})]}),"\n",(0,o.jsxs)(n.li,{children:["Alternatively you can enter the ",(0,o.jsx)(n.strong,{children:"Software Center"}),", select ",(0,o.jsx)(n.strong,{children:"Programming Languages & Tools"}),", then select ",(0,o.jsx)(n.strong,{children:"Integrated Development Environments"})," and scroll down until you see ",(0,o.jsx)(n.strong,{children:"RStudio"}),". ",(0,o.jsx)(n.em,{children:"The list itself is in alphabetical order so it will be near the bottom."})]}),"\n",(0,o.jsxs)(n.li,{children:["The third option for installation is to open your terminal and enter the command ",(0,o.jsx)(n.code,{children:"sudo eopkg it rstudio"})]}),"\n"]}),"\n",(0,o.jsxs)(n.h3,{id:"how-to-use-installpackages-on-solus",children:["How to use ",(0,o.jsx)(n.code,{children:"install.packages()"})," on Solus"]}),"\n",(0,o.jsxs)(n.p,{children:["Unless you are only going to use base R functions, you will need to make use of ",(0,o.jsx)(n.code,{children:"install.packages()"})," within R to install additional libraries. To use this function you need to install certain development packages which vary depending on the library you are trying to enable within R."]}),"\n",(0,o.jsx)(n.p,{children:"On other Linux distros (like Debian, Ubuntu, and Fedora) this is accomplished through the installation of r-devel. However since Solus does not have an r-devel package these dependencies have to be installed through other means."}),"\n",(0,o.jsxs)(n.p,{children:["There are three main Solus packages that will include many of the dependencies required that allow you to install most CRAN packages. These are ",(0,o.jsx)(n.code,{children:"system.devel"}),", ",(0,o.jsx)(n.code,{children:"curl-devel"})," and ",(0,o.jsx)(n.code,{children:"fontconfig-devel"}),"."]}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.code,{children:"system.devel"})," is a component containing several packages and can ",(0,o.jsx)(n.strong,{children:"ONLY"})," be installed from within a terminal by running the command ",(0,o.jsx)(n.code,{children:"sudo eopkg it -c system.devel"})]}),"\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.code,{children:"curl-devel"})," and ",(0,o.jsx)(n.code,{children:"fontconfig-devel"})," can be found by searching in the ",(0,o.jsx)(n.strong,{children:"Software Center"})," or by running the command ",(0,o.jsx)(n.code,{children:"sudo eopkg it curl-devel fontconfig-devel"})]}),"\n"]}),"\n",(0,o.jsxs)(n.p,{children:["Once these two Solus packages are installed ",(0,o.jsx)(n.code,{children:"install.packages()"})," will work as usual within R for most packages like ",(0,o.jsx)(n.code,{children:"tidyverse"}),"."]}),"\n",(0,o.jsxs)(n.p,{children:["If you try to install a CRAN library with ",(0,o.jsx)(n.code,{children:"install.packages()"})," from within R and you are presented with an error that says ",(0,o.jsx)(n.code,{children:"...exited with non zero exit status"})," this is most likely because one of the required dependencies, ",(0,o.jsx)(n.em,{children:"which will be listed within the R console detailing the error"}),", is contained within a Solus devel package you have not yet installed."]})]})}function h(e={}){let{wrapper:n}={...(0,i.a)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(c,{...e})}):c(e)}},50065:function(e,n,t){t.d(n,{Z:function(){return l},a:function(){return r}});var s=t(67294);let o={},i=s.createContext(o);function r(e){let n=s.useContext(i);return s.useMemo(function(){return"function"==typeof e?e(n):{...n,...e}},[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:r(e.components),s.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/fc733b73.f541a162.js b/assets/js/fc733b73.f541a162.js deleted file mode 100644 index 3ab1a8a48..000000000 --- a/assets/js/fc733b73.f541a162.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[6042],{28537:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>d,contentTitle:()=>r,default:()=>h,frontMatter:()=>i,metadata:()=>l,toc:()=>a});var s=t(85893),o=t(11151);const i={title:"R and RStudio",summary:"Quick start guide for R and RStudio on Solus"},r="R and RStudio",l={id:"user/software/development/r-and-rstudio",title:"R and RStudio",description:"Covers the basics of how to install R and RStudio on Solus and how to install required dependencies for installing additional CRAN libraries.",source:"@site/docs/user/software/development/r-and-rstudio.md",sourceDirName:"user/software/development",slug:"/user/software/development/r-and-rstudio",permalink:"/docs/user/software/development/r-and-rstudio",draft:!1,unlisted:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/software/development/r-and-rstudio.md",tags:[],version:"current",lastUpdatedAt:1732716912e3,frontMatter:{title:"R and RStudio",summary:"Quick start guide for R and RStudio on Solus"},sidebar:"userSidebar",previous:{title:"PostgreSQL",permalink:"/docs/user/software/development/postgresql"},next:{title:"Rust",permalink:"/docs/user/software/development/rust"}},d={},a=[{value:"Downloading R",id:"downloading-r",level:2},{value:"Downloading RStudio",id:"downloading-rstudio",level:2},{value:"How to use <code>install.packages()</code> on Solus",id:"how-to-use-installpackages-on-solus",level:3}];function c(e){const n={code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",p:"p",strong:"strong",ul:"ul",...(0,o.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.header,{children:(0,s.jsx)(n.h1,{id:"r-and-rstudio",children:"R and RStudio"})}),"\n",(0,s.jsx)(n.p,{children:"Covers the basics of how to install R and RStudio on Solus and how to install required dependencies for installing additional CRAN libraries."}),"\n",(0,s.jsx)(n.h2,{id:"downloading-r",children:"Downloading R"}),"\n",(0,s.jsxs)(n.p,{children:["It is recommended to download R before downloading RStudio. This can be accomplished easily in any of three ways.\n",(0,s.jsx)(n.strong,{children:"NOTE:"})," Both R and RStudio are available natively on Solus thanks to their amazing maintainers, it is not necessary to go to either software's respective website."]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:['The easiest way to do this is to search for "R" within the ',(0,s.jsx)(n.strong,{children:"Software Center"})]}),"\n",(0,s.jsxs)(n.li,{children:["Alternatively you can enter the ",(0,s.jsx)(n.strong,{children:"Software Center"}),", select ",(0,s.jsx)(n.strong,{children:"Programming Languages & Tools"}),", then select ",(0,s.jsx)(n.strong,{children:"Programming"})," and scroll down until you see ",(0,s.jsx)(n.strong,{children:"r"}),". ",(0,s.jsx)(n.em,{children:"The list itself is in alphabetical order so it will be near the bottom."})]}),"\n",(0,s.jsxs)(n.li,{children:["The third option for installation is to open your terminal and enter the command ",(0,s.jsx)(n.code,{children:"sudo eopkg it r"})]}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"downloading-rstudio",children:"Downloading RStudio"}),"\n",(0,s.jsx)(n.p,{children:"The first step in setting up RStudio is to download and install it. This can be accomplished in the same ways as R in the prior step."}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:['The easiest way to do this is to search for "RStudio" within the ',(0,s.jsx)(n.strong,{children:"Software Center"})]}),"\n",(0,s.jsxs)(n.li,{children:["Alternatively you can enter the ",(0,s.jsx)(n.strong,{children:"Software Center"}),", select ",(0,s.jsx)(n.strong,{children:"Programming Languages & Tools"}),", then select ",(0,s.jsx)(n.strong,{children:"Integrated Development Environments"})," and scroll down until you see ",(0,s.jsx)(n.strong,{children:"RStudio"}),". ",(0,s.jsx)(n.em,{children:"The list itself is in alphabetical order so it will be near the bottom."})]}),"\n",(0,s.jsxs)(n.li,{children:["The third option for installation is to open your terminal and enter the command ",(0,s.jsx)(n.code,{children:"sudo eopkg it rstudio"})]}),"\n"]}),"\n",(0,s.jsxs)(n.h3,{id:"how-to-use-installpackages-on-solus",children:["How to use ",(0,s.jsx)(n.code,{children:"install.packages()"})," on Solus"]}),"\n",(0,s.jsxs)(n.p,{children:["Unless you are only going to use base R functions, you will need to make use of ",(0,s.jsx)(n.code,{children:"install.packages()"})," within R to install additional libraries. To use this function you need to install certain development packages which vary depending on the library you are trying to enable within R."]}),"\n",(0,s.jsx)(n.p,{children:"On other Linux distros (like Debian, Ubuntu, and Fedora) this is accomplished through the installation of r-devel. However since Solus does not have an r-devel package these dependencies have to be installed through other means."}),"\n",(0,s.jsxs)(n.p,{children:["There are three main Solus packages that will include many of the dependencies required that allow you to install most CRAN packages. These are ",(0,s.jsx)(n.code,{children:"system.devel"}),", ",(0,s.jsx)(n.code,{children:"curl-devel"})," and ",(0,s.jsx)(n.code,{children:"fontconfig-devel"}),"."]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"system.devel"})," is a component containing several packages and can ",(0,s.jsx)(n.strong,{children:"ONLY"})," be installed from within a terminal by running the command ",(0,s.jsx)(n.code,{children:"sudo eopkg it -c system.devel"})]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"curl-devel"})," and ",(0,s.jsx)(n.code,{children:"fontconfig-devel"})," can be found by searching in the ",(0,s.jsx)(n.strong,{children:"Software Center"})," or by running the command ",(0,s.jsx)(n.code,{children:"sudo eopkg it curl-devel fontconfig-devel"})]}),"\n"]}),"\n",(0,s.jsxs)(n.p,{children:["Once these two Solus packages are installed ",(0,s.jsx)(n.code,{children:"install.packages()"})," will work as usual within R for most packages like ",(0,s.jsx)(n.code,{children:"tidyverse"}),"."]}),"\n",(0,s.jsxs)(n.p,{children:["If you try to install a CRAN library with ",(0,s.jsx)(n.code,{children:"install.packages()"})," from within R and you are presented with an error that says ",(0,s.jsx)(n.code,{children:"...exited with non zero exit status"})," this is most likely because one of the required dependencies, ",(0,s.jsx)(n.em,{children:"which will be listed within the R console detailing the error"}),", is contained within a Solus devel package you have not yet installed."]})]})}function h(e={}){const{wrapper:n}={...(0,o.a)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(c,{...e})}):c(e)}},11151:(e,n,t)=>{t.d(n,{Z:()=>l,a:()=>r});var s=t(67294);const o={},i=s.createContext(o);function r(e){const n=s.useContext(i);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:r(e.components),s.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/fe13418f.ea789d98.js b/assets/js/fe13418f.ea789d98.js deleted file mode 100644 index 950951398..000000000 --- a/assets/js/fe13418f.ea789d98.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[1182],{43900:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>s,default:()=>p,frontMatter:()=>o,metadata:()=>i,toc:()=>r});var a=n(85893),l=n(11151);const o={title:"Clean, clean, clean!",slug:"clean-clean-clean",authors:"alfi",tags:["housekeeping","cleanup","devlog","solus"],hide_table_of_contents:!1},s=void 0,i={permalink:"/blog/clean-clean-clean",source:"@site/devlog/2024-11-21-clean-cleanl-clean.md",title:"Clean, clean, clean!",description:"Hello everyone! Alfi here, member of Solus Cleanup Crew. It's been more than a year since I started contributing to Solus and I want to talk about it. About what I did, what we did, what we accomplished so far, and what we want to do next.",date:"2024-11-21T00:00:00.000Z",tags:[{inline:!0,label:"housekeeping",permalink:"/blog/tags/housekeeping"},{inline:!0,label:"cleanup",permalink:"/blog/tags/cleanup"},{inline:!0,label:"devlog",permalink:"/blog/tags/devlog"},{inline:!0,label:"solus",permalink:"/blog/tags/solus"}],readingTime:5.585,hasTruncateMarker:!0,authors:[{name:"Muhammad Alfi Syahrin",title:"Solus Staff",page:{permalink:"/blog/authors/alfi"},socials:{github:"https://github.com/malfisya"},imageURL:"https://avatars.githubusercontent.com/u/101771435",key:"alfi"}],frontMatter:{title:"Clean, clean, clean!",slug:"clean-clean-clean",authors:"alfi",tags:["housekeeping","cleanup","devlog","solus"],hide_table_of_contents:!1},unlisted:!1,nextItem:{title:"Intro to Optimizing Packages on Solus",permalink:"/blog/solus-optimizing-packages"}},c={authorsImageUrls:[void 0]},r=[];function u(e){const t={p:"p",...(0,l.a)(),...e.components};return(0,a.jsx)(t.p,{children:"Hello everyone! Alfi here, member of Solus Cleanup Crew. It's been more than a year since I started contributing to Solus and I want to talk about it. About what I did, what we did, what we accomplished so far, and what we want to do next."})}function p(e={}){const{wrapper:t}={...(0,l.a)(),...e.components};return t?(0,a.jsx)(t,{...e,children:(0,a.jsx)(u,{...e})}):u(e)}},11151:(e,t,n)=>{n.d(t,{Z:()=>i,a:()=>s});var a=n(67294);const l={},o=a.createContext(l);function s(e){const t=a.useContext(o);return a.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function i(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(l):e.components||l:s(e.components),a.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/fe13418f.ffa9f3e1.js b/assets/js/fe13418f.ffa9f3e1.js new file mode 100644 index 000000000..58b74be23 --- /dev/null +++ b/assets/js/fe13418f.ffa9f3e1.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([["7993"],{37072:function(e,t,n){n.r(t),n.d(t,{assets:function(){return s},contentTitle:function(){return i},default:function(){return p},frontMatter:function(){return r},metadata:function(){return a},toc:function(){return u}});var a=n(71752),l=n(85893),o=n(50065);let r={title:"Clean, clean, clean!",slug:"clean-clean-clean",authors:"alfi",tags:["housekeeping","cleanup","devlog","solus"],hide_table_of_contents:!1},i=void 0,s={authorsImageUrls:[void 0]},u=[];function c(e){let t={p:"p",...(0,o.a)(),...e.components};return(0,l.jsx)(t.p,{children:"Hello everyone! Alfi here, member of Solus Cleanup Crew. It's been more than a year since I started contributing to Solus and I want to talk about it. About what I did, what we did, what we accomplished so far, and what we want to do next."})}function p(e={}){let{wrapper:t}={...(0,o.a)(),...e.components};return t?(0,l.jsx)(t,{...e,children:(0,l.jsx)(c,{...e})}):c(e)}},50065:function(e,t,n){n.d(t,{Z:function(){return i},a:function(){return r}});var a=n(67294);let l={},o=a.createContext(l);function r(e){let t=a.useContext(o);return a.useMemo(function(){return"function"==typeof e?e(t):{...t,...e}},[t,e])}function i(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(l):e.components||l:r(e.components),a.createElement(o.Provider,{value:t},e.children)}},71752:function(e){e.exports=JSON.parse('{"permalink":"/blog/clean-clean-clean","source":"@site/devlog/2024-11-21-clean-cleanl-clean.md","title":"Clean, clean, clean!","description":"Hello everyone! Alfi here, member of Solus Cleanup Crew. It\'s been more than a year since I started contributing to Solus and I want to talk about it. About what I did, what we did, what we accomplished so far, and what we want to do next.","date":"2024-11-21T00:00:00.000Z","tags":[{"inline":true,"label":"housekeeping","permalink":"/blog/tags/housekeeping"},{"inline":true,"label":"cleanup","permalink":"/blog/tags/cleanup"},{"inline":true,"label":"devlog","permalink":"/blog/tags/devlog"},{"inline":true,"label":"solus","permalink":"/blog/tags/solus"}],"readingTime":5.585,"hasTruncateMarker":true,"authors":[{"name":"Muhammad Alfi Syahrin","title":"Solus Staff","page":{"permalink":"/blog/authors/alfi"},"socials":{"github":"https://github.com/malfisya"},"imageURL":"https://avatars.githubusercontent.com/u/101771435","key":"alfi"}],"frontMatter":{"title":"Clean, clean, clean!","slug":"clean-clean-clean","authors":"alfi","tags":["housekeeping","cleanup","devlog","solus"],"hide_table_of_contents":false},"unlisted":false,"nextItem":{"title":"Intro to Optimizing Packages on Solus","permalink":"/blog/solus-optimizing-packages"}}')}}]); \ No newline at end of file diff --git a/assets/js/main.7c0d0999.js b/assets/js/main.7c0d0999.js deleted file mode 100644 index 3e11630aa..000000000 --- a/assets/js/main.7c0d0999.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! For license information please see main.7c0d0999.js.LICENSE.txt */ -(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[179],{78179:(e,t,n)=>{"use strict";n.d(t,{Z:()=>p});n(67294);var r=n(68356),o=n.n(r),a=n(16887);const i={"0058b4c6":[()=>n.e(4088).then(n.t.bind(n,66462,19)),"@generated/docusaurus-plugin-content-docs/default/p/docs-175.json",66462],"01a85c17":[()=>Promise.all([n.e(3312),n.e(4013)]).then(n.bind(n,53282)),"@theme/BlogTagsListPage",53282],"04b18502":[()=>n.e(1942).then(n.bind(n,37123)),"@site/docs/packaging/index.md",37123],"05767842":[()=>n.e(1606).then(n.t.bind(n,77755,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-authors-joey-023.json",77755],"06758c2b":[()=>n.e(1073).then(n.t.bind(n,81885,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-optimization-150.json",81885],"080a8349":[()=>n.e(224).then(n.bind(n,92857)),"@site/docs/packaging/monitoring.yml.md",92857],"08bef15d":[()=>n.e(7228).then(n.bind(n,40846)),"@site/docs/user/privacy.md",40846],"09dbd43b":[()=>n.e(9397).then(n.bind(n,78118)),"@site/docs/user/troubleshooting/boot-rescue.md",78118],"0b254e3a":[()=>n.e(6726).then(n.bind(n,99528)),"@site/docs/packaging/updating-an-existing-package.md",99528],"0b85ec06":[()=>n.e(3398).then(n.t.bind(n,22844,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-pgo-777.json",22844],"0cfc9369":[()=>n.e(6025).then(n.t.bind(n,82504,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-lto-304.json",82504],"0e3c5e6b":[()=>n.e(4859).then(n.bind(n,5166)),"@site/docs/user/editions/plasma/index.md",5166],"0e862883":[()=>n.e(172).then(n.bind(n,24673)),"@site/docs/user/contributing/testing-an-iso.md",24673],"14488e92":[()=>n.e(4815).then(n.bind(n,93980)),"@site/docs/user/quick-start/default-applications.md",93980],"14eb3368":[()=>Promise.all([n.e(3312),n.e(9817)]).then(n.bind(n,31745)),"@theme/DocCategoryGeneratedIndexPage",31745],"156eae2c":[()=>n.e(8692).then(n.t.bind(n,92354,19)),"@generated/docusaurus-plugin-content-docs/default/p/docs-category-networking-814.json",92354],17896441:[()=>Promise.all([n.e(3312),n.e(6937),n.e(7918)]).then(n.bind(n,11095)),"@theme/DocItem",11095],"1a698c37":[()=>Promise.all([n.e(3323),n.e(8917),n.e(6126)]).then(n.bind(n,99870)),"@site/docs/user/editions/index.mdx",99870],"1ae709a2":[()=>n.e(355).then(n.bind(n,49332)),"@site/docs/user/package-management/history-and-rollback.md",49332],"1b835d51":[()=>n.e(532).then(n.t.bind(n,769,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-3-b1c.json",769],"1df93b7f":[()=>Promise.all([n.e(3323),n.e(3237)]).then(n.bind(n,20780)),"@site/src/pages/index.tsx",20780],21944812:[()=>n.e(9873).then(n.bind(n,43042)),"@site/docs/user/software/desktops/index.md",43042],"257b9082":[()=>n.e(3192).then(n.bind(n,31874)),"@site/docs/user/software/development/containers.md",31874],"2598a3a5":[()=>n.e(5951).then(n.bind(n,70197)),"@site/docs/user/editions/mate/configuration.md",70197],"2609550e":[()=>n.e(3206).then(n.bind(n,23394)),"@site/docs/user/software/networking/samba.md",23394],"26308ea3":[()=>Promise.all([n.e(3312),n.e(6937),n.e(6485)]).then(n.bind(n,85612)),"@site/docs/packaging/submitting-a-pull-request.mdx",85612],"27d71881":[()=>n.e(7577).then(n.t.bind(n,19511,19)),"@generated/docusaurus-plugin-content-docs/default/p/docs-category-package-management-681.json",19511],"2a0f90eb":[()=>n.e(2817).then(n.t.bind(n,98247,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-solus-558.json",98247],"2a34ce22":[()=>n.e(6074).then(n.bind(n,21974)),"@site/docs/user/quick-start/installation/system-requirements.md",21974],"2a37c7d8":[()=>n.e(9995).then(n.bind(n,81754)),"@site/docs/user/editions/plasma/tips-and-tricks.md",81754],"2a9c4f4d":[()=>n.e(9474).then(n.t.bind(n,75994,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-clang-1c6.json",75994],"2b4abe09":[()=>n.e(2413).then(n.bind(n,45427)),"@site/docs/user/troubleshooting/index.md",45427],"2b61a93c":[()=>n.e(9897).then(n.bind(n,23065)),"@site/docs/user/editions/mate/index.md",23065],"2c3e84bd":[()=>n.e(8157).then(n.bind(n,12359)),"@site/docs/user/quick-start/installation/disks.md",12359],"334da572":[()=>n.e(5900).then(n.t.bind(n,70542,19)),"@generated/docusaurus-plugin-content-docs/default/p/docs-category-mobile-306.json",70542],"33f669c7":[()=>n.e(5854).then(n.t.bind(n,50536,19)),"@generated/docusaurus-plugin-content-docs/default/p/docs-category-software-1ab.json",50536],"33fc5bb8":[()=>Promise.all([n.e(3312),n.e(6937),n.e(5966),n.e(6614),n.e(8355)]).then(n.bind(n,37678)),"@theme/Blog/Pages/BlogAuthorsPostsPage",37678],"36994c47":[()=>n.e(9208).then(n.t.bind(n,94468,19)),"@generated/docusaurus-plugin-content-blog/default/__plugin.json",94468],"38920c38":[()=>n.e(5481).then(n.bind(n,50)),"@site/docs/user/hardware/peripherals/printers-and-scanners.md",50],"3a2db09e":[()=>n.e(9361).then(n.t.bind(n,57588,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-df9.json",57588],"3a93f7ba":[()=>n.e(7422).then(n.t.bind(n,76972,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-hwcaps-8b3.json",76972],"3bd0a7e9":[()=>n.e(247).then(n.t.bind(n,60032,19)),"@generated/docusaurus-plugin-content-docs/default/p/docs-category-advanced-configuration-b1b.json",60032],"3fdfc7ff":[()=>n.e(4608).then(n.bind(n,57884)),"@site/docs/user/package-management/basics.md",57884],"3ff05326":[()=>n.e(2775).then(n.bind(n,17430)),"@site/docs/packaging/package.yml.md",17430],"418a6276":[()=>n.e(6160).then(n.bind(n,71697)),"@site/devlog/2024-01-19-eopkg-is-dead.md?truncated=true",71697],"41a4de91":[()=>n.e(7682).then(n.bind(n,31593)),"@site/docs/user/software/third-party/index.md",31593],"424f562c":[()=>n.e(3122).then(n.bind(n,15054)),"@site/devlog/2024-02-09-Intro-to-optimizing-packages-on-solus.md?truncated=true",15054],"439d6d8d":[()=>n.e(4374).then(n.t.bind(n,4915,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-mate-495.json",4915],"43d43a8f":[()=>n.e(9156).then(n.t.bind(n,5410,19)),"@generated/docusaurus-plugin-content-docs/default/p/docs-category-localization-3b5.json",5410],"45e9d313":[()=>n.e(6114).then(n.bind(n,47124)),"@site/docs/packaging/testing-a-package.md",47124],"46a65d96":[()=>n.e(8092).then(n.bind(n,82758)),"@site/docs/user/package-management/repo-management.md",82758],"47b97f63":[()=>n.e(834).then(n.t.bind(n,54517,19)),"@generated/docusaurus-plugin-content-docs/default/p/docs-category-compatibility-048.json",54517],"4802fa93":[()=>n.e(1774).then(n.bind(n,48815)),"@site/devlog/2024-01-29-dont-call-me-mate.md",48815],"49b71c16":[()=>n.e(3783).then(n.bind(n,99937)),"@site/docs/packaging/packaging-practices.md",99937],"4e87380c":[()=>n.e(2585).then(n.t.bind(n,68801,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-gnu-f4d.json",68801],"513b6405":[()=>n.e(4278).then(n.bind(n,38033)),"@site/docs/packaging/prepare-for-packaging.md",38033],"528b6a6b":[()=>n.e(7822).then(n.bind(n,61661)),"@site/docs/user/software/utilities/ksysguard.md",61661],"533eefa9":[()=>n.e(4002).then(n.bind(n,99023)),"@site/docs/user/quick-start/installation/index.md",99023],"5685b4d8":[()=>n.e(1540).then(n.bind(n,17599)),"@site/docs/user/editions/xfce/configuration.md",17599],"5b7f3753":[()=>n.e(6413).then(n.bind(n,47512)),"@site/docs/packaging/git-basics.md",47512],"5e95c892":[()=>n.e(9661).then(n.bind(n,14399)),"@theme/DocsRoot",14399],"5e9f5e1a":[()=>Promise.resolve().then(n.bind(n,36809)),"@generated/docusaurus.config",36809],"5efe994e":[()=>n.e(1598).then(n.t.bind(n,83532,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-llvm-8d1.json",83532],"5f194406":[()=>n.e(7607).then(n.bind(n,77882)),"@site/docs/user/contributing/community-guidelines.md",77882],"6146d358":[()=>n.e(7798).then(n.t.bind(n,90800,19)),"@generated/docusaurus-plugin-content-docs/default/p/docs-category-contributing-e4f.json",90800],"61c953b4":[()=>n.e(8032).then(n.bind(n,18421)),"@site/docs/packaging/procedures/maintainership.md",18421],"621db11d":[()=>Promise.all([n.e(3312),n.e(5966),n.e(3940)]).then(n.bind(n,44995)),"@theme/Blog/Pages/BlogAuthorsListPage",44995],"62d70de2":[()=>n.e(818).then(n.t.bind(n,5230,19)),"@generated/docusaurus-plugin-content-docs/default/p/docs-category-virtualization-413.json",5230],"633d53d7":[()=>n.e(425).then(n.t.bind(n,30080,19)),"@generated/docusaurus-plugin-content-docs/default/p/docs-category-procedures-1dc.json",30080],64699048:[()=>n.e(2151).then(n.bind(n,87063)),"@site/docs/user/software/development/index.md",87063],"6787574e":[()=>n.e(4500).then(n.bind(n,26240)),"@site/docs/user/intro.md",26240],"6873f895":[()=>n.e(8849).then(n.bind(n,83781)),"@site/docs/user/contributing/style.md",83781],"6875c492":[()=>Promise.all([n.e(3312),n.e(6937),n.e(5966),n.e(6614),n.e(8610)]).then(n.bind(n,23966)),"@theme/BlogTagsPostsPage",23966],"6cfe09a0":[()=>n.e(1174).then(n.bind(n,67189)),"@site/docs/user/software/networking/tigervnc.md",67189],"7071adf5":[()=>n.e(4796).then(n.bind(n,31386)),"@site/docs/packaging/troubleshooting-packaging.md",31386],"72054e31":[()=>n.e(7135).then(n.bind(n,83888)),"@site/devlog/2024-02-09-Intro-to-optimizing-packages-on-solus.md",83888],"72f2f84e":[()=>n.e(794).then(n.t.bind(n,23343,19)),"@generated/docusaurus-plugin-content-docs/default/p/docs-category-utilities-bb8.json",23343],"74470af4":[()=>n.e(1896).then(n.bind(n,5893)),"@site/docs/user/software/virtualization/virtualbox.md",5893],"75c41d11":[()=>n.e(3337).then(n.bind(n,75584)),"@site/docs/user/editions/xfce/tips-and-tricks.md",75584],"793c86b2":[()=>n.e(168).then(n.bind(n,41426)),"@site/docs/user/software/command-line/index.md",41426],"7a24477a":[()=>n.e(9135).then(n.bind(n,44308)),"@site/docs/user/contributing/getting-involved.md",44308],"7b0bdf40":[()=>n.e(29).then(n.t.bind(n,56548,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-eopkg-20b.json",56548],"7c1fb106":[()=>n.e(4605).then(n.bind(n,66334)),"@site/docs/packaging/appstream-metainfo.md",66334],"7c2abd66":[()=>n.e(586).then(n.t.bind(n,19739,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-moss-7c4.json",19739],"7e4100d6":[()=>n.e(6990).then(n.bind(n,18193)),"@site/docs/user/software/networking/wireshark.md",18193],"814f3328":[()=>n.e(2535).then(n.t.bind(n,45641,19)),"~blog/default/blog-post-list-prop-default.json",45641],"8490a22d":[()=>n.e(8575).then(n.bind(n,5734)),"@site/docs/packaging/advanced-config/local-repository.md",5734],"88a83a8c":[()=>n.e(1242).then(n.bind(n,65574)),"@site/docs/user/software/utilities/kwallet.md",65574],"8d193990":[()=>n.e(1539).then(n.bind(n,5436)),"@site/devlog/2024-01-19-eopkg-is-dead.md",5436],"8e3d5b32":[()=>n.e(8499).then(n.bind(n,15838)),"@site/docs/user/software/localization/ibus.md",15838],"8e861970":[()=>n.e(8026).then(n.bind(n,95751)),"@site/docs/packaging/procedures/request-a-package.md",95751],"8e886580":[()=>n.e(4978).then(n.bind(n,71137)),"@site/docs/user/software/development/rust.md",71137],"920ec10a":[()=>n.e(4725).then(n.t.bind(n,63438,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-glibc-23b.json",63438],"9284d474":[()=>n.e(7626).then(n.bind(n,8110)),"@site/docs/user/software/gaming/index.md",8110],"947d9ca4":[()=>n.e(1944).then(n.bind(n,10025)),"@site/docs/user/software/development/web.md",10025],"9485dea6":[()=>n.e(2358).then(n.bind(n,29421)),"@site/docs/user/hardware/compatibility/wifi.md",29421],"96af6484":[()=>n.e(6225).then(n.bind(n,53058)),"@site/docs/user/hardware/peripherals/mice-and-touchpads.md",53058],"97c623e4":[()=>n.e(6427).then(n.bind(n,42268)),"@site/docs/packaging/procedures/request-a-package-update.md",42268],"99bedda9":[()=>n.e(8639).then(n.bind(n,48345)),"@site/docs/user/hardware/index.md",48345],"9b400668":[()=>n.e(7670).then(n.t.bind(n,20767,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-x-86-64-v-3-dc8.json",20767],"9e4087bc":[()=>n.e(3608).then(n.bind(n,8635)),"@theme/BlogArchivePage",8635],a05bfad9:[()=>n.e(885).then(n.bind(n,12620)),"@site/docs/user/editions/budgie/tips-and-tricks.md",12620],a398ef57:[()=>n.e(2586).then(n.bind(n,45523)),"@site/docs/user/hardware/mobile/apple.md",45523],a52026b8:[()=>n.e(7862).then(n.bind(n,19253)),"@site/devlog/2024-01-13-welcome-devlog.md?truncated=true",19253],a6aa9e1f:[()=>Promise.all([n.e(3312),n.e(6937),n.e(5966),n.e(6614),n.e(3089)]).then(n.bind(n,33587)),"@theme/BlogListPage",33587],a6c0fb2f:[()=>n.e(6335).then(n.bind(n,54501)),"@site/devlog/2024-11-21-clean-cleanl-clean.md",54501],a7456010:[()=>n.e(5980).then(n.t.bind(n,79365,19)),"@generated/docusaurus-plugin-content-pages/default/__plugin.json",79365],a7bd4aaa:[()=>n.e(8518).then(n.bind(n,89615)),"@theme/DocVersionRoot",89615],a94703ab:[()=>Promise.all([n.e(3312),n.e(4368)]).then(n.bind(n,59779)),"@theme/DocRoot",59779],a9e19215:[()=>n.e(333).then(n.bind(n,71371)),"@site/docs/user/software/networking/xrdp.md",71371],ab89b7a6:[()=>n.e(5575).then(n.bind(n,83016)),"@site/docs/user/editions/xfce/index.md",83016],aba21aa0:[()=>n.e(3629).then(n.t.bind(n,41765,19)),"@generated/docusaurus-plugin-content-docs/default/__plugin.json",41765],acecf23e:[()=>n.e(7393).then(n.t.bind(n,81838,19)),"~blog/default/blogMetadata-default.json",81838],ad205e99:[()=>n.e(1617).then(n.bind(n,38491)),"@site/docs/packaging/stack-rebuilds.md",38491],b4302412:[()=>n.e(2081).then(n.bind(n,55892)),"@site/docs/user/editions/gnome/tips-and-tricks.md",55892],b6ca4f35:[()=>n.e(9214).then(n.t.bind(n,27983,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-packaging-55a.json",27983],baa66232:[()=>n.e(984).then(n.bind(n,17789)),"@site/docs/user/software/camera/droidcam.md",17789],baf1b6e8:[()=>n.e(9677).then(n.bind(n,14864)),"@site/docs/user/software/development/java.md",14864],be4ac66b:[()=>n.e(4869).then(n.bind(n,87190)),"@site/docs/user/hardware/compatibility/laptops.md",87190],be79d003:[()=>n.e(6012).then(n.bind(n,62262)),"@site/docs/packaging/update-dev-environment.md",62262],c15d9823:[()=>n.e(6642).then(n.t.bind(n,92506,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-bd9.json",92506],c55c138b:[()=>n.e(7465).then(n.bind(n,76323)),"@site/docs/packaging/packaging-changes.md",76323],c5de29d4:[()=>n.e(3851).then(n.bind(n,44158)),"@site/docs/packaging/creating-a-new-package.md",44158],c99ea947:[()=>n.e(7018).then(n.t.bind(n,7768,19)),"@generated/docusaurus-plugin-content-docs/default/p/docs-category-camera-f25.json",7768],c9c1a3f4:[()=>n.e(6121).then(n.bind(n,24080)),"@site/docs/user/editions/budgie/configuration.md",24080],cca891e2:[()=>n.e(9773).then(n.bind(n,7857)),"@site/docs/packaging/procedures/package-inclusion.md",7857],ccc49370:[()=>Promise.all([n.e(3312),n.e(6937),n.e(5966),n.e(6614),n.e(6103)]).then(n.bind(n,88987)),"@theme/BlogPostPage",88987],ce4855c1:[()=>n.e(3440).then(n.bind(n,66855)),"@site/docs/packaging/translation-instructions.md",66855],cec10a63:[()=>n.e(8422).then(n.bind(n,96928)),"@site/docs/user/editions/plasma/configuration.md",96928],d00f7e62:[()=>n.e(255).then(n.bind(n,67868)),"@site/docs/packaging/your-first-package-update.md",67868],d0d2faf6:[()=>n.e(4507).then(n.bind(n,79267)),"@site/docs/packaging/procedures/release-processes.md",79267],d20919b7:[()=>n.e(2627).then(n.t.bind(n,20570,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-cleanup-4e8.json",20570],d2363c7a:[()=>n.e(2741).then(n.t.bind(n,1629,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-authors-alfi-751.json",1629],d4762887:[()=>n.e(3624).then(n.bind(n,1108)),"@site/docs/user/troubleshooting/installation.md",1108],d5670106:[()=>n.e(1950).then(n.bind(n,60908)),"@site/docs/user/troubleshooting/plasma.md",60908],d9c798e8:[()=>n.e(807).then(n.t.bind(n,37275,19)),"@generated/docusaurus-plugin-content-docs/default/p/docs-category-peripherals-173.json",37275],da0423b8:[()=>n.e(3090).then(n.t.bind(n,5930,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-housekeeping-67a.json",5930],da62f019:[()=>n.e(1821).then(n.t.bind(n,98171,19)),"@generated/docusaurus-plugin-content-docs/default/p/docs-category-quick-start-1ee.json",98171],dabd6b33:[()=>n.e(1059).then(n.bind(n,37101)),"@site/docs/packaging/advanced-config/eopkg-configuration.md",37101],ddc41e4a:[()=>n.e(9451).then(n.bind(n,3619)),"@site/docs/user/software/sound/index.md",3619],e083e94b:[()=>n.e(3056).then(n.bind(n,83514)),"@site/docs/user/software/third-party/snap.md",83514],e4134e95:[()=>n.e(8621).then(n.t.bind(n,80700,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-devlog-dac.json",80700],e5595530:[()=>n.e(1648).then(n.bind(n,4183)),"@site/docs/user/quick-start/boot-management.md",4183],ea6d9109:[()=>n.e(812).then(n.t.bind(n,88930,19)),"@generated/docusaurus-plugin-content-docs/default/p/docs-category-web-23c.json",88930],eb074ba1:[()=>n.e(3705).then(n.bind(n,45247)),"@site/docs/user/software/configuration_files.md",45247],ec4e4367:[()=>n.e(4529).then(n.bind(n,76130)),"@site/docs/user/hardware/mobile/android.md",76130],ecdeb26c:[()=>n.e(1971).then(n.bind(n,35247)),"@site/devlog/2024-01-29-dont-call-me-mate.md?truncated=true",35247],ed2a5927:[()=>n.e(4560).then(n.bind(n,18653)),"@site/docs/user/quick-start/software-center/index.md",18653],ef8b811a:[()=>n.e(2644).then(n.t.bind(n,89441,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-authors-790.json",89441],f0629c21:[()=>n.e(3375).then(n.bind(n,53126)),"@site/docs/user/software/web/obs.md",53126],f1d13e1b:[()=>n.e(5462).then(n.bind(n,16467)),"@site/docs/user/editions/mate/tips-and-tricks.md",16467],f32bcb79:[()=>n.e(6515).then(n.t.bind(n,15631,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-firstpost-ddd.json",15631],f35b91b6:[()=>n.e(9749).then(n.bind(n,78677)),"@site/devlog/2024-01-13-welcome-devlog.md",78677],f3d58343:[()=>n.e(8812).then(n.t.bind(n,11741,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-authors-david-9d9.json",11741],f4aa4739:[()=>n.e(9170).then(n.bind(n,75340)),"@site/docs/user/editions/budgie/index.md",75340],f4c9601b:[()=>n.e(2595).then(n.bind(n,39910)),"@site/docs/user/quick-start/installation/secure-boot.md",39910],f6faa2b4:[()=>n.e(8143).then(n.bind(n,40396)),"@site/docs/user/hardware/peripherals/midi-keyboard.md",40396],f81c1134:[()=>n.e(4031).then(n.t.bind(n,4108,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-archive-f05.json",4108],f82cd581:[()=>n.e(8626).then(n.t.bind(n,56664,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-hello-f96.json",56664],f8dd8223:[()=>n.e(7212).then(n.bind(n,4606)),"@site/docs/user/software/development/postgresql.md",4606],fb6dc457:[()=>n.e(5482).then(n.bind(n,77123)),"@site/docs/user/editions/gnome/configuration.md",77123],fb8d634e:[()=>n.e(999).then(n.bind(n,86591)),"@site/docs/user/editions/gnome/index.md",86591],fc733b73:[()=>n.e(6042).then(n.bind(n,28537)),"@site/docs/user/software/development/r-and-rstudio.md",28537],fe13418f:[()=>n.e(1182).then(n.bind(n,43900)),"@site/devlog/2024-11-21-clean-cleanl-clean.md?truncated=true",43900]};var s=n(85893);function l(e){let{error:t,retry:n,pastDelay:r}=e;return t?(0,s.jsxs)("div",{style:{textAlign:"center",color:"#fff",backgroundColor:"#fa383e",borderColor:"#fa383e",borderStyle:"solid",borderRadius:"0.25rem",borderWidth:"1px",boxSizing:"border-box",display:"block",padding:"1rem",flex:"0 0 50%",marginLeft:"25%",marginRight:"25%",marginTop:"5rem",maxWidth:"50%",width:"100%"},children:[(0,s.jsx)("p",{children:String(t)}),(0,s.jsx)("div",{children:(0,s.jsx)("button",{type:"button",onClick:n,children:"Retry"})})]}):r?(0,s.jsx)("div",{style:{display:"flex",justifyContent:"center",alignItems:"center",height:"100vh"},children:(0,s.jsx)("svg",{id:"loader",style:{width:128,height:110,position:"absolute",top:"calc(100vh - 64%)"},viewBox:"0 0 45 45",xmlns:"http://www.w3.org/2000/svg",stroke:"#61dafb",children:(0,s.jsxs)("g",{fill:"none",fillRule:"evenodd",transform:"translate(1 1)",strokeWidth:"2",children:[(0,s.jsxs)("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0",children:[(0,s.jsx)("animate",{attributeName:"r",begin:"1.5s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),(0,s.jsx)("animate",{attributeName:"stroke-opacity",begin:"1.5s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),(0,s.jsx)("animate",{attributeName:"stroke-width",begin:"1.5s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})]}),(0,s.jsxs)("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0",children:[(0,s.jsx)("animate",{attributeName:"r",begin:"3s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),(0,s.jsx)("animate",{attributeName:"stroke-opacity",begin:"3s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),(0,s.jsx)("animate",{attributeName:"stroke-width",begin:"3s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})]}),(0,s.jsx)("circle",{cx:"22",cy:"22",r:"8",children:(0,s.jsx)("animate",{attributeName:"r",begin:"0s",dur:"1.5s",values:"6;1;2;3;4;5;6",calcMode:"linear",repeatCount:"indefinite"})})]})})}):null}var c=n(44151),u=n(13736);function d(e,t){if("*"===e)return o()({loading:l,loader:()=>n.e(7734).then(n.bind(n,57734)),modules:["@theme/NotFound"],webpack:()=>[57734],render(e,t){const n=e.default;return(0,s.jsx)(u.z,{value:{plugin:{name:"native",id:"default"}},children:(0,s.jsx)(n,{...t})})}});const r=a[`${e}-${t}`],d={},p=[],f=[],g=(0,c.Z)(r);return Object.entries(g).forEach((e=>{let[t,n]=e;const r=i[n];r&&(d[t]=r[0],p.push(r[1]),f.push(r[2]))})),o().Map({loading:l,loader:d,modules:p,webpack:()=>f,render(t,n){const o=JSON.parse(JSON.stringify(r));Object.entries(t).forEach((t=>{let[n,r]=t;const a=r.default;if(!a)throw new Error(`The page component at ${e} doesn't have a default export. This makes it impossible to render anything. Consider default-exporting a React component.`);"object"!=typeof a&&"function"!=typeof a||Object.keys(r).filter((e=>"default"!==e)).forEach((e=>{a[e]=r[e]}));let i=o;const s=n.split(".");s.slice(0,-1).forEach((e=>{i=i[e]})),i[s[s.length-1]]=a}));const a=o.__comp;delete o.__comp;const i=o.__context;delete o.__context;const l=o.__props;return delete o.__props,(0,s.jsx)(u.z,{value:i,children:(0,s.jsx)(a,{...o,...l,...n})})}})}const p=[{path:"/blog",component:d("/blog","040"),exact:!0},{path:"/blog/archive",component:d("/blog/archive","182"),exact:!0},{path:"/blog/authors",component:d("/blog/authors","0b7"),exact:!0},{path:"/blog/authors/alfi",component:d("/blog/authors/alfi","625"),exact:!0},{path:"/blog/authors/david",component:d("/blog/authors/david","386"),exact:!0},{path:"/blog/authors/joey",component:d("/blog/authors/joey","979"),exact:!0},{path:"/blog/clean-clean-clean",component:d("/blog/clean-clean-clean","6e9"),exact:!0},{path:"/blog/don't-call-me-mate-pal",component:d("/blog/don't-call-me-mate-pal","4cd"),exact:!0},{path:"/blog/eopkg-is-dead-long-live-eopkg",component:d("/blog/eopkg-is-dead-long-live-eopkg","a0e"),exact:!0},{path:"/blog/solus-optimizing-packages",component:d("/blog/solus-optimizing-packages","3c8"),exact:!0},{path:"/blog/tags",component:d("/blog/tags","287"),exact:!0},{path:"/blog/tags/3",component:d("/blog/tags/3","2ba"),exact:!0},{path:"/blog/tags/clang",component:d("/blog/tags/clang","7cb"),exact:!0},{path:"/blog/tags/cleanup",component:d("/blog/tags/cleanup","391"),exact:!0},{path:"/blog/tags/devlog",component:d("/blog/tags/devlog","9e2"),exact:!0},{path:"/blog/tags/eopkg",component:d("/blog/tags/eopkg","a41"),exact:!0},{path:"/blog/tags/firstpost",component:d("/blog/tags/firstpost","c48"),exact:!0},{path:"/blog/tags/glibc",component:d("/blog/tags/glibc","1b5"),exact:!0},{path:"/blog/tags/gnu",component:d("/blog/tags/gnu","94b"),exact:!0},{path:"/blog/tags/hello",component:d("/blog/tags/hello","d49"),exact:!0},{path:"/blog/tags/housekeeping",component:d("/blog/tags/housekeeping","339"),exact:!0},{path:"/blog/tags/hwcaps",component:d("/blog/tags/hwcaps","6d6"),exact:!0},{path:"/blog/tags/llvm",component:d("/blog/tags/llvm","aff"),exact:!0},{path:"/blog/tags/lto",component:d("/blog/tags/lto","24f"),exact:!0},{path:"/blog/tags/mate",component:d("/blog/tags/mate","e08"),exact:!0},{path:"/blog/tags/moss",component:d("/blog/tags/moss","e04"),exact:!0},{path:"/blog/tags/optimization",component:d("/blog/tags/optimization","535"),exact:!0},{path:"/blog/tags/packaging",component:d("/blog/tags/packaging","07c"),exact:!0},{path:"/blog/tags/pgo",component:d("/blog/tags/pgo","a42"),exact:!0},{path:"/blog/tags/solus",component:d("/blog/tags/solus","601"),exact:!0},{path:"/blog/tags/x-86-64-v-3",component:d("/blog/tags/x-86-64-v-3","716"),exact:!0},{path:"/blog/welcome-solus-devlog-v1",component:d("/blog/welcome-solus-devlog-v1","418"),exact:!0},{path:"/docs",component:d("/docs","cda"),routes:[{path:"/docs",component:d("/docs","d14"),routes:[{path:"/docs",component:d("/docs","f54"),routes:[{path:"/docs/category/advanced-configuration",component:d("/docs/category/advanced-configuration","21a"),exact:!0,sidebar:"packagingSidebar"},{path:"/docs/category/camera",component:d("/docs/category/camera","eec"),exact:!0,sidebar:"userSidebar"},{path:"/docs/category/compatibility",component:d("/docs/category/compatibility","41d"),exact:!0,sidebar:"userSidebar"},{path:"/docs/category/contributing",component:d("/docs/category/contributing","524"),exact:!0,sidebar:"userSidebar"},{path:"/docs/category/localization",component:d("/docs/category/localization","976"),exact:!0,sidebar:"userSidebar"},{path:"/docs/category/mobile",component:d("/docs/category/mobile","8b8"),exact:!0,sidebar:"userSidebar"},{path:"/docs/category/networking",component:d("/docs/category/networking","2c7"),exact:!0,sidebar:"userSidebar"},{path:"/docs/category/package-management",component:d("/docs/category/package-management","540"),exact:!0,sidebar:"userSidebar"},{path:"/docs/category/peripherals",component:d("/docs/category/peripherals","b31"),exact:!0,sidebar:"userSidebar"},{path:"/docs/category/procedures",component:d("/docs/category/procedures","59d"),exact:!0,sidebar:"packagingSidebar"},{path:"/docs/category/quick-start",component:d("/docs/category/quick-start","16b"),exact:!0,sidebar:"userSidebar"},{path:"/docs/category/software",component:d("/docs/category/software","5c6"),exact:!0,sidebar:"userSidebar"},{path:"/docs/category/utilities",component:d("/docs/category/utilities","7bd"),exact:!0,sidebar:"userSidebar"},{path:"/docs/category/virtualization",component:d("/docs/category/virtualization","cd2"),exact:!0,sidebar:"userSidebar"},{path:"/docs/category/web",component:d("/docs/category/web","f03"),exact:!0,sidebar:"userSidebar"},{path:"/docs/packaging/",component:d("/docs/packaging/","481"),exact:!0,sidebar:"packagingSidebar"},{path:"/docs/packaging/advanced-config/eopkg-configuration",component:d("/docs/packaging/advanced-config/eopkg-configuration","ebe"),exact:!0,sidebar:"packagingSidebar"},{path:"/docs/packaging/advanced-config/local-repository",component:d("/docs/packaging/advanced-config/local-repository","6db"),exact:!0,sidebar:"packagingSidebar"},{path:"/docs/packaging/appstream-metainfo",component:d("/docs/packaging/appstream-metainfo","a7b"),exact:!0,sidebar:"packagingSidebar"},{path:"/docs/packaging/creating-a-new-package",component:d("/docs/packaging/creating-a-new-package","751"),exact:!0,sidebar:"packagingSidebar"},{path:"/docs/packaging/git-basics",component:d("/docs/packaging/git-basics","d8b"),exact:!0,sidebar:"packagingSidebar"},{path:"/docs/packaging/monitoring.yml",component:d("/docs/packaging/monitoring.yml","94f"),exact:!0,sidebar:"packagingSidebar"},{path:"/docs/packaging/package.yml",component:d("/docs/packaging/package.yml","87d"),exact:!0,sidebar:"packagingSidebar"},{path:"/docs/packaging/packaging-changes",component:d("/docs/packaging/packaging-changes","c28"),exact:!0,sidebar:"packagingSidebar"},{path:"/docs/packaging/packaging-practices",component:d("/docs/packaging/packaging-practices","573"),exact:!0,sidebar:"packagingSidebar"},{path:"/docs/packaging/prepare-for-packaging",component:d("/docs/packaging/prepare-for-packaging","bb4"),exact:!0,sidebar:"packagingSidebar"},{path:"/docs/packaging/procedures/maintainership",component:d("/docs/packaging/procedures/maintainership","225"),exact:!0,sidebar:"packagingSidebar"},{path:"/docs/packaging/procedures/package-inclusion",component:d("/docs/packaging/procedures/package-inclusion","f02"),exact:!0,sidebar:"packagingSidebar"},{path:"/docs/packaging/procedures/release-processes",component:d("/docs/packaging/procedures/release-processes","e7c"),exact:!0,sidebar:"packagingSidebar"},{path:"/docs/packaging/procedures/request-a-package",component:d("/docs/packaging/procedures/request-a-package","c89"),exact:!0,sidebar:"packagingSidebar"},{path:"/docs/packaging/procedures/request-a-package-update",component:d("/docs/packaging/procedures/request-a-package-update","741"),exact:!0,sidebar:"packagingSidebar"},{path:"/docs/packaging/stack-rebuilds",component:d("/docs/packaging/stack-rebuilds","aa8"),exact:!0,sidebar:"packagingSidebar"},{path:"/docs/packaging/submitting-a-pull-request",component:d("/docs/packaging/submitting-a-pull-request","b03"),exact:!0,sidebar:"packagingSidebar"},{path:"/docs/packaging/testing-a-package",component:d("/docs/packaging/testing-a-package","438"),exact:!0,sidebar:"packagingSidebar"},{path:"/docs/packaging/translation-instructions",component:d("/docs/packaging/translation-instructions","12e"),exact:!0,sidebar:"packagingSidebar"},{path:"/docs/packaging/troubleshooting-packaging",component:d("/docs/packaging/troubleshooting-packaging","7b5"),exact:!0,sidebar:"packagingSidebar"},{path:"/docs/packaging/update-dev-environment",component:d("/docs/packaging/update-dev-environment","fb2"),exact:!0,sidebar:"packagingSidebar"},{path:"/docs/packaging/updating-an-existing-package",component:d("/docs/packaging/updating-an-existing-package","25c"),exact:!0,sidebar:"packagingSidebar"},{path:"/docs/packaging/your-first-package-update",component:d("/docs/packaging/your-first-package-update","29d"),exact:!0,sidebar:"packagingSidebar"},{path:"/docs/user/contributing/community-guidelines",component:d("/docs/user/contributing/community-guidelines","774"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/contributing/getting-involved",component:d("/docs/user/contributing/getting-involved","c1b"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/contributing/style",component:d("/docs/user/contributing/style","215"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/contributing/testing-an-iso",component:d("/docs/user/contributing/testing-an-iso","9cf"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/editions/",component:d("/docs/user/editions/","e45"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/editions/budgie/",component:d("/docs/user/editions/budgie/","e65"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/editions/budgie/configuration",component:d("/docs/user/editions/budgie/configuration","d93"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/editions/budgie/tips-and-tricks",component:d("/docs/user/editions/budgie/tips-and-tricks","5aa"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/editions/gnome/",component:d("/docs/user/editions/gnome/","9f3"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/editions/gnome/configuration",component:d("/docs/user/editions/gnome/configuration","cbf"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/editions/gnome/tips-and-tricks",component:d("/docs/user/editions/gnome/tips-and-tricks","825"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/editions/mate/",component:d("/docs/user/editions/mate/","619"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/editions/mate/configuration",component:d("/docs/user/editions/mate/configuration","d2f"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/editions/mate/tips-and-tricks",component:d("/docs/user/editions/mate/tips-and-tricks","c1b"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/editions/plasma/",component:d("/docs/user/editions/plasma/","f25"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/editions/plasma/configuration",component:d("/docs/user/editions/plasma/configuration","564"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/editions/plasma/tips-and-tricks",component:d("/docs/user/editions/plasma/tips-and-tricks","a3f"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/editions/xfce/",component:d("/docs/user/editions/xfce/","bd1"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/editions/xfce/configuration",component:d("/docs/user/editions/xfce/configuration","b87"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/editions/xfce/tips-and-tricks",component:d("/docs/user/editions/xfce/tips-and-tricks","e55"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/hardware/",component:d("/docs/user/hardware/","f51"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/hardware/compatibility/laptops",component:d("/docs/user/hardware/compatibility/laptops","4cb"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/hardware/compatibility/wifi",component:d("/docs/user/hardware/compatibility/wifi","1d7"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/hardware/mobile/android",component:d("/docs/user/hardware/mobile/android","c18"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/hardware/mobile/apple",component:d("/docs/user/hardware/mobile/apple","c64"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/hardware/peripherals/mice-and-touchpads",component:d("/docs/user/hardware/peripherals/mice-and-touchpads","7ef"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/hardware/peripherals/midi-keyboard",component:d("/docs/user/hardware/peripherals/midi-keyboard","327"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/hardware/peripherals/printers-and-scanners",component:d("/docs/user/hardware/peripherals/printers-and-scanners","1bd"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/intro",component:d("/docs/user/intro","a7c"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/package-management/basics",component:d("/docs/user/package-management/basics","d4e"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/package-management/history-and-rollback",component:d("/docs/user/package-management/history-and-rollback","57d"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/package-management/repo-management",component:d("/docs/user/package-management/repo-management","7c4"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/privacy",component:d("/docs/user/privacy","1bd"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/quick-start/boot-management",component:d("/docs/user/quick-start/boot-management","3d5"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/quick-start/default-applications",component:d("/docs/user/quick-start/default-applications","99f"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/quick-start/installation/",component:d("/docs/user/quick-start/installation/","686"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/quick-start/installation/disks",component:d("/docs/user/quick-start/installation/disks","39e"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/quick-start/installation/secure-boot",component:d("/docs/user/quick-start/installation/secure-boot","979"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/quick-start/installation/system-requirements",component:d("/docs/user/quick-start/installation/system-requirements","4dc"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/quick-start/software-center/",component:d("/docs/user/quick-start/software-center/","f49"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/software/camera/droidcam",component:d("/docs/user/software/camera/droidcam","908"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/software/command-line/",component:d("/docs/user/software/command-line/","344"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/software/configuration_files",component:d("/docs/user/software/configuration_files","c79"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/software/desktops/",component:d("/docs/user/software/desktops/","206"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/software/development/",component:d("/docs/user/software/development/","a4c"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/software/development/containers",component:d("/docs/user/software/development/containers","55d"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/software/development/java",component:d("/docs/user/software/development/java","fc7"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/software/development/postgresql",component:d("/docs/user/software/development/postgresql","c0a"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/software/development/r-and-rstudio",component:d("/docs/user/software/development/r-and-rstudio","405"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/software/development/rust",component:d("/docs/user/software/development/rust","4eb"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/software/development/web",component:d("/docs/user/software/development/web","ecd"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/software/gaming/",component:d("/docs/user/software/gaming/","e54"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/software/localization/ibus",component:d("/docs/user/software/localization/ibus","21a"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/software/networking/samba",component:d("/docs/user/software/networking/samba","86e"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/software/networking/tigervnc",component:d("/docs/user/software/networking/tigervnc","032"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/software/networking/wireshark",component:d("/docs/user/software/networking/wireshark","ed9"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/software/networking/xrdp",component:d("/docs/user/software/networking/xrdp","44b"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/software/sound/",component:d("/docs/user/software/sound/","420"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/software/third-party/",component:d("/docs/user/software/third-party/","6a1"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/software/third-party/snap",component:d("/docs/user/software/third-party/snap","47a"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/software/utilities/ksysguard",component:d("/docs/user/software/utilities/ksysguard","278"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/software/utilities/kwallet",component:d("/docs/user/software/utilities/kwallet","dbc"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/software/virtualization/virtualbox",component:d("/docs/user/software/virtualization/virtualbox","016"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/software/web/obs",component:d("/docs/user/software/web/obs","3fa"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/troubleshooting/",component:d("/docs/user/troubleshooting/","9b5"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/troubleshooting/boot-rescue",component:d("/docs/user/troubleshooting/boot-rescue","6fd"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/troubleshooting/installation",component:d("/docs/user/troubleshooting/installation","d91"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/troubleshooting/plasma",component:d("/docs/user/troubleshooting/plasma","b13"),exact:!0,sidebar:"userSidebar"}]}]}]},{path:"/",component:d("/","e5f"),exact:!0},{path:"*",component:d("*")}]},72278:(e,t,n)=>{var r,o;!function(){var a,i,s,l,c,u,d,p,f,g,m,h,b,y,v,w,k,S,_,x,E,O,P,j,C,T,I,A,N,L,R=function(e){var t=new R.Builder;return t.pipeline.add(R.trimmer,R.stopWordFilter,R.stemmer),t.searchPipeline.add(R.stemmer),e.call(t,t),t.build()};R.version="2.3.9",R.utils={},R.utils.warn=(a=this,function(e){a.console&&console.warn&&console.warn(e)}),R.utils.asString=function(e){return null==e?"":e.toString()},R.utils.clone=function(e){if(null==e)return e;for(var t=Object.create(null),n=Object.keys(e),r=0;r<n.length;r++){var o=n[r],a=e[o];if(Array.isArray(a))t[o]=a.slice();else{if("string"!=typeof a&&"number"!=typeof a&&"boolean"!=typeof a)throw new TypeError("clone is not deep and does not support nested objects");t[o]=a}}return t},R.FieldRef=function(e,t,n){this.docRef=e,this.fieldName=t,this._stringValue=n},R.FieldRef.joiner="/",R.FieldRef.fromString=function(e){var t=e.indexOf(R.FieldRef.joiner);if(-1===t)throw"malformed field ref string";var n=e.slice(0,t),r=e.slice(t+1);return new R.FieldRef(r,n,e)},R.FieldRef.prototype.toString=function(){return null==this._stringValue&&(this._stringValue=this.fieldName+R.FieldRef.joiner+this.docRef),this._stringValue},R.Set=function(e){if(this.elements=Object.create(null),e){this.length=e.length;for(var t=0;t<this.length;t++)this.elements[e[t]]=!0}else this.length=0},R.Set.complete={intersect:function(e){return e},union:function(){return this},contains:function(){return!0}},R.Set.empty={intersect:function(){return this},union:function(e){return e},contains:function(){return!1}},R.Set.prototype.contains=function(e){return!!this.elements[e]},R.Set.prototype.intersect=function(e){var t,n,r,o=[];if(e===R.Set.complete)return this;if(e===R.Set.empty)return e;this.length<e.length?(t=this,n=e):(t=e,n=this),r=Object.keys(t.elements);for(var a=0;a<r.length;a++){var i=r[a];i in n.elements&&o.push(i)}return new R.Set(o)},R.Set.prototype.union=function(e){return e===R.Set.complete?R.Set.complete:e===R.Set.empty?this:new R.Set(Object.keys(this.elements).concat(Object.keys(e.elements)))},R.idf=function(e,t){var n=0;for(var r in e)"_index"!=r&&(n+=Object.keys(e[r]).length);var o=(t-n+.5)/(n+.5);return Math.log(1+Math.abs(o))},R.Token=function(e,t){this.str=e||"",this.metadata=t||{}},R.Token.prototype.toString=function(){return this.str},R.Token.prototype.update=function(e){return this.str=e(this.str,this.metadata),this},R.Token.prototype.clone=function(e){return e=e||function(e){return e},new R.Token(e(this.str,this.metadata),this.metadata)},R.tokenizer=function(e,t){if(null==e||null==e)return[];if(Array.isArray(e))return e.map((function(e){return new R.Token(R.utils.asString(e).toLowerCase(),R.utils.clone(t))}));for(var n=e.toString().toLowerCase(),r=n.length,o=[],a=0,i=0;a<=r;a++){var s=a-i;if(n.charAt(a).match(R.tokenizer.separator)||a==r){if(s>0){var l=R.utils.clone(t)||{};l.position=[i,s],l.index=o.length,o.push(new R.Token(n.slice(i,a),l))}i=a+1}}return o},R.tokenizer.separator=/[\s\-]+/,R.Pipeline=function(){this._stack=[]},R.Pipeline.registeredFunctions=Object.create(null),R.Pipeline.registerFunction=function(e,t){t in this.registeredFunctions&&R.utils.warn("Overwriting existing registered function: "+t),e.label=t,R.Pipeline.registeredFunctions[e.label]=e},R.Pipeline.warnIfFunctionNotRegistered=function(e){e.label&&e.label in this.registeredFunctions||R.utils.warn("Function is not registered with pipeline. This may cause problems when serialising the index.\n",e)},R.Pipeline.load=function(e){var t=new R.Pipeline;return e.forEach((function(e){var n=R.Pipeline.registeredFunctions[e];if(!n)throw new Error("Cannot load unregistered function: "+e);t.add(n)})),t},R.Pipeline.prototype.add=function(){Array.prototype.slice.call(arguments).forEach((function(e){R.Pipeline.warnIfFunctionNotRegistered(e),this._stack.push(e)}),this)},R.Pipeline.prototype.after=function(e,t){R.Pipeline.warnIfFunctionNotRegistered(t);var n=this._stack.indexOf(e);if(-1==n)throw new Error("Cannot find existingFn");n+=1,this._stack.splice(n,0,t)},R.Pipeline.prototype.before=function(e,t){R.Pipeline.warnIfFunctionNotRegistered(t);var n=this._stack.indexOf(e);if(-1==n)throw new Error("Cannot find existingFn");this._stack.splice(n,0,t)},R.Pipeline.prototype.remove=function(e){var t=this._stack.indexOf(e);-1!=t&&this._stack.splice(t,1)},R.Pipeline.prototype.run=function(e){for(var t=this._stack.length,n=0;n<t;n++){for(var r=this._stack[n],o=[],a=0;a<e.length;a++){var i=r(e[a],a,e);if(null!=i&&""!==i)if(Array.isArray(i))for(var s=0;s<i.length;s++)o.push(i[s]);else o.push(i)}e=o}return e},R.Pipeline.prototype.runString=function(e,t){var n=new R.Token(e,t);return this.run([n]).map((function(e){return e.toString()}))},R.Pipeline.prototype.reset=function(){this._stack=[]},R.Pipeline.prototype.toJSON=function(){return this._stack.map((function(e){return R.Pipeline.warnIfFunctionNotRegistered(e),e.label}))},R.Vector=function(e){this._magnitude=0,this.elements=e||[]},R.Vector.prototype.positionForIndex=function(e){if(0==this.elements.length)return 0;for(var t=0,n=this.elements.length/2,r=n-t,o=Math.floor(r/2),a=this.elements[2*o];r>1&&(a<e&&(t=o),a>e&&(n=o),a!=e);)r=n-t,o=t+Math.floor(r/2),a=this.elements[2*o];return a==e||a>e?2*o:a<e?2*(o+1):void 0},R.Vector.prototype.insert=function(e,t){this.upsert(e,t,(function(){throw"duplicate index"}))},R.Vector.prototype.upsert=function(e,t,n){this._magnitude=0;var r=this.positionForIndex(e);this.elements[r]==e?this.elements[r+1]=n(this.elements[r+1],t):this.elements.splice(r,0,e,t)},R.Vector.prototype.magnitude=function(){if(this._magnitude)return this._magnitude;for(var e=0,t=this.elements.length,n=1;n<t;n+=2){var r=this.elements[n];e+=r*r}return this._magnitude=Math.sqrt(e)},R.Vector.prototype.dot=function(e){for(var t=0,n=this.elements,r=e.elements,o=n.length,a=r.length,i=0,s=0,l=0,c=0;l<o&&c<a;)(i=n[l])<(s=r[c])?l+=2:i>s?c+=2:i==s&&(t+=n[l+1]*r[c+1],l+=2,c+=2);return t},R.Vector.prototype.similarity=function(e){return this.dot(e)/this.magnitude()||0},R.Vector.prototype.toArray=function(){for(var e=new Array(this.elements.length/2),t=1,n=0;t<this.elements.length;t+=2,n++)e[n]=this.elements[t];return e},R.Vector.prototype.toJSON=function(){return this.elements},R.stemmer=(i={ational:"ate",tional:"tion",enci:"ence",anci:"ance",izer:"ize",bli:"ble",alli:"al",entli:"ent",eli:"e",ousli:"ous",ization:"ize",ation:"ate",ator:"ate",alism:"al",iveness:"ive",fulness:"ful",ousness:"ous",aliti:"al",iviti:"ive",biliti:"ble",logi:"log"},s={icate:"ic",ative:"",alize:"al",iciti:"ic",ical:"ic",ful:"",ness:""},d="^("+(c="[^aeiou][^aeiouy]*")+")?"+(u=(l="[aeiouy]")+"[aeiou]*")+c+"("+u+")?$",p="^("+c+")?"+u+c+u+c,f="^("+c+")?"+l,g=new RegExp("^("+c+")?"+u+c),m=new RegExp(p),h=new RegExp(d),b=new RegExp(f),y=/^(.+?)(ss|i)es$/,v=/^(.+?)([^s])s$/,w=/^(.+?)eed$/,k=/^(.+?)(ed|ing)$/,S=/.$/,_=/(at|bl|iz)$/,x=new RegExp("([^aeiouylsz])\\1$"),E=new RegExp("^"+c+l+"[^aeiouwxy]$"),O=/^(.+?[^aeiou])y$/,P=/^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/,j=/^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/,C=/^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/,T=/^(.+?)(s|t)(ion)$/,I=/^(.+?)e$/,A=/ll$/,N=new RegExp("^"+c+l+"[^aeiouwxy]$"),L=function(e){var t,n,r,o,a,l,c;if(e.length<3)return e;if("y"==(r=e.substr(0,1))&&(e=r.toUpperCase()+e.substr(1)),a=v,(o=y).test(e)?e=e.replace(o,"$1$2"):a.test(e)&&(e=e.replace(a,"$1$2")),a=k,(o=w).test(e)){var u=o.exec(e);(o=g).test(u[1])&&(o=S,e=e.replace(o,""))}else a.test(e)&&(t=(u=a.exec(e))[1],(a=b).test(t)&&(l=x,c=E,(a=_).test(e=t)?e+="e":l.test(e)?(o=S,e=e.replace(o,"")):c.test(e)&&(e+="e")));return(o=O).test(e)&&(e=(t=(u=o.exec(e))[1])+"i"),(o=P).test(e)&&(t=(u=o.exec(e))[1],n=u[2],(o=g).test(t)&&(e=t+i[n])),(o=j).test(e)&&(t=(u=o.exec(e))[1],n=u[2],(o=g).test(t)&&(e=t+s[n])),a=T,(o=C).test(e)?(t=(u=o.exec(e))[1],(o=m).test(t)&&(e=t)):a.test(e)&&(t=(u=a.exec(e))[1]+u[2],(a=m).test(t)&&(e=t)),(o=I).test(e)&&(t=(u=o.exec(e))[1],a=h,l=N,((o=m).test(t)||a.test(t)&&!l.test(t))&&(e=t)),a=m,(o=A).test(e)&&a.test(e)&&(o=S,e=e.replace(o,"")),"y"==r&&(e=r.toLowerCase()+e.substr(1)),e},function(e){return e.update(L)}),R.Pipeline.registerFunction(R.stemmer,"stemmer"),R.generateStopWordFilter=function(e){var t=e.reduce((function(e,t){return e[t]=t,e}),{});return function(e){if(e&&t[e.toString()]!==e.toString())return e}},R.stopWordFilter=R.generateStopWordFilter(["a","able","about","across","after","all","almost","also","am","among","an","and","any","are","as","at","be","because","been","but","by","can","cannot","could","dear","did","do","does","either","else","ever","every","for","from","get","got","had","has","have","he","her","hers","him","his","how","however","i","if","in","into","is","it","its","just","least","let","like","likely","may","me","might","most","must","my","neither","no","nor","not","of","off","often","on","only","or","other","our","own","rather","said","say","says","she","should","since","so","some","than","that","the","their","them","then","there","these","they","this","tis","to","too","twas","us","wants","was","we","were","what","when","where","which","while","who","whom","why","will","with","would","yet","you","your"]),R.Pipeline.registerFunction(R.stopWordFilter,"stopWordFilter"),R.trimmer=function(e){return e.update((function(e){return e.replace(/^\W+/,"").replace(/\W+$/,"")}))},R.Pipeline.registerFunction(R.trimmer,"trimmer"),R.TokenSet=function(){this.final=!1,this.edges={},this.id=R.TokenSet._nextId,R.TokenSet._nextId+=1},R.TokenSet._nextId=1,R.TokenSet.fromArray=function(e){for(var t=new R.TokenSet.Builder,n=0,r=e.length;n<r;n++)t.insert(e[n]);return t.finish(),t.root},R.TokenSet.fromClause=function(e){return"editDistance"in e?R.TokenSet.fromFuzzyString(e.term,e.editDistance):R.TokenSet.fromString(e.term)},R.TokenSet.fromFuzzyString=function(e,t){for(var n=new R.TokenSet,r=[{node:n,editsRemaining:t,str:e}];r.length;){var o=r.pop();if(o.str.length>0){var a,i=o.str.charAt(0);i in o.node.edges?a=o.node.edges[i]:(a=new R.TokenSet,o.node.edges[i]=a),1==o.str.length&&(a.final=!0),r.push({node:a,editsRemaining:o.editsRemaining,str:o.str.slice(1)})}if(0!=o.editsRemaining){if("*"in o.node.edges)var s=o.node.edges["*"];else{s=new R.TokenSet;o.node.edges["*"]=s}if(0==o.str.length&&(s.final=!0),r.push({node:s,editsRemaining:o.editsRemaining-1,str:o.str}),o.str.length>1&&r.push({node:o.node,editsRemaining:o.editsRemaining-1,str:o.str.slice(1)}),1==o.str.length&&(o.node.final=!0),o.str.length>=1){if("*"in o.node.edges)var l=o.node.edges["*"];else{l=new R.TokenSet;o.node.edges["*"]=l}1==o.str.length&&(l.final=!0),r.push({node:l,editsRemaining:o.editsRemaining-1,str:o.str.slice(1)})}if(o.str.length>1){var c,u=o.str.charAt(0),d=o.str.charAt(1);d in o.node.edges?c=o.node.edges[d]:(c=new R.TokenSet,o.node.edges[d]=c),1==o.str.length&&(c.final=!0),r.push({node:c,editsRemaining:o.editsRemaining-1,str:u+o.str.slice(2)})}}}return n},R.TokenSet.fromString=function(e){for(var t=new R.TokenSet,n=t,r=0,o=e.length;r<o;r++){var a=e[r],i=r==o-1;if("*"==a)t.edges[a]=t,t.final=i;else{var s=new R.TokenSet;s.final=i,t.edges[a]=s,t=s}}return n},R.TokenSet.prototype.toArray=function(){for(var e=[],t=[{prefix:"",node:this}];t.length;){var n=t.pop(),r=Object.keys(n.node.edges),o=r.length;n.node.final&&(n.prefix.charAt(0),e.push(n.prefix));for(var a=0;a<o;a++){var i=r[a];t.push({prefix:n.prefix.concat(i),node:n.node.edges[i]})}}return e},R.TokenSet.prototype.toString=function(){if(this._str)return this._str;for(var e=this.final?"1":"0",t=Object.keys(this.edges).sort(),n=t.length,r=0;r<n;r++){var o=t[r];e=e+o+this.edges[o].id}return e},R.TokenSet.prototype.intersect=function(e){for(var t=new R.TokenSet,n=void 0,r=[{qNode:e,output:t,node:this}];r.length;){n=r.pop();for(var o=Object.keys(n.qNode.edges),a=o.length,i=Object.keys(n.node.edges),s=i.length,l=0;l<a;l++)for(var c=o[l],u=0;u<s;u++){var d=i[u];if(d==c||"*"==c){var p=n.node.edges[d],f=n.qNode.edges[c],g=p.final&&f.final,m=void 0;d in n.output.edges?(m=n.output.edges[d]).final=m.final||g:((m=new R.TokenSet).final=g,n.output.edges[d]=m),r.push({qNode:f,output:m,node:p})}}}return t},R.TokenSet.Builder=function(){this.previousWord="",this.root=new R.TokenSet,this.uncheckedNodes=[],this.minimizedNodes={}},R.TokenSet.Builder.prototype.insert=function(e){var t,n=0;if(e<this.previousWord)throw new Error("Out of order word insertion");for(var r=0;r<e.length&&r<this.previousWord.length&&e[r]==this.previousWord[r];r++)n++;this.minimize(n),t=0==this.uncheckedNodes.length?this.root:this.uncheckedNodes[this.uncheckedNodes.length-1].child;for(r=n;r<e.length;r++){var o=new R.TokenSet,a=e[r];t.edges[a]=o,this.uncheckedNodes.push({parent:t,char:a,child:o}),t=o}t.final=!0,this.previousWord=e},R.TokenSet.Builder.prototype.finish=function(){this.minimize(0)},R.TokenSet.Builder.prototype.minimize=function(e){for(var t=this.uncheckedNodes.length-1;t>=e;t--){var n=this.uncheckedNodes[t],r=n.child.toString();r in this.minimizedNodes?n.parent.edges[n.char]=this.minimizedNodes[r]:(n.child._str=r,this.minimizedNodes[r]=n.child),this.uncheckedNodes.pop()}},R.Index=function(e){this.invertedIndex=e.invertedIndex,this.fieldVectors=e.fieldVectors,this.tokenSet=e.tokenSet,this.fields=e.fields,this.pipeline=e.pipeline},R.Index.prototype.search=function(e){return this.query((function(t){new R.QueryParser(e,t).parse()}))},R.Index.prototype.query=function(e){for(var t=new R.Query(this.fields),n=Object.create(null),r=Object.create(null),o=Object.create(null),a=Object.create(null),i=Object.create(null),s=0;s<this.fields.length;s++)r[this.fields[s]]=new R.Vector;e.call(t,t);for(s=0;s<t.clauses.length;s++){var l=t.clauses[s],c=null,u=R.Set.empty;c=l.usePipeline?this.pipeline.runString(l.term,{fields:l.fields}):[l.term];for(var d=0;d<c.length;d++){var p=c[d];l.term=p;var f=R.TokenSet.fromClause(l),g=this.tokenSet.intersect(f).toArray();if(0===g.length&&l.presence===R.Query.presence.REQUIRED){for(var m=0;m<l.fields.length;m++){a[I=l.fields[m]]=R.Set.empty}break}for(var h=0;h<g.length;h++){var b=g[h],y=this.invertedIndex[b],v=y._index;for(m=0;m<l.fields.length;m++){var w=y[I=l.fields[m]],k=Object.keys(w),S=b+"/"+I,_=new R.Set(k);if(l.presence==R.Query.presence.REQUIRED&&(u=u.union(_),void 0===a[I]&&(a[I]=R.Set.complete)),l.presence!=R.Query.presence.PROHIBITED){if(r[I].upsert(v,l.boost,(function(e,t){return e+t})),!o[S]){for(var x=0;x<k.length;x++){var E,O=k[x],P=new R.FieldRef(O,I),j=w[O];void 0===(E=n[P])?n[P]=new R.MatchData(b,I,j):E.add(b,I,j)}o[S]=!0}}else void 0===i[I]&&(i[I]=R.Set.empty),i[I]=i[I].union(_)}}}if(l.presence===R.Query.presence.REQUIRED)for(m=0;m<l.fields.length;m++){a[I=l.fields[m]]=a[I].intersect(u)}}var C=R.Set.complete,T=R.Set.empty;for(s=0;s<this.fields.length;s++){var I;a[I=this.fields[s]]&&(C=C.intersect(a[I])),i[I]&&(T=T.union(i[I]))}var A=Object.keys(n),N=[],L=Object.create(null);if(t.isNegated()){A=Object.keys(this.fieldVectors);for(s=0;s<A.length;s++){P=A[s];var D=R.FieldRef.fromString(P);n[P]=new R.MatchData}}for(s=0;s<A.length;s++){var F=(D=R.FieldRef.fromString(A[s])).docRef;if(C.contains(F)&&!T.contains(F)){var M,B=this.fieldVectors[D],z=r[D.fieldName].similarity(B);if(void 0!==(M=L[F]))M.score+=z,M.matchData.combine(n[D]);else{var U={ref:F,score:z,matchData:n[D]};L[F]=U,N.push(U)}}}return N.sort((function(e,t){return t.score-e.score}))},R.Index.prototype.toJSON=function(){var e=Object.keys(this.invertedIndex).sort().map((function(e){return[e,this.invertedIndex[e]]}),this),t=Object.keys(this.fieldVectors).map((function(e){return[e,this.fieldVectors[e].toJSON()]}),this);return{version:R.version,fields:this.fields,fieldVectors:t,invertedIndex:e,pipeline:this.pipeline.toJSON()}},R.Index.load=function(e){var t={},n={},r=e.fieldVectors,o=Object.create(null),a=e.invertedIndex,i=new R.TokenSet.Builder,s=R.Pipeline.load(e.pipeline);e.version!=R.version&&R.utils.warn("Version mismatch when loading serialised index. Current version of lunr '"+R.version+"' does not match serialized index '"+e.version+"'");for(var l=0;l<r.length;l++){var c=(d=r[l])[0],u=d[1];n[c]=new R.Vector(u)}for(l=0;l<a.length;l++){var d,p=(d=a[l])[0],f=d[1];i.insert(p),o[p]=f}return i.finish(),t.fields=e.fields,t.fieldVectors=n,t.invertedIndex=o,t.tokenSet=i.root,t.pipeline=s,new R.Index(t)},R.Builder=function(){this._ref="id",this._fields=Object.create(null),this._documents=Object.create(null),this.invertedIndex=Object.create(null),this.fieldTermFrequencies={},this.fieldLengths={},this.tokenizer=R.tokenizer,this.pipeline=new R.Pipeline,this.searchPipeline=new R.Pipeline,this.documentCount=0,this._b=.75,this._k1=1.2,this.termIndex=0,this.metadataWhitelist=[]},R.Builder.prototype.ref=function(e){this._ref=e},R.Builder.prototype.field=function(e,t){if(/\//.test(e))throw new RangeError("Field '"+e+"' contains illegal character '/'");this._fields[e]=t||{}},R.Builder.prototype.b=function(e){this._b=e<0?0:e>1?1:e},R.Builder.prototype.k1=function(e){this._k1=e},R.Builder.prototype.add=function(e,t){var n=e[this._ref],r=Object.keys(this._fields);this._documents[n]=t||{},this.documentCount+=1;for(var o=0;o<r.length;o++){var a=r[o],i=this._fields[a].extractor,s=this._fields[a].isLiteral??!1,l=i?i(e):e[a],c=s?[l]:this.tokenizer(l,{fields:[a]}),u=s?c:this.pipeline.run(c),d=new R.FieldRef(n,a),p=Object.create(null);this.fieldTermFrequencies[d]=p,this.fieldLengths[d]=0,this.fieldLengths[d]+=u.length;for(var f=0;f<u.length;f++){var g=u[f];if(null==p[g]&&(p[g]=0),p[g]+=1,null==this.invertedIndex[g]){var m=Object.create(null);m._index=this.termIndex,this.termIndex+=1;for(var h=0;h<r.length;h++)m[r[h]]=Object.create(null);this.invertedIndex[g]=m}null==this.invertedIndex[g][a][n]&&(this.invertedIndex[g][a][n]=Object.create(null));for(var b=0;b<this.metadataWhitelist.length;b++){var y=this.metadataWhitelist[b],v=g.metadata[y];null==this.invertedIndex[g][a][n][y]&&(this.invertedIndex[g][a][n][y]=[]),this.invertedIndex[g][a][n][y].push(v)}}}},R.Builder.prototype.calculateAverageFieldLengths=function(){for(var e=Object.keys(this.fieldLengths),t=e.length,n={},r={},o=0;o<t;o++){var a=R.FieldRef.fromString(e[o]),i=a.fieldName;r[i]||(r[i]=0),r[i]+=1,n[i]||(n[i]=0),n[i]+=this.fieldLengths[a]}var s=Object.keys(this._fields);for(o=0;o<s.length;o++){var l=s[o];n[l]=n[l]/r[l]}this.averageFieldLength=n},R.Builder.prototype.createFieldVectors=function(){for(var e={},t=Object.keys(this.fieldTermFrequencies),n=t.length,r=Object.create(null),o=0;o<n;o++){for(var a=R.FieldRef.fromString(t[o]),i=a.fieldName,s=this.fieldLengths[a],l=new R.Vector,c=this.fieldTermFrequencies[a],u=Object.keys(c),d=u.length,p=this._fields[i].boost||1,f=this._documents[a.docRef].boost||1,g=0;g<d;g++){var m,h,b,y=u[g],v=c[y],w=this.invertedIndex[y]._index;void 0===r[y]?(m=R.idf(this.invertedIndex[y],this.documentCount),r[y]=m):m=r[y],h=m*((this._k1+1)*v)/(this._k1*(1-this._b+this._b*(s/this.averageFieldLength[i]))+v),h*=p,h*=f,b=Math.round(1e3*h)/1e3,l.insert(w,b)}e[a]=l}this.fieldVectors=e},R.Builder.prototype.createTokenSet=function(){this.tokenSet=R.TokenSet.fromArray(Object.keys(this.invertedIndex).sort())},R.Builder.prototype.build=function(){return this.calculateAverageFieldLengths(),this.createFieldVectors(),this.createTokenSet(),new R.Index({invertedIndex:this.invertedIndex,fieldVectors:this.fieldVectors,tokenSet:this.tokenSet,fields:Object.keys(this._fields),pipeline:this.searchPipeline})},R.Builder.prototype.use=function(e){var t=Array.prototype.slice.call(arguments,1);t.unshift(this),e.apply(this,t)},R.MatchData=function(e,t,n){for(var r=Object.create(null),o=Object.keys(n||{}),a=0;a<o.length;a++){var i=o[a];r[i]=n[i].slice()}this.metadata=Object.create(null),void 0!==e&&(this.metadata[e]=Object.create(null),this.metadata[e][t]=r)},R.MatchData.prototype.combine=function(e){for(var t=Object.keys(e.metadata),n=0;n<t.length;n++){var r=t[n],o=Object.keys(e.metadata[r]);null==this.metadata[r]&&(this.metadata[r]=Object.create(null));for(var a=0;a<o.length;a++){var i=o[a],s=Object.keys(e.metadata[r][i]);null==this.metadata[r][i]&&(this.metadata[r][i]=Object.create(null));for(var l=0;l<s.length;l++){var c=s[l];null==this.metadata[r][i][c]?this.metadata[r][i][c]=e.metadata[r][i][c]:this.metadata[r][i][c]=this.metadata[r][i][c].concat(e.metadata[r][i][c])}}}},R.MatchData.prototype.add=function(e,t,n){if(!(e in this.metadata))return this.metadata[e]=Object.create(null),void(this.metadata[e][t]=n);if(t in this.metadata[e])for(var r=Object.keys(n),o=0;o<r.length;o++){var a=r[o];a in this.metadata[e][t]?this.metadata[e][t][a]=this.metadata[e][t][a].concat(n[a]):this.metadata[e][t][a]=n[a]}else this.metadata[e][t]=n},R.Query=function(e){this.clauses=[],this.allFields=e},R.Query.wildcard=new String("*"),R.Query.wildcard.NONE=0,R.Query.wildcard.LEADING=1,R.Query.wildcard.TRAILING=2,R.Query.presence={OPTIONAL:1,REQUIRED:2,PROHIBITED:3},R.Query.prototype.clause=function(e){return"fields"in e||(e.fields=this.allFields),"boost"in e||(e.boost=1),"usePipeline"in e||(e.usePipeline=!0),"wildcard"in e||(e.wildcard=R.Query.wildcard.NONE),e.wildcard&R.Query.wildcard.LEADING&&e.term.charAt(0)!=R.Query.wildcard&&(e.term="*"+e.term),e.wildcard&R.Query.wildcard.TRAILING&&e.term.slice(-1)!=R.Query.wildcard&&(e.term=e.term+"*"),"presence"in e||(e.presence=R.Query.presence.OPTIONAL),this.clauses.push(e),this},R.Query.prototype.isNegated=function(){for(var e=0;e<this.clauses.length;e++)if(this.clauses[e].presence!=R.Query.presence.PROHIBITED)return!1;return!0},R.Query.prototype.term=function(e,t){if(Array.isArray(e))return e.forEach((function(e){this.term(e,R.utils.clone(t))}),this),this;var n=t||{};return n.term=e.toString(),this.clause(n),this},R.QueryParseError=function(e,t,n){this.name="QueryParseError",this.message=e,this.start=t,this.end=n},R.QueryParseError.prototype=new Error,R.QueryLexer=function(e){this.lexemes=[],this.str=e,this.length=e.length,this.pos=0,this.start=0,this.escapeCharPositions=[]},R.QueryLexer.prototype.run=function(){for(var e=R.QueryLexer.lexText;e;)e=e(this)},R.QueryLexer.prototype.sliceString=function(){for(var e=[],t=this.start,n=this.pos,r=0;r<this.escapeCharPositions.length;r++)n=this.escapeCharPositions[r],e.push(this.str.slice(t,n)),t=n+1;return e.push(this.str.slice(t,this.pos)),this.escapeCharPositions.length=0,e.join("")},R.QueryLexer.prototype.emit=function(e){this.lexemes.push({type:e,str:this.sliceString(),start:this.start,end:this.pos}),this.start=this.pos},R.QueryLexer.prototype.escapeCharacter=function(){this.escapeCharPositions.push(this.pos-1),this.pos+=1},R.QueryLexer.prototype.next=function(){if(this.pos>=this.length)return R.QueryLexer.EOS;var e=this.str.charAt(this.pos);return this.pos+=1,e},R.QueryLexer.prototype.width=function(){return this.pos-this.start},R.QueryLexer.prototype.ignore=function(){this.start==this.pos&&(this.pos+=1),this.start=this.pos},R.QueryLexer.prototype.backup=function(){this.pos-=1},R.QueryLexer.prototype.acceptDigitRun=function(){var e,t;do{t=(e=this.next()).charCodeAt(0)}while(t>47&&t<58);e!=R.QueryLexer.EOS&&this.backup()},R.QueryLexer.prototype.more=function(){return this.pos<this.length},R.QueryLexer.EOS="EOS",R.QueryLexer.FIELD="FIELD",R.QueryLexer.TERM="TERM",R.QueryLexer.EDIT_DISTANCE="EDIT_DISTANCE",R.QueryLexer.BOOST="BOOST",R.QueryLexer.PRESENCE="PRESENCE",R.QueryLexer.lexField=function(e){return e.backup(),e.emit(R.QueryLexer.FIELD),e.ignore(),R.QueryLexer.lexText},R.QueryLexer.lexTerm=function(e){if(e.width()>1&&(e.backup(),e.emit(R.QueryLexer.TERM)),e.ignore(),e.more())return R.QueryLexer.lexText},R.QueryLexer.lexEditDistance=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(R.QueryLexer.EDIT_DISTANCE),R.QueryLexer.lexText},R.QueryLexer.lexBoost=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(R.QueryLexer.BOOST),R.QueryLexer.lexText},R.QueryLexer.lexEOS=function(e){e.width()>0&&e.emit(R.QueryLexer.TERM)},R.QueryLexer.termSeparator=R.tokenizer.separator,R.QueryLexer.lexText=function(e){for(;;){var t=e.next();if(t==R.QueryLexer.EOS)return R.QueryLexer.lexEOS;if(92!=t.charCodeAt(0)){if(":"==t)return R.QueryLexer.lexField;if("~"==t)return e.backup(),e.width()>0&&e.emit(R.QueryLexer.TERM),R.QueryLexer.lexEditDistance;if("^"==t)return e.backup(),e.width()>0&&e.emit(R.QueryLexer.TERM),R.QueryLexer.lexBoost;if("+"==t&&1===e.width())return e.emit(R.QueryLexer.PRESENCE),R.QueryLexer.lexText;if("-"==t&&1===e.width())return e.emit(R.QueryLexer.PRESENCE),R.QueryLexer.lexText;if(t.match(R.QueryLexer.termSeparator))return R.QueryLexer.lexTerm}else e.escapeCharacter()}},R.QueryParser=function(e,t){this.lexer=new R.QueryLexer(e),this.query=t,this.currentClause={},this.lexemeIdx=0},R.QueryParser.prototype.parse=function(){this.lexer.run(),this.lexemes=this.lexer.lexemes;for(var e=R.QueryParser.parseClause;e;)e=e(this);return this.query},R.QueryParser.prototype.peekLexeme=function(){return this.lexemes[this.lexemeIdx]},R.QueryParser.prototype.consumeLexeme=function(){var e=this.peekLexeme();return this.lexemeIdx+=1,e},R.QueryParser.prototype.nextClause=function(){var e=this.currentClause;this.query.clause(e),this.currentClause={}},R.QueryParser.parseClause=function(e){var t=e.peekLexeme();if(null!=t)switch(t.type){case R.QueryLexer.PRESENCE:return R.QueryParser.parsePresence;case R.QueryLexer.FIELD:return R.QueryParser.parseField;case R.QueryLexer.TERM:return R.QueryParser.parseTerm;default:var n="expected either a field or a term, found "+t.type;throw t.str.length>=1&&(n+=" with value '"+t.str+"'"),new R.QueryParseError(n,t.start,t.end)}},R.QueryParser.parsePresence=function(e){var t=e.consumeLexeme();if(null!=t){switch(t.str){case"-":e.currentClause.presence=R.Query.presence.PROHIBITED;break;case"+":e.currentClause.presence=R.Query.presence.REQUIRED;break;default:var n="unrecognised presence operator'"+t.str+"'";throw new R.QueryParseError(n,t.start,t.end)}var r=e.peekLexeme();if(null==r){n="expecting term or field, found nothing";throw new R.QueryParseError(n,t.start,t.end)}switch(r.type){case R.QueryLexer.FIELD:return R.QueryParser.parseField;case R.QueryLexer.TERM:return R.QueryParser.parseTerm;default:n="expecting term or field, found '"+r.type+"'";throw new R.QueryParseError(n,r.start,r.end)}}},R.QueryParser.parseField=function(e){var t=e.consumeLexeme();if(null!=t){if(-1==e.query.allFields.indexOf(t.str)){var n=e.query.allFields.map((function(e){return"'"+e+"'"})).join(", "),r="unrecognised field '"+t.str+"', possible fields: "+n;throw new R.QueryParseError(r,t.start,t.end)}e.currentClause.fields=[t.str];var o=e.peekLexeme();if(null==o){r="expecting term, found nothing";throw new R.QueryParseError(r,t.start,t.end)}if(o.type===R.QueryLexer.TERM)return R.QueryParser.parseTerm;r="expecting term, found '"+o.type+"'";throw new R.QueryParseError(r,o.start,o.end)}},R.QueryParser.parseTerm=function(e){var t=e.consumeLexeme();if(null!=t){e.currentClause.term=t.str.toLowerCase(),-1!=t.str.indexOf("*")&&(e.currentClause.usePipeline=!1);var n=e.peekLexeme();if(null!=n)switch(n.type){case R.QueryLexer.TERM:return e.nextClause(),R.QueryParser.parseTerm;case R.QueryLexer.FIELD:return e.nextClause(),R.QueryParser.parseField;case R.QueryLexer.EDIT_DISTANCE:return R.QueryParser.parseEditDistance;case R.QueryLexer.BOOST:return R.QueryParser.parseBoost;case R.QueryLexer.PRESENCE:return e.nextClause(),R.QueryParser.parsePresence;default:var r="Unexpected lexeme type '"+n.type+"'";throw new R.QueryParseError(r,n.start,n.end)}else e.nextClause()}},R.QueryParser.parseEditDistance=function(e){var t=e.consumeLexeme();if(null!=t){var n=parseInt(t.str,10);if(isNaN(n)){var r="edit distance must be numeric";throw new R.QueryParseError(r,t.start,t.end)}e.currentClause.editDistance=n;var o=e.peekLexeme();if(null!=o)switch(o.type){case R.QueryLexer.TERM:return e.nextClause(),R.QueryParser.parseTerm;case R.QueryLexer.FIELD:return e.nextClause(),R.QueryParser.parseField;case R.QueryLexer.EDIT_DISTANCE:return R.QueryParser.parseEditDistance;case R.QueryLexer.BOOST:return R.QueryParser.parseBoost;case R.QueryLexer.PRESENCE:return e.nextClause(),R.QueryParser.parsePresence;default:r="Unexpected lexeme type '"+o.type+"'";throw new R.QueryParseError(r,o.start,o.end)}else e.nextClause()}},R.QueryParser.parseBoost=function(e){var t=e.consumeLexeme();if(null!=t){var n=parseInt(t.str,10);if(isNaN(n)){var r="boost must be numeric";throw new R.QueryParseError(r,t.start,t.end)}e.currentClause.boost=n;var o=e.peekLexeme();if(null!=o)switch(o.type){case R.QueryLexer.TERM:return e.nextClause(),R.QueryParser.parseTerm;case R.QueryLexer.FIELD:return e.nextClause(),R.QueryParser.parseField;case R.QueryLexer.EDIT_DISTANCE:return R.QueryParser.parseEditDistance;case R.QueryLexer.BOOST:return R.QueryParser.parseBoost;case R.QueryLexer.PRESENCE:return e.nextClause(),R.QueryParser.parsePresence;default:r="Unexpected lexeme type '"+o.type+"'";throw new R.QueryParseError(r,o.start,o.end)}else e.nextClause()}},void 0===(o="function"==typeof(r=function(){return R})?r.call(t,n,t,e):r)||(e.exports=o)}()},3681:(e,t,n)=>{"use strict";n.d(t,{_:()=>a,t:()=>i});var r=n(67294),o=n(85893);const a=r.createContext(!1);function i(e){let{children:t}=e;const[n,i]=(0,r.useState)(!1);return(0,r.useEffect)((()=>{i(!0)}),[]),(0,o.jsx)(a.Provider,{value:n,children:t})}},43205:(e,t,n)=>{"use strict";var r=n(67294),o=n(20745),a=n(70405),i=n(73727),s=n(36809),l=n(29629);const c=[n(73369),n(87213),n(98356),n(47257)];var u=n(78179),d=n(16550),p=n(18790),f=n(85893);function g(e){let{children:t}=e;return(0,f.jsx)(f.Fragment,{children:t})}var m=n(79722),h=n(75276),b=n(23466),y=n(39581),v=n(96984),w=n(76862),k=n(95099),S=n(90356),_=n(48820),x=n(62362);function E(){const{i18n:{currentLocale:e,defaultLocale:t,localeConfigs:n}}=(0,h.Z)(),r=(0,w.l)(),o=n[e].htmlLang,a=e=>e.replace("-","_");return(0,f.jsxs)(m.Z,{children:[Object.entries(n).map((e=>{let[t,{htmlLang:n}]=e;return(0,f.jsx)("link",{rel:"alternate",href:r.createUrl({locale:t,fullyQualified:!0}),hrefLang:n},t)})),(0,f.jsx)("link",{rel:"alternate",href:r.createUrl({locale:t,fullyQualified:!0}),hrefLang:"x-default"}),(0,f.jsx)("meta",{property:"og:locale",content:a(o)}),Object.values(n).filter((e=>o!==e.htmlLang)).map((e=>(0,f.jsx)("meta",{property:"og:locale:alternate",content:a(e.htmlLang)},`meta-og-${e.htmlLang}`)))]})}function O(e){let{permalink:t}=e;const{siteConfig:{url:n}}=(0,h.Z)(),r=function(){const{siteConfig:{url:e,baseUrl:t,trailingSlash:n}}=(0,h.Z)(),{pathname:r}=(0,d.TH)();return e+(0,_.Do)((0,b.ZP)(r),{trailingSlash:n,baseUrl:t})}(),o=t?`${n}${t}`:r;return(0,f.jsxs)(m.Z,{children:[(0,f.jsx)("meta",{property:"og:url",content:o}),(0,f.jsx)("link",{rel:"canonical",href:o})]})}function P(){const{i18n:{currentLocale:e}}=(0,h.Z)(),{metadata:t,image:n}=(0,y.L)();return(0,f.jsxs)(f.Fragment,{children:[(0,f.jsxs)(m.Z,{children:[(0,f.jsx)("meta",{name:"twitter:card",content:"summary_large_image"}),(0,f.jsx)("body",{className:k.h})]}),n&&(0,f.jsx)(v.d,{image:n}),(0,f.jsx)(O,{}),(0,f.jsx)(E,{}),(0,f.jsx)(x.Z,{tag:S.H,locale:e}),(0,f.jsx)(m.Z,{children:t.map(((e,t)=>(0,f.jsx)("meta",{...e},t)))})]})}const j=new Map;var C=n(3681),T=n(1124),I=n(1290);function A(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r<t;r++)n[r-1]=arguments[r];const o=c.map((t=>{const r=t.default?.[e]??t[e];return r?.(...n)}));return()=>o.forEach((e=>e?.()))}const N=function(e){let{children:t,location:n,previousLocation:r}=e;return(0,I.Z)((()=>{r!==n&&(!function(e){let{location:t,previousLocation:n}=e;if(!n)return;const r=t.pathname===n.pathname,o=t.hash===n.hash,a=t.search===n.search;if(r&&o&&!a)return;const{hash:i}=t;if(i){const e=decodeURIComponent(i.substring(1)),t=document.getElementById(e);t?.scrollIntoView()}else window.scrollTo(0,0)}({location:n,previousLocation:r}),A("onRouteDidUpdate",{previousLocation:r,location:n}))}),[r,n]),t};function L(e){const t=Array.from(new Set([e,decodeURI(e)])).map((e=>(0,p.f)(u.Z,e))).flat();return Promise.all(t.map((e=>e.route.component.preload?.())))}class R extends r.Component{previousLocation;routeUpdateCleanupCb;constructor(e){super(e),this.previousLocation=null,this.routeUpdateCleanupCb=l.Z.canUseDOM?A("onRouteUpdate",{previousLocation:null,location:this.props.location}):()=>{},this.state={nextRouteHasLoaded:!0}}shouldComponentUpdate(e,t){if(e.location===this.props.location)return t.nextRouteHasLoaded;const n=e.location;return this.previousLocation=this.props.location,this.setState({nextRouteHasLoaded:!1}),this.routeUpdateCleanupCb=A("onRouteUpdate",{previousLocation:this.previousLocation,location:n}),L(n.pathname).then((()=>{this.routeUpdateCleanupCb(),this.setState({nextRouteHasLoaded:!0})})).catch((e=>{console.warn(e),window.location.reload()})),!1}render(){const{children:e,location:t}=this.props;return(0,f.jsx)(N,{previousLocation:this.previousLocation,location:t,children:(0,f.jsx)(d.AW,{location:t,render:()=>e})})}}const D=R,F="__docusaurus-base-url-issue-banner-container",M="__docusaurus-base-url-issue-banner",B="__docusaurus-base-url-issue-banner-suggestion-container";function z(e){return`\ndocument.addEventListener('DOMContentLoaded', function maybeInsertBanner() {\n var shouldInsert = typeof window['docusaurus'] === 'undefined';\n shouldInsert && insertBanner();\n});\n\nfunction insertBanner() {\n var bannerContainer = document.createElement('div');\n bannerContainer.id = '${F}';\n var bannerHtml = ${JSON.stringify(function(e){return`\n<div id="${M}" style="border: thick solid red; background-color: rgb(255, 230, 179); margin: 20px; padding: 20px; font-size: 20px;">\n <p style="font-weight: bold; font-size: 30px;">Your Docusaurus site did not load properly.</p>\n <p>A very common reason is a wrong site <a href="https://docusaurus.io/docs/docusaurus.config.js/#baseUrl" style="font-weight: bold;">baseUrl configuration</a>.</p>\n <p>Current configured baseUrl = <span style="font-weight: bold; color: red;">${e}</span> ${"/"===e?" (default value)":""}</p>\n <p>We suggest trying baseUrl = <span id="${B}" style="font-weight: bold; color: green;"></span></p>\n</div>\n`}(e)).replace(/</g,"\\<")};\n bannerContainer.innerHTML = bannerHtml;\n document.body.prepend(bannerContainer);\n var suggestionContainer = document.getElementById('${B}');\n var actualHomePagePath = window.location.pathname;\n var suggestedBaseUrl = actualHomePagePath.substr(-1) === '/'\n ? actualHomePagePath\n : actualHomePagePath + '/';\n suggestionContainer.innerHTML = suggestedBaseUrl;\n}\n`}function U(){const{siteConfig:{baseUrl:e}}=(0,h.Z)();return(0,f.jsx)(f.Fragment,{children:!l.Z.canUseDOM&&(0,f.jsx)(m.Z,{children:(0,f.jsx)("script",{children:z(e)})})})}function $(){const{siteConfig:{baseUrl:e,baseUrlIssueBanner:t}}=(0,h.Z)(),{pathname:n}=(0,d.TH)();return t&&n===e?(0,f.jsx)(U,{}):null}function H(){const{siteConfig:{favicon:e,title:t,noIndex:n},i18n:{currentLocale:r,localeConfigs:o}}=(0,h.Z)(),a=(0,b.ZP)(e),{htmlLang:i,direction:s}=o[r];return(0,f.jsxs)(m.Z,{children:[(0,f.jsx)("html",{lang:i,dir:s}),(0,f.jsx)("title",{children:t}),(0,f.jsx)("meta",{property:"og:title",content:t}),(0,f.jsx)("meta",{name:"viewport",content:"width=device-width, initial-scale=1.0"}),n&&(0,f.jsx)("meta",{name:"robots",content:"noindex, nofollow"}),e&&(0,f.jsx)("link",{rel:"icon",href:a})]})}var q=n(40903),V=n(45025);function Q(){const e=(0,V.Z)();return(0,f.jsx)(m.Z,{children:(0,f.jsx)("html",{"data-has-hydrated":e})})}const Z=(0,p.H)(u.Z);function W(){const e=function(e){if(j.has(e.pathname))return{...e,pathname:j.get(e.pathname)};if((0,p.f)(u.Z,e.pathname).some((e=>{let{route:t}=e;return!0===t.exact})))return j.set(e.pathname,e.pathname),e;const t=e.pathname.trim().replace(/(?:\/index)?\.html$/,"")||"/";return j.set(e.pathname,t),{...e,pathname:t}}((0,d.TH)());return(0,f.jsx)(D,{location:e,children:Z})}function G(){return(0,f.jsx)(q.Z,{children:(0,f.jsx)(T.M,{children:(0,f.jsxs)(C.t,{children:[(0,f.jsxs)(g,{children:[(0,f.jsx)(H,{}),(0,f.jsx)(P,{}),(0,f.jsx)($,{}),(0,f.jsx)(W,{})]}),(0,f.jsx)(Q,{})]})})})}var Y=n(16887);const K=function(e){try{return document.createElement("link").relList.supports(e)}catch{return!1}}("prefetch")?function(e){return new Promise(((t,n)=>{if("undefined"==typeof document)return void n();const r=document.createElement("link");r.setAttribute("rel","prefetch"),r.setAttribute("href",e),r.onload=()=>t(),r.onerror=()=>n();const o=document.getElementsByTagName("head")[0]??document.getElementsByName("script")[0]?.parentNode;o?.appendChild(r)}))}:function(e){return new Promise(((t,n)=>{const r=new XMLHttpRequest;r.open("GET",e,!0),r.withCredentials=!0,r.onload=()=>{200===r.status?t():n()},r.send(null)}))};var X=n(44151);const J=new Set,ee=new Set,te=()=>navigator.connection?.effectiveType.includes("2g")||navigator.connection?.saveData,ne={prefetch:e=>{if(!(e=>!te()&&!ee.has(e)&&!J.has(e))(e))return!1;J.add(e);const t=(0,p.f)(u.Z,e).flatMap((e=>{return t=e.route.path,Object.entries(Y).filter((e=>{let[n]=e;return n.replace(/-[^-]+$/,"")===t})).flatMap((e=>{let[,t]=e;return Object.values((0,X.Z)(t))}));var t}));return Promise.all(t.map((e=>{const t=n.gca(e);return t&&!t.includes("undefined")?K(t).catch((()=>{})):Promise.resolve()})))},preload:e=>!!(e=>!te()&&!ee.has(e))(e)&&(ee.add(e),L(e))},re=Object.freeze(ne);function oe(e){let{children:t}=e;return"hash"===s.default.future.experimental_router?(0,f.jsx)(i.UT,{children:t}):(0,f.jsx)(i.VK,{children:t})}const ae=Boolean(!0);if(l.Z.canUseDOM){window.docusaurus=re;const e=document.getElementById("__docusaurus"),t=(0,f.jsx)(a.B6,{children:(0,f.jsx)(oe,{children:(0,f.jsx)(G,{})})}),n=(e,t)=>{console.error("Docusaurus React Root onRecoverableError:",e,t)},i=()=>{if(window.docusaurusRoot)window.docusaurusRoot.render(t);else if(ae)window.docusaurusRoot=o.hydrateRoot(e,t,{onRecoverableError:n});else{const r=o.createRoot(e,{onRecoverableError:n});r.render(t),window.docusaurusRoot=r}};L(window.location.pathname).then((()=>{(0,r.startTransition)(i)}))}},1124:(e,t,n)=>{"use strict";n.d(t,{_:()=>d,M:()=>p});var r=n(67294),o=n(36809);const a=JSON.parse('{"docusaurus-plugin-content-docs":{"default":{"path":"/docs","versions":[{"name":"current","label":"Next","isLast":true,"path":"/docs","mainDocId":"user/intro","docs":[{"id":"packaging/advanced-config/eopkg-configuration","path":"/docs/packaging/advanced-config/eopkg-configuration","sidebar":"packagingSidebar"},{"id":"packaging/advanced-config/local-repository","path":"/docs/packaging/advanced-config/local-repository","sidebar":"packagingSidebar"},{"id":"packaging/appstream-metainfo","path":"/docs/packaging/appstream-metainfo","sidebar":"packagingSidebar"},{"id":"packaging/creating-a-new-package","path":"/docs/packaging/creating-a-new-package","sidebar":"packagingSidebar"},{"id":"packaging/git-basics","path":"/docs/packaging/git-basics","sidebar":"packagingSidebar"},{"id":"packaging/index","path":"/docs/packaging/","sidebar":"packagingSidebar"},{"id":"packaging/monitoring.yml","path":"/docs/packaging/monitoring.yml","sidebar":"packagingSidebar"},{"id":"packaging/package.yml","path":"/docs/packaging/package.yml","sidebar":"packagingSidebar"},{"id":"packaging/packaging-changes","path":"/docs/packaging/packaging-changes","sidebar":"packagingSidebar"},{"id":"packaging/packaging-practices","path":"/docs/packaging/packaging-practices","sidebar":"packagingSidebar"},{"id":"packaging/prepare-for-packaging","path":"/docs/packaging/prepare-for-packaging","sidebar":"packagingSidebar"},{"id":"packaging/procedures/maintainership","path":"/docs/packaging/procedures/maintainership","sidebar":"packagingSidebar"},{"id":"packaging/procedures/package-inclusion","path":"/docs/packaging/procedures/package-inclusion","sidebar":"packagingSidebar"},{"id":"packaging/procedures/release-processes","path":"/docs/packaging/procedures/release-processes","sidebar":"packagingSidebar"},{"id":"packaging/procedures/request-a-package","path":"/docs/packaging/procedures/request-a-package","sidebar":"packagingSidebar"},{"id":"packaging/procedures/request-a-package-update","path":"/docs/packaging/procedures/request-a-package-update","sidebar":"packagingSidebar"},{"id":"packaging/stack-rebuilds","path":"/docs/packaging/stack-rebuilds","sidebar":"packagingSidebar"},{"id":"packaging/submitting-a-pull-request","path":"/docs/packaging/submitting-a-pull-request","sidebar":"packagingSidebar"},{"id":"packaging/testing-a-package","path":"/docs/packaging/testing-a-package","sidebar":"packagingSidebar"},{"id":"packaging/translation-instructions","path":"/docs/packaging/translation-instructions","sidebar":"packagingSidebar"},{"id":"packaging/troubleshooting-packaging","path":"/docs/packaging/troubleshooting-packaging","sidebar":"packagingSidebar"},{"id":"packaging/update-dev-environment","path":"/docs/packaging/update-dev-environment","sidebar":"packagingSidebar"},{"id":"packaging/updating-an-existing-package","path":"/docs/packaging/updating-an-existing-package","sidebar":"packagingSidebar"},{"id":"packaging/your-first-package-update","path":"/docs/packaging/your-first-package-update","sidebar":"packagingSidebar"},{"id":"user/contributing/community-guidelines","path":"/docs/user/contributing/community-guidelines","sidebar":"userSidebar"},{"id":"user/contributing/getting-involved","path":"/docs/user/contributing/getting-involved","sidebar":"userSidebar"},{"id":"user/contributing/style","path":"/docs/user/contributing/style","sidebar":"userSidebar"},{"id":"user/contributing/testing-an-iso","path":"/docs/user/contributing/testing-an-iso","sidebar":"userSidebar"},{"id":"user/editions/budgie/configuration","path":"/docs/user/editions/budgie/configuration","sidebar":"userSidebar"},{"id":"user/editions/budgie/index","path":"/docs/user/editions/budgie/","sidebar":"userSidebar"},{"id":"user/editions/budgie/tips-and-tricks","path":"/docs/user/editions/budgie/tips-and-tricks","sidebar":"userSidebar"},{"id":"user/editions/gnome/configuration","path":"/docs/user/editions/gnome/configuration","sidebar":"userSidebar"},{"id":"user/editions/gnome/index","path":"/docs/user/editions/gnome/","sidebar":"userSidebar"},{"id":"user/editions/gnome/tips-and-tricks","path":"/docs/user/editions/gnome/tips-and-tricks","sidebar":"userSidebar"},{"id":"user/editions/index","path":"/docs/user/editions/","sidebar":"userSidebar"},{"id":"user/editions/mate/configuration","path":"/docs/user/editions/mate/configuration","sidebar":"userSidebar"},{"id":"user/editions/mate/index","path":"/docs/user/editions/mate/","sidebar":"userSidebar"},{"id":"user/editions/mate/tips-and-tricks","path":"/docs/user/editions/mate/tips-and-tricks","sidebar":"userSidebar"},{"id":"user/editions/plasma/configuration","path":"/docs/user/editions/plasma/configuration","sidebar":"userSidebar"},{"id":"user/editions/plasma/index","path":"/docs/user/editions/plasma/","sidebar":"userSidebar"},{"id":"user/editions/plasma/tips-and-tricks","path":"/docs/user/editions/plasma/tips-and-tricks","sidebar":"userSidebar"},{"id":"user/editions/xfce/configuration","path":"/docs/user/editions/xfce/configuration","sidebar":"userSidebar"},{"id":"user/editions/xfce/index","path":"/docs/user/editions/xfce/","sidebar":"userSidebar"},{"id":"user/editions/xfce/tips-and-tricks","path":"/docs/user/editions/xfce/tips-and-tricks","sidebar":"userSidebar"},{"id":"user/hardware/compatibility/laptops","path":"/docs/user/hardware/compatibility/laptops","sidebar":"userSidebar"},{"id":"user/hardware/compatibility/wifi","path":"/docs/user/hardware/compatibility/wifi","sidebar":"userSidebar"},{"id":"user/hardware/index","path":"/docs/user/hardware/","sidebar":"userSidebar"},{"id":"user/hardware/mobile/android","path":"/docs/user/hardware/mobile/android","sidebar":"userSidebar"},{"id":"user/hardware/mobile/apple","path":"/docs/user/hardware/mobile/apple","sidebar":"userSidebar"},{"id":"user/hardware/peripherals/mice-and-touchpads","path":"/docs/user/hardware/peripherals/mice-and-touchpads","sidebar":"userSidebar"},{"id":"user/hardware/peripherals/midi-keyboard","path":"/docs/user/hardware/peripherals/midi-keyboard","sidebar":"userSidebar"},{"id":"user/hardware/peripherals/printers-and-scanners","path":"/docs/user/hardware/peripherals/printers-and-scanners","sidebar":"userSidebar"},{"id":"user/intro","path":"/docs/user/intro","sidebar":"userSidebar"},{"id":"user/package-management/basics","path":"/docs/user/package-management/basics","sidebar":"userSidebar"},{"id":"user/package-management/history-and-rollback","path":"/docs/user/package-management/history-and-rollback","sidebar":"userSidebar"},{"id":"user/package-management/repo-management","path":"/docs/user/package-management/repo-management","sidebar":"userSidebar"},{"id":"user/privacy","path":"/docs/user/privacy","sidebar":"userSidebar"},{"id":"user/quick-start/boot-management","path":"/docs/user/quick-start/boot-management","sidebar":"userSidebar"},{"id":"user/quick-start/default-applications","path":"/docs/user/quick-start/default-applications","sidebar":"userSidebar"},{"id":"user/quick-start/installation/disks","path":"/docs/user/quick-start/installation/disks","sidebar":"userSidebar"},{"id":"user/quick-start/installation/index","path":"/docs/user/quick-start/installation/","sidebar":"userSidebar"},{"id":"user/quick-start/installation/secure-boot","path":"/docs/user/quick-start/installation/secure-boot","sidebar":"userSidebar"},{"id":"user/quick-start/installation/system-requirements","path":"/docs/user/quick-start/installation/system-requirements","sidebar":"userSidebar"},{"id":"user/quick-start/software-center/index","path":"/docs/user/quick-start/software-center/","sidebar":"userSidebar"},{"id":"user/software/camera/droidcam","path":"/docs/user/software/camera/droidcam","sidebar":"userSidebar"},{"id":"user/software/command-line/index","path":"/docs/user/software/command-line/","sidebar":"userSidebar"},{"id":"user/software/configuration_files","path":"/docs/user/software/configuration_files","sidebar":"userSidebar"},{"id":"user/software/desktops/index","path":"/docs/user/software/desktops/","sidebar":"userSidebar"},{"id":"user/software/development/containers","path":"/docs/user/software/development/containers","sidebar":"userSidebar"},{"id":"user/software/development/index","path":"/docs/user/software/development/","sidebar":"userSidebar"},{"id":"user/software/development/java","path":"/docs/user/software/development/java","sidebar":"userSidebar"},{"id":"user/software/development/postgresql","path":"/docs/user/software/development/postgresql","sidebar":"userSidebar"},{"id":"user/software/development/r-and-rstudio","path":"/docs/user/software/development/r-and-rstudio","sidebar":"userSidebar"},{"id":"user/software/development/rust","path":"/docs/user/software/development/rust","sidebar":"userSidebar"},{"id":"user/software/development/web","path":"/docs/user/software/development/web","sidebar":"userSidebar"},{"id":"user/software/gaming/index","path":"/docs/user/software/gaming/","sidebar":"userSidebar"},{"id":"user/software/localization/ibus","path":"/docs/user/software/localization/ibus","sidebar":"userSidebar"},{"id":"user/software/networking/samba","path":"/docs/user/software/networking/samba","sidebar":"userSidebar"},{"id":"user/software/networking/tigervnc","path":"/docs/user/software/networking/tigervnc","sidebar":"userSidebar"},{"id":"user/software/networking/wireshark","path":"/docs/user/software/networking/wireshark","sidebar":"userSidebar"},{"id":"user/software/networking/xrdp","path":"/docs/user/software/networking/xrdp","sidebar":"userSidebar"},{"id":"user/software/sound/index","path":"/docs/user/software/sound/","sidebar":"userSidebar"},{"id":"user/software/third-party/index","path":"/docs/user/software/third-party/","sidebar":"userSidebar"},{"id":"user/software/third-party/snap","path":"/docs/user/software/third-party/snap","sidebar":"userSidebar"},{"id":"user/software/utilities/ksysguard","path":"/docs/user/software/utilities/ksysguard","sidebar":"userSidebar"},{"id":"user/software/utilities/kwallet","path":"/docs/user/software/utilities/kwallet","sidebar":"userSidebar"},{"id":"user/software/virtualization/virtualbox","path":"/docs/user/software/virtualization/virtualbox","sidebar":"userSidebar"},{"id":"user/software/web/obs","path":"/docs/user/software/web/obs","sidebar":"userSidebar"},{"id":"user/troubleshooting/boot-rescue","path":"/docs/user/troubleshooting/boot-rescue","sidebar":"userSidebar"},{"id":"user/troubleshooting/index","path":"/docs/user/troubleshooting/","sidebar":"userSidebar"},{"id":"user/troubleshooting/installation","path":"/docs/user/troubleshooting/installation","sidebar":"userSidebar"},{"id":"user/troubleshooting/plasma","path":"/docs/user/troubleshooting/plasma","sidebar":"userSidebar"},{"id":"/category/quick-start","path":"/docs/category/quick-start","sidebar":"userSidebar"},{"id":"/category/contributing","path":"/docs/category/contributing","sidebar":"userSidebar"},{"id":"/category/compatibility","path":"/docs/category/compatibility","sidebar":"userSidebar"},{"id":"/category/mobile","path":"/docs/category/mobile","sidebar":"userSidebar"},{"id":"/category/peripherals","path":"/docs/category/peripherals","sidebar":"userSidebar"},{"id":"/category/package-management","path":"/docs/category/package-management","sidebar":"userSidebar"},{"id":"/category/software","path":"/docs/category/software","sidebar":"userSidebar"},{"id":"/category/camera","path":"/docs/category/camera","sidebar":"userSidebar"},{"id":"/category/localization","path":"/docs/category/localization","sidebar":"userSidebar"},{"id":"/category/networking","path":"/docs/category/networking","sidebar":"userSidebar"},{"id":"/category/utilities","path":"/docs/category/utilities","sidebar":"userSidebar"},{"id":"/category/virtualization","path":"/docs/category/virtualization","sidebar":"userSidebar"},{"id":"/category/web","path":"/docs/category/web","sidebar":"userSidebar"},{"id":"/category/advanced-configuration","path":"/docs/category/advanced-configuration","sidebar":"packagingSidebar"},{"id":"/category/procedures","path":"/docs/category/procedures","sidebar":"packagingSidebar"}],"draftIds":[],"sidebars":{"userSidebar":{"link":{"path":"/docs/user/intro","label":"user/intro"}},"packagingSidebar":{"link":{"path":"/docs/packaging/","label":"packaging/index"}}}}],"breadcrumbs":true}},"@cmfcmf/docusaurus-search-local":{"default":{"titleBoost":5,"contentBoost":1,"tagsBoost":3,"parentCategoriesBoost":2,"indexDocSidebarParentCategories":0,"maxSearchResults":8}}}'),i=JSON.parse('{"defaultLocale":"en","locales":["en"],"path":"i18n","currentLocale":"en","localeConfigs":{"en":{"label":"English","direction":"ltr","htmlLang":"en","calendar":"gregory","path":"en"}}}');var s=n(57529);const l=JSON.parse('{"docusaurusVersion":"3.5.2","siteVersion":"0.0.0","pluginVersions":{"docusaurus-plugin-content-docs":{"type":"package","name":"@docusaurus/plugin-content-docs","version":"3.5.2"},"docusaurus-plugin-content-blog":{"type":"package","name":"@docusaurus/plugin-content-blog","version":"3.5.2"},"docusaurus-plugin-content-pages":{"type":"package","name":"@docusaurus/plugin-content-pages","version":"3.5.2"},"docusaurus-plugin-sitemap":{"type":"package","name":"@docusaurus/plugin-sitemap","version":"3.5.2"},"docusaurus-theme-classic":{"type":"package","name":"@docusaurus/theme-classic","version":"3.5.2"},"@cmfcmf/docusaurus-search-local":{"type":"package","name":"@cmfcmf/docusaurus-search-local","version":"1.2.0"},"docusaurus-plugin-ideal-image":{"type":"package","name":"@docusaurus/plugin-ideal-image","version":"3.5.2"}}}');var c=n(85893);const u={siteConfig:o.default,siteMetadata:l,globalData:a,i18n:i,codeTranslations:s},d=r.createContext(u);function p(e){let{children:t}=e;return(0,c.jsx)(d.Provider,{value:u,children:t})}},40903:(e,t,n)=>{"use strict";n.d(t,{Z:()=>m});var r=n(67294),o=n(29629),a=n(79722),i=n(48820),s=n(48714),l=n(13736),c=n(85893);function u(e){let{error:t,tryAgain:n}=e;return(0,c.jsxs)("div",{style:{display:"flex",flexDirection:"column",justifyContent:"center",alignItems:"flex-start",minHeight:"100vh",width:"100%",maxWidth:"80ch",fontSize:"20px",margin:"0 auto",padding:"1rem"},children:[(0,c.jsx)("h1",{style:{fontSize:"3rem"},children:"This page crashed"}),(0,c.jsx)("button",{type:"button",onClick:n,style:{margin:"1rem 0",fontSize:"2rem",cursor:"pointer",borderRadius:20,padding:"1rem"},children:"Try again"}),(0,c.jsx)(d,{error:t})]})}function d(e){let{error:t}=e;const n=(0,i.BN)(t).map((e=>e.message)).join("\n\nCause:\n");return(0,c.jsx)("p",{style:{whiteSpace:"pre-wrap"},children:n})}function p(e){let{children:t}=e;return(0,c.jsx)(l.z,{value:{plugin:{name:"docusaurus-core-error-boundary",id:"default"}},children:t})}function f(e){let{error:t,tryAgain:n}=e;return(0,c.jsx)(p,{children:(0,c.jsxs)(m,{fallback:()=>(0,c.jsx)(u,{error:t,tryAgain:n}),children:[(0,c.jsx)(a.Z,{children:(0,c.jsx)("title",{children:"Page Error"})}),(0,c.jsx)(s.Z,{children:(0,c.jsx)(u,{error:t,tryAgain:n})})]})})}const g=e=>(0,c.jsx)(f,{...e});class m extends r.Component{constructor(e){super(e),this.state={error:null}}componentDidCatch(e){o.Z.canUseDOM&&this.setState({error:e})}render(){const{children:e}=this.props,{error:t}=this.state;if(t){const e={error:t,tryAgain:()=>this.setState({error:null})};return(this.props.fallback??g)(e)}return e??null}}},29629:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});const r="undefined"!=typeof window&&"document"in window&&"createElement"in window.document,o={canUseDOM:r,canUseEventListeners:r&&("addEventListener"in window||"attachEvent"in window),canUseIntersectionObserver:r&&"IntersectionObserver"in window,canUseViewport:r&&"screen"in window}},79722:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});n(67294);var r=n(70405),o=n(85893);function a(e){return(0,o.jsx)(r.ql,{...e})}},38208:(e,t,n)=>{"use strict";n.d(t,{Z:()=>f});var r=n(67294),o=n(73727),a=n(48820),i=n(75276),s=n(41117),l=n(29629),c=n(79202),u=n(23466),d=n(85893);function p(e,t){let{isNavLink:n,to:p,href:f,activeClassName:g,isActive:m,"data-noBrokenLinkCheck":h,autoAddBaseUrl:b=!0,...y}=e;const{siteConfig:v}=(0,i.Z)(),{trailingSlash:w,baseUrl:k}=v,S=v.future.experimental_router,{withBaseUrl:_}=(0,u.Cg)(),x=(0,c.Z)(),E=(0,r.useRef)(null);(0,r.useImperativeHandle)(t,(()=>E.current));const O=p||f;const P=(0,s.Z)(O),j=O?.replace("pathname://","");let C=void 0!==j?(T=j,b&&(e=>e.startsWith("/"))(T)?_(T):T):void 0;var T;"hash"===S&&C?.startsWith("./")&&(C=C?.slice(1)),C&&P&&(C=(0,a.Do)(C,{trailingSlash:w,baseUrl:k}));const I=(0,r.useRef)(!1),A=n?o.OL:o.rU,N=l.Z.canUseIntersectionObserver,L=(0,r.useRef)(),R=()=>{I.current||null==C||(window.docusaurus.preload(C),I.current=!0)};(0,r.useEffect)((()=>(!N&&P&&l.Z.canUseDOM&&null!=C&&window.docusaurus.prefetch(C),()=>{N&&L.current&&L.current.disconnect()})),[L,C,N,P]);const D=C?.startsWith("#")??!1,F=!y.target||"_self"===y.target,M=!C||!P||!F||D&&"hash"!==S;h||!D&&M||x.collectLink(C),y.id&&x.collectAnchor(y.id);const B={};return M?(0,d.jsx)("a",{ref:E,href:C,...O&&!P&&{target:"_blank",rel:"noopener noreferrer"},...y,...B}):(0,d.jsx)(A,{...y,onMouseEnter:R,onTouchStart:R,innerRef:e=>{E.current=e,N&&e&&P&&(L.current=new window.IntersectionObserver((t=>{t.forEach((t=>{e===t.target&&(t.isIntersecting||t.intersectionRatio>0)&&(L.current.unobserve(e),L.current.disconnect(),null!=C&&window.docusaurus.prefetch(C))}))})),L.current.observe(e))},to:C,...n&&{isActive:m,activeClassName:g},...B})}const f=r.forwardRef(p)},55361:(e,t,n)=>{"use strict";n.d(t,{Z:()=>c,I:()=>l});var r=n(67294),o=n(85893);function a(e,t){const n=e.split(/(\{\w+\})/).map(((e,n)=>{if(n%2==1){const n=t?.[e.slice(1,-1)];if(void 0!==n)return n}return e}));return n.some((e=>(0,r.isValidElement)(e)))?n.map(((e,t)=>(0,r.isValidElement)(e)?r.cloneElement(e,{key:t}):e)).filter((e=>""!==e)):n.join("")}var i=n(57529);function s(e){let{id:t,message:n}=e;if(void 0===t&&void 0===n)throw new Error("Docusaurus translation declarations must have at least a translation id or a default translation message");return i[t??n]??n??t}function l(e,t){let{message:n,id:r}=e;return a(s({message:n,id:r}),t)}function c(e){let{children:t,id:n,values:r}=e;if(t&&"string"!=typeof t)throw console.warn("Illegal <Translate> children",t),new Error("The Docusaurus <Translate> component only accept simple string values");const i=s({message:t,id:n});return(0,o.jsx)(o.Fragment,{children:a(i,r)})}},73070:(e,t,n)=>{"use strict";n.d(t,{m:()=>r});const r="default"},41117:(e,t,n)=>{"use strict";function r(e){return/^(?:\w*:|\/\/)/.test(e)}function o(e){return void 0!==e&&!r(e)}n.d(t,{Z:()=>o,b:()=>r})},23466:(e,t,n)=>{"use strict";n.d(t,{Cg:()=>i,ZP:()=>s});var r=n(67294),o=n(75276),a=n(41117);function i(){const{siteConfig:e}=(0,o.Z)(),{baseUrl:t,url:n}=e,i=e.future.experimental_router,s=(0,r.useCallback)(((e,r)=>function(e){let{siteUrl:t,baseUrl:n,url:r,options:{forcePrependBaseUrl:o=!1,absolute:i=!1}={},router:s}=e;if(!r||r.startsWith("#")||(0,a.b)(r))return r;if("hash"===s)return r.startsWith("/")?`.${r}`:`./${r}`;if(o)return n+r.replace(/^\//,"");if(r===n.replace(/\/$/,""))return n;const l=r.startsWith(n)?r:n+r.replace(/^\//,"");return i?t+l:l}({siteUrl:n,baseUrl:t,url:e,options:r,router:i})),[n,t,i]);return{withBaseUrl:s}}function s(e,t){void 0===t&&(t={});const{withBaseUrl:n}=i();return n(e,t)}},79202:(e,t,n)=>{"use strict";n.d(t,{Z:()=>i});var r=n(67294);n(85893);const o=r.createContext({collectAnchor:()=>{},collectLink:()=>{}}),a=()=>(0,r.useContext)(o);function i(){return a()}},75276:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var r=n(67294),o=n(1124);function a(){return(0,r.useContext)(o._)}},2591:(e,t,n)=>{"use strict";n.d(t,{OD:()=>a,eZ:()=>i});var r=n(75276),o=n(73070);function a(e,t){void 0===t&&(t={});const n=function(){const{globalData:e}=(0,r.Z)();return e}()[e];if(!n&&t.failfast)throw new Error(`Docusaurus plugin global data not found for "${e}" plugin.`);return n}function i(e,t,n){void 0===t&&(t=o.m),void 0===n&&(n={});const r=a(e),i=r?.[t];if(!i&&n.failfast)throw new Error(`Docusaurus plugin global data not found for "${e}" plugin with id "${t}".`);return i}},45025:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var r=n(67294),o=n(3681);function a(){return(0,r.useContext)(o._)}},1290:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=n(67294);const o=n(29629).Z.canUseDOM?r.useLayoutEffect:r.useEffect},3675:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var r=n(67294),o=n(13736);function a(){const e=r.useContext(o._);if(!e)throw new Error("Unexpected: no Docusaurus route context found");return e}},44151:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});const r=e=>"object"==typeof e&&!!e&&Object.keys(e).length>0;function o(e){const t={};return function e(n,o){Object.entries(n).forEach((n=>{let[a,i]=n;const s=o?`${o}.${a}`:a;r(i)?e(i,s):t[s]=i}))}(e),t}},13736:(e,t,n)=>{"use strict";n.d(t,{_:()=>a,z:()=>i});var r=n(67294),o=n(85893);const a=r.createContext(null);function i(e){let{children:t,value:n}=e;const i=r.useContext(a),s=(0,r.useMemo)((()=>function(e){let{parent:t,value:n}=e;if(!t){if(!n)throw new Error("Unexpected: no Docusaurus route context found");if(!("plugin"in n))throw new Error("Unexpected: Docusaurus topmost route context has no `plugin` attribute");return n}const r={...t.data,...n?.data};return{plugin:t.plugin,data:r}}({parent:i,value:n})),[i,n]);return(0,o.jsx)(a.Provider,{value:s,children:t})}},5055:(e,t,n)=>{"use strict";n.d(t,{J:()=>y,L5:()=>h,Oh:()=>v});var r=n(67294),o=n(48878),a=n(73070),i=n(39581),s=n(1606),l=n(20585),c=n(85893);const u=e=>`docs-preferred-version-${e}`,d={save:(e,t,n)=>{(0,s.WA)(u(e),{persistence:t}).set(n)},read:(e,t)=>(0,s.WA)(u(e),{persistence:t}).get(),clear:(e,t)=>{(0,s.WA)(u(e),{persistence:t}).del()}},p=e=>Object.fromEntries(e.map((e=>[e,{preferredVersionName:null}])));const f=r.createContext(null);function g(){const e=(0,o._r)(),t=(0,i.L)().docs.versionPersistence,n=(0,r.useMemo)((()=>Object.keys(e)),[e]),[a,s]=(0,r.useState)((()=>p(n)));(0,r.useEffect)((()=>{s(function(e){let{pluginIds:t,versionPersistence:n,allDocsData:r}=e;function o(e){const t=d.read(e,n);return r[e].versions.some((e=>e.name===t))?{preferredVersionName:t}:(d.clear(e,n),{preferredVersionName:null})}return Object.fromEntries(t.map((e=>[e,o(e)])))}({allDocsData:e,versionPersistence:t,pluginIds:n}))}),[e,t,n]);return[a,(0,r.useMemo)((()=>({savePreferredVersion:function(e,n){d.save(e,t,n),s((t=>({...t,[e]:{preferredVersionName:n}})))}})),[t])]}function m(e){let{children:t}=e;const n=g();return(0,c.jsx)(f.Provider,{value:n,children:t})}function h(e){let{children:t}=e;return(0,c.jsx)(m,{children:t})}function b(){const e=(0,r.useContext)(f);if(!e)throw new l.i6("DocsPreferredVersionContextProvider");return e}function y(e){void 0===e&&(e=a.m);const t=(0,o.zh)(e),[n,i]=b(),{preferredVersionName:s}=n[e];return{preferredVersion:t.versions.find((e=>e.name===s))??null,savePreferredVersionName:(0,r.useCallback)((t=>{i.savePreferredVersion(e,t)}),[i,e])}}function v(){const e=(0,o._r)(),[t]=b();function n(n){const r=e[n],{preferredVersionName:o}=t[n];return r.versions.find((e=>e.name===o))??null}const r=Object.keys(e);return Object.fromEntries(r.map((e=>[e,n(e)])))}},90447:(e,t,n)=>{"use strict";n.d(t,{J:()=>a,z:()=>i});var r=n(48878),o=n(5055);function a(e,t){return`docs-${e}-${t}`}function i(){const e=(0,r._r)(),t=(0,r.WS)(),n=(0,o.Oh)();return[...Object.keys(e).map((function(r){const o=t?.activePlugin.pluginId===r?t.activeVersion:void 0,i=n[r],s=e[r].versions.find((e=>e.isLast));return a(r,(o??i??s).name)}))]}},40217:(e,t,n)=>{"use strict";n.d(t,{V:()=>c,b:()=>l});var r=n(67294),o=n(20585),a=n(85893);const i=Symbol("EmptyContext"),s=r.createContext(i);function l(e){let{children:t,name:n,items:o}=e;const i=(0,r.useMemo)((()=>n&&o?{name:n,items:o}:null),[n,o]);return(0,a.jsx)(s.Provider,{value:i,children:t})}function c(){const e=(0,r.useContext)(s);if(e===i)throw new o.i6("DocsSidebarProvider");return e}},68879:(e,t,n)=>{"use strict";n.d(t,{LM:()=>f,MN:()=>O,SN:()=>E,_F:()=>b,f:()=>v,jA:()=>g,lO:()=>S,oz:()=>_,s1:()=>k,vY:()=>x,xz:()=>p});var r=n(67294),o=n(16550),a=n(18790),i=n(48878),s=n(51997),l=n(79113),c=n(5055),u=n(72950),d=n(40217);function p(e){const t=(0,u.E)();if(!e)return;const n=t.docs[e];if(!n)throw new Error(`no version doc found by id=${e}`);return n}function f(e){return"link"!==e.type||e.unlisted?"category"===e.type?function(e){if(e.href&&!e.linkUnlisted)return e.href;for(const t of e.items){const e=f(t);if(e)return e}}(e):void 0:e.href}function g(){const{pathname:e}=(0,o.TH)(),t=(0,d.V)();if(!t)throw new Error("Unexpected: cant find current sidebar in context");const n=w({sidebarItems:t.items,pathname:e,onlyCategories:!0}).slice(-1)[0];if(!n)throw new Error(`${e} is not associated with a category. useCurrentSidebarCategory() should only be used on category index pages.`);return n}const m=(e,t)=>void 0!==e&&(0,s.Mg)(e,t),h=(e,t)=>e.some((e=>b(e,t)));function b(e,t){return"link"===e.type?m(e.href,t):"category"===e.type&&(m(e.href,t)||h(e.items,t))}function y(e,t){switch(e.type){case"category":return b(e,t)||e.items.some((e=>y(e,t)));case"link":return!e.unlisted||b(e,t);default:return!0}}function v(e,t){return(0,r.useMemo)((()=>e.filter((e=>y(e,t)))),[e,t])}function w(e){let{sidebarItems:t,pathname:n,onlyCategories:r=!1}=e;const o=[];return function e(t){for(const a of t)if("category"===a.type&&((0,s.Mg)(a.href,n)||e(a.items))||"link"===a.type&&(0,s.Mg)(a.href,n)){return r&&"category"!==a.type||o.unshift(a),!0}return!1}(t),o}function k(){const e=(0,d.V)(),{pathname:t}=(0,o.TH)(),n=(0,i.gA)()?.pluginData.breadcrumbs;return!1!==n&&e?w({sidebarItems:e.items,pathname:t}):null}function S(e){const{activeVersion:t}=(0,i.Iw)(e),{preferredVersion:n}=(0,c.J)(e),o=(0,i.yW)(e);return(0,r.useMemo)((()=>(0,l.jj)([t,n,o].filter(Boolean))),[t,n,o])}function _(e,t){const n=S(t);return(0,r.useMemo)((()=>{const t=n.flatMap((e=>e.sidebars?Object.entries(e.sidebars):[])),r=t.find((t=>t[0]===e));if(!r)throw new Error(`Can't find any sidebar with id "${e}" in version${n.length>1?"s":""} ${n.map((e=>e.name)).join(", ")}".\nAvailable sidebar ids are:\n- ${t.map((e=>e[0])).join("\n- ")}`);return r[1]}),[e,n])}function x(e,t){const n=S(t);return(0,r.useMemo)((()=>{const t=n.flatMap((e=>e.docs)),r=t.find((t=>t.id===e));if(!r){if(n.flatMap((e=>e.draftIds)).includes(e))return null;throw new Error(`Couldn't find any doc with id "${e}" in version${n.length>1?"s":""} "${n.map((e=>e.name)).join(", ")}".\nAvailable doc ids are:\n- ${(0,l.jj)(t.map((e=>e.id))).join("\n- ")}`)}return r}),[e,n])}function E(e){let{route:t}=e;const n=(0,o.TH)(),r=(0,u.E)(),i=t.routes,s=i.find((e=>(0,o.LX)(n.pathname,e)));if(!s)return null;const l=s.sidebar,c=l?r.docsSidebars[l]:void 0;return{docElement:(0,a.H)(i),sidebarName:l,sidebarItems:c}}function O(e){return e.filter((e=>!("category"===e.type||"link"===e.type)||!!f(e)))}},72950:(e,t,n)=>{"use strict";n.d(t,{E:()=>l,q:()=>s});var r=n(67294),o=n(20585),a=n(85893);const i=r.createContext(null);function s(e){let{children:t,version:n}=e;return(0,a.jsx)(i.Provider,{value:n,children:t})}function l(){const e=(0,r.useContext)(i);if(null===e)throw new o.i6("DocsVersionProvider");return e}},48878:(e,t,n)=>{"use strict";n.d(t,{MN:()=>l.MN,Iw:()=>y,gA:()=>g,WS:()=>m,_r:()=>p,jA:()=>l.jA,Jo:()=>v,z1:()=>u.z,zh:()=>f,J:()=>c.J,yW:()=>b,gB:()=>h});var r=n(16550),o=n(2591);const a=e=>e.versions.find((e=>e.isLast));function i(e,t){return[...e.versions].sort(((e,t)=>e.path===t.path?0:e.path.includes(t.path)?-1:t.path.includes(e.path)?1:0)).find((e=>!!(0,r.LX)(t,{path:e.path,exact:!1,strict:!1})))}function s(e,t){const n=i(e,t),o=n?.docs.find((e=>!!(0,r.LX)(t,{path:e.path,exact:!0,strict:!1})));return{activeVersion:n,activeDoc:o,alternateDocVersions:o?function(t){const n={};return e.versions.forEach((e=>{e.docs.forEach((r=>{r.id===t&&(n[e.name]=r)}))})),n}(o.id):{}}}var l=n(68879),c=n(5055),u=n(90447);const d={},p=()=>(0,o.OD)("docusaurus-plugin-content-docs")??d,f=e=>{try{return(0,o.eZ)("docusaurus-plugin-content-docs",e,{failfast:!0})}catch(t){throw new Error("You are using a feature of the Docusaurus docs plugin, but this plugin does not seem to be enabled"+("Default"===e?"":` (pluginId=${e}`),{cause:t})}};function g(e){void 0===e&&(e={});const t=p(),{pathname:n}=(0,r.TH)();return function(e,t,n){void 0===n&&(n={});const o=Object.entries(e).sort(((e,t)=>t[1].path.localeCompare(e[1].path))).find((e=>{let[,n]=e;return!!(0,r.LX)(t,{path:n.path,exact:!1,strict:!1})})),a=o?{pluginId:o[0],pluginData:o[1]}:void 0;if(!a&&n.failfast)throw new Error(`Can't find active docs plugin for "${t}" pathname, while it was expected to be found. Maybe you tried to use a docs feature that can only be used on a docs-related page? Existing docs plugin paths are: ${Object.values(e).map((e=>e.path)).join(", ")}`);return a}(t,n,e)}function m(e){void 0===e&&(e={});const t=g(e),{pathname:n}=(0,r.TH)();if(!t)return;return{activePlugin:t,activeVersion:i(t.pluginData,n)}}function h(e){return f(e).versions}function b(e){const t=f(e);return a(t)}function y(e){const t=f(e),{pathname:n}=(0,r.TH)();return s(t,n)}function v(e){const t=f(e),{pathname:n}=(0,r.TH)();return function(e,t){const n=a(e);return{latestDocSuggestion:s(e,t).alternateDocVersions[n.name],latestVersionSuggestion:n}}(t,n)}},98356:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>a});var r=n(74865),o=n.n(r);o().configure({showSpinner:!1});const a={onRouteUpdate(e){let{location:t,previousLocation:n}=e;if(n&&t.pathname!==n.pathname){const e=window.setTimeout((()=>{o().start()}),200);return()=>window.clearTimeout(e)}},onRouteDidUpdate(){o().done()}}},87213:(e,t,n)=>{"use strict";n.r(t);var r=n(14965),o=n(36809);!function(e){const{themeConfig:{prism:t}}=o.default,{additionalLanguages:r}=t;globalThis.Prism=e,r.forEach((e=>{"php"===e&&n(96854),n(24249)(`./prism-${e}`)})),delete globalThis.Prism}(r.p1)},42704:(e,t,n)=>{"use strict";n.d(t,{Z:()=>u});n(67294);var r=n(36905),o=n(55361),a=n(39581),i=n(38208),s=n(79202);const l={anchorWithStickyNavbar:"anchorWithStickyNavbar_LWe7",anchorWithHideOnScrollNavbar:"anchorWithHideOnScrollNavbar_WYt5"};var c=n(85893);function u(e){let{as:t,id:n,...u}=e;const d=(0,s.Z)(),{navbar:{hideOnScroll:p}}=(0,a.L)();if("h1"===t||!n)return(0,c.jsx)(t,{...u,id:void 0});d.collectAnchor(n);const f=(0,o.I)({id:"theme.common.headingLinkTitle",message:"Direct link to {heading}",description:"Title for link to heading"},{heading:"string"==typeof u.children?u.children:n});return(0,c.jsxs)(t,{...u,className:(0,r.Z)("anchor",p?l.anchorWithHideOnScrollNavbar:l.anchorWithStickyNavbar,u.className),id:n,children:[u.children,(0,c.jsx)(i.Z,{className:"hash-link",to:`#${n}`,"aria-label":f,title:f,children:"\u200b"})]})}},99391:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});n(67294);const r={iconExternalLink:"iconExternalLink_nPIU"};var o=n(85893);function a(e){let{width:t=13.5,height:n=13.5}=e;return(0,o.jsx)("svg",{width:t,height:n,"aria-hidden":"true",viewBox:"0 0 24 24",className:r.iconExternalLink,children:(0,o.jsx)("path",{fill:"currentColor",d:"M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"})})}},48714:(e,t,n)=>{"use strict";n.d(t,{Z:()=>di});var r=n(67294),o=n(36905),a=n(40903),i=n(96984),s=n(16550),l=n(55361),c=n(89062),u=n(85893);const d="__docusaurus_skipToContent_fallback";function p(e){e.setAttribute("tabindex","-1"),e.focus(),e.removeAttribute("tabindex")}function f(){const e=(0,r.useRef)(null),{action:t}=(0,s.k6)(),n=(0,r.useCallback)((e=>{e.preventDefault();const t=document.querySelector("main:first-of-type")??document.getElementById(d);t&&p(t)}),[]);return(0,c.S)((n=>{let{location:r}=n;e.current&&!r.hash&&"PUSH"===t&&p(e.current)})),{containerRef:e,onClick:n}}const g=(0,l.I)({id:"theme.common.skipToMainContent",description:"The skip to content label used for accessibility, allowing to rapidly navigate to main content with keyboard tab/enter navigation",message:"Skip to main content"});function m(e){const t=e.children??g,{containerRef:n,onClick:r}=f();return(0,u.jsx)("div",{ref:n,role:"region","aria-label":g,children:(0,u.jsx)("a",{...e,href:`#${d}`,onClick:r,children:t})})}var h=n(50563),b=n(95099);const y={skipToContent:"skipToContent_fXgn"};function v(){return(0,u.jsx)(m,{className:y.skipToContent})}var w=n(39581),k=n(25461);function S(e){let{width:t=21,height:n=21,color:r="currentColor",strokeWidth:o=1.2,className:a,...i}=e;return(0,u.jsx)("svg",{viewBox:"0 0 15 15",width:t,height:n,...i,children:(0,u.jsx)("g",{stroke:r,strokeWidth:o,children:(0,u.jsx)("path",{d:"M.75.75l13.5 13.5M14.25.75L.75 14.25"})})})}const _={closeButton:"closeButton_CVFx"};function x(e){return(0,u.jsx)("button",{type:"button","aria-label":(0,l.I)({id:"theme.AnnouncementBar.closeButtonAriaLabel",message:"Close",description:"The ARIA label for close button of announcement bar"}),...e,className:(0,o.Z)("clean-btn close",_.closeButton,e.className),children:(0,u.jsx)(S,{width:14,height:14,strokeWidth:3.1})})}const E={content:"content_knG7"};function O(e){const{announcementBar:t}=(0,w.L)(),{content:n}=t;return(0,u.jsx)("div",{...e,className:(0,o.Z)(E.content,e.className),dangerouslySetInnerHTML:{__html:n}})}const P={announcementBar:"announcementBar_mb4j",announcementBarPlaceholder:"announcementBarPlaceholder_vyr4",announcementBarClose:"announcementBarClose_gvF7",announcementBarContent:"announcementBarContent_xLdY"};function j(){const{announcementBar:e}=(0,w.L)(),{isActive:t,close:n}=(0,k.n)();if(!t)return null;const{backgroundColor:r,textColor:o,isCloseable:a}=e;return(0,u.jsxs)("div",{className:P.announcementBar,style:{backgroundColor:r,color:o},role:"banner",children:[a&&(0,u.jsx)("div",{className:P.announcementBarPlaceholder}),(0,u.jsx)(O,{className:P.announcementBarContent}),a&&(0,u.jsx)(x,{onClick:n,className:P.announcementBarClose})]})}var C=n(44160),T=n(18119);var I=n(20585),A=n(5689);const N=r.createContext(null);function L(e){let{children:t}=e;const n=function(){const e=(0,C.e)(),t=(0,A.HY)(),[n,o]=(0,r.useState)(!1),a=null!==t.component,i=(0,I.D9)(a);return(0,r.useEffect)((()=>{a&&!i&&o(!0)}),[a,i]),(0,r.useEffect)((()=>{a?e.shown||o(!0):o(!1)}),[e.shown,a]),(0,r.useMemo)((()=>[n,o]),[n])}();return(0,u.jsx)(N.Provider,{value:n,children:t})}function R(e){if(e.component){const t=e.component;return(0,u.jsx)(t,{...e.props})}}function D(){const e=(0,r.useContext)(N);if(!e)throw new I.i6("NavbarSecondaryMenuDisplayProvider");const[t,n]=e,o=(0,r.useCallback)((()=>n(!1)),[n]),a=(0,A.HY)();return(0,r.useMemo)((()=>({shown:t,hide:o,content:R(a)})),[o,a,t])}function F(e){let{header:t,primaryMenu:n,secondaryMenu:r}=e;const{shown:a}=D();return(0,u.jsxs)("div",{className:"navbar-sidebar",children:[t,(0,u.jsxs)("div",{className:(0,o.Z)("navbar-sidebar__items",{"navbar-sidebar__items--show-secondary":a}),children:[(0,u.jsx)("div",{className:"navbar-sidebar__item menu",children:n}),(0,u.jsx)("div",{className:"navbar-sidebar__item menu",children:r})]})]})}var M=n(61503),B=n(45025);function z(e){return(0,u.jsx)("svg",{viewBox:"0 0 24 24",width:24,height:24,...e,children:(0,u.jsx)("path",{fill:"currentColor",d:"M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"})})}function U(e){return(0,u.jsx)("svg",{viewBox:"0 0 24 24",width:24,height:24,...e,children:(0,u.jsx)("path",{fill:"currentColor",d:"M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"})})}const $={toggle:"toggle_vylO",toggleButton:"toggleButton_gllP",darkToggleIcon:"darkToggleIcon_wfgR",lightToggleIcon:"lightToggleIcon_pyhR",toggleButtonDisabled:"toggleButtonDisabled_aARS"};function H(e){let{className:t,buttonClassName:n,value:r,onChange:a}=e;const i=(0,B.Z)(),s=(0,l.I)({message:"Switch between dark and light mode (currently {mode})",id:"theme.colorToggle.ariaLabel",description:"The ARIA label for the navbar color mode toggle"},{mode:"dark"===r?(0,l.I)({message:"dark mode",id:"theme.colorToggle.ariaLabel.mode.dark",description:"The name for the dark color mode"}):(0,l.I)({message:"light mode",id:"theme.colorToggle.ariaLabel.mode.light",description:"The name for the light color mode"})});return(0,u.jsx)("div",{className:(0,o.Z)($.toggle,t),children:(0,u.jsxs)("button",{className:(0,o.Z)("clean-btn",$.toggleButton,!i&&$.toggleButtonDisabled,n),type:"button",onClick:()=>a("dark"===r?"light":"dark"),disabled:!i,title:s,"aria-label":s,"aria-live":"polite",children:[(0,u.jsx)(z,{className:(0,o.Z)($.toggleIcon,$.lightToggleIcon)}),(0,u.jsx)(U,{className:(0,o.Z)($.toggleIcon,$.darkToggleIcon)})]})})}const q=r.memo(H),V={darkNavbarColorModeToggle:"darkNavbarColorModeToggle_X3D1"};function Q(e){let{className:t}=e;const n=(0,w.L)().navbar.style,r=(0,w.L)().colorMode.disableSwitch,{colorMode:o,setColorMode:a}=(0,M.I)();return r?null:(0,u.jsx)(q,{className:t,buttonClassName:"dark"===n?V.darkNavbarColorModeToggle:void 0,value:o,onChange:a})}var Z=n(82546);function W(){return(0,u.jsx)(Z.Z,{className:"navbar__brand",imageClassName:"navbar__logo",titleClassName:"navbar__title text--truncate"})}function G(){const e=(0,C.e)();return(0,u.jsx)("button",{type:"button","aria-label":(0,l.I)({id:"theme.docs.sidebar.closeSidebarButtonAriaLabel",message:"Close navigation bar",description:"The ARIA label for close button of mobile sidebar"}),className:"clean-btn navbar-sidebar__close",onClick:()=>e.toggle(),children:(0,u.jsx)(S,{color:"var(--ifm-color-emphasis-600)"})})}function Y(){return(0,u.jsxs)("div",{className:"navbar-sidebar__brand",children:[(0,u.jsx)(W,{}),(0,u.jsx)(Q,{className:"margin-right--md"}),(0,u.jsx)(G,{})]})}var K=n(38208),X=n(23466),J=n(41117);function ee(e,t){return void 0!==e&&void 0!==t&&new RegExp(e,"gi").test(t)}var te=n(99391);function ne(e){let{activeBasePath:t,activeBaseRegex:n,to:r,href:o,label:a,html:i,isDropdownLink:s,prependBaseUrlToHref:l,...c}=e;const d=(0,X.ZP)(r),p=(0,X.ZP)(t),f=(0,X.ZP)(o,{forcePrependBaseUrl:!0}),g=a&&o&&!(0,J.Z)(o),m=i?{dangerouslySetInnerHTML:{__html:i}}:{children:(0,u.jsxs)(u.Fragment,{children:[a,g&&(0,u.jsx)(te.Z,{...s&&{width:12,height:12}})]})};return o?(0,u.jsx)(K.Z,{href:l?f:o,...c,...m}):(0,u.jsx)(K.Z,{to:d,isNavLink:!0,...(t||n)&&{isActive:(e,t)=>n?ee(n,t.pathname):t.pathname.startsWith(p)},...c,...m})}function re(e){let{className:t,isDropdownItem:n=!1,...r}=e;const a=(0,u.jsx)(ne,{className:(0,o.Z)(n?"dropdown__link":"navbar__item navbar__link",t),isDropdownLink:n,...r});return n?(0,u.jsx)("li",{children:a}):a}function oe(e){let{className:t,isDropdownItem:n,...r}=e;return(0,u.jsx)("li",{className:"menu__list-item",children:(0,u.jsx)(ne,{className:(0,o.Z)("menu__link",t),...r})})}function ae(e){let{mobile:t=!1,position:n,...r}=e;const o=t?oe:re;return(0,u.jsx)(o,{...r,activeClassName:r.activeClassName??(t?"menu__link--active":"navbar__link--active")})}var ie=n(93841),se=n(51997),le=n(75276);const ce={dropdownNavbarItemMobile:"dropdownNavbarItemMobile_S0Fm"};function ue(e,t){return e.some((e=>function(e,t){return!!(0,se.Mg)(e.to,t)||!!ee(e.activeBaseRegex,t)||!(!e.activeBasePath||!t.startsWith(e.activeBasePath))}(e,t)))}function de(e){let{items:t,position:n,className:a,onClick:i,...s}=e;const l=(0,r.useRef)(null),[c,d]=(0,r.useState)(!1);return(0,r.useEffect)((()=>{const e=e=>{l.current&&!l.current.contains(e.target)&&d(!1)};return document.addEventListener("mousedown",e),document.addEventListener("touchstart",e),document.addEventListener("focusin",e),()=>{document.removeEventListener("mousedown",e),document.removeEventListener("touchstart",e),document.removeEventListener("focusin",e)}}),[l]),(0,u.jsxs)("div",{ref:l,className:(0,o.Z)("navbar__item","dropdown","dropdown--hoverable",{"dropdown--right":"right"===n,"dropdown--show":c}),children:[(0,u.jsx)(ne,{"aria-haspopup":"true","aria-expanded":c,role:"button",href:s.to?void 0:"#",className:(0,o.Z)("navbar__link",a),...s,onClick:s.to?void 0:e=>e.preventDefault(),onKeyDown:e=>{"Enter"===e.key&&(e.preventDefault(),d(!c))},children:s.children??s.label}),(0,u.jsx)("ul",{className:"dropdown__menu",children:t.map(((e,t)=>(0,r.createElement)(_a,{isDropdownItem:!0,activeClassName:"dropdown__link--active",...e,key:t})))})]})}function pe(e){let{items:t,className:n,position:a,onClick:i,...l}=e;const c=function(){const{siteConfig:{baseUrl:e}}=(0,le.Z)(),{pathname:t}=(0,s.TH)();return t.replace(e,"/")}(),d=ue(t,c),{collapsed:p,toggleCollapsed:f,setCollapsed:g}=(0,ie.u)({initialState:()=>!d});return(0,r.useEffect)((()=>{d&&g(!d)}),[c,d,g]),(0,u.jsxs)("li",{className:(0,o.Z)("menu__list-item",{"menu__list-item--collapsed":p}),children:[(0,u.jsx)(ne,{role:"button",className:(0,o.Z)(ce.dropdownNavbarItemMobile,"menu__link menu__link--sublist menu__link--sublist-caret",n),...l,onClick:e=>{e.preventDefault(),f()},children:l.children??l.label}),(0,u.jsx)(ie.z,{lazy:!0,as:"ul",className:"menu__list",collapsed:p,children:t.map(((e,t)=>(0,r.createElement)(_a,{mobile:!0,isDropdownItem:!0,onClick:i,activeClassName:"menu__link--active",...e,key:t})))})]})}function fe(e){let{mobile:t=!1,...n}=e;const r=t?pe:de;return(0,u.jsx)(r,{...n})}var ge=n(76862);function me(e){let{width:t=20,height:n=20,...r}=e;return(0,u.jsx)("svg",{viewBox:"0 0 24 24",width:t,height:n,"aria-hidden":!0,...r,children:(0,u.jsx)("path",{fill:"currentColor",d:"M12.87 15.07l-2.54-2.51.03-.03c1.74-1.94 2.98-4.17 3.71-6.53H17V4h-7V2H8v2H1v1.99h11.17C11.5 7.92 10.44 9.75 9 11.35 8.07 10.32 7.3 9.19 6.69 8h-2c.73 1.63 1.73 3.17 2.98 4.56l-5.09 5.02L4 19l5-5 3.11 3.11.76-2.04zM18.5 10h-2L12 22h2l1.12-3h4.75L21 22h2l-4.5-12zm-2.62 7l1.62-4.33L19.12 17h-3.24z"})})}const he="iconLanguage_nlXk";var be=n(73935);function ye(e,t){var n=void 0;return function(){for(var r=arguments.length,o=new Array(r),a=0;a<r;a++)o[a]=arguments[a];n&&clearTimeout(n),n=setTimeout((function(){return e.apply(void 0,o)}),t)}}function ve(e){return e!==Object(e)}function we(e,t){if(e===t)return!0;if(ve(e)||ve(t)||"function"==typeof e||"function"==typeof t)return e===t;if(Object.keys(e).length!==Object.keys(t).length)return!1;for(var n=0,r=Object.keys(e);n<r.length;n++){var o=r[n];if(!(o in t))return!1;if(!we(e[o],t[o]))return!1}return!0}var ke=function(){};function Se(e){var t=e.item,n=e.items;return{index:t.__autocomplete_indexName,items:[t],positions:[1+n.findIndex((function(e){return e.objectID===t.objectID}))],queryID:t.__autocomplete_queryID,algoliaSource:["autocomplete"]}}function _e(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,o,a,i,s=[],l=!0,c=!1;try{if(a=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;l=!1}else for(;!(l=(r=a.call(n)).done)&&(s.push(r.value),s.length!==t);l=!0);}catch(u){c=!0,o=u}finally{try{if(!l&&null!=n.return&&(i=n.return(),Object(i)!==i))return}finally{if(c)throw o}}return s}}(e,t)||function(e,t){if(!e)return;if("string"==typeof e)return xe(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return xe(e,t)}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function xe(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}var Ee=["items"],Oe=["items"];function Pe(e){return Pe="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},Pe(e)}function je(e){return function(e){if(Array.isArray(e))return Ce(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"==typeof e)return Ce(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Ce(e,t)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Ce(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 Te(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}function Ie(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 Ae(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Ie(Object(n),!0).forEach((function(t){Ne(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Ie(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function Ne(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==Pe(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==Pe(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===Pe(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Le(e){return e.map((function(e){var t=e.items,n=Te(e,Ee);return Ae(Ae({},n),{},{objectIDs:(null==t?void 0:t.map((function(e){return e.objectID})))||n.objectIDs})}))}function Re(e){var t=function(e){var t=_e((e.version||"").split(".").map(Number),2),n=t[0],r=t[1];return n>=3||2===n&&r>=4||1===n&&r>=10}(e);function n(n,r,o){if(t&&void 0!==o){var a=o[0].__autocomplete_algoliaCredentials,i={"X-Algolia-Application-Id":a.appId,"X-Algolia-API-Key":a.apiKey};e.apply(void 0,[n].concat(je(r),[{headers:i}]))}else e.apply(void 0,[n].concat(je(r)))}return{init:function(t,n){e("init",{appId:t,apiKey:n})},setUserToken:function(t){e("setUserToken",t)},clickedObjectIDsAfterSearch:function(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];t.length>0&&n("clickedObjectIDsAfterSearch",Le(t),t[0].items)},clickedObjectIDs:function(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];t.length>0&&n("clickedObjectIDs",Le(t),t[0].items)},clickedFilters:function(){for(var t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];n.length>0&&e.apply(void 0,["clickedFilters"].concat(n))},convertedObjectIDsAfterSearch:function(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];t.length>0&&n("convertedObjectIDsAfterSearch",Le(t),t[0].items)},convertedObjectIDs:function(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];t.length>0&&n("convertedObjectIDs",Le(t),t[0].items)},convertedFilters:function(){for(var t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];n.length>0&&e.apply(void 0,["convertedFilters"].concat(n))},viewedObjectIDs:function(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];t.length>0&&t.reduce((function(e,t){var n=t.items,r=Te(t,Oe);return[].concat(je(e),je(function(e){for(var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:20,n=[],r=0;r<e.objectIDs.length;r+=t)n.push(Ae(Ae({},e),{},{objectIDs:e.objectIDs.slice(r,r+t)}));return n}(Ae(Ae({},r),{},{objectIDs:(null==n?void 0:n.map((function(e){return e.objectID})))||r.objectIDs})).map((function(e){return{items:n,payload:e}}))))}),[]).forEach((function(e){var t=e.items;return n("viewedObjectIDs",[e.payload],t)}))},viewedFilters:function(){for(var t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];n.length>0&&e.apply(void 0,["viewedFilters"].concat(n))}}}function De(e){var t=e.items.reduce((function(e,t){var n;return e[t.__autocomplete_indexName]=(null!==(n=e[t.__autocomplete_indexName])&&void 0!==n?n:[]).concat(t),e}),{});return Object.keys(t).map((function(e){return{index:e,items:t[e],algoliaSource:["autocomplete"]}}))}function Fe(e){return e.objectID&&e.__autocomplete_indexName&&e.__autocomplete_queryID}function Me(e){return Me="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},Me(e)}function Be(e){return function(e){if(Array.isArray(e))return ze(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"==typeof e)return ze(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return ze(e,t)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function ze(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 Ue(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 $e(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Ue(Object(n),!0).forEach((function(t){He(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Ue(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function He(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==Me(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==Me(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===Me(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var qe="2.6.0",Ve="https://cdn.jsdelivr.net/npm/search-insights@".concat(qe,"/dist/search-insights.min.js"),Qe=ye((function(e){var t=e.onItemsChange,n=e.items,r=e.insights,o=e.state;t({insights:r,insightsEvents:De({items:n}).map((function(e){return $e({eventName:"Items Viewed"},e)})),state:o})}),400);function Ze(e){var t=function(e){return $e({onItemsChange:function(e){var t=e.insights,n=e.insightsEvents;t.viewedObjectIDs.apply(t,Be(n.map((function(e){return $e($e({},e),{},{algoliaSource:[].concat(Be(e.algoliaSource||[]),["autocomplete-internal"])})}))))},onSelect:function(e){var t=e.insights,n=e.insightsEvents;t.clickedObjectIDsAfterSearch.apply(t,Be(n.map((function(e){return $e($e({},e),{},{algoliaSource:[].concat(Be(e.algoliaSource||[]),["autocomplete-internal"])})}))))},onActive:ke},e)}(e),n=t.insightsClient,r=t.onItemsChange,o=t.onSelect,a=t.onActive,i=n;n||function(e){if("undefined"!=typeof window)e({window:window})}((function(e){var t=e.window,n=t.AlgoliaAnalyticsObject||"aa";"string"==typeof n&&(i=t[n]),i||(t.AlgoliaAnalyticsObject=n,t[n]||(t[n]=function(){t[n].queue||(t[n].queue=[]);for(var e=arguments.length,r=new Array(e),o=0;o<e;o++)r[o]=arguments[o];t[n].queue.push(r)}),t[n].version=qe,i=t[n],function(e){var t="[Autocomplete]: Could not load search-insights.js. Please load it manually following https://alg.li/insights-autocomplete";try{var n=e.document.createElement("script");n.async=!0,n.src=Ve,n.onerror=function(){console.error(t)},document.body.appendChild(n)}catch(r){console.error(t)}}(t))}));var s=Re(i),l={current:[]},c=ye((function(e){var t=e.state;if(t.isOpen){var n=t.collections.reduce((function(e,t){return[].concat(Be(e),Be(t.items))}),[]).filter(Fe);we(l.current.map((function(e){return e.objectID})),n.map((function(e){return e.objectID})))||(l.current=n,n.length>0&&Qe({onItemsChange:r,items:n,insights:s,state:t}))}}),0);return{name:"aa.algoliaInsightsPlugin",subscribe:function(e){var t=e.setContext,n=e.onSelect,r=e.onActive;i("addAlgoliaAgent","insights-plugin"),t({algoliaInsightsPlugin:{__algoliaSearchParameters:{clickAnalytics:!0},insights:s}}),n((function(e){var t=e.item,n=e.state,r=e.event;Fe(t)&&o({state:n,event:r,insights:s,item:t,insightsEvents:[$e({eventName:"Item Selected"},Se({item:t,items:l.current}))]})})),r((function(e){var t=e.item,n=e.state,r=e.event;Fe(t)&&a({state:n,event:r,insights:s,item:t,insightsEvents:[$e({eventName:"Item Active"},Se({item:t,items:l.current}))]})}))},onStateChange:function(e){var t=e.state;c({state:t})},__autocomplete_pluginOptions:e}}function We(e){return We="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},We(e)}function Ge(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 Ye(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==We(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==We(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===We(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Ke(e,t,n){var r,o=t.initialState;return{getState:function(){return o},dispatch:function(r,a){var i=function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Ge(Object(n),!0).forEach((function(t){Ye(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Ge(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}({},o);o=e(o,{type:r,props:t,payload:a}),n({state:o,prevState:i})},pendingRequests:(r=[],{add:function(e){return r.push(e),e.finally((function(){r=r.filter((function(t){return t!==e}))}))},cancelAll:function(){r.forEach((function(e){return e.cancel()}))},isEmpty:function(){return 0===r.length}})}}function Xe(e){return e.reduce((function(e,t){return e.concat(t)}),[])}function Je(e){return Je="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},Je(e)}function et(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 tt(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?et(Object(n),!0).forEach((function(t){nt(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):et(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function nt(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==Je(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==Je(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===Je(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function rt(e){return 0===e.collections.length?0:e.collections.reduce((function(e,t){return e+t.items.length}),0)}var ot=0;function at(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 it(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?at(Object(n),!0).forEach((function(t){st(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):at(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function st(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==lt(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==lt(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===lt(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function lt(e){return lt="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},lt(e)}function ct(e){return ct="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},ct(e)}function ut(e){return function(e){if(Array.isArray(e))return dt(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"==typeof e)return dt(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return dt(e,t)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function dt(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 pt(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 ft(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?pt(Object(n),!0).forEach((function(t){gt(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):pt(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function gt(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==ct(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==ct(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===ct(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function mt(e,t){var n,r="undefined"!=typeof window?window:{},o=e.plugins||[];return ft(ft({debug:!1,openOnFocus:!1,placeholder:"",autoFocus:!1,defaultActiveItemId:null,stallThreshold:300,insights:!1,environment:r,shouldPanelOpen:function(e){return rt(e.state)>0},reshape:function(e){return e.sources}},e),{},{id:null!==(n=e.id)&&void 0!==n?n:"autocomplete-".concat(ot++),plugins:o,initialState:ft({activeItemId:null,query:"",completion:null,collections:[],isOpen:!1,status:"idle",context:{}},e.initialState),onStateChange:function(t){var n;null===(n=e.onStateChange)||void 0===n||n.call(e,t),o.forEach((function(e){var n;return null===(n=e.onStateChange)||void 0===n?void 0:n.call(e,t)}))},onSubmit:function(t){var n;null===(n=e.onSubmit)||void 0===n||n.call(e,t),o.forEach((function(e){var n;return null===(n=e.onSubmit)||void 0===n?void 0:n.call(e,t)}))},onReset:function(t){var n;null===(n=e.onReset)||void 0===n||n.call(e,t),o.forEach((function(e){var n;return null===(n=e.onReset)||void 0===n?void 0:n.call(e,t)}))},getSources:function(n){return Promise.all([].concat(ut(o.map((function(e){return e.getSources}))),[e.getSources]).filter(Boolean).map((function(e){return function(e,t){var n=[];return Promise.resolve(e(t)).then((function(e){return Array.isArray(e),Promise.all(e.filter((function(e){return Boolean(e)})).map((function(e){if(e.sourceId,n.includes(e.sourceId))throw new Error("[Autocomplete] The `sourceId` ".concat(JSON.stringify(e.sourceId)," is not unique."));n.push(e.sourceId);var t={getItemInputValue:function(e){return e.state.query},getItemUrl:function(){},onSelect:function(e){(0,e.setIsOpen)(!1)},onActive:ke,onResolve:ke};Object.keys(t).forEach((function(e){t[e].__default=!0}));var r=it(it({},t),e);return Promise.resolve(r)})))}))}(e,n)}))).then((function(e){return Xe(e)})).then((function(e){return e.map((function(e){return ft(ft({},e),{},{onSelect:function(n){e.onSelect(n),t.forEach((function(e){var t;return null===(t=e.onSelect)||void 0===t?void 0:t.call(e,n)}))},onActive:function(n){e.onActive(n),t.forEach((function(e){var t;return null===(t=e.onActive)||void 0===t?void 0:t.call(e,n)}))},onResolve:function(n){e.onResolve(n),t.forEach((function(e){var t;return null===(t=e.onResolve)||void 0===t?void 0:t.call(e,n)}))}})}))}))},navigator:ft({navigate:function(e){var t=e.itemUrl;r.location.assign(t)},navigateNewTab:function(e){var t=e.itemUrl,n=r.open(t,"_blank","noopener");null==n||n.focus()},navigateNewWindow:function(e){var t=e.itemUrl;r.open(t,"_blank","noopener")}},e.navigator)})}function ht(e){return ht="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},ht(e)}function bt(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 yt(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?bt(Object(n),!0).forEach((function(t){vt(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):bt(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function vt(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==ht(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==ht(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===ht(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function wt(e){return wt="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},wt(e)}function kt(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 St(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?kt(Object(n),!0).forEach((function(t){_t(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):kt(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function _t(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==wt(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==wt(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===wt(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function xt(e){return xt="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},xt(e)}function Et(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 Ot(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Et(Object(n),!0).forEach((function(t){Pt(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Et(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function Pt(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==xt(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==xt(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===xt(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function jt(e){return function(e){if(Array.isArray(e))return Ct(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"==typeof e)return Ct(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Ct(e,t)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Ct(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 Tt(e){return Boolean(e.execute)}function It(e,t,n){if(o=e,Boolean(null==o?void 0:o.execute)){var r="algolia"===e.requesterId?Object.assign.apply(Object,[{}].concat(jt(Object.keys(n.context).map((function(e){var t;return null===(t=n.context[e])||void 0===t?void 0:t.__algoliaSearchParameters}))))):{};return Ot(Ot({},e),{},{requests:e.queries.map((function(n){return{query:"algolia"===e.requesterId?Ot(Ot({},n),{},{params:Ot(Ot({},r),n.params)}):n,sourceId:t,transformResponse:e.transformResponse}}))})}var o;return{items:e,sourceId:t}}function At(e){var t=e.reduce((function(e,t){if(!Tt(t))return e.push(t),e;var n=t.searchClient,r=t.execute,o=t.requesterId,a=t.requests,i=e.find((function(e){return Tt(t)&&Tt(e)&&e.searchClient===n&&Boolean(o)&&e.requesterId===o}));if(i){var s;(s=i.items).push.apply(s,jt(a))}else{var l={execute:r,requesterId:o,items:a,searchClient:n};e.push(l)}return e}),[]).map((function(e){if(!Tt(e))return Promise.resolve(e);var t=e,n=t.execute,r=t.items;return n({searchClient:t.searchClient,requests:r})}));return Promise.all(t).then((function(e){return Xe(e)}))}function Nt(e,t,n){return t.map((function(t){var r=e.filter((function(e){return e.sourceId===t.sourceId})),o=r.map((function(e){return e.items})),a=r[0].transformResponse,i=a?a(function(e){var t=e.map((function(e){var t;return St(St({},e),{},{hits:null===(t=e.hits)||void 0===t?void 0:t.map((function(t){return St(St({},t),{},{__autocomplete_indexName:e.index,__autocomplete_queryID:e.queryID})}))})}));return{results:t,hits:t.map((function(e){return e.hits})).filter(Boolean),facetHits:t.map((function(e){var t;return null===(t=e.facetHits)||void 0===t?void 0:t.map((function(e){return{label:e.value,count:e.count,_highlightResult:{label:{value:e.highlighted}}}}))})).filter(Boolean)}}(o)):o;return t.onResolve({source:t,results:o,items:i,state:n.getState()}),Array.isArray(i),i.every(Boolean),'The `getItems` function from source "'.concat(t.sourceId,'" must return an array of items but returned ').concat(JSON.stringify(void 0),".\n\nDid you forget to return items?\n\nSee: https://www.algolia.com/doc/ui-libraries/autocomplete/core-concepts/sources/#param-getitems"),{source:t,items:i}}))}function Lt(e,t){var n=t;return{then:function(t,r){return Lt(e.then(Ft(t,n,e),Ft(r,n,e)),n)},catch:function(t){return Lt(e.catch(Ft(t,n,e)),n)},finally:function(t){return t&&n.onCancelList.push(t),Lt(e.finally(Ft(t&&function(){return n.onCancelList=[],t()},n,e)),n)},cancel:function(){n.isCanceled=!0;var e=n.onCancelList;n.onCancelList=[],e.forEach((function(e){e()}))},isCanceled:function(){return!0===n.isCanceled}}}function Rt(e){return Lt(new Promise((function(t,n){return e(t,n)})),{isCanceled:!1,onCancelList:[]})}function Dt(e){return Lt(e,{isCanceled:!1,onCancelList:[]})}function Ft(e,t,n){return e?function(n){return t.isCanceled?n:e(n)}:n}function Mt(e){var t=function(e){var t=e.collections.map((function(e){return e.items.length})).reduce((function(e,t,n){var r=(e[n-1]||0)+t;return e.push(r),e}),[]).reduce((function(t,n){return n<=e.activeItemId?t+1:t}),0);return e.collections[t]}(e);if(!t)return null;var n=t.items[function(e){for(var t=e.state,n=e.collection,r=!1,o=0,a=0;!1===r;){var i=t.collections[o];if(i===n){r=!0;break}a+=i.items.length,o++}return t.activeItemId-a}({state:e,collection:t})],r=t.source;return{item:n,itemInputValue:r.getItemInputValue({item:n,state:e}),itemUrl:r.getItemUrl({item:n,state:e}),source:r}}function Bt(e){return Bt="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},Bt(e)}Rt.resolve=function(e){return Dt(Promise.resolve(e))},Rt.reject=function(e){return Dt(Promise.reject(e))};var zt=["event","nextState","props","query","refresh","store"];function Ut(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 $t(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Ut(Object(n),!0).forEach((function(t){Ht(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Ut(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function Ht(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==Bt(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==Bt(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===Bt(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function qt(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 Vt,Qt,Zt,Wt=null,Gt=(Vt=-1,Qt=-1,Zt=void 0,function(e){var t=++Vt;return Promise.resolve(e).then((function(e){return Zt&&t<Qt?Zt:(Qt=t,Zt=e,e)}))});function Yt(e){var t=e.event,n=e.nextState,r=void 0===n?{}:n,o=e.props,a=e.query,i=e.refresh,s=e.store,l=qt(e,zt);Wt&&o.environment.clearTimeout(Wt);var c=l.setCollections,u=l.setIsOpen,d=l.setQuery,p=l.setActiveItemId,f=l.setStatus;if(d(a),p(o.defaultActiveItemId),!a&&!1===o.openOnFocus){var g,m=s.getState().collections.map((function(e){return $t($t({},e),{},{items:[]})}));f("idle"),c(m),u(null!==(g=r.isOpen)&&void 0!==g?g:o.shouldPanelOpen({state:s.getState()}));var h=Dt(Gt(m).then((function(){return Promise.resolve()})));return s.pendingRequests.add(h)}f("loading"),Wt=o.environment.setTimeout((function(){f("stalled")}),o.stallThreshold);var b=Dt(Gt(o.getSources($t({query:a,refresh:i,state:s.getState()},l)).then((function(e){return Promise.all(e.map((function(e){return Promise.resolve(e.getItems($t({query:a,refresh:i,state:s.getState()},l))).then((function(t){return It(t,e.sourceId,s.getState())}))}))).then(At).then((function(t){return Nt(t,e,s)})).then((function(e){return function(e){var t=e.collections,n=e.props,r=e.state,o=t.reduce((function(e,t){return yt(yt({},e),{},vt({},t.source.sourceId,yt(yt({},t.source),{},{getItems:function(){return Xe(t.items)}})))}),{}),a=n.plugins.reduce((function(e,t){return t.reshape?t.reshape(e):e}),{sourcesBySourceId:o,state:r}).sourcesBySourceId;return Xe(n.reshape({sourcesBySourceId:a,sources:Object.values(a),state:r})).filter(Boolean).map((function(e){return{source:e,items:e.getItems()}}))}({collections:e,props:o,state:s.getState()})}))})))).then((function(e){var n;f("idle"),c(e);var d=o.shouldPanelOpen({state:s.getState()});u(null!==(n=r.isOpen)&&void 0!==n?n:o.openOnFocus&&!a&&d||d);var p=Mt(s.getState());if(null!==s.getState().activeItemId&&p){var g=p.item,m=p.itemInputValue,h=p.itemUrl,b=p.source;b.onActive($t({event:t,item:g,itemInputValue:m,itemUrl:h,refresh:i,source:b,state:s.getState()},l))}})).finally((function(){f("idle"),Wt&&o.environment.clearTimeout(Wt)}));return s.pendingRequests.add(b)}function Kt(e){return Kt="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},Kt(e)}var Xt=["event","props","refresh","store"];function Jt(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 en(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Jt(Object(n),!0).forEach((function(t){tn(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Jt(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function tn(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==Kt(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==Kt(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===Kt(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function nn(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 rn=/((gt|sm)-|galaxy nexus)|samsung[- ]/i;function on(e){return on="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},on(e)}var an=["props","refresh","store"],sn=["inputElement","formElement","panelElement"],ln=["inputElement"],cn=["inputElement","maxLength"],un=["sourceIndex"],dn=["sourceIndex"],pn=["item","source","sourceIndex"];function fn(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 gn(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?fn(Object(n),!0).forEach((function(t){mn(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):fn(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function mn(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==on(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==on(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===on(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function hn(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}function bn(e){var t=e.props,n=e.refresh,r=e.store,o=hn(e,an),a=function(e,t){return void 0!==t?"".concat(e,"-").concat(t):e};return{getEnvironmentProps:function(e){var n=e.inputElement,o=e.formElement,a=e.panelElement;function i(e){!r.getState().isOpen&&r.pendingRequests.isEmpty()||e.target===n||!1===[o,a].some((function(t){return n=t,r=e.target,n===r||n.contains(r);var n,r}))&&(r.dispatch("blur",null),t.debug||r.pendingRequests.cancelAll())}return gn({onTouchStart:i,onMouseDown:i,onTouchMove:function(e){!1!==r.getState().isOpen&&n===t.environment.document.activeElement&&e.target!==n&&n.blur()}},hn(e,sn))},getRootProps:function(e){return gn({role:"combobox","aria-expanded":r.getState().isOpen,"aria-haspopup":"listbox","aria-owns":r.getState().isOpen?"".concat(t.id,"-list"):void 0,"aria-labelledby":"".concat(t.id,"-label")},e)},getFormProps:function(e){e.inputElement;return gn({action:"",noValidate:!0,role:"search",onSubmit:function(a){var i;a.preventDefault(),t.onSubmit(gn({event:a,refresh:n,state:r.getState()},o)),r.dispatch("submit",null),null===(i=e.inputElement)||void 0===i||i.blur()},onReset:function(a){var i;a.preventDefault(),t.onReset(gn({event:a,refresh:n,state:r.getState()},o)),r.dispatch("reset",null),null===(i=e.inputElement)||void 0===i||i.focus()}},hn(e,ln))},getLabelProps:function(e){var n=e||{},r=n.sourceIndex,o=hn(n,un);return gn({htmlFor:"".concat(a(t.id,r),"-input"),id:"".concat(a(t.id,r),"-label")},o)},getInputProps:function(e){var a;function i(e){(t.openOnFocus||Boolean(r.getState().query))&&Yt(gn({event:e,props:t,query:r.getState().completion||r.getState().query,refresh:n,store:r},o)),r.dispatch("focus",null)}var s=e||{},l=(s.inputElement,s.maxLength),c=void 0===l?512:l,u=hn(s,cn),d=Mt(r.getState()),p=function(e){return Boolean(e&&e.match(rn))}((null===(a=t.environment.navigator)||void 0===a?void 0:a.userAgent)||""),f=null!=d&&d.itemUrl&&!p?"go":"search";return gn({"aria-autocomplete":"both","aria-activedescendant":r.getState().isOpen&&null!==r.getState().activeItemId?"".concat(t.id,"-item-").concat(r.getState().activeItemId):void 0,"aria-controls":r.getState().isOpen?"".concat(t.id,"-list"):void 0,"aria-labelledby":"".concat(t.id,"-label"),value:r.getState().completion||r.getState().query,id:"".concat(t.id,"-input"),autoComplete:"off",autoCorrect:"off",autoCapitalize:"off",enterKeyHint:f,spellCheck:"false",autoFocus:t.autoFocus,placeholder:t.placeholder,maxLength:c,type:"search",onChange:function(e){Yt(gn({event:e,props:t,query:e.currentTarget.value.slice(0,c),refresh:n,store:r},o))},onKeyDown:function(e){!function(e){var t=e.event,n=e.props,r=e.refresh,o=e.store,a=nn(e,Xt);if("ArrowUp"===t.key||"ArrowDown"===t.key){var i=function(){var e=n.environment.document.getElementById("".concat(n.id,"-item-").concat(o.getState().activeItemId));e&&(e.scrollIntoViewIfNeeded?e.scrollIntoViewIfNeeded(!1):e.scrollIntoView(!1))},s=function(){var e=Mt(o.getState());if(null!==o.getState().activeItemId&&e){var n=e.item,i=e.itemInputValue,s=e.itemUrl,l=e.source;l.onActive(en({event:t,item:n,itemInputValue:i,itemUrl:s,refresh:r,source:l,state:o.getState()},a))}};t.preventDefault(),!1===o.getState().isOpen&&(n.openOnFocus||Boolean(o.getState().query))?Yt(en({event:t,props:n,query:o.getState().query,refresh:r,store:o},a)).then((function(){o.dispatch(t.key,{nextActiveItemId:n.defaultActiveItemId}),s(),setTimeout(i,0)})):(o.dispatch(t.key,{}),s(),i())}else if("Escape"===t.key)t.preventDefault(),o.dispatch(t.key,null),o.pendingRequests.cancelAll();else if("Tab"===t.key)o.dispatch("blur",null),o.pendingRequests.cancelAll();else if("Enter"===t.key){if(null===o.getState().activeItemId||o.getState().collections.every((function(e){return 0===e.items.length})))return void(n.debug||o.pendingRequests.cancelAll());t.preventDefault();var l=Mt(o.getState()),c=l.item,u=l.itemInputValue,d=l.itemUrl,p=l.source;if(t.metaKey||t.ctrlKey)void 0!==d&&(p.onSelect(en({event:t,item:c,itemInputValue:u,itemUrl:d,refresh:r,source:p,state:o.getState()},a)),n.navigator.navigateNewTab({itemUrl:d,item:c,state:o.getState()}));else if(t.shiftKey)void 0!==d&&(p.onSelect(en({event:t,item:c,itemInputValue:u,itemUrl:d,refresh:r,source:p,state:o.getState()},a)),n.navigator.navigateNewWindow({itemUrl:d,item:c,state:o.getState()}));else if(t.altKey);else{if(void 0!==d)return p.onSelect(en({event:t,item:c,itemInputValue:u,itemUrl:d,refresh:r,source:p,state:o.getState()},a)),void n.navigator.navigate({itemUrl:d,item:c,state:o.getState()});Yt(en({event:t,nextState:{isOpen:!1},props:n,query:u,refresh:r,store:o},a)).then((function(){p.onSelect(en({event:t,item:c,itemInputValue:u,itemUrl:d,refresh:r,source:p,state:o.getState()},a))}))}}}(gn({event:e,props:t,refresh:n,store:r},o))},onFocus:i,onBlur:ke,onClick:function(n){e.inputElement!==t.environment.document.activeElement||r.getState().isOpen||i(n)}},u)},getPanelProps:function(e){return gn({onMouseDown:function(e){e.preventDefault()},onMouseLeave:function(){r.dispatch("mouseleave",null)}},e)},getListProps:function(e){var n=e||{},r=n.sourceIndex,o=hn(n,dn);return gn({role:"listbox","aria-labelledby":"".concat(a(t.id,r),"-label"),id:"".concat(a(t.id,r),"-list")},o)},getItemProps:function(e){var i=e.item,s=e.source,l=e.sourceIndex,c=hn(e,pn);return gn({id:"".concat(a(t.id,l),"-item-").concat(i.__autocomplete_id),role:"option","aria-selected":r.getState().activeItemId===i.__autocomplete_id,onMouseMove:function(e){if(i.__autocomplete_id!==r.getState().activeItemId){r.dispatch("mousemove",i.__autocomplete_id);var t=Mt(r.getState());if(null!==r.getState().activeItemId&&t){var a=t.item,s=t.itemInputValue,l=t.itemUrl,c=t.source;c.onActive(gn({event:e,item:a,itemInputValue:s,itemUrl:l,refresh:n,source:c,state:r.getState()},o))}}},onMouseDown:function(e){e.preventDefault()},onClick:function(e){var a=s.getItemInputValue({item:i,state:r.getState()}),l=s.getItemUrl({item:i,state:r.getState()});(l?Promise.resolve():Yt(gn({event:e,nextState:{isOpen:!1},props:t,query:a,refresh:n,store:r},o))).then((function(){s.onSelect(gn({event:e,item:i,itemInputValue:a,itemUrl:l,refresh:n,source:s,state:r.getState()},o))}))}},c)}}}var yn=[{segment:"autocomplete-core",version:"1.9.2"}];function vn(e){return vn="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},vn(e)}function wn(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 kn(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?wn(Object(n),!0).forEach((function(t){Sn(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):wn(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function Sn(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==vn(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==vn(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===vn(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function _n(e){var t,n,r,o,a=e.plugins,i=e.options,s=null===(t=((null===(n=i.__autocomplete_metadata)||void 0===n?void 0:n.userAgents)||[])[0])||void 0===t?void 0:t.segment,l=s?Sn({},s,Object.keys((null===(r=i.__autocomplete_metadata)||void 0===r?void 0:r.options)||{})):{};return{plugins:a.map((function(e){return{name:e.name,options:Object.keys(e.__autocomplete_pluginOptions||[])}})),options:kn({"autocomplete-core":Object.keys(i)},l),ua:yn.concat((null===(o=i.__autocomplete_metadata)||void 0===o?void 0:o.userAgents)||[])}}function xn(e){var t,n=e.state;return!1===n.isOpen||null===n.activeItemId?null:(null===(t=Mt(n))||void 0===t?void 0:t.itemInputValue)||null}function En(e,t,n,r){if(!n)return null;if(e<0&&(null===t||null!==r&&0===t))return n+e;var o=(null===t?-1:t)+e;return o<=-1||o>=n?null===r?null:0:o}function On(e){return On="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},On(e)}function Pn(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 jn(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Pn(Object(n),!0).forEach((function(t){Cn(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Pn(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function Cn(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==On(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==On(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===On(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var Tn=function(e,t){switch(t.type){case"setActiveItemId":case"mousemove":return jn(jn({},e),{},{activeItemId:t.payload});case"setQuery":return jn(jn({},e),{},{query:t.payload,completion:null});case"setCollections":return jn(jn({},e),{},{collections:t.payload});case"setIsOpen":return jn(jn({},e),{},{isOpen:t.payload});case"setStatus":return jn(jn({},e),{},{status:t.payload});case"setContext":return jn(jn({},e),{},{context:jn(jn({},e.context),t.payload)});case"ArrowDown":var n=jn(jn({},e),{},{activeItemId:t.payload.hasOwnProperty("nextActiveItemId")?t.payload.nextActiveItemId:En(1,e.activeItemId,rt(e),t.props.defaultActiveItemId)});return jn(jn({},n),{},{completion:xn({state:n})});case"ArrowUp":var r=jn(jn({},e),{},{activeItemId:En(-1,e.activeItemId,rt(e),t.props.defaultActiveItemId)});return jn(jn({},r),{},{completion:xn({state:r})});case"Escape":return e.isOpen?jn(jn({},e),{},{activeItemId:null,isOpen:!1,completion:null}):jn(jn({},e),{},{activeItemId:null,query:"",status:"idle",collections:[]});case"submit":return jn(jn({},e),{},{activeItemId:null,isOpen:!1,status:"idle"});case"reset":return jn(jn({},e),{},{activeItemId:!0===t.props.openOnFocus?t.props.defaultActiveItemId:null,status:"idle",query:""});case"focus":return jn(jn({},e),{},{activeItemId:t.props.defaultActiveItemId,isOpen:(t.props.openOnFocus||Boolean(e.query))&&t.props.shouldPanelOpen({state:e})});case"blur":return t.props.debug?e:jn(jn({},e),{},{isOpen:!1,activeItemId:null});case"mouseleave":return jn(jn({},e),{},{activeItemId:t.props.defaultActiveItemId});default:return"The reducer action ".concat(JSON.stringify(t.type)," is not supported."),e}};function In(e){return In="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},In(e)}function An(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 Nn(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?An(Object(n),!0).forEach((function(t){Ln(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):An(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function Ln(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==In(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==In(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===In(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Rn(e){var t=[],n=mt(e,t),r=Ke(Tn,n,(function(e){var t=e.prevState,r=e.state;n.onStateChange(Nn({prevState:t,state:r,refresh:i,navigator:n.navigator},o))})),o=function(e){var t=e.store;return{setActiveItemId:function(e){t.dispatch("setActiveItemId",e)},setQuery:function(e){t.dispatch("setQuery",e)},setCollections:function(e){var n=0,r=e.map((function(e){return tt(tt({},e),{},{items:Xe(e.items).map((function(e){return tt(tt({},e),{},{__autocomplete_id:n++})}))})}));t.dispatch("setCollections",r)},setIsOpen:function(e){t.dispatch("setIsOpen",e)},setStatus:function(e){t.dispatch("setStatus",e)},setContext:function(e){t.dispatch("setContext",e)}}}({store:r}),a=bn(Nn({props:n,refresh:i,store:r,navigator:n.navigator},o));function i(){return Yt(Nn({event:new Event("input"),nextState:{isOpen:r.getState().isOpen},props:n,navigator:n.navigator,query:r.getState().query,refresh:i,store:r},o))}if(e.insights&&!n.plugins.some((function(e){return"aa.algoliaInsightsPlugin"===e.name}))){var s="boolean"==typeof e.insights?{}:e.insights;n.plugins.push(Ze(s))}return n.plugins.forEach((function(e){var r;return null===(r=e.subscribe)||void 0===r?void 0:r.call(e,Nn(Nn({},o),{},{navigator:n.navigator,refresh:i,onSelect:function(e){t.push({onSelect:e})},onActive:function(e){t.push({onActive:e})},onResolve:function(e){t.push({onResolve:e})}}))})),function(e){var t,n,r=e.metadata,o=e.environment;if(null===(t=o.navigator)||void 0===t||null===(n=t.userAgent)||void 0===n?void 0:n.includes("Algolia Crawler")){var a=o.document.createElement("meta"),i=o.document.querySelector("head");a.name="algolia:metadata",setTimeout((function(){a.content=JSON.stringify(r),i.appendChild(a)}),0)}}({metadata:_n({plugins:n.plugins,options:e}),environment:n.environment}),Nn(Nn({refresh:i,navigator:n.navigator},a),o)}function Dn(e){return{current:e}}function Fn(e){return 0===e.collections.length?0:e.collections.reduce((function(e,t){return e+t.items.length}),0)}function Mn(e,t){var n=void 0;return function(){for(var r=arguments.length,o=new Array(r),a=0;a<r;a++)o[a]=arguments[a];n&&clearTimeout(n),n=setTimeout((function(){return e.apply(void 0,o)}),t)}}var Bn=function(e,t,n,r){var o;t[0]=0;for(var a=1;a<t.length;a++){var i=t[a++],s=t[a]?(t[0]|=i?1:2,n[t[a++]]):t[++a];3===i?r[0]=s:4===i?r[1]=Object.assign(r[1]||{},s):5===i?(r[1]=r[1]||{})[t[++a]]=s:6===i?r[1][t[++a]]+=s+"":i?(o=e.apply(s,Bn(e,s,n,["",null])),r.push(o),s[0]?t[0]|=2:(t[a-2]=0,t[a]=o)):r.push(s)}return r},zn=new Map;function Un(e){var t=zn.get(this);return t||(t=new Map,zn.set(this,t)),(t=Bn(this,t.get(e)||(t.set(e,t=function(e){for(var t,n,r=1,o="",a="",i=[0],s=function(e){1===r&&(e||(o=o.replace(/^\s*\n\s*|\s*\n\s*$/g,"")))?i.push(0,e,o):3===r&&(e||o)?(i.push(3,e,o),r=2):2===r&&"..."===o&&e?i.push(4,e,0):2===r&&o&&!e?i.push(5,0,!0,o):r>=5&&((o||!e&&5===r)&&(i.push(r,0,o,n),r=6),e&&(i.push(r,e,0,n),r=6)),o=""},l=0;l<e.length;l++){l&&(1===r&&s(),s(l));for(var c=0;c<e[l].length;c++)t=e[l][c],1===r?"<"===t?(s(),i=[i],r=3):o+=t:4===r?"--"===o&&">"===t?(r=1,o=""):o=t+o[0]:a?t===a?a="":o+=t:'"'===t||"'"===t?a=t:">"===t?(s(),r=1):r&&("="===t?(r=5,n=o,o=""):"/"===t&&(r<5||">"===e[l][c+1])?(s(),3===r&&(i=i[0]),r=i,(i=i[0]).push(2,0,r),r=0):" "===t||"\t"===t||"\n"===t||"\r"===t?(s(),r=2):o+=t),3===r&&"!--"===o&&(r=4,i=i[0])}return s(),i}(e)),t),arguments,[])).length>1?t:t[0]}var $n=function(e){var t=e.environment,n=t.document.createElementNS("http://www.w3.org/2000/svg","svg");n.setAttribute("class","aa-SubmitIcon"),n.setAttribute("viewBox","0 0 24 24"),n.setAttribute("width","20"),n.setAttribute("height","20"),n.setAttribute("fill","currentColor");var r=t.document.createElementNS("http://www.w3.org/2000/svg","path");return r.setAttribute("d","M16.041 15.856c-0.034 0.026-0.067 0.055-0.099 0.087s-0.060 0.064-0.087 0.099c-1.258 1.213-2.969 1.958-4.855 1.958-1.933 0-3.682-0.782-4.95-2.050s-2.050-3.017-2.050-4.95 0.782-3.682 2.050-4.95 3.017-2.050 4.95-2.050 3.682 0.782 4.95 2.050 2.050 3.017 2.050 4.95c0 1.886-0.745 3.597-1.959 4.856zM21.707 20.293l-3.675-3.675c1.231-1.54 1.968-3.493 1.968-5.618 0-2.485-1.008-4.736-2.636-6.364s-3.879-2.636-6.364-2.636-4.736 1.008-6.364 2.636-2.636 3.879-2.636 6.364 1.008 4.736 2.636 6.364 3.879 2.636 6.364 2.636c2.125 0 4.078-0.737 5.618-1.968l3.675 3.675c0.391 0.391 1.024 0.391 1.414 0s0.391-1.024 0-1.414z"),n.appendChild(r),n},Hn=function(e){var t=e.environment,n=t.document.createElementNS("http://www.w3.org/2000/svg","svg");n.setAttribute("class","aa-ClearIcon"),n.setAttribute("viewBox","0 0 24 24"),n.setAttribute("width","18"),n.setAttribute("height","18"),n.setAttribute("fill","currentColor");var r=t.document.createElementNS("http://www.w3.org/2000/svg","path");return r.setAttribute("d","M5.293 6.707l5.293 5.293-5.293 5.293c-0.391 0.391-0.391 1.024 0 1.414s1.024 0.391 1.414 0l5.293-5.293 5.293 5.293c0.391 0.391 1.024 0.391 1.414 0s0.391-1.024 0-1.414l-5.293-5.293 5.293-5.293c0.391-0.391 0.391-1.024 0-1.414s-1.024-0.391-1.414 0l-5.293 5.293-5.293-5.293c-0.391-0.391-1.024-0.391-1.414 0s-0.391 1.024 0 1.414z"),n.appendChild(r),n},qn=function(e){var t=e.environment.document.createElementNS("http://www.w3.org/2000/svg","svg");return t.setAttribute("class","aa-LoadingIcon"),t.setAttribute("viewBox","0 0 100 100"),t.setAttribute("width","20"),t.setAttribute("height","20"),t.innerHTML='<circle\n cx="50"\n cy="50"\n fill="none"\n r="35"\n stroke="currentColor"\n stroke-dasharray="164.93361431346415 56.97787143782138"\n stroke-width="6"\n>\n <animateTransform\n attributeName="transform"\n type="rotate"\n repeatCount="indefinite"\n dur="1s"\n values="0 50 50;90 50 50;180 50 50;360 50 50"\n keyTimes="0;0.40;0.65;1"\n />\n</circle>',t},Vn=["ontouchstart","ontouchend","ontouchmove","ontouchcancel"];function Qn(e,t,n){e[t]=null===n?"":"number"!=typeof n?n:n+"px"}function Zn(e){this._listeners[e.type](e)}function Wn(e,t,n){var r,o,a=e[t];if("style"===t)if("string"==typeof n)e.style=n;else if(null===n)e.style="";else for(t in n)a&&n[t]===a[t]||Qn(e.style,t,n[t]);else"o"===t[0]&&"n"===t[1]?(r=t!==(t=t.replace(/Capture$/,"")),((o=t.toLowerCase())in e||Vn.includes(o))&&(t=o),t=t.slice(2),e._listeners||(e._listeners={}),e._listeners[t]=n,n?a||e.addEventListener(t,Zn,r):e.removeEventListener(t,Zn,r)):"list"!==t&&"tagName"!==t&&"form"!==t&&"type"!==t&&"size"!==t&&"download"!==t&&"href"!==t&&t in e?e[t]=null==n?"":n:"function"!=typeof n&&"dangerouslySetInnerHTML"!==t&&(null==n||!1===n&&!/^ar/.test(t)?e.removeAttribute(t):e.setAttribute(t,n))}function Gn(e){return"onChange"===e?"onInput":e}function Yn(e,t){for(var n in t)Wn(e,Gn(n),t[n])}function Kn(e,t){for(var n in t)"o"===n[0]&&"n"===n[1]||Wn(e,Gn(n),t[n])}var Xn=["children"];function Jn(e){return function(e){if(Array.isArray(e))return er(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"==typeof e)return er(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return er(e,t)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function er(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 tr(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}function nr(e){return function(t,n){var r=n.children,o=void 0===r?[]:r,a=tr(n,Xn),i=e.document.createElement(t);return Yn(i,a),i.append.apply(i,Jn(o)),i}}function rr(e){return rr="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},rr(e)}var or=["autocompleteScopeApi","environment","classNames","getInputProps","getInputPropsCore","isDetached","state"];function ar(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 ir(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?ar(Object(n),!0).forEach((function(t){sr(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):ar(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function sr(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==rr(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==rr(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===rr(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function lr(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 cr=function(e){var t=e.autocompleteScopeApi,n=e.environment,r=(e.classNames,e.getInputProps),o=e.getInputPropsCore,a=e.isDetached,i=e.state,s=lr(e,or),l=nr(n)("input",s),c=r(ir({state:i,props:o({inputElement:l}),inputElement:l},t));return Yn(l,ir(ir({},c),{},{onKeyDown:function(e){a&&"Tab"===e.key||c.onKeyDown(e)}})),l};function ur(e){return ur="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},ur(e)}function dr(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 pr(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?dr(Object(n),!0).forEach((function(t){fr(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):dr(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function fr(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==ur(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==ur(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===ur(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var gr=0;var mr,hr,br,yr,vr,wr,kr,Sr={},_r=[],xr=/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i,Er=Array.isArray;function Or(e,t){for(var n in t)e[n]=t[n];return e}function Pr(e){var t=e.parentNode;t&&t.removeChild(e)}function jr(e,t,n){var r,o,a,i={};for(a in t)"key"==a?r=t[a]:"ref"==a?o=t[a]:i[a]=t[a];if(arguments.length>2&&(i.children=arguments.length>3?mr.call(arguments,2):n),"function"==typeof e&&null!=e.defaultProps)for(a in e.defaultProps)void 0===i[a]&&(i[a]=e.defaultProps[a]);return Cr(e,i,r,o,null)}function Cr(e,t,n,r,o){var a={type:e,props:t,key:n,ref:r,__k:null,__:null,__b:0,__e:null,__d:void 0,__c:null,__h:null,constructor:void 0,__v:null==o?++br:o};return null==o&&null!=hr.vnode&&hr.vnode(a),a}function Tr(e){return e.children}function Ir(e,t){this.props=e,this.context=t}function Ar(e,t){if(null==t)return e.__?Ar(e.__,e.__.__k.indexOf(e)+1):null;for(var n;t<e.__k.length;t++)if(null!=(n=e.__k[t])&&null!=n.__e)return n.__e;return"function"==typeof e.type?Ar(e):null}function Nr(e){var t,n;if(null!=(e=e.__)&&null!=e.__c){for(e.__e=e.__c.base=null,t=0;t<e.__k.length;t++)if(null!=(n=e.__k[t])&&null!=n.__e){e.__e=e.__c.base=n.__e;break}return Nr(e)}}function Lr(e){(!e.__d&&(e.__d=!0)&&yr.push(e)&&!Rr.__r++||vr!==hr.debounceRendering)&&((vr=hr.debounceRendering)||wr)(Rr)}function Rr(){var e,t,n,r,o,a,i,s;for(yr.sort(kr);e=yr.shift();)e.__d&&(t=yr.length,r=void 0,o=void 0,i=(a=(n=e).__v).__e,(s=n.__P)&&(r=[],(o=Or({},a)).__v=a.__v+1,qr(s,a,o,n.__n,void 0!==s.ownerSVGElement,null!=a.__h?[i]:null,r,null==i?Ar(a):i,a.__h),Vr(r,a),a.__e!=i&&Nr(a)),yr.length>t&&yr.sort(kr));Rr.__r=0}function Dr(e,t,n,r,o,a,i,s,l,c){var u,d,p,f,g,m,h,b=r&&r.__k||_r,y=b.length;for(n.__k=[],u=0;u<t.length;u++)if(null!=(f=n.__k[u]=null==(f=t[u])||"boolean"==typeof f||"function"==typeof f?null:"string"==typeof f||"number"==typeof f||"bigint"==typeof f?Cr(null,f,null,null,f):Er(f)?Cr(Tr,{children:f},null,null,null):f.__b>0?Cr(f.type,f.props,f.key,f.ref?f.ref:null,f.__v):f)){if(f.__=n,f.__b=n.__b+1,null===(p=b[u])||p&&f.key==p.key&&f.type===p.type)b[u]=void 0;else for(d=0;d<y;d++){if((p=b[d])&&f.key==p.key&&f.type===p.type){b[d]=void 0;break}p=null}qr(e,f,p=p||Sr,o,a,i,s,l,c),g=f.__e,(d=f.ref)&&p.ref!=d&&(h||(h=[]),p.ref&&h.push(p.ref,null,f),h.push(d,f.__c||g,f)),null!=g?(null==m&&(m=g),"function"==typeof f.type&&f.__k===p.__k?f.__d=l=Fr(f,l,e):l=Mr(e,f,p,b,g,l),"function"==typeof n.type&&(n.__d=l)):l&&p.__e==l&&l.parentNode!=e&&(l=Ar(p))}for(n.__e=m,u=y;u--;)null!=b[u]&&("function"==typeof n.type&&null!=b[u].__e&&b[u].__e==n.__d&&(n.__d=Br(r).nextSibling),Wr(b[u],b[u]));if(h)for(u=0;u<h.length;u++)Zr(h[u],h[++u],h[++u])}function Fr(e,t,n){for(var r,o=e.__k,a=0;o&&a<o.length;a++)(r=o[a])&&(r.__=e,t="function"==typeof r.type?Fr(r,t,n):Mr(n,r,r,o,r.__e,t));return t}function Mr(e,t,n,r,o,a){var i,s,l;if(void 0!==t.__d)i=t.__d,t.__d=void 0;else if(null==n||o!=a||null==o.parentNode)e:if(null==a||a.parentNode!==e)e.appendChild(o),i=null;else{for(s=a,l=0;(s=s.nextSibling)&&l<r.length;l+=1)if(s==o)break e;e.insertBefore(o,a),i=a}return void 0!==i?i:o.nextSibling}function Br(e){var t,n,r;if(null==e.type||"string"==typeof e.type)return e.__e;if(e.__k)for(t=e.__k.length-1;t>=0;t--)if((n=e.__k[t])&&(r=Br(n)))return r;return null}function zr(e,t,n){"-"===t[0]?e.setProperty(t,null==n?"":n):e[t]=null==n?"":"number"!=typeof n||xr.test(t)?n:n+"px"}function Ur(e,t,n,r,o){var a;e:if("style"===t)if("string"==typeof n)e.style.cssText=n;else{if("string"==typeof r&&(e.style.cssText=r=""),r)for(t in r)n&&t in n||zr(e.style,t,"");if(n)for(t in n)r&&n[t]===r[t]||zr(e.style,t,n[t])}else if("o"===t[0]&&"n"===t[1])a=t!==(t=t.replace(/Capture$/,"")),t=t.toLowerCase()in e?t.toLowerCase().slice(2):t.slice(2),e.l||(e.l={}),e.l[t+a]=n,n?r||e.addEventListener(t,a?Hr:$r,a):e.removeEventListener(t,a?Hr:$r,a);else if("dangerouslySetInnerHTML"!==t){if(o)t=t.replace(/xlink(H|:h)/,"h").replace(/sName$/,"s");else if("width"!==t&&"height"!==t&&"href"!==t&&"list"!==t&&"form"!==t&&"tabIndex"!==t&&"download"!==t&&"rowSpan"!==t&&"colSpan"!==t&&t in e)try{e[t]=null==n?"":n;break e}catch(e){}"function"==typeof n||(null==n||!1===n&&"-"!==t[4]?e.removeAttribute(t):e.setAttribute(t,n))}}function $r(e){return this.l[e.type+!1](hr.event?hr.event(e):e)}function Hr(e){return this.l[e.type+!0](hr.event?hr.event(e):e)}function qr(e,t,n,r,o,a,i,s,l){var c,u,d,p,f,g,m,h,b,y,v,w,k,S,_,x=t.type;if(void 0!==t.constructor)return null;null!=n.__h&&(l=n.__h,s=t.__e=n.__e,t.__h=null,a=[s]),(c=hr.__b)&&c(t);try{e:if("function"==typeof x){if(h=t.props,b=(c=x.contextType)&&r[c.__c],y=c?b?b.props.value:c.__:r,n.__c?m=(u=t.__c=n.__c).__=u.__E:("prototype"in x&&x.prototype.render?t.__c=u=new x(h,y):(t.__c=u=new Ir(h,y),u.constructor=x,u.render=Gr),b&&b.sub(u),u.props=h,u.state||(u.state={}),u.context=y,u.__n=r,d=u.__d=!0,u.__h=[],u._sb=[]),null==u.__s&&(u.__s=u.state),null!=x.getDerivedStateFromProps&&(u.__s==u.state&&(u.__s=Or({},u.__s)),Or(u.__s,x.getDerivedStateFromProps(h,u.__s))),p=u.props,f=u.state,u.__v=t,d)null==x.getDerivedStateFromProps&&null!=u.componentWillMount&&u.componentWillMount(),null!=u.componentDidMount&&u.__h.push(u.componentDidMount);else{if(null==x.getDerivedStateFromProps&&h!==p&&null!=u.componentWillReceiveProps&&u.componentWillReceiveProps(h,y),!u.__e&&null!=u.shouldComponentUpdate&&!1===u.shouldComponentUpdate(h,u.__s,y)||t.__v===n.__v){for(t.__v!==n.__v&&(u.props=h,u.state=u.__s,u.__d=!1),u.__e=!1,t.__e=n.__e,t.__k=n.__k,t.__k.forEach((function(e){e&&(e.__=t)})),v=0;v<u._sb.length;v++)u.__h.push(u._sb[v]);u._sb=[],u.__h.length&&i.push(u);break e}null!=u.componentWillUpdate&&u.componentWillUpdate(h,u.__s,y),null!=u.componentDidUpdate&&u.__h.push((function(){u.componentDidUpdate(p,f,g)}))}if(u.context=y,u.props=h,u.__P=e,w=hr.__r,k=0,"prototype"in x&&x.prototype.render){for(u.state=u.__s,u.__d=!1,w&&w(t),c=u.render(u.props,u.state,u.context),S=0;S<u._sb.length;S++)u.__h.push(u._sb[S]);u._sb=[]}else do{u.__d=!1,w&&w(t),c=u.render(u.props,u.state,u.context),u.state=u.__s}while(u.__d&&++k<25);u.state=u.__s,null!=u.getChildContext&&(r=Or(Or({},r),u.getChildContext())),d||null==u.getSnapshotBeforeUpdate||(g=u.getSnapshotBeforeUpdate(p,f)),Dr(e,Er(_=null!=c&&c.type===Tr&&null==c.key?c.props.children:c)?_:[_],t,n,r,o,a,i,s,l),u.base=t.__e,t.__h=null,u.__h.length&&i.push(u),m&&(u.__E=u.__=null),u.__e=!1}else null==a&&t.__v===n.__v?(t.__k=n.__k,t.__e=n.__e):t.__e=Qr(n.__e,t,n,r,o,a,i,l);(c=hr.diffed)&&c(t)}catch(e){t.__v=null,(l||null!=a)&&(t.__e=s,t.__h=!!l,a[a.indexOf(s)]=null),hr.__e(e,t,n)}}function Vr(e,t){hr.__c&&hr.__c(t,e),e.some((function(t){try{e=t.__h,t.__h=[],e.some((function(e){e.call(t)}))}catch(e){hr.__e(e,t.__v)}}))}function Qr(e,t,n,r,o,a,i,s){var l,c,u,d=n.props,p=t.props,f=t.type,g=0;if("svg"===f&&(o=!0),null!=a)for(;g<a.length;g++)if((l=a[g])&&"setAttribute"in l==!!f&&(f?l.localName===f:3===l.nodeType)){e=l,a[g]=null;break}if(null==e){if(null===f)return document.createTextNode(p);e=o?document.createElementNS("http://www.w3.org/2000/svg",f):document.createElement(f,p.is&&p),a=null,s=!1}if(null===f)d===p||s&&e.data===p||(e.data=p);else{if(a=a&&mr.call(e.childNodes),c=(d=n.props||Sr).dangerouslySetInnerHTML,u=p.dangerouslySetInnerHTML,!s){if(null!=a)for(d={},g=0;g<e.attributes.length;g++)d[e.attributes[g].name]=e.attributes[g].value;(u||c)&&(u&&(c&&u.__html==c.__html||u.__html===e.innerHTML)||(e.innerHTML=u&&u.__html||""))}if(function(e,t,n,r,o){var a;for(a in n)"children"===a||"key"===a||a in t||Ur(e,a,null,n[a],r);for(a in t)o&&"function"!=typeof t[a]||"children"===a||"key"===a||"value"===a||"checked"===a||n[a]===t[a]||Ur(e,a,t[a],n[a],r)}(e,p,d,o,s),u)t.__k=[];else if(Dr(e,Er(g=t.props.children)?g:[g],t,n,r,o&&"foreignObject"!==f,a,i,a?a[0]:n.__k&&Ar(n,0),s),null!=a)for(g=a.length;g--;)null!=a[g]&&Pr(a[g]);s||("value"in p&&void 0!==(g=p.value)&&(g!==e.value||"progress"===f&&!g||"option"===f&&g!==d.value)&&Ur(e,"value",g,d.value,!1),"checked"in p&&void 0!==(g=p.checked)&&g!==e.checked&&Ur(e,"checked",g,d.checked,!1))}return e}function Zr(e,t,n){try{"function"==typeof e?e(t):e.current=t}catch(e){hr.__e(e,n)}}function Wr(e,t,n){var r,o;if(hr.unmount&&hr.unmount(e),(r=e.ref)&&(r.current&&r.current!==e.__e||Zr(r,null,t)),null!=(r=e.__c)){if(r.componentWillUnmount)try{r.componentWillUnmount()}catch(e){hr.__e(e,t)}r.base=r.__P=null,e.__c=void 0}if(r=e.__k)for(o=0;o<r.length;o++)r[o]&&Wr(r[o],t,n||"function"!=typeof e.type);n||null==e.__e||Pr(e.__e),e.__=e.__e=e.__d=void 0}function Gr(e,t,n){return this.constructor(e,n)}function Yr(e,t,n){var r,o,a;hr.__&&hr.__(e,t),o=(r="function"==typeof n)?null:n&&n.__k||t.__k,a=[],qr(t,e=(!r&&n||t).__k=jr(Tr,null,[e]),o||Sr,Sr,void 0!==t.ownerSVGElement,!r&&n?[n]:o?null:t.firstChild?mr.call(t.childNodes):null,a,!r&&n?n:o?o.__e:t.firstChild,r),Vr(a,e)}function Kr(e,t){return t.reduce((function(e,t){return e&&e[t]}),e)}mr=_r.slice,hr={__e:function(e,t,n,r){for(var o,a,i;t=t.__;)if((o=t.__c)&&!o.__)try{if((a=o.constructor)&&null!=a.getDerivedStateFromError&&(o.setState(a.getDerivedStateFromError(e)),i=o.__d),null!=o.componentDidCatch&&(o.componentDidCatch(e,r||{}),i=o.__d),i)return o.__E=o}catch(t){e=t}throw e}},br=0,Ir.prototype.setState=function(e,t){var n;n=null!=this.__s&&this.__s!==this.state?this.__s:this.__s=Or({},this.state),"function"==typeof e&&(e=e(Or({},n),this.props)),e&&Or(n,e),null!=e&&this.__v&&(t&&this._sb.push(t),Lr(this))},Ir.prototype.forceUpdate=function(e){this.__v&&(this.__e=!0,e&&this.__h.push(e),Lr(this))},Ir.prototype.render=Tr,yr=[],wr="function"==typeof Promise?Promise.prototype.then.bind(Promise.resolve()):setTimeout,kr=function(e,t){return e.__v.__b-t.__v.__b},Rr.__r=0;var Xr="__aa-highlight__",Jr="__/aa-highlight__";function eo(e){var t=e.highlightedValue.split(Xr),n=t.shift(),r=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];return{get:function(){return e},add:function(t){var n=e[e.length-1];(null==n?void 0:n.isHighlighted)===t.isHighlighted?e[e.length-1]={value:n.value+t.value,isHighlighted:n.isHighlighted}:e.push(t)}}}(n?[{value:n,isHighlighted:!1}]:[]);return t.forEach((function(e){var t=e.split(Jr);r.add({value:t[0],isHighlighted:!0}),""!==t[1]&&r.add({value:t[1],isHighlighted:!1})})),r.get()}function to(e){return function(e){if(Array.isArray(e))return no(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"==typeof e)return no(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return no(e,t)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function no(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 ro(e){var t=e.hit,n=e.attribute,r=Array.isArray(n)?n:[n],o=Kr(t,["_highlightResult"].concat(to(r),["value"]));return"string"!=typeof o&&(o=Kr(t,r)||""),eo({highlightedValue:o})}function oo(e){var t=e.createElement,n=e.Fragment;function r(e){var r=e.hit,o=e.attribute,a=e.tagName,i=void 0===a?"mark":a;return t(n,{},ro({hit:r,attribute:o}).map((function(e,n){return e.isHighlighted?t(i,{key:n},e.value):e.value})))}return r.__autocomplete_componentName="Highlight",r}var ao={"&":"&","<":"<",">":">",""":'"',"'":"'"},io=new RegExp(/\w/i),so=/&(amp|quot|lt|gt|#39);/g,lo=RegExp(so.source);function co(e,t){var n,r,o,a=e[t],i=(null===(n=e[t+1])||void 0===n?void 0:n.isHighlighted)||!0,s=(null===(r=e[t-1])||void 0===r?void 0:r.isHighlighted)||!0;return io.test((o=a.value)&&lo.test(o)?o.replace(so,(function(e){return ao[e]})):o)||s!==i?a.isHighlighted:s}function uo(e){return uo="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},uo(e)}function po(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 fo(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?po(Object(n),!0).forEach((function(t){go(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):po(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function go(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==uo(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==uo(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===uo(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function mo(e){return e.some((function(e){return e.isHighlighted}))?e.map((function(t,n){return fo(fo({},t),{},{isHighlighted:!co(e,n)})})):e.map((function(e){return fo(fo({},e),{},{isHighlighted:!1})}))}function ho(e){var t=e.createElement,n=e.Fragment;function r(e){var r,o=e.hit,a=e.attribute,i=e.tagName,s=void 0===i?"mark":i;return t(n,{},(r={hit:o,attribute:a},mo(ro(r))).map((function(e,n){return e.isHighlighted?t(s,{key:n},e.value):e.value})))}return r.__autocomplete_componentName="ReverseHighlight",r}function bo(e){return function(e){if(Array.isArray(e))return yo(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"==typeof e)return yo(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return yo(e,t)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function yo(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 vo(e){var t=e.hit,n=e.attribute,r=Array.isArray(n)?n:[n],o=Kr(t,["_snippetResult"].concat(bo(r),["value"]));return"string"!=typeof o&&(o=Kr(t,r)||""),eo({highlightedValue:o})}function wo(e){var t=e.createElement,n=e.Fragment;function r(e){var r,o=e.hit,a=e.attribute,i=e.tagName,s=void 0===i?"mark":i;return t(n,{},(r={hit:o,attribute:a},mo(vo(r))).map((function(e,n){return e.isHighlighted?t(s,{key:n},e.value):e.value})))}return r.__autocomplete_componentName="ReverseSnippet",r}function ko(e){var t=e.createElement,n=e.Fragment;function r(e){var r=e.hit,o=e.attribute,a=e.tagName,i=void 0===a?"mark":a;return t(n,{},vo({hit:r,attribute:o}).map((function(e,n){return e.isHighlighted?t(i,{key:n},e.value):e.value})))}return r.__autocomplete_componentName="Snippet",r}function So(e,t){if("string"==typeof t){var n=e.document.querySelector(t);return"The element ".concat(JSON.stringify(t)," is not in the document."),n}return t}function _o(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return t.reduce((function(e,t){return Object.keys(t).forEach((function(n){var r=e[n],o=t[n];r!==o&&(e[n]=[r,o].filter(Boolean).join(" "))})),e}),{})}function xo(e){return xo="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},xo(e)}var Eo=["classNames","container","getEnvironmentProps","getFormProps","getInputProps","getItemProps","getLabelProps","getListProps","getPanelProps","getRootProps","panelContainer","panelPlacement","render","renderNoResults","renderer","detachedMediaQuery","components","translations"];function Oo(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 Po(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Oo(Object(n),!0).forEach((function(t){jo(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Oo(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function jo(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==xo(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==xo(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===xo(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Co(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 To={clearButton:"aa-ClearButton",detachedCancelButton:"aa-DetachedCancelButton",detachedContainer:"aa-DetachedContainer",detachedFormContainer:"aa-DetachedFormContainer",detachedOverlay:"aa-DetachedOverlay",detachedSearchButton:"aa-DetachedSearchButton",detachedSearchButtonIcon:"aa-DetachedSearchButtonIcon",detachedSearchButtonPlaceholder:"aa-DetachedSearchButtonPlaceholder",detachedSearchButtonQuery:"aa-DetachedSearchButtonQuery",form:"aa-Form",input:"aa-Input",inputWrapper:"aa-InputWrapper",inputWrapperPrefix:"aa-InputWrapperPrefix",inputWrapperSuffix:"aa-InputWrapperSuffix",item:"aa-Item",label:"aa-Label",list:"aa-List",loadingIndicator:"aa-LoadingIndicator",panel:"aa-Panel",panelLayout:"aa-PanelLayout aa-Panel--scrollable",root:"aa-Autocomplete",source:"aa-Source",sourceFooter:"aa-SourceFooter",sourceHeader:"aa-SourceHeader",sourceNoResults:"aa-SourceNoResults",submitButton:"aa-SubmitButton"},Io=function(e,t){var n=e.children;(0,e.render)(n,t)},Ao={createElement:jr,Fragment:Tr,render:Yr};function No(e){var t=e.panelPlacement,n=e.container,r=e.form,o=e.environment,a=n.getBoundingClientRect(),i=(o.pageYOffset||o.document.documentElement.scrollTop||o.document.body.scrollTop||0)+a.top+a.height;switch(t){case"start":return{top:i,left:a.left};case"end":return{top:i,right:o.document.documentElement.clientWidth-(a.left+a.width)};case"full-width":return{top:i,left:0,right:0,width:"unset",maxWidth:"unset"};case"input-wrapper-width":var s=r.getBoundingClientRect();return{top:i,left:s.left,right:o.document.documentElement.clientWidth-(s.left+s.width),width:"unset",maxWidth:"unset"};default:throw new Error("[Autocomplete] The `panelPlacement` value ".concat(JSON.stringify(t)," is not valid."))}}function Lo(e){return Lo="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},Lo(e)}function Ro(){return Ro=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},Ro.apply(this,arguments)}function Do(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 Fo(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Do(Object(n),!0).forEach((function(t){Mo(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Do(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function Mo(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==Lo(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==Lo(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===Lo(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var Bo=[{segment:"autocomplete-js",version:"1.9.2"}];function zo(e){return function(e){if(Array.isArray(e))return Uo(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"==typeof e)return Uo(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Uo(e,t)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Uo(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 $o(e){return $o="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},$o(e)}var Ho=function(e){return e&&"object"===$o(e)&&"[object Object]"===Object.prototype.toString.call(e)};function qo(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return t.reduce((function(e,t){return Object.keys(t).forEach((function(n){var r=e[n],o=t[n];Array.isArray(r)&&Array.isArray(o)?e[n]=r.concat.apply(r,zo(o)):Ho(r)&&Ho(o)?e[n]=qo(r,o):e[n]=o})),e}),{})}function Vo(e){return Vo="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},Vo(e)}function Qo(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 Zo(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Qo(Object(n),!0).forEach((function(t){Wo(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Qo(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function Wo(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==Vo(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==Vo(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===Vo(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Go(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,o,a,i,s=[],l=!0,c=!1;try{if(a=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;l=!1}else for(;!(l=(r=a.call(n)).done)&&(s.push(r.value),s.length!==t);l=!0);}catch(u){c=!0,o=u}finally{try{if(!l&&null!=n.return&&(i=n.return(),Object(i)!==i))return}finally{if(c)throw o}}return s}}(e,t)||function(e,t){if(!e)return;if("string"==typeof e)return Yo(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Yo(e,t)}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Yo(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}var Ko=["components"];function Xo(e){return Xo="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},Xo(e)}function Jo(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}function ea(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 ta(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?ea(Object(n),!0).forEach((function(t){na(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):ea(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function na(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==Xo(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==Xo(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===Xo(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function ra(e){var t,n=function(){var e=[],t=[];function n(n){e.push(n);var r=n();t.push(r)}return{runEffect:n,cleanupEffects:function(){var e=t;t=[],e.forEach((function(e){e()}))},runEffects:function(){var t=e;e=[],t.forEach((function(e){n(e)}))}}}(),r=n.runEffect,o=n.cleanupEffects,a=n.runEffects,i=(t=[],{reactive:function(e){var n=e(),r={_fn:e,_ref:{current:n},get value(){return this._ref.current},set value(e){this._ref.current=e}};return t.push(r),r},runReactives:function(){t.forEach((function(e){e._ref.current=e._fn()}))}}),s=i.reactive,l=i.runReactives,c=Dn(!1),u=Dn(e),d=Dn(void 0),p=s((function(){return function(e){var t,n=e.classNames,r=e.container,o=e.getEnvironmentProps,a=e.getFormProps,i=e.getInputProps,s=e.getItemProps,l=e.getLabelProps,c=e.getListProps,u=e.getPanelProps,d=e.getRootProps,p=e.panelContainer,f=e.panelPlacement,g=e.render,m=e.renderNoResults,h=e.renderer,b=e.detachedMediaQuery,y=e.components,v=e.translations,w=Co(e,Eo),k="undefined"!=typeof window?window:{},S=So(k,r);S.tagName;var _=Po(Po({},Ao),h),x={Highlight:oo(_),ReverseHighlight:ho(_),ReverseSnippet:wo(_),Snippet:ko(_)};return{renderer:{classNames:_o(To,null!=n?n:{}),container:S,getEnvironmentProps:null!=o?o:function(e){return e.props},getFormProps:null!=a?a:function(e){return e.props},getInputProps:null!=i?i:function(e){return e.props},getItemProps:null!=s?s:function(e){return e.props},getLabelProps:null!=l?l:function(e){return e.props},getListProps:null!=c?c:function(e){return e.props},getPanelProps:null!=u?u:function(e){return e.props},getRootProps:null!=d?d:function(e){return e.props},panelContainer:p?So(k,p):k.document.body,panelPlacement:null!=f?f:"input-wrapper-width",render:null!=g?g:Io,renderNoResults:m,renderer:_,detachedMediaQuery:null!=b?b:getComputedStyle(k.document.documentElement).getPropertyValue("--aa-detached-media-query"),components:Po(Po({},x),y),translations:Po(Po({},{clearButtonTitle:"Clear",detachedCancelButtonText:"Cancel",submitButtonTitle:"Submit"}),v)},core:Po(Po({},w),{},{id:null!==(t=w.id)&&void 0!==t?t:"autocomplete-".concat(gr++),environment:k})}}(u.current)})),f=s((function(){return p.value.core.environment.matchMedia(p.value.renderer.detachedMediaQuery).matches})),g=s((function(){return Rn(ta(ta({},p.value.core),{},{onStateChange:function(e){var t,n,r;c.current=e.state.collections.some((function(e){return e.source.templates.noResults})),null===(t=d.current)||void 0===t||t.call(d,e),null===(n=(r=p.value.core).onStateChange)||void 0===n||n.call(r,e)},shouldPanelOpen:u.current.shouldPanelOpen||function(e){var t=e.state;if(f.value)return!0;var n=Fn(t)>0;if(!p.value.core.openOnFocus&&!t.query)return n;var r=Boolean(c.current||p.value.renderer.renderNoResults);return!n&&r||n},__autocomplete_metadata:{userAgents:Bo,options:e}}))})),m=Dn(ta({collections:[],completion:null,context:{},isOpen:!1,query:"",activeItemId:null,status:"idle"},p.value.core.initialState)),h={getEnvironmentProps:p.value.renderer.getEnvironmentProps,getFormProps:p.value.renderer.getFormProps,getInputProps:p.value.renderer.getInputProps,getItemProps:p.value.renderer.getItemProps,getLabelProps:p.value.renderer.getLabelProps,getListProps:p.value.renderer.getListProps,getPanelProps:p.value.renderer.getPanelProps,getRootProps:p.value.renderer.getRootProps},b={setActiveItemId:g.value.setActiveItemId,setQuery:g.value.setQuery,setCollections:g.value.setCollections,setIsOpen:g.value.setIsOpen,setStatus:g.value.setStatus,setContext:g.value.setContext,refresh:g.value.refresh,navigator:g.value.navigator},y=s((function(){return Un.bind(p.value.renderer.renderer.createElement)})),v=s((function(){return function(e){var t=e.autocomplete,n=e.autocompleteScopeApi,r=e.classNames,o=e.environment,a=e.isDetached,i=e.placeholder,s=void 0===i?"Search":i,l=e.propGetters,c=e.setIsModalOpen,u=e.state,d=e.translations,p=nr(o),f=l.getRootProps(pr({state:u,props:t.getRootProps({})},n)),g=p("div",pr({class:r.root},f)),m=p("div",{class:r.detachedContainer,onMouseDown:function(e){e.stopPropagation()}}),h=p("div",{class:r.detachedOverlay,children:[m],onMouseDown:function(){c(!1),t.setIsOpen(!1)}}),b=l.getLabelProps(pr({state:u,props:t.getLabelProps({})},n)),y=p("button",{class:r.submitButton,type:"submit",title:d.submitButtonTitle,children:[$n({environment:o})]}),v=p("label",pr({class:r.label,children:[y]},b)),w=p("button",{class:r.clearButton,type:"reset",title:d.clearButtonTitle,children:[Hn({environment:o})]}),k=p("div",{class:r.loadingIndicator,children:[qn({environment:o})]}),S=cr({class:r.input,environment:o,state:u,getInputProps:l.getInputProps,getInputPropsCore:t.getInputProps,autocompleteScopeApi:n,isDetached:a}),_=p("div",{class:r.inputWrapperPrefix,children:[v,k]}),x=p("div",{class:r.inputWrapperSuffix,children:[w]}),E=p("div",{class:r.inputWrapper,children:[S]}),O=l.getFormProps(pr({state:u,props:t.getFormProps({inputElement:S})},n)),P=p("form",pr({class:r.form,children:[_,E,x]},O)),j=l.getPanelProps(pr({state:u,props:t.getPanelProps({})},n)),C=p("div",pr({class:r.panel},j)),T=p("div",{class:r.detachedSearchButtonQuery,textContent:u.query}),I=p("div",{class:r.detachedSearchButtonPlaceholder,hidden:Boolean(u.query),textContent:s});if(a){var A=p("div",{class:r.detachedSearchButtonIcon,children:[$n({environment:o})]}),N=p("button",{type:"button",class:r.detachedSearchButton,onClick:function(){c(!0)},children:[A,I,T]}),L=p("button",{type:"button",class:r.detachedCancelButton,textContent:d.detachedCancelButtonText,onTouchStart:function(e){e.stopPropagation()},onClick:function(){t.setIsOpen(!1),c(!1)}}),R=p("div",{class:r.detachedFormContainer,children:[P,L]});m.appendChild(R),g.appendChild(N)}else g.appendChild(P);return{detachedContainer:m,detachedOverlay:h,detachedSearchButtonQuery:T,detachedSearchButtonPlaceholder:I,inputWrapper:E,input:S,root:g,form:P,label:v,submitButton:y,clearButton:w,loadingIndicator:k,panel:C}}({autocomplete:g.value,autocompleteScopeApi:b,classNames:p.value.renderer.classNames,environment:p.value.core.environment,isDetached:f.value,placeholder:p.value.core.placeholder,propGetters:h,setIsModalOpen:_,state:m.current,translations:p.value.renderer.translations})}));function w(){Yn(v.value.panel,{style:f.value?{}:No({panelPlacement:p.value.renderer.panelPlacement,container:v.value.root,form:v.value.form,environment:p.value.core.environment})})}function k(e){m.current=e;var t={autocomplete:g.value,autocompleteScopeApi:b,classNames:p.value.renderer.classNames,components:p.value.renderer.components,container:p.value.renderer.container,html:y.value,dom:v.value,panelContainer:f.value?v.value.detachedContainer:p.value.renderer.panelContainer,propGetters:h,state:m.current,renderer:p.value.renderer.renderer},n=!Fn(e)&&!c.current&&p.value.renderer.renderNoResults||p.value.renderer.render;!function(e){var t=e.autocomplete,n=e.autocompleteScopeApi,r=e.dom,o=e.propGetters,a=e.state;Kn(r.root,o.getRootProps(Fo({state:a,props:t.getRootProps({})},n))),Kn(r.input,o.getInputProps(Fo({state:a,props:t.getInputProps({inputElement:r.input}),inputElement:r.input},n))),Yn(r.label,{hidden:"stalled"===a.status}),Yn(r.loadingIndicator,{hidden:"stalled"!==a.status}),Yn(r.clearButton,{hidden:!a.query}),Yn(r.detachedSearchButtonQuery,{textContent:a.query}),Yn(r.detachedSearchButtonPlaceholder,{hidden:Boolean(a.query)})}(t),function(e,t){var n=t.autocomplete,r=t.autocompleteScopeApi,o=t.classNames,a=t.html,i=t.dom,s=t.panelContainer,l=t.propGetters,c=t.state,u=t.components,d=t.renderer;if(c.isOpen){s.contains(i.panel)||"loading"===c.status||s.appendChild(i.panel),i.panel.classList.toggle("aa-Panel--stalled","stalled"===c.status);var p=c.collections.filter((function(e){var t=e.source,n=e.items;return t.templates.noResults||n.length>0})).map((function(e,t){var i=e.source,s=e.items;return d.createElement("section",{key:t,className:o.source,"data-autocomplete-source-id":i.sourceId},i.templates.header&&d.createElement("div",{className:o.sourceHeader},i.templates.header({components:u,createElement:d.createElement,Fragment:d.Fragment,items:s,source:i,state:c,html:a})),i.templates.noResults&&0===s.length?d.createElement("div",{className:o.sourceNoResults},i.templates.noResults({components:u,createElement:d.createElement,Fragment:d.Fragment,source:i,state:c,html:a})):d.createElement("ul",Ro({className:o.list},l.getListProps(Fo({state:c,props:n.getListProps({sourceIndex:t})},r))),s.map((function(e){var s=n.getItemProps({item:e,source:i,sourceIndex:t});return d.createElement("li",Ro({key:s.id,className:o.item},l.getItemProps(Fo({state:c,props:s},r))),i.templates.item({components:u,createElement:d.createElement,Fragment:d.Fragment,item:e,state:c,html:a}))}))),i.templates.footer&&d.createElement("div",{className:o.sourceFooter},i.templates.footer({components:u,createElement:d.createElement,Fragment:d.Fragment,items:s,source:i,state:c,html:a})))})),f=d.createElement(d.Fragment,null,d.createElement("div",{className:o.panelLayout},p),d.createElement("div",{className:"aa-GradientBottom"})),g=p.reduce((function(e,t){return e[t.props["data-autocomplete-source-id"]]=t,e}),{});e(Fo(Fo({children:f,state:c,sections:p,elements:g},d),{},{components:u,html:a},r),i.panel)}else s.contains(i.panel)&&s.removeChild(i.panel)}(n,t)}function S(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};o();var t,n,r=p.value.renderer,i=r.components,s=Jo(r,Ko);u.current=qo(s,p.value.core,{components:(t=i,n=function(e){return!e.value.hasOwnProperty("__autocomplete_componentName")},Object.entries(t).reduce((function(e,t){var r=Go(t,2),o=r[0],a=r[1];return n({key:o,value:a})?Zo(Zo({},e),{},Wo({},o,a)):e}),{})),initialState:m.current},e),l(),a(),g.value.refresh().then((function(){k(m.current)}))}function _(e){requestAnimationFrame((function(){var t=p.value.core.environment.document.body.contains(v.value.detachedOverlay);e!==t&&(e?(p.value.core.environment.document.body.appendChild(v.value.detachedOverlay),p.value.core.environment.document.body.classList.add("aa-Detached"),v.value.input.focus()):(p.value.core.environment.document.body.removeChild(v.value.detachedOverlay),p.value.core.environment.document.body.classList.remove("aa-Detached")))}))}return r((function(){var e=g.value.getEnvironmentProps({formElement:v.value.form,panelElement:v.value.panel,inputElement:v.value.input});return Yn(p.value.core.environment,e),function(){Yn(p.value.core.environment,Object.keys(e).reduce((function(e,t){return ta(ta({},e),{},na({},t,void 0))}),{}))}})),r((function(){var e=f.value?p.value.core.environment.document.body:p.value.renderer.panelContainer,t=f.value?v.value.detachedOverlay:v.value.panel;return f.value&&m.current.isOpen&&_(!0),k(m.current),function(){e.contains(t)&&e.removeChild(t)}})),r((function(){var e=p.value.renderer.container;return e.appendChild(v.value.root),function(){e.removeChild(v.value.root)}})),r((function(){var e=Mn((function(e){k(e.state)}),0);return d.current=function(t){var n=t.state,r=t.prevState;(f.value&&r.isOpen!==n.isOpen&&_(n.isOpen),f.value||!n.isOpen||r.isOpen||w(),n.query!==r.query)&&p.value.core.environment.document.querySelectorAll(".aa-Panel--scrollable").forEach((function(e){0!==e.scrollTop&&(e.scrollTop=0)}));e({state:n})},function(){d.current=void 0}})),r((function(){var e=Mn((function(){var e=f.value;f.value=p.value.core.environment.matchMedia(p.value.renderer.detachedMediaQuery).matches,e!==f.value?S({}):requestAnimationFrame(w)}),20);return p.value.core.environment.addEventListener("resize",e),function(){p.value.core.environment.removeEventListener("resize",e)}})),r((function(){if(!f.value)return function(){};function e(e){v.value.detachedContainer.classList.toggle("aa-DetachedContainer--modal",e)}function t(t){e(t.matches)}var n=p.value.core.environment.matchMedia(getComputedStyle(p.value.core.environment.document.documentElement).getPropertyValue("--aa-detached-modal-media-query"));e(n.matches);var r=Boolean(n.addEventListener);return r?n.addEventListener("change",t):n.addListener(t),function(){r?n.removeEventListener("change",t):n.removeListener(t)}})),r((function(){return requestAnimationFrame(w),function(){}})),ta(ta({},b),{},{update:S,destroy:function(){o()}})}var oa=n(79722);const aa=n(72278),ia=aa;var sa=n(813),la=n.n(sa);function ca(){const e=(0,s.TH)(),t=(0,s.k6)(),{siteConfig:{baseUrl:n}}=(0,le.Z)(),[o,a]=(0,r.useState)({terms:[],isDocsOrBlog:!1});return(0,r.useEffect)((()=>{if(!e.state?.cmfcmfhighlight||0===e.state.cmfcmfhighlight.terms.length)return;a(e.state.cmfcmfhighlight);const{cmfcmfhighlight:n,...r}=e.state;t.replace({...e,state:r})}),[e.state?.cmfcmfhighlight,t,e]),(0,r.useEffect)((()=>{if(0===o.terms.length)return;const e=o.isDocsOrBlog?document.getElementsByTagName("article")[0]:document.getElementsByTagName("main")[0];if(!e)return;const t=new(la())(e),n={ignoreJoiners:!0};return t.mark(o.terms,n),()=>t.unmark(n)}),[o,n]),null}var ua=n(2591),da=n(90356);function pa(e){let{document:t}=e;const[n,r]=t.sectionRoute.split("#");let o=n;return r&&(o+="#"+r),o}const fa={documents:[],index:ia((function(){this.ref("id"),this.field("title"),this.field("content")}))};const ga=()=>{const e=(0,B.Z)(),[t,o]=(0,r.useState)((()=>!!e&&"dark"===document.documentElement.getAttribute("data-theme")));(0,r.useEffect)((()=>{const e=new MutationObserver((()=>{o("dark"===document.documentElement.getAttribute("data-theme"))}));return e.observe(document.documentElement,{attributes:!0,attributeFilter:["data-theme"]}),()=>e.disconnect()}),[]);const{siteConfig:{baseUrl:a}}=(0,le.Z)(),{titleBoost:i,contentBoost:c,tagsBoost:u,parentCategoriesBoost:d,indexDocSidebarParentCategories:p,maxSearchResults:f}=(0,ua.eZ)("@cmfcmf/docusaurus-search-local"),g=(0,s.k6)(),{tags:m}=function(){const{i18n:e}=(0,le.Z)(),t=n(48878).z1(),r=[da.H,...t];return{locale:e.currentLocale,tags:r}}(),h=(0,r.useRef)(m);(0,r.useEffect)((()=>{h.current=m}),[m]);const b=(0,r.useRef)({}),y=async e=>{const t=b.current[e];switch(t?.state){case"ready":return t;case void 0:{const t=[];b.current[e]={state:"loading",callbacks:t};const n=await async function(e,t){{let r;try{const n=await fetch(`${e}search-index-${t}.json`);if(!n.ok)return fa;r=await n.json()}catch(n){return fa}return{documents:r.documents,index:ia.Index.load(r.index)}}}(a,e);return t.forEach((e=>e(n))),b.current[e]={state:"ready",...n}}case"loading":return new Promise((e=>{t.callbacks.push(e)}))}},v=(0,l.I)({message:"cmfcmf/d-s-l.searchBar.placeholder",description:"Placeholder shown in the searchbar"}),w=(0,r.useRef)(null),k=(0,r.useRef)(null);return(0,r.useEffect)((()=>{if(w.current)return k.current=ra({container:w.current,placeholder:v,renderer:{createElement:r.createElement,Fragment:r.Fragment,render:be.render},navigator:{navigate(e){let{item:t,itemUrl:n}=e;g.push(n,{cmfcmfhighlight:{terms:t.terms,isDocsOrBlog:"docs"===t.document.type||"blog"===t.document.type}})}},detachedMediaQuery:"",defaultActiveItemId:0,translations:{clearButtonTitle:(0,l.I)({message:"cmfcmf/d-s-l.searchBar.clearButtonTitle",description:"Title of the button to clear the current search input"}),detachedCancelButtonText:(0,l.I)({message:"cmfcmf/d-s-l.searchBar.detachedCancelButtonText",description:"Text of the button to close the detached search window"}),submitButtonTitle:(0,l.I)({message:"cmfcmf/d-s-l.searchBar.submitButtonTitle",description:"Title of the button to submit a new search"})},getSources(e){let{query:t}=e;return[{sourceId:"search-results",templates:{item(e){let{item:t}=e;const n=pa(t);return r.createElement("a",{href:n,className:"aa-ItemLink",onClick:e=>{e.preventDefault(),g.push(n,{cmfcmfhighlight:{terms:t.terms,isDocsOrBlog:"docs"===t.document.type||"blog"===t.document.type}})}},r.createElement("div",{className:"aa-ItemContent"},r.createElement("div",{className:"aa-ItemContentBody"},r.createElement("div",{className:"aa-ItemContentTitle"},t.document.sectionTitle),t.document.pageTitle!==t.document.sectionTitle&&r.createElement("div",{className:"aa-ItemContentDescription"},t.document.pageTitle))),r.createElement("div",{className:"aa-ItemActions"},r.createElement("button",{className:"aa-ItemActionButton aa-DesktopOnly aa-ActiveOnly",type:"button",title:"Select"},r.createElement("svg",{viewBox:"0 0 24 24",width:"20",height:"20",fill:"currentColor"},r.createElement("path",{d:"M18.984 6.984h2.016v6h-15.188l3.609 3.609-1.406 1.406-6-6 6-6 1.406 1.406-3.609 3.609h13.172v-4.031z"})))))},noResults:()=>r.createElement("div",{className:"aa-ItemContent"},r.createElement("div",{className:"aa-ItemContentBody"},(0,l.I)({message:"cmfcmf/d-s-l.searchBar.noResults",description:"message shown if no results are found"})))},getItemUrl(e){let{item:t}=e;return pa(t)},async getItems(){const e=h.current,n=await Promise.all(e.map((e=>y(e)))),r=(e=>aa.tokenizer(e).map((e=>e.str)))(t);return n.flatMap((e=>{let{index:t,documents:n}=e;return t.query((e=>{e.term(r,{fields:["title"],boost:i}),e.term(r,{fields:["title"],boost:i,wildcard:ia.Query.wildcard.TRAILING}),e.term(r,{fields:["content"],boost:c}),e.term(r,{fields:["content"],boost:c,wildcard:ia.Query.wildcard.TRAILING}),e.term(r,{fields:["tags"],boost:u}),e.term(r,{fields:["tags"],boost:u,wildcard:ia.Query.wildcard.TRAILING}),p&&(e.term(r,{fields:["sidebarParentCategories"],boost:d}),e.term(r,{fields:["sidebarParentCategories"],boost:d,wildcard:ia.Query.wildcard.TRAILING}))})).slice(0,f).map((e=>({document:n.find((t=>t.id.toString()===e.ref)),score:e.score,terms:r})))})).sort(((e,t)=>t.score-e.score)).slice(0,f)}}]}}),()=>k.current?.destroy()}),[f]),r.createElement(r.Fragment,null,r.createElement(oa.Z,null,r.createElement("body",{"data-theme":t?"dark":"light"})),r.createElement(ca,null),r.createElement("div",{className:"dsla-search-wrapper"},r.createElement("div",{className:"dsla-search-field",ref:w,"data-tags":m.join(",")})))},ma={navbarSearchContainer:"navbarSearchContainer_Bca1"};function ha(e){let{children:t,className:n}=e;return(0,u.jsx)("div",{className:(0,o.Z)(n,ma.navbarSearchContainer),children:t})}var ba=n(48878),ya=n(68879);var va=n(5055);function wa(e,t){return t.alternateDocVersions[e.name]??function(e){return e.docs.find((t=>t.id===e.mainDocId))}(e)}const ka={default:ae,localeDropdown:function(e){let{mobile:t,dropdownItemsBefore:n,dropdownItemsAfter:r,queryString:o="",...a}=e;const{i18n:{currentLocale:i,locales:c,localeConfigs:d}}=(0,le.Z)(),p=(0,ge.l)(),{search:f,hash:g}=(0,s.TH)(),m=[...n,...c.map((e=>{const n=`${`pathname://${p.createUrl({locale:e,fullyQualified:!1})}`}${f}${g}${o}`;return{label:d[e].label,lang:d[e].htmlLang,to:n,target:"_self",autoAddBaseUrl:!1,className:e===i?t?"menu__link--active":"dropdown__link--active":""}})),...r],h=t?(0,l.I)({message:"Languages",id:"theme.navbar.mobileLanguageDropdown.label",description:"The label for the mobile language switcher dropdown"}):d[i].label;return(0,u.jsx)(fe,{...a,mobile:t,label:(0,u.jsxs)(u.Fragment,{children:[(0,u.jsx)(me,{className:he}),h]}),items:m})},search:function(e){let{mobile:t,className:n}=e;return t?null:(0,u.jsx)(ha,{className:n,children:(0,u.jsx)(ga,{})})},dropdown:fe,html:function(e){let{value:t,className:n,mobile:r=!1,isDropdownItem:a=!1}=e;const i=a?"li":"div";return(0,u.jsx)(i,{className:(0,o.Z)({navbar__item:!r&&!a,"menu__list-item":r},n),dangerouslySetInnerHTML:{__html:t}})},doc:function(e){let{docId:t,label:n,docsPluginId:r,...o}=e;const{activeDoc:a}=(0,ba.Iw)(r),i=(0,ya.vY)(t,r),s=a?.path===i?.path;return null===i||i.unlisted&&!s?null:(0,u.jsx)(ae,{exact:!0,...o,isActive:()=>s||!!a?.sidebar&&a.sidebar===i.sidebar,label:n??i.id,to:i.path})},docSidebar:function(e){let{sidebarId:t,label:n,docsPluginId:r,...o}=e;const{activeDoc:a}=(0,ba.Iw)(r),i=(0,ya.oz)(t,r).link;if(!i)throw new Error(`DocSidebarNavbarItem: Sidebar with ID "${t}" doesn't have anything to be linked to.`);return(0,u.jsx)(ae,{exact:!0,...o,isActive:()=>a?.sidebar===t,label:n??i.label,to:i.path})},docsVersion:function(e){let{label:t,to:n,docsPluginId:r,...o}=e;const a=(0,ya.lO)(r)[0],i=t??a.label,s=n??(e=>e.docs.find((t=>t.id===e.mainDocId)))(a).path;return(0,u.jsx)(ae,{...o,label:i,to:s})},docsVersionDropdown:function(e){let{mobile:t,docsPluginId:n,dropdownActiveClassDisabled:r,dropdownItemsBefore:o,dropdownItemsAfter:a,...i}=e;const{search:c,hash:d}=(0,s.TH)(),p=(0,ba.Iw)(n),f=(0,ba.gB)(n),{savePreferredVersionName:g}=(0,va.J)(n),m=[...o,...f.map((function(e){const t=wa(e,p);return{label:e.label,to:`${t.path}${c}${d}`,isActive:()=>e===p.activeVersion,onClick:()=>g(e.name)}})),...a],h=(0,ya.lO)(n)[0],b=t&&m.length>1?(0,l.I)({id:"theme.navbar.mobileVersionsDropdown.label",message:"Versions",description:"The label for the navbar versions dropdown on mobile view"}):h.label,y=t&&m.length>1?void 0:wa(h,p).path;return m.length<=1?(0,u.jsx)(ae,{...i,mobile:t,label:b,to:y,isActive:r?()=>!1:void 0}):(0,u.jsx)(fe,{...i,mobile:t,label:b,to:y,items:m,isActive:r?()=>!1:void 0})}},Sa=ka;function _a(e){let{type:t,...n}=e;const r=function(e,t){return e&&"default"!==e?e:"items"in t?"dropdown":"default"}(t,n),o=Sa[r];if(!o)throw new Error(`No NavbarItem component found for type "${t}".`);return(0,u.jsx)(o,{...n})}function xa(){const e=(0,C.e)(),t=(0,w.L)().navbar.items;return(0,u.jsx)("ul",{className:"menu__list",children:t.map(((t,n)=>(0,r.createElement)(_a,{mobile:!0,...t,onClick:()=>e.toggle(),key:n})))})}function Ea(e){return(0,u.jsx)("button",{...e,type:"button",className:"clean-btn navbar-sidebar__back",children:(0,u.jsx)(l.Z,{id:"theme.navbar.mobileSidebarSecondaryMenu.backButtonLabel",description:"The label of the back button to return to main menu, inside the mobile navbar sidebar secondary menu (notably used to display the docs sidebar)",children:"\u2190 Back to main menu"})})}function Oa(){const e=0===(0,w.L)().navbar.items.length,t=D();return(0,u.jsxs)(u.Fragment,{children:[!e&&(0,u.jsx)(Ea,{onClick:()=>t.hide()}),t.content]})}function Pa(){const e=(0,C.e)();var t;return void 0===(t=e.shown)&&(t=!0),(0,r.useEffect)((()=>(document.body.style.overflow=t?"hidden":"visible",()=>{document.body.style.overflow="visible"})),[t]),e.shouldRender?(0,u.jsx)(F,{header:(0,u.jsx)(Y,{}),primaryMenu:(0,u.jsx)(xa,{}),secondaryMenu:(0,u.jsx)(Oa,{})}):null}const ja={navbarHideable:"navbarHideable_m1mJ",navbarHidden:"navbarHidden_jGov"};function Ca(e){return(0,u.jsx)("div",{role:"presentation",...e,className:(0,o.Z)("navbar-sidebar__backdrop",e.className)})}function Ta(e){let{children:t}=e;const{navbar:{hideOnScroll:n,style:a}}=(0,w.L)(),i=(0,C.e)(),{navbarRef:s,isNavbarVisible:d}=function(e){const[t,n]=(0,r.useState)(e),o=(0,r.useRef)(!1),a=(0,r.useRef)(0),i=(0,r.useCallback)((e=>{null!==e&&(a.current=e.getBoundingClientRect().height)}),[]);return(0,T.RF)(((t,r)=>{let{scrollY:i}=t;if(!e)return;if(i<a.current)return void n(!0);if(o.current)return void(o.current=!1);const s=r?.scrollY,l=document.documentElement.scrollHeight-a.current,c=window.innerHeight;s&&i>=s?n(!1):i+c<l&&n(!0)})),(0,c.S)((t=>{if(!e)return;const r=t.location.hash;if(r?document.getElementById(r.substring(1)):void 0)return o.current=!0,void n(!1);n(!0)})),{navbarRef:i,isNavbarVisible:t}}(n);return(0,u.jsxs)("nav",{ref:s,"aria-label":(0,l.I)({id:"theme.NavBar.navAriaLabel",message:"Main",description:"The ARIA label for the main navigation"}),className:(0,o.Z)("navbar","navbar--fixed-top",n&&[ja.navbarHideable,!d&&ja.navbarHidden],{"navbar--dark":"dark"===a,"navbar--primary":"primary"===a,"navbar-sidebar--show":i.shown}),children:[t,(0,u.jsx)(Ca,{onClick:i.toggle}),(0,u.jsx)(Pa,{})]})}var Ia=n(48820);const Aa={errorBoundaryError:"errorBoundaryError_a6uf",errorBoundaryFallback:"errorBoundaryFallback_VBag"};function Na(e){return(0,u.jsx)("button",{type:"button",...e,children:(0,u.jsx)(l.Z,{id:"theme.ErrorPageContent.tryAgain",description:"The label of the button to try again rendering when the React error boundary captures an error",children:"Try again"})})}function La(e){let{error:t}=e;const n=(0,Ia.BN)(t).map((e=>e.message)).join("\n\nCause:\n");return(0,u.jsx)("p",{className:Aa.errorBoundaryError,children:n})}class Ra extends r.Component{componentDidCatch(e,t){throw this.props.onError(e,t)}render(){return this.props.children}}const Da="right";function Fa(e){let{width:t=30,height:n=30,className:r,...o}=e;return(0,u.jsx)("svg",{className:r,width:t,height:n,viewBox:"0 0 30 30","aria-hidden":"true",...o,children:(0,u.jsx)("path",{stroke:"currentColor",strokeLinecap:"round",strokeMiterlimit:"10",strokeWidth:"2",d:"M4 7h22M4 15h22M4 23h22"})})}function Ma(){const{toggle:e,shown:t}=(0,C.e)();return(0,u.jsx)("button",{onClick:e,"aria-label":(0,l.I)({id:"theme.docs.sidebar.toggleSidebarButtonAriaLabel",message:"Toggle navigation bar",description:"The ARIA label for hamburger menu button of mobile navigation"}),"aria-expanded":t,className:"navbar__toggle clean-btn",type:"button",children:(0,u.jsx)(Fa,{})})}const Ba={colorModeToggle:"colorModeToggle_DEke"};function za(e){let{items:t}=e;return(0,u.jsx)(u.Fragment,{children:t.map(((e,t)=>(0,u.jsx)(Ra,{onError:t=>new Error(`A theme navbar item failed to render.\nPlease double-check the following navbar item (themeConfig.navbar.items) of your Docusaurus config:\n${JSON.stringify(e,null,2)}`,{cause:t}),children:(0,u.jsx)(_a,{...e})},t)))})}function Ua(e){let{left:t,right:n}=e;return(0,u.jsxs)("div",{className:"navbar__inner",children:[(0,u.jsx)("div",{className:"navbar__items",children:t}),(0,u.jsx)("div",{className:"navbar__items navbar__items--right",children:n})]})}function $a(){const e=(0,C.e)(),t=(0,w.L)().navbar.items,[n,r]=function(e){function t(e){return"left"===(e.position??Da)}return[e.filter(t),e.filter((e=>!t(e)))]}(t),o=t.find((e=>"search"===e.type));return(0,u.jsx)(Ua,{left:(0,u.jsxs)(u.Fragment,{children:[!e.disabled&&(0,u.jsx)(Ma,{}),(0,u.jsx)(W,{}),(0,u.jsx)(za,{items:n})]}),right:(0,u.jsxs)(u.Fragment,{children:[(0,u.jsx)(za,{items:r}),(0,u.jsx)(Q,{className:Ba.colorModeToggle}),!o&&(0,u.jsx)(ha,{children:(0,u.jsx)(ga,{})})]})})}function Ha(){return(0,u.jsx)(Ta,{children:(0,u.jsx)($a,{})})}function qa(e){let{item:t}=e;const{to:n,href:r,label:o,prependBaseUrlToHref:a,...i}=t,s=(0,X.ZP)(n),l=(0,X.ZP)(r,{forcePrependBaseUrl:!0});return(0,u.jsxs)(K.Z,{className:"footer__link-item",...r?{href:a?l:r}:{to:s},...i,children:[o,r&&!(0,J.Z)(r)&&(0,u.jsx)(te.Z,{})]})}function Va(e){let{item:t}=e;return t.html?(0,u.jsx)("li",{className:"footer__item",dangerouslySetInnerHTML:{__html:t.html}}):(0,u.jsx)("li",{className:"footer__item",children:(0,u.jsx)(qa,{item:t})},t.href??t.to)}function Qa(e){let{column:t}=e;return(0,u.jsxs)("div",{className:"col footer__col",children:[(0,u.jsx)("div",{className:"footer__title",children:t.title}),(0,u.jsx)("ul",{className:"footer__items clean-list",children:t.items.map(((e,t)=>(0,u.jsx)(Va,{item:e},t)))})]})}function Za(e){let{columns:t}=e;return(0,u.jsx)("div",{className:"row footer__links",children:t.map(((e,t)=>(0,u.jsx)(Qa,{column:e},t)))})}function Wa(){return(0,u.jsx)("span",{className:"footer__link-separator",children:"\xb7"})}function Ga(e){let{item:t}=e;return t.html?(0,u.jsx)("span",{className:"footer__link-item",dangerouslySetInnerHTML:{__html:t.html}}):(0,u.jsx)(qa,{item:t})}function Ya(e){let{links:t}=e;return(0,u.jsx)("div",{className:"footer__links text--center",children:(0,u.jsx)("div",{className:"footer__links",children:t.map(((e,n)=>(0,u.jsxs)(r.Fragment,{children:[(0,u.jsx)(Ga,{item:e}),t.length!==n+1&&(0,u.jsx)(Wa,{})]},n)))})})}function Ka(e){let{links:t}=e;return function(e){return"title"in e[0]}(t)?(0,u.jsx)(Za,{columns:t}):(0,u.jsx)(Ya,{links:t})}var Xa=n(64553);const Ja={footerLogoLink:"footerLogoLink_BH7S"};function ei(e){let{logo:t}=e;const{withBaseUrl:n}=(0,X.Cg)(),r={light:n(t.src),dark:n(t.srcDark??t.src)};return(0,u.jsx)(Xa.Z,{className:(0,o.Z)("footer__logo",t.className),alt:t.alt,sources:r,width:t.width,height:t.height,style:t.style})}function ti(e){let{logo:t}=e;return t.href?(0,u.jsx)(K.Z,{href:t.href,className:Ja.footerLogoLink,target:t.target,children:(0,u.jsx)(ei,{logo:t})}):(0,u.jsx)(ei,{logo:t})}function ni(e){let{copyright:t}=e;return(0,u.jsx)("div",{className:"footer__copyright",dangerouslySetInnerHTML:{__html:t}})}function ri(e){let{style:t,links:n,logo:r,copyright:a}=e;return(0,u.jsx)("footer",{className:(0,o.Z)("footer",{"footer--dark":"dark"===t}),children:(0,u.jsxs)("div",{className:"container container-fluid",children:[n,(r||a)&&(0,u.jsxs)("div",{className:"footer__bottom text--center",children:[r&&(0,u.jsx)("div",{className:"margin-bottom--sm",children:r}),a]})]})})}function oi(){const{footer:e}=(0,w.L)();if(!e)return null;const{copyright:t,links:n,logo:r,style:o}=e;return(0,u.jsx)(ri,{style:o,links:n&&n.length>0&&(0,u.jsx)(Ka,{links:n}),logo:r&&(0,u.jsx)(ti,{logo:r}),copyright:t&&(0,u.jsx)(ni,{copyright:t})})}const ai=r.memo(oi),ii=(0,I.Qc)([M.S,k.p,T.OC,va.L5,i.VC,function(e){let{children:t}=e;return(0,u.jsx)(A.n2,{children:(0,u.jsx)(C.M,{children:(0,u.jsx)(L,{children:t})})})}]);function si(e){let{children:t}=e;return(0,u.jsx)(ii,{children:t})}var li=n(42704);function ci(e){let{error:t,tryAgain:n}=e;return(0,u.jsx)("main",{className:"container margin-vert--xl",children:(0,u.jsx)("div",{className:"row",children:(0,u.jsxs)("div",{className:"col col--6 col--offset-3",children:[(0,u.jsx)(li.Z,{as:"h1",className:"hero__title",children:(0,u.jsx)(l.Z,{id:"theme.ErrorPageContent.title",description:"The title of the fallback page when the page crashed",children:"This page crashed."})}),(0,u.jsx)("div",{className:"margin-vert--lg",children:(0,u.jsx)(Na,{onClick:n,className:"button button--primary shadow--lw"})}),(0,u.jsx)("hr",{}),(0,u.jsx)("div",{className:"margin-vert--md",children:(0,u.jsx)(La,{error:t})})]})})})}const ui={mainWrapper:"mainWrapper_z2l0"};function di(e){const{children:t,noFooter:n,wrapperClassName:r,title:s,description:l}=e;return(0,b.t)(),(0,u.jsxs)(si,{children:[(0,u.jsx)(i.d,{title:s,description:l}),(0,u.jsx)(v,{}),(0,u.jsx)(j,{}),(0,u.jsx)(Ha,{}),(0,u.jsx)("div",{id:d,className:(0,o.Z)(h.k.wrapper.main,ui.mainWrapper,r),children:(0,u.jsx)(a.Z,{fallback:e=>(0,u.jsx)(ci,{...e}),children:t})}),!n&&(0,u.jsx)(ai,{})]})}},82546:(e,t,n)=>{"use strict";n.d(t,{Z:()=>u});n(67294);var r=n(38208),o=n(23466),a=n(75276),i=n(39581),s=n(64553),l=n(85893);function c(e){let{logo:t,alt:n,imageClassName:r}=e;const a={light:(0,o.ZP)(t.src),dark:(0,o.ZP)(t.srcDark||t.src)},i=(0,l.jsx)(s.Z,{className:t.className,sources:a,height:t.height,width:t.width,alt:n,style:t.style});return r?(0,l.jsx)("div",{className:r,children:i}):i}function u(e){const{siteConfig:{title:t}}=(0,a.Z)(),{navbar:{title:n,logo:s}}=(0,i.L)(),{imageClassName:u,titleClassName:d,...p}=e,f=(0,o.ZP)(s?.href||"/"),g=n?"":t,m=s?.alt??g;return(0,l.jsxs)(r.Z,{to:f,...p,...s?.target&&{target:s.target},children:[s&&(0,l.jsx)(c,{logo:s,alt:m,imageClassName:u}),null!=n&&(0,l.jsx)("b",{className:d,children:n})]})}},62362:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});n(67294);var r=n(79722),o=n(85893);function a(e){let{locale:t,version:n,tag:a}=e;const i=t;return(0,o.jsxs)(r.Z,{children:[t&&(0,o.jsx)("meta",{name:"docusaurus_locale",content:t}),n&&(0,o.jsx)("meta",{name:"docusaurus_version",content:n}),a&&(0,o.jsx)("meta",{name:"docusaurus_tag",content:a}),i&&(0,o.jsx)("meta",{name:"docsearch:language",content:i}),n&&(0,o.jsx)("meta",{name:"docsearch:version",content:n}),a&&(0,o.jsx)("meta",{name:"docsearch:docusaurus_tag",content:a})]})}},64553:(e,t,n)=>{"use strict";n.d(t,{Z:()=>u});var r=n(67294),o=n(788),a=n(45025),i=n(61503);const s={themedComponent:"themedComponent_mlkZ","themedComponent--light":"themedComponent--light_NVdE","themedComponent--dark":"themedComponent--dark_xIcU"};var l=n(85893);function c(e){let{className:t,children:n}=e;const c=(0,a.Z)(),{colorMode:u}=(0,i.I)();return(0,l.jsx)(l.Fragment,{children:(c?"dark"===u?["dark"]:["light"]:["light","dark"]).map((e=>{const a=n({theme:e,className:(0,o.Z)(t,s.themedComponent,s[`themedComponent--${e}`])});return(0,l.jsx)(r.Fragment,{children:a},e)}))})}function u(e){const{sources:t,className:n,alt:r,...o}=e;return(0,l.jsx)(c,{className:n,children:e=>{let{theme:n,className:a}=e;return(0,l.jsx)("img",{src:t[n],alt:r,className:a,...o})}})}},93841:(e,t,n)=>{"use strict";n.d(t,{u:()=>c,z:()=>b});var r=n(67294),o=n(29629),a=n(1290),i=n(68048),s=n(85893);const l="ease-in-out";function c(e){let{initialState:t}=e;const[n,o]=(0,r.useState)(t??!1),a=(0,r.useCallback)((()=>{o((e=>!e))}),[]);return{collapsed:n,setCollapsed:o,toggleCollapsed:a}}const u={display:"none",overflow:"hidden",height:"0px"},d={display:"block",overflow:"visible",height:"auto"};function p(e,t){const n=t?u:d;e.style.display=n.display,e.style.overflow=n.overflow,e.style.height=n.height}function f(e){let{collapsibleRef:t,collapsed:n,animation:o}=e;const a=(0,r.useRef)(!1);(0,r.useEffect)((()=>{const e=t.current;function r(){const t=e.scrollHeight,n=o?.duration??function(e){if((0,i.n)())return 1;const t=e/36;return Math.round(10*(4+15*t**.25+t/5))}(t);return{transition:`height ${n}ms ${o?.easing??l}`,height:`${t}px`}}function s(){const t=r();e.style.transition=t.transition,e.style.height=t.height}if(!a.current)return p(e,n),void(a.current=!0);return e.style.willChange="height",function(){const t=requestAnimationFrame((()=>{n?(s(),requestAnimationFrame((()=>{e.style.height=u.height,e.style.overflow=u.overflow}))):(e.style.display="block",requestAnimationFrame((()=>{s()})))}));return()=>cancelAnimationFrame(t)}()}),[t,n,o])}function g(e){if(!o.Z.canUseDOM)return e?u:d}function m(e){let{as:t="div",collapsed:n,children:o,animation:a,onCollapseTransitionEnd:i,className:l,disableSSRStyle:c}=e;const u=(0,r.useRef)(null);return f({collapsibleRef:u,collapsed:n,animation:a}),(0,s.jsx)(t,{ref:u,style:c?void 0:g(n),onTransitionEnd:e=>{"height"===e.propertyName&&(p(u.current,n),i?.(n))},className:l,children:o})}function h(e){let{collapsed:t,...n}=e;const[o,i]=(0,r.useState)(!t),[l,c]=(0,r.useState)(t);return(0,a.Z)((()=>{t||i(!0)}),[t]),(0,a.Z)((()=>{o&&c(t)}),[o,t]),o?(0,s.jsx)(m,{...n,collapsed:l}):null}function b(e){let{lazy:t,...n}=e;const r=t?h:m;return(0,s.jsx)(r,{...n})}},25461:(e,t,n)=>{"use strict";n.d(t,{n:()=>m,p:()=>g});var r=n(67294),o=n(45025),a=n(1606),i=n(20585),s=n(39581),l=n(85893);const c=(0,a.WA)("docusaurus.announcement.dismiss"),u=(0,a.WA)("docusaurus.announcement.id"),d=()=>"true"===c.get(),p=e=>c.set(String(e)),f=r.createContext(null);function g(e){let{children:t}=e;const n=function(){const{announcementBar:e}=(0,s.L)(),t=(0,o.Z)(),[n,a]=(0,r.useState)((()=>!!t&&d()));(0,r.useEffect)((()=>{a(d())}),[]);const i=(0,r.useCallback)((()=>{p(!0),a(!0)}),[]);return(0,r.useEffect)((()=>{if(!e)return;const{id:t}=e;let n=u.get();"annoucement-bar"===n&&(n="announcement-bar");const r=t!==n;u.set(t),r&&p(!1),!r&&d()||a(!1)}),[e]),(0,r.useMemo)((()=>({isActive:!!e&&!n,close:i})),[e,n,i])}();return(0,l.jsx)(f.Provider,{value:n,children:t})}function m(){const e=(0,r.useContext)(f);if(!e)throw new i.i6("AnnouncementBarProvider");return e}},61503:(e,t,n)=>{"use strict";n.d(t,{I:()=>b,S:()=>h});var r=n(67294),o=n(29629),a=n(20585),i=n(1606),s=n(39581),l=n(85893);const c=r.createContext(void 0),u="theme",d=(0,i.WA)(u),p={light:"light",dark:"dark"},f=e=>e===p.dark?p.dark:p.light,g=e=>o.Z.canUseDOM?f(document.documentElement.getAttribute("data-theme")):f(e),m=e=>{d.set(f(e))};function h(e){let{children:t}=e;const n=function(){const{colorMode:{defaultMode:e,disableSwitch:t,respectPrefersColorScheme:n}}=(0,s.L)(),[o,a]=(0,r.useState)(g(e));(0,r.useEffect)((()=>{t&&d.del()}),[t]);const i=(0,r.useCallback)((function(t,r){void 0===r&&(r={});const{persist:o=!0}=r;t?(a(t),o&&m(t)):(a(n?window.matchMedia("(prefers-color-scheme: dark)").matches?p.dark:p.light:e),d.del())}),[n,e]);(0,r.useEffect)((()=>{document.documentElement.setAttribute("data-theme",f(o))}),[o]),(0,r.useEffect)((()=>{if(t)return;const e=e=>{if(e.key!==u)return;const t=d.get();null!==t&&i(f(t))};return window.addEventListener("storage",e),()=>window.removeEventListener("storage",e)}),[t,i]);const l=(0,r.useRef)(!1);return(0,r.useEffect)((()=>{if(t&&!n)return;const e=window.matchMedia("(prefers-color-scheme: dark)"),r=()=>{window.matchMedia("print").matches||l.current?l.current=window.matchMedia("print").matches:i(null)};return e.addListener(r),()=>e.removeListener(r)}),[i,t,n]),(0,r.useMemo)((()=>({colorMode:o,setColorMode:i,get isDarkTheme(){return o===p.dark},setLightTheme(){i(p.light)},setDarkTheme(){i(p.dark)}})),[o,i])}();return(0,l.jsx)(c.Provider,{value:n,children:t})}function b(){const e=(0,r.useContext)(c);if(null==e)throw new a.i6("ColorModeProvider","Please see https://docusaurus.io/docs/api/themes/configuration#use-color-mode.");return e}},44160:(e,t,n)=>{"use strict";n.d(t,{M:()=>p,e:()=>f});var r=n(67294),o=n(5689),a=n(62550),i=n(39222),s=n(39581),l=n(20585),c=n(85893);const u=r.createContext(void 0);function d(){const e=function(){const e=(0,o.HY)(),{items:t}=(0,s.L)().navbar;return 0===t.length&&!e.component}(),t=(0,a.i)(),n=!e&&"mobile"===t,[l,c]=(0,r.useState)(!1);(0,i.Rb)((()=>{if(l)return c(!1),!1}));const u=(0,r.useCallback)((()=>{c((e=>!e))}),[]);return(0,r.useEffect)((()=>{"desktop"===t&&c(!1)}),[t]),(0,r.useMemo)((()=>({disabled:e,shouldRender:n,toggle:u,shown:l})),[e,n,u,l])}function p(e){let{children:t}=e;const n=d();return(0,c.jsx)(u.Provider,{value:n,children:t})}function f(){const e=r.useContext(u);if(void 0===e)throw new l.i6("NavbarMobileSidebarProvider");return e}},5689:(e,t,n)=>{"use strict";n.d(t,{HY:()=>l,Zo:()=>c,n2:()=>s});var r=n(67294),o=n(20585),a=n(85893);const i=r.createContext(null);function s(e){let{children:t}=e;const n=(0,r.useState)({component:null,props:null});return(0,a.jsx)(i.Provider,{value:n,children:t})}function l(){const e=(0,r.useContext)(i);if(!e)throw new o.i6("NavbarSecondaryMenuContentProvider");return e[0]}function c(e){let{component:t,props:n}=e;const a=(0,r.useContext)(i);if(!a)throw new o.i6("NavbarSecondaryMenuContentProvider");const[,s]=a,l=(0,o.Ql)(n);return(0,r.useEffect)((()=>{s({component:t,props:l})}),[s,t,l]),(0,r.useEffect)((()=>()=>s({component:null,props:null})),[s]),null}},95099:(e,t,n)=>{"use strict";n.d(t,{h:()=>o,t:()=>a});var r=n(67294);const o="navigation-with-keyboard";function a(){(0,r.useEffect)((()=>{function e(e){"keydown"===e.type&&"Tab"===e.key&&document.body.classList.add(o),"mousedown"===e.type&&document.body.classList.remove(o)}return document.addEventListener("keydown",e),document.addEventListener("mousedown",e),()=>{document.body.classList.remove(o),document.removeEventListener("keydown",e),document.removeEventListener("mousedown",e)}}),[])}},62550:(e,t,n)=>{"use strict";n.d(t,{i:()=>s});var r=n(67294),o=n(29629);const a={desktop:"desktop",mobile:"mobile",ssr:"ssr"},i=996;function s(e){let{desktopBreakpoint:t=i}=void 0===e?{}:e;const[n,s]=(0,r.useState)((()=>"ssr"));return(0,r.useEffect)((()=>{function e(){s(function(e){if(!o.Z.canUseDOM)throw new Error("getWindowSize() should only be called after React hydration");return window.innerWidth>e?a.desktop:a.mobile}(t))}return e(),window.addEventListener("resize",e),()=>{window.removeEventListener("resize",e)}}),[t]),n}},50563:(e,t,n)=>{"use strict";n.d(t,{k:()=>r});const r={page:{blogListPage:"blog-list-page",blogPostPage:"blog-post-page",blogTagsListPage:"blog-tags-list-page",blogTagPostListPage:"blog-tags-post-list-page",blogAuthorsListPage:"blog-authors-list-page",blogAuthorsPostsPage:"blog-authors-posts-page",docsDocPage:"docs-doc-page",docsTagsListPage:"docs-tags-list-page",docsTagDocListPage:"docs-tags-doc-list-page",mdxPage:"mdx-page"},wrapper:{main:"main-wrapper",blogPages:"blog-wrapper",docsPages:"docs-wrapper",mdxPages:"mdx-wrapper"},common:{editThisPage:"theme-edit-this-page",lastUpdated:"theme-last-updated",backToTopButton:"theme-back-to-top-button",codeBlock:"theme-code-block",admonition:"theme-admonition",unlistedBanner:"theme-unlisted-banner",draftBanner:"theme-draft-banner",admonitionType:e=>`theme-admonition-${e}`},layout:{},docs:{docVersionBanner:"theme-doc-version-banner",docVersionBadge:"theme-doc-version-badge",docBreadcrumbs:"theme-doc-breadcrumbs",docMarkdown:"theme-doc-markdown",docTocMobile:"theme-doc-toc-mobile",docTocDesktop:"theme-doc-toc-desktop",docFooter:"theme-doc-footer",docFooterTagsRow:"theme-doc-footer-tags-row",docFooterEditMetaRow:"theme-doc-footer-edit-meta-row",docSidebarContainer:"theme-doc-sidebar-container",docSidebarMenu:"theme-doc-sidebar-menu",docSidebarItemCategory:"theme-doc-sidebar-item-category",docSidebarItemLink:"theme-doc-sidebar-item-link",docSidebarItemCategoryLevel:e=>`theme-doc-sidebar-item-category-level-${e}`,docSidebarItemLinkLevel:e=>`theme-doc-sidebar-item-link-level-${e}`},blog:{blogFooterTagsRow:"theme-blog-footer-tags-row",blogFooterEditMetaRow:"theme-blog-footer-edit-meta-row"},pages:{pageFooterEditMetaRow:"theme-pages-footer-edit-meta-row"}}},68048:(e,t,n)=>{"use strict";function r(){return window.matchMedia("(prefers-reduced-motion: reduce)").matches}n.d(t,{n:()=>r})},39222:(e,t,n)=>{"use strict";n.d(t,{Rb:()=>i,_X:()=>l});var r=n(67294),o=n(16550),a=n(20585);function i(e){!function(e){const t=(0,o.k6)(),n=(0,a.zX)(e);(0,r.useEffect)((()=>t.block(((e,t)=>n(e,t)))),[t,n])}(((t,n)=>{if("POP"===n)return e(t,n)}))}function s(e){const t=(0,o.k6)();return(0,r.useSyncExternalStore)(t.listen,(()=>e(t)),(()=>e(t)))}function l(e){return s((t=>null===e?null:new URLSearchParams(t.location.search).get(e)))}},79113:(e,t,n)=>{"use strict";function r(e,t){return void 0===t&&(t=(e,t)=>e===t),e.filter(((n,r)=>e.findIndex((e=>t(e,n)))!==r))}function o(e){return Array.from(new Set(e))}function a(e,t){const n={};let r=0;for(const o of e){const e=t(o,r);n[e]??=[],n[e].push(o),r+=1}return n}n.d(t,{jj:()=>o,lx:()=>r,vM:()=>a})},96984:(e,t,n)=>{"use strict";n.d(t,{FG:()=>p,d:()=>u,VC:()=>f});var r=n(67294),o=n(788),a=n(79722),i=n(3675),s=n(23466),l=n(75276);var c=n(85893);function u(e){let{title:t,description:n,keywords:r,image:o,children:i}=e;const u=function(e){const{siteConfig:t}=(0,l.Z)(),{title:n,titleDelimiter:r}=t;return e?.trim().length?`${e.trim()} ${r} ${n}`:n}(t),{withBaseUrl:d}=(0,s.Cg)(),p=o?d(o,{absolute:!0}):void 0;return(0,c.jsxs)(a.Z,{children:[t&&(0,c.jsx)("title",{children:u}),t&&(0,c.jsx)("meta",{property:"og:title",content:u}),n&&(0,c.jsx)("meta",{name:"description",content:n}),n&&(0,c.jsx)("meta",{property:"og:description",content:n}),r&&(0,c.jsx)("meta",{name:"keywords",content:Array.isArray(r)?r.join(","):r}),p&&(0,c.jsx)("meta",{property:"og:image",content:p}),p&&(0,c.jsx)("meta",{name:"twitter:image",content:p}),i]})}const d=r.createContext(void 0);function p(e){let{className:t,children:n}=e;const i=r.useContext(d),s=(0,o.Z)(i,t);return(0,c.jsxs)(d.Provider,{value:s,children:[(0,c.jsx)(a.Z,{children:(0,c.jsx)("html",{className:s})}),n]})}function f(e){let{children:t}=e;const n=(0,i.Z)(),r=`plugin-${n.plugin.name.replace(/docusaurus-(?:plugin|theme)-(?:content-)?/gi,"")}`;const a=`plugin-id-${n.plugin.id}`;return(0,c.jsx)(p,{className:(0,o.Z)(r,a),children:t})}},20585:(e,t,n)=>{"use strict";n.d(t,{D9:()=>s,Qc:()=>u,Ql:()=>c,i6:()=>l,zX:()=>i});var r=n(67294),o=n(1290),a=n(85893);function i(e){const t=(0,r.useRef)(e);return(0,o.Z)((()=>{t.current=e}),[e]),(0,r.useCallback)((function(){return t.current(...arguments)}),[])}function s(e){const t=(0,r.useRef)();return(0,o.Z)((()=>{t.current=e})),t.current}class l extends Error{constructor(e,t){super(),this.name="ReactContextError",this.message=`Hook ${this.stack?.split("\n")[1]?.match(/at (?:\w+\.)?(?<name>\w+)/)?.groups.name??""} is called outside the <${e}>. ${t??""}`}}function c(e){const t=Object.entries(e);return t.sort(((e,t)=>e[0].localeCompare(t[0]))),(0,r.useMemo)((()=>e),t.flat())}function u(e){return t=>{let{children:n}=t;return(0,a.jsx)(a.Fragment,{children:e.reduceRight(((e,t)=>(0,a.jsx)(t,{children:e})),n)})}}},51997:(e,t,n)=>{"use strict";n.d(t,{Mg:()=>i,Ns:()=>s});var r=n(67294),o=n(78179),a=n(75276);function i(e,t){const n=e=>(!e||e.endsWith("/")?e:`${e}/`)?.toLowerCase();return n(e)===n(t)}function s(){const{baseUrl:e}=(0,a.Z)().siteConfig;return(0,r.useMemo)((()=>function(e){let{baseUrl:t,routes:n}=e;function r(e){return e.path===t&&!0===e.exact}function o(e){return e.path===t&&!e.exact}return function e(t){if(0===t.length)return;return t.find(r)||e(t.filter(o).flatMap((e=>e.routes??[])))}(n)}({routes:o.Z,baseUrl:e})),[e])}},18119:(e,t,n)=>{"use strict";n.d(t,{Ct:()=>m,OC:()=>u,RF:()=>f,o5:()=>g});var r=n(67294),o=n(29629),a=n(45025),i=n(1290),s=n(20585),l=n(85893);const c=r.createContext(void 0);function u(e){let{children:t}=e;const n=function(){const e=(0,r.useRef)(!0);return(0,r.useMemo)((()=>({scrollEventsEnabledRef:e,enableScrollEvents:()=>{e.current=!0},disableScrollEvents:()=>{e.current=!1}})),[])}();return(0,l.jsx)(c.Provider,{value:n,children:t})}function d(){const e=(0,r.useContext)(c);if(null==e)throw new s.i6("ScrollControllerProvider");return e}const p=()=>o.Z.canUseDOM?{scrollX:window.pageXOffset,scrollY:window.pageYOffset}:null;function f(e,t){void 0===t&&(t=[]);const{scrollEventsEnabledRef:n}=d(),o=(0,r.useRef)(p()),a=(0,s.zX)(e);(0,r.useEffect)((()=>{const e=()=>{if(!n.current)return;const e=p();a(e,o.current),o.current=e},t={passive:!0};return e(),window.addEventListener("scroll",e,t),()=>window.removeEventListener("scroll",e,t)}),[a,n,...t])}function g(){const e=d(),t=function(){const e=(0,r.useRef)({elem:null,top:0}),t=(0,r.useCallback)((t=>{e.current={elem:t,top:t.getBoundingClientRect().top}}),[]),n=(0,r.useCallback)((()=>{const{current:{elem:t,top:n}}=e;if(!t)return{restored:!1};const r=t.getBoundingClientRect().top-n;return r&&window.scrollBy({left:0,top:r}),e.current={elem:null,top:0},{restored:0!==r}}),[]);return(0,r.useMemo)((()=>({save:t,restore:n})),[n,t])}(),n=(0,r.useRef)(void 0),o=(0,r.useCallback)((r=>{t.save(r),e.disableScrollEvents(),n.current=()=>{const{restored:r}=t.restore();if(n.current=void 0,r){const t=()=>{e.enableScrollEvents(),window.removeEventListener("scroll",t)};window.addEventListener("scroll",t)}else e.enableScrollEvents()}}),[e,t]);return(0,i.Z)((()=>{queueMicrotask((()=>n.current?.()))})),{blockElementScrollPositionUntilNextRender:o}}function m(){const e=(0,r.useRef)(null),t=(0,a.Z)()&&"smooth"===getComputedStyle(document.documentElement).scrollBehavior;return{startScroll:n=>{e.current=t?function(e){return window.scrollTo({top:e,behavior:"smooth"}),()=>{}}(n):function(e){let t=null;const n=document.documentElement.scrollTop>e;return function r(){const o=document.documentElement.scrollTop;(n&&o>e||!n&&o<e)&&(t=requestAnimationFrame(r),window.scrollTo(0,Math.floor(.85*(o-e))+e))}(),()=>t&&cancelAnimationFrame(t)}(n)},cancelScroll:()=>e.current?.()}}},90356:(e,t,n)=>{"use strict";n.d(t,{H:()=>r});const r="default"},1606:(e,t,n)=>{"use strict";n.d(t,{WA:()=>u,Nk:()=>d});var r=n(67294);const o=JSON.parse('{"d":"localStorage","u":""}'),a=o.d;function i(e){let{key:t,oldValue:n,newValue:r,storage:o}=e;if(n===r)return;const a=document.createEvent("StorageEvent");a.initStorageEvent("storage",!1,!1,t,n,r,window.location.href,o),window.dispatchEvent(a)}function s(e){if(void 0===e&&(e=a),"undefined"==typeof window)throw new Error("Browser storage is not available on Node.js/Docusaurus SSR process.");if("none"===e)return null;try{return window[e]}catch(n){return t=n,l||(console.warn("Docusaurus browser storage is not available.\nPossible reasons: running Docusaurus in an iframe, in an incognito browser session, or using too strict browser privacy settings.",t),l=!0),null}var t}let l=!1;const c={get:()=>null,set:()=>{},del:()=>{},listen:()=>()=>{}};function u(e,t){const n=`${e}${o.u}`;if("undefined"==typeof window)return function(e){function t(){throw new Error(`Illegal storage API usage for storage key "${e}".\nDocusaurus storage APIs are not supposed to be called on the server-rendering process.\nPlease only call storage APIs in effects and event handlers.`)}return{get:t,set:t,del:t,listen:t}}(n);const r=s(t?.persistence);return null===r?c:{get:()=>{try{return r.getItem(n)}catch(e){return console.error(`Docusaurus storage error, can't get key=${n}`,e),null}},set:e=>{try{const t=r.getItem(n);r.setItem(n,e),i({key:n,oldValue:t,newValue:e,storage:r})}catch(t){console.error(`Docusaurus storage error, can't set ${n}=${e}`,t)}},del:()=>{try{const e=r.getItem(n);r.removeItem(n),i({key:n,oldValue:e,newValue:null,storage:r})}catch(e){console.error(`Docusaurus storage error, can't delete key=${n}`,e)}},listen:e=>{try{const t=t=>{t.storageArea===r&&t.key===n&&e(t)};return window.addEventListener("storage",t),()=>window.removeEventListener("storage",t)}catch(t){return console.error(`Docusaurus storage error, can't listen for changes of key=${n}`,t),()=>{}}}}}function d(e,t){const n=(0,r.useRef)((()=>null===e?c:u(e,t))).current(),o=(0,r.useCallback)((e=>"undefined"==typeof window?()=>{}:n.listen(e)),[n]);return[(0,r.useSyncExternalStore)(o,(()=>"undefined"==typeof window?null:n.get()),(()=>null)),n]}},76862:(e,t,n)=>{"use strict";n.d(t,{l:()=>i});var r=n(75276),o=n(16550),a=n(48820);function i(){const{siteConfig:{baseUrl:e,url:t,trailingSlash:n},i18n:{defaultLocale:i,currentLocale:s}}=(0,r.Z)(),{pathname:l}=(0,o.TH)(),c=(0,a.Do)(l,{trailingSlash:n,baseUrl:e}),u=s===i?e:e.replace(`/${s}/`,"/"),d=c.replace(e,"");return{createUrl:function(e){let{locale:n,fullyQualified:r}=e;return`${r?t:""}${function(e){return e===i?`${u}`:`${u}${e}/`}(n)}${d}`}}}},89062:(e,t,n)=>{"use strict";n.d(t,{S:()=>i});var r=n(67294),o=n(16550),a=n(20585);function i(e){const t=(0,o.TH)(),n=(0,a.D9)(t),i=(0,a.zX)(e);(0,r.useEffect)((()=>{n&&t!==n&&i({location:t,previousLocation:n})}),[i,t,n])}},39581:(e,t,n)=>{"use strict";n.d(t,{L:()=>o});var r=n(75276);function o(){return(0,r.Z)().siteConfig.themeConfig}},38761:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.addTrailingSlash=o,t.default=function(e,t){const{trailingSlash:n,baseUrl:r}=t;if(e.startsWith("#"))return e;if(void 0===n)return e;const[i]=e.split(/[#?]/),s="/"===i||i===r?i:(l=i,c=n,c?o(l):a(l));var l,c;return e.replace(i,s)},t.addLeadingSlash=function(e){return(0,r.addPrefix)(e,"/")},t.removeTrailingSlash=a;const r=n(67518);function o(e){return e.endsWith("/")?e:`${e}/`}function a(e){return(0,r.removeSuffix)(e,"/")}},39007:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.getErrorCausalChain=function e(t){if(t.cause)return[t,...e(t.cause)];return[t]}},48820:(e,t,n)=>{"use strict";t.BN=t.Do=t.uR=void 0;const r=n(97582);t.uR="__blog-post-container";var o=n(38761);Object.defineProperty(t,"Do",{enumerable:!0,get:function(){return r.__importDefault(o).default}});var a=n(67518);var i=n(39007);Object.defineProperty(t,"BN",{enumerable:!0,get:function(){return i.getErrorCausalChain}})},67518:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.addPrefix=function(e,t){return e.startsWith(t)?e:`${t}${e}`},t.removeSuffix=function(e,t){if(""===t)return e;return e.endsWith(t)?e.slice(0,-t.length):e},t.addSuffix=function(e,t){return e.endsWith(t)?e:`${e}${t}`},t.removePrefix=function(e,t){return e.startsWith(t)?e.slice(t.length):e}},99318:(e,t,n)=>{"use strict";n.d(t,{lX:()=>w,q_:()=>O,ob:()=>f,PP:()=>j,Ep:()=>p});var r=n(83117);function o(e){return"/"===e.charAt(0)}function a(e,t){for(var n=t,r=n+1,o=e.length;r<o;n+=1,r+=1)e[n]=e[r];e.pop()}const i=function(e,t){void 0===t&&(t="");var n,r=e&&e.split("/")||[],i=t&&t.split("/")||[],s=e&&o(e),l=t&&o(t),c=s||l;if(e&&o(e)?i=r:r.length&&(i.pop(),i=i.concat(r)),!i.length)return"/";if(i.length){var u=i[i.length-1];n="."===u||".."===u||""===u}else n=!1;for(var d=0,p=i.length;p>=0;p--){var f=i[p];"."===f?a(i,p):".."===f?(a(i,p),d++):d&&(a(i,p),d--)}if(!c)for(;d--;d)i.unshift("..");!c||""===i[0]||i[0]&&o(i[0])||i.unshift("");var g=i.join("/");return n&&"/"!==g.substr(-1)&&(g+="/"),g};var s=n(38776);function l(e){return"/"===e.charAt(0)?e:"/"+e}function c(e){return"/"===e.charAt(0)?e.substr(1):e}function u(e,t){return function(e,t){return 0===e.toLowerCase().indexOf(t.toLowerCase())&&-1!=="/?#".indexOf(e.charAt(t.length))}(e,t)?e.substr(t.length):e}function d(e){return"/"===e.charAt(e.length-1)?e.slice(0,-1):e}function p(e){var t=e.pathname,n=e.search,r=e.hash,o=t||"/";return n&&"?"!==n&&(o+="?"===n.charAt(0)?n:"?"+n),r&&"#"!==r&&(o+="#"===r.charAt(0)?r:"#"+r),o}function f(e,t,n,o){var a;"string"==typeof e?(a=function(e){var t=e||"/",n="",r="",o=t.indexOf("#");-1!==o&&(r=t.substr(o),t=t.substr(0,o));var a=t.indexOf("?");return-1!==a&&(n=t.substr(a),t=t.substr(0,a)),{pathname:t,search:"?"===n?"":n,hash:"#"===r?"":r}}(e),a.state=t):(void 0===(a=(0,r.Z)({},e)).pathname&&(a.pathname=""),a.search?"?"!==a.search.charAt(0)&&(a.search="?"+a.search):a.search="",a.hash?"#"!==a.hash.charAt(0)&&(a.hash="#"+a.hash):a.hash="",void 0!==t&&void 0===a.state&&(a.state=t));try{a.pathname=decodeURI(a.pathname)}catch(s){throw s instanceof URIError?new URIError('Pathname "'+a.pathname+'" could not be decoded. This is likely caused by an invalid percent-encoding.'):s}return n&&(a.key=n),o?a.pathname?"/"!==a.pathname.charAt(0)&&(a.pathname=i(a.pathname,o.pathname)):a.pathname=o.pathname:a.pathname||(a.pathname="/"),a}function g(){var e=null;var t=[];return{setPrompt:function(t){return e=t,function(){e===t&&(e=null)}},confirmTransitionTo:function(t,n,r,o){if(null!=e){var a="function"==typeof e?e(t,n):e;"string"==typeof a?"function"==typeof r?r(a,o):o(!0):o(!1!==a)}else o(!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 m=!("undefined"==typeof window||!window.document||!window.document.createElement);function h(e,t){t(window.confirm(e))}var b="popstate",y="hashchange";function v(){try{return window.history.state||{}}catch(e){return{}}}function w(e){void 0===e&&(e={}),m||(0,s.Z)(!1);var t,n=window.history,o=(-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,a=!(-1===window.navigator.userAgent.indexOf("Trident")),i=e,c=i.forceRefresh,w=void 0!==c&&c,k=i.getUserConfirmation,S=void 0===k?h:k,_=i.keyLength,x=void 0===_?6:_,E=e.basename?d(l(e.basename)):"";function O(e){var t=e||{},n=t.key,r=t.state,o=window.location,a=o.pathname+o.search+o.hash;return E&&(a=u(a,E)),f(a,r,n)}function P(){return Math.random().toString(36).substr(2,x)}var j=g();function C(e){(0,r.Z)(U,e),U.length=n.length,j.notifyListeners(U.location,U.action)}function T(e){(function(e){return void 0===e.state&&-1===navigator.userAgent.indexOf("CriOS")})(e)||N(O(e.state))}function I(){N(O(v()))}var A=!1;function N(e){if(A)A=!1,C();else{j.confirmTransitionTo(e,"POP",S,(function(t){t?C({action:"POP",location:e}):function(e){var t=U.location,n=R.indexOf(t.key);-1===n&&(n=0);var r=R.indexOf(e.key);-1===r&&(r=0);var o=n-r;o&&(A=!0,F(o))}(e)}))}}var L=O(v()),R=[L.key];function D(e){return E+p(e)}function F(e){n.go(e)}var M=0;function B(e){1===(M+=e)&&1===e?(window.addEventListener(b,T),a&&window.addEventListener(y,I)):0===M&&(window.removeEventListener(b,T),a&&window.removeEventListener(y,I))}var z=!1;var U={length:n.length,action:"POP",location:L,createHref:D,push:function(e,t){var r="PUSH",a=f(e,t,P(),U.location);j.confirmTransitionTo(a,r,S,(function(e){if(e){var t=D(a),i=a.key,s=a.state;if(o)if(n.pushState({key:i,state:s},null,t),w)window.location.href=t;else{var l=R.indexOf(U.location.key),c=R.slice(0,l+1);c.push(a.key),R=c,C({action:r,location:a})}else window.location.href=t}}))},replace:function(e,t){var r="REPLACE",a=f(e,t,P(),U.location);j.confirmTransitionTo(a,r,S,(function(e){if(e){var t=D(a),i=a.key,s=a.state;if(o)if(n.replaceState({key:i,state:s},null,t),w)window.location.replace(t);else{var l=R.indexOf(U.location.key);-1!==l&&(R[l]=a.key),C({action:r,location:a})}else window.location.replace(t)}}))},go:F,goBack:function(){F(-1)},goForward:function(){F(1)},block:function(e){void 0===e&&(e=!1);var t=j.setPrompt(e);return z||(B(1),z=!0),function(){return z&&(z=!1,B(-1)),t()}},listen:function(e){var t=j.appendListener(e);return B(1),function(){B(-1),t()}}};return U}var k="hashchange",S={hashbang:{encodePath:function(e){return"!"===e.charAt(0)?e:"!/"+c(e)},decodePath:function(e){return"!"===e.charAt(0)?e.substr(1):e}},noslash:{encodePath:c,decodePath:l},slash:{encodePath:l,decodePath:l}};function _(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(e){window.location.replace(_(window.location.href)+"#"+e)}function O(e){void 0===e&&(e={}),m||(0,s.Z)(!1);var t=window.history,n=(window.navigator.userAgent.indexOf("Firefox"),e),o=n.getUserConfirmation,a=void 0===o?h:o,i=n.hashType,c=void 0===i?"slash":i,b=e.basename?d(l(e.basename)):"",y=S[c],v=y.encodePath,w=y.decodePath;function O(){var e=w(x());return b&&(e=u(e,b)),f(e)}var P=g();function j(e){(0,r.Z)(z,e),z.length=t.length,P.notifyListeners(z.location,z.action)}var C=!1,T=null;function I(){var e,t,n=x(),r=v(n);if(n!==r)E(r);else{var o=O(),i=z.location;if(!C&&(t=o,(e=i).pathname===t.pathname&&e.search===t.search&&e.hash===t.hash))return;if(T===p(o))return;T=null,function(e){if(C)C=!1,j();else{var t="POP";P.confirmTransitionTo(e,t,a,(function(n){n?j({action:t,location:e}):function(e){var t=z.location,n=R.lastIndexOf(p(t));-1===n&&(n=0);var r=R.lastIndexOf(p(e));-1===r&&(r=0);var o=n-r;o&&(C=!0,D(o))}(e)}))}}(o)}}var A=x(),N=v(A);A!==N&&E(N);var L=O(),R=[p(L)];function D(e){t.go(e)}var F=0;function M(e){1===(F+=e)&&1===e?window.addEventListener(k,I):0===F&&window.removeEventListener(k,I)}var B=!1;var z={length:t.length,action:"POP",location:L,createHref:function(e){var t=document.querySelector("base"),n="";return t&&t.getAttribute("href")&&(n=_(window.location.href)),n+"#"+v(b+p(e))},push:function(e,t){var n="PUSH",r=f(e,void 0,void 0,z.location);P.confirmTransitionTo(r,n,a,(function(e){if(e){var t=p(r),o=v(b+t);if(x()!==o){T=t,function(e){window.location.hash=e}(o);var a=R.lastIndexOf(p(z.location)),i=R.slice(0,a+1);i.push(t),R=i,j({action:n,location:r})}else j()}}))},replace:function(e,t){var n="REPLACE",r=f(e,void 0,void 0,z.location);P.confirmTransitionTo(r,n,a,(function(e){if(e){var t=p(r),o=v(b+t);x()!==o&&(T=t,E(o));var a=R.indexOf(p(z.location));-1!==a&&(R[a]=t),j({action:n,location:r})}}))},go:D,goBack:function(){D(-1)},goForward:function(){D(1)},block:function(e){void 0===e&&(e=!1);var t=P.setPrompt(e);return B||(M(1),B=!0),function(){return B&&(B=!1,M(-1)),t()}},listen:function(e){var t=P.appendListener(e);return M(1),function(){M(-1),t()}}};return z}function P(e,t,n){return Math.min(Math.max(e,t),n)}function j(e){void 0===e&&(e={});var t=e,n=t.getUserConfirmation,o=t.initialEntries,a=void 0===o?["/"]:o,i=t.initialIndex,s=void 0===i?0:i,l=t.keyLength,c=void 0===l?6:l,u=g();function d(e){(0,r.Z)(w,e),w.length=w.entries.length,u.notifyListeners(w.location,w.action)}function m(){return Math.random().toString(36).substr(2,c)}var h=P(s,0,a.length-1),b=a.map((function(e){return f(e,void 0,"string"==typeof e?m():e.key||m())})),y=p;function v(e){var t=P(w.index+e,0,w.entries.length-1),r=w.entries[t];u.confirmTransitionTo(r,"POP",n,(function(e){e?d({action:"POP",location:r,index:t}):d()}))}var w={length:b.length,action:"POP",location:b[h],index:h,entries:b,createHref:y,push:function(e,t){var r="PUSH",o=f(e,t,m(),w.location);u.confirmTransitionTo(o,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,o):n.push(o),d({action:r,location:o,index:t,entries:n})}}))},replace:function(e,t){var r="REPLACE",o=f(e,t,m(),w.location);u.confirmTransitionTo(o,r,n,(function(e){e&&(w.entries[w.index]=o,d({action:r,location:o}))}))},go:v,goBack:function(){v(-1)},goForward:function(){v(1)},canGo:function(e){var t=w.index+e;return t>=0&&t<w.entries.length},block:function(e){return void 0===e&&(e=!1),u.setPrompt(e)},listen:function(e){return u.appendListener(e)}};return w}},8679:(e,t,n)=>{"use strict";var r=n(21296),o={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},a={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},i={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},s={};function l(e){return r.isMemo(e)?i:s[e.$$typeof]||o}s[r.ForwardRef]={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},s[r.Memo]=i;var c=Object.defineProperty,u=Object.getOwnPropertyNames,d=Object.getOwnPropertySymbols,p=Object.getOwnPropertyDescriptor,f=Object.getPrototypeOf,g=Object.prototype;e.exports=function e(t,n,r){if("string"!=typeof n){if(g){var o=f(n);o&&o!==g&&e(t,o,r)}var i=u(n);d&&(i=i.concat(d(n)));for(var s=l(t),m=l(n),h=0;h<i.length;++h){var b=i[h];if(!(a[b]||r&&r[b]||m&&m[b]||s&&s[b])){var y=p(n,b);try{c(t,b,y)}catch(v){}}}}return t}},96103:(e,t)=>{"use strict";var n="function"==typeof Symbol&&Symbol.for,r=n?Symbol.for("react.element"):60103,o=n?Symbol.for("react.portal"):60106,a=n?Symbol.for("react.fragment"):60107,i=n?Symbol.for("react.strict_mode"):60108,s=n?Symbol.for("react.profiler"):60114,l=n?Symbol.for("react.provider"):60109,c=n?Symbol.for("react.context"):60110,u=n?Symbol.for("react.async_mode"):60111,d=n?Symbol.for("react.concurrent_mode"):60111,p=n?Symbol.for("react.forward_ref"):60112,f=n?Symbol.for("react.suspense"):60113,g=n?Symbol.for("react.suspense_list"):60120,m=n?Symbol.for("react.memo"):60115,h=n?Symbol.for("react.lazy"):60116,b=n?Symbol.for("react.block"):60121,y=n?Symbol.for("react.fundamental"):60117,v=n?Symbol.for("react.responder"):60118,w=n?Symbol.for("react.scope"):60119;function k(e){if("object"==typeof e&&null!==e){var t=e.$$typeof;switch(t){case r:switch(e=e.type){case u:case d:case a:case s:case i:case f:return e;default:switch(e=e&&e.$$typeof){case c:case p:case h:case m:case l:return e;default:return t}}case o:return t}}}function S(e){return k(e)===d}t.AsyncMode=u,t.ConcurrentMode=d,t.ContextConsumer=c,t.ContextProvider=l,t.Element=r,t.ForwardRef=p,t.Fragment=a,t.Lazy=h,t.Memo=m,t.Portal=o,t.Profiler=s,t.StrictMode=i,t.Suspense=f,t.isAsyncMode=function(e){return S(e)||k(e)===u},t.isConcurrentMode=S,t.isContextConsumer=function(e){return k(e)===c},t.isContextProvider=function(e){return k(e)===l},t.isElement=function(e){return"object"==typeof e&&null!==e&&e.$$typeof===r},t.isForwardRef=function(e){return k(e)===p},t.isFragment=function(e){return k(e)===a},t.isLazy=function(e){return k(e)===h},t.isMemo=function(e){return k(e)===m},t.isPortal=function(e){return k(e)===o},t.isProfiler=function(e){return k(e)===s},t.isStrictMode=function(e){return k(e)===i},t.isSuspense=function(e){return k(e)===f},t.isValidElementType=function(e){return"string"==typeof e||"function"==typeof e||e===a||e===d||e===s||e===i||e===f||e===g||"object"==typeof e&&null!==e&&(e.$$typeof===h||e.$$typeof===m||e.$$typeof===l||e.$$typeof===c||e.$$typeof===p||e.$$typeof===y||e.$$typeof===v||e.$$typeof===w||e.$$typeof===b)},t.typeOf=k},21296:(e,t,n)=>{"use strict";e.exports=n(96103)},41143:e=>{"use strict";e.exports=function(e,t,n,r,o,a,i,s){if(!e){var l;if(void 0===t)l=new Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.");else{var c=[n,r,o,a,i,s],u=0;(l=new Error(t.replace(/%s/g,(function(){return c[u++]})))).name="Invariant Violation"}throw l.framesToPop=1,l}}},5826:e=>{e.exports=Array.isArray||function(e){return"[object Array]"==Object.prototype.toString.call(e)}},813:function(e){e.exports=function(){"use strict";var e="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},t=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")},n=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),r=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},o=function(){function e(n){var r=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[],a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:5e3;t(this,e),this.ctx=n,this.iframes=r,this.exclude=o,this.iframesTimeout=a}return n(e,[{key:"getContexts",value:function(){var e=[];return(void 0!==this.ctx&&this.ctx?NodeList.prototype.isPrototypeOf(this.ctx)?Array.prototype.slice.call(this.ctx):Array.isArray(this.ctx)?this.ctx:"string"==typeof this.ctx?Array.prototype.slice.call(document.querySelectorAll(this.ctx)):[this.ctx]:[]).forEach((function(t){var n=e.filter((function(e){return e.contains(t)})).length>0;-1!==e.indexOf(t)||n||e.push(t)})),e}},{key:"getIframeContents",value:function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:function(){},r=void 0;try{var o=e.contentWindow;if(r=o.document,!o||!r)throw new Error("iframe inaccessible")}catch(a){n()}r&&t(r)}},{key:"isIframeBlank",value:function(e){var t="about:blank",n=e.getAttribute("src").trim();return e.contentWindow.location.href===t&&n!==t&&n}},{key:"observeIframeLoad",value:function(e,t,n){var r=this,o=!1,a=null,i=function i(){if(!o){o=!0,clearTimeout(a);try{r.isIframeBlank(e)||(e.removeEventListener("load",i),r.getIframeContents(e,t,n))}catch(s){n()}}};e.addEventListener("load",i),a=setTimeout(i,this.iframesTimeout)}},{key:"onIframeReady",value:function(e,t,n){try{"complete"===e.contentWindow.document.readyState?this.isIframeBlank(e)?this.observeIframeLoad(e,t,n):this.getIframeContents(e,t,n):this.observeIframeLoad(e,t,n)}catch(r){n()}}},{key:"waitForIframes",value:function(e,t){var n=this,r=0;this.forEachIframe(e,(function(){return!0}),(function(e){r++,n.waitForIframes(e.querySelector("html"),(function(){--r||t()}))}),(function(e){e||t()}))}},{key:"forEachIframe",value:function(t,n,r){var o=this,a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:function(){},i=t.querySelectorAll("iframe"),s=i.length,l=0;i=Array.prototype.slice.call(i);var c=function(){--s<=0&&a(l)};s||c(),i.forEach((function(t){e.matches(t,o.exclude)?c():o.onIframeReady(t,(function(e){n(t)&&(l++,r(e)),c()}),c)}))}},{key:"createIterator",value:function(e,t,n){return document.createNodeIterator(e,t,n,!1)}},{key:"createInstanceOnIframe",value:function(t){return new e(t.querySelector("html"),this.iframes)}},{key:"compareNodeIframe",value:function(e,t,n){if(e.compareDocumentPosition(n)&Node.DOCUMENT_POSITION_PRECEDING){if(null===t)return!0;if(t.compareDocumentPosition(n)&Node.DOCUMENT_POSITION_FOLLOWING)return!0}return!1}},{key:"getIteratorNode",value:function(e){var t=e.previousNode();return{prevNode:t,node:(null===t||e.nextNode())&&e.nextNode()}}},{key:"checkIframeFilter",value:function(e,t,n,r){var o=!1,a=!1;return r.forEach((function(e,t){e.val===n&&(o=t,a=e.handled)})),this.compareNodeIframe(e,t,n)?(!1!==o||a?!1===o||a||(r[o].handled=!0):r.push({val:n,handled:!0}),!0):(!1===o&&r.push({val:n,handled:!1}),!1)}},{key:"handleOpenIframes",value:function(e,t,n,r){var o=this;e.forEach((function(e){e.handled||o.getIframeContents(e.val,(function(e){o.createInstanceOnIframe(e).forEachNode(t,n,r)}))}))}},{key:"iterateThroughNodes",value:function(e,t,n,r,o){for(var a=this,i=this.createIterator(t,e,r),s=[],l=[],c=void 0,u=void 0,d=function(){var e=a.getIteratorNode(i);return u=e.prevNode,c=e.node};d();)this.iframes&&this.forEachIframe(t,(function(e){return a.checkIframeFilter(c,u,e,s)}),(function(t){a.createInstanceOnIframe(t).forEachNode(e,(function(e){return l.push(e)}),r)})),l.push(c);l.forEach((function(e){n(e)})),this.iframes&&this.handleOpenIframes(s,e,n,r),o()}},{key:"forEachNode",value:function(e,t,n){var r=this,o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:function(){},a=this.getContexts(),i=a.length;i||o(),a.forEach((function(a){var s=function(){r.iterateThroughNodes(e,a,t,n,(function(){--i<=0&&o()}))};r.iframes?r.waitForIframes(a,s):s()}))}}],[{key:"matches",value:function(e,t){var n="string"==typeof t?[t]:t,r=e.matches||e.matchesSelector||e.msMatchesSelector||e.mozMatchesSelector||e.oMatchesSelector||e.webkitMatchesSelector;if(r){var o=!1;return n.every((function(t){return!r.call(e,t)||(o=!0,!1)})),o}return!1}}]),e}(),a=function(){function a(e){t(this,a),this.ctx=e,this.ie=!1;var n=window.navigator.userAgent;(n.indexOf("MSIE")>-1||n.indexOf("Trident")>-1)&&(this.ie=!0)}return n(a,[{key:"log",value:function(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"debug",r=this.opt.log;this.opt.debug&&"object"===(void 0===r?"undefined":e(r))&&"function"==typeof r[n]&&r[n]("mark.js: "+t)}},{key:"escapeStr",value:function(e){return e.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")}},{key:"createRegExp",value:function(e){return"disabled"!==this.opt.wildcards&&(e=this.setupWildcardsRegExp(e)),e=this.escapeStr(e),Object.keys(this.opt.synonyms).length&&(e=this.createSynonymsRegExp(e)),(this.opt.ignoreJoiners||this.opt.ignorePunctuation.length)&&(e=this.setupIgnoreJoinersRegExp(e)),this.opt.diacritics&&(e=this.createDiacriticsRegExp(e)),e=this.createMergedBlanksRegExp(e),(this.opt.ignoreJoiners||this.opt.ignorePunctuation.length)&&(e=this.createJoinersRegExp(e)),"disabled"!==this.opt.wildcards&&(e=this.createWildcardsRegExp(e)),e=this.createAccuracyRegExp(e)}},{key:"createSynonymsRegExp",value:function(e){var t=this.opt.synonyms,n=this.opt.caseSensitive?"":"i",r=this.opt.ignoreJoiners||this.opt.ignorePunctuation.length?"\0":"";for(var o in t)if(t.hasOwnProperty(o)){var a=t[o],i="disabled"!==this.opt.wildcards?this.setupWildcardsRegExp(o):this.escapeStr(o),s="disabled"!==this.opt.wildcards?this.setupWildcardsRegExp(a):this.escapeStr(a);""!==i&&""!==s&&(e=e.replace(new RegExp("("+this.escapeStr(i)+"|"+this.escapeStr(s)+")","gm"+n),r+"("+this.processSynomyms(i)+"|"+this.processSynomyms(s)+")"+r))}return e}},{key:"processSynomyms",value:function(e){return(this.opt.ignoreJoiners||this.opt.ignorePunctuation.length)&&(e=this.setupIgnoreJoinersRegExp(e)),e}},{key:"setupWildcardsRegExp",value:function(e){return(e=e.replace(/(?:\\)*\?/g,(function(e){return"\\"===e.charAt(0)?"?":"\x01"}))).replace(/(?:\\)*\*/g,(function(e){return"\\"===e.charAt(0)?"*":"\x02"}))}},{key:"createWildcardsRegExp",value:function(e){var t="withSpaces"===this.opt.wildcards;return e.replace(/\u0001/g,t?"[\\S\\s]?":"\\S?").replace(/\u0002/g,t?"[\\S\\s]*?":"\\S*")}},{key:"setupIgnoreJoinersRegExp",value:function(e){return e.replace(/[^(|)\\]/g,(function(e,t,n){var r=n.charAt(t+1);return/[(|)\\]/.test(r)||""===r?e:e+"\0"}))}},{key:"createJoinersRegExp",value:function(e){var t=[],n=this.opt.ignorePunctuation;return Array.isArray(n)&&n.length&&t.push(this.escapeStr(n.join(""))),this.opt.ignoreJoiners&&t.push("\\u00ad\\u200b\\u200c\\u200d"),t.length?e.split(/\u0000+/).join("["+t.join("")+"]*"):e}},{key:"createDiacriticsRegExp",value:function(e){var t=this.opt.caseSensitive?"":"i",n=this.opt.caseSensitive?["a\xe0\xe1\u1ea3\xe3\u1ea1\u0103\u1eb1\u1eaf\u1eb3\u1eb5\u1eb7\xe2\u1ea7\u1ea5\u1ea9\u1eab\u1ead\xe4\xe5\u0101\u0105","A\xc0\xc1\u1ea2\xc3\u1ea0\u0102\u1eb0\u1eae\u1eb2\u1eb4\u1eb6\xc2\u1ea6\u1ea4\u1ea8\u1eaa\u1eac\xc4\xc5\u0100\u0104","c\xe7\u0107\u010d","C\xc7\u0106\u010c","d\u0111\u010f","D\u0110\u010e","e\xe8\xe9\u1ebb\u1ebd\u1eb9\xea\u1ec1\u1ebf\u1ec3\u1ec5\u1ec7\xeb\u011b\u0113\u0119","E\xc8\xc9\u1eba\u1ebc\u1eb8\xca\u1ec0\u1ebe\u1ec2\u1ec4\u1ec6\xcb\u011a\u0112\u0118","i\xec\xed\u1ec9\u0129\u1ecb\xee\xef\u012b","I\xcc\xcd\u1ec8\u0128\u1eca\xce\xcf\u012a","l\u0142","L\u0141","n\xf1\u0148\u0144","N\xd1\u0147\u0143","o\xf2\xf3\u1ecf\xf5\u1ecd\xf4\u1ed3\u1ed1\u1ed5\u1ed7\u1ed9\u01a1\u1edf\u1ee1\u1edb\u1edd\u1ee3\xf6\xf8\u014d","O\xd2\xd3\u1ece\xd5\u1ecc\xd4\u1ed2\u1ed0\u1ed4\u1ed6\u1ed8\u01a0\u1ede\u1ee0\u1eda\u1edc\u1ee2\xd6\xd8\u014c","r\u0159","R\u0158","s\u0161\u015b\u0219\u015f","S\u0160\u015a\u0218\u015e","t\u0165\u021b\u0163","T\u0164\u021a\u0162","u\xf9\xfa\u1ee7\u0169\u1ee5\u01b0\u1eeb\u1ee9\u1eed\u1eef\u1ef1\xfb\xfc\u016f\u016b","U\xd9\xda\u1ee6\u0168\u1ee4\u01af\u1eea\u1ee8\u1eec\u1eee\u1ef0\xdb\xdc\u016e\u016a","y\xfd\u1ef3\u1ef7\u1ef9\u1ef5\xff","Y\xdd\u1ef2\u1ef6\u1ef8\u1ef4\u0178","z\u017e\u017c\u017a","Z\u017d\u017b\u0179"]:["a\xe0\xe1\u1ea3\xe3\u1ea1\u0103\u1eb1\u1eaf\u1eb3\u1eb5\u1eb7\xe2\u1ea7\u1ea5\u1ea9\u1eab\u1ead\xe4\xe5\u0101\u0105A\xc0\xc1\u1ea2\xc3\u1ea0\u0102\u1eb0\u1eae\u1eb2\u1eb4\u1eb6\xc2\u1ea6\u1ea4\u1ea8\u1eaa\u1eac\xc4\xc5\u0100\u0104","c\xe7\u0107\u010dC\xc7\u0106\u010c","d\u0111\u010fD\u0110\u010e","e\xe8\xe9\u1ebb\u1ebd\u1eb9\xea\u1ec1\u1ebf\u1ec3\u1ec5\u1ec7\xeb\u011b\u0113\u0119E\xc8\xc9\u1eba\u1ebc\u1eb8\xca\u1ec0\u1ebe\u1ec2\u1ec4\u1ec6\xcb\u011a\u0112\u0118","i\xec\xed\u1ec9\u0129\u1ecb\xee\xef\u012bI\xcc\xcd\u1ec8\u0128\u1eca\xce\xcf\u012a","l\u0142L\u0141","n\xf1\u0148\u0144N\xd1\u0147\u0143","o\xf2\xf3\u1ecf\xf5\u1ecd\xf4\u1ed3\u1ed1\u1ed5\u1ed7\u1ed9\u01a1\u1edf\u1ee1\u1edb\u1edd\u1ee3\xf6\xf8\u014dO\xd2\xd3\u1ece\xd5\u1ecc\xd4\u1ed2\u1ed0\u1ed4\u1ed6\u1ed8\u01a0\u1ede\u1ee0\u1eda\u1edc\u1ee2\xd6\xd8\u014c","r\u0159R\u0158","s\u0161\u015b\u0219\u015fS\u0160\u015a\u0218\u015e","t\u0165\u021b\u0163T\u0164\u021a\u0162","u\xf9\xfa\u1ee7\u0169\u1ee5\u01b0\u1eeb\u1ee9\u1eed\u1eef\u1ef1\xfb\xfc\u016f\u016bU\xd9\xda\u1ee6\u0168\u1ee4\u01af\u1eea\u1ee8\u1eec\u1eee\u1ef0\xdb\xdc\u016e\u016a","y\xfd\u1ef3\u1ef7\u1ef9\u1ef5\xffY\xdd\u1ef2\u1ef6\u1ef8\u1ef4\u0178","z\u017e\u017c\u017aZ\u017d\u017b\u0179"],r=[];return e.split("").forEach((function(o){n.every((function(n){if(-1!==n.indexOf(o)){if(r.indexOf(n)>-1)return!1;e=e.replace(new RegExp("["+n+"]","gm"+t),"["+n+"]"),r.push(n)}return!0}))})),e}},{key:"createMergedBlanksRegExp",value:function(e){return e.replace(/[\s]+/gim,"[\\s]+")}},{key:"createAccuracyRegExp",value:function(e){var t=this,n="!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~\xa1\xbf",r=this.opt.accuracy,o="string"==typeof r?r:r.value,a="string"==typeof r?[]:r.limiters,i="";switch(a.forEach((function(e){i+="|"+t.escapeStr(e)})),o){case"partially":default:return"()("+e+")";case"complementary":return"()([^"+(i="\\s"+(i||this.escapeStr(n)))+"]*"+e+"[^"+i+"]*)";case"exactly":return"(^|\\s"+i+")("+e+")(?=$|\\s"+i+")"}}},{key:"getSeparatedKeywords",value:function(e){var t=this,n=[];return e.forEach((function(e){t.opt.separateWordSearch?e.split(" ").forEach((function(e){e.trim()&&-1===n.indexOf(e)&&n.push(e)})):e.trim()&&-1===n.indexOf(e)&&n.push(e)})),{keywords:n.sort((function(e,t){return t.length-e.length})),length:n.length}}},{key:"isNumeric",value:function(e){return Number(parseFloat(e))==e}},{key:"checkRanges",value:function(e){var t=this;if(!Array.isArray(e)||"[object Object]"!==Object.prototype.toString.call(e[0]))return this.log("markRanges() will only accept an array of objects"),this.opt.noMatch(e),[];var n=[],r=0;return e.sort((function(e,t){return e.start-t.start})).forEach((function(e){var o=t.callNoMatchOnInvalidRanges(e,r),a=o.start,i=o.end;o.valid&&(e.start=a,e.length=i-a,n.push(e),r=i)})),n}},{key:"callNoMatchOnInvalidRanges",value:function(e,t){var n=void 0,r=void 0,o=!1;return e&&void 0!==e.start?(r=(n=parseInt(e.start,10))+parseInt(e.length,10),this.isNumeric(e.start)&&this.isNumeric(e.length)&&r-t>0&&r-n>0?o=!0:(this.log("Ignoring invalid or overlapping range: "+JSON.stringify(e)),this.opt.noMatch(e))):(this.log("Ignoring invalid range: "+JSON.stringify(e)),this.opt.noMatch(e)),{start:n,end:r,valid:o}}},{key:"checkWhitespaceRanges",value:function(e,t,n){var r=void 0,o=!0,a=n.length,i=t-a,s=parseInt(e.start,10)-i;return(r=(s=s>a?a:s)+parseInt(e.length,10))>a&&(r=a,this.log("End range automatically set to the max value of "+a)),s<0||r-s<0||s>a||r>a?(o=!1,this.log("Invalid range: "+JSON.stringify(e)),this.opt.noMatch(e)):""===n.substring(s,r).replace(/\s+/g,"")&&(o=!1,this.log("Skipping whitespace only range: "+JSON.stringify(e)),this.opt.noMatch(e)),{start:s,end:r,valid:o}}},{key:"getTextNodes",value:function(e){var t=this,n="",r=[];this.iterator.forEachNode(NodeFilter.SHOW_TEXT,(function(e){r.push({start:n.length,end:(n+=e.textContent).length,node:e})}),(function(e){return t.matchesExclude(e.parentNode)?NodeFilter.FILTER_REJECT:NodeFilter.FILTER_ACCEPT}),(function(){e({value:n,nodes:r})}))}},{key:"matchesExclude",value:function(e){return o.matches(e,this.opt.exclude.concat(["script","style","title","head","html"]))}},{key:"wrapRangeInTextNode",value:function(e,t,n){var r=this.opt.element?this.opt.element:"mark",o=e.splitText(t),a=o.splitText(n-t),i=document.createElement(r);return i.setAttribute("data-markjs","true"),this.opt.className&&i.setAttribute("class",this.opt.className),i.textContent=o.textContent,o.parentNode.replaceChild(i,o),a}},{key:"wrapRangeInMappedTextNode",value:function(e,t,n,r,o){var a=this;e.nodes.every((function(i,s){var l=e.nodes[s+1];if(void 0===l||l.start>t){if(!r(i.node))return!1;var c=t-i.start,u=(n>i.end?i.end:n)-i.start,d=e.value.substr(0,i.start),p=e.value.substr(u+i.start);if(i.node=a.wrapRangeInTextNode(i.node,c,u),e.value=d+p,e.nodes.forEach((function(t,n){n>=s&&(e.nodes[n].start>0&&n!==s&&(e.nodes[n].start-=u),e.nodes[n].end-=u)})),n-=u,o(i.node.previousSibling,i.start),!(n>i.end))return!1;t=i.end}return!0}))}},{key:"wrapMatches",value:function(e,t,n,r,o){var a=this,i=0===t?0:t+1;this.getTextNodes((function(t){t.nodes.forEach((function(t){t=t.node;for(var o=void 0;null!==(o=e.exec(t.textContent))&&""!==o[i];)if(n(o[i],t)){var s=o.index;if(0!==i)for(var l=1;l<i;l++)s+=o[l].length;t=a.wrapRangeInTextNode(t,s,s+o[i].length),r(t.previousSibling),e.lastIndex=0}})),o()}))}},{key:"wrapMatchesAcrossElements",value:function(e,t,n,r,o){var a=this,i=0===t?0:t+1;this.getTextNodes((function(t){for(var s=void 0;null!==(s=e.exec(t.value))&&""!==s[i];){var l=s.index;if(0!==i)for(var c=1;c<i;c++)l+=s[c].length;var u=l+s[i].length;a.wrapRangeInMappedTextNode(t,l,u,(function(e){return n(s[i],e)}),(function(t,n){e.lastIndex=n,r(t)}))}o()}))}},{key:"wrapRangeFromIndex",value:function(e,t,n,r){var o=this;this.getTextNodes((function(a){var i=a.value.length;e.forEach((function(e,r){var s=o.checkWhitespaceRanges(e,i,a.value),l=s.start,c=s.end;s.valid&&o.wrapRangeInMappedTextNode(a,l,c,(function(n){return t(n,e,a.value.substring(l,c),r)}),(function(t){n(t,e)}))})),r()}))}},{key:"unwrapMatches",value:function(e){for(var t=e.parentNode,n=document.createDocumentFragment();e.firstChild;)n.appendChild(e.removeChild(e.firstChild));t.replaceChild(n,e),this.ie?this.normalizeTextNode(t):t.normalize()}},{key:"normalizeTextNode",value:function(e){if(e){if(3===e.nodeType)for(;e.nextSibling&&3===e.nextSibling.nodeType;)e.nodeValue+=e.nextSibling.nodeValue,e.parentNode.removeChild(e.nextSibling);else this.normalizeTextNode(e.firstChild);this.normalizeTextNode(e.nextSibling)}}},{key:"markRegExp",value:function(e,t){var n=this;this.opt=t,this.log('Searching with expression "'+e+'"');var r=0,o="wrapMatches",a=function(e){r++,n.opt.each(e)};this.opt.acrossElements&&(o="wrapMatchesAcrossElements"),this[o](e,this.opt.ignoreGroups,(function(e,t){return n.opt.filter(t,e,r)}),a,(function(){0===r&&n.opt.noMatch(e),n.opt.done(r)}))}},{key:"mark",value:function(e,t){var n=this;this.opt=t;var r=0,o="wrapMatches",a=this.getSeparatedKeywords("string"==typeof e?[e]:e),i=a.keywords,s=a.length,l=this.opt.caseSensitive?"":"i",c=function e(t){var a=new RegExp(n.createRegExp(t),"gm"+l),c=0;n.log('Searching with expression "'+a+'"'),n[o](a,1,(function(e,o){return n.opt.filter(o,t,r,c)}),(function(e){c++,r++,n.opt.each(e)}),(function(){0===c&&n.opt.noMatch(t),i[s-1]===t?n.opt.done(r):e(i[i.indexOf(t)+1])}))};this.opt.acrossElements&&(o="wrapMatchesAcrossElements"),0===s?this.opt.done(r):c(i[0])}},{key:"markRanges",value:function(e,t){var n=this;this.opt=t;var r=0,o=this.checkRanges(e);o&&o.length?(this.log("Starting to mark with the following ranges: "+JSON.stringify(o)),this.wrapRangeFromIndex(o,(function(e,t,r,o){return n.opt.filter(e,t,r,o)}),(function(e,t){r++,n.opt.each(e,t)}),(function(){n.opt.done(r)}))):this.opt.done(r)}},{key:"unmark",value:function(e){var t=this;this.opt=e;var n=this.opt.element?this.opt.element:"*";n+="[data-markjs]",this.opt.className&&(n+="."+this.opt.className),this.log('Removal selector "'+n+'"'),this.iterator.forEachNode(NodeFilter.SHOW_ELEMENT,(function(e){t.unwrapMatches(e)}),(function(e){var r=o.matches(e,n),a=t.matchesExclude(e);return!r||a?NodeFilter.FILTER_REJECT:NodeFilter.FILTER_ACCEPT}),this.opt.done)}},{key:"opt",set:function(e){this._opt=r({},{element:"",className:"",exclude:[],iframes:!1,iframesTimeout:5e3,separateWordSearch:!0,diacritics:!0,synonyms:{},accuracy:"partially",acrossElements:!1,caseSensitive:!1,ignoreJoiners:!1,ignoreGroups:0,ignorePunctuation:[],wildcards:"disabled",each:function(){},noMatch:function(){},filter:function(){return!0},done:function(){},debug:!1,log:window.console},e)},get:function(){return this._opt}},{key:"iterator",get:function(){return new o(this.ctx,this.opt.iframes,this.opt.exclude,this.opt.iframesTimeout)}}]),a}();function i(e){var t=this,n=new a(e);return this.mark=function(e,r){return n.mark(e,r),t},this.markRegExp=function(e,r){return n.markRegExp(e,r),t},this.markRanges=function(e,r){return n.markRanges(e,r),t},this.unmark=function(e){return n.unmark(e),t},this}return i}()},73369:(e,t,n)=>{"use strict";n.r(t)},47257:(e,t,n)=>{"use strict";n.r(t)},74865:function(e,t,n){var r,o;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 o(e,t,n){return e<t?t:e>n?n:e}function a(e){return 100*(-1+e)}function i(e,t,n){var o;return(o="translate3d"===r.positionUsing?{transform:"translate3d("+a(e)+"%,0,0)"}:"translate"===r.positionUsing?{transform:"translate("+a(e)+"%,0)"}:{"margin-left":a(e)+"%"}).transition="all "+t+"ms "+n,o}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=o(e,r.minimum,1),n.status=1===e?null:e;var a=n.render(!t),c=a.querySelector(r.barSelector),u=r.speed,d=r.easing;return a.offsetWidth,s((function(t){""===r.positionUsing&&(r.positionUsing=n.getPositioningCSS()),l(c,i(e,u,d)),1===e?(l(a,{transition:"none",opacity:1}),a.offsetWidth,setTimeout((function(){l(a,{transition:"all "+u+"ms linear",opacity:0}),setTimeout((function(){n.remove(),t()}),u)}),u)):setTimeout(t,u)})),this},n.isStarted=function(){return"number"==typeof n.status},n.start=function(){n.status||n.set(0);var e=function(){setTimeout((function(){n.status&&(n.trickle(),e())}),r.trickleSpeed)};return r.trickle&&e(),this},n.done=function(e){return e||n.status?n.inc(.3+.5*Math.random()).set(1):this},n.inc=function(e){var t=n.status;return t?("number"!=typeof e&&(e=(1-t)*o(Math.random()*t,.1,.95)),t=o(t+e,0,.994),n.set(t)):n.start()},n.trickle=function(){return n.inc(Math.random()*r.trickleRate)},e=0,t=0,n.promise=function(r){return r&&"resolved"!==r.state()?(0===t&&n.start(),e++,t++,r.always((function(){0==--t?(e=0,n.done()):n.set((e-t)/e)})),this):this},n.render=function(e){if(n.isRendered())return document.getElementById("nprogress");u(document.documentElement,"nprogress-busy");var t=document.createElement("div");t.id="nprogress",t.innerHTML=r.template;var o,i=t.querySelector(r.barSelector),s=e?"-100":a(n.status||0),c=document.querySelector(r.parent);return l(i,{transition:"all 0 linear",transform:"translate3d("+s+"%,0,0)"}),r.showSpinner||(o=t.querySelector(r.spinnerSelector))&&f(o),c!=document.body&&u(c,"nprogress-custom-parent"),c.appendChild(t),t},n.remove=function(){d(document.documentElement,"nprogress-busy"),d(document.querySelector(r.parent),"nprogress-custom-parent");var e=document.getElementById("nprogress");e&&f(e)},n.isRendered=function(){return!!document.getElementById("nprogress")},n.getPositioningCSS=function(){var e=document.body.style,t="WebkitTransform"in e?"Webkit":"MozTransform"in e?"Moz":"msTransform"in e?"ms":"OTransform"in e?"O":"";return t+"Perspective"in e?"translate3d":t+"Transform"in e?"translate":"margin"};var s=function(){var e=[];function t(){var n=e.shift();n&&n(t)}return function(n){e.push(n),1==e.length&&t()}}(),l=function(){var e=["Webkit","O","Moz","ms"],t={};function n(e){return e.replace(/^-ms-/,"ms-").replace(/-([\da-z])/gi,(function(e,t){return t.toUpperCase()}))}function r(t){var n=document.body.style;if(t in n)return t;for(var r,o=e.length,a=t.charAt(0).toUpperCase()+t.slice(1);o--;)if((r=e[o]+a)in n)return r;return t}function o(e){return e=n(e),t[e]||(t[e]=r(e))}function a(e,t,n){t=o(t),e.style[t]=n}return function(e,t){var n,r,o=arguments;if(2==o.length)for(n in t)void 0!==(r=t[n])&&t.hasOwnProperty(n)&&a(e,n,r);else a(e,o[1],o[2])}}();function c(e,t){return("string"==typeof e?e:p(e)).indexOf(" "+t+" ")>=0}function u(e,t){var n=p(e),r=n+t;c(n,t)||(e.className=r.substring(1))}function d(e,t){var n,r=p(e);c(e,t)&&(n=r.replace(" "+t+" "," "),e.className=n.substring(1,n.length-1))}function p(e){return(" "+(e.className||"")+" ").replace(/\s+/gi," ")}function f(e){e&&e.parentNode&&e.parentNode.removeChild(e)}return n},void 0===(o="function"==typeof r?r.call(t,n,t,e):r)||(e.exports=o)},57874:()=>{!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+(?:\.\w+)*(?=\+?=)/,inside:{environment:{pattern:RegExp("(^|[\\s;|&]|[<>]\\()"+t),lookbehind:!0,alias:"constant"}},alias:"variable",lookbehind:!0},parameter:{pattern:/(^|\s)-{1,2}(?:\w+:[+-]?)?\w+(?:\.\w+)*(?=[=\s]|$)/,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|cargo|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|java|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|sysctl|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 o=["comment","function-name","for-or-select","assign-left","parameter","string","environment","function","keyword","builtin","boolean","file-descriptor","operator","punctuation","number"],a=r.variable[1].inside,i=0;i<o.length;i++)a[o[i]]=e.languages.bash[o[i]];e.languages.sh=e.languages.bash,e.languages.shell=e.languages.bash}(Prism)},40728:()=>{!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],o=[];/^\w+$/.test(n)||o.push(/\w+/.exec(n)[0]),"diff"===n&&o.push("bold"),e.languages.diff[n]={pattern:RegExp("^(?:["+r+"].*(?:\r\n?|\n|(?![\\s\\S])))+","m"),alias:o,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})}(Prism)},29525:()=>{Prism.languages.ini={comment:{pattern:/(^[ \f\t\v]*)[#;][^\n\r]*/m,lookbehind:!0},section:{pattern:/(^[ \f\t\v]*)\[[^\n\r\]]*\]?/m,lookbehind:!0,inside:{"section-name":{pattern:/(^\[[ \f\t\v]*)[^ \f\t\v\]]+(?:[ \f\t\v]+[^ \f\t\v\]]+)*/,lookbehind:!0,alias:"selector"},punctuation:/\[|\]/}},key:{pattern:/(^[ \f\t\v]*)[^ \f\n\r\t\v=]+(?:[ \f\t\v]+[^ \f\n\r\t\v=]+)*(?=[ \f\t\v]*=)/m,lookbehind:!0,alias:"attr-name"},value:{pattern:/(=[ \f\t\v]*)[^ \f\n\r\t\v]+(?:[ \f\t\v]+[^ \f\n\r\t\v]+)*/,lookbehind:!0,alias:"attr-value",inside:{"inner-value":{pattern:/^("|').+(?=\1$)/,lookbehind:!0}}},punctuation:/=/}},96854:()=>{!function(e){function t(e,t){return"___"+e.toUpperCase()+t+"___"}Object.defineProperties(e.languages["markup-templating"]={},{buildPlaceholders:{value:function(n,r,o,a){if(n.language===r){var i=n.tokenStack=[];n.code=n.code.replace(o,(function(e){if("function"==typeof a&&!a(e))return e;for(var o,s=i.length;-1!==n.code.indexOf(o=t(r,s));)++s;return i[s]=e,o})),n.grammar=e.languages.markup}}},tokenizePlaceholders:{value:function(n,r){if(n.language===r&&n.tokenStack){n.grammar=e.languages[r];var o=0,a=Object.keys(n.tokenStack);!function i(s){for(var l=0;l<s.length&&!(o>=a.length);l++){var c=s[l];if("string"==typeof c||c.content&&"string"==typeof c.content){var u=a[o],d=n.tokenStack[u],p="string"==typeof c?c:c.content,f=t(r,u),g=p.indexOf(f);if(g>-1){++o;var m=p.substring(0,g),h=new e.Token(r,e.tokenize(d,n.grammar),"language-"+r,d),b=p.substring(g+f.length),y=[];m&&y.push.apply(y,i([m])),y.push(h),b&&y.push.apply(y,i([b])),"string"==typeof c?s.splice.apply(s,[l,1].concat(y)):c.content=y}}else c.content&&i(c.content)}return s}(n.tokens)}}}})}(Prism)},86862:()=>{!function(e){var t=e.languages.powershell={comment:[{pattern:/(^|[^`])<#[\s\S]*?#>/,lookbehind:!0},{pattern:/(^|[^`])#.*/,lookbehind:!0}],string:[{pattern:/"(?:`[\s\S]|[^`"])*"/,greedy:!0,inside:null},{pattern:/'(?:[^']|'')*'/,greedy:!0}],namespace:/\[[a-z](?:\[(?:\[[^\]]*\]|[^\[\]])*\]|[^\[\]])*\]/i,boolean:/\$(?:false|true)\b/i,variable:/\$\w+\b/,function:[/\b(?:Add|Approve|Assert|Backup|Block|Checkpoint|Clear|Close|Compare|Complete|Compress|Confirm|Connect|Convert|ConvertFrom|ConvertTo|Copy|Debug|Deny|Disable|Disconnect|Dismount|Edit|Enable|Enter|Exit|Expand|Export|Find|ForEach|Format|Get|Grant|Group|Hide|Import|Initialize|Install|Invoke|Join|Limit|Lock|Measure|Merge|Move|New|Open|Optimize|Out|Ping|Pop|Protect|Publish|Push|Read|Receive|Redo|Register|Remove|Rename|Repair|Request|Reset|Resize|Resolve|Restart|Restore|Resume|Revoke|Save|Search|Select|Send|Set|Show|Skip|Sort|Split|Start|Step|Stop|Submit|Suspend|Switch|Sync|Tee|Test|Trace|Unblock|Undo|Uninstall|Unlock|Unprotect|Unpublish|Unregister|Update|Use|Wait|Watch|Where|Write)-[a-z]+\b/i,/\b(?:ac|cat|chdir|clc|cli|clp|clv|compare|copy|cp|cpi|cpp|cvpa|dbp|del|diff|dir|ebp|echo|epal|epcsv|epsn|erase|fc|fl|ft|fw|gal|gbp|gc|gci|gcs|gdr|gi|gl|gm|gp|gps|group|gsv|gu|gv|gwmi|iex|ii|ipal|ipcsv|ipsn|irm|iwmi|iwr|kill|lp|ls|measure|mi|mount|move|mp|mv|nal|ndr|ni|nv|ogv|popd|ps|pushd|pwd|rbp|rd|rdr|ren|ri|rm|rmdir|rni|rnp|rp|rv|rvpa|rwmi|sal|saps|sasv|sbp|sc|select|set|shcm|si|sl|sleep|sls|sort|sp|spps|spsv|start|sv|swmi|tee|trcm|type|write)\b/i],keyword:/\b(?:Begin|Break|Catch|Class|Continue|Data|Define|Do|DynamicParam|Else|ElseIf|End|Exit|Filter|Finally|For|ForEach|From|Function|If|InlineScript|Parallel|Param|Process|Return|Sequence|Switch|Throw|Trap|Try|Until|Using|Var|While|Workflow)\b/i,operator:{pattern:/(^|\W)(?:!|-(?:b?(?:and|x?or)|as|(?:Not)?(?:Contains|In|Like|Match)|eq|ge|gt|is(?:Not)?|Join|le|lt|ne|not|Replace|sh[lr])\b|-[-=]?|\+[+=]?|[*\/%]=?)/i,lookbehind:!0},punctuation:/[|{}[\];(),.]/};t.string[0].inside={function:{pattern:/(^|[^`])\$\((?:\$\([^\r\n()]*\)|(?!\$\()[^\r\n)])*\)/,lookbehind:!0,inside:t},boolean:t.boolean,variable:t.variable}}(Prism)},24249:(e,t,n)=>{var r={"./prism-bash":57874,"./prism-diff":40728,"./prism-ini":29525,"./prism-powershell":86862};function o(e){var t=a(e);return n(t)}function a(e){if(!n.o(r,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return r[e]}o.keys=function(){return Object.keys(r)},o.resolve=a,e.exports=o,o.id=24249},92703:(e,t,n)=>{"use strict";var r=n(50414);function o(){}function a(){}a.resetWarningCache=o,e.exports=function(){function e(e,t,n,o,a,i){if(i!==r){var s=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw s.name="Invariant Violation",s}}function t(){return e}e.isRequired=e;var n={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:a,resetWarningCache:o};return n.PropTypes=n,n}},45697:(e,t,n)=>{e.exports=n(92703)()},50414:e=>{"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},64448:(e,t,n)=>{"use strict";var r=n(67294),o=n(63840);function a(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 i=new Set,s={};function l(e,t){c(e,t),c(e+"Capture",t)}function c(e,t){for(s[e]=t,e=0;e<t.length;e++)i.add(t[e])}var u=!("undefined"==typeof window||void 0===window.document||void 0===window.document.createElement),d=Object.prototype.hasOwnProperty,p=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,f={},g={};function m(e,t,n,r,o,a,i){this.acceptsBooleans=2===t||3===t||4===t,this.attributeName=r,this.attributeNamespace=o,this.mustUseProperty=n,this.propertyName=e,this.type=t,this.sanitizeURL=a,this.removeEmptyString=i}var h={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach((function(e){h[e]=new m(e,0,!1,e,null,!1,!1)})),[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach((function(e){var t=e[0];h[t]=new m(t,1,!1,e[1],null,!1,!1)})),["contentEditable","draggable","spellCheck","value"].forEach((function(e){h[e]=new m(e,2,!1,e.toLowerCase(),null,!1,!1)})),["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach((function(e){h[e]=new m(e,2,!1,e,null,!1,!1)})),"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach((function(e){h[e]=new m(e,3,!1,e.toLowerCase(),null,!1,!1)})),["checked","multiple","muted","selected"].forEach((function(e){h[e]=new m(e,3,!0,e,null,!1,!1)})),["capture","download"].forEach((function(e){h[e]=new m(e,4,!1,e,null,!1,!1)})),["cols","rows","size","span"].forEach((function(e){h[e]=new m(e,6,!1,e,null,!1,!1)})),["rowSpan","start"].forEach((function(e){h[e]=new m(e,5,!1,e.toLowerCase(),null,!1,!1)}));var b=/[\-:]([a-z])/g;function y(e){return e[1].toUpperCase()}function v(e,t,n,r){var o=h.hasOwnProperty(t)?h[t]:null;(null!==o?0!==o.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,o,r)&&(n=null),r||null===o?function(e){return!!d.call(g,e)||!d.call(f,e)&&(p.test(e)?g[e]=!0:(f[e]=!0,!1))}(t)&&(null===n?e.removeAttribute(t):e.setAttribute(t,""+n)):o.mustUseProperty?e[o.propertyName]=null===n?3!==o.type&&"":n:(t=o.attributeName,r=o.attributeNamespace,null===n?e.removeAttribute(t):(n=3===(o=o.type)||4===o&&!0===n?"":""+n,r?e.setAttributeNS(r,t,n):e.setAttribute(t,n))))}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach((function(e){var t=e.replace(b,y);h[t]=new m(t,1,!1,e,null,!1,!1)})),"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach((function(e){var t=e.replace(b,y);h[t]=new m(t,1,!1,e,"http://www.w3.org/1999/xlink",!1,!1)})),["xml:base","xml:lang","xml:space"].forEach((function(e){var t=e.replace(b,y);h[t]=new m(t,1,!1,e,"http://www.w3.org/XML/1998/namespace",!1,!1)})),["tabIndex","crossOrigin"].forEach((function(e){h[e]=new m(e,1,!1,e.toLowerCase(),null,!1,!1)})),h.xlinkHref=new m("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1),["src","href","action","formAction"].forEach((function(e){h[e]=new m(e,1,!1,e.toLowerCase(),null,!0,!0)}));var w=r.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED,k=Symbol.for("react.element"),S=Symbol.for("react.portal"),_=Symbol.for("react.fragment"),x=Symbol.for("react.strict_mode"),E=Symbol.for("react.profiler"),O=Symbol.for("react.provider"),P=Symbol.for("react.context"),j=Symbol.for("react.forward_ref"),C=Symbol.for("react.suspense"),T=Symbol.for("react.suspense_list"),I=Symbol.for("react.memo"),A=Symbol.for("react.lazy");Symbol.for("react.scope"),Symbol.for("react.debug_trace_mode");var N=Symbol.for("react.offscreen");Symbol.for("react.legacy_hidden"),Symbol.for("react.cache"),Symbol.for("react.tracing_marker");var L=Symbol.iterator;function R(e){return null===e||"object"!=typeof e?null:"function"==typeof(e=L&&e[L]||e["@@iterator"])?e:null}var D,F=Object.assign;function M(e){if(void 0===D)try{throw Error()}catch(n){var t=n.stack.trim().match(/\n( *(at )?)/);D=t&&t[1]||""}return"\n"+D+e}var B=!1;function z(e,t){if(!e||B)return"";B=!0;var n=Error.prepareStackTrace;Error.prepareStackTrace=void 0;try{if(t)if(t=function(){throw Error()},Object.defineProperty(t.prototype,"props",{set:function(){throw Error()}}),"object"==typeof Reflect&&Reflect.construct){try{Reflect.construct(t,[])}catch(c){var r=c}Reflect.construct(e,[],t)}else{try{t.call()}catch(c){r=c}e.call(t.prototype)}else{try{throw Error()}catch(c){r=c}e()}}catch(c){if(c&&r&&"string"==typeof c.stack){for(var o=c.stack.split("\n"),a=r.stack.split("\n"),i=o.length-1,s=a.length-1;1<=i&&0<=s&&o[i]!==a[s];)s--;for(;1<=i&&0<=s;i--,s--)if(o[i]!==a[s]){if(1!==i||1!==s)do{if(i--,0>--s||o[i]!==a[s]){var l="\n"+o[i].replace(" at new "," at ");return e.displayName&&l.includes("<anonymous>")&&(l=l.replace("<anonymous>",e.displayName)),l}}while(1<=i&&0<=s);break}}}finally{B=!1,Error.prepareStackTrace=n}return(e=e?e.displayName||e.name:"")?M(e):""}function U(e){switch(e.tag){case 5:return M(e.type);case 16:return M("Lazy");case 13:return M("Suspense");case 19:return M("SuspenseList");case 0:case 2:case 15:return e=z(e.type,!1);case 11:return e=z(e.type.render,!1);case 1:return e=z(e.type,!0);default:return""}}function $(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 _:return"Fragment";case S:return"Portal";case E:return"Profiler";case x:return"StrictMode";case C:return"Suspense";case T:return"SuspenseList"}if("object"==typeof e)switch(e.$$typeof){case P:return(e.displayName||"Context")+".Consumer";case O:return(e._context.displayName||"Context")+".Provider";case j:var t=e.render;return(e=e.displayName)||(e=""!==(e=t.displayName||t.name||"")?"ForwardRef("+e+")":"ForwardRef"),e;case I:return null!==(t=e.displayName||null)?t:$(e.type)||"Memo";case A:t=e._payload,e=e._init;try{return $(e(t))}catch(n){}}return null}function H(e){var t=e.type;switch(e.tag){case 24:return"Cache";case 9:return(t.displayName||"Context")+".Consumer";case 10:return(t._context.displayName||"Context")+".Provider";case 18:return"DehydratedFragment";case 11:return e=(e=t.render).displayName||e.name||"",t.displayName||(""!==e?"ForwardRef("+e+")":"ForwardRef");case 7:return"Fragment";case 5:return t;case 4:return"Portal";case 3:return"Root";case 6:return"Text";case 16:return $(t);case 8:return t===x?"StrictMode":"Mode";case 22:return"Offscreen";case 12:return"Profiler";case 21:return"Scope";case 13:return"Suspense";case 19:return"SuspenseList";case 25:return"TracingMarker";case 1:case 0:case 17:case 2:case 14:case 15:if("function"==typeof t)return t.displayName||t.name||null;if("string"==typeof t)return t}return null}function q(e){switch(typeof e){case"boolean":case"number":case"string":case"undefined":case"object":return e;default:return""}}function V(e){var t=e.type;return(e=e.nodeName)&&"input"===e.toLowerCase()&&("checkbox"===t||"radio"===t)}function Q(e){e._valueTracker||(e._valueTracker=function(e){var t=V(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 o=n.get,a=n.set;return Object.defineProperty(e,t,{configurable:!0,get:function(){return o.call(this)},set:function(e){r=""+e,a.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 Z(e){if(!e)return!1;var t=e._valueTracker;if(!t)return!0;var n=t.getValue(),r="";return e&&(r=V(e)?e.checked?"true":"false":e.value),(e=r)!==n&&(t.setValue(e),!0)}function W(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 G(e,t){var n=t.checked;return F({},t,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:null!=n?n:e._wrapperState.initialChecked})}function Y(e,t){var n=null==t.defaultValue?"":t.defaultValue,r=null!=t.checked?t.checked:t.defaultChecked;n=q(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 K(e,t){null!=(t=t.checked)&&v(e,"checked",t,!1)}function X(e,t){K(e,t);var n=q(t.value),r=t.type;if(null!=n)"number"===r?(0===n&&""===e.value||e.value!=n)&&(e.value=""+n):e.value!==""+n&&(e.value=""+n);else if("submit"===r||"reset"===r)return void e.removeAttribute("value");t.hasOwnProperty("value")?ee(e,t.type,n):t.hasOwnProperty("defaultValue")&&ee(e,t.type,q(t.defaultValue)),null==t.checked&&null!=t.defaultChecked&&(e.defaultChecked=!!t.defaultChecked)}function J(e,t,n){if(t.hasOwnProperty("value")||t.hasOwnProperty("defaultValue")){var r=t.type;if(!("submit"!==r&&"reset"!==r||void 0!==t.value&&null!==t.value))return;t=""+e._wrapperState.initialValue,n||t===e.value||(e.value=t),e.defaultValue=t}""!==(n=e.name)&&(e.name=""),e.defaultChecked=!!e._wrapperState.initialChecked,""!==n&&(e.name=n)}function ee(e,t,n){"number"===t&&W(e.ownerDocument)===e||(null==n?e.defaultValue=""+e._wrapperState.initialValue:e.defaultValue!==""+n&&(e.defaultValue=""+n))}var te=Array.isArray;function ne(e,t,n,r){if(e=e.options,t){t={};for(var o=0;o<n.length;o++)t["$"+n[o]]=!0;for(n=0;n<e.length;n++)o=t.hasOwnProperty("$"+e[n].value),e[n].selected!==o&&(e[n].selected=o),o&&r&&(e[n].defaultSelected=!0)}else{for(n=""+q(n),t=null,o=0;o<e.length;o++){if(e[o].value===n)return e[o].selected=!0,void(r&&(e[o].defaultSelected=!0));null!==t||e[o].disabled||(t=e[o])}null!==t&&(t.selected=!0)}}function re(e,t){if(null!=t.dangerouslySetInnerHTML)throw Error(a(91));return F({},t,{value:void 0,defaultValue:void 0,children:""+e._wrapperState.initialValue})}function oe(e,t){var n=t.value;if(null==n){if(n=t.children,t=t.defaultValue,null!=n){if(null!=t)throw Error(a(92));if(te(n)){if(1<n.length)throw Error(a(93));n=n[0]}t=n}null==t&&(t=""),n=t}e._wrapperState={initialValue:q(n)}}function ae(e,t){var n=q(t.value),r=q(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 ie(e){var t=e.textContent;t===e._wrapperState.initialValue&&""!==t&&null!==t&&(e.value=t)}function se(e){switch(e){case"svg":return"http://www.w3.org/2000/svg";case"math":return"http://www.w3.org/1998/Math/MathML";default:return"http://www.w3.org/1999/xhtml"}}function le(e,t){return null==e||"http://www.w3.org/1999/xhtml"===e?se(t):"http://www.w3.org/2000/svg"===e&&"foreignObject"===t?"http://www.w3.org/1999/xhtml":e}var ce,ue,de=(ue=function(e,t){if("http://www.w3.org/2000/svg"!==e.namespaceURI||"innerHTML"in e)e.innerHTML=t;else{for((ce=ce||document.createElement("div")).innerHTML="<svg>"+t.valueOf().toString()+"</svg>",t=ce.firstChild;e.firstChild;)e.removeChild(e.firstChild);for(;t.firstChild;)e.appendChild(t.firstChild)}},"undefined"!=typeof MSApp&&MSApp.execUnsafeLocalFunction?function(e,t,n,r){MSApp.execUnsafeLocalFunction((function(){return ue(e,t)}))}:ue);function pe(e,t){if(t){var n=e.firstChild;if(n&&n===e.lastChild&&3===n.nodeType)return void(n.nodeValue=t)}e.textContent=t}var fe={animationIterationCount:!0,aspectRatio:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},ge=["Webkit","ms","Moz","O"];function me(e,t,n){return null==t||"boolean"==typeof t||""===t?"":n||"number"!=typeof t||0===t||fe.hasOwnProperty(e)&&fe[e]?(""+t).trim():t+"px"}function he(e,t){for(var n in e=e.style,t)if(t.hasOwnProperty(n)){var r=0===n.indexOf("--"),o=me(n,t[n],r);"float"===n&&(n="cssFloat"),r?e.setProperty(n,o):e[n]=o}}Object.keys(fe).forEach((function(e){ge.forEach((function(t){t=t+e.charAt(0).toUpperCase()+e.substring(1),fe[t]=fe[e]}))}));var be=F({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function ye(e,t){if(t){if(be[e]&&(null!=t.children||null!=t.dangerouslySetInnerHTML))throw Error(a(137,e));if(null!=t.dangerouslySetInnerHTML){if(null!=t.children)throw Error(a(60));if("object"!=typeof t.dangerouslySetInnerHTML||!("__html"in t.dangerouslySetInnerHTML))throw Error(a(61))}if(null!=t.style&&"object"!=typeof t.style)throw Error(a(62))}}function ve(e,t){if(-1===e.indexOf("-"))return"string"==typeof t.is;switch(e){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}var we=null;function ke(e){return(e=e.target||e.srcElement||window).correspondingUseElement&&(e=e.correspondingUseElement),3===e.nodeType?e.parentNode:e}var Se=null,_e=null,xe=null;function Ee(e){if(e=wo(e)){if("function"!=typeof Se)throw Error(a(280));var t=e.stateNode;t&&(t=So(t),Se(e.stateNode,e.type,t))}}function Oe(e){_e?xe?xe.push(e):xe=[e]:_e=e}function Pe(){if(_e){var e=_e,t=xe;if(xe=_e=null,Ee(e),t)for(e=0;e<t.length;e++)Ee(t[e])}}function je(e,t){return e(t)}function Ce(){}var Te=!1;function Ie(e,t,n){if(Te)return e(t,n);Te=!0;try{return je(e,t,n)}finally{Te=!1,(null!==_e||null!==xe)&&(Ce(),Pe())}}function Ae(e,t){var n=e.stateNode;if(null===n)return null;var r=So(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(a(231,t,typeof n));return n}var Ne=!1;if(u)try{var Le={};Object.defineProperty(Le,"passive",{get:function(){Ne=!0}}),window.addEventListener("test",Le,Le),window.removeEventListener("test",Le,Le)}catch(ue){Ne=!1}function Re(e,t,n,r,o,a,i,s,l){var c=Array.prototype.slice.call(arguments,3);try{t.apply(n,c)}catch(u){this.onError(u)}}var De=!1,Fe=null,Me=!1,Be=null,ze={onError:function(e){De=!0,Fe=e}};function Ue(e,t,n,r,o,a,i,s,l){De=!1,Fe=null,Re.apply(ze,arguments)}function $e(e){var t=e,n=e;if(e.alternate)for(;t.return;)t=t.return;else{e=t;do{0!=(4098&(t=e).flags)&&(n=t.return),e=t.return}while(e)}return 3===t.tag?n:null}function He(e){if(13===e.tag){var t=e.memoizedState;if(null===t&&(null!==(e=e.alternate)&&(t=e.memoizedState)),null!==t)return t.dehydrated}return null}function qe(e){if($e(e)!==e)throw Error(a(188))}function Ve(e){return null!==(e=function(e){var t=e.alternate;if(!t){if(null===(t=$e(e)))throw Error(a(188));return t!==e?null:e}for(var n=e,r=t;;){var o=n.return;if(null===o)break;var i=o.alternate;if(null===i){if(null!==(r=o.return)){n=r;continue}break}if(o.child===i.child){for(i=o.child;i;){if(i===n)return qe(o),e;if(i===r)return qe(o),t;i=i.sibling}throw Error(a(188))}if(n.return!==r.return)n=o,r=i;else{for(var s=!1,l=o.child;l;){if(l===n){s=!0,n=o,r=i;break}if(l===r){s=!0,r=o,n=i;break}l=l.sibling}if(!s){for(l=i.child;l;){if(l===n){s=!0,n=i,r=o;break}if(l===r){s=!0,r=i,n=o;break}l=l.sibling}if(!s)throw Error(a(189))}}if(n.alternate!==r)throw Error(a(190))}if(3!==n.tag)throw Error(a(188));return n.stateNode.current===n?e:t}(e))?Qe(e):null}function Qe(e){if(5===e.tag||6===e.tag)return e;for(e=e.child;null!==e;){var t=Qe(e);if(null!==t)return t;e=e.sibling}return null}var Ze=o.unstable_scheduleCallback,We=o.unstable_cancelCallback,Ge=o.unstable_shouldYield,Ye=o.unstable_requestPaint,Ke=o.unstable_now,Xe=o.unstable_getCurrentPriorityLevel,Je=o.unstable_ImmediatePriority,et=o.unstable_UserBlockingPriority,tt=o.unstable_NormalPriority,nt=o.unstable_LowPriority,rt=o.unstable_IdlePriority,ot=null,at=null;var it=Math.clz32?Math.clz32:function(e){return e>>>=0,0===e?32:31-(st(e)/lt|0)|0},st=Math.log,lt=Math.LN2;var ct=64,ut=4194304;function dt(e){switch(e&-e){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return 4194240&e;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return 130023424&e;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;default:return e}}function pt(e,t){var n=e.pendingLanes;if(0===n)return 0;var r=0,o=e.suspendedLanes,a=e.pingedLanes,i=268435455&n;if(0!==i){var s=i&~o;0!==s?r=dt(s):0!==(a&=i)&&(r=dt(a))}else 0!==(i=n&~o)?r=dt(i):0!==a&&(r=dt(a));if(0===r)return 0;if(0!==t&&t!==r&&0==(t&o)&&((o=r&-r)>=(a=t&-t)||16===o&&0!=(4194240&a)))return t;if(0!=(4&r)&&(r|=16&n),0!==(t=e.entangledLanes))for(e=e.entanglements,t&=r;0<t;)o=1<<(n=31-it(t)),r|=e[n],t&=~o;return r}function ft(e,t){switch(e){case 1:case 2:case 4:return t+250;case 8:case 16:case 32:case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return t+5e3;default:return-1}}function gt(e){return 0!==(e=-1073741825&e.pendingLanes)?e:1073741824&e?1073741824:0}function mt(){var e=ct;return 0==(4194240&(ct<<=1))&&(ct=64),e}function ht(e){for(var t=[],n=0;31>n;n++)t.push(e);return t}function bt(e,t,n){e.pendingLanes|=t,536870912!==t&&(e.suspendedLanes=0,e.pingedLanes=0),(e=e.eventTimes)[t=31-it(t)]=n}function yt(e,t){var n=e.entangledLanes|=t;for(e=e.entanglements;n;){var r=31-it(n),o=1<<r;o&t|e[r]&t&&(e[r]|=t),n&=~o}}var vt=0;function wt(e){return 1<(e&=-e)?4<e?0!=(268435455&e)?16:536870912:4:1}var kt,St,_t,xt,Et,Ot=!1,Pt=[],jt=null,Ct=null,Tt=null,It=new Map,At=new Map,Nt=[],Lt="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 Rt(e,t){switch(e){case"focusin":case"focusout":jt=null;break;case"dragenter":case"dragleave":Ct=null;break;case"mouseover":case"mouseout":Tt=null;break;case"pointerover":case"pointerout":It.delete(t.pointerId);break;case"gotpointercapture":case"lostpointercapture":At.delete(t.pointerId)}}function Dt(e,t,n,r,o,a){return null===e||e.nativeEvent!==a?(e={blockedOn:t,domEventName:n,eventSystemFlags:r,nativeEvent:a,targetContainers:[o]},null!==t&&(null!==(t=wo(t))&&St(t)),e):(e.eventSystemFlags|=r,t=e.targetContainers,null!==o&&-1===t.indexOf(o)&&t.push(o),e)}function Ft(e){var t=vo(e.target);if(null!==t){var n=$e(t);if(null!==n)if(13===(t=n.tag)){if(null!==(t=He(n)))return e.blockedOn=t,void Et(e.priority,(function(){_t(n)}))}else if(3===t&&n.stateNode.current.memoizedState.isDehydrated)return void(e.blockedOn=3===n.tag?n.stateNode.containerInfo:null)}e.blockedOn=null}function Mt(e){if(null!==e.blockedOn)return!1;for(var t=e.targetContainers;0<t.length;){var n=Gt(e.domEventName,e.eventSystemFlags,t[0],e.nativeEvent);if(null!==n)return null!==(t=wo(n))&&St(t),e.blockedOn=n,!1;var r=new(n=e.nativeEvent).constructor(n.type,n);we=r,n.target.dispatchEvent(r),we=null,t.shift()}return!0}function Bt(e,t,n){Mt(e)&&n.delete(t)}function zt(){Ot=!1,null!==jt&&Mt(jt)&&(jt=null),null!==Ct&&Mt(Ct)&&(Ct=null),null!==Tt&&Mt(Tt)&&(Tt=null),It.forEach(Bt),At.forEach(Bt)}function Ut(e,t){e.blockedOn===t&&(e.blockedOn=null,Ot||(Ot=!0,o.unstable_scheduleCallback(o.unstable_NormalPriority,zt)))}function $t(e){function t(t){return Ut(t,e)}if(0<Pt.length){Ut(Pt[0],e);for(var n=1;n<Pt.length;n++){var r=Pt[n];r.blockedOn===e&&(r.blockedOn=null)}}for(null!==jt&&Ut(jt,e),null!==Ct&&Ut(Ct,e),null!==Tt&&Ut(Tt,e),It.forEach(t),At.forEach(t),n=0;n<Nt.length;n++)(r=Nt[n]).blockedOn===e&&(r.blockedOn=null);for(;0<Nt.length&&null===(n=Nt[0]).blockedOn;)Ft(n),null===n.blockedOn&&Nt.shift()}var Ht=w.ReactCurrentBatchConfig,qt=!0;function Vt(e,t,n,r){var o=vt,a=Ht.transition;Ht.transition=null;try{vt=1,Zt(e,t,n,r)}finally{vt=o,Ht.transition=a}}function Qt(e,t,n,r){var o=vt,a=Ht.transition;Ht.transition=null;try{vt=4,Zt(e,t,n,r)}finally{vt=o,Ht.transition=a}}function Zt(e,t,n,r){if(qt){var o=Gt(e,t,n,r);if(null===o)qr(e,t,r,Wt,n),Rt(e,r);else if(function(e,t,n,r,o){switch(t){case"focusin":return jt=Dt(jt,e,t,n,r,o),!0;case"dragenter":return Ct=Dt(Ct,e,t,n,r,o),!0;case"mouseover":return Tt=Dt(Tt,e,t,n,r,o),!0;case"pointerover":var a=o.pointerId;return It.set(a,Dt(It.get(a)||null,e,t,n,r,o)),!0;case"gotpointercapture":return a=o.pointerId,At.set(a,Dt(At.get(a)||null,e,t,n,r,o)),!0}return!1}(o,e,t,n,r))r.stopPropagation();else if(Rt(e,r),4&t&&-1<Lt.indexOf(e)){for(;null!==o;){var a=wo(o);if(null!==a&&kt(a),null===(a=Gt(e,t,n,r))&&qr(e,t,r,Wt,n),a===o)break;o=a}null!==o&&r.stopPropagation()}else qr(e,t,r,null,n)}}var Wt=null;function Gt(e,t,n,r){if(Wt=null,null!==(e=vo(e=ke(r))))if(null===(t=$e(e)))e=null;else if(13===(n=t.tag)){if(null!==(e=He(t)))return e;e=null}else if(3===n){if(t.stateNode.current.memoizedState.isDehydrated)return 3===t.tag?t.stateNode.containerInfo:null;e=null}else t!==e&&(e=null);return Wt=e,null}function Yt(e){switch(e){case"cancel":case"click":case"close":case"contextmenu":case"copy":case"cut":case"auxclick":case"dblclick":case"dragend":case"dragstart":case"drop":case"focusin":case"focusout":case"input":case"invalid":case"keydown":case"keypress":case"keyup":case"mousedown":case"mouseup":case"paste":case"pause":case"play":case"pointercancel":case"pointerdown":case"pointerup":case"ratechange":case"reset":case"resize":case"seeked":case"submit":case"touchcancel":case"touchend":case"touchstart":case"volumechange":case"change":case"selectionchange":case"textInput":case"compositionstart":case"compositionend":case"compositionupdate":case"beforeblur":case"afterblur":case"beforeinput":case"blur":case"fullscreenchange":case"focus":case"hashchange":case"popstate":case"select":case"selectstart":return 1;case"drag":case"dragenter":case"dragexit":case"dragleave":case"dragover":case"mousemove":case"mouseout":case"mouseover":case"pointermove":case"pointerout":case"pointerover":case"scroll":case"toggle":case"touchmove":case"wheel":case"mouseenter":case"mouseleave":case"pointerenter":case"pointerleave":return 4;case"message":switch(Xe()){case Je:return 1;case et:return 4;case tt:case nt:return 16;case rt:return 536870912;default:return 16}default:return 16}}var Kt=null,Xt=null,Jt=null;function en(){if(Jt)return Jt;var e,t,n=Xt,r=n.length,o="value"in Kt?Kt.value:Kt.textContent,a=o.length;for(e=0;e<r&&n[e]===o[e];e++);var i=r-e;for(t=1;t<=i&&n[r-t]===o[a-t];t++);return Jt=o.slice(e,1<t?1-t:void 0)}function tn(e){var t=e.keyCode;return"charCode"in e?0===(e=e.charCode)&&13===t&&(e=13):e=t,10===e&&(e=13),32<=e||13===e?e:0}function nn(){return!0}function rn(){return!1}function on(e){function t(t,n,r,o,a){for(var i in this._reactName=t,this._targetInst=r,this.type=n,this.nativeEvent=o,this.target=a,this.currentTarget=null,e)e.hasOwnProperty(i)&&(t=e[i],this[i]=t?t(o):o[i]);return this.isDefaultPrevented=(null!=o.defaultPrevented?o.defaultPrevented:!1===o.returnValue)?nn:rn,this.isPropagationStopped=rn,this}return F(t.prototype,{preventDefault:function(){this.defaultPrevented=!0;var e=this.nativeEvent;e&&(e.preventDefault?e.preventDefault():"unknown"!=typeof e.returnValue&&(e.returnValue=!1),this.isDefaultPrevented=nn)},stopPropagation:function(){var e=this.nativeEvent;e&&(e.stopPropagation?e.stopPropagation():"unknown"!=typeof e.cancelBubble&&(e.cancelBubble=!0),this.isPropagationStopped=nn)},persist:function(){},isPersistent:nn}),t}var an,sn,ln,cn={eventPhase:0,bubbles:0,cancelable:0,timeStamp:function(e){return e.timeStamp||Date.now()},defaultPrevented:0,isTrusted:0},un=on(cn),dn=F({},cn,{view:0,detail:0}),pn=on(dn),fn=F({},dn,{screenX:0,screenY:0,clientX:0,clientY:0,pageX:0,pageY:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,getModifierState:En,button:0,buttons:0,relatedTarget:function(e){return void 0===e.relatedTarget?e.fromElement===e.srcElement?e.toElement:e.fromElement:e.relatedTarget},movementX:function(e){return"movementX"in e?e.movementX:(e!==ln&&(ln&&"mousemove"===e.type?(an=e.screenX-ln.screenX,sn=e.screenY-ln.screenY):sn=an=0,ln=e),an)},movementY:function(e){return"movementY"in e?e.movementY:sn}}),gn=on(fn),mn=on(F({},fn,{dataTransfer:0})),hn=on(F({},dn,{relatedTarget:0})),bn=on(F({},cn,{animationName:0,elapsedTime:0,pseudoElement:0})),yn=F({},cn,{clipboardData:function(e){return"clipboardData"in e?e.clipboardData:window.clipboardData}}),vn=on(yn),wn=on(F({},cn,{data:0})),kn={Esc:"Escape",Spacebar:" ",Left:"ArrowLeft",Up:"ArrowUp",Right:"ArrowRight",Down:"ArrowDown",Del:"Delete",Win:"OS",Menu:"ContextMenu",Apps:"ContextMenu",Scroll:"ScrollLock",MozPrintableKey:"Unidentified"},Sn={8:"Backspace",9:"Tab",12:"Clear",13:"Enter",16:"Shift",17:"Control",18:"Alt",19:"Pause",20:"CapsLock",27:"Escape",32:" ",33:"PageUp",34:"PageDown",35:"End",36:"Home",37:"ArrowLeft",38:"ArrowUp",39:"ArrowRight",40:"ArrowDown",45:"Insert",46:"Delete",112:"F1",113:"F2",114:"F3",115:"F4",116:"F5",117:"F6",118:"F7",119:"F8",120:"F9",121:"F10",122:"F11",123:"F12",144:"NumLock",145:"ScrollLock",224:"Meta"},_n={Alt:"altKey",Control:"ctrlKey",Meta:"metaKey",Shift:"shiftKey"};function xn(e){var t=this.nativeEvent;return t.getModifierState?t.getModifierState(e):!!(e=_n[e])&&!!t[e]}function En(){return xn}var On=F({},dn,{key:function(e){if(e.key){var t=kn[e.key]||e.key;if("Unidentified"!==t)return t}return"keypress"===e.type?13===(e=tn(e))?"Enter":String.fromCharCode(e):"keydown"===e.type||"keyup"===e.type?Sn[e.keyCode]||"Unidentified":""},code:0,location:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,repeat:0,locale:0,getModifierState:En,charCode:function(e){return"keypress"===e.type?tn(e):0},keyCode:function(e){return"keydown"===e.type||"keyup"===e.type?e.keyCode:0},which:function(e){return"keypress"===e.type?tn(e):"keydown"===e.type||"keyup"===e.type?e.keyCode:0}}),Pn=on(On),jn=on(F({},fn,{pointerId:0,width:0,height:0,pressure:0,tangentialPressure:0,tiltX:0,tiltY:0,twist:0,pointerType:0,isPrimary:0})),Cn=on(F({},dn,{touches:0,targetTouches:0,changedTouches:0,altKey:0,metaKey:0,ctrlKey:0,shiftKey:0,getModifierState:En})),Tn=on(F({},cn,{propertyName:0,elapsedTime:0,pseudoElement:0})),In=F({},fn,{deltaX:function(e){return"deltaX"in e?e.deltaX:"wheelDeltaX"in e?-e.wheelDeltaX:0},deltaY:function(e){return"deltaY"in e?e.deltaY:"wheelDeltaY"in e?-e.wheelDeltaY:"wheelDelta"in e?-e.wheelDelta:0},deltaZ:0,deltaMode:0}),An=on(In),Nn=[9,13,27,32],Ln=u&&"CompositionEvent"in window,Rn=null;u&&"documentMode"in document&&(Rn=document.documentMode);var Dn=u&&"TextEvent"in window&&!Rn,Fn=u&&(!Ln||Rn&&8<Rn&&11>=Rn),Mn=String.fromCharCode(32),Bn=!1;function zn(e,t){switch(e){case"keyup":return-1!==Nn.indexOf(t.keyCode);case"keydown":return 229!==t.keyCode;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function Un(e){return"object"==typeof(e=e.detail)&&"data"in e?e.data:null}var $n=!1;var Hn={color:!0,date:!0,datetime:!0,"datetime-local":!0,email:!0,month:!0,number:!0,password:!0,range:!0,search:!0,tel:!0,text:!0,time:!0,url:!0,week:!0};function qn(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return"input"===t?!!Hn[e.type]:"textarea"===t}function Vn(e,t,n,r){Oe(r),0<(t=Qr(t,"onChange")).length&&(n=new un("onChange","change",null,n,r),e.push({event:n,listeners:t}))}var Qn=null,Zn=null;function Wn(e){Mr(e,0)}function Gn(e){if(Z(ko(e)))return e}function Yn(e,t){if("change"===e)return t}var Kn=!1;if(u){var Xn;if(u){var Jn="oninput"in document;if(!Jn){var er=document.createElement("div");er.setAttribute("oninput","return;"),Jn="function"==typeof er.oninput}Xn=Jn}else Xn=!1;Kn=Xn&&(!document.documentMode||9<document.documentMode)}function tr(){Qn&&(Qn.detachEvent("onpropertychange",nr),Zn=Qn=null)}function nr(e){if("value"===e.propertyName&&Gn(Zn)){var t=[];Vn(t,Zn,e,ke(e)),Ie(Wn,t)}}function rr(e,t,n){"focusin"===e?(tr(),Zn=n,(Qn=t).attachEvent("onpropertychange",nr)):"focusout"===e&&tr()}function or(e){if("selectionchange"===e||"keyup"===e||"keydown"===e)return Gn(Zn)}function ar(e,t){if("click"===e)return Gn(t)}function ir(e,t){if("input"===e||"change"===e)return Gn(t)}var sr="function"==typeof Object.is?Object.is:function(e,t){return e===t&&(0!==e||1/e==1/t)||e!=e&&t!=t};function lr(e,t){if(sr(e,t))return!0;if("object"!=typeof e||null===e||"object"!=typeof t||null===t)return!1;var n=Object.keys(e),r=Object.keys(t);if(n.length!==r.length)return!1;for(r=0;r<n.length;r++){var o=n[r];if(!d.call(t,o)||!sr(e[o],t[o]))return!1}return!0}function cr(e){for(;e&&e.firstChild;)e=e.firstChild;return e}function ur(e,t){var n,r=cr(e);for(e=0;r;){if(3===r.nodeType){if(n=e+r.textContent.length,e<=t&&n>=t)return{node:r,offset:t-e};e=n}e:{for(;r;){if(r.nextSibling){r=r.nextSibling;break e}r=r.parentNode}r=void 0}r=cr(r)}}function dr(e,t){return!(!e||!t)&&(e===t||(!e||3!==e.nodeType)&&(t&&3===t.nodeType?dr(e,t.parentNode):"contains"in e?e.contains(t):!!e.compareDocumentPosition&&!!(16&e.compareDocumentPosition(t))))}function pr(){for(var e=window,t=W();t instanceof e.HTMLIFrameElement;){try{var n="string"==typeof t.contentWindow.location.href}catch(r){n=!1}if(!n)break;t=W((e=t.contentWindow).document)}return t}function fr(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&("input"===t&&("text"===e.type||"search"===e.type||"tel"===e.type||"url"===e.type||"password"===e.type)||"textarea"===t||"true"===e.contentEditable)}function gr(e){var t=pr(),n=e.focusedElem,r=e.selectionRange;if(t!==n&&n&&n.ownerDocument&&dr(n.ownerDocument.documentElement,n)){if(null!==r&&fr(n))if(t=r.start,void 0===(e=r.end)&&(e=t),"selectionStart"in n)n.selectionStart=t,n.selectionEnd=Math.min(e,n.value.length);else if((e=(t=n.ownerDocument||document)&&t.defaultView||window).getSelection){e=e.getSelection();var o=n.textContent.length,a=Math.min(r.start,o);r=void 0===r.end?a:Math.min(r.end,o),!e.extend&&a>r&&(o=r,r=a,a=o),o=ur(n,a);var i=ur(n,r);o&&i&&(1!==e.rangeCount||e.anchorNode!==o.node||e.anchorOffset!==o.offset||e.focusNode!==i.node||e.focusOffset!==i.offset)&&((t=t.createRange()).setStart(o.node,o.offset),e.removeAllRanges(),a>r?(e.addRange(t),e.extend(i.node,i.offset)):(t.setEnd(i.node,i.offset),e.addRange(t)))}for(t=[],e=n;e=e.parentNode;)1===e.nodeType&&t.push({element:e,left:e.scrollLeft,top:e.scrollTop});for("function"==typeof n.focus&&n.focus(),n=0;n<t.length;n++)(e=t[n]).element.scrollLeft=e.left,e.element.scrollTop=e.top}}var mr=u&&"documentMode"in document&&11>=document.documentMode,hr=null,br=null,yr=null,vr=!1;function wr(e,t,n){var r=n.window===n?n.document:9===n.nodeType?n:n.ownerDocument;vr||null==hr||hr!==W(r)||("selectionStart"in(r=hr)&&fr(r)?r={start:r.selectionStart,end:r.selectionEnd}:r={anchorNode:(r=(r.ownerDocument&&r.ownerDocument.defaultView||window).getSelection()).anchorNode,anchorOffset:r.anchorOffset,focusNode:r.focusNode,focusOffset:r.focusOffset},yr&&lr(yr,r)||(yr=r,0<(r=Qr(br,"onSelect")).length&&(t=new un("onSelect","select",null,t,n),e.push({event:t,listeners:r}),t.target=hr)))}function kr(e,t){var n={};return n[e.toLowerCase()]=t.toLowerCase(),n["Webkit"+e]="webkit"+t,n["Moz"+e]="moz"+t,n}var Sr={animationend:kr("Animation","AnimationEnd"),animationiteration:kr("Animation","AnimationIteration"),animationstart:kr("Animation","AnimationStart"),transitionend:kr("Transition","TransitionEnd")},_r={},xr={};function Er(e){if(_r[e])return _r[e];if(!Sr[e])return e;var t,n=Sr[e];for(t in n)if(n.hasOwnProperty(t)&&t in xr)return _r[e]=n[t];return e}u&&(xr=document.createElement("div").style,"AnimationEvent"in window||(delete Sr.animationend.animation,delete Sr.animationiteration.animation,delete Sr.animationstart.animation),"TransitionEvent"in window||delete Sr.transitionend.transition);var Or=Er("animationend"),Pr=Er("animationiteration"),jr=Er("animationstart"),Cr=Er("transitionend"),Tr=new Map,Ir="abort auxClick cancel canPlay canPlayThrough click close contextMenu copy cut drag dragEnd dragEnter dragExit dragLeave dragOver dragStart drop durationChange emptied encrypted ended error gotPointerCapture input invalid keyDown keyPress keyUp load loadedData loadedMetadata loadStart lostPointerCapture mouseDown mouseMove mouseOut mouseOver mouseUp paste pause play playing pointerCancel pointerDown pointerMove pointerOut pointerOver pointerUp progress rateChange reset resize seeked seeking stalled submit suspend timeUpdate touchCancel touchEnd touchStart volumeChange scroll toggle touchMove waiting wheel".split(" ");function Ar(e,t){Tr.set(e,t),l(t,[e])}for(var Nr=0;Nr<Ir.length;Nr++){var Lr=Ir[Nr];Ar(Lr.toLowerCase(),"on"+(Lr[0].toUpperCase()+Lr.slice(1)))}Ar(Or,"onAnimationEnd"),Ar(Pr,"onAnimationIteration"),Ar(jr,"onAnimationStart"),Ar("dblclick","onDoubleClick"),Ar("focusin","onFocus"),Ar("focusout","onBlur"),Ar(Cr,"onTransitionEnd"),c("onMouseEnter",["mouseout","mouseover"]),c("onMouseLeave",["mouseout","mouseover"]),c("onPointerEnter",["pointerout","pointerover"]),c("onPointerLeave",["pointerout","pointerover"]),l("onChange","change click focusin focusout input keydown keyup selectionchange".split(" ")),l("onSelect","focusout contextmenu dragend focusin keydown keyup mousedown mouseup selectionchange".split(" ")),l("onBeforeInput",["compositionend","keypress","textInput","paste"]),l("onCompositionEnd","compositionend focusout keydown keypress keyup mousedown".split(" ")),l("onCompositionStart","compositionstart focusout keydown keypress keyup mousedown".split(" ")),l("onCompositionUpdate","compositionupdate focusout keydown keypress keyup mousedown".split(" "));var Rr="abort canplay canplaythrough durationchange emptied encrypted ended error loadeddata loadedmetadata loadstart pause play playing progress ratechange resize seeked seeking stalled suspend timeupdate volumechange waiting".split(" "),Dr=new Set("cancel close invalid load scroll toggle".split(" ").concat(Rr));function Fr(e,t,n){var r=e.type||"unknown-event";e.currentTarget=n,function(e,t,n,r,o,i,s,l,c){if(Ue.apply(this,arguments),De){if(!De)throw Error(a(198));var u=Fe;De=!1,Fe=null,Me||(Me=!0,Be=u)}}(r,t,void 0,e),e.currentTarget=null}function Mr(e,t){t=0!=(4&t);for(var n=0;n<e.length;n++){var r=e[n],o=r.event;r=r.listeners;e:{var a=void 0;if(t)for(var i=r.length-1;0<=i;i--){var s=r[i],l=s.instance,c=s.currentTarget;if(s=s.listener,l!==a&&o.isPropagationStopped())break e;Fr(o,s,c),a=l}else for(i=0;i<r.length;i++){if(l=(s=r[i]).instance,c=s.currentTarget,s=s.listener,l!==a&&o.isPropagationStopped())break e;Fr(o,s,c),a=l}}}if(Me)throw e=Be,Me=!1,Be=null,e}function Br(e,t){var n=t[ho];void 0===n&&(n=t[ho]=new Set);var r=e+"__bubble";n.has(r)||(Hr(t,e,2,!1),n.add(r))}function zr(e,t,n){var r=0;t&&(r|=4),Hr(n,e,r,t)}var Ur="_reactListening"+Math.random().toString(36).slice(2);function $r(e){if(!e[Ur]){e[Ur]=!0,i.forEach((function(t){"selectionchange"!==t&&(Dr.has(t)||zr(t,!1,e),zr(t,!0,e))}));var t=9===e.nodeType?e:e.ownerDocument;null===t||t[Ur]||(t[Ur]=!0,zr("selectionchange",!1,t))}}function Hr(e,t,n,r){switch(Yt(t)){case 1:var o=Vt;break;case 4:o=Qt;break;default:o=Zt}n=o.bind(null,t,n,e),o=void 0,!Ne||"touchstart"!==t&&"touchmove"!==t&&"wheel"!==t||(o=!0),r?void 0!==o?e.addEventListener(t,n,{capture:!0,passive:o}):e.addEventListener(t,n,!0):void 0!==o?e.addEventListener(t,n,{passive:o}):e.addEventListener(t,n,!1)}function qr(e,t,n,r,o){var a=r;if(0==(1&t)&&0==(2&t)&&null!==r)e:for(;;){if(null===r)return;var i=r.tag;if(3===i||4===i){var s=r.stateNode.containerInfo;if(s===o||8===s.nodeType&&s.parentNode===o)break;if(4===i)for(i=r.return;null!==i;){var l=i.tag;if((3===l||4===l)&&((l=i.stateNode.containerInfo)===o||8===l.nodeType&&l.parentNode===o))return;i=i.return}for(;null!==s;){if(null===(i=vo(s)))return;if(5===(l=i.tag)||6===l){r=a=i;continue e}s=s.parentNode}}r=r.return}Ie((function(){var r=a,o=ke(n),i=[];e:{var s=Tr.get(e);if(void 0!==s){var l=un,c=e;switch(e){case"keypress":if(0===tn(n))break e;case"keydown":case"keyup":l=Pn;break;case"focusin":c="focus",l=hn;break;case"focusout":c="blur",l=hn;break;case"beforeblur":case"afterblur":l=hn;break;case"click":if(2===n.button)break e;case"auxclick":case"dblclick":case"mousedown":case"mousemove":case"mouseup":case"mouseout":case"mouseover":case"contextmenu":l=gn;break;case"drag":case"dragend":case"dragenter":case"dragexit":case"dragleave":case"dragover":case"dragstart":case"drop":l=mn;break;case"touchcancel":case"touchend":case"touchmove":case"touchstart":l=Cn;break;case Or:case Pr:case jr:l=bn;break;case Cr:l=Tn;break;case"scroll":l=pn;break;case"wheel":l=An;break;case"copy":case"cut":case"paste":l=vn;break;case"gotpointercapture":case"lostpointercapture":case"pointercancel":case"pointerdown":case"pointermove":case"pointerout":case"pointerover":case"pointerup":l=jn}var u=0!=(4&t),d=!u&&"scroll"===e,p=u?null!==s?s+"Capture":null:s;u=[];for(var f,g=r;null!==g;){var m=(f=g).stateNode;if(5===f.tag&&null!==m&&(f=m,null!==p&&(null!=(m=Ae(g,p))&&u.push(Vr(g,m,f)))),d)break;g=g.return}0<u.length&&(s=new l(s,c,null,n,o),i.push({event:s,listeners:u}))}}if(0==(7&t)){if(l="mouseout"===e||"pointerout"===e,(!(s="mouseover"===e||"pointerover"===e)||n===we||!(c=n.relatedTarget||n.fromElement)||!vo(c)&&!c[mo])&&(l||s)&&(s=o.window===o?o:(s=o.ownerDocument)?s.defaultView||s.parentWindow:window,l?(l=r,null!==(c=(c=n.relatedTarget||n.toElement)?vo(c):null)&&(c!==(d=$e(c))||5!==c.tag&&6!==c.tag)&&(c=null)):(l=null,c=r),l!==c)){if(u=gn,m="onMouseLeave",p="onMouseEnter",g="mouse","pointerout"!==e&&"pointerover"!==e||(u=jn,m="onPointerLeave",p="onPointerEnter",g="pointer"),d=null==l?s:ko(l),f=null==c?s:ko(c),(s=new u(m,g+"leave",l,n,o)).target=d,s.relatedTarget=f,m=null,vo(o)===r&&((u=new u(p,g+"enter",c,n,o)).target=f,u.relatedTarget=d,m=u),d=m,l&&c)e:{for(p=c,g=0,f=u=l;f;f=Zr(f))g++;for(f=0,m=p;m;m=Zr(m))f++;for(;0<g-f;)u=Zr(u),g--;for(;0<f-g;)p=Zr(p),f--;for(;g--;){if(u===p||null!==p&&u===p.alternate)break e;u=Zr(u),p=Zr(p)}u=null}else u=null;null!==l&&Wr(i,s,l,u,!1),null!==c&&null!==d&&Wr(i,d,c,u,!0)}if("select"===(l=(s=r?ko(r):window).nodeName&&s.nodeName.toLowerCase())||"input"===l&&"file"===s.type)var h=Yn;else if(qn(s))if(Kn)h=ir;else{h=or;var b=rr}else(l=s.nodeName)&&"input"===l.toLowerCase()&&("checkbox"===s.type||"radio"===s.type)&&(h=ar);switch(h&&(h=h(e,r))?Vn(i,h,n,o):(b&&b(e,s,r),"focusout"===e&&(b=s._wrapperState)&&b.controlled&&"number"===s.type&&ee(s,"number",s.value)),b=r?ko(r):window,e){case"focusin":(qn(b)||"true"===b.contentEditable)&&(hr=b,br=r,yr=null);break;case"focusout":yr=br=hr=null;break;case"mousedown":vr=!0;break;case"contextmenu":case"mouseup":case"dragend":vr=!1,wr(i,n,o);break;case"selectionchange":if(mr)break;case"keydown":case"keyup":wr(i,n,o)}var y;if(Ln)e:{switch(e){case"compositionstart":var v="onCompositionStart";break e;case"compositionend":v="onCompositionEnd";break e;case"compositionupdate":v="onCompositionUpdate";break e}v=void 0}else $n?zn(e,n)&&(v="onCompositionEnd"):"keydown"===e&&229===n.keyCode&&(v="onCompositionStart");v&&(Fn&&"ko"!==n.locale&&($n||"onCompositionStart"!==v?"onCompositionEnd"===v&&$n&&(y=en()):(Xt="value"in(Kt=o)?Kt.value:Kt.textContent,$n=!0)),0<(b=Qr(r,v)).length&&(v=new wn(v,e,null,n,o),i.push({event:v,listeners:b}),y?v.data=y:null!==(y=Un(n))&&(v.data=y))),(y=Dn?function(e,t){switch(e){case"compositionend":return Un(t);case"keypress":return 32!==t.which?null:(Bn=!0,Mn);case"textInput":return(e=t.data)===Mn&&Bn?null:e;default:return null}}(e,n):function(e,t){if($n)return"compositionend"===e||!Ln&&zn(e,t)?(e=en(),Jt=Xt=Kt=null,$n=!1,e):null;switch(e){case"paste":default:return null;case"keypress":if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1<t.char.length)return t.char;if(t.which)return String.fromCharCode(t.which)}return null;case"compositionend":return Fn&&"ko"!==t.locale?null:t.data}}(e,n))&&(0<(r=Qr(r,"onBeforeInput")).length&&(o=new wn("onBeforeInput","beforeinput",null,n,o),i.push({event:o,listeners:r}),o.data=y))}Mr(i,t)}))}function Vr(e,t,n){return{instance:e,listener:t,currentTarget:n}}function Qr(e,t){for(var n=t+"Capture",r=[];null!==e;){var o=e,a=o.stateNode;5===o.tag&&null!==a&&(o=a,null!=(a=Ae(e,n))&&r.unshift(Vr(e,a,o)),null!=(a=Ae(e,t))&&r.push(Vr(e,a,o))),e=e.return}return r}function Zr(e){if(null===e)return null;do{e=e.return}while(e&&5!==e.tag);return e||null}function Wr(e,t,n,r,o){for(var a=t._reactName,i=[];null!==n&&n!==r;){var s=n,l=s.alternate,c=s.stateNode;if(null!==l&&l===r)break;5===s.tag&&null!==c&&(s=c,o?null!=(l=Ae(n,a))&&i.unshift(Vr(n,l,s)):o||null!=(l=Ae(n,a))&&i.push(Vr(n,l,s))),n=n.return}0!==i.length&&e.push({event:t,listeners:i})}var Gr=/\r\n?/g,Yr=/\u0000|\uFFFD/g;function Kr(e){return("string"==typeof e?e:""+e).replace(Gr,"\n").replace(Yr,"")}function Xr(e,t,n){if(t=Kr(t),Kr(e)!==t&&n)throw Error(a(425))}function Jr(){}var eo=null,to=null;function no(e,t){return"textarea"===e||"noscript"===e||"string"==typeof t.children||"number"==typeof t.children||"object"==typeof t.dangerouslySetInnerHTML&&null!==t.dangerouslySetInnerHTML&&null!=t.dangerouslySetInnerHTML.__html}var ro="function"==typeof setTimeout?setTimeout:void 0,oo="function"==typeof clearTimeout?clearTimeout:void 0,ao="function"==typeof Promise?Promise:void 0,io="function"==typeof queueMicrotask?queueMicrotask:void 0!==ao?function(e){return ao.resolve(null).then(e).catch(so)}:ro;function so(e){setTimeout((function(){throw e}))}function lo(e,t){var n=t,r=0;do{var o=n.nextSibling;if(e.removeChild(n),o&&8===o.nodeType)if("/$"===(n=o.data)){if(0===r)return e.removeChild(o),void $t(t);r--}else"$"!==n&&"$?"!==n&&"$!"!==n||r++;n=o}while(n);$t(t)}function co(e){for(;null!=e;e=e.nextSibling){var t=e.nodeType;if(1===t||3===t)break;if(8===t){if("$"===(t=e.data)||"$!"===t||"$?"===t)break;if("/$"===t)return null}}return e}function uo(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 po=Math.random().toString(36).slice(2),fo="__reactFiber$"+po,go="__reactProps$"+po,mo="__reactContainer$"+po,ho="__reactEvents$"+po,bo="__reactListeners$"+po,yo="__reactHandles$"+po;function vo(e){var t=e[fo];if(t)return t;for(var n=e.parentNode;n;){if(t=n[mo]||n[fo]){if(n=t.alternate,null!==t.child||null!==n&&null!==n.child)for(e=uo(e);null!==e;){if(n=e[fo])return n;e=uo(e)}return t}n=(e=n).parentNode}return null}function wo(e){return!(e=e[fo]||e[mo])||5!==e.tag&&6!==e.tag&&13!==e.tag&&3!==e.tag?null:e}function ko(e){if(5===e.tag||6===e.tag)return e.stateNode;throw Error(a(33))}function So(e){return e[go]||null}var _o=[],xo=-1;function Eo(e){return{current:e}}function Oo(e){0>xo||(e.current=_o[xo],_o[xo]=null,xo--)}function Po(e,t){xo++,_o[xo]=e.current,e.current=t}var jo={},Co=Eo(jo),To=Eo(!1),Io=jo;function Ao(e,t){var n=e.type.contextTypes;if(!n)return jo;var r=e.stateNode;if(r&&r.__reactInternalMemoizedUnmaskedChildContext===t)return r.__reactInternalMemoizedMaskedChildContext;var o,a={};for(o in n)a[o]=t[o];return r&&((e=e.stateNode).__reactInternalMemoizedUnmaskedChildContext=t,e.__reactInternalMemoizedMaskedChildContext=a),a}function No(e){return null!=(e=e.childContextTypes)}function Lo(){Oo(To),Oo(Co)}function Ro(e,t,n){if(Co.current!==jo)throw Error(a(168));Po(Co,t),Po(To,n)}function Do(e,t,n){var r=e.stateNode;if(t=t.childContextTypes,"function"!=typeof r.getChildContext)return n;for(var o in r=r.getChildContext())if(!(o in t))throw Error(a(108,H(e)||"Unknown",o));return F({},n,r)}function Fo(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||jo,Io=Co.current,Po(Co,e),Po(To,To.current),!0}function Mo(e,t,n){var r=e.stateNode;if(!r)throw Error(a(169));n?(e=Do(e,t,Io),r.__reactInternalMemoizedMergedChildContext=e,Oo(To),Oo(Co),Po(Co,e)):Oo(To),Po(To,n)}var Bo=null,zo=!1,Uo=!1;function $o(e){null===Bo?Bo=[e]:Bo.push(e)}function Ho(){if(!Uo&&null!==Bo){Uo=!0;var e=0,t=vt;try{var n=Bo;for(vt=1;e<n.length;e++){var r=n[e];do{r=r(!0)}while(null!==r)}Bo=null,zo=!1}catch(o){throw null!==Bo&&(Bo=Bo.slice(e+1)),Ze(Je,Ho),o}finally{vt=t,Uo=!1}}return null}var qo=[],Vo=0,Qo=null,Zo=0,Wo=[],Go=0,Yo=null,Ko=1,Xo="";function Jo(e,t){qo[Vo++]=Zo,qo[Vo++]=Qo,Qo=e,Zo=t}function ea(e,t,n){Wo[Go++]=Ko,Wo[Go++]=Xo,Wo[Go++]=Yo,Yo=e;var r=Ko;e=Xo;var o=32-it(r)-1;r&=~(1<<o),n+=1;var a=32-it(t)+o;if(30<a){var i=o-o%5;a=(r&(1<<i)-1).toString(32),r>>=i,o-=i,Ko=1<<32-it(t)+o|n<<o|r,Xo=a+e}else Ko=1<<a|n<<o|r,Xo=e}function ta(e){null!==e.return&&(Jo(e,1),ea(e,1,0))}function na(e){for(;e===Qo;)Qo=qo[--Vo],qo[Vo]=null,Zo=qo[--Vo],qo[Vo]=null;for(;e===Yo;)Yo=Wo[--Go],Wo[Go]=null,Xo=Wo[--Go],Wo[Go]=null,Ko=Wo[--Go],Wo[Go]=null}var ra=null,oa=null,aa=!1,ia=null;function sa(e,t){var n=Ac(5,null,null,0);n.elementType="DELETED",n.stateNode=t,n.return=e,null===(t=e.deletions)?(e.deletions=[n],e.flags|=16):t.push(n)}function la(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,ra=e,oa=co(t.firstChild),!0);case 6:return null!==(t=""===e.pendingProps||3!==t.nodeType?null:t)&&(e.stateNode=t,ra=e,oa=null,!0);case 13:return null!==(t=8!==t.nodeType?null:t)&&(n=null!==Yo?{id:Ko,overflow:Xo}:null,e.memoizedState={dehydrated:t,treeContext:n,retryLane:1073741824},(n=Ac(18,null,null,0)).stateNode=t,n.return=e,e.child=n,ra=e,oa=null,!0);default:return!1}}function ca(e){return 0!=(1&e.mode)&&0==(128&e.flags)}function ua(e){if(aa){var t=oa;if(t){var n=t;if(!la(e,t)){if(ca(e))throw Error(a(418));t=co(n.nextSibling);var r=ra;t&&la(e,t)?sa(r,n):(e.flags=-4097&e.flags|2,aa=!1,ra=e)}}else{if(ca(e))throw Error(a(418));e.flags=-4097&e.flags|2,aa=!1,ra=e}}}function da(e){for(e=e.return;null!==e&&5!==e.tag&&3!==e.tag&&13!==e.tag;)e=e.return;ra=e}function pa(e){if(e!==ra)return!1;if(!aa)return da(e),aa=!0,!1;var t;if((t=3!==e.tag)&&!(t=5!==e.tag)&&(t="head"!==(t=e.type)&&"body"!==t&&!no(e.type,e.memoizedProps)),t&&(t=oa)){if(ca(e))throw fa(),Error(a(418));for(;t;)sa(e,t),t=co(t.nextSibling)}if(da(e),13===e.tag){if(!(e=null!==(e=e.memoizedState)?e.dehydrated:null))throw Error(a(317));e:{for(e=e.nextSibling,t=0;e;){if(8===e.nodeType){var n=e.data;if("/$"===n){if(0===t){oa=co(e.nextSibling);break e}t--}else"$"!==n&&"$!"!==n&&"$?"!==n||t++}e=e.nextSibling}oa=null}}else oa=ra?co(e.stateNode.nextSibling):null;return!0}function fa(){for(var e=oa;e;)e=co(e.nextSibling)}function ga(){oa=ra=null,aa=!1}function ma(e){null===ia?ia=[e]:ia.push(e)}var ha=w.ReactCurrentBatchConfig;function ba(e,t){if(e&&e.defaultProps){for(var n in t=F({},t),e=e.defaultProps)void 0===t[n]&&(t[n]=e[n]);return t}return t}var ya=Eo(null),va=null,wa=null,ka=null;function Sa(){ka=wa=va=null}function _a(e){var t=ya.current;Oo(ya),e._currentValue=t}function xa(e,t,n){for(;null!==e;){var r=e.alternate;if((e.childLanes&t)!==t?(e.childLanes|=t,null!==r&&(r.childLanes|=t)):null!==r&&(r.childLanes&t)!==t&&(r.childLanes|=t),e===n)break;e=e.return}}function Ea(e,t){va=e,ka=wa=null,null!==(e=e.dependencies)&&null!==e.firstContext&&(0!=(e.lanes&t)&&(ws=!0),e.firstContext=null)}function Oa(e){var t=e._currentValue;if(ka!==e)if(e={context:e,memoizedValue:t,next:null},null===wa){if(null===va)throw Error(a(308));wa=e,va.dependencies={lanes:0,firstContext:e}}else wa=wa.next=e;return t}var Pa=null;function ja(e){null===Pa?Pa=[e]:Pa.push(e)}function Ca(e,t,n,r){var o=t.interleaved;return null===o?(n.next=n,ja(t)):(n.next=o.next,o.next=n),t.interleaved=n,Ta(e,r)}function Ta(e,t){e.lanes|=t;var n=e.alternate;for(null!==n&&(n.lanes|=t),n=e,e=e.return;null!==e;)e.childLanes|=t,null!==(n=e.alternate)&&(n.childLanes|=t),n=e,e=e.return;return 3===n.tag?n.stateNode:null}var Ia=!1;function Aa(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,interleaved:null,lanes:0},effects:null}}function Na(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 La(e,t){return{eventTime:e,lane:t,tag:0,payload:null,callback:null,next:null}}function Ra(e,t,n){var r=e.updateQueue;if(null===r)return null;if(r=r.shared,0!=(2&Cl)){var o=r.pending;return null===o?t.next=t:(t.next=o.next,o.next=t),r.pending=t,Ta(e,n)}return null===(o=r.interleaved)?(t.next=t,ja(r)):(t.next=o.next,o.next=t),r.interleaved=t,Ta(e,n)}function Da(e,t,n){if(null!==(t=t.updateQueue)&&(t=t.shared,0!=(4194240&n))){var r=t.lanes;n|=r&=e.pendingLanes,t.lanes=n,yt(e,n)}}function Fa(e,t){var n=e.updateQueue,r=e.alternate;if(null!==r&&n===(r=r.updateQueue)){var o=null,a=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===a?o=a=i:a=a.next=i,n=n.next}while(null!==n);null===a?o=a=t:a=a.next=t}else o=a=t;return n={baseState:r.baseState,firstBaseUpdate:o,lastBaseUpdate:a,shared:r.shared,effects:r.effects},void(e.updateQueue=n)}null===(e=n.lastBaseUpdate)?n.firstBaseUpdate=t:e.next=t,n.lastBaseUpdate=t}function Ma(e,t,n,r){var o=e.updateQueue;Ia=!1;var a=o.firstBaseUpdate,i=o.lastBaseUpdate,s=o.shared.pending;if(null!==s){o.shared.pending=null;var l=s,c=l.next;l.next=null,null===i?a=c:i.next=c,i=l;var u=e.alternate;null!==u&&((s=(u=u.updateQueue).lastBaseUpdate)!==i&&(null===s?u.firstBaseUpdate=c:s.next=c,u.lastBaseUpdate=l))}if(null!==a){var d=o.baseState;for(i=0,u=c=l=null,s=a;;){var p=s.lane,f=s.eventTime;if((r&p)===p){null!==u&&(u=u.next={eventTime:f,lane:0,tag:s.tag,payload:s.payload,callback:s.callback,next:null});e:{var g=e,m=s;switch(p=t,f=n,m.tag){case 1:if("function"==typeof(g=m.payload)){d=g.call(f,d,p);break e}d=g;break e;case 3:g.flags=-65537&g.flags|128;case 0:if(null==(p="function"==typeof(g=m.payload)?g.call(f,d,p):g))break e;d=F({},d,p);break e;case 2:Ia=!0}}null!==s.callback&&0!==s.lane&&(e.flags|=64,null===(p=o.effects)?o.effects=[s]:p.push(s))}else f={eventTime:f,lane:p,tag:s.tag,payload:s.payload,callback:s.callback,next:null},null===u?(c=u=f,l=d):u=u.next=f,i|=p;if(null===(s=s.next)){if(null===(s=o.shared.pending))break;s=(p=s).next,p.next=null,o.lastBaseUpdate=p,o.shared.pending=null}}if(null===u&&(l=d),o.baseState=l,o.firstBaseUpdate=c,o.lastBaseUpdate=u,null!==(t=o.shared.interleaved)){o=t;do{i|=o.lane,o=o.next}while(o!==t)}else null===a&&(o.shared.lanes=0);Fl|=i,e.lanes=i,e.memoizedState=d}}function Ba(e,t,n){if(e=t.effects,t.effects=null,null!==e)for(t=0;t<e.length;t++){var r=e[t],o=r.callback;if(null!==o){if(r.callback=null,r=n,"function"!=typeof o)throw Error(a(191,o));o.call(r)}}}var za=(new r.Component).refs;function Ua(e,t,n,r){n=null==(n=n(r,t=e.memoizedState))?t:F({},t,n),e.memoizedState=n,0===e.lanes&&(e.updateQueue.baseState=n)}var $a={isMounted:function(e){return!!(e=e._reactInternals)&&$e(e)===e},enqueueSetState:function(e,t,n){e=e._reactInternals;var r=tc(),o=nc(e),a=La(r,o);a.payload=t,null!=n&&(a.callback=n),null!==(t=Ra(e,a,o))&&(rc(t,e,o,r),Da(t,e,o))},enqueueReplaceState:function(e,t,n){e=e._reactInternals;var r=tc(),o=nc(e),a=La(r,o);a.tag=1,a.payload=t,null!=n&&(a.callback=n),null!==(t=Ra(e,a,o))&&(rc(t,e,o,r),Da(t,e,o))},enqueueForceUpdate:function(e,t){e=e._reactInternals;var n=tc(),r=nc(e),o=La(n,r);o.tag=2,null!=t&&(o.callback=t),null!==(t=Ra(e,o,r))&&(rc(t,e,r,n),Da(t,e,r))}};function Ha(e,t,n,r,o,a,i){return"function"==typeof(e=e.stateNode).shouldComponentUpdate?e.shouldComponentUpdate(r,a,i):!t.prototype||!t.prototype.isPureReactComponent||(!lr(n,r)||!lr(o,a))}function qa(e,t,n){var r=!1,o=jo,a=t.contextType;return"object"==typeof a&&null!==a?a=Oa(a):(o=No(t)?Io:Co.current,a=(r=null!=(r=t.contextTypes))?Ao(e,o):jo),t=new t(n,a),e.memoizedState=null!==t.state&&void 0!==t.state?t.state:null,t.updater=$a,e.stateNode=t,t._reactInternals=e,r&&((e=e.stateNode).__reactInternalMemoizedUnmaskedChildContext=o,e.__reactInternalMemoizedMaskedChildContext=a),t}function Va(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&&$a.enqueueReplaceState(t,t.state,null)}function Qa(e,t,n,r){var o=e.stateNode;o.props=n,o.state=e.memoizedState,o.refs=za,Aa(e);var a=t.contextType;"object"==typeof a&&null!==a?o.context=Oa(a):(a=No(t)?Io:Co.current,o.context=Ao(e,a)),o.state=e.memoizedState,"function"==typeof(a=t.getDerivedStateFromProps)&&(Ua(e,t,a,n),o.state=e.memoizedState),"function"==typeof t.getDerivedStateFromProps||"function"==typeof o.getSnapshotBeforeUpdate||"function"!=typeof o.UNSAFE_componentWillMount&&"function"!=typeof o.componentWillMount||(t=o.state,"function"==typeof o.componentWillMount&&o.componentWillMount(),"function"==typeof o.UNSAFE_componentWillMount&&o.UNSAFE_componentWillMount(),t!==o.state&&$a.enqueueReplaceState(o,o.state,null),Ma(e,n,o,r),o.state=e.memoizedState),"function"==typeof o.componentDidMount&&(e.flags|=4194308)}function Za(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(a(309));var r=n.stateNode}if(!r)throw Error(a(147,e));var o=r,i=""+e;return null!==t&&null!==t.ref&&"function"==typeof t.ref&&t.ref._stringRef===i?t.ref:(t=function(e){var t=o.refs;t===za&&(t=o.refs={}),null===e?delete t[i]:t[i]=e},t._stringRef=i,t)}if("string"!=typeof e)throw Error(a(284));if(!n._owner)throw Error(a(290,e))}return e}function Wa(e,t){throw e=Object.prototype.toString.call(t),Error(a(31,"[object Object]"===e?"object with keys {"+Object.keys(t).join(", ")+"}":e))}function Ga(e){return(0,e._init)(e._payload)}function Ya(e){function t(t,n){if(e){var r=t.deletions;null===r?(t.deletions=[n],t.flags|=16):r.push(n)}}function n(n,r){if(!e)return null;for(;null!==r;)t(n,r),r=r.sibling;return null}function r(e,t){for(e=new Map;null!==t;)null!==t.key?e.set(t.key,t):e.set(t.index,t),t=t.sibling;return e}function o(e,t){return(e=Lc(e,t)).index=0,e.sibling=null,e}function i(t,n,r){return t.index=r,e?null!==(r=t.alternate)?(r=r.index)<n?(t.flags|=2,n):r:(t.flags|=2,n):(t.flags|=1048576,n)}function s(t){return e&&null===t.alternate&&(t.flags|=2),t}function l(e,t,n,r){return null===t||6!==t.tag?((t=Mc(n,e.mode,r)).return=e,t):((t=o(t,n)).return=e,t)}function c(e,t,n,r){var a=n.type;return a===_?d(e,t,n.props.children,r,n.key):null!==t&&(t.elementType===a||"object"==typeof a&&null!==a&&a.$$typeof===A&&Ga(a)===t.type)?((r=o(t,n.props)).ref=Za(e,t,n),r.return=e,r):((r=Rc(n.type,n.key,n.props,null,e.mode,r)).ref=Za(e,t,n),r.return=e,r)}function u(e,t,n,r){return null===t||4!==t.tag||t.stateNode.containerInfo!==n.containerInfo||t.stateNode.implementation!==n.implementation?((t=Bc(n,e.mode,r)).return=e,t):((t=o(t,n.children||[])).return=e,t)}function d(e,t,n,r,a){return null===t||7!==t.tag?((t=Dc(n,e.mode,r,a)).return=e,t):((t=o(t,n)).return=e,t)}function p(e,t,n){if("string"==typeof t&&""!==t||"number"==typeof t)return(t=Mc(""+t,e.mode,n)).return=e,t;if("object"==typeof t&&null!==t){switch(t.$$typeof){case k:return(n=Rc(t.type,t.key,t.props,null,e.mode,n)).ref=Za(e,null,t),n.return=e,n;case S:return(t=Bc(t,e.mode,n)).return=e,t;case A:return p(e,(0,t._init)(t._payload),n)}if(te(t)||R(t))return(t=Dc(t,e.mode,n,null)).return=e,t;Wa(e,t)}return null}function f(e,t,n,r){var o=null!==t?t.key:null;if("string"==typeof n&&""!==n||"number"==typeof n)return null!==o?null:l(e,t,""+n,r);if("object"==typeof n&&null!==n){switch(n.$$typeof){case k:return n.key===o?c(e,t,n,r):null;case S:return n.key===o?u(e,t,n,r):null;case A:return f(e,t,(o=n._init)(n._payload),r)}if(te(n)||R(n))return null!==o?null:d(e,t,n,r,null);Wa(e,n)}return null}function g(e,t,n,r,o){if("string"==typeof r&&""!==r||"number"==typeof r)return l(t,e=e.get(n)||null,""+r,o);if("object"==typeof r&&null!==r){switch(r.$$typeof){case k:return c(t,e=e.get(null===r.key?n:r.key)||null,r,o);case S:return u(t,e=e.get(null===r.key?n:r.key)||null,r,o);case A:return g(e,t,n,(0,r._init)(r._payload),o)}if(te(r)||R(r))return d(t,e=e.get(n)||null,r,o,null);Wa(t,r)}return null}function m(o,a,s,l){for(var c=null,u=null,d=a,m=a=0,h=null;null!==d&&m<s.length;m++){d.index>m?(h=d,d=null):h=d.sibling;var b=f(o,d,s[m],l);if(null===b){null===d&&(d=h);break}e&&d&&null===b.alternate&&t(o,d),a=i(b,a,m),null===u?c=b:u.sibling=b,u=b,d=h}if(m===s.length)return n(o,d),aa&&Jo(o,m),c;if(null===d){for(;m<s.length;m++)null!==(d=p(o,s[m],l))&&(a=i(d,a,m),null===u?c=d:u.sibling=d,u=d);return aa&&Jo(o,m),c}for(d=r(o,d);m<s.length;m++)null!==(h=g(d,o,m,s[m],l))&&(e&&null!==h.alternate&&d.delete(null===h.key?m:h.key),a=i(h,a,m),null===u?c=h:u.sibling=h,u=h);return e&&d.forEach((function(e){return t(o,e)})),aa&&Jo(o,m),c}function h(o,s,l,c){var u=R(l);if("function"!=typeof u)throw Error(a(150));if(null==(l=u.call(l)))throw Error(a(151));for(var d=u=null,m=s,h=s=0,b=null,y=l.next();null!==m&&!y.done;h++,y=l.next()){m.index>h?(b=m,m=null):b=m.sibling;var v=f(o,m,y.value,c);if(null===v){null===m&&(m=b);break}e&&m&&null===v.alternate&&t(o,m),s=i(v,s,h),null===d?u=v:d.sibling=v,d=v,m=b}if(y.done)return n(o,m),aa&&Jo(o,h),u;if(null===m){for(;!y.done;h++,y=l.next())null!==(y=p(o,y.value,c))&&(s=i(y,s,h),null===d?u=y:d.sibling=y,d=y);return aa&&Jo(o,h),u}for(m=r(o,m);!y.done;h++,y=l.next())null!==(y=g(m,o,h,y.value,c))&&(e&&null!==y.alternate&&m.delete(null===y.key?h:y.key),s=i(y,s,h),null===d?u=y:d.sibling=y,d=y);return e&&m.forEach((function(e){return t(o,e)})),aa&&Jo(o,h),u}return function e(r,a,i,l){if("object"==typeof i&&null!==i&&i.type===_&&null===i.key&&(i=i.props.children),"object"==typeof i&&null!==i){switch(i.$$typeof){case k:e:{for(var c=i.key,u=a;null!==u;){if(u.key===c){if((c=i.type)===_){if(7===u.tag){n(r,u.sibling),(a=o(u,i.props.children)).return=r,r=a;break e}}else if(u.elementType===c||"object"==typeof c&&null!==c&&c.$$typeof===A&&Ga(c)===u.type){n(r,u.sibling),(a=o(u,i.props)).ref=Za(r,u,i),a.return=r,r=a;break e}n(r,u);break}t(r,u),u=u.sibling}i.type===_?((a=Dc(i.props.children,r.mode,l,i.key)).return=r,r=a):((l=Rc(i.type,i.key,i.props,null,r.mode,l)).ref=Za(r,a,i),l.return=r,r=l)}return s(r);case S:e:{for(u=i.key;null!==a;){if(a.key===u){if(4===a.tag&&a.stateNode.containerInfo===i.containerInfo&&a.stateNode.implementation===i.implementation){n(r,a.sibling),(a=o(a,i.children||[])).return=r,r=a;break e}n(r,a);break}t(r,a),a=a.sibling}(a=Bc(i,r.mode,l)).return=r,r=a}return s(r);case A:return e(r,a,(u=i._init)(i._payload),l)}if(te(i))return m(r,a,i,l);if(R(i))return h(r,a,i,l);Wa(r,i)}return"string"==typeof i&&""!==i||"number"==typeof i?(i=""+i,null!==a&&6===a.tag?(n(r,a.sibling),(a=o(a,i)).return=r,r=a):(n(r,a),(a=Mc(i,r.mode,l)).return=r,r=a),s(r)):n(r,a)}}var Ka=Ya(!0),Xa=Ya(!1),Ja={},ei=Eo(Ja),ti=Eo(Ja),ni=Eo(Ja);function ri(e){if(e===Ja)throw Error(a(174));return e}function oi(e,t){switch(Po(ni,t),Po(ti,e),Po(ei,Ja),e=t.nodeType){case 9:case 11:t=(t=t.documentElement)?t.namespaceURI:le(null,"");break;default:t=le(t=(e=8===e?t.parentNode:t).namespaceURI||null,e=e.tagName)}Oo(ei),Po(ei,t)}function ai(){Oo(ei),Oo(ti),Oo(ni)}function ii(e){ri(ni.current);var t=ri(ei.current),n=le(t,e.type);t!==n&&(Po(ti,e),Po(ei,n))}function si(e){ti.current===e&&(Oo(ei),Oo(ti))}var li=Eo(0);function ci(e){for(var t=e;null!==t;){if(13===t.tag){var n=t.memoizedState;if(null!==n&&(null===(n=n.dehydrated)||"$?"===n.data||"$!"===n.data))return t}else if(19===t.tag&&void 0!==t.memoizedProps.revealOrder){if(0!=(128&t.flags))return t}else if(null!==t.child){t.child.return=t,t=t.child;continue}if(t===e)break;for(;null===t.sibling;){if(null===t.return||t.return===e)return null;t=t.return}t.sibling.return=t.return,t=t.sibling}return null}var ui=[];function di(){for(var e=0;e<ui.length;e++)ui[e]._workInProgressVersionPrimary=null;ui.length=0}var pi=w.ReactCurrentDispatcher,fi=w.ReactCurrentBatchConfig,gi=0,mi=null,hi=null,bi=null,yi=!1,vi=!1,wi=0,ki=0;function Si(){throw Error(a(321))}function _i(e,t){if(null===t)return!1;for(var n=0;n<t.length&&n<e.length;n++)if(!sr(e[n],t[n]))return!1;return!0}function xi(e,t,n,r,o,i){if(gi=i,mi=t,t.memoizedState=null,t.updateQueue=null,t.lanes=0,pi.current=null===e||null===e.memoizedState?ss:ls,e=n(r,o),vi){i=0;do{if(vi=!1,wi=0,25<=i)throw Error(a(301));i+=1,bi=hi=null,t.updateQueue=null,pi.current=cs,e=n(r,o)}while(vi)}if(pi.current=is,t=null!==hi&&null!==hi.next,gi=0,bi=hi=mi=null,yi=!1,t)throw Error(a(300));return e}function Ei(){var e=0!==wi;return wi=0,e}function Oi(){var e={memoizedState:null,baseState:null,baseQueue:null,queue:null,next:null};return null===bi?mi.memoizedState=bi=e:bi=bi.next=e,bi}function Pi(){if(null===hi){var e=mi.alternate;e=null!==e?e.memoizedState:null}else e=hi.next;var t=null===bi?mi.memoizedState:bi.next;if(null!==t)bi=t,hi=e;else{if(null===e)throw Error(a(310));e={memoizedState:(hi=e).memoizedState,baseState:hi.baseState,baseQueue:hi.baseQueue,queue:hi.queue,next:null},null===bi?mi.memoizedState=bi=e:bi=bi.next=e}return bi}function ji(e,t){return"function"==typeof t?t(e):t}function Ci(e){var t=Pi(),n=t.queue;if(null===n)throw Error(a(311));n.lastRenderedReducer=e;var r=hi,o=r.baseQueue,i=n.pending;if(null!==i){if(null!==o){var s=o.next;o.next=i.next,i.next=s}r.baseQueue=o=i,n.pending=null}if(null!==o){i=o.next,r=r.baseState;var l=s=null,c=null,u=i;do{var d=u.lane;if((gi&d)===d)null!==c&&(c=c.next={lane:0,action:u.action,hasEagerState:u.hasEagerState,eagerState:u.eagerState,next:null}),r=u.hasEagerState?u.eagerState:e(r,u.action);else{var p={lane:d,action:u.action,hasEagerState:u.hasEagerState,eagerState:u.eagerState,next:null};null===c?(l=c=p,s=r):c=c.next=p,mi.lanes|=d,Fl|=d}u=u.next}while(null!==u&&u!==i);null===c?s=r:c.next=l,sr(r,t.memoizedState)||(ws=!0),t.memoizedState=r,t.baseState=s,t.baseQueue=c,n.lastRenderedState=r}if(null!==(e=n.interleaved)){o=e;do{i=o.lane,mi.lanes|=i,Fl|=i,o=o.next}while(o!==e)}else null===o&&(n.lanes=0);return[t.memoizedState,n.dispatch]}function Ti(e){var t=Pi(),n=t.queue;if(null===n)throw Error(a(311));n.lastRenderedReducer=e;var r=n.dispatch,o=n.pending,i=t.memoizedState;if(null!==o){n.pending=null;var s=o=o.next;do{i=e(i,s.action),s=s.next}while(s!==o);sr(i,t.memoizedState)||(ws=!0),t.memoizedState=i,null===t.baseQueue&&(t.baseState=i),n.lastRenderedState=i}return[i,r]}function Ii(){}function Ai(e,t){var n=mi,r=Pi(),o=t(),i=!sr(r.memoizedState,o);if(i&&(r.memoizedState=o,ws=!0),r=r.queue,qi(Ri.bind(null,n,r,e),[e]),r.getSnapshot!==t||i||null!==bi&&1&bi.memoizedState.tag){if(n.flags|=2048,Bi(9,Li.bind(null,n,r,o,t),void 0,null),null===Tl)throw Error(a(349));0!=(30&gi)||Ni(n,t,o)}return o}function Ni(e,t,n){e.flags|=16384,e={getSnapshot:t,value:n},null===(t=mi.updateQueue)?(t={lastEffect:null,stores:null},mi.updateQueue=t,t.stores=[e]):null===(n=t.stores)?t.stores=[e]:n.push(e)}function Li(e,t,n,r){t.value=n,t.getSnapshot=r,Di(t)&&Fi(e)}function Ri(e,t,n){return n((function(){Di(t)&&Fi(e)}))}function Di(e){var t=e.getSnapshot;e=e.value;try{var n=t();return!sr(e,n)}catch(r){return!0}}function Fi(e){var t=Ta(e,1);null!==t&&rc(t,e,1,-1)}function Mi(e){var t=Oi();return"function"==typeof e&&(e=e()),t.memoizedState=t.baseState=e,e={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:ji,lastRenderedState:e},t.queue=e,e=e.dispatch=ns.bind(null,mi,e),[t.memoizedState,e]}function Bi(e,t,n,r){return e={tag:e,create:t,destroy:n,deps:r,next:null},null===(t=mi.updateQueue)?(t={lastEffect:null,stores:null},mi.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 zi(){return Pi().memoizedState}function Ui(e,t,n,r){var o=Oi();mi.flags|=e,o.memoizedState=Bi(1|t,n,void 0,void 0===r?null:r)}function $i(e,t,n,r){var o=Pi();r=void 0===r?null:r;var a=void 0;if(null!==hi){var i=hi.memoizedState;if(a=i.destroy,null!==r&&_i(r,i.deps))return void(o.memoizedState=Bi(t,n,a,r))}mi.flags|=e,o.memoizedState=Bi(1|t,n,a,r)}function Hi(e,t){return Ui(8390656,8,e,t)}function qi(e,t){return $i(2048,8,e,t)}function Vi(e,t){return $i(4,2,e,t)}function Qi(e,t){return $i(4,4,e,t)}function Zi(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 Wi(e,t,n){return n=null!=n?n.concat([e]):null,$i(4,4,Zi.bind(null,t,e),n)}function Gi(){}function Yi(e,t){var n=Pi();t=void 0===t?null:t;var r=n.memoizedState;return null!==r&&null!==t&&_i(t,r[1])?r[0]:(n.memoizedState=[e,t],e)}function Ki(e,t){var n=Pi();t=void 0===t?null:t;var r=n.memoizedState;return null!==r&&null!==t&&_i(t,r[1])?r[0]:(e=e(),n.memoizedState=[e,t],e)}function Xi(e,t,n){return 0==(21&gi)?(e.baseState&&(e.baseState=!1,ws=!0),e.memoizedState=n):(sr(n,t)||(n=mt(),mi.lanes|=n,Fl|=n,e.baseState=!0),t)}function Ji(e,t){var n=vt;vt=0!==n&&4>n?n:4,e(!0);var r=fi.transition;fi.transition={};try{e(!1),t()}finally{vt=n,fi.transition=r}}function es(){return Pi().memoizedState}function ts(e,t,n){var r=nc(e);if(n={lane:r,action:n,hasEagerState:!1,eagerState:null,next:null},rs(e))os(t,n);else if(null!==(n=Ca(e,t,n,r))){rc(n,e,r,tc()),as(n,t,r)}}function ns(e,t,n){var r=nc(e),o={lane:r,action:n,hasEagerState:!1,eagerState:null,next:null};if(rs(e))os(t,o);else{var a=e.alternate;if(0===e.lanes&&(null===a||0===a.lanes)&&null!==(a=t.lastRenderedReducer))try{var i=t.lastRenderedState,s=a(i,n);if(o.hasEagerState=!0,o.eagerState=s,sr(s,i)){var l=t.interleaved;return null===l?(o.next=o,ja(t)):(o.next=l.next,l.next=o),void(t.interleaved=o)}}catch(c){}null!==(n=Ca(e,t,o,r))&&(rc(n,e,r,o=tc()),as(n,t,r))}}function rs(e){var t=e.alternate;return e===mi||null!==t&&t===mi}function os(e,t){vi=yi=!0;var n=e.pending;null===n?t.next=t:(t.next=n.next,n.next=t),e.pending=t}function as(e,t,n){if(0!=(4194240&n)){var r=t.lanes;n|=r&=e.pendingLanes,t.lanes=n,yt(e,n)}}var is={readContext:Oa,useCallback:Si,useContext:Si,useEffect:Si,useImperativeHandle:Si,useInsertionEffect:Si,useLayoutEffect:Si,useMemo:Si,useReducer:Si,useRef:Si,useState:Si,useDebugValue:Si,useDeferredValue:Si,useTransition:Si,useMutableSource:Si,useSyncExternalStore:Si,useId:Si,unstable_isNewReconciler:!1},ss={readContext:Oa,useCallback:function(e,t){return Oi().memoizedState=[e,void 0===t?null:t],e},useContext:Oa,useEffect:Hi,useImperativeHandle:function(e,t,n){return n=null!=n?n.concat([e]):null,Ui(4194308,4,Zi.bind(null,t,e),n)},useLayoutEffect:function(e,t){return Ui(4194308,4,e,t)},useInsertionEffect:function(e,t){return Ui(4,2,e,t)},useMemo:function(e,t){var n=Oi();return t=void 0===t?null:t,e=e(),n.memoizedState=[e,t],e},useReducer:function(e,t,n){var r=Oi();return t=void 0!==n?n(t):t,r.memoizedState=r.baseState=t,e={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:t},r.queue=e,e=e.dispatch=ts.bind(null,mi,e),[r.memoizedState,e]},useRef:function(e){return e={current:e},Oi().memoizedState=e},useState:Mi,useDebugValue:Gi,useDeferredValue:function(e){return Oi().memoizedState=e},useTransition:function(){var e=Mi(!1),t=e[0];return e=Ji.bind(null,e[1]),Oi().memoizedState=e,[t,e]},useMutableSource:function(){},useSyncExternalStore:function(e,t,n){var r=mi,o=Oi();if(aa){if(void 0===n)throw Error(a(407));n=n()}else{if(n=t(),null===Tl)throw Error(a(349));0!=(30&gi)||Ni(r,t,n)}o.memoizedState=n;var i={value:n,getSnapshot:t};return o.queue=i,Hi(Ri.bind(null,r,i,e),[e]),r.flags|=2048,Bi(9,Li.bind(null,r,i,n,t),void 0,null),n},useId:function(){var e=Oi(),t=Tl.identifierPrefix;if(aa){var n=Xo;t=":"+t+"R"+(n=(Ko&~(1<<32-it(Ko)-1)).toString(32)+n),0<(n=wi++)&&(t+="H"+n.toString(32)),t+=":"}else t=":"+t+"r"+(n=ki++).toString(32)+":";return e.memoizedState=t},unstable_isNewReconciler:!1},ls={readContext:Oa,useCallback:Yi,useContext:Oa,useEffect:qi,useImperativeHandle:Wi,useInsertionEffect:Vi,useLayoutEffect:Qi,useMemo:Ki,useReducer:Ci,useRef:zi,useState:function(){return Ci(ji)},useDebugValue:Gi,useDeferredValue:function(e){return Xi(Pi(),hi.memoizedState,e)},useTransition:function(){return[Ci(ji)[0],Pi().memoizedState]},useMutableSource:Ii,useSyncExternalStore:Ai,useId:es,unstable_isNewReconciler:!1},cs={readContext:Oa,useCallback:Yi,useContext:Oa,useEffect:qi,useImperativeHandle:Wi,useInsertionEffect:Vi,useLayoutEffect:Qi,useMemo:Ki,useReducer:Ti,useRef:zi,useState:function(){return Ti(ji)},useDebugValue:Gi,useDeferredValue:function(e){var t=Pi();return null===hi?t.memoizedState=e:Xi(t,hi.memoizedState,e)},useTransition:function(){return[Ti(ji)[0],Pi().memoizedState]},useMutableSource:Ii,useSyncExternalStore:Ai,useId:es,unstable_isNewReconciler:!1};function us(e,t){try{var n="",r=t;do{n+=U(r),r=r.return}while(r);var o=n}catch(a){o="\nError generating stack: "+a.message+"\n"+a.stack}return{value:e,source:t,stack:o,digest:null}}function ds(e,t,n){return{value:e,source:null,stack:null!=n?n:null,digest:null!=t?t:null}}function ps(e,t){try{console.error(t.value)}catch(n){setTimeout((function(){throw n}))}}var fs="function"==typeof WeakMap?WeakMap:Map;function gs(e,t,n){(n=La(-1,n)).tag=3,n.payload={element:null};var r=t.value;return n.callback=function(){Vl||(Vl=!0,Ql=r),ps(0,t)},n}function ms(e,t,n){(n=La(-1,n)).tag=3;var r=e.type.getDerivedStateFromError;if("function"==typeof r){var o=t.value;n.payload=function(){return r(o)},n.callback=function(){ps(0,t)}}var a=e.stateNode;return null!==a&&"function"==typeof a.componentDidCatch&&(n.callback=function(){ps(0,t),"function"!=typeof r&&(null===Zl?Zl=new Set([this]):Zl.add(this));var e=t.stack;this.componentDidCatch(t.value,{componentStack:null!==e?e:""})}),n}function hs(e,t,n){var r=e.pingCache;if(null===r){r=e.pingCache=new fs;var o=new Set;r.set(t,o)}else void 0===(o=r.get(t))&&(o=new Set,r.set(t,o));o.has(n)||(o.add(n),e=Oc.bind(null,e,t,n),t.then(e,e))}function bs(e){do{var t;if((t=13===e.tag)&&(t=null===(t=e.memoizedState)||null!==t.dehydrated),t)return e;e=e.return}while(null!==e);return null}function ys(e,t,n,r,o){return 0==(1&e.mode)?(e===t?e.flags|=65536:(e.flags|=128,n.flags|=131072,n.flags&=-52805,1===n.tag&&(null===n.alternate?n.tag=17:((t=La(-1,1)).tag=2,Ra(n,t,1))),n.lanes|=1),e):(e.flags|=65536,e.lanes=o,e)}var vs=w.ReactCurrentOwner,ws=!1;function ks(e,t,n,r){t.child=null===e?Xa(t,null,n,r):Ka(t,e.child,n,r)}function Ss(e,t,n,r,o){n=n.render;var a=t.ref;return Ea(t,o),r=xi(e,t,n,r,a,o),n=Ei(),null===e||ws?(aa&&n&&ta(t),t.flags|=1,ks(e,t,r,o),t.child):(t.updateQueue=e.updateQueue,t.flags&=-2053,e.lanes&=~o,Vs(e,t,o))}function _s(e,t,n,r,o){if(null===e){var a=n.type;return"function"!=typeof a||Nc(a)||void 0!==a.defaultProps||null!==n.compare||void 0!==n.defaultProps?((e=Rc(n.type,null,r,t,t.mode,o)).ref=t.ref,e.return=t,t.child=e):(t.tag=15,t.type=a,xs(e,t,a,r,o))}if(a=e.child,0==(e.lanes&o)){var i=a.memoizedProps;if((n=null!==(n=n.compare)?n:lr)(i,r)&&e.ref===t.ref)return Vs(e,t,o)}return t.flags|=1,(e=Lc(a,r)).ref=t.ref,e.return=t,t.child=e}function xs(e,t,n,r,o){if(null!==e){var a=e.memoizedProps;if(lr(a,r)&&e.ref===t.ref){if(ws=!1,t.pendingProps=r=a,0==(e.lanes&o))return t.lanes=e.lanes,Vs(e,t,o);0!=(131072&e.flags)&&(ws=!0)}}return Ps(e,t,n,r,o)}function Es(e,t,n){var r=t.pendingProps,o=r.children,a=null!==e?e.memoizedState:null;if("hidden"===r.mode)if(0==(1&t.mode))t.memoizedState={baseLanes:0,cachePool:null,transitions:null},Po(Ll,Nl),Nl|=n;else{if(0==(1073741824&n))return e=null!==a?a.baseLanes|n:n,t.lanes=t.childLanes=1073741824,t.memoizedState={baseLanes:e,cachePool:null,transitions:null},t.updateQueue=null,Po(Ll,Nl),Nl|=e,null;t.memoizedState={baseLanes:0,cachePool:null,transitions:null},r=null!==a?a.baseLanes:n,Po(Ll,Nl),Nl|=r}else null!==a?(r=a.baseLanes|n,t.memoizedState=null):r=n,Po(Ll,Nl),Nl|=r;return ks(e,t,o,n),t.child}function Os(e,t){var n=t.ref;(null===e&&null!==n||null!==e&&e.ref!==n)&&(t.flags|=512,t.flags|=2097152)}function Ps(e,t,n,r,o){var a=No(n)?Io:Co.current;return a=Ao(t,a),Ea(t,o),n=xi(e,t,n,r,a,o),r=Ei(),null===e||ws?(aa&&r&&ta(t),t.flags|=1,ks(e,t,n,o),t.child):(t.updateQueue=e.updateQueue,t.flags&=-2053,e.lanes&=~o,Vs(e,t,o))}function js(e,t,n,r,o){if(No(n)){var a=!0;Fo(t)}else a=!1;if(Ea(t,o),null===t.stateNode)qs(e,t),qa(t,n,r),Qa(t,n,r,o),r=!0;else if(null===e){var i=t.stateNode,s=t.memoizedProps;i.props=s;var l=i.context,c=n.contextType;"object"==typeof c&&null!==c?c=Oa(c):c=Ao(t,c=No(n)?Io:Co.current);var u=n.getDerivedStateFromProps,d="function"==typeof u||"function"==typeof i.getSnapshotBeforeUpdate;d||"function"!=typeof i.UNSAFE_componentWillReceiveProps&&"function"!=typeof i.componentWillReceiveProps||(s!==r||l!==c)&&Va(t,i,r,c),Ia=!1;var p=t.memoizedState;i.state=p,Ma(t,r,i,o),l=t.memoizedState,s!==r||p!==l||To.current||Ia?("function"==typeof u&&(Ua(t,n,u,r),l=t.memoizedState),(s=Ia||Ha(t,n,s,r,p,l,c))?(d||"function"!=typeof i.UNSAFE_componentWillMount&&"function"!=typeof i.componentWillMount||("function"==typeof i.componentWillMount&&i.componentWillMount(),"function"==typeof i.UNSAFE_componentWillMount&&i.UNSAFE_componentWillMount()),"function"==typeof i.componentDidMount&&(t.flags|=4194308)):("function"==typeof i.componentDidMount&&(t.flags|=4194308),t.memoizedProps=r,t.memoizedState=l),i.props=r,i.state=l,i.context=c,r=s):("function"==typeof i.componentDidMount&&(t.flags|=4194308),r=!1)}else{i=t.stateNode,Na(e,t),s=t.memoizedProps,c=t.type===t.elementType?s:ba(t.type,s),i.props=c,d=t.pendingProps,p=i.context,"object"==typeof(l=n.contextType)&&null!==l?l=Oa(l):l=Ao(t,l=No(n)?Io:Co.current);var f=n.getDerivedStateFromProps;(u="function"==typeof f||"function"==typeof i.getSnapshotBeforeUpdate)||"function"!=typeof i.UNSAFE_componentWillReceiveProps&&"function"!=typeof i.componentWillReceiveProps||(s!==d||p!==l)&&Va(t,i,r,l),Ia=!1,p=t.memoizedState,i.state=p,Ma(t,r,i,o);var g=t.memoizedState;s!==d||p!==g||To.current||Ia?("function"==typeof f&&(Ua(t,n,f,r),g=t.memoizedState),(c=Ia||Ha(t,n,c,r,p,g,l)||!1)?(u||"function"!=typeof i.UNSAFE_componentWillUpdate&&"function"!=typeof i.componentWillUpdate||("function"==typeof i.componentWillUpdate&&i.componentWillUpdate(r,g,l),"function"==typeof i.UNSAFE_componentWillUpdate&&i.UNSAFE_componentWillUpdate(r,g,l)),"function"==typeof i.componentDidUpdate&&(t.flags|=4),"function"==typeof i.getSnapshotBeforeUpdate&&(t.flags|=1024)):("function"!=typeof i.componentDidUpdate||s===e.memoizedProps&&p===e.memoizedState||(t.flags|=4),"function"!=typeof i.getSnapshotBeforeUpdate||s===e.memoizedProps&&p===e.memoizedState||(t.flags|=1024),t.memoizedProps=r,t.memoizedState=g),i.props=r,i.state=g,i.context=l,r=c):("function"!=typeof i.componentDidUpdate||s===e.memoizedProps&&p===e.memoizedState||(t.flags|=4),"function"!=typeof i.getSnapshotBeforeUpdate||s===e.memoizedProps&&p===e.memoizedState||(t.flags|=1024),r=!1)}return Cs(e,t,n,r,a,o)}function Cs(e,t,n,r,o,a){Os(e,t);var i=0!=(128&t.flags);if(!r&&!i)return o&&Mo(t,n,!1),Vs(e,t,a);r=t.stateNode,vs.current=t;var s=i&&"function"!=typeof n.getDerivedStateFromError?null:r.render();return t.flags|=1,null!==e&&i?(t.child=Ka(t,e.child,null,a),t.child=Ka(t,null,s,a)):ks(e,t,s,a),t.memoizedState=r.state,o&&Mo(t,n,!0),t.child}function Ts(e){var t=e.stateNode;t.pendingContext?Ro(0,t.pendingContext,t.pendingContext!==t.context):t.context&&Ro(0,t.context,!1),oi(e,t.containerInfo)}function Is(e,t,n,r,o){return ga(),ma(o),t.flags|=256,ks(e,t,n,r),t.child}var As,Ns,Ls,Rs,Ds={dehydrated:null,treeContext:null,retryLane:0};function Fs(e){return{baseLanes:e,cachePool:null,transitions:null}}function Ms(e,t,n){var r,o=t.pendingProps,i=li.current,s=!1,l=0!=(128&t.flags);if((r=l)||(r=(null===e||null!==e.memoizedState)&&0!=(2&i)),r?(s=!0,t.flags&=-129):null!==e&&null===e.memoizedState||(i|=1),Po(li,1&i),null===e)return ua(t),null!==(e=t.memoizedState)&&null!==(e=e.dehydrated)?(0==(1&t.mode)?t.lanes=1:"$!"===e.data?t.lanes=8:t.lanes=1073741824,null):(l=o.children,e=o.fallback,s?(o=t.mode,s=t.child,l={mode:"hidden",children:l},0==(1&o)&&null!==s?(s.childLanes=0,s.pendingProps=l):s=Fc(l,o,0,null),e=Dc(e,o,n,null),s.return=t,e.return=t,s.sibling=e,t.child=s,t.child.memoizedState=Fs(n),t.memoizedState=Ds,e):Bs(t,l));if(null!==(i=e.memoizedState)&&null!==(r=i.dehydrated))return function(e,t,n,r,o,i,s){if(n)return 256&t.flags?(t.flags&=-257,zs(e,t,s,r=ds(Error(a(422))))):null!==t.memoizedState?(t.child=e.child,t.flags|=128,null):(i=r.fallback,o=t.mode,r=Fc({mode:"visible",children:r.children},o,0,null),(i=Dc(i,o,s,null)).flags|=2,r.return=t,i.return=t,r.sibling=i,t.child=r,0!=(1&t.mode)&&Ka(t,e.child,null,s),t.child.memoizedState=Fs(s),t.memoizedState=Ds,i);if(0==(1&t.mode))return zs(e,t,s,null);if("$!"===o.data){if(r=o.nextSibling&&o.nextSibling.dataset)var l=r.dgst;return r=l,zs(e,t,s,r=ds(i=Error(a(419)),r,void 0))}if(l=0!=(s&e.childLanes),ws||l){if(null!==(r=Tl)){switch(s&-s){case 4:o=2;break;case 16:o=8;break;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:o=32;break;case 536870912:o=268435456;break;default:o=0}0!==(o=0!=(o&(r.suspendedLanes|s))?0:o)&&o!==i.retryLane&&(i.retryLane=o,Ta(e,o),rc(r,e,o,-1))}return hc(),zs(e,t,s,r=ds(Error(a(421))))}return"$?"===o.data?(t.flags|=128,t.child=e.child,t=jc.bind(null,e),o._reactRetry=t,null):(e=i.treeContext,oa=co(o.nextSibling),ra=t,aa=!0,ia=null,null!==e&&(Wo[Go++]=Ko,Wo[Go++]=Xo,Wo[Go++]=Yo,Ko=e.id,Xo=e.overflow,Yo=t),t=Bs(t,r.children),t.flags|=4096,t)}(e,t,l,o,r,i,n);if(s){s=o.fallback,l=t.mode,r=(i=e.child).sibling;var c={mode:"hidden",children:o.children};return 0==(1&l)&&t.child!==i?((o=t.child).childLanes=0,o.pendingProps=c,t.deletions=null):(o=Lc(i,c)).subtreeFlags=14680064&i.subtreeFlags,null!==r?s=Lc(r,s):(s=Dc(s,l,n,null)).flags|=2,s.return=t,o.return=t,o.sibling=s,t.child=o,o=s,s=t.child,l=null===(l=e.child.memoizedState)?Fs(n):{baseLanes:l.baseLanes|n,cachePool:null,transitions:l.transitions},s.memoizedState=l,s.childLanes=e.childLanes&~n,t.memoizedState=Ds,o}return e=(s=e.child).sibling,o=Lc(s,{mode:"visible",children:o.children}),0==(1&t.mode)&&(o.lanes=n),o.return=t,o.sibling=null,null!==e&&(null===(n=t.deletions)?(t.deletions=[e],t.flags|=16):n.push(e)),t.child=o,t.memoizedState=null,o}function Bs(e,t){return(t=Fc({mode:"visible",children:t},e.mode,0,null)).return=e,e.child=t}function zs(e,t,n,r){return null!==r&&ma(r),Ka(t,e.child,null,n),(e=Bs(t,t.pendingProps.children)).flags|=2,t.memoizedState=null,e}function Us(e,t,n){e.lanes|=t;var r=e.alternate;null!==r&&(r.lanes|=t),xa(e.return,t,n)}function $s(e,t,n,r,o){var a=e.memoizedState;null===a?e.memoizedState={isBackwards:t,rendering:null,renderingStartTime:0,last:r,tail:n,tailMode:o}:(a.isBackwards=t,a.rendering=null,a.renderingStartTime=0,a.last=r,a.tail=n,a.tailMode=o)}function Hs(e,t,n){var r=t.pendingProps,o=r.revealOrder,a=r.tail;if(ks(e,t,r.children,n),0!=(2&(r=li.current)))r=1&r|2,t.flags|=128;else{if(null!==e&&0!=(128&e.flags))e:for(e=t.child;null!==e;){if(13===e.tag)null!==e.memoizedState&&Us(e,n,t);else if(19===e.tag)Us(e,n,t);else if(null!==e.child){e.child.return=e,e=e.child;continue}if(e===t)break e;for(;null===e.sibling;){if(null===e.return||e.return===t)break e;e=e.return}e.sibling.return=e.return,e=e.sibling}r&=1}if(Po(li,r),0==(1&t.mode))t.memoizedState=null;else switch(o){case"forwards":for(n=t.child,o=null;null!==n;)null!==(e=n.alternate)&&null===ci(e)&&(o=n),n=n.sibling;null===(n=o)?(o=t.child,t.child=null):(o=n.sibling,n.sibling=null),$s(t,!1,o,n,a);break;case"backwards":for(n=null,o=t.child,t.child=null;null!==o;){if(null!==(e=o.alternate)&&null===ci(e)){t.child=o;break}e=o.sibling,o.sibling=n,n=o,o=e}$s(t,!0,n,null,a);break;case"together":$s(t,!1,null,null,void 0);break;default:t.memoizedState=null}return t.child}function qs(e,t){0==(1&t.mode)&&null!==e&&(e.alternate=null,t.alternate=null,t.flags|=2)}function Vs(e,t,n){if(null!==e&&(t.dependencies=e.dependencies),Fl|=t.lanes,0==(n&t.childLanes))return null;if(null!==e&&t.child!==e.child)throw Error(a(153));if(null!==t.child){for(n=Lc(e=t.child,e.pendingProps),t.child=n,n.return=t;null!==e.sibling;)e=e.sibling,(n=n.sibling=Lc(e,e.pendingProps)).return=t;n.sibling=null}return t.child}function Qs(e,t){if(!aa)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 Zs(e){var t=null!==e.alternate&&e.alternate.child===e.child,n=0,r=0;if(t)for(var o=e.child;null!==o;)n|=o.lanes|o.childLanes,r|=14680064&o.subtreeFlags,r|=14680064&o.flags,o.return=e,o=o.sibling;else for(o=e.child;null!==o;)n|=o.lanes|o.childLanes,r|=o.subtreeFlags,r|=o.flags,o.return=e,o=o.sibling;return e.subtreeFlags|=r,e.childLanes=n,t}function Ws(e,t,n){var r=t.pendingProps;switch(na(t),t.tag){case 2:case 16:case 15:case 0:case 11:case 7:case 8:case 12:case 9:case 14:return Zs(t),null;case 1:case 17:return No(t.type)&&Lo(),Zs(t),null;case 3:return r=t.stateNode,ai(),Oo(To),Oo(Co),di(),r.pendingContext&&(r.context=r.pendingContext,r.pendingContext=null),null!==e&&null!==e.child||(pa(t)?t.flags|=4:null===e||e.memoizedState.isDehydrated&&0==(256&t.flags)||(t.flags|=1024,null!==ia&&(sc(ia),ia=null))),Ns(e,t),Zs(t),null;case 5:si(t);var o=ri(ni.current);if(n=t.type,null!==e&&null!=t.stateNode)Ls(e,t,n,r,o),e.ref!==t.ref&&(t.flags|=512,t.flags|=2097152);else{if(!r){if(null===t.stateNode)throw Error(a(166));return Zs(t),null}if(e=ri(ei.current),pa(t)){r=t.stateNode,n=t.type;var i=t.memoizedProps;switch(r[fo]=t,r[go]=i,e=0!=(1&t.mode),n){case"dialog":Br("cancel",r),Br("close",r);break;case"iframe":case"object":case"embed":Br("load",r);break;case"video":case"audio":for(o=0;o<Rr.length;o++)Br(Rr[o],r);break;case"source":Br("error",r);break;case"img":case"image":case"link":Br("error",r),Br("load",r);break;case"details":Br("toggle",r);break;case"input":Y(r,i),Br("invalid",r);break;case"select":r._wrapperState={wasMultiple:!!i.multiple},Br("invalid",r);break;case"textarea":oe(r,i),Br("invalid",r)}for(var l in ye(n,i),o=null,i)if(i.hasOwnProperty(l)){var c=i[l];"children"===l?"string"==typeof c?r.textContent!==c&&(!0!==i.suppressHydrationWarning&&Xr(r.textContent,c,e),o=["children",c]):"number"==typeof c&&r.textContent!==""+c&&(!0!==i.suppressHydrationWarning&&Xr(r.textContent,c,e),o=["children",""+c]):s.hasOwnProperty(l)&&null!=c&&"onScroll"===l&&Br("scroll",r)}switch(n){case"input":Q(r),J(r,i,!0);break;case"textarea":Q(r),ie(r);break;case"select":case"option":break;default:"function"==typeof i.onClick&&(r.onclick=Jr)}r=o,t.updateQueue=r,null!==r&&(t.flags|=4)}else{l=9===o.nodeType?o:o.ownerDocument,"http://www.w3.org/1999/xhtml"===e&&(e=se(n)),"http://www.w3.org/1999/xhtml"===e?"script"===n?((e=l.createElement("div")).innerHTML="<script><\/script>",e=e.removeChild(e.firstChild)):"string"==typeof r.is?e=l.createElement(n,{is:r.is}):(e=l.createElement(n),"select"===n&&(l=e,r.multiple?l.multiple=!0:r.size&&(l.size=r.size))):e=l.createElementNS(e,n),e[fo]=t,e[go]=r,As(e,t,!1,!1),t.stateNode=e;e:{switch(l=ve(n,r),n){case"dialog":Br("cancel",e),Br("close",e),o=r;break;case"iframe":case"object":case"embed":Br("load",e),o=r;break;case"video":case"audio":for(o=0;o<Rr.length;o++)Br(Rr[o],e);o=r;break;case"source":Br("error",e),o=r;break;case"img":case"image":case"link":Br("error",e),Br("load",e),o=r;break;case"details":Br("toggle",e),o=r;break;case"input":Y(e,r),o=G(e,r),Br("invalid",e);break;case"option":default:o=r;break;case"select":e._wrapperState={wasMultiple:!!r.multiple},o=F({},r,{value:void 0}),Br("invalid",e);break;case"textarea":oe(e,r),o=re(e,r),Br("invalid",e)}for(i in ye(n,o),c=o)if(c.hasOwnProperty(i)){var u=c[i];"style"===i?he(e,u):"dangerouslySetInnerHTML"===i?null!=(u=u?u.__html:void 0)&&de(e,u):"children"===i?"string"==typeof u?("textarea"!==n||""!==u)&&pe(e,u):"number"==typeof u&&pe(e,""+u):"suppressContentEditableWarning"!==i&&"suppressHydrationWarning"!==i&&"autoFocus"!==i&&(s.hasOwnProperty(i)?null!=u&&"onScroll"===i&&Br("scroll",e):null!=u&&v(e,i,u,l))}switch(n){case"input":Q(e),J(e,r,!1);break;case"textarea":Q(e),ie(e);break;case"option":null!=r.value&&e.setAttribute("value",""+q(r.value));break;case"select":e.multiple=!!r.multiple,null!=(i=r.value)?ne(e,!!r.multiple,i,!1):null!=r.defaultValue&&ne(e,!!r.multiple,r.defaultValue,!0);break;default:"function"==typeof o.onClick&&(e.onclick=Jr)}switch(n){case"button":case"input":case"select":case"textarea":r=!!r.autoFocus;break e;case"img":r=!0;break e;default:r=!1}}r&&(t.flags|=4)}null!==t.ref&&(t.flags|=512,t.flags|=2097152)}return Zs(t),null;case 6:if(e&&null!=t.stateNode)Rs(e,t,e.memoizedProps,r);else{if("string"!=typeof r&&null===t.stateNode)throw Error(a(166));if(n=ri(ni.current),ri(ei.current),pa(t)){if(r=t.stateNode,n=t.memoizedProps,r[fo]=t,(i=r.nodeValue!==n)&&null!==(e=ra))switch(e.tag){case 3:Xr(r.nodeValue,n,0!=(1&e.mode));break;case 5:!0!==e.memoizedProps.suppressHydrationWarning&&Xr(r.nodeValue,n,0!=(1&e.mode))}i&&(t.flags|=4)}else(r=(9===n.nodeType?n:n.ownerDocument).createTextNode(r))[fo]=t,t.stateNode=r}return Zs(t),null;case 13:if(Oo(li),r=t.memoizedState,null===e||null!==e.memoizedState&&null!==e.memoizedState.dehydrated){if(aa&&null!==oa&&0!=(1&t.mode)&&0==(128&t.flags))fa(),ga(),t.flags|=98560,i=!1;else if(i=pa(t),null!==r&&null!==r.dehydrated){if(null===e){if(!i)throw Error(a(318));if(!(i=null!==(i=t.memoizedState)?i.dehydrated:null))throw Error(a(317));i[fo]=t}else ga(),0==(128&t.flags)&&(t.memoizedState=null),t.flags|=4;Zs(t),i=!1}else null!==ia&&(sc(ia),ia=null),i=!0;if(!i)return 65536&t.flags?t:null}return 0!=(128&t.flags)?(t.lanes=n,t):((r=null!==r)!==(null!==e&&null!==e.memoizedState)&&r&&(t.child.flags|=8192,0!=(1&t.mode)&&(null===e||0!=(1&li.current)?0===Rl&&(Rl=3):hc())),null!==t.updateQueue&&(t.flags|=4),Zs(t),null);case 4:return ai(),Ns(e,t),null===e&&$r(t.stateNode.containerInfo),Zs(t),null;case 10:return _a(t.type._context),Zs(t),null;case 19:if(Oo(li),null===(i=t.memoizedState))return Zs(t),null;if(r=0!=(128&t.flags),null===(l=i.rendering))if(r)Qs(i,!1);else{if(0!==Rl||null!==e&&0!=(128&e.flags))for(e=t.child;null!==e;){if(null!==(l=ci(e))){for(t.flags|=128,Qs(i,!1),null!==(r=l.updateQueue)&&(t.updateQueue=r,t.flags|=4),t.subtreeFlags=0,r=n,n=t.child;null!==n;)e=r,(i=n).flags&=14680066,null===(l=i.alternate)?(i.childLanes=0,i.lanes=e,i.child=null,i.subtreeFlags=0,i.memoizedProps=null,i.memoizedState=null,i.updateQueue=null,i.dependencies=null,i.stateNode=null):(i.childLanes=l.childLanes,i.lanes=l.lanes,i.child=l.child,i.subtreeFlags=0,i.deletions=null,i.memoizedProps=l.memoizedProps,i.memoizedState=l.memoizedState,i.updateQueue=l.updateQueue,i.type=l.type,e=l.dependencies,i.dependencies=null===e?null:{lanes:e.lanes,firstContext:e.firstContext}),n=n.sibling;return Po(li,1&li.current|2),t.child}e=e.sibling}null!==i.tail&&Ke()>Hl&&(t.flags|=128,r=!0,Qs(i,!1),t.lanes=4194304)}else{if(!r)if(null!==(e=ci(l))){if(t.flags|=128,r=!0,null!==(n=e.updateQueue)&&(t.updateQueue=n,t.flags|=4),Qs(i,!0),null===i.tail&&"hidden"===i.tailMode&&!l.alternate&&!aa)return Zs(t),null}else 2*Ke()-i.renderingStartTime>Hl&&1073741824!==n&&(t.flags|=128,r=!0,Qs(i,!1),t.lanes=4194304);i.isBackwards?(l.sibling=t.child,t.child=l):(null!==(n=i.last)?n.sibling=l:t.child=l,i.last=l)}return null!==i.tail?(t=i.tail,i.rendering=t,i.tail=t.sibling,i.renderingStartTime=Ke(),t.sibling=null,n=li.current,Po(li,r?1&n|2:1&n),t):(Zs(t),null);case 22:case 23:return pc(),r=null!==t.memoizedState,null!==e&&null!==e.memoizedState!==r&&(t.flags|=8192),r&&0!=(1&t.mode)?0!=(1073741824&Nl)&&(Zs(t),6&t.subtreeFlags&&(t.flags|=8192)):Zs(t),null;case 24:case 25:return null}throw Error(a(156,t.tag))}function Gs(e,t){switch(na(t),t.tag){case 1:return No(t.type)&&Lo(),65536&(e=t.flags)?(t.flags=-65537&e|128,t):null;case 3:return ai(),Oo(To),Oo(Co),di(),0!=(65536&(e=t.flags))&&0==(128&e)?(t.flags=-65537&e|128,t):null;case 5:return si(t),null;case 13:if(Oo(li),null!==(e=t.memoizedState)&&null!==e.dehydrated){if(null===t.alternate)throw Error(a(340));ga()}return 65536&(e=t.flags)?(t.flags=-65537&e|128,t):null;case 19:return Oo(li),null;case 4:return ai(),null;case 10:return _a(t.type._context),null;case 22:case 23:return pc(),null;default:return null}}As=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}},Ns=function(){},Ls=function(e,t,n,r){var o=e.memoizedProps;if(o!==r){e=t.stateNode,ri(ei.current);var a,i=null;switch(n){case"input":o=G(e,o),r=G(e,r),i=[];break;case"select":o=F({},o,{value:void 0}),r=F({},r,{value:void 0}),i=[];break;case"textarea":o=re(e,o),r=re(e,r),i=[];break;default:"function"!=typeof o.onClick&&"function"==typeof r.onClick&&(e.onclick=Jr)}for(u in ye(n,r),n=null,o)if(!r.hasOwnProperty(u)&&o.hasOwnProperty(u)&&null!=o[u])if("style"===u){var l=o[u];for(a in l)l.hasOwnProperty(a)&&(n||(n={}),n[a]="")}else"dangerouslySetInnerHTML"!==u&&"children"!==u&&"suppressContentEditableWarning"!==u&&"suppressHydrationWarning"!==u&&"autoFocus"!==u&&(s.hasOwnProperty(u)?i||(i=[]):(i=i||[]).push(u,null));for(u in r){var c=r[u];if(l=null!=o?o[u]:void 0,r.hasOwnProperty(u)&&c!==l&&(null!=c||null!=l))if("style"===u)if(l){for(a in l)!l.hasOwnProperty(a)||c&&c.hasOwnProperty(a)||(n||(n={}),n[a]="");for(a in c)c.hasOwnProperty(a)&&l[a]!==c[a]&&(n||(n={}),n[a]=c[a])}else n||(i||(i=[]),i.push(u,n)),n=c;else"dangerouslySetInnerHTML"===u?(c=c?c.__html:void 0,l=l?l.__html:void 0,null!=c&&l!==c&&(i=i||[]).push(u,c)):"children"===u?"string"!=typeof c&&"number"!=typeof c||(i=i||[]).push(u,""+c):"suppressContentEditableWarning"!==u&&"suppressHydrationWarning"!==u&&(s.hasOwnProperty(u)?(null!=c&&"onScroll"===u&&Br("scroll",e),i||l===c||(i=[])):(i=i||[]).push(u,c))}n&&(i=i||[]).push("style",n);var u=i;(t.updateQueue=u)&&(t.flags|=4)}},Rs=function(e,t,n,r){n!==r&&(t.flags|=4)};var Ys=!1,Ks=!1,Xs="function"==typeof WeakSet?WeakSet:Set,Js=null;function el(e,t){var n=e.ref;if(null!==n)if("function"==typeof n)try{n(null)}catch(r){Ec(e,t,r)}else n.current=null}function tl(e,t,n){try{n()}catch(r){Ec(e,t,r)}}var nl=!1;function rl(e,t,n){var r=t.updateQueue;if(null!==(r=null!==r?r.lastEffect:null)){var o=r=r.next;do{if((o.tag&e)===e){var a=o.destroy;o.destroy=void 0,void 0!==a&&tl(t,n,a)}o=o.next}while(o!==r)}}function ol(e,t){if(null!==(t=null!==(t=t.updateQueue)?t.lastEffect:null)){var n=t=t.next;do{if((n.tag&e)===e){var r=n.create;n.destroy=r()}n=n.next}while(n!==t)}}function al(e){var t=e.ref;if(null!==t){var n=e.stateNode;e.tag,e=n,"function"==typeof t?t(e):t.current=e}}function il(e){var t=e.alternate;null!==t&&(e.alternate=null,il(t)),e.child=null,e.deletions=null,e.sibling=null,5===e.tag&&(null!==(t=e.stateNode)&&(delete t[fo],delete t[go],delete t[ho],delete t[bo],delete t[yo])),e.stateNode=null,e.return=null,e.dependencies=null,e.memoizedProps=null,e.memoizedState=null,e.pendingProps=null,e.stateNode=null,e.updateQueue=null}function sl(e){return 5===e.tag||3===e.tag||4===e.tag}function ll(e){e:for(;;){for(;null===e.sibling;){if(null===e.return||sl(e.return))return null;e=e.return}for(e.sibling.return=e.return,e=e.sibling;5!==e.tag&&6!==e.tag&&18!==e.tag;){if(2&e.flags)continue e;if(null===e.child||4===e.tag)continue e;e.child.return=e,e=e.child}if(!(2&e.flags))return e.stateNode}}function cl(e,t,n){var r=e.tag;if(5===r||6===r)e=e.stateNode,t?8===n.nodeType?n.parentNode.insertBefore(e,t):n.insertBefore(e,t):(8===n.nodeType?(t=n.parentNode).insertBefore(e,n):(t=n).appendChild(e),null!=(n=n._reactRootContainer)||null!==t.onclick||(t.onclick=Jr));else if(4!==r&&null!==(e=e.child))for(cl(e,t,n),e=e.sibling;null!==e;)cl(e,t,n),e=e.sibling}function ul(e,t,n){var r=e.tag;if(5===r||6===r)e=e.stateNode,t?n.insertBefore(e,t):n.appendChild(e);else if(4!==r&&null!==(e=e.child))for(ul(e,t,n),e=e.sibling;null!==e;)ul(e,t,n),e=e.sibling}var dl=null,pl=!1;function fl(e,t,n){for(n=n.child;null!==n;)gl(e,t,n),n=n.sibling}function gl(e,t,n){if(at&&"function"==typeof at.onCommitFiberUnmount)try{at.onCommitFiberUnmount(ot,n)}catch(s){}switch(n.tag){case 5:Ks||el(n,t);case 6:var r=dl,o=pl;dl=null,fl(e,t,n),pl=o,null!==(dl=r)&&(pl?(e=dl,n=n.stateNode,8===e.nodeType?e.parentNode.removeChild(n):e.removeChild(n)):dl.removeChild(n.stateNode));break;case 18:null!==dl&&(pl?(e=dl,n=n.stateNode,8===e.nodeType?lo(e.parentNode,n):1===e.nodeType&&lo(e,n),$t(e)):lo(dl,n.stateNode));break;case 4:r=dl,o=pl,dl=n.stateNode.containerInfo,pl=!0,fl(e,t,n),dl=r,pl=o;break;case 0:case 11:case 14:case 15:if(!Ks&&(null!==(r=n.updateQueue)&&null!==(r=r.lastEffect))){o=r=r.next;do{var a=o,i=a.destroy;a=a.tag,void 0!==i&&(0!=(2&a)||0!=(4&a))&&tl(n,t,i),o=o.next}while(o!==r)}fl(e,t,n);break;case 1:if(!Ks&&(el(n,t),"function"==typeof(r=n.stateNode).componentWillUnmount))try{r.props=n.memoizedProps,r.state=n.memoizedState,r.componentWillUnmount()}catch(s){Ec(n,t,s)}fl(e,t,n);break;case 21:fl(e,t,n);break;case 22:1&n.mode?(Ks=(r=Ks)||null!==n.memoizedState,fl(e,t,n),Ks=r):fl(e,t,n);break;default:fl(e,t,n)}}function ml(e){var t=e.updateQueue;if(null!==t){e.updateQueue=null;var n=e.stateNode;null===n&&(n=e.stateNode=new Xs),t.forEach((function(t){var r=Cc.bind(null,e,t);n.has(t)||(n.add(t),t.then(r,r))}))}}function hl(e,t){var n=t.deletions;if(null!==n)for(var r=0;r<n.length;r++){var o=n[r];try{var i=e,s=t,l=s;e:for(;null!==l;){switch(l.tag){case 5:dl=l.stateNode,pl=!1;break e;case 3:case 4:dl=l.stateNode.containerInfo,pl=!0;break e}l=l.return}if(null===dl)throw Error(a(160));gl(i,s,o),dl=null,pl=!1;var c=o.alternate;null!==c&&(c.return=null),o.return=null}catch(u){Ec(o,t,u)}}if(12854&t.subtreeFlags)for(t=t.child;null!==t;)bl(t,e),t=t.sibling}function bl(e,t){var n=e.alternate,r=e.flags;switch(e.tag){case 0:case 11:case 14:case 15:if(hl(t,e),yl(e),4&r){try{rl(3,e,e.return),ol(3,e)}catch(h){Ec(e,e.return,h)}try{rl(5,e,e.return)}catch(h){Ec(e,e.return,h)}}break;case 1:hl(t,e),yl(e),512&r&&null!==n&&el(n,n.return);break;case 5:if(hl(t,e),yl(e),512&r&&null!==n&&el(n,n.return),32&e.flags){var o=e.stateNode;try{pe(o,"")}catch(h){Ec(e,e.return,h)}}if(4&r&&null!=(o=e.stateNode)){var i=e.memoizedProps,s=null!==n?n.memoizedProps:i,l=e.type,c=e.updateQueue;if(e.updateQueue=null,null!==c)try{"input"===l&&"radio"===i.type&&null!=i.name&&K(o,i),ve(l,s);var u=ve(l,i);for(s=0;s<c.length;s+=2){var d=c[s],p=c[s+1];"style"===d?he(o,p):"dangerouslySetInnerHTML"===d?de(o,p):"children"===d?pe(o,p):v(o,d,p,u)}switch(l){case"input":X(o,i);break;case"textarea":ae(o,i);break;case"select":var f=o._wrapperState.wasMultiple;o._wrapperState.wasMultiple=!!i.multiple;var g=i.value;null!=g?ne(o,!!i.multiple,g,!1):f!==!!i.multiple&&(null!=i.defaultValue?ne(o,!!i.multiple,i.defaultValue,!0):ne(o,!!i.multiple,i.multiple?[]:"",!1))}o[go]=i}catch(h){Ec(e,e.return,h)}}break;case 6:if(hl(t,e),yl(e),4&r){if(null===e.stateNode)throw Error(a(162));o=e.stateNode,i=e.memoizedProps;try{o.nodeValue=i}catch(h){Ec(e,e.return,h)}}break;case 3:if(hl(t,e),yl(e),4&r&&null!==n&&n.memoizedState.isDehydrated)try{$t(t.containerInfo)}catch(h){Ec(e,e.return,h)}break;case 4:default:hl(t,e),yl(e);break;case 13:hl(t,e),yl(e),8192&(o=e.child).flags&&(i=null!==o.memoizedState,o.stateNode.isHidden=i,!i||null!==o.alternate&&null!==o.alternate.memoizedState||($l=Ke())),4&r&&ml(e);break;case 22:if(d=null!==n&&null!==n.memoizedState,1&e.mode?(Ks=(u=Ks)||d,hl(t,e),Ks=u):hl(t,e),yl(e),8192&r){if(u=null!==e.memoizedState,(e.stateNode.isHidden=u)&&!d&&0!=(1&e.mode))for(Js=e,d=e.child;null!==d;){for(p=Js=d;null!==Js;){switch(g=(f=Js).child,f.tag){case 0:case 11:case 14:case 15:rl(4,f,f.return);break;case 1:el(f,f.return);var m=f.stateNode;if("function"==typeof m.componentWillUnmount){r=f,n=f.return;try{t=r,m.props=t.memoizedProps,m.state=t.memoizedState,m.componentWillUnmount()}catch(h){Ec(r,n,h)}}break;case 5:el(f,f.return);break;case 22:if(null!==f.memoizedState){Sl(p);continue}}null!==g?(g.return=f,Js=g):Sl(p)}d=d.sibling}e:for(d=null,p=e;;){if(5===p.tag){if(null===d){d=p;try{o=p.stateNode,u?"function"==typeof(i=o.style).setProperty?i.setProperty("display","none","important"):i.display="none":(l=p.stateNode,s=null!=(c=p.memoizedProps.style)&&c.hasOwnProperty("display")?c.display:null,l.style.display=me("display",s))}catch(h){Ec(e,e.return,h)}}}else if(6===p.tag){if(null===d)try{p.stateNode.nodeValue=u?"":p.memoizedProps}catch(h){Ec(e,e.return,h)}}else if((22!==p.tag&&23!==p.tag||null===p.memoizedState||p===e)&&null!==p.child){p.child.return=p,p=p.child;continue}if(p===e)break e;for(;null===p.sibling;){if(null===p.return||p.return===e)break e;d===p&&(d=null),p=p.return}d===p&&(d=null),p.sibling.return=p.return,p=p.sibling}}break;case 19:hl(t,e),yl(e),4&r&&ml(e);case 21:}}function yl(e){var t=e.flags;if(2&t){try{e:{for(var n=e.return;null!==n;){if(sl(n)){var r=n;break e}n=n.return}throw Error(a(160))}switch(r.tag){case 5:var o=r.stateNode;32&r.flags&&(pe(o,""),r.flags&=-33),ul(e,ll(e),o);break;case 3:case 4:var i=r.stateNode.containerInfo;cl(e,ll(e),i);break;default:throw Error(a(161))}}catch(s){Ec(e,e.return,s)}e.flags&=-3}4096&t&&(e.flags&=-4097)}function vl(e,t,n){Js=e,wl(e,t,n)}function wl(e,t,n){for(var r=0!=(1&e.mode);null!==Js;){var o=Js,a=o.child;if(22===o.tag&&r){var i=null!==o.memoizedState||Ys;if(!i){var s=o.alternate,l=null!==s&&null!==s.memoizedState||Ks;s=Ys;var c=Ks;if(Ys=i,(Ks=l)&&!c)for(Js=o;null!==Js;)l=(i=Js).child,22===i.tag&&null!==i.memoizedState?_l(o):null!==l?(l.return=i,Js=l):_l(o);for(;null!==a;)Js=a,wl(a,t,n),a=a.sibling;Js=o,Ys=s,Ks=c}kl(e)}else 0!=(8772&o.subtreeFlags)&&null!==a?(a.return=o,Js=a):kl(e)}}function kl(e){for(;null!==Js;){var t=Js;if(0!=(8772&t.flags)){var n=t.alternate;try{if(0!=(8772&t.flags))switch(t.tag){case 0:case 11:case 15:Ks||ol(5,t);break;case 1:var r=t.stateNode;if(4&t.flags&&!Ks)if(null===n)r.componentDidMount();else{var o=t.elementType===t.type?n.memoizedProps:ba(t.type,n.memoizedProps);r.componentDidUpdate(o,n.memoizedState,r.__reactInternalSnapshotBeforeUpdate)}var i=t.updateQueue;null!==i&&Ba(t,i,r);break;case 3:var s=t.updateQueue;if(null!==s){if(n=null,null!==t.child)switch(t.child.tag){case 5:case 1:n=t.child.stateNode}Ba(t,s,n)}break;case 5:var l=t.stateNode;if(null===n&&4&t.flags){n=l;var c=t.memoizedProps;switch(t.type){case"button":case"input":case"select":case"textarea":c.autoFocus&&n.focus();break;case"img":c.src&&(n.src=c.src)}}break;case 6:case 4:case 12:case 19:case 17:case 21:case 22:case 23:case 25:break;case 13:if(null===t.memoizedState){var u=t.alternate;if(null!==u){var d=u.memoizedState;if(null!==d){var p=d.dehydrated;null!==p&&$t(p)}}}break;default:throw Error(a(163))}Ks||512&t.flags&&al(t)}catch(f){Ec(t,t.return,f)}}if(t===e){Js=null;break}if(null!==(n=t.sibling)){n.return=t.return,Js=n;break}Js=t.return}}function Sl(e){for(;null!==Js;){var t=Js;if(t===e){Js=null;break}var n=t.sibling;if(null!==n){n.return=t.return,Js=n;break}Js=t.return}}function _l(e){for(;null!==Js;){var t=Js;try{switch(t.tag){case 0:case 11:case 15:var n=t.return;try{ol(4,t)}catch(l){Ec(t,n,l)}break;case 1:var r=t.stateNode;if("function"==typeof r.componentDidMount){var o=t.return;try{r.componentDidMount()}catch(l){Ec(t,o,l)}}var a=t.return;try{al(t)}catch(l){Ec(t,a,l)}break;case 5:var i=t.return;try{al(t)}catch(l){Ec(t,i,l)}}}catch(l){Ec(t,t.return,l)}if(t===e){Js=null;break}var s=t.sibling;if(null!==s){s.return=t.return,Js=s;break}Js=t.return}}var xl,El=Math.ceil,Ol=w.ReactCurrentDispatcher,Pl=w.ReactCurrentOwner,jl=w.ReactCurrentBatchConfig,Cl=0,Tl=null,Il=null,Al=0,Nl=0,Ll=Eo(0),Rl=0,Dl=null,Fl=0,Ml=0,Bl=0,zl=null,Ul=null,$l=0,Hl=1/0,ql=null,Vl=!1,Ql=null,Zl=null,Wl=!1,Gl=null,Yl=0,Kl=0,Xl=null,Jl=-1,ec=0;function tc(){return 0!=(6&Cl)?Ke():-1!==Jl?Jl:Jl=Ke()}function nc(e){return 0==(1&e.mode)?1:0!=(2&Cl)&&0!==Al?Al&-Al:null!==ha.transition?(0===ec&&(ec=mt()),ec):0!==(e=vt)?e:e=void 0===(e=window.event)?16:Yt(e.type)}function rc(e,t,n,r){if(50<Kl)throw Kl=0,Xl=null,Error(a(185));bt(e,n,r),0!=(2&Cl)&&e===Tl||(e===Tl&&(0==(2&Cl)&&(Ml|=n),4===Rl&&lc(e,Al)),oc(e,r),1===n&&0===Cl&&0==(1&t.mode)&&(Hl=Ke()+500,zo&&Ho()))}function oc(e,t){var n=e.callbackNode;!function(e,t){for(var n=e.suspendedLanes,r=e.pingedLanes,o=e.expirationTimes,a=e.pendingLanes;0<a;){var i=31-it(a),s=1<<i,l=o[i];-1===l?0!=(s&n)&&0==(s&r)||(o[i]=ft(s,t)):l<=t&&(e.expiredLanes|=s),a&=~s}}(e,t);var r=pt(e,e===Tl?Al:0);if(0===r)null!==n&&We(n),e.callbackNode=null,e.callbackPriority=0;else if(t=r&-r,e.callbackPriority!==t){if(null!=n&&We(n),1===t)0===e.tag?function(e){zo=!0,$o(e)}(cc.bind(null,e)):$o(cc.bind(null,e)),io((function(){0==(6&Cl)&&Ho()})),n=null;else{switch(wt(r)){case 1:n=Je;break;case 4:n=et;break;case 16:default:n=tt;break;case 536870912:n=rt}n=Tc(n,ac.bind(null,e))}e.callbackPriority=t,e.callbackNode=n}}function ac(e,t){if(Jl=-1,ec=0,0!=(6&Cl))throw Error(a(327));var n=e.callbackNode;if(_c()&&e.callbackNode!==n)return null;var r=pt(e,e===Tl?Al:0);if(0===r)return null;if(0!=(30&r)||0!=(r&e.expiredLanes)||t)t=bc(e,r);else{t=r;var o=Cl;Cl|=2;var i=mc();for(Tl===e&&Al===t||(ql=null,Hl=Ke()+500,fc(e,t));;)try{vc();break}catch(l){gc(e,l)}Sa(),Ol.current=i,Cl=o,null!==Il?t=0:(Tl=null,Al=0,t=Rl)}if(0!==t){if(2===t&&(0!==(o=gt(e))&&(r=o,t=ic(e,o))),1===t)throw n=Dl,fc(e,0),lc(e,r),oc(e,Ke()),n;if(6===t)lc(e,r);else{if(o=e.current.alternate,0==(30&r)&&!function(e){for(var t=e;;){if(16384&t.flags){var n=t.updateQueue;if(null!==n&&null!==(n=n.stores))for(var r=0;r<n.length;r++){var o=n[r],a=o.getSnapshot;o=o.value;try{if(!sr(a(),o))return!1}catch(s){return!1}}}if(n=t.child,16384&t.subtreeFlags&&null!==n)n.return=t,t=n;else{if(t===e)break;for(;null===t.sibling;){if(null===t.return||t.return===e)return!0;t=t.return}t.sibling.return=t.return,t=t.sibling}}return!0}(o)&&(2===(t=bc(e,r))&&(0!==(i=gt(e))&&(r=i,t=ic(e,i))),1===t))throw n=Dl,fc(e,0),lc(e,r),oc(e,Ke()),n;switch(e.finishedWork=o,e.finishedLanes=r,t){case 0:case 1:throw Error(a(345));case 2:case 5:Sc(e,Ul,ql);break;case 3:if(lc(e,r),(130023424&r)===r&&10<(t=$l+500-Ke())){if(0!==pt(e,0))break;if(((o=e.suspendedLanes)&r)!==r){tc(),e.pingedLanes|=e.suspendedLanes&o;break}e.timeoutHandle=ro(Sc.bind(null,e,Ul,ql),t);break}Sc(e,Ul,ql);break;case 4:if(lc(e,r),(4194240&r)===r)break;for(t=e.eventTimes,o=-1;0<r;){var s=31-it(r);i=1<<s,(s=t[s])>o&&(o=s),r&=~i}if(r=o,10<(r=(120>(r=Ke()-r)?120:480>r?480:1080>r?1080:1920>r?1920:3e3>r?3e3:4320>r?4320:1960*El(r/1960))-r)){e.timeoutHandle=ro(Sc.bind(null,e,Ul,ql),r);break}Sc(e,Ul,ql);break;default:throw Error(a(329))}}}return oc(e,Ke()),e.callbackNode===n?ac.bind(null,e):null}function ic(e,t){var n=zl;return e.current.memoizedState.isDehydrated&&(fc(e,t).flags|=256),2!==(e=bc(e,t))&&(t=Ul,Ul=n,null!==t&&sc(t)),e}function sc(e){null===Ul?Ul=e:Ul.push.apply(Ul,e)}function lc(e,t){for(t&=~Bl,t&=~Ml,e.suspendedLanes|=t,e.pingedLanes&=~t,e=e.expirationTimes;0<t;){var n=31-it(t),r=1<<n;e[n]=-1,t&=~r}}function cc(e){if(0!=(6&Cl))throw Error(a(327));_c();var t=pt(e,0);if(0==(1&t))return oc(e,Ke()),null;var n=bc(e,t);if(0!==e.tag&&2===n){var r=gt(e);0!==r&&(t=r,n=ic(e,r))}if(1===n)throw n=Dl,fc(e,0),lc(e,t),oc(e,Ke()),n;if(6===n)throw Error(a(345));return e.finishedWork=e.current.alternate,e.finishedLanes=t,Sc(e,Ul,ql),oc(e,Ke()),null}function uc(e,t){var n=Cl;Cl|=1;try{return e(t)}finally{0===(Cl=n)&&(Hl=Ke()+500,zo&&Ho())}}function dc(e){null!==Gl&&0===Gl.tag&&0==(6&Cl)&&_c();var t=Cl;Cl|=1;var n=jl.transition,r=vt;try{if(jl.transition=null,vt=1,e)return e()}finally{vt=r,jl.transition=n,0==(6&(Cl=t))&&Ho()}}function pc(){Nl=Ll.current,Oo(Ll)}function fc(e,t){e.finishedWork=null,e.finishedLanes=0;var n=e.timeoutHandle;if(-1!==n&&(e.timeoutHandle=-1,oo(n)),null!==Il)for(n=Il.return;null!==n;){var r=n;switch(na(r),r.tag){case 1:null!=(r=r.type.childContextTypes)&&Lo();break;case 3:ai(),Oo(To),Oo(Co),di();break;case 5:si(r);break;case 4:ai();break;case 13:case 19:Oo(li);break;case 10:_a(r.type._context);break;case 22:case 23:pc()}n=n.return}if(Tl=e,Il=e=Lc(e.current,null),Al=Nl=t,Rl=0,Dl=null,Bl=Ml=Fl=0,Ul=zl=null,null!==Pa){for(t=0;t<Pa.length;t++)if(null!==(r=(n=Pa[t]).interleaved)){n.interleaved=null;var o=r.next,a=n.pending;if(null!==a){var i=a.next;a.next=o,r.next=i}n.pending=r}Pa=null}return e}function gc(e,t){for(;;){var n=Il;try{if(Sa(),pi.current=is,yi){for(var r=mi.memoizedState;null!==r;){var o=r.queue;null!==o&&(o.pending=null),r=r.next}yi=!1}if(gi=0,bi=hi=mi=null,vi=!1,wi=0,Pl.current=null,null===n||null===n.return){Rl=1,Dl=t,Il=null;break}e:{var i=e,s=n.return,l=n,c=t;if(t=Al,l.flags|=32768,null!==c&&"object"==typeof c&&"function"==typeof c.then){var u=c,d=l,p=d.tag;if(0==(1&d.mode)&&(0===p||11===p||15===p)){var f=d.alternate;f?(d.updateQueue=f.updateQueue,d.memoizedState=f.memoizedState,d.lanes=f.lanes):(d.updateQueue=null,d.memoizedState=null)}var g=bs(s);if(null!==g){g.flags&=-257,ys(g,s,l,0,t),1&g.mode&&hs(i,u,t),c=u;var m=(t=g).updateQueue;if(null===m){var h=new Set;h.add(c),t.updateQueue=h}else m.add(c);break e}if(0==(1&t)){hs(i,u,t),hc();break e}c=Error(a(426))}else if(aa&&1&l.mode){var b=bs(s);if(null!==b){0==(65536&b.flags)&&(b.flags|=256),ys(b,s,l,0,t),ma(us(c,l));break e}}i=c=us(c,l),4!==Rl&&(Rl=2),null===zl?zl=[i]:zl.push(i),i=s;do{switch(i.tag){case 3:i.flags|=65536,t&=-t,i.lanes|=t,Fa(i,gs(0,c,t));break e;case 1:l=c;var y=i.type,v=i.stateNode;if(0==(128&i.flags)&&("function"==typeof y.getDerivedStateFromError||null!==v&&"function"==typeof v.componentDidCatch&&(null===Zl||!Zl.has(v)))){i.flags|=65536,t&=-t,i.lanes|=t,Fa(i,ms(i,l,t));break e}}i=i.return}while(null!==i)}kc(n)}catch(w){t=w,Il===n&&null!==n&&(Il=n=n.return);continue}break}}function mc(){var e=Ol.current;return Ol.current=is,null===e?is:e}function hc(){0!==Rl&&3!==Rl&&2!==Rl||(Rl=4),null===Tl||0==(268435455&Fl)&&0==(268435455&Ml)||lc(Tl,Al)}function bc(e,t){var n=Cl;Cl|=2;var r=mc();for(Tl===e&&Al===t||(ql=null,fc(e,t));;)try{yc();break}catch(o){gc(e,o)}if(Sa(),Cl=n,Ol.current=r,null!==Il)throw Error(a(261));return Tl=null,Al=0,Rl}function yc(){for(;null!==Il;)wc(Il)}function vc(){for(;null!==Il&&!Ge();)wc(Il)}function wc(e){var t=xl(e.alternate,e,Nl);e.memoizedProps=e.pendingProps,null===t?kc(e):Il=t,Pl.current=null}function kc(e){var t=e;do{var n=t.alternate;if(e=t.return,0==(32768&t.flags)){if(null!==(n=Ws(n,t,Nl)))return void(Il=n)}else{if(null!==(n=Gs(n,t)))return n.flags&=32767,void(Il=n);if(null===e)return Rl=6,void(Il=null);e.flags|=32768,e.subtreeFlags=0,e.deletions=null}if(null!==(t=t.sibling))return void(Il=t);Il=t=e}while(null!==t);0===Rl&&(Rl=5)}function Sc(e,t,n){var r=vt,o=jl.transition;try{jl.transition=null,vt=1,function(e,t,n,r){do{_c()}while(null!==Gl);if(0!=(6&Cl))throw Error(a(327));n=e.finishedWork;var o=e.finishedLanes;if(null===n)return null;if(e.finishedWork=null,e.finishedLanes=0,n===e.current)throw Error(a(177));e.callbackNode=null,e.callbackPriority=0;var i=n.lanes|n.childLanes;if(function(e,t){var n=e.pendingLanes&~t;e.pendingLanes=t,e.suspendedLanes=0,e.pingedLanes=0,e.expiredLanes&=t,e.mutableReadLanes&=t,e.entangledLanes&=t,t=e.entanglements;var r=e.eventTimes;for(e=e.expirationTimes;0<n;){var o=31-it(n),a=1<<o;t[o]=0,r[o]=-1,e[o]=-1,n&=~a}}(e,i),e===Tl&&(Il=Tl=null,Al=0),0==(2064&n.subtreeFlags)&&0==(2064&n.flags)||Wl||(Wl=!0,Tc(tt,(function(){return _c(),null}))),i=0!=(15990&n.flags),0!=(15990&n.subtreeFlags)||i){i=jl.transition,jl.transition=null;var s=vt;vt=1;var l=Cl;Cl|=4,Pl.current=null,function(e,t){if(eo=qt,fr(e=pr())){if("selectionStart"in e)var n={start:e.selectionStart,end:e.selectionEnd};else e:{var r=(n=(n=e.ownerDocument)&&n.defaultView||window).getSelection&&n.getSelection();if(r&&0!==r.rangeCount){n=r.anchorNode;var o=r.anchorOffset,i=r.focusNode;r=r.focusOffset;try{n.nodeType,i.nodeType}catch(k){n=null;break e}var s=0,l=-1,c=-1,u=0,d=0,p=e,f=null;t:for(;;){for(var g;p!==n||0!==o&&3!==p.nodeType||(l=s+o),p!==i||0!==r&&3!==p.nodeType||(c=s+r),3===p.nodeType&&(s+=p.nodeValue.length),null!==(g=p.firstChild);)f=p,p=g;for(;;){if(p===e)break t;if(f===n&&++u===o&&(l=s),f===i&&++d===r&&(c=s),null!==(g=p.nextSibling))break;f=(p=f).parentNode}p=g}n=-1===l||-1===c?null:{start:l,end:c}}else n=null}n=n||{start:0,end:0}}else n=null;for(to={focusedElem:e,selectionRange:n},qt=!1,Js=t;null!==Js;)if(e=(t=Js).child,0!=(1028&t.subtreeFlags)&&null!==e)e.return=t,Js=e;else for(;null!==Js;){t=Js;try{var m=t.alternate;if(0!=(1024&t.flags))switch(t.tag){case 0:case 11:case 15:case 5:case 6:case 4:case 17:break;case 1:if(null!==m){var h=m.memoizedProps,b=m.memoizedState,y=t.stateNode,v=y.getSnapshotBeforeUpdate(t.elementType===t.type?h:ba(t.type,h),b);y.__reactInternalSnapshotBeforeUpdate=v}break;case 3:var w=t.stateNode.containerInfo;1===w.nodeType?w.textContent="":9===w.nodeType&&w.documentElement&&w.removeChild(w.documentElement);break;default:throw Error(a(163))}}catch(k){Ec(t,t.return,k)}if(null!==(e=t.sibling)){e.return=t.return,Js=e;break}Js=t.return}m=nl,nl=!1}(e,n),bl(n,e),gr(to),qt=!!eo,to=eo=null,e.current=n,vl(n,e,o),Ye(),Cl=l,vt=s,jl.transition=i}else e.current=n;if(Wl&&(Wl=!1,Gl=e,Yl=o),i=e.pendingLanes,0===i&&(Zl=null),function(e){if(at&&"function"==typeof at.onCommitFiberRoot)try{at.onCommitFiberRoot(ot,e,void 0,128==(128&e.current.flags))}catch(t){}}(n.stateNode),oc(e,Ke()),null!==t)for(r=e.onRecoverableError,n=0;n<t.length;n++)o=t[n],r(o.value,{componentStack:o.stack,digest:o.digest});if(Vl)throw Vl=!1,e=Ql,Ql=null,e;0!=(1&Yl)&&0!==e.tag&&_c(),i=e.pendingLanes,0!=(1&i)?e===Xl?Kl++:(Kl=0,Xl=e):Kl=0,Ho()}(e,t,n,r)}finally{jl.transition=o,vt=r}return null}function _c(){if(null!==Gl){var e=wt(Yl),t=jl.transition,n=vt;try{if(jl.transition=null,vt=16>e?16:e,null===Gl)var r=!1;else{if(e=Gl,Gl=null,Yl=0,0!=(6&Cl))throw Error(a(331));var o=Cl;for(Cl|=4,Js=e.current;null!==Js;){var i=Js,s=i.child;if(0!=(16&Js.flags)){var l=i.deletions;if(null!==l){for(var c=0;c<l.length;c++){var u=l[c];for(Js=u;null!==Js;){var d=Js;switch(d.tag){case 0:case 11:case 15:rl(8,d,i)}var p=d.child;if(null!==p)p.return=d,Js=p;else for(;null!==Js;){var f=(d=Js).sibling,g=d.return;if(il(d),d===u){Js=null;break}if(null!==f){f.return=g,Js=f;break}Js=g}}}var m=i.alternate;if(null!==m){var h=m.child;if(null!==h){m.child=null;do{var b=h.sibling;h.sibling=null,h=b}while(null!==h)}}Js=i}}if(0!=(2064&i.subtreeFlags)&&null!==s)s.return=i,Js=s;else e:for(;null!==Js;){if(0!=(2048&(i=Js).flags))switch(i.tag){case 0:case 11:case 15:rl(9,i,i.return)}var y=i.sibling;if(null!==y){y.return=i.return,Js=y;break e}Js=i.return}}var v=e.current;for(Js=v;null!==Js;){var w=(s=Js).child;if(0!=(2064&s.subtreeFlags)&&null!==w)w.return=s,Js=w;else e:for(s=v;null!==Js;){if(0!=(2048&(l=Js).flags))try{switch(l.tag){case 0:case 11:case 15:ol(9,l)}}catch(S){Ec(l,l.return,S)}if(l===s){Js=null;break e}var k=l.sibling;if(null!==k){k.return=l.return,Js=k;break e}Js=l.return}}if(Cl=o,Ho(),at&&"function"==typeof at.onPostCommitFiberRoot)try{at.onPostCommitFiberRoot(ot,e)}catch(S){}r=!0}return r}finally{vt=n,jl.transition=t}}return!1}function xc(e,t,n){e=Ra(e,t=gs(0,t=us(n,t),1),1),t=tc(),null!==e&&(bt(e,1,t),oc(e,t))}function Ec(e,t,n){if(3===e.tag)xc(e,e,n);else for(;null!==t;){if(3===t.tag){xc(t,e,n);break}if(1===t.tag){var r=t.stateNode;if("function"==typeof t.type.getDerivedStateFromError||"function"==typeof r.componentDidCatch&&(null===Zl||!Zl.has(r))){t=Ra(t,e=ms(t,e=us(n,e),1),1),e=tc(),null!==t&&(bt(t,1,e),oc(t,e));break}}t=t.return}}function Oc(e,t,n){var r=e.pingCache;null!==r&&r.delete(t),t=tc(),e.pingedLanes|=e.suspendedLanes&n,Tl===e&&(Al&n)===n&&(4===Rl||3===Rl&&(130023424&Al)===Al&&500>Ke()-$l?fc(e,0):Bl|=n),oc(e,t)}function Pc(e,t){0===t&&(0==(1&e.mode)?t=1:(t=ut,0==(130023424&(ut<<=1))&&(ut=4194304)));var n=tc();null!==(e=Ta(e,t))&&(bt(e,t,n),oc(e,n))}function jc(e){var t=e.memoizedState,n=0;null!==t&&(n=t.retryLane),Pc(e,n)}function Cc(e,t){var n=0;switch(e.tag){case 13:var r=e.stateNode,o=e.memoizedState;null!==o&&(n=o.retryLane);break;case 19:r=e.stateNode;break;default:throw Error(a(314))}null!==r&&r.delete(t),Pc(e,n)}function Tc(e,t){return Ze(e,t)}function Ic(e,t,n,r){this.tag=e,this.key=n,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=t,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=r,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function Ac(e,t,n,r){return new Ic(e,t,n,r)}function Nc(e){return!(!(e=e.prototype)||!e.isReactComponent)}function Lc(e,t){var n=e.alternate;return null===n?((n=Ac(e.tag,t,e.key,e.mode)).elementType=e.elementType,n.type=e.type,n.stateNode=e.stateNode,n.alternate=e,e.alternate=n):(n.pendingProps=t,n.type=e.type,n.flags=0,n.subtreeFlags=0,n.deletions=null),n.flags=14680064&e.flags,n.childLanes=e.childLanes,n.lanes=e.lanes,n.child=e.child,n.memoizedProps=e.memoizedProps,n.memoizedState=e.memoizedState,n.updateQueue=e.updateQueue,t=e.dependencies,n.dependencies=null===t?null:{lanes:t.lanes,firstContext:t.firstContext},n.sibling=e.sibling,n.index=e.index,n.ref=e.ref,n}function Rc(e,t,n,r,o,i){var s=2;if(r=e,"function"==typeof e)Nc(e)&&(s=1);else if("string"==typeof e)s=5;else e:switch(e){case _:return Dc(n.children,o,i,t);case x:s=8,o|=8;break;case E:return(e=Ac(12,n,t,2|o)).elementType=E,e.lanes=i,e;case C:return(e=Ac(13,n,t,o)).elementType=C,e.lanes=i,e;case T:return(e=Ac(19,n,t,o)).elementType=T,e.lanes=i,e;case N:return Fc(n,o,i,t);default:if("object"==typeof e&&null!==e)switch(e.$$typeof){case O:s=10;break e;case P:s=9;break e;case j:s=11;break e;case I:s=14;break e;case A:s=16,r=null;break e}throw Error(a(130,null==e?e:typeof e,""))}return(t=Ac(s,n,t,o)).elementType=e,t.type=r,t.lanes=i,t}function Dc(e,t,n,r){return(e=Ac(7,e,r,t)).lanes=n,e}function Fc(e,t,n,r){return(e=Ac(22,e,r,t)).elementType=N,e.lanes=n,e.stateNode={isHidden:!1},e}function Mc(e,t,n){return(e=Ac(6,e,null,t)).lanes=n,e}function Bc(e,t,n){return(t=Ac(4,null!==e.children?e.children:[],e.key,t)).lanes=n,t.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},t}function zc(e,t,n,r,o){this.tag=t,this.containerInfo=e,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.callbackNode=this.pendingContext=this.context=null,this.callbackPriority=0,this.eventTimes=ht(0),this.expirationTimes=ht(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=ht(0),this.identifierPrefix=r,this.onRecoverableError=o,this.mutableSourceEagerHydrationData=null}function Uc(e,t,n,r,o,a,i,s,l){return e=new zc(e,t,n,s,l),1===t?(t=1,!0===a&&(t|=8)):t=0,a=Ac(3,null,null,t),e.current=a,a.stateNode=e,a.memoizedState={element:r,isDehydrated:n,cache:null,transitions:null,pendingSuspenseBoundaries:null},Aa(a),e}function $c(e){if(!e)return jo;e:{if($e(e=e._reactInternals)!==e||1!==e.tag)throw Error(a(170));var t=e;do{switch(t.tag){case 3:t=t.stateNode.context;break e;case 1:if(No(t.type)){t=t.stateNode.__reactInternalMemoizedMergedChildContext;break e}}t=t.return}while(null!==t);throw Error(a(171))}if(1===e.tag){var n=e.type;if(No(n))return Do(e,n,t)}return t}function Hc(e,t,n,r,o,a,i,s,l){return(e=Uc(n,r,!0,e,0,a,0,s,l)).context=$c(null),n=e.current,(a=La(r=tc(),o=nc(n))).callback=null!=t?t:null,Ra(n,a,o),e.current.lanes=o,bt(e,o,r),oc(e,r),e}function qc(e,t,n,r){var o=t.current,a=tc(),i=nc(o);return n=$c(n),null===t.context?t.context=n:t.pendingContext=n,(t=La(a,i)).payload={element:e},null!==(r=void 0===r?null:r)&&(t.callback=r),null!==(e=Ra(o,t,i))&&(rc(e,o,i,a),Da(e,o,i)),i}function Vc(e){return(e=e.current).child?(e.child.tag,e.child.stateNode):null}function Qc(e,t){if(null!==(e=e.memoizedState)&&null!==e.dehydrated){var n=e.retryLane;e.retryLane=0!==n&&n<t?n:t}}function Zc(e,t){Qc(e,t),(e=e.alternate)&&Qc(e,t)}xl=function(e,t,n){if(null!==e)if(e.memoizedProps!==t.pendingProps||To.current)ws=!0;else{if(0==(e.lanes&n)&&0==(128&t.flags))return ws=!1,function(e,t,n){switch(t.tag){case 3:Ts(t),ga();break;case 5:ii(t);break;case 1:No(t.type)&&Fo(t);break;case 4:oi(t,t.stateNode.containerInfo);break;case 10:var r=t.type._context,o=t.memoizedProps.value;Po(ya,r._currentValue),r._currentValue=o;break;case 13:if(null!==(r=t.memoizedState))return null!==r.dehydrated?(Po(li,1&li.current),t.flags|=128,null):0!=(n&t.child.childLanes)?Ms(e,t,n):(Po(li,1&li.current),null!==(e=Vs(e,t,n))?e.sibling:null);Po(li,1&li.current);break;case 19:if(r=0!=(n&t.childLanes),0!=(128&e.flags)){if(r)return Hs(e,t,n);t.flags|=128}if(null!==(o=t.memoizedState)&&(o.rendering=null,o.tail=null,o.lastEffect=null),Po(li,li.current),r)break;return null;case 22:case 23:return t.lanes=0,Es(e,t,n)}return Vs(e,t,n)}(e,t,n);ws=0!=(131072&e.flags)}else ws=!1,aa&&0!=(1048576&t.flags)&&ea(t,Zo,t.index);switch(t.lanes=0,t.tag){case 2:var r=t.type;qs(e,t),e=t.pendingProps;var o=Ao(t,Co.current);Ea(t,n),o=xi(null,t,r,e,o,n);var i=Ei();return t.flags|=1,"object"==typeof o&&null!==o&&"function"==typeof o.render&&void 0===o.$$typeof?(t.tag=1,t.memoizedState=null,t.updateQueue=null,No(r)?(i=!0,Fo(t)):i=!1,t.memoizedState=null!==o.state&&void 0!==o.state?o.state:null,Aa(t),o.updater=$a,t.stateNode=o,o._reactInternals=t,Qa(t,r,e,n),t=Cs(null,t,r,!0,i,n)):(t.tag=0,aa&&i&&ta(t),ks(null,t,o,n),t=t.child),t;case 16:r=t.elementType;e:{switch(qs(e,t),e=t.pendingProps,r=(o=r._init)(r._payload),t.type=r,o=t.tag=function(e){if("function"==typeof e)return Nc(e)?1:0;if(null!=e){if((e=e.$$typeof)===j)return 11;if(e===I)return 14}return 2}(r),e=ba(r,e),o){case 0:t=Ps(null,t,r,e,n);break e;case 1:t=js(null,t,r,e,n);break e;case 11:t=Ss(null,t,r,e,n);break e;case 14:t=_s(null,t,r,ba(r.type,e),n);break e}throw Error(a(306,r,""))}return t;case 0:return r=t.type,o=t.pendingProps,Ps(e,t,r,o=t.elementType===r?o:ba(r,o),n);case 1:return r=t.type,o=t.pendingProps,js(e,t,r,o=t.elementType===r?o:ba(r,o),n);case 3:e:{if(Ts(t),null===e)throw Error(a(387));r=t.pendingProps,o=(i=t.memoizedState).element,Na(e,t),Ma(t,r,null,n);var s=t.memoizedState;if(r=s.element,i.isDehydrated){if(i={element:r,isDehydrated:!1,cache:s.cache,pendingSuspenseBoundaries:s.pendingSuspenseBoundaries,transitions:s.transitions},t.updateQueue.baseState=i,t.memoizedState=i,256&t.flags){t=Is(e,t,r,n,o=us(Error(a(423)),t));break e}if(r!==o){t=Is(e,t,r,n,o=us(Error(a(424)),t));break e}for(oa=co(t.stateNode.containerInfo.firstChild),ra=t,aa=!0,ia=null,n=Xa(t,null,r,n),t.child=n;n;)n.flags=-3&n.flags|4096,n=n.sibling}else{if(ga(),r===o){t=Vs(e,t,n);break e}ks(e,t,r,n)}t=t.child}return t;case 5:return ii(t),null===e&&ua(t),r=t.type,o=t.pendingProps,i=null!==e?e.memoizedProps:null,s=o.children,no(r,o)?s=null:null!==i&&no(r,i)&&(t.flags|=32),Os(e,t),ks(e,t,s,n),t.child;case 6:return null===e&&ua(t),null;case 13:return Ms(e,t,n);case 4:return oi(t,t.stateNode.containerInfo),r=t.pendingProps,null===e?t.child=Ka(t,null,r,n):ks(e,t,r,n),t.child;case 11:return r=t.type,o=t.pendingProps,Ss(e,t,r,o=t.elementType===r?o:ba(r,o),n);case 7:return ks(e,t,t.pendingProps,n),t.child;case 8:case 12:return ks(e,t,t.pendingProps.children,n),t.child;case 10:e:{if(r=t.type._context,o=t.pendingProps,i=t.memoizedProps,s=o.value,Po(ya,r._currentValue),r._currentValue=s,null!==i)if(sr(i.value,s)){if(i.children===o.children&&!To.current){t=Vs(e,t,n);break e}}else for(null!==(i=t.child)&&(i.return=t);null!==i;){var l=i.dependencies;if(null!==l){s=i.child;for(var c=l.firstContext;null!==c;){if(c.context===r){if(1===i.tag){(c=La(-1,n&-n)).tag=2;var u=i.updateQueue;if(null!==u){var d=(u=u.shared).pending;null===d?c.next=c:(c.next=d.next,d.next=c),u.pending=c}}i.lanes|=n,null!==(c=i.alternate)&&(c.lanes|=n),xa(i.return,n,t),l.lanes|=n;break}c=c.next}}else if(10===i.tag)s=i.type===t.type?null:i.child;else if(18===i.tag){if(null===(s=i.return))throw Error(a(341));s.lanes|=n,null!==(l=s.alternate)&&(l.lanes|=n),xa(s,n,t),s=i.sibling}else s=i.child;if(null!==s)s.return=i;else for(s=i;null!==s;){if(s===t){s=null;break}if(null!==(i=s.sibling)){i.return=s.return,s=i;break}s=s.return}i=s}ks(e,t,o.children,n),t=t.child}return t;case 9:return o=t.type,r=t.pendingProps.children,Ea(t,n),r=r(o=Oa(o)),t.flags|=1,ks(e,t,r,n),t.child;case 14:return o=ba(r=t.type,t.pendingProps),_s(e,t,r,o=ba(r.type,o),n);case 15:return xs(e,t,t.type,t.pendingProps,n);case 17:return r=t.type,o=t.pendingProps,o=t.elementType===r?o:ba(r,o),qs(e,t),t.tag=1,No(r)?(e=!0,Fo(t)):e=!1,Ea(t,n),qa(t,r,o),Qa(t,r,o,n),Cs(null,t,r,!0,e,n);case 19:return Hs(e,t,n);case 22:return Es(e,t,n)}throw Error(a(156,t.tag))};var Wc="function"==typeof reportError?reportError:function(e){console.error(e)};function Gc(e){this._internalRoot=e}function Yc(e){this._internalRoot=e}function Kc(e){return!(!e||1!==e.nodeType&&9!==e.nodeType&&11!==e.nodeType)}function Xc(e){return!(!e||1!==e.nodeType&&9!==e.nodeType&&11!==e.nodeType&&(8!==e.nodeType||" react-mount-point-unstable "!==e.nodeValue))}function Jc(){}function eu(e,t,n,r,o){var a=n._reactRootContainer;if(a){var i=a;if("function"==typeof o){var s=o;o=function(){var e=Vc(i);s.call(e)}}qc(t,i,e,o)}else i=function(e,t,n,r,o){if(o){if("function"==typeof r){var a=r;r=function(){var e=Vc(i);a.call(e)}}var i=Hc(t,r,e,0,null,!1,0,"",Jc);return e._reactRootContainer=i,e[mo]=i.current,$r(8===e.nodeType?e.parentNode:e),dc(),i}for(;o=e.lastChild;)e.removeChild(o);if("function"==typeof r){var s=r;r=function(){var e=Vc(l);s.call(e)}}var l=Uc(e,0,!1,null,0,!1,0,"",Jc);return e._reactRootContainer=l,e[mo]=l.current,$r(8===e.nodeType?e.parentNode:e),dc((function(){qc(t,l,n,r)})),l}(n,t,e,o,r);return Vc(i)}Yc.prototype.render=Gc.prototype.render=function(e){var t=this._internalRoot;if(null===t)throw Error(a(409));qc(e,t,null,null)},Yc.prototype.unmount=Gc.prototype.unmount=function(){var e=this._internalRoot;if(null!==e){this._internalRoot=null;var t=e.containerInfo;dc((function(){qc(null,e,null,null)})),t[mo]=null}},Yc.prototype.unstable_scheduleHydration=function(e){if(e){var t=xt();e={blockedOn:null,target:e,priority:t};for(var n=0;n<Nt.length&&0!==t&&t<Nt[n].priority;n++);Nt.splice(n,0,e),0===n&&Ft(e)}},kt=function(e){switch(e.tag){case 3:var t=e.stateNode;if(t.current.memoizedState.isDehydrated){var n=dt(t.pendingLanes);0!==n&&(yt(t,1|n),oc(t,Ke()),0==(6&Cl)&&(Hl=Ke()+500,Ho()))}break;case 13:dc((function(){var t=Ta(e,1);if(null!==t){var n=tc();rc(t,e,1,n)}})),Zc(e,1)}},St=function(e){if(13===e.tag){var t=Ta(e,134217728);if(null!==t)rc(t,e,134217728,tc());Zc(e,134217728)}},_t=function(e){if(13===e.tag){var t=nc(e),n=Ta(e,t);if(null!==n)rc(n,e,t,tc());Zc(e,t)}},xt=function(){return vt},Et=function(e,t){var n=vt;try{return vt=e,t()}finally{vt=n}},Se=function(e,t,n){switch(t){case"input":if(X(e,n),t=n.name,"radio"===n.type&&null!=t){for(n=e;n.parentNode;)n=n.parentNode;for(n=n.querySelectorAll("input[name="+JSON.stringify(""+t)+'][type="radio"]'),t=0;t<n.length;t++){var r=n[t];if(r!==e&&r.form===e.form){var o=So(r);if(!o)throw Error(a(90));Z(r),X(r,o)}}}break;case"textarea":ae(e,n);break;case"select":null!=(t=n.value)&&ne(e,!!n.multiple,t,!1)}},je=uc,Ce=dc;var tu={usingClientEntryPoint:!1,Events:[wo,ko,So,Oe,Pe,uc]},nu={findFiberByHostInstance:vo,bundleType:0,version:"18.2.0",rendererPackageName:"react-dom"},ru={bundleType:nu.bundleType,version:nu.version,rendererPackageName:nu.rendererPackageName,rendererConfig:nu.rendererConfig,overrideHookState:null,overrideHookStateDeletePath:null,overrideHookStateRenamePath:null,overrideProps:null,overridePropsDeletePath:null,overridePropsRenamePath:null,setErrorHandler:null,setSuspenseHandler:null,scheduleUpdate:null,currentDispatcherRef:w.ReactCurrentDispatcher,findHostInstanceByFiber:function(e){return null===(e=Ve(e))?null:e.stateNode},findFiberByHostInstance:nu.findFiberByHostInstance||function(){return null},findHostInstancesForRefresh:null,scheduleRefresh:null,scheduleRoot:null,setRefreshHandler:null,getCurrentFiber:null,reconcilerVersion:"18.2.0-next-9e3b772b8-20220608"};if("undefined"!=typeof __REACT_DEVTOOLS_GLOBAL_HOOK__){var ou=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(!ou.isDisabled&&ou.supportsFiber)try{ot=ou.inject(ru),at=ou}catch(ue){}}t.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=tu,t.createPortal=function(e,t){var n=2<arguments.length&&void 0!==arguments[2]?arguments[2]:null;if(!Kc(t))throw Error(a(200));return function(e,t,n){var r=3<arguments.length&&void 0!==arguments[3]?arguments[3]:null;return{$$typeof:S,key:null==r?null:""+r,children:e,containerInfo:t,implementation:n}}(e,t,null,n)},t.createRoot=function(e,t){if(!Kc(e))throw Error(a(299));var n=!1,r="",o=Wc;return null!=t&&(!0===t.unstable_strictMode&&(n=!0),void 0!==t.identifierPrefix&&(r=t.identifierPrefix),void 0!==t.onRecoverableError&&(o=t.onRecoverableError)),t=Uc(e,1,!1,null,0,n,0,r,o),e[mo]=t.current,$r(8===e.nodeType?e.parentNode:e),new Gc(t)},t.findDOMNode=function(e){if(null==e)return null;if(1===e.nodeType)return e;var t=e._reactInternals;if(void 0===t){if("function"==typeof e.render)throw Error(a(188));throw e=Object.keys(e).join(","),Error(a(268,e))}return e=null===(e=Ve(t))?null:e.stateNode},t.flushSync=function(e){return dc(e)},t.hydrate=function(e,t,n){if(!Xc(t))throw Error(a(200));return eu(null,e,t,!0,n)},t.hydrateRoot=function(e,t,n){if(!Kc(e))throw Error(a(405));var r=null!=n&&n.hydratedSources||null,o=!1,i="",s=Wc;if(null!=n&&(!0===n.unstable_strictMode&&(o=!0),void 0!==n.identifierPrefix&&(i=n.identifierPrefix),void 0!==n.onRecoverableError&&(s=n.onRecoverableError)),t=Hc(t,null,e,1,null!=n?n:null,o,0,i,s),e[mo]=t.current,$r(e),r)for(e=0;e<r.length;e++)o=(o=(n=r[e])._getVersion)(n._source),null==t.mutableSourceEagerHydrationData?t.mutableSourceEagerHydrationData=[n,o]:t.mutableSourceEagerHydrationData.push(n,o);return new Yc(t)},t.render=function(e,t,n){if(!Xc(t))throw Error(a(200));return eu(null,e,t,!1,n)},t.unmountComponentAtNode=function(e){if(!Xc(e))throw Error(a(40));return!!e._reactRootContainer&&(dc((function(){eu(null,null,e,!1,(function(){e._reactRootContainer=null,e[mo]=null}))})),!0)},t.unstable_batchedUpdates=uc,t.unstable_renderSubtreeIntoContainer=function(e,t,n,r){if(!Xc(n))throw Error(a(200));if(null==e||void 0===e._reactInternals)throw Error(a(38));return eu(e,t,n,!1,r)},t.version="18.2.0-next-9e3b772b8-20220608"},20745:(e,t,n)=>{"use strict";var r=n(73935);t.createRoot=r.createRoot,t.hydrateRoot=r.hydrateRoot},73935:(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(64448)},69590:e=>{var t="undefined"!=typeof Element,n="function"==typeof Map,r="function"==typeof Set,o="function"==typeof ArrayBuffer&&!!ArrayBuffer.isView;function a(e,i){if(e===i)return!0;if(e&&i&&"object"==typeof e&&"object"==typeof i){if(e.constructor!==i.constructor)return!1;var s,l,c,u;if(Array.isArray(e)){if((s=e.length)!=i.length)return!1;for(l=s;0!=l--;)if(!a(e[l],i[l]))return!1;return!0}if(n&&e instanceof Map&&i instanceof Map){if(e.size!==i.size)return!1;for(u=e.entries();!(l=u.next()).done;)if(!i.has(l.value[0]))return!1;for(u=e.entries();!(l=u.next()).done;)if(!a(l.value[1],i.get(l.value[0])))return!1;return!0}if(r&&e instanceof Set&&i instanceof Set){if(e.size!==i.size)return!1;for(u=e.entries();!(l=u.next()).done;)if(!i.has(l.value[0]))return!1;return!0}if(o&&ArrayBuffer.isView(e)&&ArrayBuffer.isView(i)){if((s=e.length)!=i.length)return!1;for(l=s;0!=l--;)if(e[l]!==i[l])return!1;return!0}if(e.constructor===RegExp)return e.source===i.source&&e.flags===i.flags;if(e.valueOf!==Object.prototype.valueOf&&"function"==typeof e.valueOf&&"function"==typeof i.valueOf)return e.valueOf()===i.valueOf();if(e.toString!==Object.prototype.toString&&"function"==typeof e.toString&&"function"==typeof i.toString)return e.toString()===i.toString();if((s=(c=Object.keys(e)).length)!==Object.keys(i).length)return!1;for(l=s;0!=l--;)if(!Object.prototype.hasOwnProperty.call(i,c[l]))return!1;if(t&&e instanceof Element)return!1;for(l=s;0!=l--;)if(("_owner"!==c[l]&&"__v"!==c[l]&&"__o"!==c[l]||!e.$$typeof)&&!a(e[c[l]],i[c[l]]))return!1;return!0}return e!=e&&i!=i}e.exports=function(e,t){try{return a(e,t)}catch(n){if((n.message||"").match(/stack|recursion/i))return console.warn("react-fast-compare cannot handle circular refs"),!1;throw n}}},70405:(e,t,n)=>{"use strict";n.d(t,{B6:()=>V,ql:()=>J});var r=n(67294),o=n(45697),a=n.n(o),i=n(69590),s=n.n(i),l=n(41143),c=n.n(l),u=n(96774),d=n.n(u);function p(){return p=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},p.apply(this,arguments)}function f(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,g(e,t)}function g(e,t){return g=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},g(e,t)}function m(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)t.indexOf(n=a[r])>=0||(o[n]=e[n]);return o}var h={BASE:"base",BODY:"body",HEAD:"head",HTML:"html",LINK:"link",META:"meta",NOSCRIPT:"noscript",SCRIPT:"script",STYLE:"style",TITLE:"title",FRAGMENT:"Symbol(react.fragment)"},b={rel:["amphtml","canonical","alternate"]},y={type:["application/ld+json"]},v={charset:"",name:["robots","description"],property:["og:type","og:title","og:url","og:image","og:image:alt","og:description","twitter:url","twitter:title","twitter:description","twitter:image","twitter:image:alt","twitter:card","twitter:site"]},w=Object.keys(h).map((function(e){return h[e]})),k={accesskey:"accessKey",charset:"charSet",class:"className",contenteditable:"contentEditable",contextmenu:"contextMenu","http-equiv":"httpEquiv",itemprop:"itemProp",tabindex:"tabIndex"},S=Object.keys(k).reduce((function(e,t){return e[k[t]]=t,e}),{}),_=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=_(e,h.TITLE),n=_(e,"titleTemplate");if(Array.isArray(t)&&(t=t.join("")),n&&t)return n.replace(/%s/g,(function(){return t}));var r=_(e,"defaultTitle");return t||r||void 0},E=function(e){return _(e,"onChangeClientState")||function(){}},O=function(e,t){return t.filter((function(t){return void 0!==t[e]})).map((function(t){return t[e]})).reduce((function(e,t){return p({},e,t)}),{})},P=function(e,t){return t.filter((function(e){return void 0!==e[h.BASE]})).map((function(e){return e[h.BASE]})).reverse().reduce((function(t,n){if(!t.length)for(var r=Object.keys(n),o=0;o<r.length;o+=1){var a=r[o].toLowerCase();if(-1!==e.indexOf(a)&&n[a])return t.concat(n)}return t}),[])},j=function(e,t,n){var r={};return n.filter((function(t){return!!Array.isArray(t[e])||(void 0!==t[e]&&console&&"function"==typeof console.warn&&console.warn("Helmet: "+e+' should be of type "Array". Instead found type "'+typeof t[e]+'"'),!1)})).map((function(t){return t[e]})).reverse().reduce((function(e,n){var o={};n.filter((function(e){for(var n,a=Object.keys(e),i=0;i<a.length;i+=1){var s=a[i],l=s.toLowerCase();-1===t.indexOf(l)||"rel"===n&&"canonical"===e[n].toLowerCase()||"rel"===l&&"stylesheet"===e[l].toLowerCase()||(n=l),-1===t.indexOf(s)||"innerHTML"!==s&&"cssText"!==s&&"itemprop"!==s||(n=s)}if(!n||!e[n])return!1;var c=e[n].toLowerCase();return r[n]||(r[n]={}),o[n]||(o[n]={}),!r[n][c]&&(o[n][c]=!0,!0)})).reverse().forEach((function(t){return e.push(t)}));for(var a=Object.keys(o),i=0;i<a.length;i+=1){var s=a[i],l=p({},r[s],o[s]);r[s]=l}return e}),[]).reverse()},C=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},T=function(e){return Array.isArray(e)?e.join(""):e},I=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}},A=function(e,t){var n;return p({},e,((n={})[t]=void 0,n))},N=[h.NOSCRIPT,h.SCRIPT,h.STYLE],L=function(e,t){return void 0===t&&(t=!0),!1===t?String(e):String(e).replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")},R=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)},F=function(e,t){return t.map((function(t,n){var o,a=((o={key:n})["data-rh"]=!0,o);return Object.keys(t).forEach((function(e){var n=k[e]||e;"innerHTML"===n||"cssText"===n?a.dangerouslySetInnerHTML={__html:t.innerHTML||t.cssText}:a[n]=t[e]})),r.createElement(e,a)}))},M=function(e,t,n){switch(e){case h.TITLE:return{toComponent:function(){return n=t.titleAttributes,(o={key:e=t.title})["data-rh"]=!0,a=D(n,o),[r.createElement(h.TITLE,a,e)];var e,n,o,a},toString:function(){return function(e,t,n,r){var o=R(n),a=T(t);return o?"<"+e+' data-rh="true" '+o+">"+L(a,r)+"</"+e+">":"<"+e+' data-rh="true">'+L(a,r)+"</"+e+">"}(e,t.title,t.titleAttributes,n)}};case"bodyAttributes":case"htmlAttributes":return{toComponent:function(){return D(t)},toString:function(){return R(t)}};default:return{toComponent:function(){return F(e,t)},toString:function(){return function(e,t,n){return t.reduce((function(t,r){var o=Object.keys(r).filter((function(e){return!("innerHTML"===e||"cssText"===e)})).reduce((function(e,t){var o=void 0===r[t]?t:t+'="'+L(r[t],n)+'"';return e?e+" "+o:o}),""),a=r.innerHTML||r.cssText||"",i=-1===N.indexOf(e);return t+"<"+e+' data-rh="true" '+o+(i?"/>":">"+a+"</"+e+">")}),"")}(e,t,n)}}}},B=function(e){var t=e.baseTag,n=e.bodyAttributes,r=e.encode,o=e.htmlAttributes,a=e.noscriptTags,i=e.styleTags,s=e.title,l=void 0===s?"":s,c=e.titleAttributes,u=e.linkTags,d=e.metaTags,p=e.scriptTags,f={toComponent:function(){},toString:function(){return""}};if(e.prioritizeSeoTags){var g=function(e){var t=e.linkTags,n=e.scriptTags,r=e.encode,o=I(e.metaTags,v),a=I(t,b),i=I(n,y);return{priorityMethods:{toComponent:function(){return[].concat(F(h.META,o.priority),F(h.LINK,a.priority),F(h.SCRIPT,i.priority))},toString:function(){return M(h.META,o.priority,r)+" "+M(h.LINK,a.priority,r)+" "+M(h.SCRIPT,i.priority,r)}},metaTags:o.default,linkTags:a.default,scriptTags:i.default}}(e);f=g.priorityMethods,u=g.linkTags,d=g.metaTags,p=g.scriptTags}return{priority:f,base:M(h.BASE,t,r),bodyAttributes:M("bodyAttributes",n,r),htmlAttributes:M("htmlAttributes",o,r),link:M(h.LINK,u,r),meta:M(h.META,d,r),noscript:M(h.NOSCRIPT,a,r),script:M(h.SCRIPT,p,r),style:M(h.STYLE,i,r),title:M(h.TITLE,{title:l,titleAttributes:c},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({}),H=a().shape({setHelmet:a().func,helmetInstances:a().shape({get:a().func,add:a().func,remove:a().func})}),q="undefined"!=typeof document,V=function(e){function t(n){var r;return(r=e.call(this,n)||this).helmetData=new U(r.props.context,t.canUseDOM),r}return f(t,e),t.prototype.render=function(){return r.createElement($.Provider,{value:this.helmetData.value},this.props.children)},t}(r.Component);V.canUseDOM=q,V.propTypes={context:a().shape({helmet:a().shape()}),children:a().node.isRequired},V.defaultProps={context:{}},V.displayName="HelmetProvider";var Q=function(e,t){var n,r=document.head||document.querySelector(h.HEAD),o=r.querySelectorAll(e+"[data-rh]"),a=[].slice.call(o),i=[];return t&&t.length&&t.forEach((function(t){var r=document.createElement(e);for(var o in t)Object.prototype.hasOwnProperty.call(t,o)&&("innerHTML"===o?r.innerHTML=t.innerHTML:"cssText"===o?r.styleSheet?r.styleSheet.cssText=t.cssText:r.appendChild(document.createTextNode(t.cssText)):r.setAttribute(o,void 0===t[o]?"":t[o]));r.setAttribute("data-rh","true"),a.some((function(e,t){return n=t,r.isEqualNode(e)}))?a.splice(n,1):i.push(r)})),a.forEach((function(e){return e.parentNode.removeChild(e)})),i.forEach((function(e){return r.appendChild(e)})),{oldTags:a,newTags:i}},Z=function(e,t){var n=document.getElementsByTagName(e)[0];if(n){for(var r=n.getAttribute("data-rh"),o=r?r.split(","):[],a=[].concat(o),i=Object.keys(t),s=0;s<i.length;s+=1){var l=i[s],c=t[l]||"";n.getAttribute(l)!==c&&n.setAttribute(l,c),-1===o.indexOf(l)&&o.push(l);var u=a.indexOf(l);-1!==u&&a.splice(u,1)}for(var d=a.length-1;d>=0;d-=1)n.removeAttribute(a[d]);o.length===a.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,o=e.linkTags,a=e.metaTags,i=e.noscriptTags,s=e.onChangeClientState,l=e.scriptTags,c=e.styleTags,u=e.title,d=e.titleAttributes;Z(h.BODY,e.bodyAttributes),Z(h.HTML,r),function(e,t){void 0!==e&&document.title!==e&&(document.title=T(e)),Z(h.TITLE,t)}(u,d);var p={baseTag:Q(h.BASE,n),linkTags:Q(h.LINK,o),metaTags:Q(h.META,a),noscriptTags:Q(h.NOSCRIPT,i),scriptTags:Q(h.SCRIPT,l),styleTags:Q(h.STYLE,c)},f={},g={};Object.keys(p).forEach((function(e){var t=p[e],n=t.newTags,r=t.oldTags;n.length&&(f[e]=n),r.length&&(g[e]=p[e].oldTags)})),t&&t(),s(e,f,g)},G=null,Y=function(e){function t(){for(var t,n=arguments.length,r=new Array(n),o=0;o<n;o++)r[o]=arguments[o];return(t=e.call.apply(e,[this].concat(r))||this).rendered=!1,t}f(t,e);var n=t.prototype;return n.shouldComponentUpdate=function(e){return!d()(e,this.props)},n.componentDidUpdate=function(){this.emitChange()},n.componentWillUnmount=function(){this.props.context.helmetInstances.remove(this),this.emitChange()},n.emitChange=function(){var e,t,n=this.props.context,r=n.setHelmet,o=null,a=(e=n.helmetInstances.get().map((function(e){var t=p({},e.props);return delete t.context,t})),{baseTag:P(["href"],e),bodyAttributes:O("bodyAttributes",e),defer:_(e,"defer"),encode:_(e,"encodeSpecialCharacters"),htmlAttributes:O("htmlAttributes",e),linkTags:j(h.LINK,["rel","href"],e),metaTags:j(h.META,["name","charset","http-equiv","property","itemprop"],e),noscriptTags:j(h.NOSCRIPT,["innerHTML"],e),onChangeClientState:E(e),scriptTags:j(h.SCRIPT,["src","innerHTML"],e),styleTags:j(h.STYLE,["cssText"],e),title:x(e),titleAttributes:O("titleAttributes",e),prioritizeSeoTags:C(e,"prioritizeSeoTags")});V.canUseDOM?(t=a,G&&cancelAnimationFrame(G),t.defer?G=requestAnimationFrame((function(){W(t,(function(){G=null}))})):(W(t),G=null)):B&&(o=B(a)),r(o)},n.init=function(){this.rendered||(this.rendered=!0,this.props.context.helmetInstances.add(this),this.emitChange())},n.render=function(){return this.init(),null},t}(r.Component);Y.propTypes={context:H.isRequired},Y.displayName="HelmetDispatcher";var K=["children"],X=["children"],J=function(e){function t(){return e.apply(this,arguments)||this}f(t,e);var n=t.prototype;return n.shouldComponentUpdate=function(e){return!s()(A(this.props,"helmetData"),A(e,"helmetData"))},n.mapNestedChildrenToProps=function(e,t){if(!t)return null;switch(e.type){case h.SCRIPT:case h.NOSCRIPT:return{innerHTML:t};case h.STYLE:return{cssText:t};default:throw new Error("<"+e.type+" /> elements are self-closing and can not contain children. Refer to our API for more information.")}},n.flattenArrayTypeChildren=function(e){var t,n=e.child,r=e.arrayTypeChildren;return p({},r,((t={})[n.type]=[].concat(r[n.type]||[],[p({},e.newChildProps,this.mapNestedChildrenToProps(n,e.nestedChildren))]),t))},n.mapObjectTypeChildren=function(e){var t,n,r=e.child,o=e.newProps,a=e.newChildProps,i=e.nestedChildren;switch(r.type){case h.TITLE:return p({},o,((t={})[r.type]=i,t.titleAttributes=p({},a),t));case h.BODY:return p({},o,{bodyAttributes:p({},a)});case h.HTML:return p({},o,{htmlAttributes:p({},a)});default:return p({},o,((n={})[r.type]=p({},a),n))}},n.mapArrayTypeChildrenToProps=function(e,t){var n=p({},t);return Object.keys(e).forEach((function(t){var r;n=p({},n,((r={})[t]=e[t],r))})),n},n.warnOnInvalidChildren=function(e,t){return c()(w.some((function(t){return e.type===t})),"function"==typeof e.type?"You may be attempting to nest <Helmet> components within each other, which is not allowed. Refer to our API for more information.":"Only elements types "+w.join(", ")+" are allowed. Helmet does not support rendering <"+e.type+"> elements. Refer to our API for more information."),c()(!t||"string"==typeof t||Array.isArray(t)&&!t.some((function(e){return"string"!=typeof e})),"Helmet expects a string as a child of <"+e.type+">. Did you forget to wrap your children in braces? ( <"+e.type+">{``}</"+e.type+"> ) Refer to our API for more information."),!0},n.mapChildrenToProps=function(e,t){var n=this,o={};return r.Children.forEach(e,(function(e){if(e&&e.props){var r=e.props,a=r.children,i=m(r,K),s=Object.keys(i).reduce((function(e,t){return e[S[t]||t]=i[t],e}),{}),l=e.type;switch("symbol"==typeof l?l=l.toString():n.warnOnInvalidChildren(e,a),l){case h.FRAGMENT:t=n.mapChildrenToProps(a,t);break;case h.LINK:case h.META:case h.NOSCRIPT:case h.SCRIPT:case h.STYLE:o=n.flattenArrayTypeChildren({child:e,arrayTypeChildren:o,newChildProps:s,nestedChildren:a});break;default:t=n.mapObjectTypeChildren({child:e,newProps:t,newChildProps:s,nestedChildren:a})}}})),this.mapArrayTypeChildrenToProps(o,t)},n.render=function(){var e=this.props,t=e.children,n=m(e,X),o=p({},n),a=n.helmetData;return t&&(o=this.mapChildrenToProps(t,o)),!a||a instanceof U||(a=new U(a.context,a.instances)),a?r.createElement(Y,p({},o,{context:a.value,helmetData:void 0})):r.createElement($.Consumer,null,(function(e){return r.createElement(Y,p({},o,{context:e}))}))},t}(r.Component);J.propTypes={base:a().object,bodyAttributes:a().object,children:a().oneOfType([a().arrayOf(a().node),a().node]),defaultTitle:a().string,defer:a().bool,encodeSpecialCharacters:a().bool,htmlAttributes:a().object,link:a().arrayOf(a().object),meta:a().arrayOf(a().object),noscript:a().arrayOf(a().object),onChangeClientState:a().func,script:a().arrayOf(a().object),style:a().arrayOf(a().object),title:a().string,titleAttributes:a().object,titleTemplate:a().string,prioritizeSeoTags:a().bool,helmetData:a().object},J.defaultProps={defer:!0,encodeSpecialCharacters:!0,prioritizeSeoTags:!1},J.displayName="Helmet"},68356:(e,t,n)=>{"use strict";function r(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,e.__proto__=t}function o(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(){return i=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},i.apply(this,arguments)}var s=n(67294),l=[],c=[];var u=s.createContext(null);function d(e){var t=e(),n={loading:!0,loaded:null,error:null};return n.promise=t.then((function(e){return n.loading=!1,n.loaded=e,e})).catch((function(e){throw n.loading=!1,n.error=e,e})),n}function p(e){var t={loading:!1,loaded:{},error:null},n=[];try{Object.keys(e).forEach((function(r){var o=d(e[r]);o.loading?t.loading=!0:(t.loaded[r]=o.loaded,t.error=o.error),n.push(o.promise),o.promise.then((function(e){t.loaded[r]=e})).catch((function(e){t.error=e}))}))}catch(r){t.error=r}return t.promise=Promise.all(n).then((function(e){return t.loading=!1,e})).catch((function(e){throw t.loading=!1,e})),t}function f(e,t){return s.createElement((n=e)&&n.__esModule?n.default:n,t);var n}function g(e,t){var d,p;if(!t.loading)throw new Error("react-loadable requires a `loading` component");var g=i({loader:null,loading:null,delay:200,timeout:null,render:f,webpack:null,modules:null},t),m=null;function h(){return m||(m=e(g.loader)),m.promise}return l.push(h),"function"==typeof g.webpack&&c.push((function(){if((0,g.webpack)().every((function(e){return void 0!==e&&void 0!==n.m[e]})))return h()})),p=d=function(t){function n(n){var r;return a(o(o(r=t.call(this,n)||this)),"retry",(function(){r.setState({error:null,loading:!0,timedOut:!1}),m=e(g.loader),r._loadModule()})),h(),r.state={error:m.error,pastDelay:!1,timedOut:!1,loading:m.loading,loaded:m.loaded},r}r(n,t),n.preload=function(){return h()};var i=n.prototype;return i.UNSAFE_componentWillMount=function(){this._loadModule()},i.componentDidMount=function(){this._mounted=!0},i._loadModule=function(){var e=this;if(this.context&&Array.isArray(g.modules)&&g.modules.forEach((function(t){e.context.report(t)})),m.loading){var t=function(t){e._mounted&&e.setState(t)};"number"==typeof g.delay&&(0===g.delay?this.setState({pastDelay:!0}):this._delay=setTimeout((function(){t({pastDelay:!0})}),g.delay)),"number"==typeof g.timeout&&(this._timeout=setTimeout((function(){t({timedOut:!0})}),g.timeout));var n=function(){t({error:m.error,loaded:m.loaded,loading:m.loading}),e._clearTimeouts()};m.promise.then((function(){return n(),null})).catch((function(e){return n(),null}))}},i.componentWillUnmount=function(){this._mounted=!1,this._clearTimeouts()},i._clearTimeouts=function(){clearTimeout(this._delay),clearTimeout(this._timeout)},i.render=function(){return this.state.loading||this.state.error?s.createElement(g.loading,{isLoading:this.state.loading,pastDelay:this.state.pastDelay,timedOut:this.state.timedOut,error:this.state.error,retry:this.retry}):this.state.loaded?g.render(this.state.loaded,this.props):null},n}(s.Component),a(d,"contextType",u),p}function m(e){return g(d,e)}m.Map=function(e){if("function"!=typeof e.render)throw new Error("LoadableMap requires a `render(loaded, props)` function");return g(p,e)};var h=function(e){function t(){return e.apply(this,arguments)||this}return r(t,e),t.prototype.render=function(){return s.createElement(u.Provider,{value:{report:this.props.report}},s.Children.only(this.props.children))},t}(s.Component);function b(e){for(var t=[];e.length;){var n=e.pop();t.push(n())}return Promise.all(t).then((function(){if(e.length)return b(e)}))}m.Capture=h,m.preloadAll=function(){return new Promise((function(e,t){b(l).then(e,t)}))},m.preloadReady=function(){return new Promise((function(e,t){b(c).then(e,e)}))},e.exports=m},18790:(e,t,n)=>{"use strict";n.d(t,{H:()=>s,f:()=>i});var r=n(16550),o=n(83117),a=n(67294);function i(e,t,n){return void 0===n&&(n=[]),e.some((function(e){var o=e.path?(0,r.LX)(t,e):n.length?n[n.length-1].match:r.F0.computeRootMatch(t);return o&&(n.push({route:e,match:o}),e.routes&&i(e.routes,t,n)),o})),n}function s(e,t,n){return void 0===t&&(t={}),void 0===n&&(n={}),e?a.createElement(r.rs,n,e.map((function(e,n){return a.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,o.Z)({},n,{},t,{route:e})):a.createElement(e.component,(0,o.Z)({},n,t,{route:e}))}})}))):null}},73727:(e,t,n)=>{"use strict";n.d(t,{OL:()=>w,UT:()=>d,VK:()=>u,rU:()=>b});var r=n(16550),o=n(90144),a=n(67294),i=n(99318),s=n(83117),l=n(80102),c=n(38776),u=function(e){function t(){for(var t,n=arguments.length,r=new Array(n),o=0;o<n;o++)r[o]=arguments[o];return(t=e.call.apply(e,[this].concat(r))||this).history=(0,i.lX)(t.props),t}return(0,o.Z)(t,e),t.prototype.render=function(){return a.createElement(r.F0,{history:this.history,children:this.props.children})},t}(a.Component);var d=function(e){function t(){for(var t,n=arguments.length,r=new Array(n),o=0;o<n;o++)r[o]=arguments[o];return(t=e.call.apply(e,[this].concat(r))||this).history=(0,i.q_)(t.props),t}return(0,o.Z)(t,e),t.prototype.render=function(){return a.createElement(r.F0,{history:this.history,children:this.props.children})},t}(a.Component);var p=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},g=function(e){return e},m=a.forwardRef;void 0===m&&(m=g);var h=m((function(e,t){var n=e.innerRef,r=e.navigate,o=e.onClick,i=(0,l.Z)(e,["innerRef","navigate","onClick"]),c=i.target,u=(0,s.Z)({},i,{onClick:function(e){try{o&&o(e)}catch(t){throw e.preventDefault(),t}e.defaultPrevented||0!==e.button||c&&"_self"!==c||function(e){return!!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)}(e)||(e.preventDefault(),r())}});return u.ref=g!==m&&t||n,a.createElement("a",u)}));var b=m((function(e,t){var n=e.component,o=void 0===n?h:n,u=e.replace,d=e.to,b=e.innerRef,y=(0,l.Z)(e,["component","replace","to","innerRef"]);return a.createElement(r.s6.Consumer,null,(function(e){e||(0,c.Z)(!1);var n=e.history,r=f(p(d,e.location),e.location),l=r?n.createHref(r):"",h=(0,s.Z)({},y,{href:l,navigate:function(){var t=p(d,e.location),r=(0,i.Ep)(e.location)===(0,i.Ep)(f(t));(u||r?n.replace:n.push)(t)}});return g!==m?h.ref=t||b:h.innerRef=b,a.createElement(o,h)}))})),y=function(e){return e},v=a.forwardRef;void 0===v&&(v=y);var w=v((function(e,t){var n=e["aria-current"],o=void 0===n?"page":n,i=e.activeClassName,u=void 0===i?"active":i,d=e.activeStyle,g=e.className,m=e.exact,h=e.isActive,w=e.location,k=e.sensitive,S=e.strict,_=e.style,x=e.to,E=e.innerRef,O=(0,l.Z)(e,["aria-current","activeClassName","activeStyle","className","exact","isActive","location","sensitive","strict","style","to","innerRef"]);return a.createElement(r.s6.Consumer,null,(function(e){e||(0,c.Z)(!1);var n=w||e.location,i=f(p(x,n),n),l=i.pathname,P=l&&l.replace(/([.+*?=^!:${}()[\]|/\\])/g,"\\$1"),j=P?(0,r.LX)(n.pathname,{path:P,exact:m,sensitive:k,strict:S}):null,C=!!(h?h(j,n):j),T="function"==typeof g?g(C):g,I="function"==typeof _?_(C):_;C&&(T=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(" ")}(T,u),I=(0,s.Z)({},I,d));var A=(0,s.Z)({"aria-current":C&&o||null,className:T,style:I,to:i},O);return y!==v?A.ref=t||E:A.innerRef=E,a.createElement(b,A)}))}))},16550:(e,t,n)=>{"use strict";n.d(t,{AW:()=>x,F0:()=>v,LX:()=>_,TH:()=>N,k6:()=>A,rs:()=>T,s6:()=>y});var r=n(90144),o=n(67294),a=n(45697),i=n.n(a),s=n(99318),l=n(38776),c=n(83117),u=n(39658),d=n.n(u),p=(n(50663),n(80102)),f=(n(8679),1073741823),g="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:void 0!==n.g?n.g:{};var m=o.createContext||function(e,t){var n,a,s="__create-react-context-"+function(){var e="__global_unique_id__";return g[e]=(g[e]||0)+1}()+"__",l=function(e){function n(){for(var t,n,r,o=arguments.length,a=new Array(o),i=0;i<o;i++)a[i]=arguments[i];return(t=e.call.apply(e,[this].concat(a))||this).emitter=(n=t.props.value,r=[],{on:function(e){r.push(e)},off:function(e){r=r.filter((function(t){return t!==e}))},get:function(){return n},set:function(e,t){n=e,r.forEach((function(e){return e(n,t)}))}}),t}(0,r.Z)(n,e);var o=n.prototype;return o.getChildContext=function(){var e;return(e={})[s]=this.emitter,e},o.componentWillReceiveProps=function(e){if(this.props.value!==e.value){var n,r=this.props.value,o=e.value;((a=r)===(i=o)?0!==a||1/a==1/i:a!=a&&i!=i)?n=0:(n="function"==typeof t?t(r,o):f,0!==(n|=0)&&this.emitter.set(e.value,n))}var a,i},o.render=function(){return this.props.children},n}(o.Component);l.childContextTypes=((n={})[s]=i().object.isRequired,n);var c=function(t){function n(){for(var e,n=arguments.length,r=new Array(n),o=0;o<n;o++)r[o]=arguments[o];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 o=n.prototype;return o.componentWillReceiveProps=function(e){var t=e.observedBits;this.observedBits=null==t?f:t},o.componentDidMount=function(){this.context[s]&&this.context[s].on(this.onUpdate);var e=this.props.observedBits;this.observedBits=null==e?f:e},o.componentWillUnmount=function(){this.context[s]&&this.context[s].off(this.onUpdate)},o.getValue=function(){return this.context[s]?this.context[s].get():e},o.render=function(){return(e=this.props.children,Array.isArray(e)?e[0]:e)(this.state.value);var e},n}(o.Component);return c.contextTypes=((a={})[s]=i().object,a),{Provider:l,Consumer:c}},h=function(e){var t=m();return t.displayName=e,t},b=h("Router-History"),y=h("Router"),v=function(e){function t(t){var n;return(n=e.call(this,t)||this).state={location:t.history.location},n._isMounted=!1,n._pendingLocation=null,t.staticContext||(n.unlisten=t.history.listen((function(e){n._pendingLocation=e}))),n}(0,r.Z)(t,e),t.computeRootMatch=function(e){return{path:"/",url:"/",params:{},isExact:"/"===e}};var n=t.prototype;return n.componentDidMount=function(){var e=this;this._isMounted=!0,this.unlisten&&this.unlisten(),this.props.staticContext||(this.unlisten=this.props.history.listen((function(t){e._isMounted&&e.setState({location:t})}))),this._pendingLocation&&this.setState({location:this._pendingLocation})},n.componentWillUnmount=function(){this.unlisten&&(this.unlisten(),this._isMounted=!1,this._pendingLocation=null)},n.render=function(){return o.createElement(y.Provider,{value:{history:this.props.history,location:this.state.location,match:t.computeRootMatch(this.state.location.pathname),staticContext:this.props.staticContext}},o.createElement(b.Provider,{children:this.props.children||null,value:this.props.history}))},t}(o.Component);o.Component;o.Component;var w={},k=1e4,S=0;function _(e,t){void 0===t&&(t={}),("string"==typeof t||Array.isArray(t))&&(t={path:t});var n=t,r=n.path,o=n.exact,a=void 0!==o&&o,i=n.strict,s=void 0!==i&&i,l=n.sensitive,c=void 0!==l&&l;return[].concat(r).reduce((function(t,n){if(!n&&""!==n)return null;if(t)return t;var r=function(e,t){var n=""+t.end+t.strict+t.sensitive,r=w[n]||(w[n]={});if(r[e])return r[e];var o=[],a={regexp:d()(e,o,t),keys:o};return S<k&&(r[e]=a,S++),a}(n,{end:a,strict:s,sensitive:c}),o=r.regexp,i=r.keys,l=o.exec(e);if(!l)return null;var u=l[0],p=l.slice(1),f=e===u;return a&&!f?null:{path:n,url:"/"===n&&""===u?"/":u,isExact:f,params:i.reduce((function(e,t,n){return e[t.name]=p[n],e}),{})}}),null)}var x=function(e){function t(){return e.apply(this,arguments)||this}return(0,r.Z)(t,e),t.prototype.render=function(){var e=this;return o.createElement(y.Consumer,null,(function(t){t||(0,l.Z)(!1);var n=e.props.location||t.location,r=e.props.computedMatch?e.props.computedMatch:e.props.path?_(n.pathname,e.props):t.match,a=(0,c.Z)({},t,{location:n,match:r}),i=e.props,s=i.children,u=i.component,d=i.render;return Array.isArray(s)&&function(e){return 0===o.Children.count(e)}(s)&&(s=null),o.createElement(y.Provider,{value:a},a.match?s?"function"==typeof s?s(a):s:u?o.createElement(u,a):d?d(a):null:"function"==typeof s?s(a):null)}))},t}(o.Component);function E(e){return"/"===e.charAt(0)?e:"/"+e}function O(e,t){if(!e)return t;var n=E(e);return 0!==t.pathname.indexOf(n)?t:(0,c.Z)({},t,{pathname:t.pathname.substr(n.length)})}function P(e){return"string"==typeof e?e:(0,s.Ep)(e)}function j(e){return function(){(0,l.Z)(!1)}}function C(){}o.Component;var T=function(e){function t(){return e.apply(this,arguments)||this}return(0,r.Z)(t,e),t.prototype.render=function(){var e=this;return o.createElement(y.Consumer,null,(function(t){t||(0,l.Z)(!1);var n,r,a=e.props.location||t.location;return o.Children.forEach(e.props.children,(function(e){if(null==r&&o.isValidElement(e)){n=e;var i=e.props.path||e.props.from;r=i?_(a.pathname,(0,c.Z)({},e.props,{path:i})):t.match}})),r?o.cloneElement(n,{location:a,computedMatch:r}):null}))},t}(o.Component);var I=o.useContext;function A(){return I(b)}function N(){return I(y).location}},39658:(e,t,n)=>{var r=n(5826);e.exports=f,e.exports.parse=a,e.exports.compile=function(e,t){return s(a(e,t),t)},e.exports.tokensToFunction=s,e.exports.tokensToRegExp=p;var o=new RegExp(["(\\\\.)","([\\/.])?(?:(?:\\:(\\w+)(?:\\(((?:\\\\.|[^\\\\()])+)\\))?|\\(((?:\\\\.|[^\\\\()])+)\\))([+*?])?|(\\*))"].join("|"),"g");function a(e,t){for(var n,r=[],a=0,i=0,s="",u=t&&t.delimiter||"/";null!=(n=o.exec(e));){var d=n[0],p=n[1],f=n.index;if(s+=e.slice(i,f),i=f+d.length,p)s+=p[1];else{var g=e[i],m=n[2],h=n[3],b=n[4],y=n[5],v=n[6],w=n[7];s&&(r.push(s),s="");var k=null!=m&&null!=g&&g!==m,S="+"===v||"*"===v,_="?"===v||"*"===v,x=n[2]||u,E=b||y;r.push({name:h||a++,prefix:m||"",delimiter:x,optional:_,repeat:S,partial:k,asterisk:!!w,pattern:E?c(E):w?".*":"[^"+l(x)+"]+?"})}}return i<e.length&&(s+=e.substr(i)),s&&r.push(s),r}function i(e){return encodeURI(e).replace(/[\/?#]/g,(function(e){return"%"+e.charCodeAt(0).toString(16).toUpperCase()}))}function s(e,t){for(var n=new Array(e.length),o=0;o<e.length;o++)"object"==typeof e[o]&&(n[o]=new RegExp("^(?:"+e[o].pattern+")$",d(t)));return function(t,o){for(var a="",s=t||{},l=(o||{}).pretty?i:encodeURIComponent,c=0;c<e.length;c++){var u=e[c];if("string"!=typeof u){var d,p=s[u.name];if(null==p){if(u.optional){u.partial&&(a+=u.prefix);continue}throw new TypeError('Expected "'+u.name+'" to be defined')}if(r(p)){if(!u.repeat)throw new TypeError('Expected "'+u.name+'" to not repeat, but received `'+JSON.stringify(p)+"`");if(0===p.length){if(u.optional)continue;throw new TypeError('Expected "'+u.name+'" to not be empty')}for(var f=0;f<p.length;f++){if(d=l(p[f]),!n[c].test(d))throw new TypeError('Expected all "'+u.name+'" to match "'+u.pattern+'", but received `'+JSON.stringify(d)+"`");a+=(0===f?u.prefix:u.delimiter)+d}}else{if(d=u.asterisk?encodeURI(p).replace(/[?#]/g,(function(e){return"%"+e.charCodeAt(0).toString(16).toUpperCase()})):l(p),!n[c].test(d))throw new TypeError('Expected "'+u.name+'" to match "'+u.pattern+'", but received "'+d+'"');a+=u.prefix+d}}else a+=u}return a}}function l(e){return e.replace(/([.+*?=^!:${}()[\]|\/\\])/g,"\\$1")}function c(e){return e.replace(/([=!:$\/()])/g,"\\$1")}function u(e,t){return e.keys=t,e}function d(e){return e&&e.sensitive?"":"i"}function p(e,t,n){r(t)||(n=t||n,t=[]);for(var o=(n=n||{}).strict,a=!1!==n.end,i="",s=0;s<e.length;s++){var c=e[s];if("string"==typeof c)i+=l(c);else{var p=l(c.prefix),f="(?:"+c.pattern+")";t.push(c),c.repeat&&(f+="(?:"+p+f+")*"),i+=f=c.optional?c.partial?p+"("+f+")?":"(?:"+p+"("+f+"))?":p+"("+f+")"}}var g=l(n.delimiter||"/"),m=i.slice(-g.length)===g;return o||(i=(m?i.slice(0,-g.length):i)+"(?:"+g+"(?=$))?"),i+=a?"$":o&&m?"":"(?="+g+"|$)",u(new RegExp("^"+i,d(n)),t)}function f(e,t,n){return r(t)||(n=t||n,t=[]),n=n||{},e instanceof RegExp?function(e,t){var n=e.source.match(/\((?!\?)/g);if(n)for(var r=0;r<n.length;r++)t.push({name:r,prefix:null,delimiter:null,optional:!1,repeat:!1,partial:!1,asterisk:!1,pattern:null});return u(e,t)}(e,t):r(e)?function(e,t,n){for(var r=[],o=0;o<e.length;o++)r.push(f(e[o],t,n).source);return u(new RegExp("(?:"+r.join("|")+")",d(n)),t)}(e,t,n):function(e,t,n){return p(a(e,n),t,n)}(e,t,n)}},30086:(e,t)=>{"use strict";var n="function"==typeof Symbol&&Symbol.for,r=n?Symbol.for("react.element"):60103,o=n?Symbol.for("react.portal"):60106,a=n?Symbol.for("react.fragment"):60107,i=n?Symbol.for("react.strict_mode"):60108,s=n?Symbol.for("react.profiler"):60114,l=n?Symbol.for("react.provider"):60109,c=n?Symbol.for("react.context"):60110,u=n?Symbol.for("react.async_mode"):60111,d=n?Symbol.for("react.concurrent_mode"):60111,p=n?Symbol.for("react.forward_ref"):60112,f=n?Symbol.for("react.suspense"):60113,g=n?Symbol.for("react.suspense_list"):60120,m=n?Symbol.for("react.memo"):60115,h=n?Symbol.for("react.lazy"):60116,b=n?Symbol.for("react.block"):60121,y=n?Symbol.for("react.fundamental"):60117,v=n?Symbol.for("react.responder"):60118,w=n?Symbol.for("react.scope"):60119;function k(e){if("object"==typeof e&&null!==e){var t=e.$$typeof;switch(t){case r:switch(e=e.type){case u:case d:case a:case s:case i:case f:return e;default:switch(e=e&&e.$$typeof){case c:case p:case h:case m:case l:return e;default:return t}}case o:return t}}}function S(e){return k(e)===d}},50663:(e,t,n)=>{"use strict";n(30086)},75251:(e,t,n)=>{"use strict";var r=n(67294),o=Symbol.for("react.element"),a=Symbol.for("react.fragment"),i=Object.prototype.hasOwnProperty,s=r.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,l={key:!0,ref:!0,__self:!0,__source:!0};function c(e,t,n){var r,a={},c=null,u=null;for(r in void 0!==n&&(c=""+n),void 0!==t.key&&(c=""+t.key),void 0!==t.ref&&(u=t.ref),t)i.call(t,r)&&!l.hasOwnProperty(r)&&(a[r]=t[r]);if(e&&e.defaultProps)for(r in t=e.defaultProps)void 0===a[r]&&(a[r]=t[r]);return{$$typeof:o,type:e,key:c,ref:u,props:a,_owner:s.current}}t.Fragment=a,t.jsx=c,t.jsxs=c},72408:(e,t)=>{"use strict";var n=Symbol.for("react.element"),r=Symbol.for("react.portal"),o=Symbol.for("react.fragment"),a=Symbol.for("react.strict_mode"),i=Symbol.for("react.profiler"),s=Symbol.for("react.provider"),l=Symbol.for("react.context"),c=Symbol.for("react.forward_ref"),u=Symbol.for("react.suspense"),d=Symbol.for("react.memo"),p=Symbol.for("react.lazy"),f=Symbol.iterator;var g={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},m=Object.assign,h={};function b(e,t,n){this.props=e,this.context=t,this.refs=h,this.updater=n||g}function y(){}function v(e,t,n){this.props=e,this.context=t,this.refs=h,this.updater=n||g}b.prototype.isReactComponent={},b.prototype.setState=function(e,t){if("object"!=typeof e&&"function"!=typeof e&&null!=e)throw Error("setState(...): takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,e,t,"setState")},b.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")},y.prototype=b.prototype;var w=v.prototype=new y;w.constructor=v,m(w,b.prototype),w.isPureReactComponent=!0;var k=Array.isArray,S=Object.prototype.hasOwnProperty,_={current:null},x={key:!0,ref:!0,__self:!0,__source:!0};function E(e,t,r){var o,a={},i=null,s=null;if(null!=t)for(o in void 0!==t.ref&&(s=t.ref),void 0!==t.key&&(i=""+t.key),t)S.call(t,o)&&!x.hasOwnProperty(o)&&(a[o]=t[o]);var l=arguments.length-2;if(1===l)a.children=r;else if(1<l){for(var c=Array(l),u=0;u<l;u++)c[u]=arguments[u+2];a.children=c}if(e&&e.defaultProps)for(o in l=e.defaultProps)void 0===a[o]&&(a[o]=l[o]);return{$$typeof:n,type:e,key:i,ref:s,props:a,_owner:_.current}}function O(e){return"object"==typeof e&&null!==e&&e.$$typeof===n}var P=/\/+/g;function j(e,t){return"object"==typeof e&&null!==e&&null!=e.key?function(e){var t={"=":"=0",":":"=2"};return"$"+e.replace(/[=:]/g,(function(e){return t[e]}))}(""+e.key):t.toString(36)}function C(e,t,o,a,i){var s=typeof e;"undefined"!==s&&"boolean"!==s||(e=null);var l=!1;if(null===e)l=!0;else switch(s){case"string":case"number":l=!0;break;case"object":switch(e.$$typeof){case n:case r:l=!0}}if(l)return i=i(l=e),e=""===a?"."+j(l,0):a,k(i)?(o="",null!=e&&(o=e.replace(P,"$&/")+"/"),C(i,t,o,"",(function(e){return e}))):null!=i&&(O(i)&&(i=function(e,t){return{$$typeof:n,type:e.type,key:t,ref:e.ref,props:e.props,_owner:e._owner}}(i,o+(!i.key||l&&l.key===i.key?"":(""+i.key).replace(P,"$&/")+"/")+e)),t.push(i)),1;if(l=0,a=""===a?".":a+":",k(e))for(var c=0;c<e.length;c++){var u=a+j(s=e[c],c);l+=C(s,t,o,u,i)}else if(u=function(e){return null===e||"object"!=typeof e?null:"function"==typeof(e=f&&e[f]||e["@@iterator"])?e:null}(e),"function"==typeof u)for(e=u.call(e),c=0;!(s=e.next()).done;)l+=C(s=s.value,t,o,u=a+j(s,c++),i);else if("object"===s)throw t=String(e),Error("Objects are not valid as a React child (found: "+("[object Object]"===t?"object with keys {"+Object.keys(e).join(", ")+"}":t)+"). If you meant to render a collection of children, use an array instead.");return l}function T(e,t,n){if(null==e)return e;var r=[],o=0;return C(e,r,"","",(function(e){return t.call(n,e,o++)})),r}function I(e){if(-1===e._status){var t=e._result;(t=t()).then((function(t){0!==e._status&&-1!==e._status||(e._status=1,e._result=t)}),(function(t){0!==e._status&&-1!==e._status||(e._status=2,e._result=t)})),-1===e._status&&(e._status=0,e._result=t)}if(1===e._status)return e._result.default;throw e._result}var A={current:null},N={transition:null},L={ReactCurrentDispatcher:A,ReactCurrentBatchConfig:N,ReactCurrentOwner:_};t.Children={map:T,forEach:function(e,t,n){T(e,(function(){t.apply(this,arguments)}),n)},count:function(e){var t=0;return T(e,(function(){t++})),t},toArray:function(e){return T(e,(function(e){return e}))||[]},only:function(e){if(!O(e))throw Error("React.Children.only expected to receive a single React element child.");return e}},t.Component=b,t.Fragment=o,t.Profiler=i,t.PureComponent=v,t.StrictMode=a,t.Suspense=u,t.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=L,t.cloneElement=function(e,t,r){if(null==e)throw Error("React.cloneElement(...): The argument must be a React element, but you passed "+e+".");var o=m({},e.props),a=e.key,i=e.ref,s=e._owner;if(null!=t){if(void 0!==t.ref&&(i=t.ref,s=_.current),void 0!==t.key&&(a=""+t.key),e.type&&e.type.defaultProps)var l=e.type.defaultProps;for(c in t)S.call(t,c)&&!x.hasOwnProperty(c)&&(o[c]=void 0===t[c]&&void 0!==l?l[c]:t[c])}var c=arguments.length-2;if(1===c)o.children=r;else if(1<c){l=Array(c);for(var u=0;u<c;u++)l[u]=arguments[u+2];o.children=l}return{$$typeof:n,type:e.type,key:a,ref:i,props:o,_owner:s}},t.createContext=function(e){return(e={$$typeof:l,_currentValue:e,_currentValue2:e,_threadCount:0,Provider:null,Consumer:null,_defaultValue:null,_globalName:null}).Provider={$$typeof:s,_context:e},e.Consumer=e},t.createElement=E,t.createFactory=function(e){var t=E.bind(null,e);return t.type=e,t},t.createRef=function(){return{current:null}},t.forwardRef=function(e){return{$$typeof:c,render:e}},t.isValidElement=O,t.lazy=function(e){return{$$typeof:p,_payload:{_status:-1,_result:e},_init:I}},t.memo=function(e,t){return{$$typeof:d,type:e,compare:void 0===t?null:t}},t.startTransition=function(e){var t=N.transition;N.transition={};try{e()}finally{N.transition=t}},t.unstable_act=function(){throw Error("act(...) is not supported in production builds of React.")},t.useCallback=function(e,t){return A.current.useCallback(e,t)},t.useContext=function(e){return A.current.useContext(e)},t.useDebugValue=function(){},t.useDeferredValue=function(e){return A.current.useDeferredValue(e)},t.useEffect=function(e,t){return A.current.useEffect(e,t)},t.useId=function(){return A.current.useId()},t.useImperativeHandle=function(e,t,n){return A.current.useImperativeHandle(e,t,n)},t.useInsertionEffect=function(e,t){return A.current.useInsertionEffect(e,t)},t.useLayoutEffect=function(e,t){return A.current.useLayoutEffect(e,t)},t.useMemo=function(e,t){return A.current.useMemo(e,t)},t.useReducer=function(e,t,n){return A.current.useReducer(e,t,n)},t.useRef=function(e){return A.current.useRef(e)},t.useState=function(e){return A.current.useState(e)},t.useSyncExternalStore=function(e,t,n){return A.current.useSyncExternalStore(e,t,n)},t.useTransition=function(){return A.current.useTransition()},t.version="18.2.0"},67294:(e,t,n)=>{"use strict";e.exports=n(72408)},85893:(e,t,n)=>{"use strict";e.exports=n(75251)},60053:(e,t)=>{"use strict";function n(e,t){var n=e.length;e.push(t);e:for(;0<n;){var r=n-1>>>1,o=e[r];if(!(0<a(o,t)))break e;e[r]=t,e[n]=o,n=r}}function r(e){return 0===e.length?null:e[0]}function o(e){if(0===e.length)return null;var t=e[0],n=e.pop();if(n!==t){e[0]=n;e:for(var r=0,o=e.length,i=o>>>1;r<i;){var s=2*(r+1)-1,l=e[s],c=s+1,u=e[c];if(0>a(l,n))c<o&&0>a(u,l)?(e[r]=u,e[c]=n,r=c):(e[r]=l,e[s]=n,r=s);else{if(!(c<o&&0>a(u,n)))break e;e[r]=u,e[c]=n,r=c}}}return t}function a(e,t){var n=e.sortIndex-t.sortIndex;return 0!==n?n:e.id-t.id}if("object"==typeof performance&&"function"==typeof performance.now){var i=performance;t.unstable_now=function(){return i.now()}}else{var s=Date,l=s.now();t.unstable_now=function(){return s.now()-l}}var c=[],u=[],d=1,p=null,f=3,g=!1,m=!1,h=!1,b="function"==typeof setTimeout?setTimeout:null,y="function"==typeof clearTimeout?clearTimeout:null,v="undefined"!=typeof setImmediate?setImmediate:null;function w(e){for(var t=r(u);null!==t;){if(null===t.callback)o(u);else{if(!(t.startTime<=e))break;o(u),t.sortIndex=t.expirationTime,n(c,t)}t=r(u)}}function k(e){if(h=!1,w(e),!m)if(null!==r(c))m=!0,N(S);else{var t=r(u);null!==t&&L(k,t.startTime-e)}}function S(e,n){m=!1,h&&(h=!1,y(O),O=-1),g=!0;var a=f;try{for(w(n),p=r(c);null!==p&&(!(p.expirationTime>n)||e&&!C());){var i=p.callback;if("function"==typeof i){p.callback=null,f=p.priorityLevel;var s=i(p.expirationTime<=n);n=t.unstable_now(),"function"==typeof s?p.callback=s:p===r(c)&&o(c),w(n)}else o(c);p=r(c)}if(null!==p)var l=!0;else{var d=r(u);null!==d&&L(k,d.startTime-n),l=!1}return l}finally{p=null,f=a,g=!1}}"undefined"!=typeof navigator&&void 0!==navigator.scheduling&&void 0!==navigator.scheduling.isInputPending&&navigator.scheduling.isInputPending.bind(navigator.scheduling);var _,x=!1,E=null,O=-1,P=5,j=-1;function C(){return!(t.unstable_now()-j<P)}function T(){if(null!==E){var e=t.unstable_now();j=e;var n=!0;try{n=E(!0,e)}finally{n?_():(x=!1,E=null)}}else x=!1}if("function"==typeof v)_=function(){v(T)};else if("undefined"!=typeof MessageChannel){var I=new MessageChannel,A=I.port2;I.port1.onmessage=T,_=function(){A.postMessage(null)}}else _=function(){b(T,0)};function N(e){E=e,x||(x=!0,_())}function L(e,n){O=b((function(){e(t.unstable_now())}),n)}t.unstable_IdlePriority=5,t.unstable_ImmediatePriority=1,t.unstable_LowPriority=4,t.unstable_NormalPriority=3,t.unstable_Profiling=null,t.unstable_UserBlockingPriority=2,t.unstable_cancelCallback=function(e){e.callback=null},t.unstable_continueExecution=function(){m||g||(m=!0,N(S))},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"):P=0<e?Math.floor(1e3/e):5},t.unstable_getCurrentPriorityLevel=function(){return f},t.unstable_getFirstCallbackNode=function(){return r(c)},t.unstable_next=function(e){switch(f){case 1:case 2:case 3:var t=3;break;default:t=f}var n=f;f=t;try{return e()}finally{f=n}},t.unstable_pauseExecution=function(){},t.unstable_requestPaint=function(){},t.unstable_runWithPriority=function(e,t){switch(e){case 1:case 2:case 3:case 4:case 5:break;default:e=3}var n=f;f=e;try{return t()}finally{f=n}},t.unstable_scheduleCallback=function(e,o,a){var i=t.unstable_now();switch("object"==typeof a&&null!==a?a="number"==typeof(a=a.delay)&&0<a?i+a:i:a=i,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:d++,callback:o,priorityLevel:e,startTime:a,expirationTime:s=a+s,sortIndex:-1},a>i?(e.sortIndex=a,n(u,e),null===r(c)&&e===r(u)&&(h?(y(O),O=-1):h=!0,L(k,a-i))):(e.sortIndex=s,n(c,e),m||g||(m=!0,N(S))),e},t.unstable_shouldYield=C,t.unstable_wrapCallback=function(e){var t=f;return function(){var n=f;f=t;try{return e.apply(this,arguments)}finally{f=n}}}},63840:(e,t,n)=>{"use strict";e.exports=n(60053)},96774:e=>{e.exports=function(e,t,n,r){var o=n?n.call(r,e,t):void 0;if(void 0!==o)return!!o;if(e===t)return!0;if("object"!=typeof e||!e||"object"!=typeof t||!t)return!1;var a=Object.keys(e),i=Object.keys(t);if(a.length!==i.length)return!1;for(var s=Object.prototype.hasOwnProperty.bind(t),l=0;l<a.length;l++){var c=a[l];if(!s(c))return!1;var u=e[c],d=t[c];if(!1===(o=n?n.call(r,u,d,c):void 0)||void 0===o&&u!==d)return!1}return!0}},36809:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={title:"Solus Help Center",tagline:"Help center for the Solus operating system",favicon:"img/support-icon-2.svg",url:"https://help.getsol.us",baseUrl:"/",organizationName:"getsolus",projectName:"help-center-docs",onBrokenLinks:"warn",onBrokenMarkdownLinks:"warn",i18n:{defaultLocale:"en",locales:["en"],path:"i18n",localeConfigs:{}},presets:[["classic",{docs:{sidebarPath:"/home/runner/work/help-center-docs/help-center-docs/sidebars.js",editUrl:"https://github.com/getsolus/help-center-docs/tree/master/",showLastUpdateTime:!0},blog:{showReadingTime:!0,blogTitle:"Solus DevLog",blogDescription:"The Solus Development (b)log!",postsPerPage:"ALL",blogSidebarTitle:"All posts",blogSidebarCount:"ALL",path:"devlog"},theme:{customCss:"/home/runner/work/help-center-docs/help-center-docs/src/css/custom.css"}}]],plugins:[["/home/runner/work/help-center-docs/help-center-docs/node_modules/@cmfcmf/docusaurus-search-local/lib/server/index.js",{}],["@docusaurus/plugin-ideal-image",{quality:70,max:1030,min:640,steps:2,disableInDev:!1}]],themeConfig:{image:"img/logo.jpg",navbar:{title:"Solus Help Center",logo:{alt:"Solus Logo",src:"img/logo.svg"},items:[{type:"docSidebar",sidebarId:"userSidebar",position:"left",label:"Users"},{type:"docSidebar",sidebarId:"packagingSidebar",position:"left",label:"Packaging"},{to:"blog",label:"Dev Log",position:"left"},{label:"More",items:[{href:"https://getsol.us",label:"Solus Homepage"},{label:"Forums",href:"https://discuss.getsol.us/"},{href:"https://matrix.to/#/#solus:matrix.org",label:"Matrix"},{label:"Mastodon",href:"https://fosstodon.org/@Solus"},{label:"Github",href:"https://github.com/getsolus"},{label:"Packages",href:"https://dev.getsol.us/"},{label:"Issue Tracker",href:"https://issues.getsol.us/"},{label:"Security",href:"https://github.com/getsolus/packages/blob/main/SECURITY.md"}],type:"dropdown",position:"left"}],hideOnScroll:!1},footer:{style:"dark",links:[{title:"Docs",items:[{label:"Users",to:"/docs/user/intro"},{label:"Packaging",to:"/docs/packaging"}]},{title:"News",items:[{label:"Solus Blog",to:"https://getsol.us/blog"},{label:"Solus Devlog",to:"blog"}]},{title:"Community",items:[{label:"Forums",href:"https://discuss.getsol.us"},{label:"Matrix",href:"https://matrix.to/#/#solus:matrix.org"},{label:"Mastodon",href:"https://fosstodon.org/@Solus",rel:"me"}]},{title:"More",items:[{label:"Solus Homepage",to:"https://getsol.us/"},{label:"GitHub",href:"https://github.com/getsolus",rel:"me"},{label:"Packages",href:"https://dev.getsol.us"},{label:"Issue Tracker",href:"https://issues.getsol.us"},{label:"Security",href:"https://github.com/getsolus/packages/blob/main/SECURITY.md"}]}],copyright:"Copyright \xa9 2024 Solus Project. Built with Docusaurus."},prism:{theme:{plain:{color:"#393A34",backgroundColor:"#f6f8fa"},styles:[{types:["comment","prolog","doctype","cdata"],style:{color:"#999988",fontStyle:"italic"}},{types:["namespace"],style:{opacity:.7}},{types:["string","attr-value"],style:{color:"#e3116c"}},{types:["punctuation","operator"],style:{color:"#393A34"}},{types:["entity","url","symbol","number","boolean","variable","constant","property","regex","inserted"],style:{color:"#36acaa"}},{types:["atrule","keyword","attr-name","selector"],style:{color:"#00a4db"}},{types:["function","deleted","tag"],style:{color:"#d73a49"}},{types:["function-variable"],style:{color:"#6f42c1"}},{types:["tag","selector","keyword"],style:{color:"#00009f"}}]},darkTheme:{plain:{color:"#F8F8F2",backgroundColor:"#282A36"},styles:[{types:["prolog","constant","builtin"],style:{color:"rgb(189, 147, 249)"}},{types:["inserted","function"],style:{color:"rgb(80, 250, 123)"}},{types:["deleted"],style:{color:"rgb(255, 85, 85)"}},{types:["changed"],style:{color:"rgb(255, 184, 108)"}},{types:["punctuation","symbol"],style:{color:"rgb(248, 248, 242)"}},{types:["string","char","tag","selector"],style:{color:"rgb(255, 121, 198)"}},{types:["keyword","variable"],style:{color:"rgb(189, 147, 249)",fontStyle:"italic"}},{types:["comment"],style:{color:"rgb(98, 114, 164)"}},{types:["attr-name"],style:{color:"rgb(241, 250, 140)"}}]},additionalLanguages:["bash","diff","ini","powershell"],magicComments:[{className:"theme-code-block-highlighted-line",line:"highlight-next-line",block:{start:"highlight-start",end:"highlight-end"}}]},colorMode:{defaultMode:"light",disableSwitch:!1,respectPrefersColorScheme:!1},docs:{versionPersistence:"localStorage",sidebar:{hideable:!1,autoCollapseCategories:!1}},blog:{sidebar:{groupByYear:!0}},metadata:[],tableOfContents:{minHeadingLevel:2,maxHeadingLevel:3}},baseUrlIssueBanner:!0,future:{experimental_storage:{type:"localStorage",namespace:!1},experimental_router:"browser"},onBrokenAnchors:"warn",onDuplicateRoutes:"warn",staticDirectories:["static"],customFields:{},themes:[],scripts:[],headTags:[],stylesheets:[],clientModules:[],titleDelimiter:"|",noIndex:!1,markdown:{format:"mdx",mermaid:!1,mdx1Compat:{comments:!0,admonitions:!0,headingIds:!0},anchors:{maintainCase:!1}}}},83117:(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})},90144:(e,t,n)=>{"use strict";function r(e,t){return r=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},r(e,t)}function o(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,r(e,t)}n.d(t,{Z:()=>o})},80102:(e,t,n)=>{"use strict";function r(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}n.d(t,{Z:()=>r})},36905:(e,t,n)=>{"use strict";function r(e){var t,n,o="";if("string"==typeof e||"number"==typeof e)o+=e;else if("object"==typeof e)if(Array.isArray(e)){var a=e.length;for(t=0;t<a;t++)e[t]&&(n=r(e[t]))&&(o&&(o+=" "),o+=n)}else for(n in e)e[n]&&(o&&(o+=" "),o+=n);return o}n.d(t,{Z:()=>o});const o=function(){for(var e,t,n=0,o="",a=arguments.length;n<a;n++)(e=arguments[n])&&(t=r(e))&&(o&&(o+=" "),o+=t);return o}},788:(e,t,n)=>{"use strict";function r(e){var t,n,o="";if("string"==typeof e||"number"==typeof e)o+=e;else if("object"==typeof e)if(Array.isArray(e)){var a=e.length;for(t=0;t<a;t++)e[t]&&(n=r(e[t]))&&(o&&(o+=" "),o+=n)}else for(n in e)e[n]&&(o&&(o+=" "),o+=n);return o}n.d(t,{Z:()=>o});const o=function(){for(var e,t,n=0,o="",a=arguments.length;n<a;n++)(e=arguments[n])&&(t=r(e))&&(o&&(o+=" "),o+=t);return o}},14965:(e,t,n)=>{"use strict";n.d(t,{y$:()=>J,p1:()=>O});var r=n(67294);function o(e){var t,n,r="";if("string"==typeof e||"number"==typeof e)r+=e;else if("object"==typeof e)if(Array.isArray(e)){var a=e.length;for(t=0;t<a;t++)e[t]&&(n=o(e[t]))&&(r&&(r+=" "),r+=n)}else for(n in e)e[n]&&(r&&(r+=" "),r+=n);return r}const a=function(){for(var e,t,n=0,r="",a=arguments.length;n<a;n++)(e=arguments[n])&&(t=o(e))&&(r&&(r+=" "),r+=t);return r};var i,s,l,c,u,d=Object.create,p=Object.defineProperty,f=Object.defineProperties,g=Object.getOwnPropertyDescriptor,m=Object.getOwnPropertyDescriptors,h=Object.getOwnPropertyNames,b=Object.getOwnPropertySymbols,y=Object.getPrototypeOf,v=Object.prototype.hasOwnProperty,w=Object.prototype.propertyIsEnumerable,k=(e,t,n)=>t in e?p(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,S=(e,t)=>{for(var n in t||(t={}))v.call(t,n)&&k(e,n,t[n]);if(b)for(var n of b(t))w.call(t,n)&&k(e,n,t[n]);return e},_=(e,t)=>f(e,m(t)),x=(e,t)=>{var n={};for(var r in e)v.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&b)for(var r of b(e))t.indexOf(r)<0&&w.call(e,r)&&(n[r]=e[r]);return n},E=(i={"../../node_modules/.pnpm/prismjs@1.29.0_patch_hash=vrxx3pzkik6jpmgpayxfjunetu/node_modules/prismjs/prism.js"(e,t){var n=function(){var e=/(?:^|\s)lang(?:uage)?-([\w-]+)(?=\s|$)/i,t=0,n={},r={util:{encode:function e(t){return t instanceof o?new o(t.type,e(t.content),t.alias):Array.isArray(t)?t.map(e):t.replace(/&/g,"&").replace(/</g,"<").replace(/\u00a0/g," ")},type:function(e){return Object.prototype.toString.call(e).slice(8,-1)},objId:function(e){return e.__id||Object.defineProperty(e,"__id",{value:++t}),e.__id},clone:function e(t,n){var o,a;switch(n=n||{},r.util.type(t)){case"Object":if(a=r.util.objId(t),n[a])return n[a];for(var i in o={},n[a]=o,t)t.hasOwnProperty(i)&&(o[i]=e(t[i],n));return o;case"Array":return a=r.util.objId(t),n[a]?n[a]:(o=[],n[a]=o,t.forEach((function(t,r){o[r]=e(t,n)})),o);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 o=e.classList;if(o.contains(t))return!0;if(o.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 o in t)n[o]=t[o];return n},insertBefore:function(e,t,n,o){var a=(o=o||r.languages)[e],i={};for(var s in a)if(a.hasOwnProperty(s)){if(s==t)for(var l in n)n.hasOwnProperty(l)&&(i[l]=n[l]);n.hasOwnProperty(s)||(i[s]=a[s])}var c=o[e];return o[e]=i,r.languages.DFS(r.languages,(function(t,n){n===c&&t!=e&&(this[t]=i)})),i},DFS:function e(t,n,o,a){a=a||{};var i=r.util.objId;for(var s in t)if(t.hasOwnProperty(s)){n.call(t,s,t[s],o||s);var l=t[s],c=r.util.type(l);"Object"!==c||a[i(l)]?"Array"!==c||a[i(l)]||(a[i(l)]=!0,e(l,n,s,a)):(a[i(l)]=!0,e(l,n,null,a))}}},plugins:{},highlight:function(e,t,n){var a={code:e,grammar:t,language:n};if(r.hooks.run("before-tokenize",a),!a.grammar)throw new Error('The language "'+a.language+'" has no grammar.');return a.tokens=r.tokenize(a.code,a.grammar),r.hooks.run("after-tokenize",a),o.stringify(r.util.encode(a.tokens),a.language)},tokenize:function(e,t){var n=t.rest;if(n){for(var r in n)t[r]=n[r];delete t.rest}var o=new s;return l(o,o.head,e),i(e,o,t,o.head,0),function(e){for(var t=[],n=e.head.next;n!==e.tail;)t.push(n.value),n=n.next;return t}(o)},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 o,a=0;o=n[a++];)o(t)}},Token:o};function o(e,t,n,r){this.type=e,this.content=t,this.alias=n,this.length=0|(r||"").length}function a(e,t,n,r){e.lastIndex=t;var o=e.exec(n);if(o&&r&&o[1]){var a=o[1].length;o.index+=a,o[0]=o[0].slice(a)}return o}function i(e,t,n,s,u,d){for(var p in n)if(n.hasOwnProperty(p)&&n[p]){var f=n[p];f=Array.isArray(f)?f:[f];for(var g=0;g<f.length;++g){if(d&&d.cause==p+","+g)return;var m=f[g],h=m.inside,b=!!m.lookbehind,y=!!m.greedy,v=m.alias;if(y&&!m.pattern.global){var w=m.pattern.toString().match(/[imsuy]*$/)[0];m.pattern=RegExp(m.pattern.source,w+"g")}for(var k=m.pattern||m,S=s.next,_=u;S!==t.tail&&!(d&&_>=d.reach);_+=S.value.length,S=S.next){var x=S.value;if(t.length>e.length)return;if(!(x instanceof o)){var E,O=1;if(y){if(!(E=a(k,_,e,b))||E.index>=e.length)break;var P=E.index,j=E.index+E[0].length,C=_;for(C+=S.value.length;P>=C;)C+=(S=S.next).value.length;if(_=C-=S.value.length,S.value instanceof o)continue;for(var T=S;T!==t.tail&&(C<j||"string"==typeof T.value);T=T.next)O++,C+=T.value.length;O--,x=e.slice(_,C),E.index-=_}else if(!(E=a(k,0,x,b)))continue;P=E.index;var I=E[0],A=x.slice(0,P),N=x.slice(P+I.length),L=_+x.length;d&&L>d.reach&&(d.reach=L);var R=S.prev;if(A&&(R=l(t,R,A),_+=A.length),c(t,R,O),S=l(t,R,new o(p,h?r.tokenize(I,h):I,v,I)),N&&l(t,S,N),O>1){var D={cause:p+","+g,reach:L};i(e,t,n,S.prev,_,D),d&&D.reach>d.reach&&(d.reach=D.reach)}}}}}}function s(){var e={value:null,prev:null,next:null},t={value:null,prev:e,next:null};e.next=t,this.head=e,this.tail=t,this.length=0}function l(e,t,n){var r=t.next,o={value:n,prev:t,next:r};return t.next=o,r.prev=o,e.length++,o}function c(e,t,n){for(var r=t.next,o=0;o<n&&r!==e.tail;o++)r=r.next;t.next=r,r.prev=t,e.length-=o}return o.stringify=function e(t,n){if("string"==typeof t)return t;if(Array.isArray(t)){var o="";return t.forEach((function(t){o+=e(t,n)})),o}var a={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(a.classes,i):a.classes.push(i)),r.hooks.run("wrap",a);var s="";for(var l in a.attributes)s+=" "+l+'="'+(a.attributes[l]||"").replace(/"/g,""")+'"';return"<"+a.tag+' class="'+a.classes.join(" ")+'"'+s+">"+a.content+"</"+a.tag+">"},r}();t.exports=n,n.default=n}},function(){return s||(0,i[h(i)[0]])((s={exports:{}}).exports,s),s.exports}),O=((e,t,n)=>(n=null!=e?d(y(e)):{},((e,t,n,r)=>{if(t&&"object"==typeof t||"function"==typeof t)for(let o of h(t))v.call(e,o)||o===n||p(e,o,{get:()=>t[o],enumerable:!(r=g(t,o))||r.enumerable});return e})(!t&&e&&e.__esModule?n:p(n,"default",{value:e,enumerable:!0}),e)))(E());O.languages.markup={comment:{pattern:/<!--(?:(?!<!--)[\s\S])*?-->/,greedy:!0},prolog:{pattern:/<\?[\s\S]+?\?>/,greedy:!0},doctype:{pattern:/<!DOCTYPE(?:[^>"'[\]]|"[^"]*"|'[^']*')+(?:\[(?:[^<"'\]]|"[^"]*"|'[^']*'|<(?!!--)|<!--(?:[^-]|-(?!->))*-->)*\]\s*)?>/i,greedy:!0,inside:{"internal-subset":{pattern:/(^[^\[]*\[)[\s\S]+(?=\]>$)/,lookbehind:!0,greedy:!0,inside:null},string:{pattern:/"[^"]*"|'[^']*'/,greedy:!0},punctuation:/^<!|>$|[[\]]/,"doctype-tag":/^DOCTYPE/i,name:/[^\s<>'"]+/}},cdata:{pattern:/<!\[CDATA\[[\s\S]*?\]\]>/i,greedy:!0},tag:{pattern:/<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/,greedy:!0,inside:{tag:{pattern:/^<\/?[^\s>\/]+/,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"special-attr":[],"attr-value":{pattern:/=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/,inside:{punctuation:[{pattern:/^=/,alias:"attr-equals"},{pattern:/^(\s*)["']|["']$/,lookbehind:!0}]}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:[{pattern:/&[\da-z]{1,8};/i,alias:"named-entity"},/&#x?[\da-f]{1,8};/i]},O.languages.markup.tag.inside["attr-value"].inside.entity=O.languages.markup.entity,O.languages.markup.doctype.inside["internal-subset"].inside=O.languages.markup,O.hooks.add("wrap",(function(e){"entity"===e.type&&(e.attributes.title=e.content.replace(/&/,"&"))})),Object.defineProperty(O.languages.markup.tag,"addInlined",{value:function(e,t){var n;(t=((n=((n={})["language-"+t]={pattern:/(^<!\[CDATA\[)[\s\S]+?(?=\]\]>$)/i,lookbehind:!0,inside:O.languages[t]},n.cdata=/^<!\[CDATA\[|\]\]>$/i,{"included-cdata":{pattern:/<!\[CDATA\[[\s\S]*?\]\]>/i,inside:n}}))["language-"+t]={pattern:/[\s\S]+/,inside:O.languages[t]},{}))[e]={pattern:RegExp(/(<__[^>]*>)(?:<!\[CDATA\[(?:[^\]]|\](?!\]>))*\]\]>|(?!<!\[CDATA\[)[\s\S])*?(?=<\/__>)/.source.replace(/__/g,(function(){return e})),"i"),lookbehind:!0,greedy:!0,inside:n},O.languages.insertBefore("markup","cdata",t)}}),Object.defineProperty(O.languages.markup.tag,"addAttribute",{value:function(e,t){O.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:O.languages[t]},punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}}}})}}),O.languages.html=O.languages.markup,O.languages.mathml=O.languages.markup,O.languages.svg=O.languages.markup,O.languages.xml=O.languages.extend("markup",{}),O.languages.ssml=O.languages.xml,O.languages.atom=O.languages.xml,O.languages.rss=O.languages.xml,function(e){var t={pattern:/\\[\\(){}[\]^$+*?|.]/,alias:"escape"},n=/\\(?:x[\da-fA-F]{2}|u[\da-fA-F]{4}|u\{[\da-fA-F]+\}|0[0-7]{0,2}|[123][0-7]{2}|c[a-zA-Z]|.)/,r="(?:[^\\\\-]|"+n.source+")",o=(r=RegExp(r+"-"+r),{pattern:/(<|')[^<>']+(?=[>']$)/,lookbehind:!0,alias:"variable"});e.languages.regex={"char-class":{pattern:/((?:^|[^\\])(?:\\\\)*)\[(?:[^\\\]]|\\[\s\S])*\]/,lookbehind:!0,inside:{"char-class-negation":{pattern:/(^\[)\^/,lookbehind:!0,alias:"operator"},"char-class-punctuation":{pattern:/^\[|\]$/,alias:"punctuation"},range:{pattern:r,inside:{escape:n,"range-punctuation":{pattern:/-/,alias:"operator"}}},"special-escape":t,"char-set":{pattern:/\\[wsd]|\\p\{[^{}]+\}/i,alias:"class-name"},escape:n}},"special-escape":t,"char-set":{pattern:/\.|\\[wsd]|\\p\{[^{}]+\}/i,alias:"class-name"},backreference:[{pattern:/\\(?![123][0-7]{2})[1-9]/,alias:"keyword"},{pattern:/\\k<[^<>']+>/,alias:"keyword",inside:{"group-name":o}}],anchor:{pattern:/[$^]|\\[ABbGZz]/,alias:"function"},escape:n,group:[{pattern:/\((?:\?(?:<[^<>']+>|'[^<>']+'|[>:]|<?[=!]|[idmnsuxU]+(?:-[idmnsuxU]+)?:?))?/,alias:"punctuation",inside:{"group-name":o}},{pattern:/\)/,alias:"punctuation"}],quantifier:{pattern:/(?:[+*?]|\{\d+(?:,\d*)?\})[?+]?/,alias:"number"},alternation:{pattern:/\|/,alias:"keyword"}}}(O),O.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:/[{}[\];(),.:]/},O.languages.javascript=O.languages.extend("clike",{"class-name":[O.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}|\?\?=?|\?\.?|[~:]/}),O.languages.javascript["class-name"][0].pattern=/(\b(?:class|extends|implements|instanceof|interface|new)\s+)[\w.\\]+/,O.languages.insertBefore("javascript","keyword",{regex:{pattern:RegExp(/((?:^|[^$\w\xA0-\uFFFF."'\])\s]|\b(?:return|yield))\s*)/.source+/\//.source+"(?:"+/(?:\[(?:[^\]\\\r\n]|\\.)*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}/.source+"|"+/(?:\[(?:[^[\]\\\r\n]|\\.|\[(?:[^[\]\\\r\n]|\\.|\[(?:[^[\]\\\r\n]|\\.)*\])*\])*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}v[dgimyus]{0,7}/.source+")"+/(?=(?:\s|\/\*(?:[^*]|\*(?!\/))*\*\/)*(?:$|[\r\n,.;:})\]]|\/\/))/.source),lookbehind:!0,greedy:!0,inside:{"regex-source":{pattern:/^(\/)[\s\S]+(?=\/[a-z]*$)/,lookbehind:!0,alias:"language-regex",inside:O.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:O.languages.javascript},{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=>)/i,lookbehind:!0,inside:O.languages.javascript},{pattern:/(\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*=>)/,lookbehind:!0,inside:O.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:O.languages.javascript}],constant:/\b[A-Z](?:[A-Z_]|\dx?)*\b/}),O.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:O.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"}}),O.languages.insertBefore("javascript","operator",{"literal-property":{pattern:/((?:^|[,{])[ \t]*)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*:)/m,lookbehind:!0,alias:"property"}}),O.languages.markup&&(O.languages.markup.tag.addInlined("script","javascript"),O.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")),O.languages.js=O.languages.javascript,O.languages.actionscript=O.languages.extend("javascript",{keyword:/\b(?:as|break|case|catch|class|const|default|delete|do|dynamic|each|else|extends|final|finally|for|function|get|if|implements|import|in|include|instanceof|interface|internal|is|namespace|native|new|null|override|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|use|var|void|while|with)\b/,operator:/\+\+|--|(?:[+\-*\/%^]|&&?|\|\|?|<<?|>>?>?|[!=]=?)=?|[~?@]/}),O.languages.actionscript["class-name"].alias="function",delete O.languages.actionscript.parameter,delete O.languages.actionscript["literal-property"],O.languages.markup&&O.languages.insertBefore("actionscript","string",{xml:{pattern:/(^|[^.])<\/?\w+(?:\s+[^\s>\/=]+=("|')(?:\\[\s\S]|(?!\2)[^\\])*\2)*\s*\/?>/,lookbehind:!0,inside:O.languages.markup}}),c=/#(?!\{).+/,u={pattern:/#\{[^}]+\}/,alias:"variable"},(l=O).languages.coffeescript=l.languages.extend("javascript",{comment:c,string:[{pattern:/'(?:\\[\s\S]|[^\\'])*'/,greedy:!0},{pattern:/"(?:\\[\s\S]|[^\\"])*"/,greedy:!0,inside:{interpolation:u}}],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"}}),l.languages.insertBefore("coffeescript","comment",{"multiline-comment":{pattern:/###[\s\S]+?###/,alias:"comment"},"block-regex":{pattern:/\/{3}[\s\S]*?\/{3}/,alias:"regex",inside:{comment:c,interpolation:u}}}),l.languages.insertBefore("coffeescript","string",{"inline-javascript":{pattern:/`(?:\\[\s\S]|[^\\`])*`/,inside:{delimiter:{pattern:/^`|`$/,alias:"punctuation"},script:{pattern:/[\s\S]+/,alias:"language-javascript",inside:l.languages.javascript}}},"multiline-string":[{pattern:/'''[\s\S]*?'''/,greedy:!0,alias:"string"},{pattern:/"""[\s\S]*?"""/,greedy:!0,alias:"string",inside:{interpolation:u}}]}),l.languages.insertBefore("coffeescript","keyword",{property:/(?!\d)\w+(?=\s*:(?!:))/}),delete l.languages.coffeescript["template-string"],l.languages.coffee=l.languages.coffeescript,function(e){var t=e.languages.javadoclike={parameter:{pattern:/(^[\t ]*(?:\/{3}|\*|\/\*\*)\s*@(?:arg|arguments|param)\s+)\w+/m,lookbehind:!0},keyword:{pattern:/(^[\t ]*(?:\/{3}|\*|\/\*\*)\s*|\{)@[a-z][a-zA-Z-]+\b/m,lookbehind:!0},punctuation:/[{}]/};Object.defineProperty(t,"addSupport",{value:function(t,n){(t="string"==typeof t?[t]:t).forEach((function(t){var r=function(e){e.inside||(e.inside={}),e.inside.rest=n},o="doc-comment";if(a=e.languages[t]){var a,i=a[o];if((i=i||(a=e.languages.insertBefore(t,"comment",{"doc-comment":{pattern:/(^|[^\\])\/\*\*[^/][\s\S]*?(?:\*\/|$)/,lookbehind:!0,alias:"comment"}}))[o])instanceof RegExp&&(i=a[o]={pattern:i}),Array.isArray(i))for(var s=0,l=i.length;s<l;s++)i[s]instanceof RegExp&&(i[s]={pattern:i[s]}),r(i[s]);else r(i)}}))}}),t.addSupport(["java","javascript","php"],t)}(O),function(e){var t=/(?:"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n])*')/;(t=(e.languages.css={comment:/\/\*[\s\S]*?\*\//,atrule:{pattern:RegExp("@[\\w-](?:"+/[^;{\s"']|\s+(?!\s)/.source+"|"+t.source+")*?"+/(?:;|(?=\s*\{))/.source),inside:{rule:/^@[\w-]+/,"selector-function-argument":{pattern:/(\bselector\s*\(\s*(?![\s)]))(?:[^()\s]|\s+(?![\s)])|\((?:[^()]|\([^()]*\))*\))+(?=\s*\))/,lookbehind:!0,alias:"selector"},keyword:{pattern:/(^|[^\w-])(?:and|not|only|or)(?![\w-])/,lookbehind:!0}}},url:{pattern:RegExp("\\burl\\((?:"+t.source+"|"+/(?:[^\\\r\n()"']|\\[\s\S])*/.source+")\\)","i"),greedy:!0,inside:{function:/^url/i,punctuation:/^\(|\)$/,string:{pattern:RegExp("^"+t.source+"$"),alias:"url"}}},selector:{pattern:RegExp("(^|[{}\\s])[^{}\\s](?:[^{};\"'\\s]|\\s+(?![\\s{])|"+t.source+")*(?=\\s*\\{)"),lookbehind:!0},string:{pattern:t,greedy:!0},property:{pattern:/(^|[^-\w\xA0-\uFFFF])(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*(?=\s*:)/i,lookbehind:!0},important:/!important\b/i,function:{pattern:/(^|[^-a-z0-9])[-a-z0-9]+(?=\()/i,lookbehind:!0},punctuation:/[(){};:,]/},e.languages.css.atrule.inside.rest=e.languages.css,e.languages.markup))&&(t.tag.addInlined("style","css"),t.tag.addAttribute("style","css"))}(O),function(e){var t=/("|')(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,n=(t=(e.languages.css.selector={pattern:e.languages.css.selector.pattern,lookbehind:!0,inside:t={"pseudo-element":/:(?:after|before|first-letter|first-line|selection)|::[-\w]+/,"pseudo-class":/:[-\w]+/,class:/\.[-\w]+/,id:/#[-\w]+/,attribute:{pattern:RegExp("\\[(?:[^[\\]\"']|"+t.source+")*\\]"),greedy:!0,inside:{punctuation:/^\[|\]$/,"case-sensitivity":{pattern:/(\s)[si]$/i,lookbehind:!0,alias:"keyword"},namespace:{pattern:/^(\s*)(?:(?!\s)[-*\w\xA0-\uFFFF])*\|(?!=)/,lookbehind:!0,inside:{punctuation:/\|$/}},"attr-name":{pattern:/^(\s*)(?:(?!\s)[-\w\xA0-\uFFFF])+/,lookbehind:!0},"attr-value":[t,{pattern:/(=\s*)(?:(?!\s)[-\w\xA0-\uFFFF])+(?=\s*$)/,lookbehind:!0}],operator:/[|~*^$]?=/}},"n-th":[{pattern:/(\(\s*)[+-]?\d*[\dn](?:\s*[+-]\s*\d+)?(?=\s*\))/,lookbehind:!0,inside:{number:/[\dn]+/,operator:/[+-]/}},{pattern:/(\(\s*)(?:even|odd)(?=\s*\))/i,lookbehind:!0}],combinator:/>|\+|~|\|\|/,punctuation:/[(),]/}},e.languages.css.atrule.inside["selector-function-argument"].inside=t,e.languages.insertBefore("css","property",{variable:{pattern:/(^|[^-\w\xA0-\uFFFF])--(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*/i,lookbehind:!0}}),{pattern:/(\b\d+)(?:%|[a-z]+(?![\w-]))/,lookbehind:!0}),{pattern:/(^|[^\w.-])-?(?:\d+(?:\.\d+)?|\.\d+)/,lookbehind:!0});e.languages.insertBefore("css","function",{operator:{pattern:/(\s)[+\-*\/](?=\s)/,lookbehind:!0},hexcode:{pattern:/\B#[\da-f]{3,8}\b/i,alias:"color"},color:[{pattern:/(^|[^\w-])(?:AliceBlue|AntiqueWhite|Aqua|Aquamarine|Azure|Beige|Bisque|Black|BlanchedAlmond|Blue|BlueViolet|Brown|BurlyWood|CadetBlue|Chartreuse|Chocolate|Coral|CornflowerBlue|Cornsilk|Crimson|Cyan|DarkBlue|DarkCyan|DarkGoldenRod|DarkGr[ae]y|DarkGreen|DarkKhaki|DarkMagenta|DarkOliveGreen|DarkOrange|DarkOrchid|DarkRed|DarkSalmon|DarkSeaGreen|DarkSlateBlue|DarkSlateGr[ae]y|DarkTurquoise|DarkViolet|DeepPink|DeepSkyBlue|DimGr[ae]y|DodgerBlue|FireBrick|FloralWhite|ForestGreen|Fuchsia|Gainsboro|GhostWhite|Gold|GoldenRod|Gr[ae]y|Green|GreenYellow|HoneyDew|HotPink|IndianRed|Indigo|Ivory|Khaki|Lavender|LavenderBlush|LawnGreen|LemonChiffon|LightBlue|LightCoral|LightCyan|LightGoldenRodYellow|LightGr[ae]y|LightGreen|LightPink|LightSalmon|LightSeaGreen|LightSkyBlue|LightSlateGr[ae]y|LightSteelBlue|LightYellow|Lime|LimeGreen|Linen|Magenta|Maroon|MediumAquaMarine|MediumBlue|MediumOrchid|MediumPurple|MediumSeaGreen|MediumSlateBlue|MediumSpringGreen|MediumTurquoise|MediumVioletRed|MidnightBlue|MintCream|MistyRose|Moccasin|NavajoWhite|Navy|OldLace|Olive|OliveDrab|Orange|OrangeRed|Orchid|PaleGoldenRod|PaleGreen|PaleTurquoise|PaleVioletRed|PapayaWhip|PeachPuff|Peru|Pink|Plum|PowderBlue|Purple|RebeccaPurple|Red|RosyBrown|RoyalBlue|SaddleBrown|Salmon|SandyBrown|SeaGreen|SeaShell|Sienna|Silver|SkyBlue|SlateBlue|SlateGr[ae]y|Snow|SpringGreen|SteelBlue|Tan|Teal|Thistle|Tomato|Transparent|Turquoise|Violet|Wheat|White|WhiteSmoke|Yellow|YellowGreen)(?![\w-])/i,lookbehind:!0},{pattern:/\b(?:hsl|rgb)\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*\)\B|\b(?:hsl|rgb)a\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*,\s*(?:0|0?\.\d+|1)\s*\)\B/i,inside:{unit:t,number:n,function:/[\w-]+(?=\()/,punctuation:/[(),]/}}],entity:/\\[\da-f]{1,8}/i,unit:t,number:n})}(O),function(e){var t=/[*&][^\s[\]{},]+/,n=/!(?:<[\w\-%#;/?:@&=+$,.!~*'()[\]]+>|(?:[a-zA-Z\d-]*!)?[\w\-%#;/?:@&=+$.~*'()]+)?/,r="(?:"+n.source+"(?:[ \t]+"+t.source+")?|"+t.source+"(?:[ \t]+"+n.source+")?)",o=/(?:[^\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})),a=/"(?:[^"\\\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"(?:"+o+"|"+a+")"}))),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(a),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}(O),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,o=/\|?__(?:\|__)+\|?(?:(?:\n|\r\n?)|(?![\s\S]))/.source.replace(/__/g,(function(){return r})),a=/\|?[ \t]*:?-{3,}:?[ \t]*(?:\|[ \t]*:?-{3,}:?[ \t]*)+\|?(?:\n|\r\n?)/.source,i=(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("^"+o+a+"(?:"+o+")*","m"),inside:{"table-data-rows":{pattern:RegExp("^("+o+a+")(?:"+o+")*$"),lookbehind:!0,inside:{"table-data":{pattern:RegExp(r),inside:e.languages.markdown},punctuation:/\|/}},"table-line":{pattern:RegExp("^("+o+")"+a+"$"),lookbehind:!0,inside:{punctuation:/\||:?-{3,}:?/}},"table-header-row":{pattern:RegExp("^"+o+"$"),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 o,a=t[n];"code"!==a.type?e(a.content):(o=a.content[1],a=a.content[3],o&&a&&"code-language"===o.type&&"code-block"===a.type&&"string"==typeof o.content&&(o=o.content.replace(/\b#/g,"sharp").replace(/\b\+\+/g,"pp"),o="language-"+(o=(/[a-z][\w-]*/i.exec(o)||[""])[0].toLowerCase()),a.alias?"string"==typeof a.alias?a.alias=[a.alias,o]:a.alias.push(o):a.alias=[o]))}}(e.tokens)})),e.hooks.add("wrap",(function(t){if("code-block"===t.type){for(var n="",r=0,o=t.classes.length;r<o;r++){var a=t.classes[r];if(a=/language-(.+)/.exec(a)){n=a[1];break}}var c,u=e.languages[n];u?t.content=e.highlight(t.content.replace(i,"").replace(/&(\w{1,8}|#x?[\da-f]{1,8});/gi,(function(e,t){var n;return"#"===(t=t.toLowerCase())[0]?(n="x"===t[1]?parseInt(t.slice(2),16):Number(t.slice(1)),l(n)):s[t]||e})),u,n):n&&"none"!==n&&e.plugins.autoloader&&(c="md-"+(new Date).valueOf()+"-"+Math.floor(1e16*Math.random()),t.attributes.id=c,e.plugins.autoloader.loadLanguages(n,(function(){var t=document.getElementById(c);t&&(t.innerHTML=e.highlight(t.textContent,e.languages[n],n))})))}})),RegExp(e.languages.markup.tag.pattern.source,"gi")),s={amp:"&",lt:"<",gt:">",quot:'"'},l=String.fromCodePoint||String.fromCharCode;e.languages.md=e.languages.markdown}(O),O.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:O.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+/},O.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 o=[];if(d(["definition-mutation","punctuation"])&&"("===u(1).content){n+=2;var a=p(/^\($/,/^\)$/);if(-1===a)continue;for(;n<a;n++){var i=u(0);"variable"===i.type&&(f(i,"variable-input"),o.push(i.content))}n=a+1}if(d(["punctuation","property-query"])&&"{"===u(0).content&&(n++,f(u(0),"property-mutation"),0<o.length)){var s=p(/^\{$/,/^\}$/);if(-1!==s)for(var l=n;l<s;l++){var c=t[l];"variable"===c.type&&0<=o.indexOf(c.content)&&f(c,"variable-input")}}}}function u(e){return t[n+e]}function d(e,t){t=t||0;for(var n=0;n<e.length;n++){var r=u(n+t);if(!r||r.type!==e[n])return}return 1}function p(e,r){for(var o=1,a=n;a<t.length;a++){var i=t[a],s=i.content;if("punctuation"===i.type&&"string"==typeof s)if(e.test(s))o++;else if(r.test(s)&&0==--o)return a}return-1}function f(e,t){var n=e.alias;n?Array.isArray(n)||(e.alias=n=[n]):e.alias=n=[],n.push(t)}})),O.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,o=r.inside["interpolation-punctuation"],a=r.pattern.source;function i(t,r){if(e.languages[t])return{pattern:RegExp("((?:"+r+")\\s*)"+n),lookbehind:!0,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},"embedded-code":{pattern:/[\s\S]+/,alias:t}}}}function s(t,n,r){return t={code:t,grammar:n,language:r},e.hooks.run("before-tokenize",t),t.tokens=e.tokenize(t.code,t.grammar),e.hooks.run("after-tokenize",t),t.tokens}function l(t,n,i){var l=e.tokenize(t,{interpolation:{pattern:RegExp(a),lookbehind:!0}}),c=0,u={},d=(l=s(l.map((function(e){if("string"==typeof e)return e;var n,r;for(e=e.content;-1!==t.indexOf((r=c++,n="___"+i.toUpperCase()+"_"+r+"___")););return u[n]=e,n})).join(""),n,i),Object.keys(u));return c=0,function t(n){for(var a=0;a<n.length;a++){if(c>=d.length)return;var i,l,p,f,g,m,h,b=n[a];"string"==typeof b||"string"==typeof b.content?(i=d[c],-1!==(h=(m="string"==typeof b?b:b.content).indexOf(i))&&(++c,l=m.substring(0,h),g=u[i],p=void 0,(f={})["interpolation-punctuation"]=o,3===(f=e.tokenize(g,f)).length&&((p=[1,1]).push.apply(p,s(f[1],e.languages.javascript,"javascript")),f.splice.apply(f,p)),p=new e.Token("interpolation",f,r.alias,g),f=m.substring(h+i.length),g=[],l&&g.push(l),g.push(p),f&&(t(m=[f]),g.push.apply(g,m)),"string"==typeof b?(n.splice.apply(n,[a,1].concat(g)),a+=g.length-1):b.content=g)):(h=b.content,Array.isArray(h)?t(h):t([h]))}}(l),new e.Token(i,l,"language-"+i,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 c={javascript:!0,js:!0,typescript:!0,ts:!0,jsx:!0,tsx:!0};function u(e){return"string"==typeof e?e:Array.isArray(e)?e.map(u).join(""):u(e.content)}e.hooks.add("after-tokenize",(function(t){t.language in c&&function t(n){for(var r=0,o=n.length;r<o;r++){var a,i,s,c=n[r];"string"!=typeof c&&(a=c.content,Array.isArray(a)?"template-string"===c.type?(c=a[1],3===a.length&&"string"!=typeof c&&"embedded-code"===c.type&&(i=u(c),c=c.alias,c=Array.isArray(c)?c[0]:c,s=e.languages[c])&&(a[1]=l(i,s,c))):t(a):"string"!=typeof a&&t([a]))}}(t.tokens)}))}(O),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}(O),function(e){var t=e.languages.javascript,n=/\{(?:[^{}]|\{(?:[^{}]|\{[^{}]*\})*\})+\}/.source,r="(@(?:arg|argument|param|property)\\s+(?:"+n+"\\s+)?)";e.languages.jsdoc=e.languages.extend("javadoclike",{parameter:{pattern:RegExp(r+/(?:(?!\s)[$\w\xA0-\uFFFF.])+(?=\s|$)/.source),lookbehind:!0,inside:{punctuation:/\./}}}),e.languages.insertBefore("jsdoc","keyword",{"optional-parameter":{pattern:RegExp(r+/\[(?:(?!\s)[$\w\xA0-\uFFFF.])+(?:=[^[\]]+)?\](?=\s|$)/.source),lookbehind:!0,inside:{parameter:{pattern:/(^\[)[$\w\xA0-\uFFFF\.]+/,lookbehind:!0,inside:{punctuation:/\./}},code:{pattern:/(=)[\s\S]*(?=\]$)/,lookbehind:!0,inside:t,alias:"language-javascript"},punctuation:/[=[\]]/}},"class-name":[{pattern:RegExp(/(@(?:augments|class|extends|interface|memberof!?|template|this|typedef)\s+(?:<TYPE>\s+)?)[A-Z]\w*(?:\.[A-Z]\w*)*/.source.replace(/<TYPE>/g,(function(){return n}))),lookbehind:!0,inside:{punctuation:/\./}},{pattern:RegExp("(@[a-z]+\\s+)"+n),lookbehind:!0,inside:{string:t.string,number:t.number,boolean:t.boolean,keyword:e.languages.typescript.keyword,operator:/=>|\.\.\.|[&|?:*]/,punctuation:/[.,;=<>{}()[\]]/}}],example:{pattern:/(@example\s+(?!\s))(?:[^@\s]|\s+(?!\s))+?(?=\s*(?:\*\s*)?(?:@\w|\*\/))/,lookbehind:!0,inside:{code:{pattern:/^([\t ]*(?:\*\s*)?)\S.*$/m,lookbehind:!0,inside:t,alias:"language-javascript"}}}}),e.languages.javadoclike.addSupport("javascript",e.languages.jsdoc)}(O),function(e){e.languages.flow=e.languages.extend("javascript",{}),e.languages.insertBefore("flow","keyword",{type:[{pattern:/\b(?:[Bb]oolean|Function|[Nn]umber|[Ss]tring|[Ss]ymbol|any|mixed|null|void)\b/,alias:"class-name"}]}),e.languages.flow["function-variable"].pattern=/(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=\s*(?:function\b|(?:\([^()]*\)(?:\s*:\s*\w+)?|(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)\s*=>))/i,delete e.languages.flow.parameter,e.languages.insertBefore("flow","operator",{"flow-punctuation":{pattern:/\{\||\|\}/,alias:"punctuation"}}),Array.isArray(e.languages.flow.keyword)||(e.languages.flow.keyword=[e.languages.flow.keyword]),e.languages.flow.keyword.unshift({pattern:/(^|[^$]\b)(?:Class|declare|opaque|type)\b(?!\$)/,lookbehind:!0},{pattern:/(^|[^$]\B)\$(?:Diff|Enum|Exact|Keys|ObjMap|PropertyType|Record|Shape|Subtype|Supertype|await)\b(?!\$)/,lookbehind:!0})}(O),O.languages.n4js=O.languages.extend("javascript",{keyword:/\b(?:Array|any|boolean|break|case|catch|class|const|constructor|continue|debugger|declare|default|delete|do|else|enum|export|extends|false|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|module|new|null|number|package|private|protected|public|return|set|static|string|super|switch|this|throw|true|try|typeof|var|void|while|with|yield)\b/}),O.languages.insertBefore("n4js","constant",{annotation:{pattern:/@+\w+/,alias:"operator"}}),O.languages.n4jsd=O.languages.n4js,function(e){function t(e,t){return RegExp(e.replace(/<ID>/g,(function(){return/(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*/.source})),t)}e.languages.insertBefore("javascript","function-variable",{"method-variable":{pattern:RegExp("(\\.\\s*)"+e.languages.javascript["function-variable"].pattern.source),lookbehind:!0,alias:["function-variable","method","function","property-access"]}}),e.languages.insertBefore("javascript","function",{method:{pattern:RegExp("(\\.\\s*)"+e.languages.javascript.function.source),lookbehind:!0,alias:["function","property-access"]}}),e.languages.insertBefore("javascript","constant",{"known-class-name":[{pattern:/\b(?:(?:Float(?:32|64)|(?:Int|Uint)(?:8|16|32)|Uint8Clamped)?Array|ArrayBuffer|BigInt|Boolean|DataView|Date|Error|Function|Intl|JSON|(?:Weak)?(?:Map|Set)|Math|Number|Object|Promise|Proxy|Reflect|RegExp|String|Symbol|WebAssembly)\b/,alias:"class-name"},{pattern:/\b(?:[A-Z]\w*)Error\b/,alias:"class-name"}]}),e.languages.insertBefore("javascript","keyword",{imports:{pattern:t(/(\bimport\b\s*)(?:<ID>(?:\s*,\s*(?:\*\s*as\s+<ID>|\{[^{}]*\}))?|\*\s*as\s+<ID>|\{[^{}]*\})(?=\s*\bfrom\b)/.source),lookbehind:!0,inside:e.languages.javascript},exports:{pattern:t(/(\bexport\b\s*)(?:\*(?:\s*as\s+<ID>)?(?=\s*\bfrom\b)|\{[^{}]*\})/.source),lookbehind:!0,inside:e.languages.javascript}}),e.languages.javascript.keyword.unshift({pattern:/\b(?:as|default|export|from|import)\b/,alias:"module"},{pattern:/\b(?:await|break|catch|continue|do|else|finally|for|if|return|switch|throw|try|while|yield)\b/,alias:"control-flow"},{pattern:/\bnull\b/,alias:["null","nil"]},{pattern:/\bundefined\b/,alias:"nil"}),e.languages.insertBefore("javascript","operator",{spread:{pattern:/\.{3}/,alias:"operator"},arrow:{pattern:/=>/,alias:"operator"}}),e.languages.insertBefore("javascript","punctuation",{"property-access":{pattern:t(/(\.\s*)#?<ID>/.source),lookbehind:!0},"maybe-class-name":{pattern:/(^|[^$\w\xA0-\uFFFF])[A-Z][$\w\xA0-\uFFFF]+/,lookbehind:!0},dom:{pattern:/\b(?:document|(?:local|session)Storage|location|navigator|performance|window)\b/,alias:"variable"},console:{pattern:/\bconsole(?=\s*\.)/,alias:"class-name"}});for(var n=["function","function-variable","method","method-variable","property-access"],r=0;r<n.length;r++){var o=n[r],a=e.languages.javascript[o];o=(a="RegExp"===e.util.type(a)?e.languages.javascript[o]={pattern:a}:a).inside||{};(a.inside=o)["maybe-class-name"]=/^[A-Z][\s\S]*/}}(O),function(e){var t=e.util.clone(e.languages.javascript),n=/(?:\s|\/\/.*(?!.)|\/\*(?:[^*]|\*(?!\/))\*\/)/.source,r=/(?:\{(?:\{(?:\{[^{}]*\}|[^{}])*\}|[^{}])*\})/.source,o=/(?:\{<S>*\.{3}(?:[^{}]|<BRACES>)*\})/.source;function a(e,t){return e=e.replace(/<S>/g,(function(){return n})).replace(/<BRACES>/g,(function(){return r})).replace(/<SPREAD>/g,(function(){return o})),RegExp(e,t)}function i(t){for(var n=[],r=0;r<t.length;r++){var o=t[r],a=!1;"string"!=typeof o&&("tag"===o.type&&o.content[0]&&"tag"===o.content[0].type?"</"===o.content[0].content[0].content?0<n.length&&n[n.length-1].tagName===s(o.content[0].content[1])&&n.pop():"/>"!==o.content[o.content.length-1].content&&n.push({tagName:s(o.content[0].content[1]),openedBraces:0}):0<n.length&&"punctuation"===o.type&&"{"===o.content?n[n.length-1].openedBraces++:0<n.length&&0<n[n.length-1].openedBraces&&"punctuation"===o.type&&"}"===o.content?n[n.length-1].openedBraces--:a=!0),(a||"string"==typeof o)&&0<n.length&&0===n[n.length-1].openedBraces&&(a=s(o),r<t.length-1&&("string"==typeof t[r+1]||"plain-text"===t[r+1].type)&&(a+=s(t[r+1]),t.splice(r+1,1)),0<r&&("string"==typeof t[r-1]||"plain-text"===t[r-1].type)&&(a=s(t[r-1])+a,t.splice(r-1,1),r--),t[r]=new e.Token("plain-text",a,null,a)),o.content&&"string"!=typeof o.content&&i(o.content)}}o=a(o).source,e.languages.jsx=e.languages.extend("markup",t),e.languages.jsx.tag.pattern=a(/<\/?(?:[\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:a(/<SPREAD>/.source),inside:e.languages.jsx}},e.languages.jsx.tag),e.languages.insertBefore("inside","special-attr",{script:{pattern:a(/=<BRACES>/.source),alias:"language-javascript",inside:{"script-punctuation":{pattern:/^=(?=\{)/,alias:"punctuation"},rest:e.languages.jsx}}},e.languages.jsx.tag);var s=function(e){return e?"string"==typeof e?e:"string"==typeof e.content?e.content:e.content.map(s).join(""):""};e.hooks.add("after-tokenize",(function(e){"jsx"!==e.language&&"tsx"!==e.language||i(e.tokens)}))}(O),function(e){var t=e.util.clone(e.languages.typescript);(t=(e.languages.tsx=e.languages.extend("jsx",t),delete e.languages.tsx.parameter,delete e.languages.tsx["literal-property"],e.languages.tsx.tag)).pattern=RegExp(/(^|[^\w$]|(?=<\/))/.source+"(?:"+t.pattern.source+")",t.pattern.flags),t.lookbehind=!0}(O),O.languages.swift={comment:{pattern:/(^|[^\\:])(?:\/\/.*|\/\*(?:[^/*]|\/(?!\*)|\*(?!\/)|\/\*(?:[^*]|\*(?!\/))*\*\/)*\*\/)/,lookbehind:!0,greedy:!0},"string-literal":[{pattern:RegExp(/(^|[^"#])/.source+"(?:"+/"(?:\\(?:\((?:[^()]|\([^()]*\))*\)|\r\n|[^(])|[^\\\r\n"])*"/.source+"|"+/"""(?:\\(?:\((?:[^()]|\([^()]*\))*\)|[^(])|[^\\"]|"(?!""))*"""/.source+")"+/(?!["#])/.source),lookbehind:!0,greedy:!0,inside:{interpolation:{pattern:/(\\\()(?:[^()]|\([^()]*\))*(?=\))/,lookbehind:!0,inside:null},"interpolation-punctuation":{pattern:/^\)|\\\($/,alias:"punctuation"},punctuation:/\\(?=[\r\n])/,string:/[\s\S]+/}},{pattern:RegExp(/(^|[^"#])(#+)/.source+"(?:"+/"(?:\\(?:#+\((?:[^()]|\([^()]*\))*\)|\r\n|[^#])|[^\\\r\n])*?"/.source+"|"+/"""(?:\\(?:#+\((?:[^()]|\([^()]*\))*\)|[^#])|[^\\])*?"""/.source+")\\2"),lookbehind:!0,greedy:!0,inside:{interpolation:{pattern:/(\\#+\()(?:[^()]|\([^()]*\))*(?=\))/,lookbehind:!0,inside:null},"interpolation-punctuation":{pattern:/^\)|\\#+\($/,alias:"punctuation"},string:/[\s\S]+/}}],directive:{pattern:RegExp(/#/.source+"(?:"+/(?:elseif|if)\b/.source+"(?:[ \t]*"+/(?:![ \t]*)?(?:\b\w+\b(?:[ \t]*\((?:[^()]|\([^()]*\))*\))?|\((?:[^()]|\([^()]*\))*\))(?:[ \t]*(?:&&|\|\|))?/.source+")+|"+/(?:else|endif)\b/.source+")"),alias:"property",inside:{"directive-name":/^#\w+/,boolean:/\b(?:false|true)\b/,number:/\b\d+(?:\.\d+)*\b/,operator:/!|&&|\|\||[<>]=?/,punctuation:/[(),]/}},literal:{pattern:/#(?:colorLiteral|column|dsohandle|file(?:ID|Literal|Path)?|function|imageLiteral|line)\b/,alias:"constant"},"other-directive":{pattern:/#\w+\b/,alias:"property"},attribute:{pattern:/@\w+/,alias:"atrule"},"function-definition":{pattern:/(\bfunc\s+)\w+/,lookbehind:!0,alias:"function"},label:{pattern:/\b(break|continue)\s+\w+|\b[a-zA-Z_]\w*(?=\s*:\s*(?:for|repeat|while)\b)/,lookbehind:!0,alias:"important"},keyword:/\b(?:Any|Protocol|Self|Type|actor|as|assignment|associatedtype|associativity|async|await|break|case|catch|class|continue|convenience|default|defer|deinit|didSet|do|dynamic|else|enum|extension|fallthrough|fileprivate|final|for|func|get|guard|higherThan|if|import|in|indirect|infix|init|inout|internal|is|isolated|lazy|left|let|lowerThan|mutating|none|nonisolated|nonmutating|open|operator|optional|override|postfix|precedencegroup|prefix|private|protocol|public|repeat|required|rethrows|return|right|safe|self|set|some|static|struct|subscript|super|switch|throw|throws|try|typealias|unowned|unsafe|var|weak|where|while|willSet)\b/,boolean:/\b(?:false|true)\b/,nil:{pattern:/\bnil\b/,alias:"constant"},"short-argument":/\$\d+\b/,omit:{pattern:/\b_\b/,alias:"keyword"},number:/\b(?:[\d_]+(?:\.[\de_]+)?|0x[a-f0-9_]+(?:\.[a-f0-9p_]+)?|0b[01_]+|0o[0-7_]+)\b/i,"class-name":/\b[A-Z](?:[A-Z_\d]*[a-z]\w*)?\b/,function:/\b[a-z_]\w*(?=\s*\()/i,constant:/\b(?:[A-Z_]{2,}|k[A-Z][A-Za-z_]+)\b/,operator:/[-+*/%=!<>&|^~?]+|\.[.\-+*/%=!<>&|^~?]+/,punctuation:/[{}[\]();,.:\\]/},O.languages.swift["string-literal"].forEach((function(e){e.inside.interpolation.inside=O.languages.swift})),function(e){e.languages.kotlin=e.languages.extend("clike",{keyword:{pattern:/(^|[^.])\b(?:abstract|actual|annotation|as|break|by|catch|class|companion|const|constructor|continue|crossinline|data|do|dynamic|else|enum|expect|external|final|finally|for|fun|get|if|import|in|infix|init|inline|inner|interface|internal|is|lateinit|noinline|null|object|open|operator|out|override|package|private|protected|public|reified|return|sealed|set|super|suspend|tailrec|this|throw|to|try|typealias|val|var|vararg|when|where|while)\b/,lookbehind:!0},function:[{pattern:/(?:`[^\r\n`]+`|\b\w+)(?=\s*\()/,greedy:!0},{pattern:/(\.)(?:`[^\r\n`]+`|\w+)(?=\s*\{)/,lookbehind:!0,greedy:!0}],number:/\b(?:0[xX][\da-fA-F]+(?:_[\da-fA-F]+)*|0[bB][01]+(?:_[01]+)*|\d+(?:_\d+)*(?:\.\d+(?:_\d+)*)?(?:[eE][+-]?\d+(?:_\d+)*)?[fFL]?)\b/,operator:/\+[+=]?|-[-=>]?|==?=?|!(?:!|==?)?|[\/*%<>]=?|[?:]:?|\.\.|&&|\|\||\b(?:and|inv|or|shl|shr|ushr|xor)\b/}),delete e.languages.kotlin["class-name"];var t={"interpolation-punctuation":{pattern:/^\$\{?|\}$/,alias:"punctuation"},expression:{pattern:/[\s\S]+/,inside:e.languages.kotlin}};e.languages.insertBefore("kotlin","string",{"string-literal":[{pattern:/"""(?:[^$]|\$(?:(?!\{)|\{[^{}]*\}))*?"""/,alias:"multiline",inside:{interpolation:{pattern:/\$(?:[a-z_]\w*|\{[^{}]*\})/i,inside:t},string:/[\s\S]+/}},{pattern:/"(?:[^"\\\r\n$]|\\.|\$(?:(?!\{)|\{[^{}]*\}))*"/,alias:"singleline",inside:{interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\$(?:[a-z_]\w*|\{[^{}]*\})/i,lookbehind:!0,inside:t},string:/[\s\S]+/}}],char:{pattern:/'(?:[^'\\\r\n]|\\(?:.|u[a-fA-F0-9]{0,4}))'/,greedy:!0}}),delete e.languages.kotlin.string,e.languages.insertBefore("kotlin","keyword",{annotation:{pattern:/\B@(?:\w+:)?(?:[A-Z]\w*|\[[^\]]+\])/,alias:"builtin"}}),e.languages.insertBefore("kotlin","function",{label:{pattern:/\b\w+@|@\w+\b/,alias:"symbol"}}),e.languages.kt=e.languages.kotlin,e.languages.kts=e.languages.kotlin}(O),O.languages.c=O.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|[?:~]|[-+*/%&|^!=<>]=?/}),O.languages.insertBefore("c","string",{char:{pattern:/'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n]){0,32}'/,greedy:!0}}),O.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},O.languages.c.string],char:O.languages.c.char,comment:O.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:O.languages.c}}}}),O.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 O.languages.c.boolean,O.languages.objectivec=O.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 O.languages.objectivec["class-name"],O.languages.objc=O.languages.objectivec,O.languages.reason=O.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/}),O.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 O.languages.reason.function,function(e){for(var t=/\/\*(?:[^*/]|\*(?!\/)|\/(?!\*)|<self>)*\*\//.source,n=0;n<2;n++)t=t.replace(/<self>/g,(function(){return t}));t=t.replace(/<self>/g,(function(){return/[^\s\S]/.source})),e.languages.rust={comment:[{pattern:RegExp(/(^|[^\\])/.source+t),lookbehind:!0,greedy:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0}],string:{pattern:/b?"(?:\\[\s\S]|[^\\"])*"|b?r(#*)"(?:[^"]|"(?!\1))*"\1/,greedy:!0},char:{pattern:/b?'(?:\\(?:x[0-7][\da-fA-F]|u\{(?:[\da-fA-F]_*){1,6}\}|.)|[^\\\r\n\t'])'/,greedy:!0},attribute:{pattern:/#!?\[(?:[^\[\]"]|"(?:\\[\s\S]|[^\\"])*")*\]/,greedy:!0,alias:"attr-name",inside:{string:null}},"closure-params":{pattern:/([=(,:]\s*|\bmove\s*)\|[^|]*\||\|[^|]*\|(?=\s*(?:\{|->))/,lookbehind:!0,greedy:!0,inside:{"closure-punctuation":{pattern:/^\||\|$/,alias:"punctuation"},rest:null}},"lifetime-annotation":{pattern:/'\w+/,alias:"symbol"},"fragment-specifier":{pattern:/(\$\w+:)[a-z]+/,lookbehind:!0,alias:"punctuation"},variable:/\$\w+/,"function-definition":{pattern:/(\bfn\s+)\w+/,lookbehind:!0,alias:"function"},"type-definition":{pattern:/(\b(?:enum|struct|trait|type|union)\s+)\w+/,lookbehind:!0,alias:"class-name"},"module-declaration":[{pattern:/(\b(?:crate|mod)\s+)[a-z][a-z_\d]*/,lookbehind:!0,alias:"namespace"},{pattern:/(\b(?:crate|self|super)\s*)::\s*[a-z][a-z_\d]*\b(?:\s*::(?:\s*[a-z][a-z_\d]*\s*::)*)?/,lookbehind:!0,alias:"namespace",inside:{punctuation:/::/}}],keyword:[/\b(?:Self|abstract|as|async|await|become|box|break|const|continue|crate|do|dyn|else|enum|extern|final|fn|for|if|impl|in|let|loop|macro|match|mod|move|mut|override|priv|pub|ref|return|self|static|struct|super|trait|try|type|typeof|union|unsafe|unsized|use|virtual|where|while|yield)\b/,/\b(?:bool|char|f(?:32|64)|[ui](?:8|16|32|64|128|size)|str)\b/],function:/\b[a-z_]\w*(?=\s*(?:::\s*<|\())/,macro:{pattern:/\b\w+!/,alias:"property"},constant:/\b[A-Z_][A-Z_\d]+\b/,"class-name":/\b[A-Z]\w*\b/,namespace:{pattern:/(?:\b[a-z][a-z_\d]*\s*::\s*)*\b[a-z][a-z_\d]*\s*::(?!\s*<)/,inside:{punctuation:/::/}},number:/\b(?:0x[\dA-Fa-f](?:_?[\dA-Fa-f])*|0o[0-7](?:_?[0-7])*|0b[01](?:_?[01])*|(?:(?:\d(?:_?\d)*)?\.)?\d(?:_?\d)*(?:[Ee][+-]?\d+)?)(?:_?(?:f32|f64|[iu](?:8|16|32|64|size)?))?\b/,boolean:/\b(?:false|true)\b/,punctuation:/->|\.\.=|\.{1,3}|::|[{}[\];(),:]/,operator:/[-+*\/%!^]=?|=[=>]?|&[&=]?|\|[|=]?|<<?=?|>>?=?|[@?]/},e.languages.rust["closure-params"].inside.rest=e.languages.rust,e.languages.rust.attribute.inside.string=e.languages.rust.string}(O),O.languages.go=O.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/}),O.languages.insertBefore("go","string",{char:{pattern:/'(?:\\.|[^'\\\r\n]){0,10}'/,greedy:!0}}),delete O.languages.go["class-name"],function(e){var t=/\b(?:alignas|alignof|asm|auto|bool|break|case|catch|char|char16_t|char32_t|char8_t|class|co_await|co_return|co_yield|compl|concept|const|const_cast|consteval|constexpr|constinit|continue|decltype|default|delete|do|double|dynamic_cast|else|enum|explicit|export|extern|final|float|for|friend|goto|if|import|inline|int|int16_t|int32_t|int64_t|int8_t|long|module|mutable|namespace|new|noexcept|nullptr|operator|override|private|protected|public|register|reinterpret_cast|requires|return|short|signed|sizeof|static|static_assert|static_cast|struct|switch|template|this|thread_local|throw|try|typedef|typeid|typename|uint16_t|uint32_t|uint64_t|uint8_t|union|unsigned|using|virtual|void|volatile|wchar_t|while)\b/,n=/\b(?!<keyword>)\w+(?:\s*\.\s*\w+)*\b/.source.replace(/<keyword>/g,(function(){return t.source}));e.languages.cpp=e.languages.extend("c",{"class-name":[{pattern:RegExp(/(\b(?:class|concept|enum|struct|typename)\s+)(?!<keyword>)\w+/.source.replace(/<keyword>/g,(function(){return t.source}))),lookbehind:!0},/\b[A-Z]\w*(?=\s*::\s*\w+\s*\()/,/\b[A-Z_]\w*(?=\s*::\s*~\w+\s*\()/i,/\b\w+(?=\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>\s*::\s*\w+\s*\()/],keyword:t,number:{pattern:/(?:\b0b[01']+|\b0x(?:[\da-f']+(?:\.[\da-f']*)?|\.[\da-f']+)(?:p[+-]?[\d']+)?|(?:\b[\d']+(?:\.[\d']*)?|\B\.[\d']+)(?:e[+-]?[\d']+)?)[ful]{0,4}/i,greedy:!0},operator:/>>=?|<<=?|->|--|\+\+|&&|\|\||[?:~]|<=>|[-+*/%&|^!=<>]=?|\b(?:and|and_eq|bitand|bitor|not|not_eq|or|or_eq|xor|xor_eq)\b/,boolean:/\b(?:false|true)\b/}),e.languages.insertBefore("cpp","string",{module:{pattern:RegExp(/(\b(?:import|module)\s+)/.source+"(?:"+/"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|<[^<>\r\n]*>/.source+"|"+/<mod-name>(?:\s*:\s*<mod-name>)?|:\s*<mod-name>/.source.replace(/<mod-name>/g,(function(){return n}))+")"),lookbehind:!0,greedy:!0,inside:{string:/^[<"][\s\S]+/,operator:/:/,punctuation:/\./}},"raw-string":{pattern:/R"([^()\\ ]{0,16})\([\s\S]*?\)\1"/,alias:"string",greedy:!0}}),e.languages.insertBefore("cpp","keyword",{"generic-function":{pattern:/\b(?!operator\b)[a-z_]\w*\s*<(?:[^<>]|<[^<>]*>)*>(?=\s*\()/i,inside:{function:/^\w+/,generic:{pattern:/<[\s\S]+/,alias:"class-name",inside:e.languages.cpp}}}}),e.languages.insertBefore("cpp","operator",{"double-colon":{pattern:/::/,alias:"punctuation"}}),e.languages.insertBefore("cpp","class-name",{"base-clause":{pattern:/(\b(?:class|struct)\s+\w+\s*:\s*)[^;{}"'\s]+(?:\s+[^;{}"'\s]+)*(?=\s*[;{])/,lookbehind:!0,greedy:!0,inside:e.languages.extend("cpp",{})}}),e.languages.insertBefore("inside","double-colon",{"class-name":/\b[a-z_]\w*\b(?!\s*::)/i},e.languages.cpp["base-clause"])}(O),O.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:/[{}[\];(),.:]/},O.languages.python["string-interpolation"].inside.interpolation.inside.rest=O.languages.python,O.languages.py=O.languages.python;((e,t)=>{for(var n in t)p(e,n,{get:t[n],enumerable:!0})})({},{dracula:()=>P,duotoneDark:()=>j,duotoneLight:()=>C,github:()=>T,jettwaveDark:()=>H,jettwaveLight:()=>q,nightOwl:()=>I,nightOwlLight:()=>A,oceanicNext:()=>R,okaidia:()=>D,oneDark:()=>V,oneLight:()=>Q,palenight:()=>F,shadesOfPurple:()=>M,synthwave84:()=>B,ultramin:()=>z,vsDark:()=>U,vsLight:()=>$});var P={plain:{color:"#F8F8F2",backgroundColor:"#282A36"},styles:[{types:["prolog","constant","builtin"],style:{color:"rgb(189, 147, 249)"}},{types:["inserted","function"],style:{color:"rgb(80, 250, 123)"}},{types:["deleted"],style:{color:"rgb(255, 85, 85)"}},{types:["changed"],style:{color:"rgb(255, 184, 108)"}},{types:["punctuation","symbol"],style:{color:"rgb(248, 248, 242)"}},{types:["string","char","tag","selector"],style:{color:"rgb(255, 121, 198)"}},{types:["keyword","variable"],style:{color:"rgb(189, 147, 249)",fontStyle:"italic"}},{types:["comment"],style:{color:"rgb(98, 114, 164)"}},{types:["attr-name"],style:{color:"rgb(241, 250, 140)"}}]},j={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"}}]},C={plain:{backgroundColor:"#faf8f5",color:"#728fcb"},styles:[{types:["comment","prolog","doctype","cdata","punctuation"],style:{color:"#b6ad9a"}},{types:["namespace"],style:{opacity:.7}},{types:["tag","operator","number"],style:{color:"#063289"}},{types:["property","function"],style:{color:"#b29762"}},{types:["tag-id","selector","atrule-id"],style:{color:"#2d2006"}},{types:["attr-name"],style:{color:"#896724"}},{types:["boolean","string","entity","url","attr-value","keyword","control","directive","unit","statement","regex","atrule"],style:{color:"#728fcb"}},{types:["placeholder","variable"],style:{color:"#93abdc"}},{types:["deleted"],style:{textDecorationLine:"line-through"}},{types:["inserted"],style:{textDecorationLine:"underline"}},{types:["italic"],style:{fontStyle:"italic"}},{types:["important","bold"],style:{fontWeight:"bold"}},{types:["important"],style:{color:"#896724"}}]},T={plain:{color:"#393A34",backgroundColor:"#f6f8fa"},styles:[{types:["comment","prolog","doctype","cdata"],style:{color:"#999988",fontStyle:"italic"}},{types:["namespace"],style:{opacity:.7}},{types:["string","attr-value"],style:{color:"#e3116c"}},{types:["punctuation","operator"],style:{color:"#393A34"}},{types:["entity","url","symbol","number","boolean","variable","constant","property","regex","inserted"],style:{color:"#36acaa"}},{types:["atrule","keyword","attr-name","selector"],style:{color:"#00a4db"}},{types:["function","deleted","tag"],style:{color:"#d73a49"}},{types:["function-variable"],style:{color:"#6f42c1"}},{types:["tag","selector","keyword"],style:{color:"#00009f"}}]},I={plain:{color:"#d6deeb",backgroundColor:"#011627"},styles:[{types:["changed"],style:{color:"rgb(162, 191, 252)",fontStyle:"italic"}},{types:["deleted"],style:{color:"rgba(239, 83, 80, 0.56)",fontStyle:"italic"}},{types:["inserted","attr-name"],style:{color:"rgb(173, 219, 103)",fontStyle:"italic"}},{types:["comment"],style:{color:"rgb(99, 119, 119)",fontStyle:"italic"}},{types:["string","url"],style:{color:"rgb(173, 219, 103)"}},{types:["variable"],style:{color:"rgb(214, 222, 235)"}},{types:["number"],style:{color:"rgb(247, 140, 108)"}},{types:["builtin","char","constant","function"],style:{color:"rgb(130, 170, 255)"}},{types:["punctuation"],style:{color:"rgb(199, 146, 234)"}},{types:["selector","doctype"],style:{color:"rgb(199, 146, 234)",fontStyle:"italic"}},{types:["class-name"],style:{color:"rgb(255, 203, 139)"}},{types:["tag","operator","keyword"],style:{color:"rgb(127, 219, 202)"}},{types:["boolean"],style:{color:"rgb(255, 88, 116)"}},{types:["property"],style:{color:"rgb(128, 203, 196)"}},{types:["namespace"],style:{color:"rgb(178, 204, 214)"}}]},A={plain:{color:"#403f53",backgroundColor:"#FBFBFB"},styles:[{types:["changed"],style:{color:"rgb(162, 191, 252)",fontStyle:"italic"}},{types:["deleted"],style:{color:"rgba(239, 83, 80, 0.56)",fontStyle:"italic"}},{types:["inserted","attr-name"],style:{color:"rgb(72, 118, 214)",fontStyle:"italic"}},{types:["comment"],style:{color:"rgb(152, 159, 177)",fontStyle:"italic"}},{types:["string","builtin","char","constant","url"],style:{color:"rgb(72, 118, 214)"}},{types:["variable"],style:{color:"rgb(201, 103, 101)"}},{types:["number"],style:{color:"rgb(170, 9, 130)"}},{types:["punctuation"],style:{color:"rgb(153, 76, 195)"}},{types:["function","selector","doctype"],style:{color:"rgb(153, 76, 195)",fontStyle:"italic"}},{types:["class-name"],style:{color:"rgb(17, 17, 17)"}},{types:["tag"],style:{color:"rgb(153, 76, 195)"}},{types:["operator","property","keyword","namespace"],style:{color:"rgb(12, 150, 155)"}},{types:["boolean"],style:{color:"rgb(188, 84, 84)"}}]},N="#c5a5c5",L="#8dc891",R={plain:{backgroundColor:"#282c34",color:"#ffffff"},styles:[{types:["attr-name"],style:{color:N}},{types:["attr-value"],style:{color:L}},{types:["comment","block-comment","prolog","doctype","cdata","shebang"],style:{color:"#999999"}},{types:["property","number","function-name","constant","symbol","deleted"],style:{color:"#5a9bcf"}},{types:["boolean"],style:{color:"#ff8b50"}},{types:["tag"],style:{color:"#fc929e"}},{types:["string"],style:{color:L}},{types:["punctuation"],style:{color:L}},{types:["selector","char","builtin","inserted"],style:{color:"#D8DEE9"}},{types:["function"],style:{color:"#79b6f2"}},{types:["operator","entity","url","variable"],style:{color:"#d7deea"}},{types:["keyword"],style:{color:N}},{types:["atrule","class-name"],style:{color:"#FAC863"}},{types:["important"],style:{fontWeight:"400"}},{types:["bold"],style:{fontWeight:"bold"}},{types:["italic"],style:{fontStyle:"italic"}},{types:["namespace"],style:{opacity:.7}}]},D={plain:{color:"#f8f8f2",backgroundColor:"#272822"},styles:[{types:["changed"],style:{color:"rgb(162, 191, 252)",fontStyle:"italic"}},{types:["deleted"],style:{color:"#f92672",fontStyle:"italic"}},{types:["inserted"],style:{color:"rgb(173, 219, 103)",fontStyle:"italic"}},{types:["comment"],style:{color:"#8292a2",fontStyle:"italic"}},{types:["string","url"],style:{color:"#a6e22e"}},{types:["variable"],style:{color:"#f8f8f2"}},{types:["number"],style:{color:"#ae81ff"}},{types:["builtin","char","constant","function","class-name"],style:{color:"#e6db74"}},{types:["punctuation"],style:{color:"#f8f8f2"}},{types:["selector","doctype"],style:{color:"#a6e22e",fontStyle:"italic"}},{types:["tag","operator","keyword"],style:{color:"#66d9ef"}},{types:["boolean"],style:{color:"#ae81ff"}},{types:["namespace"],style:{color:"rgb(178, 204, 214)",opacity:.7}},{types:["tag","property"],style:{color:"#f92672"}},{types:["attr-name"],style:{color:"#a6e22e !important"}},{types:["doctype"],style:{color:"#8292a2"}},{types:["rule"],style:{color:"#e6db74"}}]},F={plain:{color:"#bfc7d5",backgroundColor:"#292d3e"},styles:[{types:["comment"],style:{color:"rgb(105, 112, 152)",fontStyle:"italic"}},{types:["string","inserted"],style:{color:"rgb(195, 232, 141)"}},{types:["number"],style:{color:"rgb(247, 140, 108)"}},{types:["builtin","char","constant","function"],style:{color:"rgb(130, 170, 255)"}},{types:["punctuation","selector"],style:{color:"rgb(199, 146, 234)"}},{types:["variable"],style:{color:"rgb(191, 199, 213)"}},{types:["class-name","attr-name"],style:{color:"rgb(255, 203, 107)"}},{types:["tag","deleted"],style:{color:"rgb(255, 85, 114)"}},{types:["operator"],style:{color:"rgb(137, 221, 255)"}},{types:["boolean"],style:{color:"rgb(255, 88, 116)"}},{types:["keyword"],style:{fontStyle:"italic"}},{types:["doctype"],style:{color:"rgb(199, 146, 234)",fontStyle:"italic"}},{types:["namespace"],style:{color:"rgb(178, 204, 214)"}},{types:["url"],style:{color:"rgb(221, 221, 221)"}}]},M={plain:{color:"#9EFEFF",backgroundColor:"#2D2A55"},styles:[{types:["changed"],style:{color:"rgb(255, 238, 128)"}},{types:["deleted"],style:{color:"rgba(239, 83, 80, 0.56)"}},{types:["inserted"],style:{color:"rgb(173, 219, 103)"}},{types:["comment"],style:{color:"rgb(179, 98, 255)",fontStyle:"italic"}},{types:["punctuation"],style:{color:"rgb(255, 255, 255)"}},{types:["constant"],style:{color:"rgb(255, 98, 140)"}},{types:["string","url"],style:{color:"rgb(165, 255, 144)"}},{types:["variable"],style:{color:"rgb(255, 238, 128)"}},{types:["number","boolean"],style:{color:"rgb(255, 98, 140)"}},{types:["attr-name"],style:{color:"rgb(255, 180, 84)"}},{types:["keyword","operator","property","namespace","tag","selector","doctype"],style:{color:"rgb(255, 157, 0)"}},{types:["builtin","char","constant","function","class-name"],style:{color:"rgb(250, 208, 0)"}}]},B={plain:{backgroundColor:"linear-gradient(to bottom, #2a2139 75%, #34294f)",backgroundImage:"#34294f",color:"#f92aad",textShadow:"0 0 2px #100c0f, 0 0 5px #dc078e33, 0 0 10px #fff3"},styles:[{types:["comment","block-comment","prolog","doctype","cdata"],style:{color:"#495495",fontStyle:"italic"}},{types:["punctuation"],style:{color:"#ccc"}},{types:["tag","attr-name","namespace","number","unit","hexcode","deleted"],style:{color:"#e2777a"}},{types:["property","selector"],style:{color:"#72f1b8",textShadow:"0 0 2px #100c0f, 0 0 10px #257c5575, 0 0 35px #21272475"}},{types:["function-name"],style:{color:"#6196cc"}},{types:["boolean","selector-id","function"],style:{color:"#fdfdfd",textShadow:"0 0 2px #001716, 0 0 3px #03edf975, 0 0 5px #03edf975, 0 0 8px #03edf975"}},{types:["class-name","maybe-class-name","builtin"],style:{color:"#fff5f6",textShadow:"0 0 2px #000, 0 0 10px #fc1f2c75, 0 0 5px #fc1f2c75, 0 0 25px #fc1f2c75"}},{types:["constant","symbol"],style:{color:"#f92aad",textShadow:"0 0 2px #100c0f, 0 0 5px #dc078e33, 0 0 10px #fff3"}},{types:["important","atrule","keyword","selector-class"],style:{color:"#f4eee4",textShadow:"0 0 2px #393a33, 0 0 8px #f39f0575, 0 0 2px #f39f0575"}},{types:["string","char","attr-value","regex","variable"],style:{color:"#f87c32"}},{types:["parameter"],style:{fontStyle:"italic"}},{types:["entity","url"],style:{color:"#67cdcc"}},{types:["operator"],style:{color:"ffffffee"}},{types:["important","bold"],style:{fontWeight:"bold"}},{types:["italic"],style:{fontStyle:"italic"}},{types:["entity"],style:{cursor:"help"}},{types:["inserted"],style:{color:"green"}}]},z={plain:{color:"#282a2e",backgroundColor:"#ffffff"},styles:[{types:["comment"],style:{color:"rgb(197, 200, 198)"}},{types:["string","number","builtin","variable"],style:{color:"rgb(150, 152, 150)"}},{types:["class-name","function","tag","attr-name"],style:{color:"rgb(40, 42, 46)"}}]},U={plain:{color:"#9CDCFE",backgroundColor:"#1E1E1E"},styles:[{types:["prolog"],style:{color:"rgb(0, 0, 128)"}},{types:["comment"],style:{color:"rgb(106, 153, 85)"}},{types:["builtin","changed","keyword","interpolation-punctuation"],style:{color:"rgb(86, 156, 214)"}},{types:["number","inserted"],style:{color:"rgb(181, 206, 168)"}},{types:["constant"],style:{color:"rgb(100, 102, 149)"}},{types:["attr-name","variable"],style:{color:"rgb(156, 220, 254)"}},{types:["deleted","string","attr-value","template-punctuation"],style:{color:"rgb(206, 145, 120)"}},{types:["selector"],style:{color:"rgb(215, 186, 125)"}},{types:["tag"],style:{color:"rgb(78, 201, 176)"}},{types:["tag"],languages:["markup"],style:{color:"rgb(86, 156, 214)"}},{types:["punctuation","operator"],style:{color:"rgb(212, 212, 212)"}},{types:["punctuation"],languages:["markup"],style:{color:"#808080"}},{types:["function"],style:{color:"rgb(220, 220, 170)"}},{types:["class-name"],style:{color:"rgb(78, 201, 176)"}},{types:["char"],style:{color:"rgb(209, 105, 105)"}}]},$={plain:{color:"#000000",backgroundColor:"#ffffff"},styles:[{types:["comment"],style:{color:"rgb(0, 128, 0)"}},{types:["builtin"],style:{color:"rgb(0, 112, 193)"}},{types:["number","variable","inserted"],style:{color:"rgb(9, 134, 88)"}},{types:["operator"],style:{color:"rgb(0, 0, 0)"}},{types:["constant","char"],style:{color:"rgb(129, 31, 63)"}},{types:["tag"],style:{color:"rgb(128, 0, 0)"}},{types:["attr-name"],style:{color:"rgb(255, 0, 0)"}},{types:["deleted","string"],style:{color:"rgb(163, 21, 21)"}},{types:["changed","punctuation"],style:{color:"rgb(4, 81, 165)"}},{types:["function","keyword"],style:{color:"rgb(0, 0, 255)"}},{types:["class-name"],style:{color:"rgb(38, 127, 153)"}}]},H={plain:{color:"#f8fafc",backgroundColor:"#011627"},styles:[{types:["prolog"],style:{color:"#000080"}},{types:["comment"],style:{color:"#6A9955"}},{types:["builtin","changed","keyword","interpolation-punctuation"],style:{color:"#569CD6"}},{types:["number","inserted"],style:{color:"#B5CEA8"}},{types:["constant"],style:{color:"#f8fafc"}},{types:["attr-name","variable"],style:{color:"#9CDCFE"}},{types:["deleted","string","attr-value","template-punctuation"],style:{color:"#cbd5e1"}},{types:["selector"],style:{color:"#D7BA7D"}},{types:["tag"],style:{color:"#0ea5e9"}},{types:["tag"],languages:["markup"],style:{color:"#0ea5e9"}},{types:["punctuation","operator"],style:{color:"#D4D4D4"}},{types:["punctuation"],languages:["markup"],style:{color:"#808080"}},{types:["function"],style:{color:"#7dd3fc"}},{types:["class-name"],style:{color:"#0ea5e9"}},{types:["char"],style:{color:"#D16969"}}]},q={plain:{color:"#0f172a",backgroundColor:"#f1f5f9"},styles:[{types:["prolog"],style:{color:"#000080"}},{types:["comment"],style:{color:"#6A9955"}},{types:["builtin","changed","keyword","interpolation-punctuation"],style:{color:"#0c4a6e"}},{types:["number","inserted"],style:{color:"#B5CEA8"}},{types:["constant"],style:{color:"#0f172a"}},{types:["attr-name","variable"],style:{color:"#0c4a6e"}},{types:["deleted","string","attr-value","template-punctuation"],style:{color:"#64748b"}},{types:["selector"],style:{color:"#D7BA7D"}},{types:["tag"],style:{color:"#0ea5e9"}},{types:["tag"],languages:["markup"],style:{color:"#0ea5e9"}},{types:["punctuation","operator"],style:{color:"#475569"}},{types:["punctuation"],languages:["markup"],style:{color:"#808080"}},{types:["function"],style:{color:"#0e7490"}},{types:["class-name"],style:{color:"#0ea5e9"}},{types:["char"],style:{color:"#D16969"}}]},V={plain:{backgroundColor:"hsl(220, 13%, 18%)",color:"hsl(220, 14%, 71%)",textShadow:"0 1px rgba(0, 0, 0, 0.3)"},styles:[{types:["comment","prolog","cdata"],style:{color:"hsl(220, 10%, 40%)"}},{types:["doctype","punctuation","entity"],style:{color:"hsl(220, 14%, 71%)"}},{types:["attr-name","class-name","maybe-class-name","boolean","constant","number","atrule"],style:{color:"hsl(29, 54%, 61%)"}},{types:["keyword"],style:{color:"hsl(286, 60%, 67%)"}},{types:["property","tag","symbol","deleted","important"],style:{color:"hsl(355, 65%, 65%)"}},{types:["selector","string","char","builtin","inserted","regex","attr-value"],style:{color:"hsl(95, 38%, 62%)"}},{types:["variable","operator","function"],style:{color:"hsl(207, 82%, 66%)"}},{types:["url"],style:{color:"hsl(187, 47%, 55%)"}},{types:["deleted"],style:{textDecorationLine:"line-through"}},{types:["inserted"],style:{textDecorationLine:"underline"}},{types:["italic"],style:{fontStyle:"italic"}},{types:["important","bold"],style:{fontWeight:"bold"}},{types:["important"],style:{color:"hsl(220, 14%, 71%)"}}]},Q={plain:{backgroundColor:"hsl(230, 1%, 98%)",color:"hsl(230, 8%, 24%)"},styles:[{types:["comment","prolog","cdata"],style:{color:"hsl(230, 4%, 64%)"}},{types:["doctype","punctuation","entity"],style:{color:"hsl(230, 8%, 24%)"}},{types:["attr-name","class-name","boolean","constant","number","atrule"],style:{color:"hsl(35, 99%, 36%)"}},{types:["keyword"],style:{color:"hsl(301, 63%, 40%)"}},{types:["property","tag","symbol","deleted","important"],style:{color:"hsl(5, 74%, 59%)"}},{types:["selector","string","char","builtin","inserted","regex","attr-value","punctuation"],style:{color:"hsl(119, 34%, 47%)"}},{types:["variable","operator","function"],style:{color:"hsl(221, 87%, 60%)"}},{types:["url"],style:{color:"hsl(198, 99%, 37%)"}},{types:["deleted"],style:{textDecorationLine:"line-through"}},{types:["inserted"],style:{textDecorationLine:"underline"}},{types:["italic"],style:{fontStyle:"italic"}},{types:["important","bold"],style:{fontWeight:"bold"}},{types:["important"],style:{color:"hsl(230, 8%, 24%)"}}]},Z=(e,t)=>{const{plain:n}=e,r=e.styles.reduce(((e,n)=>{const{languages:r,style:o}=n;return r&&!r.includes(t)||n.types.forEach((t=>{const n=S(S({},e[t]),o);e[t]=n})),e}),{});return r.root=n,r.plain=_(S({},n),{backgroundColor:void 0}),r},W=/\r\n|\r|\n/,G=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)},Y=(e,t)=>{const n=e.length;return n>0&&e[n-1]===t?e:e.concat(t)},K=e=>{const t=[[]],n=[e],r=[0],o=[e.length];let a=0,i=0,s=[];const l=[s];for(;i>-1;){for(;(a=r[i]++)<o[i];){let e,c=t[i];const u=n[i][a];if("string"==typeof u?(c=i>0?c:["plain"],e=u):(c=Y(c,u.type),u.alias&&(c=Y(c,u.alias)),e=u.content),"string"!=typeof e){i++,t.push(c),n.push(e),r.push(0),o.push(e.length);continue}const d=e.split(W),p=d.length;s.push({types:c,content:d[0]});for(let t=1;t<p;t++)G(s),l.push(s=[]),s.push({types:c,content:d[t]})}i--,t.pop(),n.pop(),r.pop(),o.pop()}return G(s),l},X=({children:e,language:t,code:n,theme:o,prism:i})=>{const s=t.toLowerCase(),l=((e,t)=>{const[n,o]=(0,r.useState)(Z(t,e)),a=(0,r.useRef)(),i=(0,r.useRef)();return(0,r.useEffect)((()=>{t===a.current&&e===i.current||(a.current=t,i.current=e,o(Z(t,e)))}),[e,t]),n})(s,o),c=(e=>(0,r.useCallback)((t=>{var n=t,{className:r,style:o,line:i}=n,s=x(n,["className","style","line"]);const l=_(S({},s),{className:a("token-line",r)});return"object"==typeof e&&"plain"in e&&(l.style=e.plain),"object"==typeof o&&(l.style=S(S({},l.style||{}),o)),l}),[e]))(l),u=(e=>{const t=(0,r.useCallback)((({types:t,empty:n})=>{if(null!=e)return 1===t.length&&"plain"===t[0]?null!=n?{display:"inline-block"}:void 0:1===t.length&&null!=n?e[t[0]]:Object.assign(null!=n?{display:"inline-block"}:{},...t.map((t=>e[t])))}),[e]);return(0,r.useCallback)((e=>{var n=e,{token:r,className:o,style:i}=n,s=x(n,["token","className","style"]);const l=_(S({},s),{className:a("token",...r.types,o),children:r.content,style:t(r)});return null!=i&&(l.style=S(S({},l.style||{}),i)),l}),[t])})(l),d=(({prism:e,code:t,grammar:n,language:o})=>{const a=(0,r.useRef)(e);return(0,r.useMemo)((()=>{if(null==n)return K([t]);const e={code:t,grammar:n,language:o,tokens:[]};return a.current.hooks.run("before-tokenize",e),e.tokens=a.current.tokenize(t,n),a.current.hooks.run("after-tokenize",e),K(e.tokens)}),[t,n,o])})({prism:i,language:s,code:n,grammar:i.languages[s]});return e({tokens:d,className:`prism-code language-${s}`,style:null!=l?l.root:{},getLineProps:c,getTokenProps:u})},J=e=>(0,r.createElement)(X,_(S({},e),{prism:e.prism||O,theme:e.theme||U,code:e.code,language:e.language}))},38776:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var r=!0,o="Invariant failed";function a(e,t){if(!e){if(r)throw new Error(o);var n="function"==typeof t?t():t,a=n?"".concat(o,": ").concat(n):o;throw new Error(a)}}},97582:(e,t,n)=>{"use strict";n.r(t),n.d(t,{__addDisposableResource:()=>L,__assign:()=>a,__asyncDelegator:()=>E,__asyncGenerator:()=>x,__asyncValues:()=>O,__await:()=>_,__awaiter:()=>g,__classPrivateFieldGet:()=>I,__classPrivateFieldIn:()=>N,__classPrivateFieldSet:()=>A,__createBinding:()=>h,__decorate:()=>s,__disposeResources:()=>D,__esDecorate:()=>c,__exportStar:()=>b,__extends:()=>o,__generator:()=>m,__importDefault:()=>T,__importStar:()=>C,__makeTemplateObject:()=>P,__metadata:()=>f,__param:()=>l,__propKey:()=>d,__read:()=>v,__rest:()=>i,__runInitializers:()=>u,__setFunctionName:()=>p,__spread:()=>w,__spreadArray:()=>S,__spreadArrays:()=>k,__values:()=>y,default:()=>F});var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])},r(e,t)};function o(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}var a=function(){return a=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var o in t=arguments[n])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e},a.apply(this,arguments)};function i(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var o=0;for(r=Object.getOwnPropertySymbols(e);o<r.length;o++)t.indexOf(r[o])<0&&Object.prototype.propertyIsEnumerable.call(e,r[o])&&(n[r[o]]=e[r[o]])}return n}function s(e,t,n,r){var o,a=arguments.length,i=a<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,n):r;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)i=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(i=(a<3?o(i):a>3?o(t,n,i):o(t,n))||i);return a>3&&i&&Object.defineProperty(t,n,i),i}function l(e,t){return function(n,r){t(n,r,e)}}function c(e,t,n,r,o,a){function i(e){if(void 0!==e&&"function"!=typeof e)throw new TypeError("Function expected");return e}for(var s,l=r.kind,c="getter"===l?"get":"setter"===l?"set":"value",u=!t&&e?r.static?e:e.prototype:null,d=t||(u?Object.getOwnPropertyDescriptor(u,r.name):{}),p=!1,f=n.length-1;f>=0;f--){var g={};for(var m in r)g[m]="access"===m?{}:r[m];for(var m in r.access)g.access[m]=r.access[m];g.addInitializer=function(e){if(p)throw new TypeError("Cannot add initializers after decoration has completed");a.push(i(e||null))};var h=(0,n[f])("accessor"===l?{get:d.get,set:d.set}:d[c],g);if("accessor"===l){if(void 0===h)continue;if(null===h||"object"!=typeof h)throw new TypeError("Object expected");(s=i(h.get))&&(d.get=s),(s=i(h.set))&&(d.set=s),(s=i(h.init))&&o.unshift(s)}else(s=i(h))&&("field"===l?o.unshift(s):d[c]=s)}u&&Object.defineProperty(u,r.name,d),p=!0}function u(e,t,n){for(var r=arguments.length>2,o=0;o<t.length;o++)n=r?t[o].call(e,n):t[o].call(e);return r?n:void 0}function d(e){return"symbol"==typeof e?e:"".concat(e)}function p(e,t,n){return"symbol"==typeof t&&(t=t.description?"[".concat(t.description,"]"):""),Object.defineProperty(e,"name",{configurable:!0,value:n?"".concat(n," ",t):t})}function f(e,t){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(e,t)}function g(e,t,n,r){return new(n||(n=Promise))((function(o,a){function i(e){try{l(r.next(e))}catch(t){a(t)}}function s(e){try{l(r.throw(e))}catch(t){a(t)}}function l(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(i,s)}l((r=r.apply(e,t||[])).next())}))}function m(e,t){var n,r,o,a,i={label:0,sent:function(){if(1&o[0])throw o[1];return o[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(l){return function(s){if(n)throw new TypeError("Generator is already executing.");for(;a&&(a=0,s[0]&&(i=0)),i;)try{if(n=1,r&&(o=2&s[0]?r.return:s[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,s[1])).done)return o;switch(r=0,o&&(s=[2&s[0],o.value]),s[0]){case 0:case 1:o=s;break;case 4:return i.label++,{value:s[1],done:!1};case 5:i.label++,r=s[1],s=[0];continue;case 7:s=i.ops.pop(),i.trys.pop();continue;default:if(!(o=i.trys,(o=o.length>0&&o[o.length-1])||6!==s[0]&&2!==s[0])){i=0;continue}if(3===s[0]&&(!o||s[1]>o[0]&&s[1]<o[3])){i.label=s[1];break}if(6===s[0]&&i.label<o[1]){i.label=o[1],o=s;break}if(o&&i.label<o[2]){i.label=o[2],i.ops.push(s);break}o[2]&&i.ops.pop(),i.trys.pop();continue}s=t.call(e,i)}catch(l){s=[6,l],r=0}finally{n=o=0}if(5&s[0])throw s[1];return{value:s[0]?s[1]:void 0,done:!0}}([s,l])}}}var h=Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]};function b(e,t){for(var n in e)"default"===n||Object.prototype.hasOwnProperty.call(t,n)||h(t,e,n)}function y(e){var t="function"==typeof Symbol&&Symbol.iterator,n=t&&e[t],r=0;if(n)return n.call(e);if(e&&"number"==typeof e.length)return{next:function(){return e&&r>=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")}function v(e,t){var n="function"==typeof Symbol&&e[Symbol.iterator];if(!n)return e;var r,o,a=n.call(e),i=[];try{for(;(void 0===t||t-- >0)&&!(r=a.next()).done;)i.push(r.value)}catch(s){o={error:s}}finally{try{r&&!r.done&&(n=a.return)&&n.call(a)}finally{if(o)throw o.error}}return i}function w(){for(var e=[],t=0;t<arguments.length;t++)e=e.concat(v(arguments[t]));return e}function k(){for(var e=0,t=0,n=arguments.length;t<n;t++)e+=arguments[t].length;var r=Array(e),o=0;for(t=0;t<n;t++)for(var a=arguments[t],i=0,s=a.length;i<s;i++,o++)r[o]=a[i];return r}function S(e,t,n){if(n||2===arguments.length)for(var r,o=0,a=t.length;o<a;o++)!r&&o in t||(r||(r=Array.prototype.slice.call(t,0,o)),r[o]=t[o]);return e.concat(r||Array.prototype.slice.call(t))}function _(e){return this instanceof _?(this.v=e,this):new _(e)}function x(e,t,n){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var r,o=n.apply(e,t||[]),a=[];return r={},i("next"),i("throw"),i("return"),r[Symbol.asyncIterator]=function(){return this},r;function i(e){o[e]&&(r[e]=function(t){return new Promise((function(n,r){a.push([e,t,n,r])>1||s(e,t)}))})}function s(e,t){try{(n=o[e](t)).value instanceof _?Promise.resolve(n.value.v).then(l,c):u(a[0][2],n)}catch(r){u(a[0][3],r)}var n}function l(e){s("next",e)}function c(e){s("throw",e)}function u(e,t){e(t),a.shift(),a.length&&s(a[0][0],a[0][1])}}function E(e){var t,n;return t={},r("next"),r("throw",(function(e){throw e})),r("return"),t[Symbol.iterator]=function(){return this},t;function r(r,o){t[r]=e[r]?function(t){return(n=!n)?{value:_(e[r](t)),done:!1}:o?o(t):t}:o}}function O(e){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var t,n=e[Symbol.asyncIterator];return n?n.call(e):(e=y(e),t={},r("next"),r("throw"),r("return"),t[Symbol.asyncIterator]=function(){return this},t);function r(n){t[n]=e[n]&&function(t){return new Promise((function(r,o){(function(e,t,n,r){Promise.resolve(r).then((function(t){e({value:t,done:n})}),t)})(r,o,(t=e[n](t)).done,t.value)}))}}}function P(e,t){return Object.defineProperty?Object.defineProperty(e,"raw",{value:t}):e.raw=t,e}var j=Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t};function C(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&h(t,e,n);return j(t,e),t}function T(e){return e&&e.__esModule?e:{default:e}}function I(e,t,n,r){if("a"===n&&!r)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof t?e!==t||!r:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===n?r:"a"===n?r.call(e):r?r.value:t.get(e)}function A(e,t,n,r,o){if("m"===r)throw new TypeError("Private method is not writable");if("a"===r&&!o)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof t?e!==t||!o:!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===r?o.call(e,n):o?o.value=n:t.set(e,n),n}function N(e,t){if(null===t||"object"!=typeof t&&"function"!=typeof t)throw new TypeError("Cannot use 'in' operator on non-object");return"function"==typeof e?t===e:e.has(t)}function L(e,t,n){if(null!=t){if("object"!=typeof t&&"function"!=typeof t)throw new TypeError("Object expected.");var r;if(n){if(!Symbol.asyncDispose)throw new TypeError("Symbol.asyncDispose is not defined.");r=t[Symbol.asyncDispose]}if(void 0===r){if(!Symbol.dispose)throw new TypeError("Symbol.dispose is not defined.");r=t[Symbol.dispose]}if("function"!=typeof r)throw new TypeError("Object not disposable.");e.stack.push({value:t,dispose:r,async:n})}else n&&e.stack.push({async:!0});return t}var R="function"==typeof SuppressedError?SuppressedError:function(e,t,n){var r=new Error(n);return r.name="SuppressedError",r.error=e,r.suppressed=t,r};function D(e){function t(t){e.error=e.hasError?new R(t,e.error,"An error was suppressed during disposal."):t,e.hasError=!0}return function n(){for(;e.stack.length;){var r=e.stack.pop();try{var o=r.dispose&&r.dispose.call(r.value);if(r.async)return Promise.resolve(o).then(n,(function(e){return t(e),n()}))}catch(a){t(a)}}if(e.hasError)throw e.error}()}const F={__extends:o,__assign:a,__rest:i,__decorate:s,__param:l,__metadata:f,__awaiter:g,__generator:m,__createBinding:h,__exportStar:b,__values:y,__read:v,__spread:w,__spreadArrays:k,__spreadArray:S,__await:_,__asyncGenerator:x,__asyncDelegator:E,__asyncValues:O,__makeTemplateObject:P,__importStar:C,__importDefault:T,__classPrivateFieldGet:I,__classPrivateFieldSet:A,__classPrivateFieldIn:N,__addDisposableResource:L,__disposeResources:D}},57529:e=>{"use strict";e.exports=JSON.parse('{"cmfcmf/d-s-l.searchBar.placeholder":"Search...","cmfcmf/d-s-l.searchBar.noResults":"No results found.","cmfcmf/d-s-l.searchBar.clearButtonTitle":"Clear","cmfcmf/d-s-l.searchBar.detachedCancelButtonText":"Cancel","cmfcmf/d-s-l.searchBar.submitButtonTitle":"Submit","edition.budgie.description":"A feature-rich, luxurious desktop using the most modern technologies.","edition.plasma.description":"A sophisticated desktop experience for the tinkerers. Simple by default, powerful when needed.","edition.gnome.description":"A simple, streamlined desktop for more modern hardware.","edition.mate.description":"A traditional desktop for advanced users and older hardware.","edition.xfce.description":"A lightweight desktop that aims to be fast while still being friendly.","edition.card.configuration":"Configuration","edition.card.tipsntricks":"Tips & Tricks","theme.ErrorPageContent.title":"This page crashed.","theme.NotFound.title":"Page Not Found","theme.NotFound.p1":"We could not find what you were looking for.","theme.NotFound.p2":"Please contact the owner of the site that linked you to the original URL and let them know their link is broken.","theme.admonition.note":"note","theme.admonition.tip":"tip","theme.admonition.danger":"danger","theme.admonition.info":"info","theme.admonition.caution":"caution","theme.BackToTopButton.buttonAriaLabel":"Scroll back to top","theme.blog.archive.title":"Archive","theme.blog.archive.description":"Archive","theme.blog.paginator.navAriaLabel":"Blog list page navigation","theme.blog.paginator.newerEntries":"Newer Entries","theme.blog.paginator.olderEntries":"Older Entries","theme.blog.post.paginator.navAriaLabel":"Blog post page navigation","theme.blog.post.paginator.newerPost":"Newer Post","theme.blog.post.paginator.olderPost":"Older Post","theme.blog.post.plurals":"One post|{count} posts","theme.blog.tagTitle":"{nPosts} tagged with \\"{tagName}\\"","theme.tags.tagsPageLink":"View All Tags","theme.colorToggle.ariaLabel":"Switch between dark and light mode (currently {mode})","theme.colorToggle.ariaLabel.mode.dark":"dark mode","theme.colorToggle.ariaLabel.mode.light":"light mode","theme.docs.breadcrumbs.navAriaLabel":"Breadcrumbs","theme.docs.DocCard.categoryDescription":"{count} items","theme.docs.paginator.navAriaLabel":"Docs pages","theme.docs.paginator.previous":"Previous","theme.docs.paginator.next":"Next","theme.docs.tagDocListPageTitle.nDocsTagged":"One doc tagged|{count} docs tagged","theme.docs.tagDocListPageTitle":"{nDocsTagged} with \\"{tagName}\\"","theme.docs.versionBadge.label":"Version: {versionLabel}","theme.docs.versions.unreleasedVersionLabel":"This is unreleased documentation for {siteTitle} {versionLabel} version.","theme.docs.versions.unmaintainedVersionLabel":"This is documentation for {siteTitle} {versionLabel}, which is no longer actively maintained.","theme.docs.versions.latestVersionSuggestionLabel":"For up-to-date documentation, see the {latestVersionLink} ({versionLabel}).","theme.docs.versions.latestVersionLinkLabel":"latest version","theme.common.editThisPage":"Edit this page","theme.common.headingLinkTitle":"Direct link to {heading}","theme.lastUpdated.atDate":" on {date}","theme.lastUpdated.byUser":" by {user}","theme.lastUpdated.lastUpdatedAtBy":"Last updated{atDate}{byUser}","theme.navbar.mobileVersionsDropdown.label":"Versions","theme.tags.tagsListLabel":"Tags:","theme.AnnouncementBar.closeButtonAriaLabel":"Close","theme.blog.sidebar.navAriaLabel":"Blog recent posts navigation","theme.CodeBlock.copied":"Copied","theme.CodeBlock.copyButtonAriaLabel":"Copy code to clipboard","theme.CodeBlock.copy":"Copy","theme.CodeBlock.wordWrapToggle":"Toggle word wrap","theme.DocSidebarItem.toggleCollapsedCategoryAriaLabel":"Toggle the collapsible sidebar category \'{label}\'","theme.NavBar.navAriaLabel":"Main","theme.navbar.mobileLanguageDropdown.label":"Languages","theme.TOCCollapsible.toggleButtonLabel":"On this page","theme.blog.post.readMore":"Read More","theme.blog.post.readMoreLabel":"Read more about {title}","theme.blog.post.readingTime.plurals":"One min read|{readingTime} min read","theme.docs.breadcrumbs.home":"Home page","theme.docs.sidebar.collapseButtonTitle":"Collapse sidebar","theme.docs.sidebar.collapseButtonAriaLabel":"Collapse sidebar","theme.docs.sidebar.navAriaLabel":"Docs sidebar","theme.docs.sidebar.closeSidebarButtonAriaLabel":"Close navigation bar","theme.navbar.mobileSidebarSecondaryMenu.backButtonLabel":"\u2190 Back to main menu","theme.docs.sidebar.toggleSidebarButtonAriaLabel":"Toggle navigation bar","theme.docs.sidebar.expandButtonTitle":"Expand sidebar","theme.docs.sidebar.expandButtonAriaLabel":"Expand sidebar","theme.IdealImageMessage.loading":"Loading...","theme.IdealImageMessage.load":"Click to load{sizeMessage}","theme.IdealImageMessage.offline":"Your browser is offline. Image not loaded","theme.IdealImageMessage.404error":"404. Image not found","theme.IdealImageMessage.error":"Error. Click to reload","theme.ErrorPageContent.tryAgain":"Try again","theme.common.skipToMainContent":"Skip to main content","theme.tags.tagsPageTitle":"Tags","edition.card.image":"Screenshot of {name} edition"}')},16887:e=>{"use strict";e.exports=JSON.parse('{"/blog-040":{"__comp":"a6aa9e1f","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"fe13418f"},{"content":"424f562c"},{"content":"ecdeb26c"},{"content":"418a6276"},{"content":"a52026b8"}],"__props":"c15d9823"},"/blog/archive-182":{"__comp":"9e4087bc","__context":{"plugin":"36994c47"},"__props":"f81c1134"},"/blog/authors-0b7":{"__comp":"621db11d","__context":{"data":{"blogMetadata":"acecf23e"},"plugin":"36994c47"},"sidebar":"814f3328","__props":"ef8b811a"},"/blog/authors/alfi-625":{"__comp":"33fc5bb8","__context":{"data":{"blogMetadata":"acecf23e"},"plugin":"36994c47"},"items":[{"content":"fe13418f"}],"sidebar":"814f3328","__props":"d2363c7a"},"/blog/authors/david-386":{"__comp":"33fc5bb8","__context":{"data":{"blogMetadata":"acecf23e"},"plugin":"36994c47"},"items":[{"content":"ecdeb26c"},{"content":"418a6276"}],"sidebar":"814f3328","__props":"f3d58343"},"/blog/authors/joey-979":{"__comp":"33fc5bb8","__context":{"data":{"blogMetadata":"acecf23e"},"plugin":"36994c47"},"items":[{"content":"424f562c"},{"content":"a52026b8"}],"sidebar":"814f3328","__props":"05767842"},"/blog/clean-clean-clean-6e9":{"__comp":"ccc49370","__context":{"data":{"blogMetadata":"acecf23e"},"plugin":"36994c47"},"sidebar":"814f3328","content":"a6c0fb2f"},"/blog/don\'t-call-me-mate-pal-4cd":{"__comp":"ccc49370","__context":{"data":{"blogMetadata":"acecf23e"},"plugin":"36994c47"},"sidebar":"814f3328","content":"4802fa93"},"/blog/eopkg-is-dead-long-live-eopkg-a0e":{"__comp":"ccc49370","__context":{"data":{"blogMetadata":"acecf23e"},"plugin":"36994c47"},"sidebar":"814f3328","content":"8d193990"},"/blog/solus-optimizing-packages-3c8":{"__comp":"ccc49370","__context":{"data":{"blogMetadata":"acecf23e"},"plugin":"36994c47"},"sidebar":"814f3328","content":"72054e31"},"/blog/tags-287":{"__comp":"01a85c17","__context":{"plugin":"36994c47"},"sidebar":"814f3328","__props":"3a2db09e"},"/blog/tags/3-2ba":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"424f562c"}],"__props":"1b835d51"},"/blog/tags/clang-7cb":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"424f562c"}],"__props":"2a9c4f4d"},"/blog/tags/cleanup-391":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"fe13418f"}],"__props":"d20919b7"},"/blog/tags/devlog-9e2":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"fe13418f"},{"content":"ecdeb26c"},{"content":"418a6276"},{"content":"a52026b8"}],"__props":"e4134e95"},"/blog/tags/eopkg-a41":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"418a6276"}],"__props":"7b0bdf40"},"/blog/tags/firstpost-c48":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"a52026b8"}],"__props":"f32bcb79"},"/blog/tags/glibc-1b5":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"424f562c"}],"__props":"920ec10a"},"/blog/tags/gnu-94b":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"424f562c"}],"__props":"4e87380c"},"/blog/tags/hello-d49":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"a52026b8"}],"__props":"f82cd581"},"/blog/tags/housekeeping-339":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"fe13418f"}],"__props":"da0423b8"},"/blog/tags/hwcaps-6d6":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"424f562c"}],"__props":"3a93f7ba"},"/blog/tags/llvm-aff":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"424f562c"}],"__props":"5efe994e"},"/blog/tags/lto-24f":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"424f562c"}],"__props":"0cfc9369"},"/blog/tags/mate-e08":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"ecdeb26c"}],"__props":"439d6d8d"},"/blog/tags/moss-e04":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"418a6276"}],"__props":"7c2abd66"},"/blog/tags/optimization-535":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"424f562c"}],"__props":"06758c2b"},"/blog/tags/packaging-07c":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"424f562c"}],"__props":"b6ca4f35"},"/blog/tags/pgo-a42":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"424f562c"}],"__props":"0b85ec06"},"/blog/tags/solus-601":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"fe13418f"},{"content":"424f562c"},{"content":"ecdeb26c"},{"content":"418a6276"},{"content":"a52026b8"}],"__props":"2a0f90eb"},"/blog/tags/x-86-64-v-3-716":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"424f562c"}],"__props":"9b400668"},"/blog/welcome-solus-devlog-v1-418":{"__comp":"ccc49370","__context":{"data":{"blogMetadata":"acecf23e"},"plugin":"36994c47"},"sidebar":"814f3328","content":"f35b91b6"},"/docs-cda":{"__comp":"5e95c892","__context":{"plugin":"aba21aa0"}},"/docs-d14":{"__comp":"a7bd4aaa","__props":"0058b4c6"},"/docs-f54":{"__comp":"a94703ab"},"/docs/category/advanced-configuration-21a":{"__comp":"14eb3368","__props":"3bd0a7e9"},"/docs/category/camera-eec":{"__comp":"14eb3368","__props":"c99ea947"},"/docs/category/compatibility-41d":{"__comp":"14eb3368","__props":"47b97f63"},"/docs/category/contributing-524":{"__comp":"14eb3368","__props":"6146d358"},"/docs/category/localization-976":{"__comp":"14eb3368","__props":"43d43a8f"},"/docs/category/mobile-8b8":{"__comp":"14eb3368","__props":"334da572"},"/docs/category/networking-2c7":{"__comp":"14eb3368","__props":"156eae2c"},"/docs/category/package-management-540":{"__comp":"14eb3368","__props":"27d71881"},"/docs/category/peripherals-b31":{"__comp":"14eb3368","__props":"d9c798e8"},"/docs/category/procedures-59d":{"__comp":"14eb3368","__props":"633d53d7"},"/docs/category/quick-start-16b":{"__comp":"14eb3368","__props":"da62f019"},"/docs/category/software-5c6":{"__comp":"14eb3368","__props":"33f669c7"},"/docs/category/utilities-7bd":{"__comp":"14eb3368","__props":"72f2f84e"},"/docs/category/virtualization-cd2":{"__comp":"14eb3368","__props":"62d70de2"},"/docs/category/web-f03":{"__comp":"14eb3368","__props":"ea6d9109"},"/docs/packaging/-481":{"__comp":"17896441","content":"04b18502"},"/docs/packaging/advanced-config/eopkg-configuration-ebe":{"__comp":"17896441","content":"dabd6b33"},"/docs/packaging/advanced-config/local-repository-6db":{"__comp":"17896441","content":"8490a22d"},"/docs/packaging/appstream-metainfo-a7b":{"__comp":"17896441","content":"7c1fb106"},"/docs/packaging/creating-a-new-package-751":{"__comp":"17896441","content":"c5de29d4"},"/docs/packaging/git-basics-d8b":{"__comp":"17896441","content":"5b7f3753"},"/docs/packaging/monitoring.yml-94f":{"__comp":"17896441","content":"080a8349"},"/docs/packaging/package.yml-87d":{"__comp":"17896441","content":"3ff05326"},"/docs/packaging/packaging-changes-c28":{"__comp":"17896441","content":"c55c138b"},"/docs/packaging/packaging-practices-573":{"__comp":"17896441","content":"49b71c16"},"/docs/packaging/prepare-for-packaging-bb4":{"__comp":"17896441","content":"513b6405"},"/docs/packaging/procedures/maintainership-225":{"__comp":"17896441","content":"61c953b4"},"/docs/packaging/procedures/package-inclusion-f02":{"__comp":"17896441","content":"cca891e2"},"/docs/packaging/procedures/release-processes-e7c":{"__comp":"17896441","content":"d0d2faf6"},"/docs/packaging/procedures/request-a-package-c89":{"__comp":"17896441","content":"8e861970"},"/docs/packaging/procedures/request-a-package-update-741":{"__comp":"17896441","content":"97c623e4"},"/docs/packaging/stack-rebuilds-aa8":{"__comp":"17896441","content":"ad205e99"},"/docs/packaging/submitting-a-pull-request-b03":{"__comp":"17896441","content":"26308ea3"},"/docs/packaging/testing-a-package-438":{"__comp":"17896441","content":"45e9d313"},"/docs/packaging/translation-instructions-12e":{"__comp":"17896441","content":"ce4855c1"},"/docs/packaging/troubleshooting-packaging-7b5":{"__comp":"17896441","content":"7071adf5"},"/docs/packaging/update-dev-environment-fb2":{"__comp":"17896441","content":"be79d003"},"/docs/packaging/updating-an-existing-package-25c":{"__comp":"17896441","content":"0b254e3a"},"/docs/packaging/your-first-package-update-29d":{"__comp":"17896441","content":"d00f7e62"},"/docs/user/contributing/community-guidelines-774":{"__comp":"17896441","content":"5f194406"},"/docs/user/contributing/getting-involved-c1b":{"__comp":"17896441","content":"7a24477a"},"/docs/user/contributing/style-215":{"__comp":"17896441","content":"6873f895"},"/docs/user/contributing/testing-an-iso-9cf":{"__comp":"17896441","content":"0e862883"},"/docs/user/editions/-e45":{"__comp":"17896441","content":"1a698c37"},"/docs/user/editions/budgie/-e65":{"__comp":"17896441","content":"f4aa4739"},"/docs/user/editions/budgie/configuration-d93":{"__comp":"17896441","content":"c9c1a3f4"},"/docs/user/editions/budgie/tips-and-tricks-5aa":{"__comp":"17896441","content":"a05bfad9"},"/docs/user/editions/gnome/-9f3":{"__comp":"17896441","content":"fb8d634e"},"/docs/user/editions/gnome/configuration-cbf":{"__comp":"17896441","content":"fb6dc457"},"/docs/user/editions/gnome/tips-and-tricks-825":{"__comp":"17896441","content":"b4302412"},"/docs/user/editions/mate/-619":{"__comp":"17896441","content":"2b61a93c"},"/docs/user/editions/mate/configuration-d2f":{"__comp":"17896441","content":"2598a3a5"},"/docs/user/editions/mate/tips-and-tricks-c1b":{"__comp":"17896441","content":"f1d13e1b"},"/docs/user/editions/plasma/-f25":{"__comp":"17896441","content":"0e3c5e6b"},"/docs/user/editions/plasma/configuration-564":{"__comp":"17896441","content":"cec10a63"},"/docs/user/editions/plasma/tips-and-tricks-a3f":{"__comp":"17896441","content":"2a37c7d8"},"/docs/user/editions/xfce/-bd1":{"__comp":"17896441","content":"ab89b7a6"},"/docs/user/editions/xfce/configuration-b87":{"__comp":"17896441","content":"5685b4d8"},"/docs/user/editions/xfce/tips-and-tricks-e55":{"__comp":"17896441","content":"75c41d11"},"/docs/user/hardware/-f51":{"__comp":"17896441","content":"99bedda9"},"/docs/user/hardware/compatibility/laptops-4cb":{"__comp":"17896441","content":"be4ac66b"},"/docs/user/hardware/compatibility/wifi-1d7":{"__comp":"17896441","content":"9485dea6"},"/docs/user/hardware/mobile/android-c18":{"__comp":"17896441","content":"ec4e4367"},"/docs/user/hardware/mobile/apple-c64":{"__comp":"17896441","content":"a398ef57"},"/docs/user/hardware/peripherals/mice-and-touchpads-7ef":{"__comp":"17896441","content":"96af6484"},"/docs/user/hardware/peripherals/midi-keyboard-327":{"__comp":"17896441","content":"f6faa2b4"},"/docs/user/hardware/peripherals/printers-and-scanners-1bd":{"__comp":"17896441","content":"38920c38"},"/docs/user/intro-a7c":{"__comp":"17896441","content":"6787574e"},"/docs/user/package-management/basics-d4e":{"__comp":"17896441","content":"3fdfc7ff"},"/docs/user/package-management/history-and-rollback-57d":{"__comp":"17896441","content":"1ae709a2"},"/docs/user/package-management/repo-management-7c4":{"__comp":"17896441","content":"46a65d96"},"/docs/user/privacy-1bd":{"__comp":"17896441","content":"08bef15d"},"/docs/user/quick-start/boot-management-3d5":{"__comp":"17896441","content":"e5595530"},"/docs/user/quick-start/default-applications-99f":{"__comp":"17896441","content":"14488e92"},"/docs/user/quick-start/installation/-686":{"__comp":"17896441","content":"533eefa9"},"/docs/user/quick-start/installation/disks-39e":{"__comp":"17896441","content":"2c3e84bd"},"/docs/user/quick-start/installation/secure-boot-979":{"__comp":"17896441","content":"f4c9601b"},"/docs/user/quick-start/installation/system-requirements-4dc":{"__comp":"17896441","content":"2a34ce22"},"/docs/user/quick-start/software-center/-f49":{"__comp":"17896441","content":"ed2a5927"},"/docs/user/software/camera/droidcam-908":{"__comp":"17896441","content":"baa66232"},"/docs/user/software/command-line/-344":{"__comp":"17896441","content":"793c86b2"},"/docs/user/software/configuration_files-c79":{"__comp":"17896441","content":"eb074ba1"},"/docs/user/software/desktops/-206":{"__comp":"17896441","content":"21944812"},"/docs/user/software/development/-a4c":{"__comp":"17896441","content":"64699048"},"/docs/user/software/development/containers-55d":{"__comp":"17896441","content":"257b9082"},"/docs/user/software/development/java-fc7":{"__comp":"17896441","content":"baf1b6e8"},"/docs/user/software/development/postgresql-c0a":{"__comp":"17896441","content":"f8dd8223"},"/docs/user/software/development/r-and-rstudio-405":{"__comp":"17896441","content":"fc733b73"},"/docs/user/software/development/rust-4eb":{"__comp":"17896441","content":"8e886580"},"/docs/user/software/development/web-ecd":{"__comp":"17896441","content":"947d9ca4"},"/docs/user/software/gaming/-e54":{"__comp":"17896441","content":"9284d474"},"/docs/user/software/localization/ibus-21a":{"__comp":"17896441","content":"8e3d5b32"},"/docs/user/software/networking/samba-86e":{"__comp":"17896441","content":"2609550e"},"/docs/user/software/networking/tigervnc-032":{"__comp":"17896441","content":"6cfe09a0"},"/docs/user/software/networking/wireshark-ed9":{"__comp":"17896441","content":"7e4100d6"},"/docs/user/software/networking/xrdp-44b":{"__comp":"17896441","content":"a9e19215"},"/docs/user/software/sound/-420":{"__comp":"17896441","content":"ddc41e4a"},"/docs/user/software/third-party/-6a1":{"__comp":"17896441","content":"41a4de91"},"/docs/user/software/third-party/snap-47a":{"__comp":"17896441","content":"e083e94b"},"/docs/user/software/utilities/ksysguard-278":{"__comp":"17896441","content":"528b6a6b"},"/docs/user/software/utilities/kwallet-dbc":{"__comp":"17896441","content":"88a83a8c"},"/docs/user/software/virtualization/virtualbox-016":{"__comp":"17896441","content":"74470af4"},"/docs/user/software/web/obs-3fa":{"__comp":"17896441","content":"f0629c21"},"/docs/user/troubleshooting/-9b5":{"__comp":"17896441","content":"2b4abe09"},"/docs/user/troubleshooting/boot-rescue-6fd":{"__comp":"17896441","content":"09dbd43b"},"/docs/user/troubleshooting/installation-d91":{"__comp":"17896441","content":"d4762887"},"/docs/user/troubleshooting/plasma-b13":{"__comp":"17896441","content":"d5670106"},"/-e5f":{"__comp":"1df93b7f","__context":{"plugin":"a7456010"},"config":"5e9f5e1a"}}')}},e=>{e.O(0,[3312],(()=>{return t=43205,e(e.s=t);var t}));e.O()}]); \ No newline at end of file diff --git a/assets/js/main.7c0d0999.js.LICENSE.txt b/assets/js/main.7c0d0999.js.LICENSE.txt deleted file mode 100644 index 3a6ccc505..000000000 --- a/assets/js/main.7c0d0999.js.LICENSE.txt +++ /dev/null @@ -1,133 +0,0 @@ -/* NProgress, (c) 2013, 2014 Rico Sta. Cruz - http://ricostacruz.com/nprogress - * @license MIT */ - -/*! - * lunr.Builder - * Copyright (C) 2020 Oliver Nightingale - */ - -/*! - * lunr.Index - * Copyright (C) 2020 Oliver Nightingale - */ - -/*! - * lunr.Pipeline - * Copyright (C) 2020 Oliver Nightingale - */ - -/*! - * lunr.Set - * Copyright (C) 2020 Oliver Nightingale - */ - -/*! - * lunr.TokenSet - * Copyright (C) 2020 Oliver Nightingale - */ - -/*! - * lunr.Vector - * Copyright (C) 2020 Oliver Nightingale - */ - -/*! - * lunr.stemmer - * Copyright (C) 2020 Oliver Nightingale - * Includes code from - http://tartarus.org/~martin/PorterStemmer/js.txt - */ - -/*! - * lunr.stopWordFilter - * Copyright (C) 2020 Oliver Nightingale - */ - -/*! - * lunr.tokenizer - * Copyright (C) 2020 Oliver Nightingale - */ - -/*! - * lunr.trimmer - * Copyright (C) 2020 Oliver Nightingale - */ - -/*! - * lunr.utils - * Copyright (C) 2020 Oliver Nightingale - */ - -/*! Bundled license information: - -prismjs/prism.js: - (** - * Prism: Lightweight, robust, elegant syntax highlighting - * - * @license MIT <https://opensource.org/licenses/MIT> - * @author Lea Verou <https://lea.verou.me> - * @namespace - * @public - *) -*/ - -/*!*************************************************** -* mark.js v8.11.1 -* https://markjs.io/ -* Copyright (c) 2014–2018, Julian Kühnel -* Released under the MIT license https://git.io/vwTVl -*****************************************************/ - -/** - * @license React - * 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 - * react-jsx-runtime.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 - * 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. - */ - -/** - * @license React - * 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. - */ - -/** - * lunr - http://lunrjs.com - A bit like Solr, but much smaller and not as bright - 2.3.9 - * Copyright (C) 2020 Oliver Nightingale - * @license MIT - */ - -/** @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. - */ diff --git a/assets/js/main.92c138a6.js b/assets/js/main.92c138a6.js new file mode 100644 index 000000000..e378c3ff5 --- /dev/null +++ b/assets/js/main.92c138a6.js @@ -0,0 +1,36 @@ +(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([["6909"],{22925:function(e,t,n){"use strict";n.r(t)},93272:function(e,t,n){"use strict";n.r(t)},31381:function(e,t,n){"use strict";n.d(t,{PP:()=>j,Ep:()=>p,lX:()=>w,q_:()=>O,ob:()=>f});var r=n("16019");function o(e){return"/"===e.charAt(0)}function a(e,t){for(var n=t,r=n+1,o=e.length;r<o;n+=1,r+=1)e[n]=e[r];e.pop()}let i=function(e,t){void 0===t&&(t="");var n,r=e&&e.split("/")||[],i=t&&t.split("/")||[],s=e&&o(e),l=t&&o(t),c=s||l;if(e&&o(e)?i=r:r.length&&(i.pop(),i=i.concat(r)),!i.length)return"/";if(i.length){var u=i[i.length-1];n="."===u||".."===u||""===u}else n=!1;for(var d=0,p=i.length;p>=0;p--){var f=i[p];"."===f?a(i,p):".."===f?(a(i,p),d++):d&&(a(i,p),d--)}if(!c)for(;d--;d)i.unshift("..");c&&""!==i[0]&&(!i[0]||!o(i[0]))&&i.unshift("");var g=i.join("/");return n&&"/"!==g.substr(-1)&&(g+="/"),g};var s=n("21835");function l(e){return"/"===e.charAt(0)?e:"/"+e}function c(e){return"/"===e.charAt(0)?e.substr(1):e}function u(e,t){var n,r;return(n=e,r=t,0===n.toLowerCase().indexOf(r.toLowerCase())&&-1!=="/?#".indexOf(n.charAt(r.length)))?e.substr(t.length):e}function d(e){return"/"===e.charAt(e.length-1)?e.slice(0,-1):e}function p(e){var t=e.pathname,n=e.search,r=e.hash,o=t||"/";return n&&"?"!==n&&(o+="?"===n.charAt(0)?n:"?"+n),r&&"#"!==r&&(o+="#"===r.charAt(0)?r:"#"+r),o}function f(e,t,n,o){var a,s,l,c,u,d;if("string"==typeof e){;l="",c="",-1!==(u=(s=e||"/").indexOf("#"))&&(c=s.substr(u),s=s.substr(0,u)),-1!==(d=s.indexOf("?"))&&(l=s.substr(d),s=s.substr(0,d)),(a={pathname:s,search:"?"===l?"":l,hash:"#"===c?"":c}).state=t}else void 0===(a=(0,r.Z)({},e)).pathname&&(a.pathname=""),a.search?"?"!==a.search.charAt(0)&&(a.search="?"+a.search):a.search="",a.hash?"#"!==a.hash.charAt(0)&&(a.hash="#"+a.hash):a.hash="",void 0!==t&&void 0===a.state&&(a.state=t);try{a.pathname=decodeURI(a.pathname)}catch(e){if(e instanceof URIError)throw URIError('Pathname "'+a.pathname+'" could not be decoded. This is likely caused by an invalid percent-encoding.');throw e}return n&&(a.key=n),o?a.pathname?"/"!==a.pathname.charAt(0)&&(a.pathname=i(a.pathname,o.pathname)):a.pathname=o.pathname:!a.pathname&&(a.pathname="/"),a}function g(){var e=null,t=[];return{setPrompt:function(t){return e=t,function(){e===t&&(e=null)}},confirmTransitionTo:function(t,n,r,o){if(null!=e){var a="function"==typeof e?e(t,n):e;"string"==typeof a?"function"==typeof r?r(a,o):o(!0):o(!1!==a)}else o(!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=Array(e),r=0;r<e;r++)n[r]=arguments[r];t.forEach(function(e){return e.apply(void 0,n)})}}}var m=!!("undefined"!=typeof window&&window.document&&window.document.createElement);function h(e,t){t(window.confirm(e))}var b="popstate",y="hashchange";function v(){try{return window.history.state||{}}catch(e){return{}}}function w(e){void 0===e&&(e={}),m||(0,s.Z)(!1);var t,n=window.history;var o=(-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,a=-1!==window.navigator.userAgent.indexOf("Trident"),i=e,c=i.forceRefresh,w=void 0!==c&&c,k=i.getUserConfirmation,S=void 0===k?h:k,x=i.keyLength,_=void 0===x?6:x,E=e.basename?d(l(e.basename)):"";function O(e){var t=e||{},n=t.key,r=t.state,o=window.location,a=o.pathname+o.search+o.hash;return E&&(a=u(a,E)),f(a,r,n)}function P(){return Math.random().toString(36).substr(2,_)}var j=g();function C(e){(0,r.Z)($,e),$.length=n.length,j.notifyListeners($.location,$.action)}function T(e){if(!(void 0===e.state&&-1===navigator.userAgent.indexOf("CriOS")))N(O(e.state))}function I(){N(O(v()))}var A=!1;function N(e){A?(A=!1,C()):j.confirmTransitionTo(e,"POP",S,function(t){t?C({action:"POP",location:e}):function(e){var t=$.location,n=R.indexOf(t.key);-1===n&&(n=0);var r=R.indexOf(e.key);-1===r&&(r=0);var o=n-r;o&&(A=!0,F(o))}(e)})}var L=O(v()),R=[L.key];function D(e){return E+p(e)}function F(e){n.go(e)}var M=0;function B(e){1===(M+=e)&&1===e?(window.addEventListener(b,T),a&&window.addEventListener(y,I)):0===M&&(window.removeEventListener(b,T),a&&window.removeEventListener(y,I))}var z=!1,$={length:n.length,action:"POP",location:L,createHref:D,push:function(e,t){var r="PUSH",a=f(e,t,P(),$.location);j.confirmTransitionTo(a,r,S,function(e){if(e){var t=D(a),i=a.key,s=a.state;if(o){if(n.pushState({key:i,state:s},null,t),w)window.location.href=t;else{var l=R.indexOf($.location.key),c=R.slice(0,l+1);c.push(a.key),R=c,C({action:r,location:a})}}else window.location.href=t}})},replace:function(e,t){var r="REPLACE",a=f(e,t,P(),$.location);j.confirmTransitionTo(a,r,S,function(e){if(e){var t=D(a),i=a.key,s=a.state;if(o){if(n.replaceState({key:i,state:s},null,t),w)window.location.replace(t);else{var l=R.indexOf($.location.key);-1!==l&&(R[l]=a.key),C({action:r,location:a})}}else window.location.replace(t)}})},go:F,goBack:function(){F(-1)},goForward:function(){F(1)},block:function(e){void 0===e&&(e=!1);var t=j.setPrompt(e);return!z&&(B(1),z=!0),function(){return z&&(z=!1,B(-1)),t()}},listen:function(e){var t=j.appendListener(e);return B(1),function(){B(-1),t()}}};return $}var k="hashchange",S={hashbang:{encodePath:function(e){return"!"===e.charAt(0)?e:"!/"+c(e)},decodePath:function(e){return"!"===e.charAt(0)?e.substr(1):e}},noslash:{encodePath:c,decodePath:l},slash:{encodePath:l,decodePath:l}};function x(e){var t=e.indexOf("#");return -1===t?e:e.slice(0,t)}function _(){var e=window.location.href,t=e.indexOf("#");return -1===t?"":e.substring(t+1)}function E(e){window.location.replace(x(window.location.href)+"#"+e)}function O(e){void 0===e&&(e={}),m||(0,s.Z)(!1);var t=window.history;window.navigator.userAgent.indexOf("Firefox");var n=e,o=n.getUserConfirmation,a=void 0===o?h:o,i=n.hashType,c=e.basename?d(l(e.basename)):"",b=S[void 0===i?"slash":i],y=b.encodePath,v=b.decodePath;function w(){var e=v(_());return c&&(e=u(e,c)),f(e)}var O=g();function P(e){(0,r.Z)(B,e),B.length=t.length,O.notifyListeners(B.location,B.action)}var j=!1,C=null;function T(){var e=_(),t=y(e);if(e!==t)E(t);else{var n,r,o=w(),i=B.location;if(!j&&(n=i,r=o,n.pathname===r.pathname&&n.search===r.search&&n.hash===r.hash)||C===p(o))return;C=null,function(e){j?(j=!1,P()):O.confirmTransitionTo(e,"POP",a,function(t){t?P({action:"POP",location:e}):function(e){var t=B.location,n=L.lastIndexOf(p(t));-1===n&&(n=0);var r=L.lastIndexOf(p(e));-1===r&&(r=0);var o=n-r;o&&(j=!0,R(o))}(e)})}(o)}}var I=_(),A=y(I);I!==A&&E(A);var N=w(),L=[p(N)];function R(e){t.go(e)}var D=0;function F(e){1===(D+=e)&&1===e?window.addEventListener(k,T):0===D&&window.removeEventListener(k,T)}var M=!1,B={length:t.length,action:"POP",location:N,createHref:function(e){var t=document.querySelector("base"),n="";return t&&t.getAttribute("href")&&(n=x(window.location.href)),n+"#"+y(c+p(e))},push:function(e,t){var n="PUSH",r=f(e,void 0,void 0,B.location);O.confirmTransitionTo(r,n,a,function(e){if(e){var t=p(r),o=y(c+t);if(_()!==o){C=t,a=o,window.location.hash=a;var a,i=L.lastIndexOf(p(B.location)),s=L.slice(0,i+1);s.push(t),L=s,P({action:n,location:r})}else P()}})},replace:function(e,t){var n="REPLACE",r=f(e,void 0,void 0,B.location);O.confirmTransitionTo(r,n,a,function(e){if(e){var t=p(r),o=y(c+t);_()!==o&&(C=t,E(o));var a=L.indexOf(p(B.location));-1!==a&&(L[a]=t),P({action:n,location:r})}})},go:R,goBack:function(){R(-1)},goForward:function(){R(1)},block:function(e){void 0===e&&(e=!1);var t=O.setPrompt(e);return!M&&(F(1),M=!0),function(){return M&&(M=!1,F(-1)),t()}},listen:function(e){var t=O.appendListener(e);return F(1),function(){F(-1),t()}}};return B}function P(e,t,n){return Math.min(Math.max(e,t),n)}function j(e){void 0===e&&(e={});var t=e,n=t.getUserConfirmation,o=t.initialEntries,a=void 0===o?["/"]:o,i=t.initialIndex,s=t.keyLength,l=void 0===s?6:s,c=g();function u(e){(0,r.Z)(y,e),y.length=y.entries.length,c.notifyListeners(y.location,y.action)}function d(){return Math.random().toString(36).substr(2,l)}var m=P(void 0===i?0:i,0,a.length-1),h=a.map(function(e){return"string"==typeof e?f(e,void 0,d()):f(e,void 0,e.key||d())});function b(e){var t=P(y.index+e,0,y.entries.length-1),r=y.entries[t];c.confirmTransitionTo(r,"POP",n,function(e){e?u({action:"POP",location:r,index:t}):u()})}var y={length:h.length,action:"POP",location:h[m],index:m,entries:h,createHref:p,push:function(e,t){var r="PUSH",o=f(e,t,d(),y.location);c.confirmTransitionTo(o,r,n,function(e){if(e){var t=y.index+1,n=y.entries.slice(0);n.length>t?n.splice(t,n.length-t,o):n.push(o),u({action:r,location:o,index:t,entries:n})}})},replace:function(e,t){var r="REPLACE",o=f(e,t,d(),y.location);c.confirmTransitionTo(o,r,n,function(e){e&&(y.entries[y.index]=o,u({action:r,location:o}))})},go:b,goBack:function(){b(-1)},goForward:function(){b(1)},canGo:function(e){var t=y.index+e;return t>=0&&t<y.entries.length},block:function(e){return void 0===e&&(e=!1),c.setPrompt(e)},listen:function(e){return c.appendListener(e)}};return y}},8679:function(e,t,n){"use strict";var r=n(21296),o={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},a={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},i={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},s={};function l(e){return r.isMemo(e)?i:s[e.$$typeof]||o}s[r.ForwardRef]={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},s[r.Memo]=i;var c=Object.defineProperty,u=Object.getOwnPropertyNames,d=Object.getOwnPropertySymbols,p=Object.getOwnPropertyDescriptor,f=Object.getPrototypeOf,g=Object.prototype;e.exports=function e(t,n,r){if("string"!=typeof n){if(g){var o=f(n);o&&o!==g&&e(t,o,r)}var i=u(n);d&&(i=i.concat(d(n)));for(var s=l(t),m=l(n),h=0;h<i.length;++h){var b=i[h];if(!a[b]&&!(r&&r[b])&&!(m&&m[b])&&!(s&&s[b])){var y=p(n,b);try{c(t,b,y)}catch(e){}}}}return t}},96103:function(e,t){"use strict";var n="function"==typeof Symbol&&Symbol.for,r=n?Symbol.for("react.element"):60103,o=n?Symbol.for("react.portal"):60106,a=n?Symbol.for("react.fragment"):60107,i=n?Symbol.for("react.strict_mode"):60108,s=n?Symbol.for("react.profiler"):60114,l=n?Symbol.for("react.provider"):60109,c=n?Symbol.for("react.context"):60110,u=n?Symbol.for("react.async_mode"):60111,d=n?Symbol.for("react.concurrent_mode"):60111,p=n?Symbol.for("react.forward_ref"):60112,f=n?Symbol.for("react.suspense"):60113,g=n?Symbol.for("react.suspense_list"):60120,m=n?Symbol.for("react.memo"):60115,h=n?Symbol.for("react.lazy"):60116,b=n?Symbol.for("react.block"):60121,y=n?Symbol.for("react.fundamental"):60117,v=n?Symbol.for("react.responder"):60118,w=n?Symbol.for("react.scope"):60119;function k(e){if("object"==typeof e&&null!==e){var t=e.$$typeof;switch(t){case r:switch(e=e.type){case u:case d:case a:case s:case i:case f:return e;default:switch(e=e&&e.$$typeof){case c:case p:case h:case m:case l:return e;default:return t}}case o:return t}}}function S(e){return k(e)===d}t.AsyncMode=u,t.ConcurrentMode=d,t.ContextConsumer=c,t.ContextProvider=l,t.Element=r,t.ForwardRef=p,t.Fragment=a,t.Lazy=h,t.Memo=m,t.Portal=o,t.Profiler=s,t.StrictMode=i,t.Suspense=f,t.isAsyncMode=function(e){return S(e)||k(e)===u},t.isConcurrentMode=S,t.isContextConsumer=function(e){return k(e)===c},t.isContextProvider=function(e){return k(e)===l},t.isElement=function(e){return"object"==typeof e&&null!==e&&e.$$typeof===r},t.isForwardRef=function(e){return k(e)===p},t.isFragment=function(e){return k(e)===a},t.isLazy=function(e){return k(e)===h},t.isMemo=function(e){return k(e)===m},t.isPortal=function(e){return k(e)===o},t.isProfiler=function(e){return k(e)===s},t.isStrictMode=function(e){return k(e)===i},t.isSuspense=function(e){return k(e)===f},t.isValidElementType=function(e){return"string"==typeof e||"function"==typeof e||e===a||e===d||e===s||e===i||e===f||e===g||"object"==typeof e&&null!==e&&(e.$$typeof===h||e.$$typeof===m||e.$$typeof===l||e.$$typeof===c||e.$$typeof===p||e.$$typeof===y||e.$$typeof===v||e.$$typeof===w||e.$$typeof===b)},t.typeOf=k},21296:function(e,t,n){"use strict";e.exports=n(96103)},41143:function(e){"use strict";e.exports=function(e,t,n,r,o,a,i,s){if(!e){var l;if(void 0===t)l=Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.");else{var c=[n,r,o,a,i,s],u=0;(l=Error(t.replace(/%s/g,function(){return c[u++]}))).name="Invariant Violation"}throw l.framesToPop=1,l}}},5826:function(e){e.exports=Array.isArray||function(e){return"[object Array]"==Object.prototype.toString.call(e)}},813:function(e){var t,n;t=0,n=function(){"use strict";var e="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},t=function(e,t){if(!(e instanceof t))throw TypeError("Cannot call a class as a function")},n=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),r=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},o=function(){function e(n){var r=!(arguments.length>1)||void 0===arguments[1]||arguments[1],o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[],a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:5e3;t(this,e),this.ctx=n,this.iframes=r,this.exclude=o,this.iframesTimeout=a}return n(e,[{key:"getContexts",value:function(){var e=void 0,t=[];return void 0!==this.ctx&&this.ctx?NodeList.prototype.isPrototypeOf(this.ctx)?e=Array.prototype.slice.call(this.ctx):e=Array.isArray(this.ctx)?this.ctx:"string"==typeof this.ctx?Array.prototype.slice.call(document.querySelectorAll(this.ctx)):[this.ctx]:e=[],e.forEach(function(e){var n=t.filter(function(t){return t.contains(e)}).length>0;-1===t.indexOf(e)&&!n&&t.push(e)}),t}},{key:"getIframeContents",value:function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:function(){},r=void 0;try{var o=e.contentWindow;if(r=o.document,!o||!r)throw Error("iframe inaccessible")}catch(e){n()}r&&t(r)}},{key:"isIframeBlank",value:function(e){var t="about:blank",n=e.getAttribute("src").trim();return e.contentWindow.location.href===t&&n!==t&&n}},{key:"observeIframeLoad",value:function(e,t,n){var r=this,o=!1,a=null,i=function i(){if(!o){o=!0,clearTimeout(a);try{!r.isIframeBlank(e)&&(e.removeEventListener("load",i),r.getIframeContents(e,t,n))}catch(e){n()}}};e.addEventListener("load",i),a=setTimeout(i,this.iframesTimeout)}},{key:"onIframeReady",value:function(e,t,n){try{"complete"===e.contentWindow.document.readyState?this.isIframeBlank(e)?this.observeIframeLoad(e,t,n):this.getIframeContents(e,t,n):this.observeIframeLoad(e,t,n)}catch(e){n()}}},{key:"waitForIframes",value:function(e,t){var n=this,r=0;this.forEachIframe(e,function(){return!0},function(e){r++,n.waitForIframes(e.querySelector("html"),function(){!--r&&t()})},function(e){!e&&t()})}},{key:"forEachIframe",value:function(t,n,r){var o=this,a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:function(){},i=t.querySelectorAll("iframe"),s=i.length,l=0;i=Array.prototype.slice.call(i);var c=function(){--s<=0&&a(l)};!s&&c(),i.forEach(function(t){e.matches(t,o.exclude)?c():o.onIframeReady(t,function(e){n(t)&&(l++,r(e)),c()},c)})}},{key:"createIterator",value:function(e,t,n){return document.createNodeIterator(e,t,n,!1)}},{key:"createInstanceOnIframe",value:function(t){return new e(t.querySelector("html"),this.iframes)}},{key:"compareNodeIframe",value:function(e,t,n){if(e.compareDocumentPosition(n)&Node.DOCUMENT_POSITION_PRECEDING){if(null===t)return!0;if(t.compareDocumentPosition(n)&Node.DOCUMENT_POSITION_FOLLOWING)return!0}return!1}},{key:"getIteratorNode",value:function(e){var t=e.previousNode(),n=void 0;return n=null===t?e.nextNode():e.nextNode()&&e.nextNode(),{prevNode:t,node:n}}},{key:"checkIframeFilter",value:function(e,t,n,r){var o=!1,a=!1;return(r.forEach(function(e,t){e.val===n&&(o=t,a=e.handled)}),this.compareNodeIframe(e,t,n))?(!1!==o||a?!1!==o&&!a&&(r[o].handled=!0):r.push({val:n,handled:!0}),!0):(!1===o&&r.push({val:n,handled:!1}),!1)}},{key:"handleOpenIframes",value:function(e,t,n,r){var o=this;e.forEach(function(e){!e.handled&&o.getIframeContents(e.val,function(e){o.createInstanceOnIframe(e).forEachNode(t,n,r)})})}},{key:"iterateThroughNodes",value:function(e,t,n,r,o){var a,i=this,s=this.createIterator(t,e,r),l=[],c=[],u=void 0,d=void 0;for(;d=(a=i.getIteratorNode(s)).prevNode,u=a.node;)this.iframes&&this.forEachIframe(t,function(e){return i.checkIframeFilter(u,d,e,l)},function(t){i.createInstanceOnIframe(t).forEachNode(e,function(e){return c.push(e)},r)}),c.push(u);c.forEach(function(e){n(e)}),this.iframes&&this.handleOpenIframes(l,e,n,r),o()}},{key:"forEachNode",value:function(e,t,n){var r=this,o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:function(){},a=this.getContexts(),i=a.length;!i&&o(),a.forEach(function(a){var s=function(){r.iterateThroughNodes(e,a,t,n,function(){--i<=0&&o()})};r.iframes?r.waitForIframes(a,s):s()})}}],[{key:"matches",value:function(e,t){var n=e.matches||e.matchesSelector||e.msMatchesSelector||e.mozMatchesSelector||e.oMatchesSelector||e.webkitMatchesSelector;if(!n)return!1;var r=!1;return("string"==typeof t?[t]:t).every(function(t){return!n.call(e,t)||(r=!0,!1)}),r}}]),e}(),a=function(){function a(e){t(this,a),this.ctx=e,this.ie=!1;var n=window.navigator.userAgent;(n.indexOf("MSIE")>-1||n.indexOf("Trident")>-1)&&(this.ie=!0)}return n(a,[{key:"log",value:function(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"debug",r=this.opt.log;if(!!this.opt.debug)(void 0===r?"undefined":e(r))==="object"&&"function"==typeof r[n]&&r[n]("mark.js: "+t)}},{key:"escapeStr",value:function(e){return e.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")}},{key:"createRegExp",value:function(e){return"disabled"!==this.opt.wildcards&&(e=this.setupWildcardsRegExp(e)),e=this.escapeStr(e),Object.keys(this.opt.synonyms).length&&(e=this.createSynonymsRegExp(e)),(this.opt.ignoreJoiners||this.opt.ignorePunctuation.length)&&(e=this.setupIgnoreJoinersRegExp(e)),this.opt.diacritics&&(e=this.createDiacriticsRegExp(e)),e=this.createMergedBlanksRegExp(e),(this.opt.ignoreJoiners||this.opt.ignorePunctuation.length)&&(e=this.createJoinersRegExp(e)),"disabled"!==this.opt.wildcards&&(e=this.createWildcardsRegExp(e)),e=this.createAccuracyRegExp(e)}},{key:"createSynonymsRegExp",value:function(e){var t=this.opt.synonyms,n=this.opt.caseSensitive?"":"i",r=this.opt.ignoreJoiners||this.opt.ignorePunctuation.length?"\0":"";for(var o in t)if(t.hasOwnProperty(o)){var a=t[o],i="disabled"!==this.opt.wildcards?this.setupWildcardsRegExp(o):this.escapeStr(o),s="disabled"!==this.opt.wildcards?this.setupWildcardsRegExp(a):this.escapeStr(a);""!==i&&""!==s&&(e=e.replace(RegExp("("+this.escapeStr(i)+"|"+this.escapeStr(s)+")","gm"+n),r+("("+this.processSynomyms(i))+"|"+this.processSynomyms(s)+")"+r))}return e}},{key:"processSynomyms",value:function(e){return(this.opt.ignoreJoiners||this.opt.ignorePunctuation.length)&&(e=this.setupIgnoreJoinersRegExp(e)),e}},{key:"setupWildcardsRegExp",value:function(e){return(e=e.replace(/(?:\\)*\?/g,function(e){return"\\"===e.charAt(0)?"?":"\x01"})).replace(/(?:\\)*\*/g,function(e){return"\\"===e.charAt(0)?"*":"\x02"})}},{key:"createWildcardsRegExp",value:function(e){var t="withSpaces"===this.opt.wildcards;return e.replace(/\u0001/g,t?"[\\S\\s]?":"\\S?").replace(/\u0002/g,t?"[\\S\\s]*?":"\\S*")}},{key:"setupIgnoreJoinersRegExp",value:function(e){return e.replace(/[^(|)\\]/g,function(e,t,n){var r=n.charAt(t+1);return/[(|)\\]/.test(r)||""===r?e:e+"\0"})}},{key:"createJoinersRegExp",value:function(e){var t=[],n=this.opt.ignorePunctuation;return Array.isArray(n)&&n.length&&t.push(this.escapeStr(n.join(""))),this.opt.ignoreJoiners&&t.push("\\u00ad\\u200b\\u200c\\u200d"),t.length?e.split(/\u0000+/).join("["+t.join("")+"]*"):e}},{key:"createDiacriticsRegExp",value:function(e){var t=this.opt.caseSensitive?"":"i",n=this.opt.caseSensitive?["a\xe0\xe1\u1EA3\xe3\u1EA1\u0103\u1EB1\u1EAF\u1EB3\u1EB5\u1EB7\xe2\u1EA7\u1EA5\u1EA9\u1EAB\u1EAD\xe4\xe5\u0101\u0105","A\xc0\xc1\u1EA2\xc3\u1EA0\u0102\u1EB0\u1EAE\u1EB2\u1EB4\u1EB6\xc2\u1EA6\u1EA4\u1EA8\u1EAA\u1EAC\xc4\xc5\u0100\u0104","c\xe7\u0107\u010D","C\xc7\u0106\u010C","d\u0111\u010F","D\u0110\u010E","e\xe8\xe9\u1EBB\u1EBD\u1EB9\xea\u1EC1\u1EBF\u1EC3\u1EC5\u1EC7\xeb\u011B\u0113\u0119","E\xc8\xc9\u1EBA\u1EBC\u1EB8\xca\u1EC0\u1EBE\u1EC2\u1EC4\u1EC6\xcb\u011A\u0112\u0118","i\xec\xed\u1EC9\u0129\u1ECB\xee\xef\u012B","I\xcc\xcd\u1EC8\u0128\u1ECA\xce\xcf\u012A","l\u0142","L\u0141","n\xf1\u0148\u0144","N\xd1\u0147\u0143","o\xf2\xf3\u1ECF\xf5\u1ECD\xf4\u1ED3\u1ED1\u1ED5\u1ED7\u1ED9\u01A1\u1EDF\u1EE1\u1EDB\u1EDD\u1EE3\xf6\xf8\u014D","O\xd2\xd3\u1ECE\xd5\u1ECC\xd4\u1ED2\u1ED0\u1ED4\u1ED6\u1ED8\u01A0\u1EDE\u1EE0\u1EDA\u1EDC\u1EE2\xd6\xd8\u014C","r\u0159","R\u0158","s\u0161\u015B\u0219\u015F","S\u0160\u015A\u0218\u015E","t\u0165\u021B\u0163","T\u0164\u021A\u0162","u\xf9\xfa\u1EE7\u0169\u1EE5\u01B0\u1EEB\u1EE9\u1EED\u1EEF\u1EF1\xfb\xfc\u016F\u016B","U\xd9\xda\u1EE6\u0168\u1EE4\u01AF\u1EEA\u1EE8\u1EEC\u1EEE\u1EF0\xdb\xdc\u016E\u016A","y\xfd\u1EF3\u1EF7\u1EF9\u1EF5\xff","Y\xdd\u1EF2\u1EF6\u1EF8\u1EF4\u0178","z\u017E\u017C\u017A","Z\u017D\u017B\u0179"]:["a\xe0\xe1\u1EA3\xe3\u1EA1\u0103\u1EB1\u1EAF\u1EB3\u1EB5\u1EB7\xe2\u1EA7\u1EA5\u1EA9\u1EAB\u1EAD\xe4\xe5\u0101\u0105A\xc0\xc1\u1EA2\xc3\u1EA0\u0102\u1EB0\u1EAE\u1EB2\u1EB4\u1EB6\xc2\u1EA6\u1EA4\u1EA8\u1EAA\u1EAC\xc4\xc5\u0100\u0104","c\xe7\u0107\u010DC\xc7\u0106\u010C","d\u0111\u010FD\u0110\u010E","e\xe8\xe9\u1EBB\u1EBD\u1EB9\xea\u1EC1\u1EBF\u1EC3\u1EC5\u1EC7\xeb\u011B\u0113\u0119E\xc8\xc9\u1EBA\u1EBC\u1EB8\xca\u1EC0\u1EBE\u1EC2\u1EC4\u1EC6\xcb\u011A\u0112\u0118","i\xec\xed\u1EC9\u0129\u1ECB\xee\xef\u012BI\xcc\xcd\u1EC8\u0128\u1ECA\xce\xcf\u012A","l\u0142L\u0141","n\xf1\u0148\u0144N\xd1\u0147\u0143","o\xf2\xf3\u1ECF\xf5\u1ECD\xf4\u1ED3\u1ED1\u1ED5\u1ED7\u1ED9\u01A1\u1EDF\u1EE1\u1EDB\u1EDD\u1EE3\xf6\xf8\u014DO\xd2\xd3\u1ECE\xd5\u1ECC\xd4\u1ED2\u1ED0\u1ED4\u1ED6\u1ED8\u01A0\u1EDE\u1EE0\u1EDA\u1EDC\u1EE2\xd6\xd8\u014C","r\u0159R\u0158","s\u0161\u015B\u0219\u015FS\u0160\u015A\u0218\u015E","t\u0165\u021B\u0163T\u0164\u021A\u0162","u\xf9\xfa\u1EE7\u0169\u1EE5\u01B0\u1EEB\u1EE9\u1EED\u1EEF\u1EF1\xfb\xfc\u016F\u016BU\xd9\xda\u1EE6\u0168\u1EE4\u01AF\u1EEA\u1EE8\u1EEC\u1EEE\u1EF0\xdb\xdc\u016E\u016A","y\xfd\u1EF3\u1EF7\u1EF9\u1EF5\xffY\xdd\u1EF2\u1EF6\u1EF8\u1EF4\u0178","z\u017E\u017C\u017AZ\u017D\u017B\u0179"],r=[];return e.split("").forEach(function(o){n.every(function(n){if(-1!==n.indexOf(o)){if(r.indexOf(n)>-1)return!1;e=e.replace(RegExp("["+n+"]","gm"+t),"["+n+"]"),r.push(n)}return!0})}),e}},{key:"createMergedBlanksRegExp",value:function(e){return e.replace(/[\s]+/gmi,"[\\s]+")}},{key:"createAccuracyRegExp",value:function(e){var t=this,n=this.opt.accuracy,r="string"==typeof n?n:n.value,o="string"==typeof n?[]:n.limiters,a="";switch(o.forEach(function(e){a+="|"+t.escapeStr(e)}),r){case"partially":default:return"()("+e+")";case"complementary":return"()([^"+(a="\\s"+(a||this.escapeStr("!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~\xa1\xbf")))+"]*"+e+"[^"+a+"]*)";case"exactly":return"(^|\\s"+a+")("+e+")(?=$|\\s"+a+")"}}},{key:"getSeparatedKeywords",value:function(e){var t=this,n=[];return e.forEach(function(e){t.opt.separateWordSearch?e.split(" ").forEach(function(e){e.trim()&&-1===n.indexOf(e)&&n.push(e)}):e.trim()&&-1===n.indexOf(e)&&n.push(e)}),{keywords:n.sort(function(e,t){return t.length-e.length}),length:n.length}}},{key:"isNumeric",value:function(e){return Number(parseFloat(e))==e}},{key:"checkRanges",value:function(e){var t=this;if(!Array.isArray(e)||"[object Object]"!==Object.prototype.toString.call(e[0]))return this.log("markRanges() will only accept an array of objects"),this.opt.noMatch(e),[];var n=[],r=0;return e.sort(function(e,t){return e.start-t.start}).forEach(function(e){var o=t.callNoMatchOnInvalidRanges(e,r),a=o.start,i=o.end;o.valid&&(e.start=a,e.length=i-a,n.push(e),r=i)}),n}},{key:"callNoMatchOnInvalidRanges",value:function(e,t){var n=void 0,r=void 0,o=!1;return e&&void 0!==e.start?(r=(n=parseInt(e.start,10))+parseInt(e.length,10),this.isNumeric(e.start)&&this.isNumeric(e.length)&&r-t>0&&r-n>0?o=!0:(this.log("Ignoring invalid or overlapping range: "+JSON.stringify(e)),this.opt.noMatch(e))):(this.log("Ignoring invalid range: "+JSON.stringify(e)),this.opt.noMatch(e)),{start:n,end:r,valid:o}}},{key:"checkWhitespaceRanges",value:function(e,t,n){var r=void 0,o=!0,a=n.length,i=t-a,s=parseInt(e.start,10)-i;return(r=(s=s>a?a:s)+parseInt(e.length,10))>a&&(r=a,this.log("End range automatically set to the max value of "+a)),s<0||r-s<0||s>a||r>a?(o=!1,this.log("Invalid range: "+JSON.stringify(e)),this.opt.noMatch(e)):""===n.substring(s,r).replace(/\s+/g,"")&&(o=!1,this.log("Skipping whitespace only range: "+JSON.stringify(e)),this.opt.noMatch(e)),{start:s,end:r,valid:o}}},{key:"getTextNodes",value:function(e){var t=this,n="",r=[];this.iterator.forEachNode(NodeFilter.SHOW_TEXT,function(e){r.push({start:n.length,end:(n+=e.textContent).length,node:e})},function(e){return t.matchesExclude(e.parentNode)?NodeFilter.FILTER_REJECT:NodeFilter.FILTER_ACCEPT},function(){e({value:n,nodes:r})})}},{key:"matchesExclude",value:function(e){return o.matches(e,this.opt.exclude.concat(["script","style","title","head","html"]))}},{key:"wrapRangeInTextNode",value:function(e,t,n){var r=this.opt.element?this.opt.element:"mark",o=e.splitText(t),a=o.splitText(n-t),i=document.createElement(r);return i.setAttribute("data-markjs","true"),this.opt.className&&i.setAttribute("class",this.opt.className),i.textContent=o.textContent,o.parentNode.replaceChild(i,o),a}},{key:"wrapRangeInMappedTextNode",value:function(e,t,n,r,o){var a=this;e.nodes.every(function(i,s){var l=e.nodes[s+1];if(void 0===l||l.start>t){if(!r(i.node))return!1;var c=t-i.start,u=(n>i.end?i.end:n)-i.start,d=e.value.substr(0,i.start),p=e.value.substr(u+i.start);if(i.node=a.wrapRangeInTextNode(i.node,c,u),e.value=d+p,e.nodes.forEach(function(t,n){n>=s&&(e.nodes[n].start>0&&n!==s&&(e.nodes[n].start-=u),e.nodes[n].end-=u)}),n-=u,o(i.node.previousSibling,i.start),!(n>i.end))return!1;t=i.end}return!0})}},{key:"wrapMatches",value:function(e,t,n,r,o){var a=this,i=0===t?0:t+1;this.getTextNodes(function(t){t.nodes.forEach(function(t){t=t.node;for(var o=void 0;null!==(o=e.exec(t.textContent))&&""!==o[i];){if(!!n(o[i],t)){var s=o.index;if(0!==i)for(var l=1;l<i;l++)s+=o[l].length;r((t=a.wrapRangeInTextNode(t,s,s+o[i].length)).previousSibling),e.lastIndex=0}}}),o()})}},{key:"wrapMatchesAcrossElements",value:function(e,t,n,r,o){var a=this,i=0===t?0:t+1;this.getTextNodes(function(t){for(var s=void 0;null!==(s=e.exec(t.value))&&""!==s[i];){var l=s.index;if(0!==i)for(var c=1;c<i;c++)l+=s[c].length;var u=l+s[i].length;a.wrapRangeInMappedTextNode(t,l,u,function(e){return n(s[i],e)},function(t,n){e.lastIndex=n,r(t)})}o()})}},{key:"wrapRangeFromIndex",value:function(e,t,n,r){var o=this;this.getTextNodes(function(a){var i=a.value.length;e.forEach(function(e,r){var s=o.checkWhitespaceRanges(e,i,a.value),l=s.start,c=s.end;s.valid&&o.wrapRangeInMappedTextNode(a,l,c,function(n){return t(n,e,a.value.substring(l,c),r)},function(t){n(t,e)})}),r()})}},{key:"unwrapMatches",value:function(e){for(var t=e.parentNode,n=document.createDocumentFragment();e.firstChild;)n.appendChild(e.removeChild(e.firstChild));t.replaceChild(n,e),this.ie?this.normalizeTextNode(t):t.normalize()}},{key:"normalizeTextNode",value:function(e){if(!!e){if(3===e.nodeType)for(;e.nextSibling&&3===e.nextSibling.nodeType;)e.nodeValue+=e.nextSibling.nodeValue,e.parentNode.removeChild(e.nextSibling);else this.normalizeTextNode(e.firstChild);this.normalizeTextNode(e.nextSibling)}}},{key:"markRegExp",value:function(e,t){var n=this;this.opt=t,this.log('Searching with expression "'+e+'"');var r=0,o="wrapMatches";this.opt.acrossElements&&(o="wrapMatchesAcrossElements"),this[o](e,this.opt.ignoreGroups,function(e,t){return n.opt.filter(t,e,r)},function(e){r++,n.opt.each(e)},function(){0===r&&n.opt.noMatch(e),n.opt.done(r)})}},{key:"mark",value:function(e,t){var n=this;this.opt=t;var r=0,o="wrapMatches",a=this.getSeparatedKeywords("string"==typeof e?[e]:e),i=a.keywords,s=a.length,l=this.opt.caseSensitive?"":"i";this.opt.acrossElements&&(o="wrapMatchesAcrossElements"),0===s?this.opt.done(r):!function e(t){var a=RegExp(n.createRegExp(t),"gm"+l),c=0;n.log('Searching with expression "'+a+'"'),n[o](a,1,function(e,o){return n.opt.filter(o,t,r,c)},function(e){c++,r++,n.opt.each(e)},function(){0===c&&n.opt.noMatch(t),i[s-1]===t?n.opt.done(r):e(i[i.indexOf(t)+1])})}(i[0])}},{key:"markRanges",value:function(e,t){var n=this;this.opt=t;var r=0,o=this.checkRanges(e);o&&o.length?(this.log("Starting to mark with the following ranges: "+JSON.stringify(o)),this.wrapRangeFromIndex(o,function(e,t,r,o){return n.opt.filter(e,t,r,o)},function(e,t){r++,n.opt.each(e,t)},function(){n.opt.done(r)})):this.opt.done(r)}},{key:"unmark",value:function(e){var t=this;this.opt=e;var n=this.opt.element?this.opt.element:"*";n+="[data-markjs]",this.opt.className&&(n+="."+this.opt.className),this.log('Removal selector "'+n+'"'),this.iterator.forEachNode(NodeFilter.SHOW_ELEMENT,function(e){t.unwrapMatches(e)},function(e){var r=o.matches(e,n),a=t.matchesExclude(e);return!r||a?NodeFilter.FILTER_REJECT:NodeFilter.FILTER_ACCEPT},this.opt.done)}},{key:"opt",set:function(e){this._opt=r({},{element:"",className:"",exclude:[],iframes:!1,iframesTimeout:5e3,separateWordSearch:!0,diacritics:!0,synonyms:{},accuracy:"partially",acrossElements:!1,caseSensitive:!1,ignoreJoiners:!1,ignoreGroups:0,ignorePunctuation:[],wildcards:"disabled",each:function(){},noMatch:function(){},filter:function(){return!0},done:function(){},debug:!1,log:window.console},e)},get:function(){return this._opt}},{key:"iterator",get:function(){return new o(this.ctx,this.opt.iframes,this.opt.exclude,this.opt.iframesTimeout)}}]),a}();return function(e){var t=this,n=new a(e);return this.mark=function(e,r){return n.mark(e,r),t},this.markRegExp=function(e,r){return n.markRegExp(e,r),t},this.markRanges=function(e,r){return n.markRanges(e,r),t},this.unmark=function(e){return n.unmark(e),t},this}},e.exports=n()},74865:function(e){var t,n;t=0,n=function(){var e,t,n,r={};r.version="0.2.0";var o=r.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 i(e){return(-1+e)*100}r.configure=function(e){var t,n;for(t in e)void 0!==(n=e[t])&&e.hasOwnProperty(t)&&(o[t]=n);return this},r.status=null,r.set=function(e){var t=r.isStarted();e=a(e,o.minimum,1),r.status=1===e?null:e;var n=r.render(!t),i=n.querySelector(o.barSelector),c=o.speed,u=o.easing;return n.offsetWidth,s(function(t){""===o.positionUsing&&(o.positionUsing=r.getPositioningCSS()),l(i,function(e,t,n){var r;if("translate3d"===o.positionUsing)r={transform:"translate3d("+(-1+e)*100+"%,0,0)"};else if("translate"===o.positionUsing)r={transform:"translate("+(-1+e)*100+"%,0)"};else r={"margin-left":(-1+e)*100+"%"};return r.transition="all "+t+"ms "+n,r}(e,c,u)),1===e?(l(n,{transition:"none",opacity:1}),n.offsetWidth,setTimeout(function(){l(n,{transition:"all "+c+"ms linear",opacity:0}),setTimeout(function(){r.remove(),t()},c)},c)):setTimeout(t,c)}),this},r.isStarted=function(){return"number"==typeof r.status},r.start=function(){!r.status&&r.set(0);var e=function(){setTimeout(function(){r.status&&(r.trickle(),e())},o.trickleSpeed)};return o.trickle&&e(),this},r.done=function(e){return e||r.status?r.inc(.3+.5*Math.random()).set(1):this},r.inc=function(e){var t=r.status;return t?("number"!=typeof e&&(e=(1-t)*a(Math.random()*t,.1,.95)),t=a(t+e,0,.994),r.set(t)):r.start()},r.trickle=function(){return r.inc(Math.random()*o.trickleRate)},e=0,t=0,r.promise=function(n){return n&&"resolved"!==n.state()?(0===t&&r.start(),e++,t++,n.always(function(){0==--t?(e=0,r.done()):r.set((e-t)/e)}),this):this},r.render=function(e){if(r.isRendered())return document.getElementById("nprogress");u(document.documentElement,"nprogress-busy");var t=document.createElement("div");t.id="nprogress",t.innerHTML=o.template;var n,a=t.querySelector(o.barSelector),i=e?"-100":function(e){return(-1+e)*100}(r.status||0),s=document.querySelector(o.parent);return l(a,{transition:"all 0 linear",transform:"translate3d("+i+"%,0,0)"}),!o.showSpinner&&(n=t.querySelector(o.spinnerSelector))&&f(n),s!=document.body&&u(s,"nprogress-custom-parent"),s.appendChild(t),t},r.remove=function(){d(document.documentElement,"nprogress-busy"),d(document.querySelector(o.parent),"nprogress-custom-parent");var e=document.getElementById("nprogress");e&&f(e)},r.isRendered=function(){return!!document.getElementById("nprogress")},r.getPositioningCSS=function(){var e=document.body.style,t="WebkitTransform"in e?"Webkit":"MozTransform"in e?"Moz":"msTransform"in e?"ms":"OTransform"in e?"O":"";return t+"Perspective"in e?"translate3d":t+"Transform"in e?"translate":"margin"};var s=(n=[],function(e){n.push(e),1==n.length&&!function e(){var t=n.shift();t&&t(e)}()}),l=function(){var e=["Webkit","O","Moz","ms"],t={};function n(n,r,o){r=function(n){return t[n=n.replace(/^-ms-/,"ms-").replace(/-([\da-z])/gi,function(e,t){return t.toUpperCase()})]||(t[n]=function(t){var n=document.body.style;if(t in n)return t;for(var r,o=e.length,a=t.charAt(0).toUpperCase()+t.slice(1);o--;)if((r=e[o]+a)in n)return r;return t}(n))}(r),n.style[r]=o}return function(e,t){var r,o,a=arguments;if(2==a.length)for(r in t)void 0!==(o=t[r])&&t.hasOwnProperty(r)&&n(e,r,o);else n(e,a[1],a[2])}}();function c(e,t){return("string"==typeof e?e:p(e)).indexOf(" "+t+" ")>=0}function u(e,t){var n=p(e),r=n+t;!c(n,t)&&(e.className=r.substring(1))}function d(e,t){var n,r=p(e);c(e,t)&&(n=r.replace(" "+t+" "," "),e.className=n.substring(1,n.length-1))}function p(e){return(" "+(e.className||"")+" ").replace(/\s+/gi," ")}function f(e){e&&e.parentNode&&e.parentNode.removeChild(e)}return r},"function"==typeof define&&define.amd?define(n):e.exports=n()},57874:function(){!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+(?:\.\w+)*(?=\+?=)/,inside:{environment:{pattern:RegExp("(^|[\\s;|&]|[<>]\\()"+t),lookbehind:!0,alias:"constant"}},alias:"variable",lookbehind:!0},parameter:{pattern:/(^|\s)-{1,2}(?:\w+:[+-]?)?\w+(?:\.\w+)*(?=[=\s]|$)/,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|cargo|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|java|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|sysctl|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 o=["comment","function-name","for-or-select","assign-left","parameter","string","environment","function","keyword","builtin","boolean","file-descriptor","operator","punctuation","number"],a=r.variable[1].inside,i=0;i<o.length;i++)a[o[i]]=e.languages.bash[o[i]];e.languages.sh=e.languages.bash,e.languages.shell=e.languages.bash}(Prism)},40728:function(){var e,t;(e=Prism).languages.diff={coord:[/^(?:\*{3}|-{3}|\+{3}).*$/m,/^@@.*@@$/m,/^\d.*$/m]},Object.keys(t={"deleted-sign":"-","deleted-arrow":"<","inserted-sign":"+","inserted-arrow":">",unchanged:" ",diff:"!"}).forEach(function(n){var r=t[n],o=[];!/^\w+$/.test(n)&&o.push(/\w+/.exec(n)[0]),"diff"===n&&o.push("bold"),e.languages.diff[n]={pattern:RegExp("^(?:["+r+"].*(?:\r\n?|\n|(?![\\s\\S])))+","m"),alias:o,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})},29525:function(){Prism.languages.ini={comment:{pattern:/(^[ \f\t\v]*)[#;][^\n\r]*/m,lookbehind:!0},section:{pattern:/(^[ \f\t\v]*)\[[^\n\r\]]*\]?/m,lookbehind:!0,inside:{"section-name":{pattern:/(^\[[ \f\t\v]*)[^ \f\t\v\]]+(?:[ \f\t\v]+[^ \f\t\v\]]+)*/,lookbehind:!0,alias:"selector"},punctuation:/\[|\]/}},key:{pattern:/(^[ \f\t\v]*)[^ \f\n\r\t\v=]+(?:[ \f\t\v]+[^ \f\n\r\t\v=]+)*(?=[ \f\t\v]*=)/m,lookbehind:!0,alias:"attr-name"},value:{pattern:/(=[ \f\t\v]*)[^ \f\n\r\t\v]+(?:[ \f\t\v]+[^ \f\n\r\t\v]+)*/,lookbehind:!0,alias:"attr-value",inside:{"inner-value":{pattern:/^("|').+(?=\1$)/,lookbehind:!0}}},punctuation:/=/}},96854:function(){!function(e){function t(e,t){return"___"+e.toUpperCase()+t+"___"}Object.defineProperties(e.languages["markup-templating"]={},{buildPlaceholders:{value:function(n,r,o,a){if(n.language===r){var i=n.tokenStack=[];n.code=n.code.replace(o,function(e){if("function"==typeof a&&!a(e))return e;for(var o,s=i.length;-1!==n.code.indexOf(o=t(r,s));)++s;return i[s]=e,o}),n.grammar=e.languages.markup}}},tokenizePlaceholders:{value:function(n,r){if(n.language===r&&!!n.tokenStack){n.grammar=e.languages[r];var o=0,a=Object.keys(n.tokenStack);!function i(s){for(var l=0;l<s.length&&!(o>=a.length);l++){;var c=s[l];if("string"==typeof c||c.content&&"string"==typeof c.content){var u=a[o],d=n.tokenStack[u],p="string"==typeof c?c:c.content,f=t(r,u),g=p.indexOf(f);if(g>-1){++o;var m=p.substring(0,g),h=new e.Token(r,e.tokenize(d,n.grammar),"language-"+r,d),b=p.substring(g+f.length),y=[];m&&y.push.apply(y,i([m])),y.push(h),b&&y.push.apply(y,i([b])),"string"==typeof c?s.splice.apply(s,[l,1].concat(y)):c.content=y}}else c.content&&i(c.content)}return s}(n.tokens)}}}})}(Prism)},86862:function(){var e;(e=Prism.languages.powershell={comment:[{pattern:/(^|[^`])<#[\s\S]*?#>/,lookbehind:!0},{pattern:/(^|[^`])#.*/,lookbehind:!0}],string:[{pattern:/"(?:`[\s\S]|[^`"])*"/,greedy:!0,inside:null},{pattern:/'(?:[^']|'')*'/,greedy:!0}],namespace:/\[[a-z](?:\[(?:\[[^\]]*\]|[^\[\]])*\]|[^\[\]])*\]/i,boolean:/\$(?:false|true)\b/i,variable:/\$\w+\b/,function:[/\b(?:Add|Approve|Assert|Backup|Block|Checkpoint|Clear|Close|Compare|Complete|Compress|Confirm|Connect|Convert|ConvertFrom|ConvertTo|Copy|Debug|Deny|Disable|Disconnect|Dismount|Edit|Enable|Enter|Exit|Expand|Export|Find|ForEach|Format|Get|Grant|Group|Hide|Import|Initialize|Install|Invoke|Join|Limit|Lock|Measure|Merge|Move|New|Open|Optimize|Out|Ping|Pop|Protect|Publish|Push|Read|Receive|Redo|Register|Remove|Rename|Repair|Request|Reset|Resize|Resolve|Restart|Restore|Resume|Revoke|Save|Search|Select|Send|Set|Show|Skip|Sort|Split|Start|Step|Stop|Submit|Suspend|Switch|Sync|Tee|Test|Trace|Unblock|Undo|Uninstall|Unlock|Unprotect|Unpublish|Unregister|Update|Use|Wait|Watch|Where|Write)-[a-z]+\b/i,/\b(?:ac|cat|chdir|clc|cli|clp|clv|compare|copy|cp|cpi|cpp|cvpa|dbp|del|diff|dir|ebp|echo|epal|epcsv|epsn|erase|fc|fl|ft|fw|gal|gbp|gc|gci|gcs|gdr|gi|gl|gm|gp|gps|group|gsv|gu|gv|gwmi|iex|ii|ipal|ipcsv|ipsn|irm|iwmi|iwr|kill|lp|ls|measure|mi|mount|move|mp|mv|nal|ndr|ni|nv|ogv|popd|ps|pushd|pwd|rbp|rd|rdr|ren|ri|rm|rmdir|rni|rnp|rp|rv|rvpa|rwmi|sal|saps|sasv|sbp|sc|select|set|shcm|si|sl|sleep|sls|sort|sp|spps|spsv|start|sv|swmi|tee|trcm|type|write)\b/i],keyword:/\b(?:Begin|Break|Catch|Class|Continue|Data|Define|Do|DynamicParam|Else|ElseIf|End|Exit|Filter|Finally|For|ForEach|From|Function|If|InlineScript|Parallel|Param|Process|Return|Sequence|Switch|Throw|Trap|Try|Until|Using|Var|While|Workflow)\b/i,operator:{pattern:/(^|\W)(?:!|-(?:b?(?:and|x?or)|as|(?:Not)?(?:Contains|In|Like|Match)|eq|ge|gt|is(?:Not)?|Join|le|lt|ne|not|Replace|sh[lr])\b|-[-=]?|\+[+=]?|[*\/%]=?)/i,lookbehind:!0},punctuation:/[|{}[\];(),.]/}).string[0].inside={function:{pattern:/(^|[^`])\$\((?:\$\([^\r\n()]*\)|(?!\$\()[^\r\n)])*\)/,lookbehind:!0,inside:e},boolean:e.boolean,variable:e.variable}},16208:function(e,t,n){var r={"./prism-bash":"57874","./prism-diff":"40728","./prism-ini":"29525","./prism-powershell":"86862"};function o(e){return n(a(e))}function a(e){if(!n.o(r,e)){var t=Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return r[e]}o.keys=function(){return Object.keys(r)},o.resolve=a,e.exports=o,o.id="16208"},92703:function(e,t,n){"use strict";var r=n(50414);function o(){}function a(){}a.resetWarningCache=o,e.exports=function(){function e(e,t,n,o,a,i){if(i!==r){var s=Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw s.name="Invariant Violation",s}}function t(){return e}e.isRequired=e;var n={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:a,resetWarningCache:o};return n.PropTypes=n,n}},45697:function(e,t,n){e.exports=n(92703)()},50414:function(e){"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},64448:function(e,t,n){"use strict";var r,o,a,i,s,l,c=n(67294),u=n(63840);function d(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 p=new Set,f={};function g(e,t){m(e,t),m(e+"Capture",t)}function m(e,t){for(f[e]=t,e=0;e<t.length;e++)p.add(t[e])}var h=!("undefined"==typeof window||void 0===window.document||void 0===window.document.createElement),b=Object.prototype.hasOwnProperty,y=/^[: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]*$/,v={},w={};function k(e,t,n,r,o,a,i){this.acceptsBooleans=2===t||3===t||4===t,this.attributeName=r,this.attributeNamespace=o,this.mustUseProperty=n,this.propertyName=e,this.type=t,this.sanitizeURL=a,this.removeEmptyString=i}var S={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach(function(e){S[e]=new k(e,0,!1,e,null,!1,!1)}),[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach(function(e){var t=e[0];S[t]=new k(t,1,!1,e[1],null,!1,!1)}),["contentEditable","draggable","spellCheck","value"].forEach(function(e){S[e]=new k(e,2,!1,e.toLowerCase(),null,!1,!1)}),["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach(function(e){S[e]=new k(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){S[e]=new k(e,3,!1,e.toLowerCase(),null,!1,!1)}),["checked","multiple","muted","selected"].forEach(function(e){S[e]=new k(e,3,!0,e,null,!1,!1)}),["capture","download"].forEach(function(e){S[e]=new k(e,4,!1,e,null,!1,!1)}),["cols","rows","size","span"].forEach(function(e){S[e]=new k(e,6,!1,e,null,!1,!1)}),["rowSpan","start"].forEach(function(e){S[e]=new k(e,5,!1,e.toLowerCase(),null,!1,!1)});var x=/[\-:]([a-z])/g;function _(e){return e[1].toUpperCase()}function E(e,t,n,r){var o,a=S.hasOwnProperty(t)?S[t]:null;if(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":if(r)return!1;if(null!==n)return!n.acceptsBooleans;return"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?(o=t,(!!b.call(w,o)||!b.call(v,o)&&(y.test(o)?w[o]=!0:(v[o]=!0,!1)))&&(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(x,_);S[t]=new k(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(x,_);S[t]=new k(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(x,_);S[t]=new k(t,1,!1,e,"http://www.w3.org/XML/1998/namespace",!1,!1)}),["tabIndex","crossOrigin"].forEach(function(e){S[e]=new k(e,1,!1,e.toLowerCase(),null,!1,!1)}),S.xlinkHref=new k("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1),["src","href","action","formAction"].forEach(function(e){S[e]=new k(e,1,!1,e.toLowerCase(),null,!0,!0)});var O=c.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED,P=Symbol.for("react.element"),j=Symbol.for("react.portal"),C=Symbol.for("react.fragment"),T=Symbol.for("react.strict_mode"),I=Symbol.for("react.profiler"),A=Symbol.for("react.provider"),N=Symbol.for("react.context"),L=Symbol.for("react.forward_ref"),R=Symbol.for("react.suspense"),D=Symbol.for("react.suspense_list"),F=Symbol.for("react.memo"),M=Symbol.for("react.lazy");Symbol.for("react.scope"),Symbol.for("react.debug_trace_mode");var B=Symbol.for("react.offscreen");Symbol.for("react.legacy_hidden"),Symbol.for("react.cache"),Symbol.for("react.tracing_marker");var z=Symbol.iterator;function $(e){return null===e||"object"!=typeof e?null:"function"==typeof(e=z&&e[z]||e["@@iterator"])?e:null}var U,H=Object.assign;function q(e){if(void 0===U)try{throw Error()}catch(e){var t=e.stack.trim().match(/\n( *(at )?)/);U=t&&t[1]||""}return"\n"+U+e}var Q=!1;function Z(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(e){var r=e}Reflect.construct(e,[],t)}else{try{t.call()}catch(e){r=e}e.call(t.prototype)}}else{try{throw Error()}catch(e){r=e}e()}}catch(t){if(t&&r&&"string"==typeof t.stack){for(var o=t.stack.split("\n"),a=r.stack.split("\n"),i=o.length-1,s=a.length-1;1<=i&&0<=s&&o[i]!==a[s];)s--;for(;1<=i&&0<=s;i--,s--)if(o[i]!==a[s]){if(1!==i||1!==s)do if(i--,0>--s||o[i]!==a[s]){var l="\n"+o[i].replace(" at new "," at ");return e.displayName&&l.includes("<anonymous>")&&(l=l.replace("<anonymous>",e.displayName)),l}while(1<=i&&0<=s);break}}}finally{Q=!1,Error.prepareStackTrace=n}return(e=e?e.displayName||e.name:"")?q(e):""}function W(e){switch(typeof e){case"boolean":case"number":case"string":case"undefined":case"object":return e;default:return""}}function V(e){var t=e.type;return(e=e.nodeName)&&"input"===e.toLowerCase()&&("checkbox"===t||"radio"===t)}function G(e){e._valueTracker||(e._valueTracker=function(e){var t=V(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 o=n.get,a=n.set;return Object.defineProperty(e,t,{configurable:!0,get:function(){return o.call(this)},set:function(e){r=""+e,a.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 Y(e){if(!e)return!1;var t=e._valueTracker;if(!t)return!0;var n=t.getValue(),r="";return e&&(r=V(e)?e.checked?"true":"false":e.value),(e=r)!==n&&(t.setValue(e),!0)}function K(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 X(e,t){var n=t.checked;return H({},t,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:null!=n?n:e._wrapperState.initialChecked})}function J(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 ee(e,t){null!=(t=t.checked)&&E(e,"checked",t,!1)}function et(e,t){ee(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){e.removeAttribute("value");return}t.hasOwnProperty("value")?er(e,t.type,n):t.hasOwnProperty("defaultValue")&&er(e,t.type,W(t.defaultValue)),null==t.checked&&null!=t.defaultChecked&&(e.defaultChecked=!!t.defaultChecked)}function en(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 er(e,t,n){("number"!==t||K(e.ownerDocument)!==e)&&(null==n?e.defaultValue=""+e._wrapperState.initialValue:e.defaultValue!==""+n&&(e.defaultValue=""+n))}var eo=Array.isArray;function ea(e,t,n,r){if(e=e.options,t){t={};for(var o=0;o<n.length;o++)t["$"+n[o]]=!0;for(n=0;n<e.length;n++)o=t.hasOwnProperty("$"+e[n].value),e[n].selected!==o&&(e[n].selected=o),o&&r&&(e[n].defaultSelected=!0)}else{for(o=0,n=""+W(n),t=null;o<e.length;o++){if(e[o].value===n){e[o].selected=!0,r&&(e[o].defaultSelected=!0);return}null!==t||e[o].disabled||(t=e[o])}null!==t&&(t.selected=!0)}}function ei(e,t){if(null!=t.dangerouslySetInnerHTML)throw Error(d(91));return H({},t,{value:void 0,defaultValue:void 0,children:""+e._wrapperState.initialValue})}function es(e,t){var n=t.value;if(null==n){if(n=t.children,t=t.defaultValue,null!=n){if(null!=t)throw Error(d(92));if(eo(n)){if(1<n.length)throw Error(d(93));n=n[0]}t=n}null==t&&(t=""),n=t}e._wrapperState={initialValue:W(n)}}function el(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 ec(e){var t=e.textContent;t===e._wrapperState.initialValue&&""!==t&&null!==t&&(e.value=t)}function eu(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 ed(e,t){return null==e||"http://www.w3.org/1999/xhtml"===e?eu(t):"http://www.w3.org/2000/svg"===e&&"foreignObject"===t?"http://www.w3.org/1999/xhtml":e}var ep,ef,eg=(ep=function(e,t){if("http://www.w3.org/2000/svg"!==e.namespaceURI||"innerHTML"in e)e.innerHTML=t;else{for((ef=ef||document.createElement("div")).innerHTML="<svg>"+t.valueOf().toString()+"</svg>",t=ef.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 ep(e,t,n,r)})}:ep);function em(e,t){if(t){var n=e.firstChild;if(n&&n===e.lastChild&&3===n.nodeType){n.nodeValue=t;return}}e.textContent=t}var eh={animationIterationCount:!0,aspectRatio:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},eb=["Webkit","ms","Moz","O"];function ey(e,t,n){return null==t||"boolean"==typeof t||""===t?"":n||"number"!=typeof t||0===t||eh.hasOwnProperty(e)&&eh[e]?(""+t).trim():t+"px"}function ev(e,t){for(var n in e=e.style,t)if(t.hasOwnProperty(n)){var r=0===n.indexOf("--"),o=ey(n,t[n],r);"float"===n&&(n="cssFloat"),r?e.setProperty(n,o):e[n]=o}}Object.keys(eh).forEach(function(e){eb.forEach(function(t){eh[t=t+e.charAt(0).toUpperCase()+e.substring(1)]=eh[e]})});var ew=H({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 ek(e,t){if(t){if(ew[e]&&(null!=t.children||null!=t.dangerouslySetInnerHTML))throw Error(d(137,e));if(null!=t.dangerouslySetInnerHTML){if(null!=t.children)throw Error(d(60));if("object"!=typeof t.dangerouslySetInnerHTML||!("__html"in t.dangerouslySetInnerHTML))throw Error(d(61))}if(null!=t.style&&"object"!=typeof t.style)throw Error(d(62))}}function eS(e,t){if(-1===e.indexOf("-"))return"string"==typeof t.is;switch(e){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}var ex=null;function e_(e){return(e=e.target||e.srcElement||window).correspondingUseElement&&(e=e.correspondingUseElement),3===e.nodeType?e.parentNode:e}var eE=null,eO=null,eP=null;function ej(e){if(e=rD(e)){if("function"!=typeof eE)throw Error(d(280));var t=e.stateNode;t&&(t=rM(t),eE(e.stateNode,e.type,t))}}function eC(e){eO?eP?eP.push(e):eP=[e]:eO=e}function eT(){if(eO){var e=eO,t=eP;if(eP=eO=null,ej(e),t)for(e=0;e<t.length;e++)ej(t[e])}}function eI(e,t){return e(t)}function eA(){}var eN=!1;function eL(e,t,n){if(eN)return e(t,n);eN=!0;try{return eI(e,t,n)}finally{eN=!1,(null!==eO||null!==eP)&&(eA(),eT())}}function eR(e,t){var n=e.stateNode;if(null===n)return null;var r=rM(n);if(null===r)return null;switch(n=r[t],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;default:e=!1}if(e)return null;if(n&&"function"!=typeof n)throw Error(d(231,t,typeof n));return n}var eD=!1;if(h)try{var eF={};Object.defineProperty(eF,"passive",{get:function(){eD=!0}}),window.addEventListener("test",eF,eF),window.removeEventListener("test",eF,eF)}catch(e){eD=!1}function eM(e,t,n,r,o,a,i,s,l){var c=Array.prototype.slice.call(arguments,3);try{t.apply(n,c)}catch(e){this.onError(e)}}var eB=!1,ez=null,e$=!1,eU=null,eH={onError:function(e){eB=!0,ez=e}};function eq(e,t,n,r,o,a,i,s,l){eB=!1,ez=null,eM.apply(eH,arguments)}function eQ(e){var t=e,n=e;if(e.alternate)for(;t.return;)t=t.return;else{e=t;do 0!=(4098&(t=e).flags)&&(n=t.return),e=t.return;while(e)}return 3===t.tag?n:null}function eZ(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 eW(e){if(eQ(e)!==e)throw Error(d(188))}function eV(e){return null!==(e=function(e){var t=e.alternate;if(!t){if(null===(t=eQ(e)))throw Error(d(188));return t!==e?null:e}for(var n=e,r=t;;){var o=n.return;if(null===o)break;var a=o.alternate;if(null===a){if(null!==(r=o.return)){n=r;continue}break}if(o.child===a.child){for(a=o.child;a;){if(a===n)return eW(o),e;if(a===r)return eW(o),t;a=a.sibling}throw Error(d(188))}if(n.return!==r.return)n=o,r=a;else{for(var i=!1,s=o.child;s;){if(s===n){i=!0,n=o,r=a;break}if(s===r){i=!0,r=o,n=a;break}s=s.sibling}if(!i){for(s=a.child;s;){if(s===n){i=!0,n=a,r=o;break}if(s===r){i=!0,r=a,n=o;break}s=s.sibling}if(!i)throw Error(d(189))}}if(n.alternate!==r)throw Error(d(190))}if(3!==n.tag)throw Error(d(188));return n.stateNode.current===n?e:t}(e))?function e(t){if(5===t.tag||6===t.tag)return t;for(t=t.child;null!==t;){var n=e(t);if(null!==n)return n;t=t.sibling}return null}(e):null}var eG=u.unstable_scheduleCallback,eY=u.unstable_cancelCallback,eK=u.unstable_shouldYield,eX=u.unstable_requestPaint,eJ=u.unstable_now,e0=u.unstable_getCurrentPriorityLevel,e1=u.unstable_ImmediatePriority,e2=u.unstable_UserBlockingPriority,e4=u.unstable_NormalPriority,e3=u.unstable_LowPriority,e9=u.unstable_IdlePriority,e6=null,e8=null,e5=Math.clz32?Math.clz32:function(e){return 0==(e>>>=0)?32:31-(e7(e)/te|0)|0},e7=Math.log,te=Math.LN2,tt=64,tn=4194304;function tr(e){switch(e&-e){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return 4194240&e;case 4194304:case 8388608:case 0x1000000:case 0x2000000:case 0x4000000:return 0x7c00000&e;case 0x8000000:return 0x8000000;case 0x10000000:return 0x10000000;case 0x20000000:return 0x20000000;case 0x40000000:return 0x40000000;default:return e}}function to(e,t){var n=e.pendingLanes;if(0===n)return 0;var r=0,o=e.suspendedLanes,a=e.pingedLanes,i=0xfffffff&n;if(0!==i){var s=i&~o;0!==s?r=tr(s):0!=(a&=i)&&(r=tr(a))}else 0!=(i=n&~o)?r=tr(i):0!==a&&(r=tr(a));if(0===r)return 0;if(0!==t&&t!==r&&0==(t&o)&&((o=r&-r)>=(a=t&-t)||16===o&&0!=(4194240&a)))return t;if(0!=(4&r)&&(r|=16&n),0!==(t=e.entangledLanes))for(e=e.entanglements,t&=r;0<t;)o=1<<(n=31-e5(t)),r|=e[n],t&=~o;return r}function ta(e){return 0!=(e=-0x40000001&e.pendingLanes)?e:0x40000000&e?0x40000000:0}function ti(){var e=tt;return 0==(4194240&(tt<<=1))&&(tt=64),e}function ts(e){for(var t=[],n=0;31>n;n++)t.push(e);return t}function tl(e,t,n){e.pendingLanes|=t,0x20000000!==t&&(e.suspendedLanes=0,e.pingedLanes=0),e=e.eventTimes,e[t=31-e5(t)]=n}function tc(e,t){var n=e.entangledLanes|=t;for(e=e.entanglements;n;){var r=31-e5(n),o=1<<r;o&t|e[r]&t&&(e[r]|=t),n&=~o}}var tu=0;function td(e){return 1<(e&=-e)?4<e?0!=(0xfffffff&e)?16:0x20000000:4:1}var tp,tf,tg,tm,th,tb=!1,ty=[],tv=null,tw=null,tk=null,tS=new Map,tx=new Map,t_=[],tE="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 tO(e,t){switch(e){case"focusin":case"focusout":tv=null;break;case"dragenter":case"dragleave":tw=null;break;case"mouseover":case"mouseout":tk=null;break;case"pointerover":case"pointerout":tS.delete(t.pointerId);break;case"gotpointercapture":case"lostpointercapture":tx.delete(t.pointerId)}}function tP(e,t,n,r,o,a){return null===e||e.nativeEvent!==a?(e={blockedOn:t,domEventName:n,eventSystemFlags:r,nativeEvent:a,targetContainers:[o]},null!==t&&null!==(t=rD(t))&&tf(t),e):(e.eventSystemFlags|=r,t=e.targetContainers,null!==o&&-1===t.indexOf(o)&&t.push(o),e)}function tj(e){var t=rR(e.target);if(null!==t){var n=eQ(t);if(null!==n){if(13===(t=n.tag)){if(null!==(t=eZ(n))){e.blockedOn=t,th(e.priority,function(){tg(n)});return}}else if(3===t&&n.stateNode.current.memoizedState.isDehydrated){e.blockedOn=3===n.tag?n.stateNode.containerInfo:null;return}}}e.blockedOn=null}function tC(e){if(null!==e.blockedOn)return!1;for(var t=e.targetContainers;0<t.length;){var n=tz(e.domEventName,e.eventSystemFlags,t[0],e.nativeEvent);if(null!==n)return null!==(t=rD(n))&&tf(t),e.blockedOn=n,!1;var r=new(n=e.nativeEvent).constructor(n.type,n);ex=r,n.target.dispatchEvent(r),ex=null;t.shift()}return!0}function tT(e,t,n){tC(e)&&n.delete(t)}function tI(){tb=!1,null!==tv&&tC(tv)&&(tv=null),null!==tw&&tC(tw)&&(tw=null),null!==tk&&tC(tk)&&(tk=null),tS.forEach(tT),tx.forEach(tT)}function tA(e,t){e.blockedOn===t&&(e.blockedOn=null,tb||(tb=!0,u.unstable_scheduleCallback(u.unstable_NormalPriority,tI)))}function tN(e){function t(t){return tA(t,e)}if(0<ty.length){tA(ty[0],e);for(var n=1;n<ty.length;n++){var r=ty[n];r.blockedOn===e&&(r.blockedOn=null)}}for(null!==tv&&tA(tv,e),null!==tw&&tA(tw,e),null!==tk&&tA(tk,e),tS.forEach(t),tx.forEach(t),n=0;n<t_.length;n++)(r=t_[n]).blockedOn===e&&(r.blockedOn=null);for(;0<t_.length&&null===(n=t_[0]).blockedOn;)tj(n),null===n.blockedOn&&t_.shift()}var tL=O.ReactCurrentBatchConfig,tR=!0;function tD(e,t,n,r){var o=tu,a=tL.transition;tL.transition=null;try{tu=1,tM(e,t,n,r)}finally{tu=o,tL.transition=a}}function tF(e,t,n,r){var o=tu,a=tL.transition;tL.transition=null;try{tu=4,tM(e,t,n,r)}finally{tu=o,tL.transition=a}}function tM(e,t,n,r){if(tR){var o=tz(e,t,n,r);if(null===o)rs(e,t,r,tB,n),tO(e,r);else if(function(e,t,n,r,o){switch(t){case"focusin":return tv=tP(tv,e,t,n,r,o),!0;case"dragenter":return tw=tP(tw,e,t,n,r,o),!0;case"mouseover":return tk=tP(tk,e,t,n,r,o),!0;case"pointerover":var a=o.pointerId;return tS.set(a,tP(tS.get(a)||null,e,t,n,r,o)),!0;case"gotpointercapture":return a=o.pointerId,tx.set(a,tP(tx.get(a)||null,e,t,n,r,o)),!0}return!1}(o,e,t,n,r))r.stopPropagation();else if(tO(e,r),4&t&&-1<tE.indexOf(e)){for(;null!==o;){var a=rD(o);if(null!==a&&tp(a),null===(a=tz(e,t,n,r))&&rs(e,t,r,tB,n),a===o)break;o=a}null!==o&&r.stopPropagation()}else rs(e,t,r,null,n)}}var tB=null;function tz(e,t,n,r){if(tB=null,null!==(e=rR(e=e_(r)))){if(null===(t=eQ(e)))e=null;else if(13===(n=t.tag)){if(null!==(e=eZ(t)))return e;e=null}else if(3===n){if(t.stateNode.current.memoizedState.isDehydrated)return 3===t.tag?t.stateNode.containerInfo:null;e=null}else t!==e&&(e=null)}return tB=e,null}function t$(e){switch(e){case"cancel":case"click":case"close":case"contextmenu":case"copy":case"cut":case"auxclick":case"dblclick":case"dragend":case"dragstart":case"drop":case"focusin":case"focusout":case"input":case"invalid":case"keydown":case"keypress":case"keyup":case"mousedown":case"mouseup":case"paste":case"pause":case"play":case"pointercancel":case"pointerdown":case"pointerup":case"ratechange":case"reset":case"resize":case"seeked":case"submit":case"touchcancel":case"touchend":case"touchstart":case"volumechange":case"change":case"selectionchange":case"textInput":case"compositionstart":case"compositionend":case"compositionupdate":case"beforeblur":case"afterblur":case"beforeinput":case"blur":case"fullscreenchange":case"focus":case"hashchange":case"popstate":case"select":case"selectstart":return 1;case"drag":case"dragenter":case"dragexit":case"dragleave":case"dragover":case"mousemove":case"mouseout":case"mouseover":case"pointermove":case"pointerout":case"pointerover":case"scroll":case"toggle":case"touchmove":case"wheel":case"mouseenter":case"mouseleave":case"pointerenter":case"pointerleave":return 4;case"message":switch(e0()){case e1:return 1;case e2:return 4;case e4:case e3:return 16;case e9:return 0x20000000;default:return 16}default:return 16}}var tU=null,tH=null,tq=null;function tQ(){if(tq)return tq;var e,t,n=tH,r=n.length,o="value"in tU?tU.value:tU.textContent,a=o.length;for(e=0;e<r&&n[e]===o[e];e++);var i=r-e;for(t=1;t<=i&&n[r-t]===o[a-t];t++);return tq=o.slice(e,1<t?1-t:void 0)}function tZ(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 tW(){return!0}function tV(){return!1}function tG(e){function t(t,n,r,o,a){for(var i in this._reactName=t,this._targetInst=r,this.type=n,this.nativeEvent=o,this.target=a,this.currentTarget=null,e)e.hasOwnProperty(i)&&(t=e[i],this[i]=t?t(o):o[i]);return this.isDefaultPrevented=(null!=o.defaultPrevented?o.defaultPrevented:!1===o.returnValue)?tW:tV,this.isPropagationStopped=tV,this}return H(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=tW)},stopPropagation:function(){var e=this.nativeEvent;e&&(e.stopPropagation?e.stopPropagation():"unknown"!=typeof e.cancelBubble&&(e.cancelBubble=!0),this.isPropagationStopped=tW)},persist:function(){},isPersistent:tW}),t}var tY,tK,tX,tJ={eventPhase:0,bubbles:0,cancelable:0,timeStamp:function(e){return e.timeStamp||Date.now()},defaultPrevented:0,isTrusted:0},t0=tG(tJ),t1=H({},tJ,{view:0,detail:0}),t2=tG(t1),t4=H({},t1,{screenX:0,screenY:0,clientX:0,clientY:0,pageX:0,pageY:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,getModifierState:no,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!==tX&&(tX&&"mousemove"===e.type?(tY=e.screenX-tX.screenX,tK=e.screenY-tX.screenY):tK=tY=0,tX=e),tY)},movementY:function(e){return"movementY"in e?e.movementY:tK}}),t3=tG(t4),t9=tG(H({},t4,{dataTransfer:0})),t6=tG(H({},t1,{relatedTarget:0})),t8=tG(H({},tJ,{animationName:0,elapsedTime:0,pseudoElement:0})),t5=tG(H({},tJ,{clipboardData:function(e){return"clipboardData"in e?e.clipboardData:window.clipboardData}})),t7=tG(H({},tJ,{data:0})),ne={Esc:"Escape",Spacebar:" ",Left:"ArrowLeft",Up:"ArrowUp",Right:"ArrowRight",Down:"ArrowDown",Del:"Delete",Win:"OS",Menu:"ContextMenu",Apps:"ContextMenu",Scroll:"ScrollLock",MozPrintableKey:"Unidentified"},nt={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"},nn={Alt:"altKey",Control:"ctrlKey",Meta:"metaKey",Shift:"shiftKey"};function nr(e){var t=this.nativeEvent;return t.getModifierState?t.getModifierState(e):!!(e=nn[e])&&!!t[e]}function no(){return nr}var na=tG(H({},t1,{key:function(e){if(e.key){var t=ne[e.key]||e.key;if("Unidentified"!==t)return t}return"keypress"===e.type?13===(e=tZ(e))?"Enter":String.fromCharCode(e):"keydown"===e.type||"keyup"===e.type?nt[e.keyCode]||"Unidentified":""},code:0,location:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,repeat:0,locale:0,getModifierState:no,charCode:function(e){return"keypress"===e.type?tZ(e):0},keyCode:function(e){return"keydown"===e.type||"keyup"===e.type?e.keyCode:0},which:function(e){return"keypress"===e.type?tZ(e):"keydown"===e.type||"keyup"===e.type?e.keyCode:0}})),ni=tG(H({},t4,{pointerId:0,width:0,height:0,pressure:0,tangentialPressure:0,tiltX:0,tiltY:0,twist:0,pointerType:0,isPrimary:0})),ns=tG(H({},t1,{touches:0,targetTouches:0,changedTouches:0,altKey:0,metaKey:0,ctrlKey:0,shiftKey:0,getModifierState:no})),nl=tG(H({},tJ,{propertyName:0,elapsedTime:0,pseudoElement:0})),nc=tG(H({},t4,{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})),nu=[9,13,27,32],nd=h&&"CompositionEvent"in window,np=null;h&&"documentMode"in document&&(np=document.documentMode);var nf=h&&"TextEvent"in window&&!np,ng=h&&(!nd||np&&8<np&&11>=np),nm=!1;function nh(e,t){switch(e){case"keyup":return -1!==nu.indexOf(t.keyCode);case"keydown":return 229!==t.keyCode;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function nb(e){return"object"==typeof(e=e.detail)&&"data"in e?e.data:null}var ny=!1,nv={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 nw(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return"input"===t?!!nv[e.type]:"textarea"===t}function nk(e,t,n,r){eC(r),0<(t=rc(t,"onChange")).length&&(n=new t0("onChange","change",null,n,r),e.push({event:n,listeners:t}))}var nS=null,nx=null;function n_(e){rt(e,0)}function nE(e){if(Y(rF(e)))return e}function nO(e,t){if("change"===e)return t}var nP=!1;if(h){if(h){var nj="oninput"in document;if(!nj){var nC=document.createElement("div");nC.setAttribute("oninput","return;"),nj="function"==typeof nC.oninput}r=nj}else r=!1;nP=r&&(!document.documentMode||9<document.documentMode)}function nT(){nS&&(nS.detachEvent("onpropertychange",nI),nx=nS=null)}function nI(e){if("value"===e.propertyName&&nE(nx)){var t=[];nk(t,nx,e,e_(e)),eL(n_,t)}}function nA(e,t,n){"focusin"===e?(nT(),nS=t,nx=n,nS.attachEvent("onpropertychange",nI)):"focusout"===e&&nT()}function nN(e){if("selectionchange"===e||"keyup"===e||"keydown"===e)return nE(nx)}function nL(e,t){if("click"===e)return nE(t)}function nR(e,t){if("input"===e||"change"===e)return nE(t)}var nD="function"==typeof Object.is?Object.is:function(e,t){return e===t&&(0!==e||1/e==1/t)||e!=e&&t!=t};function nF(e,t){if(nD(e,t))return!0;if("object"!=typeof e||null===e||"object"!=typeof t||null===t)return!1;var n=Object.keys(e),r=Object.keys(t);if(n.length!==r.length)return!1;for(r=0;r<n.length;r++){var o=n[r];if(!b.call(t,o)||!nD(e[o],t[o]))return!1}return!0}function nM(e){for(;e&&e.firstChild;)e=e.firstChild;return e}function nB(e,t){var n,r=nM(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=nM(r)}}function nz(){for(var e=window,t=K();t instanceof e.HTMLIFrameElement;){try{var n="string"==typeof t.contentWindow.location.href}catch(e){n=!1}if(n)e=t.contentWindow;else break;t=K(e.document)}return t}function n$(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 nU=h&&"documentMode"in document&&11>=document.documentMode,nH=null,nq=null,nQ=null,nZ=!1;function nW(e,t,n){var r=n.window===n?n.document:9===n.nodeType?n:n.ownerDocument;nZ||null==nH||nH!==K(r)||(r="selectionStart"in(r=nH)&&n$(r)?{start:r.selectionStart,end:r.selectionEnd}:{anchorNode:(r=(r.ownerDocument&&r.ownerDocument.defaultView||window).getSelection()).anchorNode,anchorOffset:r.anchorOffset,focusNode:r.focusNode,focusOffset:r.focusOffset},nQ&&nF(nQ,r)||(nQ=r,0<(r=rc(nq,"onSelect")).length&&(t=new t0("onSelect","select",null,t,n),e.push({event:t,listeners:r}),t.target=nH)))}function nV(e,t){var n={};return n[e.toLowerCase()]=t.toLowerCase(),n["Webkit"+e]="webkit"+t,n["Moz"+e]="moz"+t,n}var nG={animationend:nV("Animation","AnimationEnd"),animationiteration:nV("Animation","AnimationIteration"),animationstart:nV("Animation","AnimationStart"),transitionend:nV("Transition","TransitionEnd")},nY={},nK={};function nX(e){if(nY[e])return nY[e];if(!nG[e])return e;var t,n=nG[e];for(t in n)if(n.hasOwnProperty(t)&&t in nK)return nY[e]=n[t];return e}h&&(nK=document.createElement("div").style,"AnimationEvent"in window||(delete nG.animationend.animation,delete nG.animationiteration.animation,delete nG.animationstart.animation),"TransitionEvent"in window||delete nG.transitionend.transition);var nJ=nX("animationend"),n0=nX("animationiteration"),n1=nX("animationstart"),n2=nX("transitionend"),n4=new Map,n3="abort auxClick cancel canPlay canPlayThrough click close contextMenu copy cut drag dragEnd dragEnter dragExit dragLeave dragOver dragStart drop durationChange emptied encrypted ended error gotPointerCapture input invalid keyDown keyPress keyUp load loadedData loadedMetadata loadStart lostPointerCapture mouseDown mouseMove mouseOut mouseOver mouseUp paste pause play playing pointerCancel pointerDown pointerMove pointerOut pointerOver pointerUp progress rateChange reset resize seeked seeking stalled submit suspend timeUpdate touchCancel touchEnd touchStart volumeChange scroll toggle touchMove waiting wheel".split(" ");function n9(e,t){n4.set(e,t),g(t,[e])}for(var n6=0;n6<n3.length;n6++){var n8=n3[n6];n9(n8.toLowerCase(),"on"+(n8[0].toUpperCase()+n8.slice(1)))}n9(nJ,"onAnimationEnd"),n9(n0,"onAnimationIteration"),n9(n1,"onAnimationStart"),n9("dblclick","onDoubleClick"),n9("focusin","onFocus"),n9("focusout","onBlur"),n9(n2,"onTransitionEnd"),m("onMouseEnter",["mouseout","mouseover"]),m("onMouseLeave",["mouseout","mouseover"]),m("onPointerEnter",["pointerout","pointerover"]),m("onPointerLeave",["pointerout","pointerover"]),g("onChange","change click focusin focusout input keydown keyup selectionchange".split(" ")),g("onSelect","focusout contextmenu dragend focusin keydown keyup mousedown mouseup selectionchange".split(" ")),g("onBeforeInput",["compositionend","keypress","textInput","paste"]),g("onCompositionEnd","compositionend focusout keydown keypress keyup mousedown".split(" ")),g("onCompositionStart","compositionstart focusout keydown keypress keyup mousedown".split(" ")),g("onCompositionUpdate","compositionupdate focusout keydown keypress keyup mousedown".split(" "));var n5="abort canplay canplaythrough durationchange emptied encrypted ended error loadeddata loadedmetadata loadstart pause play playing progress ratechange resize seeked seeking stalled suspend timeupdate volumechange waiting".split(" "),n7=new Set("cancel close invalid load scroll toggle".split(" ").concat(n5));function re(e,t,n){var r=e.type||"unknown-event";e.currentTarget=n,!function(e,t,n,r,o,a,i,s,l){if(eq.apply(this,arguments),eB){if(eB){var c=ez;eB=!1,ez=null}else throw Error(d(198));e$||(e$=!0,eU=c)}}(r,t,void 0,e),e.currentTarget=null}function rt(e,t){t=0!=(4&t);for(var n=0;n<e.length;n++){var r=e[n],o=r.event;r=r.listeners;e:{var a=void 0;if(t)for(var i=r.length-1;0<=i;i--){var s=r[i],l=s.instance,c=s.currentTarget;if(s=s.listener,l!==a&&o.isPropagationStopped())break e;re(o,s,c),a=l}else for(i=0;i<r.length;i++){if(l=(s=r[i]).instance,c=s.currentTarget,s=s.listener,l!==a&&o.isPropagationStopped())break e;re(o,s,c),a=l}}}if(e$)throw e=eU,e$=!1,eU=null,e}function rn(e,t){var n=t[rA];void 0===n&&(n=t[rA]=new Set);var r=e+"__bubble";n.has(r)||(ri(t,e,2,!1),n.add(r))}function rr(e,t,n){var r=0;t&&(r|=4),ri(n,e,r,t)}var ro="_reactListening"+Math.random().toString(36).slice(2);function ra(e){if(!e[ro]){e[ro]=!0,p.forEach(function(t){"selectionchange"!==t&&(n7.has(t)||rr(t,!1,e),rr(t,!0,e))});var t=9===e.nodeType?e:e.ownerDocument;null===t||t[ro]||(t[ro]=!0,rr("selectionchange",!1,t))}}function ri(e,t,n,r){switch(t$(t)){case 1:var o=tD;break;case 4:o=tF;break;default:o=tM}n=o.bind(null,t,n,e),o=void 0,eD&&("touchstart"===t||"touchmove"===t||"wheel"===t)&&(o=!0),r?void 0!==o?e.addEventListener(t,n,{capture:!0,passive:o}):e.addEventListener(t,n,!0):void 0!==o?e.addEventListener(t,n,{passive:o}):e.addEventListener(t,n,!1)}function rs(e,t,n,r,o){var a=r;if(0==(1&t)&&0==(2&t)&&null!==r)e:for(;;){if(null===r)return;var i=r.tag;if(3===i||4===i){var s=r.stateNode.containerInfo;if(s===o||8===s.nodeType&&s.parentNode===o)break;if(4===i)for(i=r.return;null!==i;){var l=i.tag;if((3===l||4===l)&&((l=i.stateNode.containerInfo)===o||8===l.nodeType&&l.parentNode===o))return;i=i.return}for(;null!==s;){if(null===(i=rR(s)))return;if(5===(l=i.tag)||6===l){r=a=i;continue e}s=s.parentNode}}r=r.return}eL(function(){var r=a,o=e_(n),i=[];e:{var s=n4.get(e);if(void 0!==s){var l=t0,c=e;switch(e){case"keypress":if(0===tZ(n))break e;case"keydown":case"keyup":l=na;break;case"focusin":c="focus",l=t6;break;case"focusout":c="blur",l=t6;break;case"beforeblur":case"afterblur":l=t6;break;case"click":if(2===n.button)break e;case"auxclick":case"dblclick":case"mousedown":case"mousemove":case"mouseup":case"mouseout":case"mouseover":case"contextmenu":l=t3;break;case"drag":case"dragend":case"dragenter":case"dragexit":case"dragleave":case"dragover":case"dragstart":case"drop":l=t9;break;case"touchcancel":case"touchend":case"touchmove":case"touchstart":l=ns;break;case nJ:case n0:case n1:l=t8;break;case n2:l=nl;break;case"scroll":l=t2;break;case"wheel":l=nc;break;case"copy":case"cut":case"paste":l=t5;break;case"gotpointercapture":case"lostpointercapture":case"pointercancel":case"pointerdown":case"pointermove":case"pointerout":case"pointerover":case"pointerup":l=ni}var u=0!=(4&t),d=!u&&"scroll"===e,p=u?null!==s?s+"Capture":null:s;u=[];for(var f,g=r;null!==g;){var m=(f=g).stateNode;if(5===f.tag&&null!==m&&(f=m,null!==p&&null!=(m=eR(g,p))&&u.push(rl(g,m,f))),d)break;g=g.return}0<u.length&&(s=new l(s,c,null,n,o),i.push({event:s,listeners:u}))}}if(0==(7&t)){e:if(s="mouseover"===e||"pointerover"===e,l="mouseout"===e||"pointerout"===e,!(s&&n!==ex&&(c=n.relatedTarget||n.fromElement)&&(rR(c)||c[rI]))){if((l||s)&&(s=o.window===o?o:(s=o.ownerDocument)?s.defaultView||s.parentWindow:window,l?(c=n.relatedTarget||n.toElement,l=r,null!==(c=c?rR(c):null)&&(d=eQ(c),c!==d||5!==c.tag&&6!==c.tag)&&(c=null)):(l=null,c=r),l!==c)){if(u=t3,m="onMouseLeave",p="onMouseEnter",g="mouse",("pointerout"===e||"pointerover"===e)&&(u=ni,m="onPointerLeave",p="onPointerEnter",g="pointer"),d=null==l?s:rF(l),f=null==c?s:rF(c),(s=new u(m,g+"leave",l,n,o)).target=d,s.relatedTarget=f,m=null,rR(o)===r&&((u=new u(p,g+"enter",c,n,o)).target=f,u.relatedTarget=d,m=u),d=m,l&&c)t:{for(u=l,p=c,g=0,f=u;f;f=ru(f))g++;for(f=0,m=p;m;m=ru(m))f++;for(;0<g-f;)u=ru(u),g--;for(;0<f-g;)p=ru(p),f--;for(;g--;){if(u===p||null!==p&&u===p.alternate)break t;u=ru(u),p=ru(p)}u=null}else u=null;null!==l&&rd(i,s,l,u,!1),null!==c&&null!==d&&rd(i,d,c,u,!0)}}e:{if("select"===(l=(s=r?rF(r):window).nodeName&&s.nodeName.toLowerCase())||"input"===l&&"file"===s.type)var h,b=nO;else if(nw(s)){if(nP)b=nR;else{b=nN;var y=nA}}else(l=s.nodeName)&&"input"===l.toLowerCase()&&("checkbox"===s.type||"radio"===s.type)&&(b=nL);if(b&&(b=b(e,r))){nk(i,b,n,o);break e}y&&y(e,s,r),"focusout"===e&&(y=s._wrapperState)&&y.controlled&&"number"===s.type&&er(s,"number",s.value)}switch(y=r?rF(r):window,e){case"focusin":(nw(y)||"true"===y.contentEditable)&&(nH=y,nq=r,nQ=null);break;case"focusout":nQ=nq=nH=null;break;case"mousedown":nZ=!0;break;case"contextmenu":case"mouseup":case"dragend":nZ=!1,nW(i,n,o);break;case"selectionchange":if(nU)break;case"keydown":case"keyup":nW(i,n,o)}if(nd)t:{switch(e){case"compositionstart":var v="onCompositionStart";break t;case"compositionend":v="onCompositionEnd";break t;case"compositionupdate":v="onCompositionUpdate";break t}v=void 0}else ny?nh(e,n)&&(v="onCompositionEnd"):"keydown"===e&&229===n.keyCode&&(v="onCompositionStart");v&&(ng&&"ko"!==n.locale&&(ny||"onCompositionStart"!==v?"onCompositionEnd"===v&&ny&&(h=tQ()):(tH="value"in(tU=o)?tU.value:tU.textContent,ny=!0)),0<(y=rc(r,v)).length&&(v=new t7(v,e,null,n,o),i.push({event:v,listeners:y}),h?v.data=h:null!==(h=nb(n))&&(v.data=h))),(h=nf?function(e,t){switch(e){case"compositionend":return nb(t);case"keypress":if(32!==t.which)return null;return nm=!0," ";case"textInput":return" "===(e=t.data)&&nm?null:e;default:return null}}(e,n):function(e,t){if(ny)return"compositionend"===e||!nd&&nh(e,t)?(e=tQ(),tq=tH=tU=null,ny=!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 ng&&"ko"!==t.locale?null:t.data}}(e,n))&&0<(r=rc(r,"onBeforeInput")).length&&(o=new t7("onBeforeInput","beforeinput",null,n,o),i.push({event:o,listeners:r}),o.data=h)}rt(i,t)})}function rl(e,t,n){return{instance:e,listener:t,currentTarget:n}}function rc(e,t){for(var n=t+"Capture",r=[];null!==e;){var o=e,a=o.stateNode;5===o.tag&&null!==a&&(o=a,null!=(a=eR(e,n))&&r.unshift(rl(e,a,o)),null!=(a=eR(e,t))&&r.push(rl(e,a,o))),e=e.return}return r}function ru(e){if(null===e)return null;do e=e.return;while(e&&5!==e.tag);return e||null}function rd(e,t,n,r,o){for(var a=t._reactName,i=[];null!==n&&n!==r;){var s=n,l=s.alternate,c=s.stateNode;if(null!==l&&l===r)break;5===s.tag&&null!==c&&(s=c,o?null!=(l=eR(n,a))&&i.unshift(rl(n,l,s)):o||null!=(l=eR(n,a))&&i.push(rl(n,l,s))),n=n.return}0!==i.length&&e.push({event:t,listeners:i})}var rp=/\r\n?/g,rf=/\u0000|\uFFFD/g;function rg(e){return("string"==typeof e?e:""+e).replace(rp,"\n").replace(rf,"")}function rm(e,t,n){if(t=rg(t),rg(e)!==t&&n)throw Error(d(425))}function rh(){}var rb=null,ry=null;function rv(e,t){return"textarea"===e||"noscript"===e||"string"==typeof t.children||"number"==typeof t.children||"object"==typeof t.dangerouslySetInnerHTML&&null!==t.dangerouslySetInnerHTML&&null!=t.dangerouslySetInnerHTML.__html}var rw="function"==typeof setTimeout?setTimeout:void 0,rk="function"==typeof clearTimeout?clearTimeout:void 0,rS="function"==typeof Promise?Promise:void 0,rx="function"==typeof queueMicrotask?queueMicrotask:void 0!==rS?function(e){return rS.resolve(null).then(e).catch(r_)}:rw;function r_(e){setTimeout(function(){throw e})}function rE(e,t){var n=t,r=0;do{var o=n.nextSibling;if(e.removeChild(n),o&&8===o.nodeType){if("/$"===(n=o.data)){if(0===r){e.removeChild(o),tN(t);return}r--}else"$"!==n&&"$?"!==n&&"$!"!==n||r++}n=o}while(n);tN(t)}function rO(e){for(;null!=e;e=e.nextSibling){var t=e.nodeType;if(1===t||3===t)break;if(8===t){if("$"===(t=e.data)||"$!"===t||"$?"===t)break;if("/$"===t)return null}}return e}function rP(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 rj=Math.random().toString(36).slice(2),rC="__reactFiber$"+rj,rT="__reactProps$"+rj,rI="__reactContainer$"+rj,rA="__reactEvents$"+rj,rN="__reactListeners$"+rj,rL="__reactHandles$"+rj;function rR(e){var t=e[rC];if(t)return t;for(var n=e.parentNode;n;){if(t=n[rI]||n[rC]){if(n=t.alternate,null!==t.child||null!==n&&null!==n.child)for(e=rP(e);null!==e;){if(n=e[rC])return n;e=rP(e)}return t}n=(e=n).parentNode}return null}function rD(e){return(e=e[rC]||e[rI])&&(5===e.tag||6===e.tag||13===e.tag||3===e.tag)?e:null}function rF(e){if(5===e.tag||6===e.tag)return e.stateNode;throw Error(d(33))}function rM(e){return e[rT]||null}var rB=[],rz=-1;function r$(e){return{current:e}}function rU(e){0>rz||(e.current=rB[rz],rB[rz]=null,rz--)}function rH(e,t){rB[++rz]=e.current,e.current=t}var rq={},rQ=r$(rq),rZ=r$(!1),rW=rq;function rV(e,t){var n=e.type.contextTypes;if(!n)return rq;var r=e.stateNode;if(r&&r.__reactInternalMemoizedUnmaskedChildContext===t)return r.__reactInternalMemoizedMaskedChildContext;var o,a={};for(o in n)a[o]=t[o];return r&&((e=e.stateNode).__reactInternalMemoizedUnmaskedChildContext=t,e.__reactInternalMemoizedMaskedChildContext=a),a}function rG(e){return null!=(e=e.childContextTypes)}function rY(){rU(rZ),rU(rQ)}function rK(e,t,n){if(rQ.current!==rq)throw Error(d(168));rH(rQ,t),rH(rZ,n)}function rX(e,t,n){var r=e.stateNode;if(t=t.childContextTypes,"function"!=typeof r.getChildContext)return n;for(var o in r=r.getChildContext())if(!(o in t))throw Error(d(108,function(e){var t=e.type;switch(e.tag){case 24:return"Cache";case 9:return(t.displayName||"Context")+".Consumer";case 10:return(t._context.displayName||"Context")+".Provider";case 18:return"DehydratedFragment";case 11:return e=(e=t.render).displayName||e.name||"",t.displayName||(""!==e?"ForwardRef("+e+")":"ForwardRef");case 7:return"Fragment";case 5:return t;case 4:return"Portal";case 3:return"Root";case 6:return"Text";case 16:return function e(t){if(null==t)return null;if("function"==typeof t)return t.displayName||t.name||null;if("string"==typeof t)return t;switch(t){case C:return"Fragment";case j:return"Portal";case I:return"Profiler";case T:return"StrictMode";case R:return"Suspense";case D:return"SuspenseList"}if("object"==typeof t)switch(t.$$typeof){case N:return(t.displayName||"Context")+".Consumer";case A:return(t._context.displayName||"Context")+".Provider";case L:var n=t.render;return(t=t.displayName)||(t=""!==(t=n.displayName||n.name||"")?"ForwardRef("+t+")":"ForwardRef"),t;case F:return null!==(n=t.displayName||null)?n:e(t.type)||"Memo";case M:n=t._payload,t=t._init;try{return e(t(n))}catch(e){}}return null}(t);case 8:return t===T?"StrictMode":"Mode";case 22:return"Offscreen";case 12:return"Profiler";case 21:return"Scope";case 13:return"Suspense";case 19:return"SuspenseList";case 25:return"TracingMarker";case 1:case 0:case 17:case 2:case 14:case 15:if("function"==typeof t)return t.displayName||t.name||null;if("string"==typeof t)return t}return null}(e)||"Unknown",o));return H({},n,r)}function rJ(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||rq,rW=rQ.current,rH(rQ,e),rH(rZ,rZ.current),!0}function r0(e,t,n){var r=e.stateNode;if(!r)throw Error(d(169));n?(e=rX(e,t,rW),r.__reactInternalMemoizedMergedChildContext=e,rU(rZ),rU(rQ),rH(rQ,e)):rU(rZ),rH(rZ,n)}var r1=null,r2=!1,r4=!1;function r3(e){null===r1?r1=[e]:r1.push(e)}function r9(){if(!r4&&null!==r1){r4=!0;var e=0,t=tu;try{var n=r1;for(tu=1;e<n.length;e++){var r=n[e];do r=r(!0);while(null!==r)}r1=null,r2=!1}catch(t){throw null!==r1&&(r1=r1.slice(e+1)),eG(e1,r9),t}finally{tu=t,r4=!1}}return null}var r6=[],r8=0,r5=null,r7=0,oe=[],ot=0,on=null,or=1,oo="";function oa(e,t){r6[r8++]=r7,r6[r8++]=r5,r5=e,r7=t}function oi(e,t,n){oe[ot++]=or,oe[ot++]=oo,oe[ot++]=on,on=e;var r=or;e=oo;var o=32-e5(r)-1;r&=~(1<<o),n+=1;var a=32-e5(t)+o;if(30<a){var i=o-o%5;a=(r&(1<<i)-1).toString(32),r>>=i,o-=i,or=1<<32-e5(t)+o|n<<o|r,oo=a+e}else or=1<<a|n<<o|r,oo=e}function os(e){null!==e.return&&(oa(e,1),oi(e,1,0))}function ol(e){for(;e===r5;)r5=r6[--r8],r6[r8]=null,r7=r6[--r8],r6[r8]=null;for(;e===on;)on=oe[--ot],oe[ot]=null,oo=oe[--ot],oe[ot]=null,or=oe[--ot],oe[ot]=null}var oc=null,ou=null,od=!1,op=null;function of(e,t){var n=sY(5,null,null,0);n.elementType="DELETED",n.stateNode=t,n.return=e,null===(t=e.deletions)?(e.deletions=[n],e.flags|=16):t.push(n)}function og(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,oc=e,ou=rO(t.firstChild),!0);case 6:return null!==(t=""===e.pendingProps||3!==t.nodeType?null:t)&&(e.stateNode=t,oc=e,ou=null,!0);case 13:return null!==(t=8!==t.nodeType?null:t)&&(n=null!==on?{id:or,overflow:oo}:null,e.memoizedState={dehydrated:t,treeContext:n,retryLane:0x40000000},(n=sY(18,null,null,0)).stateNode=t,n.return=e,e.child=n,oc=e,ou=null,!0);default:return!1}}function om(e){return 0!=(1&e.mode)&&0==(128&e.flags)}function oh(e){if(od){var t=ou;if(t){var n=t;if(!og(e,t)){if(om(e))throw Error(d(418));t=rO(n.nextSibling);var r=oc;t&&og(e,t)?of(r,n):(e.flags=-4097&e.flags|2,od=!1,oc=e)}}else{if(om(e))throw Error(d(418));e.flags=-4097&e.flags|2,od=!1,oc=e}}}function ob(e){for(e=e.return;null!==e&&5!==e.tag&&3!==e.tag&&13!==e.tag;)e=e.return;oc=e}function oy(e){if(e!==oc)return!1;if(!od)return ob(e),od=!0,!1;if((t=3!==e.tag)&&!(t=5!==e.tag)&&(t="head"!==(t=e.type)&&"body"!==t&&!rv(e.type,e.memoizedProps)),t&&(t=ou)){if(om(e))throw ov(),Error(d(418));for(;t;)of(e,t),t=rO(t.nextSibling)}if(ob(e),13===e.tag){if(!(e=null!==(e=e.memoizedState)?e.dehydrated:null))throw Error(d(317));e:{for(t=0,e=e.nextSibling;e;){if(8===e.nodeType){var t,n=e.data;if("/$"===n){if(0===t){ou=rO(e.nextSibling);break e}t--}else"$"!==n&&"$!"!==n&&"$?"!==n||t++}e=e.nextSibling}ou=null}}else ou=oc?rO(e.stateNode.nextSibling):null;return!0}function ov(){for(var e=ou;e;)e=rO(e.nextSibling)}function ow(){ou=oc=null,od=!1}function ok(e){null===op?op=[e]:op.push(e)}var oS=O.ReactCurrentBatchConfig;function ox(e,t){if(e&&e.defaultProps)for(var n in t=H({},t),e=e.defaultProps)void 0===t[n]&&(t[n]=e[n]);return t}var o_=r$(null),oE=null,oO=null,oP=null;function oj(){oP=oO=oE=null}function oC(e){var t=o_.current;rU(o_),e._currentValue=t}function oT(e,t,n){for(;null!==e;){var r=e.alternate;if((e.childLanes&t)!==t?(e.childLanes|=t,null!==r&&(r.childLanes|=t)):null!==r&&(r.childLanes&t)!==t&&(r.childLanes|=t),e===n)break;e=e.return}}function oI(e,t){oE=e,oP=oO=null,null!==(e=e.dependencies)&&null!==e.firstContext&&(0!=(e.lanes&t)&&(is=!0),e.firstContext=null)}function oA(e){var t=e._currentValue;if(oP!==e){if(e={context:e,memoizedValue:t,next:null},null===oO){if(null===oE)throw Error(d(308));oO=e,oE.dependencies={lanes:0,firstContext:e}}else oO=oO.next=e}return t}var oN=null;function oL(e){null===oN?oN=[e]:oN.push(e)}function oR(e,t,n,r){var o=t.interleaved;return null===o?(n.next=n,oL(t)):(n.next=o.next,o.next=n),t.interleaved=n,oD(e,r)}function oD(e,t){e.lanes|=t;var n=e.alternate;for(null!==n&&(n.lanes|=t),n=e,e=e.return;null!==e;)e.childLanes|=t,null!==(n=e.alternate)&&(n.childLanes|=t),n=e,e=e.return;return 3===n.tag?n.stateNode:null}var oF=!1;function oM(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,interleaved:null,lanes:0},effects:null}}function oB(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 oz(e,t){return{eventTime:e,lane:t,tag:0,payload:null,callback:null,next:null}}function o$(e,t,n){var r=e.updateQueue;if(null===r)return null;if(r=r.shared,0!=(2&i9)){var o=r.pending;return null===o?t.next=t:(t.next=o.next,o.next=t),r.pending=t,oD(e,n)}return null===(o=r.interleaved)?(t.next=t,oL(r)):(t.next=o.next,o.next=t),r.interleaved=t,oD(e,n)}function oU(e,t,n){if(null!==(t=t.updateQueue)&&(t=t.shared,0!=(4194240&n))){var r=t.lanes;r&=e.pendingLanes,n|=r,t.lanes=n,tc(e,n)}}function oH(e,t){var n=e.updateQueue,r=e.alternate;if(null!==r&&n===(r=r.updateQueue)){var o=null,a=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===a?o=a=i:a=a.next=i,n=n.next}while(null!==n);null===a?o=a=t:a=a.next=t}else o=a=t;n={baseState:r.baseState,firstBaseUpdate:o,lastBaseUpdate:a,shared:r.shared,effects:r.effects},e.updateQueue=n;return}null===(e=n.lastBaseUpdate)?n.firstBaseUpdate=t:e.next=t,n.lastBaseUpdate=t}function oq(e,t,n,r){var o=e.updateQueue;oF=!1;var a=o.firstBaseUpdate,i=o.lastBaseUpdate,s=o.shared.pending;if(null!==s){o.shared.pending=null;var l=s,c=l.next;l.next=null,null===i?a=c:i.next=c,i=l;var u=e.alternate;null!==u&&(s=(u=u.updateQueue).lastBaseUpdate)!==i&&(null===s?u.firstBaseUpdate=c:s.next=c,u.lastBaseUpdate=l)}if(null!==a){var d=o.baseState;for(i=0,u=c=l=null,s=a;;){var p=s.lane,f=s.eventTime;if((r&p)===p){null!==u&&(u=u.next={eventTime:f,lane:0,tag:s.tag,payload:s.payload,callback:s.callback,next:null});e:{var g=e,m=s;switch(p=t,f=n,m.tag){case 1:if("function"==typeof(g=m.payload)){d=g.call(f,d,p);break e}d=g;break e;case 3:g.flags=-65537&g.flags|128;case 0:if(null==(p="function"==typeof(g=m.payload)?g.call(f,d,p):g))break e;d=H({},d,p);break e;case 2:oF=!0}}null!==s.callback&&0!==s.lane&&(e.flags|=64,null===(p=o.effects)?o.effects=[s]:p.push(s))}else f={eventTime:f,lane:p,tag:s.tag,payload:s.payload,callback:s.callback,next:null},null===u?(c=u=f,l=d):u=u.next=f,i|=p;if(null===(s=s.next)){if(null===(s=o.shared.pending))break;else s=(p=s).next,p.next=null,o.lastBaseUpdate=p,o.shared.pending=null}}if(null===u&&(l=d),o.baseState=l,o.firstBaseUpdate=c,o.lastBaseUpdate=u,null!==(t=o.shared.interleaved)){o=t;do i|=o.lane,o=o.next;while(o!==t)}else null===a&&(o.shared.lanes=0);sr|=i,e.lanes=i,e.memoizedState=d}}function oQ(e,t,n){if(e=t.effects,t.effects=null,null!==e)for(t=0;t<e.length;t++){var r=e[t],o=r.callback;if(null!==o){if(r.callback=null,r=n,"function"!=typeof o)throw Error(d(191,o));o.call(r)}}}var oZ=(new c.Component).refs;function oW(e,t,n,r){n=null==(n=n(r,t=e.memoizedState))?t:H({},t,n),e.memoizedState=n,0===e.lanes&&(e.updateQueue.baseState=n)}var oV={isMounted:function(e){return!!(e=e._reactInternals)&&eQ(e)===e},enqueueSetState:function(e,t,n){e=e._reactInternals;var r=sk(),o=sS(e),a=oz(r,o);a.payload=t,null!=n&&(a.callback=n),null!==(t=o$(e,a,o))&&(sx(t,e,o,r),oU(t,e,o))},enqueueReplaceState:function(e,t,n){e=e._reactInternals;var r=sk(),o=sS(e),a=oz(r,o);a.tag=1,a.payload=t,null!=n&&(a.callback=n),null!==(t=o$(e,a,o))&&(sx(t,e,o,r),oU(t,e,o))},enqueueForceUpdate:function(e,t){e=e._reactInternals;var n=sk(),r=sS(e),o=oz(n,r);o.tag=2,null!=t&&(o.callback=t),null!==(t=o$(e,o,r))&&(sx(t,e,r,n),oU(t,e,r))}};function oG(e,t,n,r,o,a,i){return"function"==typeof(e=e.stateNode).shouldComponentUpdate?e.shouldComponentUpdate(r,a,i):!t.prototype||!t.prototype.isPureReactComponent||!nF(n,r)||!nF(o,a)}function oY(e,t,n){var r=!1,o=rq,a=t.contextType;return"object"==typeof a&&null!==a?a=oA(a):(o=rG(t)?rW:rQ.current,a=(r=null!=(r=t.contextTypes))?rV(e,o):rq),t=new t(n,a),e.memoizedState=null!==t.state&&void 0!==t.state?t.state:null,t.updater=oV,e.stateNode=t,t._reactInternals=e,r&&((e=e.stateNode).__reactInternalMemoizedUnmaskedChildContext=o,e.__reactInternalMemoizedMaskedChildContext=a),t}function oK(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&&oV.enqueueReplaceState(t,t.state,null)}function oX(e,t,n,r){var o=e.stateNode;o.props=n,o.state=e.memoizedState,o.refs=oZ,oM(e);var a=t.contextType;"object"==typeof a&&null!==a?o.context=oA(a):(a=rG(t)?rW:rQ.current,o.context=rV(e,a)),o.state=e.memoizedState,"function"==typeof(a=t.getDerivedStateFromProps)&&(oW(e,t,a,n),o.state=e.memoizedState),"function"==typeof t.getDerivedStateFromProps||"function"==typeof o.getSnapshotBeforeUpdate||"function"!=typeof o.UNSAFE_componentWillMount&&"function"!=typeof o.componentWillMount||(t=o.state,"function"==typeof o.componentWillMount&&o.componentWillMount(),"function"==typeof o.UNSAFE_componentWillMount&&o.UNSAFE_componentWillMount(),t!==o.state&&oV.enqueueReplaceState(o,o.state,null),oq(e,n,o,r),o.state=e.memoizedState),"function"==typeof o.componentDidMount&&(e.flags|=4194308)}function oJ(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(d(309));var r=n.stateNode}if(!r)throw Error(d(147,e));var o=r,a=""+e;return null!==t&&null!==t.ref&&"function"==typeof t.ref&&t.ref._stringRef===a?t.ref:((t=function(e){var t=o.refs;t===oZ&&(t=o.refs={}),null===e?delete t[a]:t[a]=e})._stringRef=a,t)}if("string"!=typeof e)throw Error(d(284));if(!n._owner)throw Error(d(290,e))}return e}function o0(e,t){throw Error(d(31,"[object Object]"===(e=Object.prototype.toString.call(t))?"object with keys {"+Object.keys(t).join(", ")+"}":e))}function o1(e){return(0,e._init)(e._payload)}function o2(e){function t(t,n){if(e){var r=t.deletions;null===r?(t.deletions=[n],t.flags|=16):r.push(n)}}function n(n,r){if(!e)return null;for(;null!==r;)t(n,r),r=r.sibling;return null}function r(e,t){for(e=new Map;null!==t;)null!==t.key?e.set(t.key,t):e.set(t.index,t),t=t.sibling;return e}function o(e,t){return(e=sX(e,t)).index=0,e.sibling=null,e}function a(t,n,r){return(t.index=r,e)?null!==(r=t.alternate)?(r=r.index)<n?(t.flags|=2,n):r:(t.flags|=2,n):(t.flags|=1048576,n)}function i(t){return e&&null===t.alternate&&(t.flags|=2),t}function s(e,t,n,r){return null===t||6!==t.tag?((t=s2(n,e.mode,r)).return=e,t):((t=o(t,n)).return=e,t)}function l(e,t,n,r){var a=n.type;return a===C?u(e,t,n.props.children,r,n.key):null!==t&&(t.elementType===a||"object"==typeof a&&null!==a&&a.$$typeof===M&&o1(a)===t.type)?((r=o(t,n.props)).ref=oJ(e,t,n),r.return=e,r):((r=sJ(n.type,n.key,n.props,null,e.mode,r)).ref=oJ(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=s4(n,e.mode,r)).return=e,t):((t=o(t,n.children||[])).return=e,t)}function u(e,t,n,r,a){return null===t||7!==t.tag?((t=s0(n,e.mode,r,a)).return=e,t):((t=o(t,n)).return=e,t)}function p(e,t,n){if("string"==typeof t&&""!==t||"number"==typeof t)return(t=s2(""+t,e.mode,n)).return=e,t;if("object"==typeof t&&null!==t){switch(t.$$typeof){case P:return(n=sJ(t.type,t.key,t.props,null,e.mode,n)).ref=oJ(e,null,t),n.return=e,n;case j:return(t=s4(t,e.mode,n)).return=e,t;case M:return p(e,(0,t._init)(t._payload),n)}if(eo(t)||$(t))return(t=s0(t,e.mode,n,null)).return=e,t;o0(e,t)}return null}function f(e,t,n,r){var o=null!==t?t.key:null;if("string"==typeof n&&""!==n||"number"==typeof n)return null!==o?null:s(e,t,""+n,r);if("object"==typeof n&&null!==n){switch(n.$$typeof){case P:return n.key===o?l(e,t,n,r):null;case j:return n.key===o?c(e,t,n,r):null;case M:return f(e,t,(o=n._init)(n._payload),r)}if(eo(n)||$(n))return null!==o?null:u(e,t,n,r,null);o0(e,n)}return null}function g(e,t,n,r,o){if("string"==typeof r&&""!==r||"number"==typeof r)return s(t,e=e.get(n)||null,""+r,o);if("object"==typeof r&&null!==r){switch(r.$$typeof){case P:return l(t,e=e.get(null===r.key?n:r.key)||null,r,o);case j:return c(t,e=e.get(null===r.key?n:r.key)||null,r,o);case M:return g(e,t,n,(0,r._init)(r._payload),o)}if(eo(r)||$(r))return u(t,e=e.get(n)||null,r,o,null);o0(t,r)}return null}return function s(l,c,u,m){if("object"==typeof u&&null!==u&&u.type===C&&null===u.key&&(u=u.props.children),"object"==typeof u&&null!==u){switch(u.$$typeof){case P:e:{for(var h=u.key,b=c;null!==b;){if(b.key===h){if((h=u.type)===C){if(7===b.tag){n(l,b.sibling),(c=o(b,u.props.children)).return=l,l=c;break e}}else if(b.elementType===h||"object"==typeof h&&null!==h&&h.$$typeof===M&&o1(h)===b.type){n(l,b.sibling),(c=o(b,u.props)).ref=oJ(l,b,u),c.return=l,l=c;break e}n(l,b);break}t(l,b);b=b.sibling}u.type===C?((c=s0(u.props.children,l.mode,m,u.key)).return=l,l=c):((m=sJ(u.type,u.key,u.props,null,l.mode,m)).ref=oJ(l,c,u),m.return=l,l=m)}return i(l);case j:e:{for(b=u.key;null!==c;){if(c.key===b){if(4===c.tag&&c.stateNode.containerInfo===u.containerInfo&&c.stateNode.implementation===u.implementation){n(l,c.sibling),(c=o(c,u.children||[])).return=l,l=c;break e}else{n(l,c);break}}t(l,c);c=c.sibling}(c=s4(u,l.mode,m)).return=l,l=c}return i(l);case M:return s(l,c,(b=u._init)(u._payload),m)}if(eo(u))return function(o,i,s,l){for(var c=null,u=null,d=i,m=i=0,h=null;null!==d&&m<s.length;m++){d.index>m?(h=d,d=null):h=d.sibling;var b=f(o,d,s[m],l);if(null===b){null===d&&(d=h);break}e&&d&&null===b.alternate&&t(o,d),i=a(b,i,m),null===u?c=b:u.sibling=b,u=b,d=h}if(m===s.length)return n(o,d),od&&oa(o,m),c;if(null===d){for(;m<s.length;m++)null!==(d=p(o,s[m],l))&&(i=a(d,i,m),null===u?c=d:u.sibling=d,u=d);return od&&oa(o,m),c}for(d=r(o,d);m<s.length;m++)null!==(h=g(d,o,m,s[m],l))&&(e&&null!==h.alternate&&d.delete(null===h.key?m:h.key),i=a(h,i,m),null===u?c=h:u.sibling=h,u=h);return e&&d.forEach(function(e){return t(o,e)}),od&&oa(o,m),c}(l,c,u,m);if($(u))return function(o,i,s,l){var c=$(s);if("function"!=typeof c)throw Error(d(150));if(null==(s=c.call(s)))throw Error(d(151));for(var u=c=null,m=i,h=i=0,b=null,y=s.next();null!==m&&!y.done;h++,y=s.next()){m.index>h?(b=m,m=null):b=m.sibling;var v=f(o,m,y.value,l);if(null===v){null===m&&(m=b);break}e&&m&&null===v.alternate&&t(o,m),i=a(v,i,h),null===u?c=v:u.sibling=v,u=v,m=b}if(y.done)return n(o,m),od&&oa(o,h),c;if(null===m){for(;!y.done;h++,y=s.next())null!==(y=p(o,y.value,l))&&(i=a(y,i,h),null===u?c=y:u.sibling=y,u=y);return od&&oa(o,h),c}for(m=r(o,m);!y.done;h++,y=s.next())null!==(y=g(m,o,h,y.value,l))&&(e&&null!==y.alternate&&m.delete(null===y.key?h:y.key),i=a(y,i,h),null===u?c=y:u.sibling=y,u=y);return e&&m.forEach(function(e){return t(o,e)}),od&&oa(o,h),c}(l,c,u,m);o0(l,u)}return"string"==typeof u&&""!==u||"number"==typeof u?(u=""+u,null!==c&&6===c.tag?(n(l,c.sibling),(c=o(c,u)).return=l):(n(l,c),(c=s2(u,l.mode,m)).return=l),i(l=c)):n(l,c)}}var o4=o2(!0),o3=o2(!1),o9={},o6=r$(o9),o8=r$(o9),o5=r$(o9);function o7(e){if(e===o9)throw Error(d(174));return e}function ae(e,t){switch(rH(o5,t),rH(o8,e),rH(o6,o9),e=t.nodeType){case 9:case 11:t=(t=t.documentElement)?t.namespaceURI:ed(null,"");break;default:t=(e=8===e?t.parentNode:t).namespaceURI||null,t=ed(t,e=e.tagName)}rU(o6),rH(o6,t)}function at(){rU(o6),rU(o8),rU(o5)}function an(e){o7(o5.current);var t=o7(o6.current),n=ed(t,e.type);t!==n&&(rH(o8,e),rH(o6,n))}function ar(e){o8.current===e&&(rU(o6),rU(o8))}var ao=r$(0);function aa(e){for(var t=e;null!==t;){if(13===t.tag){var n=t.memoizedState;if(null!==n&&(null===(n=n.dehydrated)||"$?"===n.data||"$!"===n.data))return t}else if(19===t.tag&&void 0!==t.memoizedProps.revealOrder){if(0!=(128&t.flags))return t}else if(null!==t.child){t.child.return=t,t=t.child;continue}if(t===e)break;for(;null===t.sibling;){if(null===t.return||t.return===e)return null;t=t.return}t.sibling.return=t.return,t=t.sibling}return null}var ai=[];function as(){for(var e=0;e<ai.length;e++)ai[e]._workInProgressVersionPrimary=null;ai.length=0}var al=O.ReactCurrentDispatcher,ac=O.ReactCurrentBatchConfig,au=0,ad=null,ap=null,af=null,ag=!1,am=!1,ah=0,ab=0;function ay(){throw Error(d(321))}function av(e,t){if(null===t)return!1;for(var n=0;n<t.length&&n<e.length;n++)if(!nD(e[n],t[n]))return!1;return!0}function aw(e,t,n,r,o,a){if(au=a,ad=t,t.memoizedState=null,t.updateQueue=null,t.lanes=0,al.current=null===e||null===e.memoizedState?a4:a3,e=n(r,o),am){a=0;do{if(am=!1,ah=0,25<=a)throw Error(d(301));a+=1,af=ap=null,t.updateQueue=null,al.current=a9,e=n(r,o)}while(am)}if(al.current=a2,t=null!==ap&&null!==ap.next,au=0,af=ap=ad=null,ag=!1,t)throw Error(d(300));return e}function ak(){var e=0!==ah;return ah=0,e}function aS(){var e={memoizedState:null,baseState:null,baseQueue:null,queue:null,next:null};return null===af?ad.memoizedState=af=e:af=af.next=e,af}function ax(){if(null===ap){var e=ad.alternate;e=null!==e?e.memoizedState:null}else e=ap.next;var t=null===af?ad.memoizedState:af.next;if(null!==t)af=t,ap=e;else{if(null===e)throw Error(d(310));e={memoizedState:(ap=e).memoizedState,baseState:ap.baseState,baseQueue:ap.baseQueue,queue:ap.queue,next:null},null===af?ad.memoizedState=af=e:af=af.next=e}return af}function a_(e,t){return"function"==typeof t?t(e):t}function aE(e){var t=ax(),n=t.queue;if(null===n)throw Error(d(311));n.lastRenderedReducer=e;var r=ap,o=r.baseQueue,a=n.pending;if(null!==a){if(null!==o){var i=o.next;o.next=a.next,a.next=i}r.baseQueue=o=a,n.pending=null}if(null!==o){a=o.next,r=r.baseState;var s=i=null,l=null,c=a;do{var u=c.lane;if((au&u)===u)null!==l&&(l=l.next={lane:0,action:c.action,hasEagerState:c.hasEagerState,eagerState:c.eagerState,next:null}),r=c.hasEagerState?c.eagerState:e(r,c.action);else{var p={lane:u,action:c.action,hasEagerState:c.hasEagerState,eagerState:c.eagerState,next:null};null===l?(s=l=p,i=r):l=l.next=p,ad.lanes|=u,sr|=u}c=c.next}while(null!==c&&c!==a);null===l?i=r:l.next=s,nD(r,t.memoizedState)||(is=!0),t.memoizedState=r,t.baseState=i,t.baseQueue=l,n.lastRenderedState=r}if(null!==(e=n.interleaved)){o=e;do a=o.lane,ad.lanes|=a,sr|=a,o=o.next;while(o!==e)}else null===o&&(n.lanes=0);return[t.memoizedState,n.dispatch]}function aO(e){var t=ax(),n=t.queue;if(null===n)throw Error(d(311));n.lastRenderedReducer=e;var r=n.dispatch,o=n.pending,a=t.memoizedState;if(null!==o){n.pending=null;var i=o=o.next;do a=e(a,i.action),i=i.next;while(i!==o);nD(a,t.memoizedState)||(is=!0),t.memoizedState=a,null===t.baseQueue&&(t.baseState=a),n.lastRenderedState=a}return[a,r]}function aP(){}function aj(e,t){var n=ad,r=ax(),o=t(),a=!nD(r.memoizedState,o);if(a&&(r.memoizedState=o,is=!0),r=r.queue,az(aI.bind(null,n,r,e),[e]),r.getSnapshot!==t||a||null!==af&&1&af.memoizedState.tag){if(n.flags|=2048,aR(9,aT.bind(null,n,r,o,t),void 0,null),null===i6)throw Error(d(349));0!=(30&au)||aC(n,t,o)}return o}function aC(e,t,n){e.flags|=16384,e={getSnapshot:t,value:n},null===(t=ad.updateQueue)?(t={lastEffect:null,stores:null},ad.updateQueue=t,t.stores=[e]):null===(n=t.stores)?t.stores=[e]:n.push(e)}function aT(e,t,n,r){t.value=n,t.getSnapshot=r,aA(t)&&aN(e)}function aI(e,t,n){return n(function(){aA(t)&&aN(e)})}function aA(e){var t=e.getSnapshot;e=e.value;try{var n=t();return!nD(e,n)}catch(e){return!0}}function aN(e){var t=oD(e,1);null!==t&&sx(t,e,1,-1)}function aL(e){var t=aS();return"function"==typeof e&&(e=e()),t.memoizedState=t.baseState=e,e={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:a_,lastRenderedState:e},t.queue=e,e=e.dispatch=aX.bind(null,ad,e),[t.memoizedState,e]}function aR(e,t,n,r){return e={tag:e,create:t,destroy:n,deps:r,next:null},null===(t=ad.updateQueue)?(t={lastEffect:null,stores:null},ad.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 aD(){return ax().memoizedState}function aF(e,t,n,r){var o=aS();ad.flags|=e,o.memoizedState=aR(1|t,n,void 0,void 0===r?null:r)}function aM(e,t,n,r){var o=ax();r=void 0===r?null:r;var a=void 0;if(null!==ap){var i=ap.memoizedState;if(a=i.destroy,null!==r&&av(r,i.deps)){o.memoizedState=aR(t,n,a,r);return}}ad.flags|=e,o.memoizedState=aR(1|t,n,a,r)}function aB(e,t){return aF(8390656,8,e,t)}function az(e,t){return aM(2048,8,e,t)}function a$(e,t){return aM(4,2,e,t)}function aU(e,t){return aM(4,4,e,t)}function aH(e,t){return"function"==typeof t?(t(e=e()),function(){t(null)}):null!=t?(e=e(),t.current=e,function(){t.current=null}):void 0}function aq(e,t,n){return n=null!=n?n.concat([e]):null,aM(4,4,aH.bind(null,t,e),n)}function aQ(){}function aZ(e,t){var n=ax();t=void 0===t?null:t;var r=n.memoizedState;return null!==r&&null!==t&&av(t,r[1])?r[0]:(n.memoizedState=[e,t],e)}function aW(e,t){var n=ax();t=void 0===t?null:t;var r=n.memoizedState;return null!==r&&null!==t&&av(t,r[1])?r[0]:(e=e(),n.memoizedState=[e,t],e)}function aV(e,t,n){return 0==(21&au)?(e.baseState&&(e.baseState=!1,is=!0),e.memoizedState=n):(nD(n,t)||(n=ti(),ad.lanes|=n,sr|=n,e.baseState=!0),t)}function aG(e,t){var n=tu;tu=0!==n&&4>n?n:4,e(!0);var r=ac.transition;ac.transition={};try{e(!1),t()}finally{tu=n,ac.transition=r}}function aY(){return ax().memoizedState}function aK(e,t,n){var r=sS(e);n={lane:r,action:n,hasEagerState:!1,eagerState:null,next:null},aJ(e)?a0(t,n):null!==(n=oR(e,t,n,r))&&(sx(n,e,r,sk()),a1(n,t,r))}function aX(e,t,n){var r=sS(e),o={lane:r,action:n,hasEagerState:!1,eagerState:null,next:null};if(aJ(e))a0(t,o);else{var a=e.alternate;if(0===e.lanes&&(null===a||0===a.lanes)&&null!==(a=t.lastRenderedReducer))try{var i=t.lastRenderedState,s=a(i,n);if(o.hasEagerState=!0,o.eagerState=s,nD(s,i)){var l=t.interleaved;null===l?(o.next=o,oL(t)):(o.next=l.next,l.next=o),t.interleaved=o;return}}catch(e){}finally{}null!==(n=oR(e,t,o,r))&&(sx(n,e,r,o=sk()),a1(n,t,r))}}function aJ(e){var t=e.alternate;return e===ad||null!==t&&t===ad}function a0(e,t){am=ag=!0;var n=e.pending;null===n?t.next=t:(t.next=n.next,n.next=t),e.pending=t}function a1(e,t,n){if(0!=(4194240&n)){var r=t.lanes;r&=e.pendingLanes,n|=r,t.lanes=n,tc(e,n)}}var a2={readContext:oA,useCallback:ay,useContext:ay,useEffect:ay,useImperativeHandle:ay,useInsertionEffect:ay,useLayoutEffect:ay,useMemo:ay,useReducer:ay,useRef:ay,useState:ay,useDebugValue:ay,useDeferredValue:ay,useTransition:ay,useMutableSource:ay,useSyncExternalStore:ay,useId:ay,unstable_isNewReconciler:!1},a4={readContext:oA,useCallback:function(e,t){return aS().memoizedState=[e,void 0===t?null:t],e},useContext:oA,useEffect:aB,useImperativeHandle:function(e,t,n){return n=null!=n?n.concat([e]):null,aF(4194308,4,aH.bind(null,t,e),n)},useLayoutEffect:function(e,t){return aF(4194308,4,e,t)},useInsertionEffect:function(e,t){return aF(4,2,e,t)},useMemo:function(e,t){var n=aS();return t=void 0===t?null:t,e=e(),n.memoizedState=[e,t],e},useReducer:function(e,t,n){var r=aS();return t=void 0!==n?n(t):t,r.memoizedState=r.baseState=t,e={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:t},r.queue=e,e=e.dispatch=aK.bind(null,ad,e),[r.memoizedState,e]},useRef:function(e){var t=aS();return e={current:e},t.memoizedState=e},useState:aL,useDebugValue:aQ,useDeferredValue:function(e){return aS().memoizedState=e},useTransition:function(){var e=aL(!1),t=e[0];return e=aG.bind(null,e[1]),aS().memoizedState=e,[t,e]},useMutableSource:function(){},useSyncExternalStore:function(e,t,n){var r=ad,o=aS();if(od){if(void 0===n)throw Error(d(407));n=n()}else{if(n=t(),null===i6)throw Error(d(349));0!=(30&au)||aC(r,t,n)}o.memoizedState=n;var a={value:n,getSnapshot:t};return o.queue=a,aB(aI.bind(null,r,a,e),[e]),r.flags|=2048,aR(9,aT.bind(null,r,a,n,t),void 0,null),n},useId:function(){var e=aS(),t=i6.identifierPrefix;if(od){var n=oo,r=or;t=":"+t+"R"+(n=(r&~(1<<32-e5(r)-1)).toString(32)+n),0<(n=ah++)&&(t+="H"+n.toString(32)),t+=":"}else t=":"+t+"r"+(n=ab++).toString(32)+":";return e.memoizedState=t},unstable_isNewReconciler:!1},a3={readContext:oA,useCallback:aZ,useContext:oA,useEffect:az,useImperativeHandle:aq,useInsertionEffect:a$,useLayoutEffect:aU,useMemo:aW,useReducer:aE,useRef:aD,useState:function(){return aE(a_)},useDebugValue:aQ,useDeferredValue:function(e){return aV(ax(),ap.memoizedState,e)},useTransition:function(){return[aE(a_)[0],ax().memoizedState]},useMutableSource:aP,useSyncExternalStore:aj,useId:aY,unstable_isNewReconciler:!1},a9={readContext:oA,useCallback:aZ,useContext:oA,useEffect:az,useImperativeHandle:aq,useInsertionEffect:a$,useLayoutEffect:aU,useMemo:aW,useReducer:aO,useRef:aD,useState:function(){return aO(a_)},useDebugValue:aQ,useDeferredValue:function(e){var t=ax();return null===ap?t.memoizedState=e:aV(t,ap.memoizedState,e)},useTransition:function(){return[aO(a_)[0],ax().memoizedState]},useMutableSource:aP,useSyncExternalStore:aj,useId:aY,unstable_isNewReconciler:!1};function a6(e,t){try{var n="",r=t;do n+=function(e){switch(e.tag){case 5:return q(e.type);case 16:return q("Lazy");case 13:return q("Suspense");case 19:return q("SuspenseList");case 0:case 2:case 15:return e=Z(e.type,!1);case 11:return e=Z(e.type.render,!1);case 1:return e=Z(e.type,!0);default:return""}}(r),r=r.return;while(r);var o=n}catch(e){o="\nError generating stack: "+e.message+"\n"+e.stack}return{value:e,source:t,stack:o,digest:null}}function a8(e,t,n){return{value:e,source:null,stack:null!=n?n:null,digest:null!=t?t:null}}function a5(e,t){try{console.error(t.value)}catch(e){setTimeout(function(){throw e})}}var a7="function"==typeof WeakMap?WeakMap:Map;function ie(e,t,n){(n=oz(-1,n)).tag=3,n.payload={element:null};var r=t.value;return n.callback=function(){sd||(sd=!0,sp=r),a5(e,t)},n}function it(e,t,n){(n=oz(-1,n)).tag=3;var r=e.type.getDerivedStateFromError;if("function"==typeof r){var o=t.value;n.payload=function(){return r(o)},n.callback=function(){a5(e,t)}}var a=e.stateNode;return null!==a&&"function"==typeof a.componentDidCatch&&(n.callback=function(){a5(e,t),"function"!=typeof r&&(null===sf?sf=new Set([this]):sf.add(this));var n=t.stack;this.componentDidCatch(t.value,{componentStack:null!==n?n:""})}),n}function ir(e,t,n){var r=e.pingCache;if(null===r){r=e.pingCache=new a7;var o=new Set;r.set(t,o)}else void 0===(o=r.get(t))&&(o=new Set,r.set(t,o));o.has(n)||(o.add(n),e=sq.bind(null,e,t,n),t.then(e,e))}function io(e){do{var t;if((t=13===e.tag)&&(t=null===(t=e.memoizedState)||null!==t.dehydrated),t)return e;e=e.return}while(null!==e);return null}function ia(e,t,n,r,o){return 0==(1&e.mode)?(e===t?e.flags|=65536:(e.flags|=128,n.flags|=131072,n.flags&=-52805,1===n.tag&&(null===n.alternate?n.tag=17:((t=oz(-1,1)).tag=2,o$(n,t,1))),n.lanes|=1),e):(e.flags|=65536,e.lanes=o,e)}var ii=O.ReactCurrentOwner,is=!1;function il(e,t,n,r){t.child=null===e?o3(t,null,n,r):o4(t,e.child,n,r)}function ic(e,t,n,r,o){n=n.render;var a=t.ref;return(oI(t,o),r=aw(e,t,n,r,a,o),n=ak(),null===e||is)?(od&&n&&os(t),t.flags|=1,il(e,t,r,o),t.child):(t.updateQueue=e.updateQueue,t.flags&=-2053,e.lanes&=~o,iC(e,t,o))}function iu(e,t,n,r,o){if(null===e){var a=n.type;return"function"!=typeof a||sK(a)||void 0!==a.defaultProps||null!==n.compare||void 0!==n.defaultProps?((e=sJ(n.type,null,r,t,t.mode,o)).ref=t.ref,e.return=t,t.child=e):(t.tag=15,t.type=a,id(e,t,a,r,o))}if(a=e.child,0==(e.lanes&o)){var i=a.memoizedProps;if((n=null!==(n=n.compare)?n:nF)(i,r)&&e.ref===t.ref)return iC(e,t,o)}return t.flags|=1,(e=sX(a,r)).ref=t.ref,e.return=t,t.child=e}function id(e,t,n,r,o){if(null!==e){var a=e.memoizedProps;if(nF(a,r)&&e.ref===t.ref){if(is=!1,t.pendingProps=r=a,0==(e.lanes&o))return t.lanes=e.lanes,iC(e,t,o);else 0!=(131072&e.flags)&&(is=!0)}}return im(e,t,n,r,o)}function ip(e,t,n){var r=t.pendingProps,o=r.children,a=null!==e?e.memoizedState:null;if("hidden"===r.mode){if(0==(1&t.mode))t.memoizedState={baseLanes:0,cachePool:null,transitions:null},rH(se,i7),i7|=n;else{if(0==(0x40000000&n))return e=null!==a?a.baseLanes|n:n,t.lanes=t.childLanes=0x40000000,t.memoizedState={baseLanes:e,cachePool:null,transitions:null},t.updateQueue=null,rH(se,i7),i7|=e,null;t.memoizedState={baseLanes:0,cachePool:null,transitions:null},r=null!==a?a.baseLanes:n,rH(se,i7),i7|=r}}else null!==a?(r=a.baseLanes|n,t.memoizedState=null):r=n,rH(se,i7),i7|=r;return il(e,t,o,n),t.child}function ig(e,t){var n=t.ref;(null===e&&null!==n||null!==e&&e.ref!==n)&&(t.flags|=512,t.flags|=2097152)}function im(e,t,n,r,o){var a=rG(n)?rW:rQ.current;return(a=rV(t,a),oI(t,o),n=aw(e,t,n,r,a,o),r=ak(),null===e||is)?(od&&r&&os(t),t.flags|=1,il(e,t,n,o),t.child):(t.updateQueue=e.updateQueue,t.flags&=-2053,e.lanes&=~o,iC(e,t,o))}function ih(e,t,n,r,o){if(rG(n)){var a=!0;rJ(t)}else a=!1;if(oI(t,o),null===t.stateNode)ij(e,t),oY(t,n,r),oX(t,n,r,o),r=!0;else if(null===e){var i=t.stateNode,s=t.memoizedProps;i.props=s;var l=i.context,c=n.contextType;c="object"==typeof c&&null!==c?oA(c):rV(t,c=rG(n)?rW:rQ.current);var u=n.getDerivedStateFromProps,d="function"==typeof u||"function"==typeof i.getSnapshotBeforeUpdate;d||"function"!=typeof i.UNSAFE_componentWillReceiveProps&&"function"!=typeof i.componentWillReceiveProps||(s!==r||l!==c)&&oK(t,i,r,c),oF=!1;var p=t.memoizedState;i.state=p,oq(t,r,i,o),l=t.memoizedState,s!==r||p!==l||rZ.current||oF?("function"==typeof u&&(oW(t,n,u,r),l=t.memoizedState),(s=oF||oG(t,n,s,r,p,l,c))?(d||"function"!=typeof i.UNSAFE_componentWillMount&&"function"!=typeof i.componentWillMount||("function"==typeof i.componentWillMount&&i.componentWillMount(),"function"==typeof i.UNSAFE_componentWillMount&&i.UNSAFE_componentWillMount()),"function"==typeof i.componentDidMount&&(t.flags|=4194308)):("function"==typeof i.componentDidMount&&(t.flags|=4194308),t.memoizedProps=r,t.memoizedState=l),i.props=r,i.state=l,i.context=c,r=s):("function"==typeof i.componentDidMount&&(t.flags|=4194308),r=!1)}else{i=t.stateNode,oB(e,t),s=t.memoizedProps,c=t.type===t.elementType?s:ox(t.type,s),i.props=c,d=t.pendingProps,p=i.context,l="object"==typeof(l=n.contextType)&&null!==l?oA(l):rV(t,l=rG(n)?rW:rQ.current);var f=n.getDerivedStateFromProps;(u="function"==typeof f||"function"==typeof i.getSnapshotBeforeUpdate)||"function"!=typeof i.UNSAFE_componentWillReceiveProps&&"function"!=typeof i.componentWillReceiveProps||(s!==d||p!==l)&&oK(t,i,r,l),oF=!1,p=t.memoizedState,i.state=p,oq(t,r,i,o);var g=t.memoizedState;s!==d||p!==g||rZ.current||oF?("function"==typeof f&&(oW(t,n,f,r),g=t.memoizedState),(c=oF||oG(t,n,c,r,p,g,l)||!1)?(u||"function"!=typeof i.UNSAFE_componentWillUpdate&&"function"!=typeof i.componentWillUpdate||("function"==typeof i.componentWillUpdate&&i.componentWillUpdate(r,g,l),"function"==typeof i.UNSAFE_componentWillUpdate&&i.UNSAFE_componentWillUpdate(r,g,l)),"function"==typeof i.componentDidUpdate&&(t.flags|=4),"function"==typeof i.getSnapshotBeforeUpdate&&(t.flags|=1024)):("function"!=typeof i.componentDidUpdate||s===e.memoizedProps&&p===e.memoizedState||(t.flags|=4),"function"!=typeof i.getSnapshotBeforeUpdate||s===e.memoizedProps&&p===e.memoizedState||(t.flags|=1024),t.memoizedProps=r,t.memoizedState=g),i.props=r,i.state=g,i.context=l,r=c):("function"!=typeof i.componentDidUpdate||s===e.memoizedProps&&p===e.memoizedState||(t.flags|=4),"function"!=typeof i.getSnapshotBeforeUpdate||s===e.memoizedProps&&p===e.memoizedState||(t.flags|=1024),r=!1)}return ib(e,t,n,r,a,o)}function ib(e,t,n,r,o,a){ig(e,t);var i=0!=(128&t.flags);if(!r&&!i)return o&&r0(t,n,!1),iC(e,t,a);r=t.stateNode,ii.current=t;var s=i&&"function"!=typeof n.getDerivedStateFromError?null:r.render();return t.flags|=1,null!==e&&i?(t.child=o4(t,e.child,null,a),t.child=o4(t,null,s,a)):il(e,t,s,a),t.memoizedState=r.state,o&&r0(t,n,!0),t.child}function iy(e){var t=e.stateNode;t.pendingContext?rK(e,t.pendingContext,t.pendingContext!==t.context):t.context&&rK(e,t.context,!1),ae(e,t.containerInfo)}function iv(e,t,n,r,o){return ow(),ok(o),t.flags|=256,il(e,t,n,r),t.child}var iw={dehydrated:null,treeContext:null,retryLane:0};function ik(e){return{baseLanes:e,cachePool:null,transitions:null}}function iS(e,t,n){var r,o=t.pendingProps,a=ao.current,i=!1,s=0!=(128&t.flags);if((r=s)||(r=(null===e||null!==e.memoizedState)&&0!=(2&a)),r?(i=!0,t.flags&=-129):(null===e||null!==e.memoizedState)&&(a|=1),rH(ao,1&a),null===e)return(oh(t),null!==(e=t.memoizedState)&&null!==(e=e.dehydrated))?(0==(1&t.mode)?t.lanes=1:"$!"===e.data?t.lanes=8:t.lanes=0x40000000,null):(s=o.children,e=o.fallback,i?(o=t.mode,i=t.child,s={mode:"hidden",children:s},0==(1&o)&&null!==i?(i.childLanes=0,i.pendingProps=s):i=s1(s,o,0,null),e=s0(e,o,n,null),i.return=t,e.return=t,i.sibling=e,t.child=i,t.child.memoizedState=ik(n),t.memoizedState=iw,e):ix(t,s));if(null!==(a=e.memoizedState)&&null!==(r=a.dehydrated))return function(e,t,n,r,o,a,i){if(n)return 256&t.flags?(t.flags&=-257,i_(e,t,i,r=a8(Error(d(422))))):null!==t.memoizedState?(t.child=e.child,t.flags|=128,null):(a=r.fallback,o=t.mode,r=s1({mode:"visible",children:r.children},o,0,null),a=s0(a,o,i,null),a.flags|=2,r.return=t,a.return=t,r.sibling=a,t.child=r,0!=(1&t.mode)&&o4(t,e.child,null,i),t.child.memoizedState=ik(i),t.memoizedState=iw,a);if(0==(1&t.mode))return i_(e,t,i,null);if("$!"===o.data){if(r=o.nextSibling&&o.nextSibling.dataset)var s=r.dgst;return r=s,i_(e,t,i,r=a8(a=Error(d(419)),r,void 0))}if(s=0!=(i&e.childLanes),is||s){if(null!==(r=i6)){switch(i&-i){case 4:o=2;break;case 16:o=8;break;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:case 4194304:case 8388608:case 0x1000000:case 0x2000000:case 0x4000000:o=32;break;case 0x20000000:o=0x10000000;break;default:o=0}0!==(o=0!=(o&(r.suspendedLanes|i))?0:o)&&o!==a.retryLane&&(a.retryLane=o,oD(e,o),sx(r,e,o,-1))}return sD(),i_(e,t,i,r=a8(Error(d(421))))}return"$?"===o.data?(t.flags|=128,t.child=e.child,t=sZ.bind(null,e),o._reactRetry=t,null):(e=a.treeContext,ou=rO(o.nextSibling),oc=t,od=!0,op=null,null!==e&&(oe[ot++]=or,oe[ot++]=oo,oe[ot++]=on,or=e.id,oo=e.overflow,on=t),t=ix(t,r.children),t.flags|=4096,t)}(e,t,s,o,r,a,n);if(i){i=o.fallback,s=t.mode,r=(a=e.child).sibling;var l={mode:"hidden",children:o.children};return 0==(1&s)&&t.child!==a?((o=t.child).childLanes=0,o.pendingProps=l,t.deletions=null):(o=sX(a,l)).subtreeFlags=0xe00000&a.subtreeFlags,null!==r?i=sX(r,i):(i=s0(i,s,n,null),i.flags|=2),i.return=t,o.return=t,o.sibling=i,t.child=o,o=i,i=t.child,s=null===(s=e.child.memoizedState)?ik(n):{baseLanes:s.baseLanes|n,cachePool:null,transitions:s.transitions},i.memoizedState=s,i.childLanes=e.childLanes&~n,t.memoizedState=iw,o}return e=(i=e.child).sibling,o=sX(i,{mode:"visible",children:o.children}),0==(1&t.mode)&&(o.lanes=n),o.return=t,o.sibling=null,null!==e&&(null===(n=t.deletions)?(t.deletions=[e],t.flags|=16):n.push(e)),t.child=o,t.memoizedState=null,o}function ix(e,t){return(t=s1({mode:"visible",children:t},e.mode,0,null)).return=e,e.child=t}function i_(e,t,n,r){return null!==r&&ok(r),o4(t,e.child,null,n),e=ix(t,t.pendingProps.children),e.flags|=2,t.memoizedState=null,e}function iE(e,t,n){e.lanes|=t;var r=e.alternate;null!==r&&(r.lanes|=t),oT(e.return,t,n)}function iO(e,t,n,r,o){var a=e.memoizedState;null===a?e.memoizedState={isBackwards:t,rendering:null,renderingStartTime:0,last:r,tail:n,tailMode:o}:(a.isBackwards=t,a.rendering=null,a.renderingStartTime=0,a.last=r,a.tail=n,a.tailMode=o)}function iP(e,t,n){var r=t.pendingProps,o=r.revealOrder,a=r.tail;if(il(e,t,r.children,n),0!=(2&(r=ao.current)))r=1&r|2,t.flags|=128;else{if(null!==e&&0!=(128&e.flags))e:for(e=t.child;null!==e;){if(13===e.tag)null!==e.memoizedState&&iE(e,n,t);else if(19===e.tag)iE(e,n,t);else if(null!==e.child){e.child.return=e,e=e.child;continue}if(e===t)break;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(rH(ao,r),0==(1&t.mode))t.memoizedState=null;else switch(o){case"forwards":for(o=null,n=t.child;null!==n;)null!==(e=n.alternate)&&null===aa(e)&&(o=n),n=n.sibling;null===(n=o)?(o=t.child,t.child=null):(o=n.sibling,n.sibling=null),iO(t,!1,o,n,a);break;case"backwards":for(n=null,o=t.child,t.child=null;null!==o;){if(null!==(e=o.alternate)&&null===aa(e)){t.child=o;break}e=o.sibling,o.sibling=n,n=o,o=e}iO(t,!0,n,null,a);break;case"together":iO(t,!1,null,null,void 0);break;default:t.memoizedState=null}return t.child}function ij(e,t){0==(1&t.mode)&&null!==e&&(e.alternate=null,t.alternate=null,t.flags|=2)}function iC(e,t,n){if(null!==e&&(t.dependencies=e.dependencies),sr|=t.lanes,0==(n&t.childLanes))return null;if(null!==e&&t.child!==e.child)throw Error(d(153));if(null!==t.child){for(n=sX(e=t.child,e.pendingProps),t.child=n,n.return=t;null!==e.sibling;)e=e.sibling,(n=n.sibling=sX(e,e.pendingProps)).return=t;n.sibling=null}return t.child}function iT(e,t){if(!od)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 iI(e){var t=null!==e.alternate&&e.alternate.child===e.child,n=0,r=0;if(t)for(var o=e.child;null!==o;)n|=o.lanes|o.childLanes,r|=0xe00000&o.subtreeFlags,r|=0xe00000&o.flags,o.return=e,o=o.sibling;else for(o=e.child;null!==o;)n|=o.lanes|o.childLanes,r|=o.subtreeFlags,r|=o.flags,o.return=e,o=o.sibling;return e.subtreeFlags|=r,e.childLanes=n,t}o=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}},a=function(){},i=function(e,t,n,r){var o=e.memoizedProps;if(o!==r){e=t.stateNode,o7(o6.current);var a,i=null;switch(n){case"input":o=X(e,o),r=X(e,r),i=[];break;case"select":o=H({},o,{value:void 0}),r=H({},r,{value:void 0}),i=[];break;case"textarea":o=ei(e,o),r=ei(e,r),i=[];break;default:"function"!=typeof o.onClick&&"function"==typeof r.onClick&&(e.onclick=rh)}for(c in ek(n,r),n=null,o)if(!r.hasOwnProperty(c)&&o.hasOwnProperty(c)&&null!=o[c]){if("style"===c){var s=o[c];for(a in s)s.hasOwnProperty(a)&&(n||(n={}),n[a]="")}else"dangerouslySetInnerHTML"!==c&&"children"!==c&&"suppressContentEditableWarning"!==c&&"suppressHydrationWarning"!==c&&"autoFocus"!==c&&(f.hasOwnProperty(c)?i||(i=[]):(i=i||[]).push(c,null))}for(c in r){var l=r[c];if(s=null!=o?o[c]:void 0,r.hasOwnProperty(c)&&l!==s&&(null!=l||null!=s)){if("style"===c){if(s){for(a in s)!s.hasOwnProperty(a)||l&&l.hasOwnProperty(a)||(n||(n={}),n[a]="");for(a in l)l.hasOwnProperty(a)&&s[a]!==l[a]&&(n||(n={}),n[a]=l[a])}else n||(i||(i=[]),i.push(c,n)),n=l}else"dangerouslySetInnerHTML"===c?(l=l?l.__html:void 0,s=s?s.__html:void 0,null!=l&&s!==l&&(i=i||[]).push(c,l)):"children"===c?"string"!=typeof l&&"number"!=typeof l||(i=i||[]).push(c,""+l):"suppressContentEditableWarning"!==c&&"suppressHydrationWarning"!==c&&(f.hasOwnProperty(c)?(null!=l&&"onScroll"===c&&rn("scroll",e),i||s===l||(i=[])):(i=i||[]).push(c,l))}}n&&(i=i||[]).push("style",n);var c=i;(t.updateQueue=c)&&(t.flags|=4)}},s=function(e,t,n,r){n!==r&&(t.flags|=4)};var iA=!1,iN=!1,iL="function"==typeof WeakSet?WeakSet:Set,iR=null;function iD(e,t){var n=e.ref;if(null!==n){if("function"==typeof n)try{n(null)}catch(n){sH(e,t,n)}else n.current=null}}function iF(e,t,n){try{n()}catch(n){sH(e,t,n)}}var iM=!1;function iB(e,t,n){var r=t.updateQueue;if(null!==(r=null!==r?r.lastEffect:null)){var o=r=r.next;do{if((o.tag&e)===e){var a=o.destroy;o.destroy=void 0,void 0!==a&&iF(t,n,a)}o=o.next}while(o!==r)}}function iz(e,t){if(null!==(t=null!==(t=t.updateQueue)?t.lastEffect:null)){var n=t=t.next;do{if((n.tag&e)===e){var r=n.create;n.destroy=r()}n=n.next}while(n!==t)}}function i$(e){var t=e.ref;if(null!==t){var n=e.stateNode;e.tag;e=n;"function"==typeof t?t(e):t.current=e}}function iU(e){return 5===e.tag||3===e.tag||4===e.tag}function iH(e){e:for(;;){for(;null===e.sibling;){if(null===e.return||iU(e.return))return null;e=e.return}for(e.sibling.return=e.return,e=e.sibling;5!==e.tag&&6!==e.tag&&18!==e.tag;){if(2&e.flags)continue e;if(null===e.child||4===e.tag)continue e;e.child.return=e,e=e.child}if(!(2&e.flags))return e.stateNode}}var iq=null,iQ=!1;function iZ(e,t,n){for(n=n.child;null!==n;)iW(e,t,n),n=n.sibling}function iW(e,t,n){if(e8&&"function"==typeof e8.onCommitFiberUnmount)try{e8.onCommitFiberUnmount(e6,n)}catch(e){}switch(n.tag){case 5:iN||iD(n,t);case 6:var r=iq,o=iQ;iq=null,iZ(e,t,n),iq=r,iQ=o,null!==iq&&(iQ?(e=iq,n=n.stateNode,8===e.nodeType?e.parentNode.removeChild(n):e.removeChild(n)):iq.removeChild(n.stateNode));break;case 18:null!==iq&&(iQ?(e=iq,n=n.stateNode,8===e.nodeType?rE(e.parentNode,n):1===e.nodeType&&rE(e,n),tN(e)):rE(iq,n.stateNode));break;case 4:r=iq,o=iQ,iq=n.stateNode.containerInfo,iQ=!0,iZ(e,t,n),iq=r,iQ=o;break;case 0:case 11:case 14:case 15:if(!iN&&null!==(r=n.updateQueue)&&null!==(r=r.lastEffect)){o=r=r.next;do{var a=o,i=a.destroy;a=a.tag,void 0!==i&&(0!=(2&a)?iF(n,t,i):0!=(4&a)&&iF(n,t,i)),o=o.next}while(o!==r)}iZ(e,t,n);break;case 1:if(!iN&&(iD(n,t),"function"==typeof(r=n.stateNode).componentWillUnmount))try{r.props=n.memoizedProps,r.state=n.memoizedState,r.componentWillUnmount()}catch(e){sH(n,t,e)}iZ(e,t,n);break;case 21:default:iZ(e,t,n);break;case 22:1&n.mode?(iN=(r=iN)||null!==n.memoizedState,iZ(e,t,n),iN=r):iZ(e,t,n)}}function iV(e){var t=e.updateQueue;if(null!==t){e.updateQueue=null;var n=e.stateNode;null===n&&(n=e.stateNode=new iL),t.forEach(function(t){var r=sW.bind(null,e,t);n.has(t)||(n.add(t),t.then(r,r))})}}function iG(e,t){var n=t.deletions;if(null!==n)for(var r=0;r<n.length;r++){var o=n[r];try{var a=t,i=a;e:for(;null!==i;){switch(i.tag){case 5:iq=i.stateNode,iQ=!1;break e;case 3:case 4:iq=i.stateNode.containerInfo,iQ=!0;break e}i=i.return}if(null===iq)throw Error(d(160));iW(e,a,o),iq=null,iQ=!1;var s=o.alternate;null!==s&&(s.return=null),o.return=null}catch(e){sH(o,t,e)}}if(12854&t.subtreeFlags)for(t=t.child;null!==t;)iY(t,e),t=t.sibling}function iY(e,t){var n=e.alternate,r=e.flags;switch(e.tag){case 0:case 11:case 14:case 15:if(iG(t,e),iK(e),4&r){try{iB(3,e,e.return),iz(3,e)}catch(t){sH(e,e.return,t)}try{iB(5,e,e.return)}catch(t){sH(e,e.return,t)}}break;case 1:iG(t,e),iK(e),512&r&&null!==n&&iD(n,n.return);break;case 5:if(iG(t,e),iK(e),512&r&&null!==n&&iD(n,n.return),32&e.flags){var o=e.stateNode;try{em(o,"")}catch(t){sH(e,e.return,t)}}if(4&r&&null!=(o=e.stateNode)){var a=e.memoizedProps,i=null!==n?n.memoizedProps:a,s=e.type,l=e.updateQueue;if(e.updateQueue=null,null!==l)try{"input"===s&&"radio"===a.type&&null!=a.name&&ee(o,a),eS(s,i);var c=eS(s,a);for(i=0;i<l.length;i+=2){var u=l[i],p=l[i+1];"style"===u?ev(o,p):"dangerouslySetInnerHTML"===u?eg(o,p):"children"===u?em(o,p):E(o,u,p,c)}switch(s){case"input":et(o,a);break;case"textarea":el(o,a);break;case"select":var f=o._wrapperState.wasMultiple;o._wrapperState.wasMultiple=!!a.multiple;var g=a.value;null!=g?ea(o,!!a.multiple,g,!1):!!a.multiple!==f&&(null!=a.defaultValue?ea(o,!!a.multiple,a.defaultValue,!0):ea(o,!!a.multiple,a.multiple?[]:"",!1))}o[rT]=a}catch(t){sH(e,e.return,t)}}break;case 6:if(iG(t,e),iK(e),4&r){if(null===e.stateNode)throw Error(d(162));o=e.stateNode,a=e.memoizedProps;try{o.nodeValue=a}catch(t){sH(e,e.return,t)}}break;case 3:if(iG(t,e),iK(e),4&r&&null!==n&&n.memoizedState.isDehydrated)try{tN(t.containerInfo)}catch(t){sH(e,e.return,t)}break;case 4:default:iG(t,e),iK(e);break;case 13:iG(t,e),iK(e),8192&(o=e.child).flags&&(a=null!==o.memoizedState,o.stateNode.isHidden=a,a&&(null===o.alternate||null===o.alternate.memoizedState)&&(sl=eJ())),4&r&&iV(e);break;case 22:if(u=null!==n&&null!==n.memoizedState,1&e.mode?(iN=(c=iN)||u,iG(t,e),iN=c):iG(t,e),iK(e),8192&r){if(c=null!==e.memoizedState,(e.stateNode.isHidden=c)&&!u&&0!=(1&e.mode))for(iR=e,u=e.child;null!==u;){for(p=iR=u;null!==iR;){switch(g=(f=iR).child,f.tag){case 0:case 11:case 14:case 15:iB(4,f,f.return);break;case 1:iD(f,f.return);var m=f.stateNode;if("function"==typeof m.componentWillUnmount){r=f,n=f.return;try{t=r,m.props=t.memoizedProps,m.state=t.memoizedState,m.componentWillUnmount()}catch(e){sH(r,n,e)}}break;case 5:iD(f,f.return);break;case 22:if(null!==f.memoizedState){iJ(p);continue}}null!==g?(g.return=f,iR=g):iJ(p)}u=u.sibling}e:for(u=null,p=e;;){if(5===p.tag){if(null===u){u=p;try{o=p.stateNode,c?(a=o.style,"function"==typeof a.setProperty?a.setProperty("display","none","important"):a.display="none"):(s=p.stateNode,i=null!=(l=p.memoizedProps.style)&&l.hasOwnProperty("display")?l.display:null,s.style.display=ey("display",i))}catch(t){sH(e,e.return,t)}}}else if(6===p.tag){if(null===u)try{p.stateNode.nodeValue=c?"":p.memoizedProps}catch(t){sH(e,e.return,t)}}else if((22!==p.tag&&23!==p.tag||null===p.memoizedState||p===e)&&null!==p.child){p.child.return=p,p=p.child;continue}if(p===e)break;for(;null===p.sibling;){if(null===p.return||p.return===e)break e;u===p&&(u=null),p=p.return}u===p&&(u=null),p.sibling.return=p.return,p=p.sibling}}break;case 19:iG(t,e),iK(e),4&r&&iV(e);case 21:}}function iK(e){var t=e.flags;if(2&t){try{e:{for(var n=e.return;null!==n;){if(iU(n)){var r=n;break e}n=n.return}throw Error(d(160))}switch(r.tag){case 5:var o=r.stateNode;32&r.flags&&(em(o,""),r.flags&=-33);var a=iH(e);!function e(t,n,r){var o=t.tag;if(5===o||6===o)t=t.stateNode,n?r.insertBefore(t,n):r.appendChild(t);else if(4!==o&&null!==(t=t.child))for(e(t,n,r),t=t.sibling;null!==t;)e(t,n,r),t=t.sibling}(e,a,o);break;case 3:case 4:var i=r.stateNode.containerInfo,s=iH(e);!function e(t,n,r){var o=t.tag;if(5===o||6===o)t=t.stateNode,n?8===r.nodeType?r.parentNode.insertBefore(t,n):r.insertBefore(t,n):(8===r.nodeType?(n=r.parentNode).insertBefore(t,r):(n=r).appendChild(t),null!=(r=r._reactRootContainer)||null!==n.onclick||(n.onclick=rh));else if(4!==o&&null!==(t=t.child))for(e(t,n,r),t=t.sibling;null!==t;)e(t,n,r),t=t.sibling}(e,s,i);break;default:throw Error(d(161))}}catch(t){sH(e,e.return,t)}e.flags&=-3}4096&t&&(e.flags&=-4097)}function iX(e){for(;null!==iR;){var t=iR;if(0!=(8772&t.flags)){var n=t.alternate;try{if(0!=(8772&t.flags))switch(t.tag){case 0:case 11:case 15:iN||iz(5,t);break;case 1:var r=t.stateNode;if(4&t.flags&&!iN){if(null===n)r.componentDidMount();else{var o=t.elementType===t.type?n.memoizedProps:ox(t.type,n.memoizedProps);r.componentDidUpdate(o,n.memoizedState,r.__reactInternalSnapshotBeforeUpdate)}}var a=t.updateQueue;null!==a&&oQ(t,a,r);break;case 3:var i=t.updateQueue;if(null!==i){if(n=null,null!==t.child)switch(t.child.tag){case 5:case 1:n=t.child.stateNode}oQ(t,i,n)}break;case 5:var s=t.stateNode;if(null===n&&4&t.flags){n=s;var l=t.memoizedProps;switch(t.type){case"button":case"input":case"select":case"textarea":l.autoFocus&&n.focus();break;case"img":l.src&&(n.src=l.src)}}break;case 6:case 4:case 12:case 19:case 17:case 21:case 22:case 23:case 25:break;case 13:if(null===t.memoizedState){var c=t.alternate;if(null!==c){var u=c.memoizedState;if(null!==u){var p=u.dehydrated;null!==p&&tN(p)}}}break;default:throw Error(d(163))}iN||512&t.flags&&i$(t)}catch(e){sH(t,t.return,e)}}if(t===e){iR=null;break}if(null!==(n=t.sibling)){n.return=t.return,iR=n;break}iR=t.return}}function iJ(e){for(;null!==iR;){var t=iR;if(t===e){iR=null;break}var n=t.sibling;if(null!==n){n.return=t.return,iR=n;break}iR=t.return}}function i0(e){for(;null!==iR;){var t=iR;try{switch(t.tag){case 0:case 11:case 15:var n=t.return;try{iz(4,t)}catch(e){sH(t,n,e)}break;case 1:var r=t.stateNode;if("function"==typeof r.componentDidMount){var o=t.return;try{r.componentDidMount()}catch(e){sH(t,o,e)}}var a=t.return;try{i$(t)}catch(e){sH(t,a,e)}break;case 5:var i=t.return;try{i$(t)}catch(e){sH(t,i,e)}}}catch(e){sH(t,t.return,e)}if(t===e){iR=null;break}var s=t.sibling;if(null!==s){s.return=t.return,iR=s;break}iR=t.return}}var i1=Math.ceil,i2=O.ReactCurrentDispatcher,i4=O.ReactCurrentOwner,i3=O.ReactCurrentBatchConfig,i9=0,i6=null,i8=null,i5=0,i7=0,se=r$(0),st=0,sn=null,sr=0,so=0,sa=0,si=null,ss=null,sl=0,sc=1/0,su=null,sd=!1,sp=null,sf=null,sg=!1,sm=null,sh=0,sb=0,sy=null,sv=-1,sw=0;function sk(){return 0!=(6&i9)?eJ():-1!==sv?sv:sv=eJ()}function sS(e){return 0==(1&e.mode)?1:0!=(2&i9)&&0!==i5?i5&-i5:null!==oS.transition?(0===sw&&(sw=ti()),sw):0!==(e=tu)?e:e=void 0===(e=window.event)?16:t$(e.type)}function sx(e,t,n,r){if(50<sb)throw sb=0,sy=null,Error(d(185));tl(e,n,r),(0==(2&i9)||e!==i6)&&(e===i6&&(0==(2&i9)&&(so|=n),4===st&&sj(e,i5)),s_(e,r),1===n&&0===i9&&0==(1&t.mode)&&(sc=eJ()+500,r2&&r9()))}function s_(e,t){var n,r=e.callbackNode;!function(e,t){for(var n=e.suspendedLanes,r=e.pingedLanes,o=e.expirationTimes,a=e.pendingLanes;0<a;){var i=31-e5(a),s=1<<i,l=o[i];-1===l?(0==(s&n)||0!=(s&r))&&(o[i]=function(e,t){switch(e){case 1:case 2:case 4:return t+250;case 8:case 16:case 32:case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return t+5e3;default:return -1}}(s,t)):l<=t&&(e.expiredLanes|=s),a&=~s}}(e,t);var o=to(e,e===i6?i5:0);if(0===o)null!==r&&eY(r),e.callbackNode=null,e.callbackPriority=0;else if(t=o&-o,e.callbackPriority!==t){if(null!=r&&eY(r),1===t){;0===e.tag?(n=sC.bind(null,e),r2=!0,r3(n)):r3(sC.bind(null,e)),rx(function(){0==(6&i9)&&r9()}),r=null}else{switch(td(o)){case 1:r=e1;break;case 4:r=e2;break;case 16:default:r=e4;break;case 0x20000000:r=e9}r=function(e,t){return eG(e,t)}(r,sE.bind(null,e))}e.callbackPriority=t,e.callbackNode=r}}function sE(e,t){if(sv=-1,sw=0,0!=(6&i9))throw Error(d(327));var n=e.callbackNode;if(s$()&&e.callbackNode!==n)return null;var r=to(e,e===i6?i5:0);if(0===r)return null;if(0!=(30&r)||0!=(r&e.expiredLanes)||t)t=sF(e,r);else{t=r;var o=i9;i9|=2;var a=sR();for((i6!==e||i5!==t)&&(su=null,sc=eJ()+500,sN(e,t));;)try{(function(){for(;null!==i8&&!eK();)sM(i8)})();break}catch(t){sL(e,t)}oj(),i2.current=a,i9=o,null!==i8?t=0:(i6=null,i5=0,t=st)}if(0!==t){if(2===t&&0!==(o=ta(e))&&(r=o,t=sO(e,o)),1===t)throw n=sn,sN(e,0),sj(e,r),s_(e,eJ()),n;if(6===t)sj(e,r);else{if(o=e.current.alternate,0==(30&r)&&!function(e){for(var t=e;;){if(16384&t.flags){var n=t.updateQueue;if(null!==n&&null!==(n=n.stores))for(var r=0;r<n.length;r++){var o=n[r],a=o.getSnapshot;o=o.value;try{if(!nD(a(),o))return!1}catch(e){return!1}}}if(n=t.child,16384&t.subtreeFlags&&null!==n)n.return=t,t=n;else{if(t===e)break;for(;null===t.sibling;){if(null===t.return||t.return===e)return!0;t=t.return}t.sibling.return=t.return,t=t.sibling}}return!0}(o)&&(2===(t=sF(e,r))&&0!==(a=ta(e))&&(r=a,t=sO(e,a)),1===t))throw n=sn,sN(e,0),sj(e,r),s_(e,eJ()),n;switch(e.finishedWork=o,e.finishedLanes=r,t){case 0:case 1:throw Error(d(345));case 2:case 5:sz(e,ss,su);break;case 3:if(sj(e,r),(0x7c00000&r)===r&&10<(t=sl+500-eJ())){if(0!==to(e,0))break;if(((o=e.suspendedLanes)&r)!==r){sk(),e.pingedLanes|=e.suspendedLanes&o;break}e.timeoutHandle=rw(sz.bind(null,e,ss,su),t);break}sz(e,ss,su);break;case 4:if(sj(e,r),(4194240&r)===r)break;for(o=-1,t=e.eventTimes;0<r;){var i=31-e5(r);a=1<<i,(i=t[i])>o&&(o=i),r&=~a}if(r=o,10<(r=(120>(r=eJ()-r)?120:480>r?480:1080>r?1080:1920>r?1920:3e3>r?3e3:4320>r?4320:1960*i1(r/1960))-r)){e.timeoutHandle=rw(sz.bind(null,e,ss,su),r);break}sz(e,ss,su);break;default:throw Error(d(329))}}}return s_(e,eJ()),e.callbackNode===n?sE.bind(null,e):null}function sO(e,t){var n=si;return e.current.memoizedState.isDehydrated&&(sN(e,t).flags|=256),2!==(e=sF(e,t))&&(t=ss,ss=n,null!==t&&sP(t)),e}function sP(e){null===ss?ss=e:ss.push.apply(ss,e)}function sj(e,t){for(t&=~sa,t&=~so,e.suspendedLanes|=t,e.pingedLanes&=~t,e=e.expirationTimes;0<t;){var n=31-e5(t),r=1<<n;e[n]=-1,t&=~r}}function sC(e){if(0!=(6&i9))throw Error(d(327));s$();var t=to(e,0);if(0==(1&t))return s_(e,eJ()),null;var n=sF(e,t);if(0!==e.tag&&2===n){var r=ta(e);0!==r&&(t=r,n=sO(e,r))}if(1===n)throw n=sn,sN(e,0),sj(e,t),s_(e,eJ()),n;if(6===n)throw Error(d(345));return e.finishedWork=e.current.alternate,e.finishedLanes=t,sz(e,ss,su),s_(e,eJ()),null}function sT(e,t){var n=i9;i9|=1;try{return e(t)}finally{0===(i9=n)&&(sc=eJ()+500,r2&&r9())}}function sI(e){null!==sm&&0===sm.tag&&0==(6&i9)&&s$();var t=i9;i9|=1;var n=i3.transition,r=tu;try{if(i3.transition=null,tu=1,e)return e()}finally{tu=r,i3.transition=n,0==(6&(i9=t))&&r9()}}function sA(){i7=se.current,rU(se)}function sN(e,t){e.finishedWork=null,e.finishedLanes=0;var n=e.timeoutHandle;if(-1!==n&&(e.timeoutHandle=-1,rk(n)),null!==i8)for(n=i8.return;null!==n;){var r=n;switch(ol(r),r.tag){case 1:null!=(r=r.type.childContextTypes)&&rY();break;case 3:at(),rU(rZ),rU(rQ),as();break;case 5:ar(r);break;case 4:at();break;case 13:case 19:rU(ao);break;case 10:oC(r.type._context);break;case 22:case 23:sA()}n=n.return}if(i6=e,i8=e=sX(e.current,null),i5=i7=t,st=0,sn=null,sa=so=sr=0,ss=si=null,null!==oN){for(t=0;t<oN.length;t++)if(null!==(r=(n=oN[t]).interleaved)){n.interleaved=null;var o=r.next,a=n.pending;if(null!==a){var i=a.next;a.next=o,r.next=i}n.pending=r}oN=null}return e}function sL(e,t){for(;;){var n=i8;try{if(oj(),al.current=a2,ag){for(var r=ad.memoizedState;null!==r;){var o=r.queue;null!==o&&(o.pending=null),r=r.next}ag=!1}if(au=0,af=ap=ad=null,am=!1,ah=0,i4.current=null,null===n||null===n.return){st=1,sn=t,i8=null;break}e:{var a=e,i=n.return,s=n,l=t;if(t=i5,s.flags|=32768,null!==l&&"object"==typeof l&&"function"==typeof l.then){var c=l,u=s,p=u.tag;if(0==(1&u.mode)&&(0===p||11===p||15===p)){var f=u.alternate;f?(u.updateQueue=f.updateQueue,u.memoizedState=f.memoizedState,u.lanes=f.lanes):(u.updateQueue=null,u.memoizedState=null)}var g=io(i);if(null!==g){g.flags&=-257,ia(g,i,s,a,t),1&g.mode&&ir(a,c,t),t=g,l=c;var m=t.updateQueue;if(null===m){var h=new Set;h.add(l),t.updateQueue=h}else m.add(l);break e}if(0==(1&t)){ir(a,c,t),sD();break e}l=Error(d(426))}else if(od&&1&s.mode){var b=io(i);if(null!==b){0==(65536&b.flags)&&(b.flags|=256),ia(b,i,s,a,t),ok(a6(l,s));break e}}a=l=a6(l,s),4!==st&&(st=2),null===si?si=[a]:si.push(a),a=i;do{switch(a.tag){case 3:a.flags|=65536,t&=-t,a.lanes|=t;var y=ie(a,l,t);oH(a,y);break e;case 1:s=l;var v=a.type,w=a.stateNode;if(0==(128&a.flags)&&("function"==typeof v.getDerivedStateFromError||null!==w&&"function"==typeof w.componentDidCatch&&(null===sf||!sf.has(w)))){a.flags|=65536,t&=-t,a.lanes|=t;var k=it(a,s,t);oH(a,k);break e}}a=a.return}while(null!==a)}sB(n)}catch(e){t=e,i8===n&&null!==n&&(i8=n=n.return);continue}break}}function sR(){var e=i2.current;return i2.current=a2,null===e?a2:e}function sD(){(0===st||3===st||2===st)&&(st=4),null===i6||0==(0xfffffff&sr)&&0==(0xfffffff&so)||sj(i6,i5)}function sF(e,t){var n=i9;i9|=2;var r=sR();for((i6!==e||i5!==t)&&(su=null,sN(e,t));;)try{(function(){for(;null!==i8;)sM(i8)})();break}catch(t){sL(e,t)}if(oj(),i9=n,i2.current=r,null!==i8)throw Error(d(261));return i6=null,i5=0,st}function sM(e){var t=l(e.alternate,e,i7);e.memoizedProps=e.pendingProps,null===t?sB(e):i8=t,i4.current=null}function sB(e){var t=e;do{var n=t.alternate;if(e=t.return,0==(32768&t.flags)){if(null!==(n=function(e,t,n){var r=t.pendingProps;switch(ol(t),t.tag){case 2:case 16:case 15:case 0:case 11:case 7:case 8:case 12:case 9:case 14:return iI(t),null;case 1:case 17:return rG(t.type)&&rY(),iI(t),null;case 3:return r=t.stateNode,at(),rU(rZ),rU(rQ),as(),r.pendingContext&&(r.context=r.pendingContext,r.pendingContext=null),(null===e||null===e.child)&&(oy(t)?t.flags|=4:null===e||e.memoizedState.isDehydrated&&0==(256&t.flags)||(t.flags|=1024,null!==op&&(sP(op),op=null))),a(e,t),iI(t),null;case 5:ar(t);var l=o7(o5.current);if(n=t.type,null!==e&&null!=t.stateNode)i(e,t,n,r,l),e.ref!==t.ref&&(t.flags|=512,t.flags|=2097152);else{if(!r){if(null===t.stateNode)throw Error(d(166));return iI(t),null}if(e=o7(o6.current),oy(t)){r=t.stateNode,n=t.type;var c=t.memoizedProps;switch(r[rC]=t,r[rT]=c,e=0!=(1&t.mode),n){case"dialog":rn("cancel",r),rn("close",r);break;case"iframe":case"object":case"embed":rn("load",r);break;case"video":case"audio":for(l=0;l<n5.length;l++)rn(n5[l],r);break;case"source":rn("error",r);break;case"img":case"image":case"link":rn("error",r),rn("load",r);break;case"details":rn("toggle",r);break;case"input":J(r,c),rn("invalid",r);break;case"select":r._wrapperState={wasMultiple:!!c.multiple},rn("invalid",r);break;case"textarea":es(r,c),rn("invalid",r)}for(var u in ek(n,c),l=null,c)if(c.hasOwnProperty(u)){var p=c[u];"children"===u?"string"==typeof p?r.textContent!==p&&(!0!==c.suppressHydrationWarning&&rm(r.textContent,p,e),l=["children",p]):"number"==typeof p&&r.textContent!==""+p&&(!0!==c.suppressHydrationWarning&&rm(r.textContent,p,e),l=["children",""+p]):f.hasOwnProperty(u)&&null!=p&&"onScroll"===u&&rn("scroll",r)}switch(n){case"input":G(r),en(r,c,!0);break;case"textarea":G(r),ec(r);break;case"select":case"option":break;default:"function"==typeof c.onClick&&(r.onclick=rh)}r=l,t.updateQueue=r,null!==r&&(t.flags|=4)}else{u=9===l.nodeType?l:l.ownerDocument,"http://www.w3.org/1999/xhtml"===e&&(e=eu(n)),"http://www.w3.org/1999/xhtml"===e?"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[rC]=t,e[rT]=r,o(e,t,!1,!1),t.stateNode=e;e:{switch(u=eS(n,r),n){case"dialog":rn("cancel",e),rn("close",e),l=r;break;case"iframe":case"object":case"embed":rn("load",e),l=r;break;case"video":case"audio":for(l=0;l<n5.length;l++)rn(n5[l],e);l=r;break;case"source":rn("error",e),l=r;break;case"img":case"image":case"link":rn("error",e),rn("load",e),l=r;break;case"details":rn("toggle",e),l=r;break;case"input":J(e,r),l=X(e,r),rn("invalid",e);break;case"option":default:l=r;break;case"select":e._wrapperState={wasMultiple:!!r.multiple},l=H({},r,{value:void 0}),rn("invalid",e);break;case"textarea":es(e,r),l=ei(e,r),rn("invalid",e)}for(c in ek(n,l),p=l)if(p.hasOwnProperty(c)){var g=p[c];"style"===c?ev(e,g):"dangerouslySetInnerHTML"===c?null!=(g=g?g.__html:void 0)&&eg(e,g):"children"===c?"string"==typeof g?("textarea"!==n||""!==g)&&em(e,g):"number"==typeof g&&em(e,""+g):"suppressContentEditableWarning"!==c&&"suppressHydrationWarning"!==c&&"autoFocus"!==c&&(f.hasOwnProperty(c)?null!=g&&"onScroll"===c&&rn("scroll",e):null!=g&&E(e,c,g,u))}switch(n){case"input":G(e),en(e,r,!1);break;case"textarea":G(e),ec(e);break;case"option":null!=r.value&&e.setAttribute("value",""+W(r.value));break;case"select":e.multiple=!!r.multiple,null!=(c=r.value)?ea(e,!!r.multiple,c,!1):null!=r.defaultValue&&ea(e,!!r.multiple,r.defaultValue,!0);break;default:"function"==typeof l.onClick&&(e.onclick=rh)}switch(n){case"button":case"input":case"select":case"textarea":r=!!r.autoFocus;break e;case"img":r=!0;break e;default:r=!1}}r&&(t.flags|=4)}null!==t.ref&&(t.flags|=512,t.flags|=2097152)}return iI(t),null;case 6:if(e&&null!=t.stateNode)s(e,t,e.memoizedProps,r);else{if("string"!=typeof r&&null===t.stateNode)throw Error(d(166));if(n=o7(o5.current),o7(o6.current),oy(t)){if(r=t.stateNode,n=t.memoizedProps,r[rC]=t,(c=r.nodeValue!==n)&&null!==(e=oc))switch(e.tag){case 3:rm(r.nodeValue,n,0!=(1&e.mode));break;case 5:!0!==e.memoizedProps.suppressHydrationWarning&&rm(r.nodeValue,n,0!=(1&e.mode))}c&&(t.flags|=4)}else(r=(9===n.nodeType?n:n.ownerDocument).createTextNode(r))[rC]=t,t.stateNode=r}return iI(t),null;case 13:if(rU(ao),r=t.memoizedState,null===e||null!==e.memoizedState&&null!==e.memoizedState.dehydrated){if(od&&null!==ou&&0!=(1&t.mode)&&0==(128&t.flags))ov(),ow(),t.flags|=98560,c=!1;else if(c=oy(t),null!==r&&null!==r.dehydrated){if(null===e){if(!c)throw Error(d(318));if(!(c=null!==(c=t.memoizedState)?c.dehydrated:null))throw Error(d(317));c[rC]=t}else ow(),0==(128&t.flags)&&(t.memoizedState=null),t.flags|=4;iI(t),c=!1}else null!==op&&(sP(op),op=null),c=!0;if(!c)return 65536&t.flags?t:null}if(0!=(128&t.flags))return t.lanes=n,t;return(r=null!==r)!=(null!==e&&null!==e.memoizedState)&&r&&(t.child.flags|=8192,0!=(1&t.mode)&&(null===e||0!=(1&ao.current)?0===st&&(st=3):sD())),null!==t.updateQueue&&(t.flags|=4),iI(t),null;case 4:return at(),a(e,t),null===e&&ra(t.stateNode.containerInfo),iI(t),null;case 10:return oC(t.type._context),iI(t),null;case 19:if(rU(ao),null===(c=t.memoizedState))return iI(t),null;if(r=0!=(128&t.flags),null===(u=c.rendering)){if(r)iT(c,!1);else{if(0!==st||null!==e&&0!=(128&e.flags))for(e=t.child;null!==e;){if(null!==(u=aa(e))){for(t.flags|=128,iT(c,!1),null!==(r=u.updateQueue)&&(t.updateQueue=r,t.flags|=4),t.subtreeFlags=0,r=n,n=t.child;null!==n;)c=n,e=r,c.flags&=0xe00002,null===(u=c.alternate)?(c.childLanes=0,c.lanes=e,c.child=null,c.subtreeFlags=0,c.memoizedProps=null,c.memoizedState=null,c.updateQueue=null,c.dependencies=null,c.stateNode=null):(c.childLanes=u.childLanes,c.lanes=u.lanes,c.child=u.child,c.subtreeFlags=0,c.deletions=null,c.memoizedProps=u.memoizedProps,c.memoizedState=u.memoizedState,c.updateQueue=u.updateQueue,c.type=u.type,e=u.dependencies,c.dependencies=null===e?null:{lanes:e.lanes,firstContext:e.firstContext}),n=n.sibling;return rH(ao,1&ao.current|2),t.child}e=e.sibling}null!==c.tail&&eJ()>sc&&(t.flags|=128,r=!0,iT(c,!1),t.lanes=4194304)}}else{if(!r){if(null!==(e=aa(u))){if(t.flags|=128,r=!0,null!==(n=e.updateQueue)&&(t.updateQueue=n,t.flags|=4),iT(c,!0),null===c.tail&&"hidden"===c.tailMode&&!u.alternate&&!od)return iI(t),null}else 2*eJ()-c.renderingStartTime>sc&&0x40000000!==n&&(t.flags|=128,r=!0,iT(c,!1),t.lanes=4194304)}c.isBackwards?(u.sibling=t.child,t.child=u):(null!==(n=c.last)?n.sibling=u:t.child=u,c.last=u)}if(null!==c.tail)return t=c.tail,c.rendering=t,c.tail=t.sibling,c.renderingStartTime=eJ(),t.sibling=null,n=ao.current,rH(ao,r?1&n|2:1&n),t;return iI(t),null;case 22:case 23:return sA(),r=null!==t.memoizedState,null!==e&&null!==e.memoizedState!==r&&(t.flags|=8192),r&&0!=(1&t.mode)?0!=(0x40000000&i7)&&(iI(t),6&t.subtreeFlags&&(t.flags|=8192)):iI(t),null;case 24:case 25:return null}throw Error(d(156,t.tag))}(n,t,i7))){i8=n;return}}else{if(null!==(n=function(e,t){switch(ol(t),t.tag){case 1:return rG(t.type)&&rY(),65536&(e=t.flags)?(t.flags=-65537&e|128,t):null;case 3:return at(),rU(rZ),rU(rQ),as(),0!=(65536&(e=t.flags))&&0==(128&e)?(t.flags=-65537&e|128,t):null;case 5:return ar(t),null;case 13:if(rU(ao),null!==(e=t.memoizedState)&&null!==e.dehydrated){if(null===t.alternate)throw Error(d(340));ow()}return 65536&(e=t.flags)?(t.flags=-65537&e|128,t):null;case 19:return rU(ao),null;case 4:return at(),null;case 10:return oC(t.type._context),null;case 22:case 23:return sA(),null;default:return null}}(n,t))){n.flags&=32767,i8=n;return}if(null!==e)e.flags|=32768,e.subtreeFlags=0,e.deletions=null;else{st=6,i8=null;return}}if(null!==(t=t.sibling)){i8=t;return}i8=t=e}while(null!==t);0===st&&(st=5)}function sz(e,t,n){var r=tu,o=i3.transition;try{i3.transition=null,tu=1,function(e,t,n,r){do s$();while(null!==sm);if(0!=(6&i9))throw Error(d(327));n=e.finishedWork;var o=e.finishedLanes;if(null===n)return;if(e.finishedWork=null,e.finishedLanes=0,n===e.current)throw Error(d(177));e.callbackNode=null,e.callbackPriority=0;var a=n.lanes|n.childLanes;if(!function(e,t){var n=e.pendingLanes&~t;e.pendingLanes=t,e.suspendedLanes=0,e.pingedLanes=0,e.expiredLanes&=t,e.mutableReadLanes&=t,e.entangledLanes&=t,t=e.entanglements;var r=e.eventTimes;for(e=e.expirationTimes;0<n;){var o=31-e5(n),a=1<<o;t[o]=0,r[o]=-1,e[o]=-1,n&=~a}}(e,a),e===i6&&(i8=i6=null,i5=0),0==(2064&n.subtreeFlags)&&0==(2064&n.flags)||sg||(sg=!0,sV(e4,function(){return s$(),null})),a=0!=(15990&n.flags),0!=(15990&n.subtreeFlags)||a){a=i3.transition,i3.transition=null;var i,s,l,c=tu;tu=1;var u=i9;i9|=4,i4.current=null,!function(e,t){if(rb=tR,n$(e=nz())){if("selectionStart"in e)var n={start:e.selectionStart,end:e.selectionEnd};else e:{var r=(n=(n=e.ownerDocument)&&n.defaultView||window).getSelection&&n.getSelection();if(r&&0!==r.rangeCount){n=r.anchorNode;var o,a=r.anchorOffset,i=r.focusNode;r=r.focusOffset;try{n.nodeType,i.nodeType}catch(e){n=null;break e}var s=0,l=-1,c=-1,u=0,p=0,f=e,g=null;t:for(;;){for(;f!==n||0!==a&&3!==f.nodeType||(l=s+a),f!==i||0!==r&&3!==f.nodeType||(c=s+r),3===f.nodeType&&(s+=f.nodeValue.length),null!==(o=f.firstChild);){;g=f,f=o}for(;;){if(f===e)break t;if(g===n&&++u===a&&(l=s),g===i&&++p===r&&(c=s),null!==(o=f.nextSibling))break;g=(f=g).parentNode}f=o}n=-1===l||-1===c?null:{start:l,end:c}}else n=null}n=n||{start:0,end:0}}else n=null;for(ry={focusedElem:e,selectionRange:n},tR=!1,iR=t;null!==iR;)if(e=(t=iR).child,0!=(1028&t.subtreeFlags)&&null!==e)e.return=t,iR=e;else for(;null!==iR;){t=iR;try{var m=t.alternate;if(0!=(1024&t.flags))switch(t.tag){case 0:case 11:case 15:case 5:case 6:case 4:case 17:break;case 1:if(null!==m){var h=m.memoizedProps,b=m.memoizedState,y=t.stateNode,v=y.getSnapshotBeforeUpdate(t.elementType===t.type?h:ox(t.type,h),b);y.__reactInternalSnapshotBeforeUpdate=v}break;case 3:var w=t.stateNode.containerInfo;1===w.nodeType?w.textContent="":9===w.nodeType&&w.documentElement&&w.removeChild(w.documentElement);break;default:throw Error(d(163))}}catch(e){sH(t,t.return,e)}if(null!==(e=t.sibling)){e.return=t.return,iR=e;break}iR=t.return}m=iM,iM=!1}(e,n),iY(n,e),!function(e){var t=nz(),n=e.focusedElem,r=e.selectionRange;if(t!==n&&n&&n.ownerDocument&&function e(t,n){return!!t&&!!n&&(t===n||(!t||3!==t.nodeType)&&(n&&3===n.nodeType?e(t,n.parentNode):"contains"in t?t.contains(n):!!t.compareDocumentPosition&&!!(16&t.compareDocumentPosition(n))))}(n.ownerDocument.documentElement,n)){if(null!==r&&n$(n)){if(t=r.start,void 0===(e=r.end)&&(e=t),"selectionStart"in n)n.selectionStart=t,n.selectionEnd=Math.min(e,n.value.length);else if((e=(t=n.ownerDocument||document)&&t.defaultView||window).getSelection){e=e.getSelection();var o=n.textContent.length,a=Math.min(r.start,o);r=void 0===r.end?a:Math.min(r.end,o),!e.extend&&a>r&&(o=r,r=a,a=o),o=nB(n,a);var i=nB(n,r);o&&i&&(1!==e.rangeCount||e.anchorNode!==o.node||e.anchorOffset!==o.offset||e.focusNode!==i.node||e.focusOffset!==i.offset)&&((t=t.createRange()).setStart(o.node,o.offset),e.removeAllRanges(),a>r?(e.addRange(t),e.extend(i.node,i.offset)):(t.setEnd(i.node,i.offset),e.addRange(t)))}}for(t=[],e=n;e=e.parentNode;)1===e.nodeType&&t.push({element:e,left:e.scrollLeft,top:e.scrollTop});for("function"==typeof n.focus&&n.focus(),n=0;n<t.length;n++)(e=t[n]).element.scrollLeft=e.left,e.element.scrollTop=e.top}}(ry),tR=!!rb,ry=rb=null,e.current=n,i=n,s=e,l=o,iR=i,function e(t,n,r){for(var o=0!=(1&t.mode);null!==iR;){var a=iR,i=a.child;if(22===a.tag&&o){var s=null!==a.memoizedState||iA;if(!s){var l=a.alternate,c=null!==l&&null!==l.memoizedState||iN;l=iA;var u=iN;if(iA=s,(iN=c)&&!u)for(iR=a;null!==iR;)c=(s=iR).child,22===s.tag&&null!==s.memoizedState?i0(a):null!==c?(c.return=s,iR=c):i0(a);for(;null!==i;)iR=i,e(i,n,r),i=i.sibling;iR=a,iA=l,iN=u}iX(t,n,r)}else 0!=(8772&a.subtreeFlags)&&null!==i?(i.return=a,iR=i):iX(t,n,r)}}(i,s,l),eX(),i9=u,tu=c,i3.transition=a}else e.current=n;if(sg&&(sg=!1,sm=e,sh=o),0===(a=e.pendingLanes)&&(sf=null),!function(e){if(e8&&"function"==typeof e8.onCommitFiberRoot)try{e8.onCommitFiberRoot(e6,e,void 0,128==(128&e.current.flags))}catch(e){}}(n.stateNode,r),s_(e,eJ()),null!==t)for(r=e.onRecoverableError,n=0;n<t.length;n++)r((o=t[n]).value,{componentStack:o.stack,digest:o.digest});if(sd)throw sd=!1,e=sp,sp=null,e;0!=(1&sh)&&0!==e.tag&&s$(),0!=(1&(a=e.pendingLanes))?e===sy?sb++:(sb=0,sy=e):sb=0,r9()}(e,t,n,r)}finally{i3.transition=o,tu=r}return null}function s$(){if(null!==sm){var e=td(sh),t=i3.transition,n=tu;try{if(i3.transition=null,tu=16>e?16:e,null===sm)var r=!1;else{if(e=sm,sm=null,sh=0,0!=(6&i9))throw Error(d(331));var o=i9;for(i9|=4,iR=e.current;null!==iR;){var a=iR,i=a.child;if(0!=(16&iR.flags)){var s=a.deletions;if(null!==s){for(var l=0;l<s.length;l++){var c=s[l];for(iR=c;null!==iR;){var u=iR;switch(u.tag){case 0:case 11:case 15:iB(8,u,a)}var p=u.child;if(null!==p)p.return=u,iR=p;else for(;null!==iR;){var f=(u=iR).sibling,g=u.return;if(!function e(t){var n=t.alternate;null!==n&&(t.alternate=null,e(n)),t.child=null,t.deletions=null,t.sibling=null,5===t.tag&&null!==(n=t.stateNode)&&(delete n[rC],delete n[rT],delete n[rA],delete n[rN],delete n[rL]),t.stateNode=null,t.return=null,t.dependencies=null,t.memoizedProps=null,t.memoizedState=null,t.pendingProps=null,t.stateNode=null,t.updateQueue=null}(u),u===c){iR=null;break}if(null!==f){f.return=g,iR=f;break}iR=g}}}var m=a.alternate;if(null!==m){var h=m.child;if(null!==h){m.child=null;do{var b=h.sibling;h.sibling=null,h=b}while(null!==h)}}iR=a}}if(0!=(2064&a.subtreeFlags)&&null!==i)i.return=a,iR=i;else for(;null!==iR;){if(a=iR,0!=(2048&a.flags))switch(a.tag){case 0:case 11:case 15:iB(9,a,a.return)}var y=a.sibling;if(null!==y){y.return=a.return,iR=y;break}iR=a.return}}var v=e.current;for(iR=v;null!==iR;){var w=(i=iR).child;if(0!=(2064&i.subtreeFlags)&&null!==w)w.return=i,iR=w;else for(i=v;null!==iR;){if(s=iR,0!=(2048&s.flags))try{switch(s.tag){case 0:case 11:case 15:iz(9,s)}}catch(e){sH(s,s.return,e)}if(s===i){iR=null;break}var k=s.sibling;if(null!==k){k.return=s.return,iR=k;break}iR=s.return}}if(i9=o,r9(),e8&&"function"==typeof e8.onPostCommitFiberRoot)try{e8.onPostCommitFiberRoot(e6,e)}catch(e){}r=!0}return r}finally{tu=n,i3.transition=t}}return!1}function sU(e,t,n){t=ie(e,t=a6(n,t),1),e=o$(e,t,1),t=sk(),null!==e&&(tl(e,1,t),s_(e,t))}function sH(e,t,n){if(3===e.tag)sU(e,e,n);else for(;null!==t;){if(3===t.tag){sU(t,e,n);break}if(1===t.tag){var r=t.stateNode;if("function"==typeof t.type.getDerivedStateFromError||"function"==typeof r.componentDidCatch&&(null===sf||!sf.has(r))){e=it(t,e=a6(n,e),1),t=o$(t,e,1),e=sk(),null!==t&&(tl(t,1,e),s_(t,e));break}}t=t.return}}function sq(e,t,n){var r=e.pingCache;null!==r&&r.delete(t),t=sk(),e.pingedLanes|=e.suspendedLanes&n,i6===e&&(i5&n)===n&&(4===st||3===st&&(0x7c00000&i5)===i5&&500>eJ()-sl?sN(e,0):sa|=n),s_(e,t)}function sQ(e,t){0===t&&(0==(1&e.mode)?t=1:(t=tn,0==(0x7c00000&(tn<<=1))&&(tn=4194304)));var n=sk();null!==(e=oD(e,t))&&(tl(e,t,n),s_(e,n))}function sZ(e){var t=e.memoizedState,n=0;null!==t&&(n=t.retryLane),sQ(e,n)}function sW(e,t){var n=0;switch(e.tag){case 13:var r=e.stateNode,o=e.memoizedState;null!==o&&(n=o.retryLane);break;case 19:r=e.stateNode;break;default:throw Error(d(314))}null!==r&&r.delete(t),sQ(e,n)}function sV(e,t){return eG(e,t)}function sG(e,t,n,r){this.tag=e,this.key=n,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=t,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=r,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function sY(e,t,n,r){return new sG(e,t,n,r)}function sK(e){return!(!(e=e.prototype)||!e.isReactComponent)}l=function(e,t,n){if(null!==e){if(e.memoizedProps!==t.pendingProps||rZ.current)is=!0;else{if(0==(e.lanes&n)&&0==(128&t.flags))return is=!1,function(e,t,n){switch(t.tag){case 3:iy(t),ow();break;case 5:an(t);break;case 1:rG(t.type)&&rJ(t);break;case 4:ae(t,t.stateNode.containerInfo);break;case 10:var r=t.type._context,o=t.memoizedProps.value;rH(o_,r._currentValue),r._currentValue=o;break;case 13:if(null!==(r=t.memoizedState)){if(null!==r.dehydrated)return rH(ao,1&ao.current),t.flags|=128,null;if(0!=(n&t.child.childLanes))return iS(e,t,n);return rH(ao,1&ao.current),null!==(e=iC(e,t,n))?e.sibling:null}rH(ao,1&ao.current);break;case 19:if(r=0!=(n&t.childLanes),0!=(128&e.flags)){if(r)return iP(e,t,n);t.flags|=128}if(null!==(o=t.memoizedState)&&(o.rendering=null,o.tail=null,o.lastEffect=null),rH(ao,ao.current),!r)return null;break;case 22:case 23:return t.lanes=0,ip(e,t,n)}return iC(e,t,n)}(e,t,n);is=0!=(131072&e.flags)}}else is=!1,od&&0!=(1048576&t.flags)&&oi(t,r7,t.index);switch(t.lanes=0,t.tag){case 2:var r=t.type;ij(e,t),e=t.pendingProps;var o=rV(t,rQ.current);oI(t,n),o=aw(null,t,r,e,o,n);var a=ak();return t.flags|=1,"object"==typeof o&&null!==o&&"function"==typeof o.render&&void 0===o.$$typeof?(t.tag=1,t.memoizedState=null,t.updateQueue=null,rG(r)?(a=!0,rJ(t)):a=!1,t.memoizedState=null!==o.state&&void 0!==o.state?o.state:null,oM(t),o.updater=oV,t.stateNode=o,o._reactInternals=t,oX(t,r,e,n),t=ib(null,t,r,!0,a,n)):(t.tag=0,od&&a&&os(t),il(null,t,o,n),t=t.child),t;case 16:r=t.elementType;e:{switch(ij(e,t),e=t.pendingProps,r=(o=r._init)(r._payload),t.type=r,o=t.tag=function(e){if("function"==typeof e)return sK(e)?1:0;if(null!=e){if((e=e.$$typeof)===L)return 11;if(e===F)return 14}return 2}(r),e=ox(r,e),o){case 0:t=im(null,t,r,e,n);break e;case 1:t=ih(null,t,r,e,n);break e;case 11:t=ic(null,t,r,e,n);break e;case 14:t=iu(null,t,r,ox(r.type,e),n);break e}throw Error(d(306,r,""))}return t;case 0:return r=t.type,o=t.pendingProps,o=t.elementType===r?o:ox(r,o),im(e,t,r,o,n);case 1:return r=t.type,o=t.pendingProps,o=t.elementType===r?o:ox(r,o),ih(e,t,r,o,n);case 3:e:{if(iy(t),null===e)throw Error(d(387));r=t.pendingProps,o=(a=t.memoizedState).element,oB(e,t),oq(t,r,null,n);var i=t.memoizedState;if(r=i.element,a.isDehydrated){if(a={element:r,isDehydrated:!1,cache:i.cache,pendingSuspenseBoundaries:i.pendingSuspenseBoundaries,transitions:i.transitions},t.updateQueue.baseState=a,t.memoizedState=a,256&t.flags){o=a6(Error(d(423)),t),t=iv(e,t,r,n,o);break e}else if(r!==o){o=a6(Error(d(424)),t),t=iv(e,t,r,n,o);break e}else for(ou=rO(t.stateNode.containerInfo.firstChild),oc=t,od=!0,op=null,n=o3(t,null,r,n),t.child=n;n;)n.flags=-3&n.flags|4096,n=n.sibling}else{if(ow(),r===o){t=iC(e,t,n);break e}il(e,t,r,n)}t=t.child}return t;case 5:return an(t),null===e&&oh(t),r=t.type,o=t.pendingProps,a=null!==e?e.memoizedProps:null,i=o.children,rv(r,o)?i=null:null!==a&&rv(r,a)&&(t.flags|=32),ig(e,t),il(e,t,i,n),t.child;case 6:return null===e&&oh(t),null;case 13:return iS(e,t,n);case 4:return ae(t,t.stateNode.containerInfo),r=t.pendingProps,null===e?t.child=o4(t,null,r,n):il(e,t,r,n),t.child;case 11:return r=t.type,o=t.pendingProps,o=t.elementType===r?o:ox(r,o),ic(e,t,r,o,n);case 7:return il(e,t,t.pendingProps,n),t.child;case 8:case 12:return il(e,t,t.pendingProps.children,n),t.child;case 10:e:{if(r=t.type._context,o=t.pendingProps,a=t.memoizedProps,i=o.value,rH(o_,r._currentValue),r._currentValue=i,null!==a){if(nD(a.value,i)){if(a.children===o.children&&!rZ.current){t=iC(e,t,n);break e}}else for(null!==(a=t.child)&&(a.return=t);null!==a;){var s=a.dependencies;if(null!==s){i=a.child;for(var l=s.firstContext;null!==l;){if(l.context===r){if(1===a.tag){(l=oz(-1,n&-n)).tag=2;var c=a.updateQueue;if(null!==c){var u=(c=c.shared).pending;null===u?l.next=l:(l.next=u.next,u.next=l),c.pending=l}}a.lanes|=n,null!==(l=a.alternate)&&(l.lanes|=n),oT(a.return,n,t),s.lanes|=n;break}l=l.next}}else if(10===a.tag)i=a.type===t.type?null:a.child;else if(18===a.tag){if(null===(i=a.return))throw Error(d(341));i.lanes|=n,null!==(s=i.alternate)&&(s.lanes|=n),oT(i,n,t),i=a.sibling}else i=a.child;if(null!==i)i.return=a;else for(i=a;null!==i;){if(i===t){i=null;break}if(null!==(a=i.sibling)){a.return=i.return,i=a;break}i=i.return}a=i}}il(e,t,o.children,n),t=t.child}return t;case 9:return o=t.type,r=t.pendingProps.children,oI(t,n),r=r(o=oA(o)),t.flags|=1,il(e,t,r,n),t.child;case 14:return o=ox(r=t.type,t.pendingProps),o=ox(r.type,o),iu(e,t,r,o,n);case 15:return id(e,t,t.type,t.pendingProps,n);case 17:return r=t.type,o=t.pendingProps,o=t.elementType===r?o:ox(r,o),ij(e,t),t.tag=1,rG(r)?(e=!0,rJ(t)):e=!1,oI(t,n),oY(t,r,o),oX(t,r,o,n),ib(null,t,r,!0,e,n);case 19:return iP(e,t,n);case 22:return ip(e,t,n)}throw Error(d(156,t.tag))};function sX(e,t){var n=e.alternate;return null===n?((n=sY(e.tag,t,e.key,e.mode)).elementType=e.elementType,n.type=e.type,n.stateNode=e.stateNode,n.alternate=e,e.alternate=n):(n.pendingProps=t,n.type=e.type,n.flags=0,n.subtreeFlags=0,n.deletions=null),n.flags=0xe00000&e.flags,n.childLanes=e.childLanes,n.lanes=e.lanes,n.child=e.child,n.memoizedProps=e.memoizedProps,n.memoizedState=e.memoizedState,n.updateQueue=e.updateQueue,t=e.dependencies,n.dependencies=null===t?null:{lanes:t.lanes,firstContext:t.firstContext},n.sibling=e.sibling,n.index=e.index,n.ref=e.ref,n}function sJ(e,t,n,r,o,a){var i=2;if(r=e,"function"==typeof e)sK(e)&&(i=1);else if("string"==typeof e)i=5;else e:switch(e){case C:return s0(n.children,o,a,t);case T:i=8,o|=8;break;case I:return(e=sY(12,n,t,2|o)).elementType=I,e.lanes=a,e;case R:return(e=sY(13,n,t,o)).elementType=R,e.lanes=a,e;case D:return(e=sY(19,n,t,o)).elementType=D,e.lanes=a,e;case B:return s1(n,o,a,t);default:if("object"==typeof e&&null!==e)switch(e.$$typeof){case A:i=10;break e;case N:i=9;break e;case L:i=11;break e;case F:i=14;break e;case M:i=16,r=null;break e}throw Error(d(130,null==e?e:typeof e,""))}return(t=sY(i,n,t,o)).elementType=e,t.type=r,t.lanes=a,t}function s0(e,t,n,r){return(e=sY(7,e,r,t)).lanes=n,e}function s1(e,t,n,r){return(e=sY(22,e,r,t)).elementType=B,e.lanes=n,e.stateNode={isHidden:!1},e}function s2(e,t,n){return(e=sY(6,e,null,t)).lanes=n,e}function s4(e,t,n){return(t=sY(4,null!==e.children?e.children:[],e.key,t)).lanes=n,t.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},t}function s3(e,t,n,r,o){this.tag=t,this.containerInfo=e,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.callbackNode=this.pendingContext=this.context=null,this.callbackPriority=0,this.eventTimes=ts(0),this.expirationTimes=ts(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=ts(0),this.identifierPrefix=r,this.onRecoverableError=o,this.mutableSourceEagerHydrationData=null}function s9(e,t,n,r,o,a,i,s,l){return e=new s3(e,t,n,s,l),1===t?(t=1,!0===a&&(t|=8)):t=0,a=sY(3,null,null,t),e.current=a,a.stateNode=e,a.memoizedState={element:r,isDehydrated:n,cache:null,transitions:null,pendingSuspenseBoundaries:null},oM(a),e}function s6(e){if(!e)return rq;e=e._reactInternals;e:{if(eQ(e)!==e||1!==e.tag)throw Error(d(170));var t=e;do{switch(t.tag){case 3:t=t.stateNode.context;break e;case 1:if(rG(t.type)){t=t.stateNode.__reactInternalMemoizedMergedChildContext;break e}}t=t.return}while(null!==t);throw Error(d(171))}if(1===e.tag){var n=e.type;if(rG(n))return rX(e,n,t)}return t}function s8(e,t,n,r,o,a,i,s,l){return(e=s9(n,r,!0,e,o,a,i,s,l)).context=s6(null),n=e.current,r=sk(),(a=oz(r,o=sS(n))).callback=null!=t?t:null,o$(n,a,o),e.current.lanes=o,tl(e,o,r),s_(e,r),e}function s5(e,t,n,r){var o=t.current,a=sk(),i=sS(o);return n=s6(n),null===t.context?t.context=n:t.pendingContext=n,(t=oz(a,i)).payload={element:e},null!==(r=void 0===r?null:r)&&(t.callback=r),null!==(e=o$(o,t,i))&&(sx(e,o,i,a),oU(e,o,i)),i}function s7(e){return(e=e.current).child?(e.child.tag,e.child.stateNode):null}function le(e,t){if(null!==(e=e.memoizedState)&&null!==e.dehydrated){var n=e.retryLane;e.retryLane=0!==n&&n<t?n:t}}function lt(e,t){le(e,t),(e=e.alternate)&&le(e,t)}var ln="function"==typeof reportError?reportError:function(e){console.error(e)};function lr(e){this._internalRoot=e}function lo(e){this._internalRoot=e}function la(e){return!(!e||1!==e.nodeType&&9!==e.nodeType&&11!==e.nodeType)}function li(e){return!(!e||1!==e.nodeType&&9!==e.nodeType&&11!==e.nodeType&&(8!==e.nodeType||" react-mount-point-unstable "!==e.nodeValue))}function ls(){}lo.prototype.render=lr.prototype.render=function(e){var t=this._internalRoot;if(null===t)throw Error(d(409));s5(e,t,null,null)},lo.prototype.unmount=lr.prototype.unmount=function(){var e=this._internalRoot;if(null!==e){this._internalRoot=null;var t=e.containerInfo;sI(function(){s5(null,e,null,null)}),t[rI]=null}},lo.prototype.unstable_scheduleHydration=function(e){if(e){var t=tm();e={blockedOn:null,target:e,priority:t};for(var n=0;n<t_.length&&0!==t&&t<t_[n].priority;n++);t_.splice(n,0,e),0===n&&tj(e)}};function ll(e,t,n,r,o){var a=n._reactRootContainer;if(a){var i=a;if("function"==typeof o){var s=o;o=function(){var e=s7(i);s.call(e)}}s5(t,i,e,o)}else i=function(e,t,n,r,o){if(o){if("function"==typeof r){var a=r;r=function(){var e=s7(i);a.call(e)}}var i=s8(t,r,e,0,null,!1,!1,"",ls);return e._reactRootContainer=i,e[rI]=i.current,ra(8===e.nodeType?e.parentNode:e),sI(),i}for(;o=e.lastChild;)e.removeChild(o);if("function"==typeof r){var s=r;r=function(){var e=s7(l);s.call(e)}}var l=s9(e,0,!1,null,null,!1,!1,"",ls);return e._reactRootContainer=l,e[rI]=l.current,ra(8===e.nodeType?e.parentNode:e),sI(function(){s5(t,l,n,r)}),l}(n,t,e,o,r);return s7(i)}tp=function(e){switch(e.tag){case 3:var t=e.stateNode;if(t.current.memoizedState.isDehydrated){var n=tr(t.pendingLanes);0!==n&&(tc(t,1|n),s_(t,eJ()),0==(6&i9)&&(sc=eJ()+500,r9()))}break;case 13:sI(function(){var t=oD(e,1);null!==t&&sx(t,e,1,sk())}),lt(e,1)}},tf=function(e){if(13===e.tag){var t=oD(e,0x8000000);null!==t&&sx(t,e,0x8000000,sk()),lt(e,0x8000000)}},tg=function(e){if(13===e.tag){var t=sS(e),n=oD(e,t);null!==n&&sx(n,e,t,sk()),lt(e,t)}},tm=function(){return tu},th=function(e,t){var n=tu;try{return tu=e,t()}finally{tu=n}},eE=function(e,t,n){switch(t){case"input":if(et(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 o=rM(r);if(!o)throw Error(d(90));Y(r),et(r,o)}}}break;case"textarea":el(e,n);break;case"select":null!=(t=n.value)&&ea(e,!!n.multiple,t,!1)}},eI=sT,eA=sI;var lc={findFiberByHostInstance:rR,bundleType:0,version:"18.2.0",rendererPackageName:"react-dom"},lu={bundleType:lc.bundleType,version:lc.version,rendererPackageName:lc.rendererPackageName,rendererConfig:lc.rendererConfig,overrideHookState:null,overrideHookStateDeletePath:null,overrideHookStateRenamePath:null,overrideProps:null,overridePropsDeletePath:null,overridePropsRenamePath:null,setErrorHandler:null,setSuspenseHandler:null,scheduleUpdate:null,currentDispatcherRef:O.ReactCurrentDispatcher,findHostInstanceByFiber:function(e){return null===(e=eV(e))?null:e.stateNode},findFiberByHostInstance:lc.findFiberByHostInstance||function(){return null},findHostInstancesForRefresh:null,scheduleRefresh:null,scheduleRoot:null,setRefreshHandler:null,getCurrentFiber:null,reconcilerVersion:"18.2.0-next-9e3b772b8-20220608"};if("undefined"!=typeof __REACT_DEVTOOLS_GLOBAL_HOOK__){var ld=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(!ld.isDisabled&&ld.supportsFiber)try{e6=ld.inject(lu),e8=ld}catch(e){}}t.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED={usingClientEntryPoint:!1,Events:[rD,rF,rM,eC,eT,sT]},t.createPortal=function(e,t){var n=2<arguments.length&&void 0!==arguments[2]?arguments[2]:null;if(!la(t))throw Error(d(200));return function(e,t,n){var r=3<arguments.length&&void 0!==arguments[3]?arguments[3]:null;return{$$typeof:j,key:null==r?null:""+r,children:e,containerInfo:t,implementation:n}}(e,t,null,n)},t.createRoot=function(e,t){if(!la(e))throw Error(d(299));var n=!1,r="",o=ln;return null!=t&&(!0===t.unstable_strictMode&&(n=!0),void 0!==t.identifierPrefix&&(r=t.identifierPrefix),void 0!==t.onRecoverableError&&(o=t.onRecoverableError)),t=s9(e,1,!1,null,null,n,!1,r,o),e[rI]=t.current,ra(8===e.nodeType?e.parentNode:e),new lr(t)},t.findDOMNode=function(e){if(null==e)return null;if(1===e.nodeType)return e;var t=e._reactInternals;if(void 0===t){if("function"==typeof e.render)throw Error(d(188));throw Error(d(268,e=Object.keys(e).join(",")))}return e=null===(e=eV(t))?null:e.stateNode},t.flushSync=function(e){return sI(e)},t.hydrate=function(e,t,n){if(!li(t))throw Error(d(200));return ll(null,e,t,!0,n)},t.hydrateRoot=function(e,t,n){if(!la(e))throw Error(d(405));var r=null!=n&&n.hydratedSources||null,o=!1,a="",i=ln;if(null!=n&&(!0===n.unstable_strictMode&&(o=!0),void 0!==n.identifierPrefix&&(a=n.identifierPrefix),void 0!==n.onRecoverableError&&(i=n.onRecoverableError)),t=s8(t,null,e,1,null!=n?n:null,o,!1,a,i),e[rI]=t.current,ra(e),r)for(e=0;e<r.length;e++)o=(o=(n=r[e])._getVersion)(n._source),null==t.mutableSourceEagerHydrationData?t.mutableSourceEagerHydrationData=[n,o]:t.mutableSourceEagerHydrationData.push(n,o);return new lo(t)},t.render=function(e,t,n){if(!li(t))throw Error(d(200));return ll(null,e,t,!1,n)},t.unmountComponentAtNode=function(e){if(!li(e))throw Error(d(40));return!!e._reactRootContainer&&(sI(function(){ll(null,null,e,!1,function(){e._reactRootContainer=null,e[rI]=null})}),!0)},t.unstable_batchedUpdates=sT,t.unstable_renderSubtreeIntoContainer=function(e,t,n,r){if(!li(n))throw Error(d(200));if(null==e||void 0===e._reactInternals)throw Error(d(38));return ll(e,t,n,!1,r)},t.version="18.2.0-next-9e3b772b8-20220608"},20745:function(e,t,n){"use strict";var r=n(73935);t.createRoot=r.createRoot,t.hydrateRoot=r.hydrateRoot},73935:function(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(e){console.error(e)}}(),e.exports=n(64448)},69590:function(e){var t="undefined"!=typeof Element,n="function"==typeof Map,r="function"==typeof Set,o="function"==typeof ArrayBuffer&&!!ArrayBuffer.isView;e.exports=function(e,a){try{return function e(a,i){if(a===i)return!0;if(a&&i&&"object"==typeof a&&"object"==typeof i){var s,l,c,u;if(a.constructor!==i.constructor)return!1;if(Array.isArray(a)){if((s=a.length)!=i.length)return!1;for(l=s;0!=l--;)if(!e(a[l],i[l]))return!1;return!0}if(n&&a instanceof Map&&i instanceof Map){if(a.size!==i.size)return!1;for(u=a.entries();!(l=u.next()).done;)if(!i.has(l.value[0]))return!1;for(u=a.entries();!(l=u.next()).done;)if(!e(l.value[1],i.get(l.value[0])))return!1;return!0}if(r&&a instanceof Set&&i instanceof Set){if(a.size!==i.size)return!1;for(u=a.entries();!(l=u.next()).done;)if(!i.has(l.value[0]))return!1;return!0}if(o&&ArrayBuffer.isView(a)&&ArrayBuffer.isView(i)){if((s=a.length)!=i.length)return!1;for(l=s;0!=l--;)if(a[l]!==i[l])return!1;return!0}if(a.constructor===RegExp)return a.source===i.source&&a.flags===i.flags;if(a.valueOf!==Object.prototype.valueOf&&"function"==typeof a.valueOf&&"function"==typeof i.valueOf)return a.valueOf()===i.valueOf();if(a.toString!==Object.prototype.toString&&"function"==typeof a.toString&&"function"==typeof i.toString)return a.toString()===i.toString();if((s=(c=Object.keys(a)).length)!==Object.keys(i).length)return!1;for(l=s;0!=l--;)if(!Object.prototype.hasOwnProperty.call(i,c[l]))return!1;if(t&&a instanceof Element)return!1;for(l=s;0!=l--;){if("_owner"!==c[l]&&"__v"!==c[l]&&"__o"!==c[l]||!a.$$typeof){if(!e(a[c[l]],i[c[l]]))return!1}}return!0}return a!=a&&i!=i}(e,a)}catch(e){if((e.message||"").match(/stack|recursion/i))return console.warn("react-fast-compare cannot handle circular refs"),!1;throw e}}},70405:function(e,t,n){"use strict";n.d(t,{B6:function(){return H},ql:function(){return K}});var r=n(67294),o=n(45697),a=n.n(o),i=n(69590),s=n.n(i),l=n(41143),c=n.n(l),u=n(96774),d=n.n(u);function p(){return(p=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e}).apply(this,arguments)}function f(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,g(e,t)}function g(e,t){return(g=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}function m(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)t.indexOf(n=a[r])>=0||(o[n]=e[n]);return o}var h={BASE:"base",BODY:"body",HEAD:"head",HTML:"html",LINK:"link",META:"meta",NOSCRIPT:"noscript",SCRIPT:"script",STYLE:"style",TITLE:"title",FRAGMENT:"Symbol(react.fragment)"},b={rel:["amphtml","canonical","alternate"]},y={type:["application/ld+json"]},v={charset:"",name:["robots","description"],property:["og:type","og:title","og:url","og:image","og:image:alt","og:description","twitter:url","twitter:title","twitter:description","twitter:image","twitter:image:alt","twitter:card","twitter:site"]},w=Object.keys(h).map(function(e){return h[e]}),k={accesskey:"accessKey",charset:"charSet",class:"className",contenteditable:"contentEditable",contextmenu:"contextMenu","http-equiv":"httpEquiv",itemprop:"itemProp",tabindex:"tabIndex"},S=Object.keys(k).reduce(function(e,t){return e[k[t]]=t,e},{}),x=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},_=function(e){var t=x(e,h.TITLE),n=x(e,"titleTemplate");if(Array.isArray(t)&&(t=t.join("")),n&&t)return n.replace(/%s/g,function(){return t});var r=x(e,"defaultTitle");return t||r||void 0},E=function(e,t){return t.filter(function(t){return void 0!==t[e]}).map(function(t){return t[e]}).reduce(function(e,t){return p({},e,t)},{})},O=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 o={};n.filter(function(e){for(var n,a=Object.keys(e),i=0;i<a.length;i+=1){var s=a[i],l=s.toLowerCase();-1===t.indexOf(l)||"rel"===n&&"canonical"===e[n].toLowerCase()||"rel"===l&&"stylesheet"===e[l].toLowerCase()||(n=l),-1===t.indexOf(s)||"innerHTML"!==s&&"cssText"!==s&&"itemprop"!==s||(n=s)}if(!n||!e[n])return!1;var c=e[n].toLowerCase();return r[n]||(r[n]={}),o[n]||(o[n]={}),!r[n][c]&&(o[n][c]=!0,!0)}).reverse().forEach(function(t){return e.push(t)});for(var a=Object.keys(o),i=0;i<a.length;i+=1){var s=a[i],l=p({},r[s],o[s]);r[s]=l}return e},[]).reverse()},P=function(e,t){if(Array.isArray(e)&&e.length){for(var n=0;n<e.length;n+=1)if(e[n][t])return!0}return!1},j=function(e){return Array.isArray(e)?e.join(""):e},C=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.default.push(n):e.priority.push(n),e},{priority:[],default:[]}):{default:e}},T=function(e,t){var n;return p({},e,((n={})[t]=void 0,n))},I=[h.NOSCRIPT,h.SCRIPT,h.STYLE],A=function(e,t){return void 0===t&&(t=!0),!1===t?String(e):String(e).replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")},N=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},"")},L=function(e,t){return void 0===t&&(t={}),Object.keys(e).reduce(function(t,n){return t[k[n]||n]=e[n],t},t)},R=function(e,t){return t.map(function(t,n){var o,a=((o={key:n})["data-rh"]=!0,o);return Object.keys(t).forEach(function(e){var n=k[e]||e;"innerHTML"===n||"cssText"===n?a.dangerouslySetInnerHTML={__html:t.innerHTML||t.cssText}:a[n]=t[e]}),r.createElement(e,a)})},D=function(e,t,n){switch(e){case h.TITLE:return{toComponent:function(){var e,n,o,a;return n=t.titleAttributes,(o={key:e=t.title})["data-rh"]=!0,a=L(n,o),[r.createElement(h.TITLE,a,e)]},toString:function(){var r,o,a,i,s,l;return r=e,o=t.title,a=t.titleAttributes,i=n,s=N(a),l=j(o),s?"<"+r+' data-rh="true" '+s+">"+A(l,i)+"</"+r+">":"<"+r+' data-rh="true">'+A(l,i)+"</"+r+">"}};case"bodyAttributes":case"htmlAttributes":return{toComponent:function(){return L(t)},toString:function(){return N(t)}};default:return{toComponent:function(){return R(e,t)},toString:function(){var r,o,a;return r=e,o=t,a=n,o.reduce(function(e,t){var n=Object.keys(t).filter(function(e){return!("innerHTML"===e||"cssText"===e)}).reduce(function(e,n){var r=void 0===t[n]?n:n+'="'+A(t[n],a)+'"';return e?e+" "+r:r},""),o=t.innerHTML||t.cssText||"",i=-1===I.indexOf(r);return e+"<"+r+' data-rh="true" '+n+(i?"/>":">"+o+"</"+r+">")},"")}}}},F=function(e){var t=e.baseTag,n=e.bodyAttributes,r=e.encode,o=e.htmlAttributes,a=e.noscriptTags,i=e.styleTags,s=e.title,l=e.titleAttributes,c=e.linkTags,u=e.metaTags,d=e.scriptTags,p={toComponent:function(){},toString:function(){return""}};if(e.prioritizeSeoTags){var f,g,m,w,k,S,x,_=(g=(f=e).linkTags,m=f.scriptTags,w=f.encode,k=C(f.metaTags,v),S=C(g,b),x=C(m,y),{priorityMethods:{toComponent:function(){return[].concat(R(h.META,k.priority),R(h.LINK,S.priority),R(h.SCRIPT,x.priority))},toString:function(){return D(h.META,k.priority,w)+" "+D(h.LINK,S.priority,w)+" "+D(h.SCRIPT,x.priority,w)}},metaTags:k.default,linkTags:S.default,scriptTags:x.default});p=_.priorityMethods,c=_.linkTags,u=_.metaTags,d=_.scriptTags}return{priority:p,base:D(h.BASE,t,r),bodyAttributes:D("bodyAttributes",n,r),htmlAttributes:D("htmlAttributes",o,r),link:D(h.LINK,c,r),meta:D(h.META,u,r),noscript:D(h.NOSCRIPT,a,r),script:D(h.SCRIPT,d,r),style:D(h.STYLE,i,r),title:D(h.TITLE,{title:void 0===s?"":s,titleAttributes:l},r)}},M=[],B=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?M:n.instances},add:function(e){(n.canUseDOM?M:n.instances).push(e)},remove:function(e){var t=(n.canUseDOM?M:n.instances).indexOf(e);(n.canUseDOM?M:n.instances).splice(t,1)}}},this.context=e,this.canUseDOM=t,t||(e.helmet=F({baseTag:[],bodyAttributes:{},encodeSpecialCharacters:!0,htmlAttributes:{},linkTags:[],metaTags:[],noscriptTags:[],scriptTags:[],styleTags:[],title:"",titleAttributes:{}}))},z=r.createContext({}),$=a().shape({setHelmet:a().func,helmetInstances:a().shape({get:a().func,add:a().func,remove:a().func})}),U="undefined"!=typeof document,H=function(e){function t(n){var r;return(r=e.call(this,n)||this).helmetData=new B(r.props.context,t.canUseDOM),r}return f(t,e),t.prototype.render=function(){return r.createElement(z.Provider,{value:this.helmetData.value},this.props.children)},t}(r.Component);H.canUseDOM=U,H.propTypes={context:a().shape({helmet:a().shape()}),children:a().node.isRequired},H.defaultProps={context:{}},H.displayName="HelmetProvider";var q=function(e,t){var n,r=document.head||document.querySelector(h.HEAD),o=r.querySelectorAll(e+"[data-rh]"),a=[].slice.call(o),i=[];return t&&t.length&&t.forEach(function(t){var r=document.createElement(e);for(var o in t)Object.prototype.hasOwnProperty.call(t,o)&&("innerHTML"===o?r.innerHTML=t.innerHTML:"cssText"===o?r.styleSheet?r.styleSheet.cssText=t.cssText:r.appendChild(document.createTextNode(t.cssText)):r.setAttribute(o,void 0===t[o]?"":t[o]));r.setAttribute("data-rh","true"),a.some(function(e,t){return n=t,r.isEqualNode(e)})?a.splice(n,1):i.push(r)}),a.forEach(function(e){return e.parentNode.removeChild(e)}),i.forEach(function(e){return r.appendChild(e)}),{oldTags:a,newTags:i}},Q=function(e,t){var n=document.getElementsByTagName(e)[0];if(n){for(var r=n.getAttribute("data-rh"),o=r?r.split(","):[],a=[].concat(o),i=Object.keys(t),s=0;s<i.length;s+=1){var l=i[s],c=t[l]||"";n.getAttribute(l)!==c&&n.setAttribute(l,c),-1===o.indexOf(l)&&o.push(l);var u=a.indexOf(l);-1!==u&&a.splice(u,1)}for(var d=a.length-1;d>=0;d-=1)n.removeAttribute(a[d]);o.length===a.length?n.removeAttribute("data-rh"):n.getAttribute("data-rh")!==i.join(",")&&n.setAttribute("data-rh",i.join(","))}},Z=function(e,t){var n,r,o=e.baseTag,a=e.htmlAttributes,i=e.linkTags,s=e.metaTags,l=e.noscriptTags,c=e.onChangeClientState,u=e.scriptTags,d=e.styleTags,p=e.title,f=e.titleAttributes;Q(h.BODY,e.bodyAttributes),Q(h.HTML,a),n=p,r=f,void 0!==n&&document.title!==n&&(document.title=j(n)),Q(h.TITLE,r);var g={baseTag:q(h.BASE,o),linkTags:q(h.LINK,i),metaTags:q(h.META,s),noscriptTags:q(h.NOSCRIPT,l),scriptTags:q(h.SCRIPT,u),styleTags:q(h.STYLE,d)},m={},b={};Object.keys(g).forEach(function(e){var t=g[e],n=t.newTags,r=t.oldTags;n.length&&(m[e]=n),r.length&&(b[e]=g[e].oldTags)}),t&&t(),c(e,m,b)},W=null,V=function(e){function t(){for(var t,n=arguments.length,r=Array(n),o=0;o<n;o++)r[o]=arguments[o];return(t=e.call.apply(e,[this].concat(r))||this).rendered=!1,t}f(t,e);var n=t.prototype;return n.shouldComponentUpdate=function(e){return!d()(e,this.props)},n.componentDidUpdate=function(){this.emitChange()},n.componentWillUnmount=function(){this.props.context.helmetInstances.remove(this),this.emitChange()},n.emitChange=function(){var e,t,n=this.props.context,r=n.setHelmet,o=null,a={baseTag:(e=["href"],(t=n.helmetInstances.get().map(function(e){var t=p({},e.props);return delete t.context,t})).filter(function(e){return void 0!==e[h.BASE]}).map(function(e){return e[h.BASE]}).reverse().reduce(function(t,n){if(!t.length)for(var r=Object.keys(n),o=0;o<r.length;o+=1){var a=r[o].toLowerCase();if(-1!==e.indexOf(a)&&n[a])return t.concat(n)}return t},[])),bodyAttributes:E("bodyAttributes",t),defer:x(t,"defer"),encode:x(t,"encodeSpecialCharacters"),htmlAttributes:E("htmlAttributes",t),linkTags:O(h.LINK,["rel","href"],t),metaTags:O(h.META,["name","charset","http-equiv","property","itemprop"],t),noscriptTags:O(h.NOSCRIPT,["innerHTML"],t),onChangeClientState:x(t,"onChangeClientState")||function(){},scriptTags:O(h.SCRIPT,["src","innerHTML"],t),styleTags:O(h.STYLE,["cssText"],t),title:_(t),titleAttributes:E("titleAttributes",t),prioritizeSeoTags:P(t,"prioritizeSeoTags")};H.canUseDOM?(W&&cancelAnimationFrame(W),a.defer?W=requestAnimationFrame(function(){Z(a,function(){W=null})}):(Z(a),W=null)):F&&(o=F(a)),r(o)},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);V.propTypes={context:$.isRequired},V.displayName="HelmetDispatcher";var G=["children"],Y=["children"],K=function(e){function t(){return e.apply(this,arguments)||this}f(t,e);var n=t.prototype;return n.shouldComponentUpdate=function(e){return!s()(T(this.props,"helmetData"),T(e,"helmetData"))},n.mapNestedChildrenToProps=function(e,t){if(!t)return null;switch(e.type){case h.SCRIPT:case h.NOSCRIPT:return{innerHTML:t};case h.STYLE:return{cssText:t};default:throw Error("<"+e.type+" /> elements are self-closing and can not contain children. Refer to our API for more information.")}},n.flattenArrayTypeChildren=function(e){var t,n=e.child,r=e.arrayTypeChildren;return p({},r,((t={})[n.type]=[].concat(r[n.type]||[],[p({},e.newChildProps,this.mapNestedChildrenToProps(n,e.nestedChildren))]),t))},n.mapObjectTypeChildren=function(e){var t,n,r=e.child,o=e.newProps,a=e.newChildProps,i=e.nestedChildren;switch(r.type){case h.TITLE:return p({},o,((t={})[r.type]=i,t.titleAttributes=p({},a),t));case h.BODY:return p({},o,{bodyAttributes:p({},a)});case h.HTML:return p({},o,{htmlAttributes:p({},a)});default:return p({},o,((n={})[r.type]=p({},a),n))}},n.mapArrayTypeChildrenToProps=function(e,t){var n=p({},t);return Object.keys(e).forEach(function(t){var r;n=p({},n,((r={})[t]=e[t],r))}),n},n.warnOnInvalidChildren=function(e,t){return c()(w.some(function(t){return e.type===t}),"function"==typeof e.type?"You may be attempting to nest <Helmet> components within each other, which is not allowed. Refer to our API for more information.":"Only elements types "+w.join(", ")+" are allowed. Helmet does not support rendering <"+e.type+"> elements. Refer to our API for more information."),c()(!t||"string"==typeof t||Array.isArray(t)&&!t.some(function(e){return"string"!=typeof e}),"Helmet expects a string as a child of <"+e.type+">. Did you forget to wrap your children in braces? ( <"+e.type+">{``}</"+e.type+"> ) Refer to our API for more information."),!0},n.mapChildrenToProps=function(e,t){var n=this,o={};return r.Children.forEach(e,function(e){if(e&&e.props){var r=e.props,a=r.children,i=m(r,G),s=Object.keys(i).reduce(function(e,t){return e[S[t]||t]=i[t],e},{}),l=e.type;switch("symbol"==typeof l?l=l.toString():n.warnOnInvalidChildren(e,a),l){case h.FRAGMENT:t=n.mapChildrenToProps(a,t);break;case h.LINK:case h.META:case h.NOSCRIPT:case h.SCRIPT:case h.STYLE:o=n.flattenArrayTypeChildren({child:e,arrayTypeChildren:o,newChildProps:s,nestedChildren:a});break;default:t=n.mapObjectTypeChildren({child:e,newProps:t,newChildProps:s,nestedChildren:a})}}}),this.mapArrayTypeChildrenToProps(o,t)},n.render=function(){var e=this.props,t=e.children,n=m(e,Y),o=p({},n),a=n.helmetData;return t&&(o=this.mapChildrenToProps(t,o)),!a||a instanceof B||(a=new B(a.context,a.instances)),a?r.createElement(V,p({},o,{context:a.value,helmetData:void 0})):r.createElement(z.Consumer,null,function(e){return r.createElement(V,p({},o,{context:e}))})},t}(r.Component);K.propTypes={base:a().object,bodyAttributes:a().object,children:a().oneOfType([a().arrayOf(a().node),a().node]),defaultTitle:a().string,defer:a().bool,encodeSpecialCharacters:a().bool,htmlAttributes:a().object,link:a().arrayOf(a().object),meta:a().arrayOf(a().object),noscript:a().arrayOf(a().object),onChangeClientState:a().func,script:a().arrayOf(a().object),style:a().arrayOf(a().object),title:a().string,titleAttributes:a().object,titleTemplate:a().string,prioritizeSeoTags:a().bool,helmetData:a().object},K.defaultProps={defer:!0,encodeSpecialCharacters:!0,prioritizeSeoTags:!1},K.displayName="Helmet"},68356:function(e,t,n){"use strict";function r(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,e.__proto__=t}function o(e){if(void 0===e)throw ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function 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}).apply(this,arguments)}var s=n(67294),l=[],c=[],u=s.createContext(null);function d(e){var t=e(),n={loading:!0,loaded:null,error:null};return n.promise=t.then(function(e){return n.loading=!1,n.loaded=e,e}).catch(function(e){throw n.loading=!1,n.error=e,e}),n}function p(e){var t={loading:!1,loaded:{},error:null},n=[];try{Object.keys(e).forEach(function(r){var o=d(e[r]);o.loading?t.loading=!0:(t.loaded[r]=o.loaded,t.error=o.error),n.push(o.promise),o.promise.then(function(e){t.loaded[r]=e}).catch(function(e){t.error=e})})}catch(e){t.error=e}return t.promise=Promise.all(n).then(function(e){return t.loading=!1,e}).catch(function(e){throw t.loading=!1,e}),t}function f(e,t){var n;return s.createElement((n=e)&&n.__esModule?n.default:n,t)}function g(e,t){if(!t.loading)throw Error("react-loadable requires a `loading` component");var d,p,g=i({loader:null,loading:null,delay:200,timeout:null,render:f,webpack:null,modules:null},t),m=null;function h(){return!m&&(m=e(g.loader)),m.promise}return l.push(h),"function"==typeof g.webpack&&c.push(function(){if((0,g.webpack)().every(function(e){return void 0!==e&&void 0!==n.m[e]}))return h()}),p=d=function(t){function n(n){var r;return a(o(o(r=t.call(this,n)||this)),"retry",function(){r.setState({error:null,loading:!0,timedOut:!1}),m=e(g.loader),r._loadModule()}),h(),r.state={error:m.error,pastDelay:!1,timedOut:!1,loading:m.loading,loaded:m.loaded},r}r(n,t),n.preload=function(){return h()};var i=n.prototype;return i.UNSAFE_componentWillMount=function(){this._loadModule()},i.componentDidMount=function(){this._mounted=!0},i._loadModule=function(){var e=this;if(this.context&&Array.isArray(g.modules)&&g.modules.forEach(function(t){e.context.report(t)}),!!m.loading){var t=function(t){if(!!e._mounted)e.setState(t)};"number"==typeof g.delay&&(0===g.delay?this.setState({pastDelay:!0}):this._delay=setTimeout(function(){t({pastDelay:!0})},g.delay)),"number"==typeof g.timeout&&(this._timeout=setTimeout(function(){t({timedOut:!0})},g.timeout));var n=function(){t({error:m.error,loaded:m.loaded,loading:m.loading}),e._clearTimeouts()};m.promise.then(function(){return n(),null}).catch(function(e){return n(),null})}},i.componentWillUnmount=function(){this._mounted=!1,this._clearTimeouts()},i._clearTimeouts=function(){clearTimeout(this._delay),clearTimeout(this._timeout)},i.render=function(){return this.state.loading||this.state.error?s.createElement(g.loading,{isLoading:this.state.loading,pastDelay:this.state.pastDelay,timedOut:this.state.timedOut,error:this.state.error,retry:this.retry}):this.state.loaded?g.render(this.state.loaded,this.props):null},n}(s.Component),a(d,"contextType",u),p}function m(e){return g(d,e)}m.Map=function(e){if("function"!=typeof e.render)throw Error("LoadableMap requires a `render(loaded, props)` function");return g(p,e)};var h=function(e){function t(){return e.apply(this,arguments)||this}return r(t,e),t.prototype.render=function(){return s.createElement(u.Provider,{value:{report:this.props.report}},s.Children.only(this.props.children))},t}(s.Component);function b(e){for(var t=[];e.length;){var n=e.pop();t.push(n())}return Promise.all(t).then(function(){if(e.length)return b(e)})}m.Capture=h,m.preloadAll=function(){return new Promise(function(e,t){b(l).then(e,t)})},m.preloadReady=function(){return new Promise(function(e,t){b(c).then(e,e)})},e.exports=m},18790:function(e,t,n){"use strict";n.d(t,{H:function(){return i},f:function(){return function e(t,n,o){return void 0===o&&(o=[]),t.some(function(t){var a=t.path?(0,r.LX)(n,t):o.length?o[o.length-1].match:r.F0.computeRootMatch(n);return a&&(o.push({route:t,match:a}),t.routes&&e(t.routes,n,o)),a}),o}}});var r=n(16550),o=n(16019),a=n(67294);function i(e,t,n){return void 0===t&&(t={}),void 0===n&&(n={}),e?a.createElement(r.rs,n,e.map(function(e,n){return a.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,o.Z)({},n,{},t,{route:e})):a.createElement(e.component,(0,o.Z)({},n,t,{route:e}))}})})):null}},73727:function(e,t,n){"use strict";n.d(t,{OL:function(){return w},UT:function(){return d},VK:function(){return u},rU:function(){return b}});var r=n(16550),o=n(35091),a=n(67294),i=n(31381),s=n(16019),l=n(70443),c=n(21835),u=function(e){function t(){for(var t,n=arguments.length,r=Array(n),o=0;o<n;o++)r[o]=arguments[o];return(t=e.call.apply(e,[this].concat(r))||this).history=(0,i.lX)(t.props),t}return(0,o.Z)(t,e),t.prototype.render=function(){return a.createElement(r.F0,{history:this.history,children:this.props.children})},t}(a.Component),d=function(e){function t(){for(var t,n=arguments.length,r=Array(n),o=0;o<n;o++)r[o]=arguments[o];return(t=e.call.apply(e,[this].concat(r))||this).history=(0,i.q_)(t.props),t}return(0,o.Z)(t,e),t.prototype.render=function(){return a.createElement(r.F0,{history:this.history,children:this.props.children})},t}(a.Component),p=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},g=function(e){return e},m=a.forwardRef;void 0===m&&(m=g);var h=m(function(e,t){var n=e.innerRef,r=e.navigate,o=e.onClick,i=(0,l.Z)(e,["innerRef","navigate","onClick"]),c=i.target,u=(0,s.Z)({},i,{onClick:function(e){var t;try{o&&o(e)}catch(t){throw e.preventDefault(),t}if(!e.defaultPrevented&&0===e.button&&(!c||"_self"===c)&&!((t=e).metaKey||t.altKey||t.ctrlKey||t.shiftKey))e.preventDefault(),r()}});return g!==m?u.ref=t||n:u.ref=n,a.createElement("a",u)}),b=m(function(e,t){var n=e.component,o=void 0===n?h:n,u=e.replace,d=e.to,b=e.innerRef,y=(0,l.Z)(e,["component","replace","to","innerRef"]);return a.createElement(r.s6.Consumer,null,function(e){e||(0,c.Z)(!1);var n=e.history,r=f(p(d,e.location),e.location),l=r?n.createHref(r):"",h=(0,s.Z)({},y,{href:l,navigate:function(){var t=p(d,e.location),r=(0,i.Ep)(e.location)===(0,i.Ep)(f(t));(u||r?n.replace:n.push)(t)}});return g!==m?h.ref=t||b:h.innerRef=b,a.createElement(o,h)})}),y=function(e){return e},v=a.forwardRef;void 0===v&&(v=y);var w=v(function(e,t){var n=e["aria-current"],o=void 0===n?"page":n,i=e.activeClassName,u=void 0===i?"active":i,d=e.activeStyle,g=e.className,m=e.exact,h=e.isActive,w=e.location,k=e.sensitive,S=e.strict,x=e.style,_=e.to,E=e.innerRef,O=(0,l.Z)(e,["aria-current","activeClassName","activeStyle","className","exact","isActive","location","sensitive","strict","style","to","innerRef"]);return a.createElement(r.s6.Consumer,null,function(e){e||(0,c.Z)(!1);var n=w||e.location,i=f(p(_,n),n),l=i.pathname,P=l&&l.replace(/([.+*?=^!:${}()[\]|/\\])/g,"\\$1"),j=P?(0,r.LX)(n.pathname,{path:P,exact:m,sensitive:k,strict:S}):null,C=!!(h?h(j,n):j),T="function"==typeof g?g(C):g,I="function"==typeof x?x(C):x;C&&(T=function(){for(var e=arguments.length,t=Array(e),n=0;n<e;n++)t[n]=arguments[n];return t.filter(function(e){return e}).join(" ")}(T,u),I=(0,s.Z)({},I,d));var A=(0,s.Z)({"aria-current":C&&o||null,className:T,style:I,to:i},O);return y!==v?A.ref=t||E:A.innerRef=E,a.createElement(b,A)})})},16550:function(e,t,n){"use strict";n.d(t,{AW:function(){return k},F0:function(){return b},LX:function(){return w},TH:function(){return O},k6:function(){return E},rs:function(){return x},s6:function(){return h}});var r=n(35091),o=n(67294),a=n(45697),i=n.n(a),s=n(31381),l=n(21835),c=n(16019),u=n(39658),d=n.n(u);n(50663),n(70443),n(8679);var p="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:void 0!==n.g?n.g:{},f=o.createContext||function(e,t){var n,a,s,l="__create-react-context-"+(p[n="__global_unique_id__"]=(p[n]||0)+1)+"__",c=function(e){function n(){for(var t,n,r,o=arguments.length,a=Array(o),i=0;i<o;i++)a[i]=arguments[i];return(t=e.call.apply(e,[this].concat(a))||this).emitter=(n=t.props.value,r=[],{on:function(e){r.push(e)},off:function(e){r=r.filter(function(t){return t!==e})},get:function(){return n},set:function(e,t){n=e,r.forEach(function(e){return e(n,t)})}}),t}(0,r.Z)(n,e);var o=n.prototype;return o.getChildContext=function(){var e;return(e={})[l]=this.emitter,e},o.componentWillReceiveProps=function(e){if(this.props.value!==e.value){var n,r,o,a=this.props.value,i=e.value;if((n=a)===(r=i)?0!==n||1/n==1/r:n!=n&&r!=r)o=0;else{o="function"==typeof t?t(a,i):0x3fffffff;0!=(o|=0)&&this.emitter.set(e.value,o)}}},o.render=function(){return this.props.children},n}(o.Component);c.childContextTypes=((a={})[l]=i().object.isRequired,a);var u=function(t){function n(){for(var e,n=arguments.length,r=Array(n),o=0;o<n;o++)r[o]=arguments[o];return(e=t.call.apply(t,[this].concat(r))||this).observedBits=void 0,e.state={value:e.getValue()},e.onUpdate=function(t,n){((0|e.observedBits)&n)!=0&&e.setState({value:e.getValue()})},e}(0,r.Z)(n,t);var o=n.prototype;return o.componentWillReceiveProps=function(e){var t=e.observedBits;this.observedBits=null==t?0x3fffffff:t},o.componentDidMount=function(){this.context[l]&&this.context[l].on(this.onUpdate);var e=this.props.observedBits;this.observedBits=null==e?0x3fffffff:e},o.componentWillUnmount=function(){this.context[l]&&this.context[l].off(this.onUpdate)},o.getValue=function(){return this.context[l]?this.context[l].get():e},o.render=function(){var e;return(Array.isArray(e=this.props.children)?e[0]:e)(this.state.value)},n}(o.Component);return u.contextTypes=((s={})[l]=i().object,s),{Provider:c,Consumer:u}},g=function(e){var t=f();return t.displayName=e,t},m=g("Router-History"),h=g("Router"),b=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 o.createElement(h.Provider,{value:{history:this.props.history,location:this.state.location,match:t.computeRootMatch(this.state.location.pathname),staticContext:this.props.staticContext}},o.createElement(m.Provider,{children:this.props.children||null,value:this.props.history}))},t}(o.Component);o.Component;o.Component;var y={},v=0;function w(e,t){void 0===t&&(t={}),("string"==typeof t||Array.isArray(t))&&(t={path:t});var n=t,r=n.path,o=n.exact,a=void 0!==o&&o,i=n.strict,s=void 0!==i&&i,l=n.sensitive,c=void 0!==l&&l;return[].concat(r).reduce(function(t,n){if(!n&&""!==n)return null;if(t)return t;var r=function(e,t){var n=""+t.end+t.strict+t.sensitive,r=y[n]||(y[n]={});if(r[e])return r[e];var o=[],a={regexp:d()(e,o,t),keys:o};return v<1e4&&(r[e]=a,v++),a}(n,{end:a,strict:s,sensitive:c}),o=r.regexp,i=r.keys,l=o.exec(e);if(!l)return null;var u=l[0],p=l.slice(1),f=e===u;return a&&!f?null:{path:n,url:"/"===n&&""===u?"/":u,isExact:f,params:i.reduce(function(e,t,n){return e[t.name]=p[n],e},{})}},null)}var k=function(e){function t(){return e.apply(this,arguments)||this}return(0,r.Z)(t,e),t.prototype.render=function(){var e=this;return o.createElement(h.Consumer,null,function(t){t||(0,l.Z)(!1);var n,r=e.props.location||t.location,a=e.props.computedMatch?e.props.computedMatch:e.props.path?w(r.pathname,e.props):t.match,i=(0,c.Z)({},t,{location:r,match:a}),s=e.props,u=s.children,d=s.component,p=s.render;if(Array.isArray(u)&&(n=u,0===o.Children.count(n)))u=null;return o.createElement(h.Provider,{value:i},i.match?u?"function"==typeof u?u(i):u:d?o.createElement(d,i):p?p(i):null:"function"==typeof u?u(i):null)})},t}(o.Component);function S(e){return"/"===e.charAt(0)?e:"/"+e}o.Component;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 o.createElement(h.Consumer,null,function(t){t||(0,l.Z)(!1);var n,r,a=e.props.location||t.location;return o.Children.forEach(e.props.children,function(e){if(null==r&&o.isValidElement(e)){n=e;var i=e.props.path||e.props.from;r=i?w(a.pathname,(0,c.Z)({},e.props,{path:i})):t.match}}),r?o.cloneElement(n,{location:a,computedMatch:r}):null})},t}(o.Component),_=o.useContext;function E(){return _(m)}function O(){return _(h).location}},39658:function(e,t,n){var r=n(5826);e.exports=p,e.exports.parse=a,e.exports.compile=function(e,t){return s(a(e,t),t)},e.exports.tokensToFunction=s,e.exports.tokensToRegExp=d;var o=RegExp("(\\\\.)|([\\/.])?(?:(?:\\:(\\w+)(?:\\(((?:\\\\.|[^\\\\()])+)\\))?|\\(((?:\\\\.|[^\\\\()])+)\\))([+*?])?|(\\*))","g");function a(e,t){for(var n,r=[],a=0,i=0,s="",c=t&&t.delimiter||"/";null!=(n=o.exec(e));){var u=n[0],d=n[1],p=n.index;if(s+=e.slice(i,p),i=p+u.length,d){s+=d[1];continue}var f=e[i],g=n[2],m=n[3],h=n[4],b=n[5],y=n[6],v=n[7];s&&(r.push(s),s="");var w=null!=g&&null!=f&&f!==g,k="+"===y||"*"===y,S="?"===y||"*"===y,x=n[2]||c,_=h||b;r.push({name:m||a++,prefix:g||"",delimiter:x,optional:S,repeat:k,partial:w,asterisk:!!v,pattern:_?function(e){return e.replace(/([=!:$\/()])/g,"\\$1")}(_):v?".*":"[^"+l(x)+"]+?"})}return i<e.length&&(s+=e.substr(i)),s&&r.push(s),r}function i(e){return encodeURI(e).replace(/[\/?#]/g,function(e){return"%"+e.charCodeAt(0).toString(16).toUpperCase()})}function s(e,t){for(var n=Array(e.length),o=0;o<e.length;o++)"object"==typeof e[o]&&(n[o]=RegExp("^(?:"+e[o].pattern+")$",u(t)));return function(t,o){for(var a="",s=t||{},l=(o||{}).pretty?i:encodeURIComponent,c=0;c<e.length;c++){var u,d=e[c];if("string"==typeof d){a+=d;continue}var p=s[d.name];if(null==p){if(d.optional){d.partial&&(a+=d.prefix);continue}throw TypeError('Expected "'+d.name+'" to be defined')}if(r(p)){if(!d.repeat)throw TypeError('Expected "'+d.name+'" to not repeat, but received `'+JSON.stringify(p)+"`");if(0===p.length){if(d.optional)continue;throw TypeError('Expected "'+d.name+'" to not be empty')}for(var f=0;f<p.length;f++){if(u=l(p[f]),!n[c].test(u))throw TypeError('Expected all "'+d.name+'" to match "'+d.pattern+'", but received `'+JSON.stringify(u)+"`");a+=(0===f?d.prefix:d.delimiter)+u}continue}if(u=d.asterisk?encodeURI(p).replace(/[?#]/g,function(e){return"%"+e.charCodeAt(0).toString(16).toUpperCase()}):l(p),!n[c].test(u))throw TypeError('Expected "'+d.name+'" to match "'+d.pattern+'", but received "'+u+'"');a+=d.prefix+u}return a}}function l(e){return e.replace(/([.+*?=^!:${}()[\]|\/\\])/g,"\\$1")}function c(e,t){return e.keys=t,e}function u(e){return e&&e.sensitive?"":"i"}function d(e,t,n){!r(t)&&(n=t||n,t=[]);for(var o,a,i=(n=n||{}).strict,s=!1!==n.end,c="",d=0;d<e.length;d++){var p=e[d];if("string"==typeof p)c+=l(p);else{var f=l(p.prefix),g="(?:"+p.pattern+")";t.push(p),p.repeat&&(g+="(?:"+f+g+")*"),c+=g=p.optional?p.partial?f+"("+g+")?":"(?:"+f+"("+g+"))?":f+"("+g+")"}}var m=l(n.delimiter||"/"),h=c.slice(-m.length)===m;return!i&&(c=(h?c.slice(0,-m.length):c)+"(?:"+m+"(?=$))?"),s?c+="$":c+=i&&h?"":"(?="+m+"|$)",o=RegExp("^"+c,u(n)),a=t,o.keys=a,o}function p(e,t,n){var o,i,s;if(!r(t)&&(n=t||n,t=[]),n=n||{},e instanceof RegExp)return function(e,t){var n,r,o=e.source.match(/\((?!\?)/g);if(o)for(var a=0;a<o.length;a++)t.push({name:a,prefix:null,delimiter:null,optional:!1,repeat:!1,partial:!1,asterisk:!1,pattern:null});return n=e,r=t,n.keys=r,n}(e,t);if(r(e))return function(e,t,n){for(var r,o,a=[],i=0;i<e.length;i++)a.push(p(e[i],t,n).source);return r=RegExp("(?:"+a.join("|")+")",u(n)),o=t,r.keys=o,r}(e,t,n);return o=e,i=t,d(a(o,s=n),i,s)}},30086:function(e,t){"use strict";var n="function"==typeof Symbol&&Symbol.for,r=n?Symbol.for("react.element"):60103,o=n?Symbol.for("react.portal"):60106,a=n?Symbol.for("react.fragment"):60107,i=n?Symbol.for("react.strict_mode"):60108,s=n?Symbol.for("react.profiler"):60114,l=n?Symbol.for("react.provider"):60109,c=n?Symbol.for("react.context"):60110,u=n?Symbol.for("react.async_mode"):60111,d=n?Symbol.for("react.concurrent_mode"):60111,p=n?Symbol.for("react.forward_ref"):60112,f=n?Symbol.for("react.suspense"):60113,g=(n&&Symbol.for("react.suspense_list"),n?Symbol.for("react.memo"):60115),m=n?Symbol.for("react.lazy"):60116;n&&Symbol.for("react.block"),n&&Symbol.for("react.fundamental"),n&&Symbol.for("react.responder"),n&&Symbol.for("react.scope")},50663:function(e,t,n){"use strict";n(30086)},75251:function(e,t,n){"use strict";var r=n(67294),o=Symbol.for("react.element"),a=Symbol.for("react.fragment"),i=Object.prototype.hasOwnProperty,s=r.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,l={key:!0,ref:!0,__self:!0,__source:!0};function c(e,t,n){var r,a={},c=null,u=null;for(r in void 0!==n&&(c=""+n),void 0!==t.key&&(c=""+t.key),void 0!==t.ref&&(u=t.ref),t)i.call(t,r)&&!l.hasOwnProperty(r)&&(a[r]=t[r]);if(e&&e.defaultProps)for(r in t=e.defaultProps)void 0===a[r]&&(a[r]=t[r]);return{$$typeof:o,type:e,key:c,ref:u,props:a,_owner:s.current}}t.Fragment=a,t.jsx=c,t.jsxs=c},72408:function(e,t){"use strict";var n=Symbol.for("react.element"),r=Symbol.for("react.portal"),o=Symbol.for("react.fragment"),a=Symbol.for("react.strict_mode"),i=Symbol.for("react.profiler"),s=Symbol.for("react.provider"),l=Symbol.for("react.context"),c=Symbol.for("react.forward_ref"),u=Symbol.for("react.suspense"),d=Symbol.for("react.memo"),p=Symbol.for("react.lazy"),f=Symbol.iterator,g={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},m=Object.assign,h={};function b(e,t,n){this.props=e,this.context=t,this.refs=h,this.updater=n||g}function y(){}function v(e,t,n){this.props=e,this.context=t,this.refs=h,this.updater=n||g}b.prototype.isReactComponent={},b.prototype.setState=function(e,t){if("object"!=typeof e&&"function"!=typeof e&&null!=e)throw Error("setState(...): takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,e,t,"setState")},b.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")},y.prototype=b.prototype;var w=v.prototype=new y;w.constructor=v,m(w,b.prototype),w.isPureReactComponent=!0;var k=Array.isArray,S=Object.prototype.hasOwnProperty,x={current:null},_={key:!0,ref:!0,__self:!0,__source:!0};function E(e,t,r){var o,a={},i=null,s=null;if(null!=t)for(o in void 0!==t.ref&&(s=t.ref),void 0!==t.key&&(i=""+t.key),t)S.call(t,o)&&!_.hasOwnProperty(o)&&(a[o]=t[o]);var l=arguments.length-2;if(1===l)a.children=r;else if(1<l){for(var c=Array(l),u=0;u<l;u++)c[u]=arguments[u+2];a.children=c}if(e&&e.defaultProps)for(o in l=e.defaultProps)void 0===a[o]&&(a[o]=l[o]);return{$$typeof:n,type:e,key:i,ref:s,props:a,_owner:x.current}}function O(e){return"object"==typeof e&&null!==e&&e.$$typeof===n}var P=/\/+/g;function j(e,t){var n,r;return"object"==typeof e&&null!==e&&null!=e.key?(n=""+e.key,r={"=":"=0",":":"=2"},"$"+n.replace(/[=:]/g,function(e){return r[e]})):t.toString(36)}function C(e,t,o){if(null==e)return e;var a=[],i=0;return!function e(t,o,a,i,s){var l,c,u,d=typeof t;("undefined"===d||"boolean"===d)&&(t=null);var p=!1;if(null===t)p=!0;else switch(d){case"string":case"number":p=!0;break;case"object":switch(t.$$typeof){case n:case r:p=!0}}if(p){;return s=s(p=t),t=""===i?"."+j(p,0):i,k(s)?(a="",null!=t&&(a=t.replace(P,"$&/")+"/"),e(s,o,a,"",function(e){return e})):null!=s&&(O(s)&&(l=s,c=a+(!s.key||p&&p.key===s.key?"":(""+s.key).replace(P,"$&/")+"/")+t,s={$$typeof:n,type:l.type,key:c,ref:l.ref,props:l.props,_owner:l._owner}),o.push(s)),1}if(p=0,i=""===i?".":i+":",k(t))for(var g=0;g<t.length;g++){var m=i+j(d=t[g],g);p+=e(d,o,a,m,s)}else{;if("function"==typeof(m=null===(u=t)||"object"!=typeof u?null:"function"==typeof(u=f&&u[f]||u["@@iterator"])?u:null))for(t=m.call(t),g=0;!(d=t.next()).done;)m=i+j(d=d.value,g++),p+=e(d,o,a,m,s);else if("object"===d)throw Error("Objects are not valid as a React child (found: "+("[object Object]"===(o=String(t))?"object with keys {"+Object.keys(t).join(", ")+"}":o)+"). If you meant to render a collection of children, use an array instead.")}return p}(e,a,"","",function(e){return t.call(o,e,i++)}),a}function T(e){if(-1===e._status){var t=e._result;(t=t()).then(function(t){(0===e._status||-1===e._status)&&(e._status=1,e._result=t)},function(t){(0===e._status||-1===e._status)&&(e._status=2,e._result=t)}),-1===e._status&&(e._status=0,e._result=t)}if(1===e._status)return e._result.default;throw e._result}var I={current:null},A={transition:null};t.Children={map:C,forEach:function(e,t,n){C(e,function(){t.apply(this,arguments)},n)},count:function(e){var t=0;return C(e,function(){t++}),t},toArray:function(e){return C(e,function(e){return e})||[]},only:function(e){if(!O(e))throw Error("React.Children.only expected to receive a single React element child.");return e}},t.Component=b,t.Fragment=o,t.Profiler=i,t.PureComponent=v,t.StrictMode=a,t.Suspense=u,t.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED={ReactCurrentDispatcher:I,ReactCurrentBatchConfig:A,ReactCurrentOwner:x},t.cloneElement=function(e,t,r){if(null==e)throw Error("React.cloneElement(...): The argument must be a React element, but you passed "+e+".");var o=m({},e.props),a=e.key,i=e.ref,s=e._owner;if(null!=t){if(void 0!==t.ref&&(i=t.ref,s=x.current),void 0!==t.key&&(a=""+t.key),e.type&&e.type.defaultProps)var l=e.type.defaultProps;for(c in t)S.call(t,c)&&!_.hasOwnProperty(c)&&(o[c]=void 0===t[c]&&void 0!==l?l[c]:t[c])}var c=arguments.length-2;if(1===c)o.children=r;else if(1<c){l=Array(c);for(var u=0;u<c;u++)l[u]=arguments[u+2];o.children=l}return{$$typeof:n,type:e.type,key:a,ref:i,props:o,_owner:s}},t.createContext=function(e){return(e={$$typeof:l,_currentValue:e,_currentValue2:e,_threadCount:0,Provider:null,Consumer:null,_defaultValue:null,_globalName:null}).Provider={$$typeof:s,_context:e},e.Consumer=e},t.createElement=E,t.createFactory=function(e){var t=E.bind(null,e);return t.type=e,t},t.createRef=function(){return{current:null}},t.forwardRef=function(e){return{$$typeof:c,render:e}},t.isValidElement=O,t.lazy=function(e){return{$$typeof:p,_payload:{_status:-1,_result:e},_init:T}},t.memo=function(e,t){return{$$typeof:d,type:e,compare:void 0===t?null:t}},t.startTransition=function(e){var t=A.transition;A.transition={};try{e()}finally{A.transition=t}},t.unstable_act=function(){throw Error("act(...) is not supported in production builds of React.")},t.useCallback=function(e,t){return I.current.useCallback(e,t)},t.useContext=function(e){return I.current.useContext(e)},t.useDebugValue=function(){},t.useDeferredValue=function(e){return I.current.useDeferredValue(e)},t.useEffect=function(e,t){return I.current.useEffect(e,t)},t.useId=function(){return I.current.useId()},t.useImperativeHandle=function(e,t,n){return I.current.useImperativeHandle(e,t,n)},t.useInsertionEffect=function(e,t){return I.current.useInsertionEffect(e,t)},t.useLayoutEffect=function(e,t){return I.current.useLayoutEffect(e,t)},t.useMemo=function(e,t){return I.current.useMemo(e,t)},t.useReducer=function(e,t,n){return I.current.useReducer(e,t,n)},t.useRef=function(e){return I.current.useRef(e)},t.useState=function(e){return I.current.useState(e)},t.useSyncExternalStore=function(e,t,n){return I.current.useSyncExternalStore(e,t,n)},t.useTransition=function(){return I.current.useTransition()},t.version="18.2.0"},67294:function(e,t,n){"use strict";e.exports=n(72408)},85893:function(e,t,n){"use strict";e.exports=n(75251)},60053:function(e,t){"use strict";function n(e,t){var n=e.length;for(e.push(t);0<n;){var r=n-1>>>1,o=e[r];if(0<a(o,t))e[r]=t,e[n]=o,n=r;else break}}function r(e){return 0===e.length?null:e[0]}function o(e){if(0===e.length)return null;var t=e[0],n=e.pop();if(n!==t){e[0]=n;for(var r=0,o=e.length,i=o>>>1;r<i;){var s=2*(r+1)-1,l=e[s],c=s+1,u=e[c];if(0>a(l,n))c<o&&0>a(u,l)?(e[r]=u,e[c]=n,r=c):(e[r]=l,e[s]=n,r=s);else if(c<o&&0>a(u,n))e[r]=u,e[c]=n,r=c;else break}}return t}function a(e,t){var n=e.sortIndex-t.sortIndex;return 0!==n?n:e.id-t.id}if("object"==typeof performance&&"function"==typeof performance.now){var i,s=performance;t.unstable_now=function(){return s.now()}}else{var l=Date,c=l.now();t.unstable_now=function(){return l.now()-c}}var u=[],d=[],p=1,f=null,g=3,m=!1,h=!1,b=!1,y="function"==typeof setTimeout?setTimeout:null,v="function"==typeof clearTimeout?clearTimeout:null,w="undefined"!=typeof setImmediate?setImmediate:null;function k(e){for(var t=r(d);null!==t;){if(null===t.callback)o(d);else if(t.startTime<=e)o(d),t.sortIndex=t.expirationTime,n(u,t);else break;t=r(d)}}function S(e){if(b=!1,k(e),!h){if(null!==r(u))h=!0,N(x);else{var t=r(d);null!==t&&L(S,t.startTime-e)}}}function x(e,n){h=!1,b&&(b=!1,v(O),O=-1),m=!0;var a=g;try{for(k(n),f=r(u);null!==f&&(!(f.expirationTime>n)||e&&!C());){var i=f.callback;if("function"==typeof i){f.callback=null,g=f.priorityLevel;var s=i(f.expirationTime<=n);n=t.unstable_now(),"function"==typeof s?f.callback=s:f===r(u)&&o(u),k(n)}else o(u);f=r(u)}if(null!==f)var l=!0;else{var c=r(d);null!==c&&L(S,c.startTime-n),l=!1}return l}finally{f=null,g=a,m=!1}}"undefined"!=typeof navigator&&void 0!==navigator.scheduling&&void 0!==navigator.scheduling.isInputPending&&navigator.scheduling.isInputPending.bind(navigator.scheduling);var _=!1,E=null,O=-1,P=5,j=-1;function C(){return!(t.unstable_now()-j<P)}function T(){if(null!==E){var e=t.unstable_now();j=e;var n=!0;try{n=E(!0,e)}finally{n?i():(_=!1,E=null)}}else _=!1}if("function"==typeof w)i=function(){w(T)};else if("undefined"!=typeof MessageChannel){var I=new MessageChannel,A=I.port2;I.port1.onmessage=T,i=function(){A.postMessage(null)}}else i=function(){y(T,0)};function N(e){E=e,_||(_=!0,i())}function L(e,n){O=y(function(){e(t.unstable_now())},n)}t.unstable_IdlePriority=5,t.unstable_ImmediatePriority=1,t.unstable_LowPriority=4,t.unstable_NormalPriority=3,t.unstable_Profiling=null,t.unstable_UserBlockingPriority=2,t.unstable_cancelCallback=function(e){e.callback=null},t.unstable_continueExecution=function(){h||m||(h=!0,N(x))},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"):P=0<e?Math.floor(1e3/e):5},t.unstable_getCurrentPriorityLevel=function(){return g},t.unstable_getFirstCallbackNode=function(){return r(u)},t.unstable_next=function(e){switch(g){case 1:case 2:case 3:var t=3;break;default:t=g}var n=g;g=t;try{return e()}finally{g=n}},t.unstable_pauseExecution=function(){},t.unstable_requestPaint=function(){},t.unstable_runWithPriority=function(e,t){switch(e){case 1:case 2:case 3:case 4:case 5:break;default:e=3}var n=g;g=e;try{return t()}finally{g=n}},t.unstable_scheduleCallback=function(e,o,a){var i=t.unstable_now();switch(a="object"==typeof a&&null!==a?"number"==typeof(a=a.delay)&&0<a?i+a:i:i,e){case 1:var s=-1;break;case 2:s=250;break;case 5:s=0x3fffffff;break;case 4:s=1e4;break;default:s=5e3}return s=a+s,e={id:p++,callback:o,priorityLevel:e,startTime:a,expirationTime:s,sortIndex:-1},a>i?(e.sortIndex=a,n(d,e),null===r(u)&&e===r(d)&&(b?(v(O),O=-1):b=!0,L(S,a-i))):(e.sortIndex=s,n(u,e),h||m||(h=!0,N(x))),e},t.unstable_shouldYield=C,t.unstable_wrapCallback=function(e){var t=g;return function(){var n=g;g=t;try{return e.apply(this,arguments)}finally{g=n}}}},63840:function(e,t,n){"use strict";e.exports=n(60053)},96774:function(e){e.exports=function(e,t,n,r){var o=n?n.call(r,e,t):void 0;if(void 0!==o)return!!o;if(e===t)return!0;if("object"!=typeof e||!e||"object"!=typeof t||!t)return!1;var a=Object.keys(e),i=Object.keys(t);if(a.length!==i.length)return!1;for(var s=Object.prototype.hasOwnProperty.bind(t),l=0;l<a.length;l++){var c=a[l];if(!s(c))return!1;var u=e[c],d=t[c];if(!1===(o=n?n.call(r,u,d,c):void 0)||void 0===o&&u!==d)return!1}return!0}},60093:function(e,t,n){"use strict";n.d(t,{Z:()=>p}),n("67294");var r=n("85893"),o=n("68356"),a=n.n(o),i=n("37138");let s={"0058b4c6":[()=>n.e("1489").then(n.t.bind(n,67136,19)),"@generated/docusaurus-plugin-content-docs/default/p/docs-175.json",67136],"01a85c17":[()=>Promise.all([n.e("6212"),n.e("565")]).then(n.bind(n,88292)),"@theme/BlogTagsListPage",88292],"04b18502":[()=>n.e("5275").then(n.bind(n,56422)),"@site/docs/packaging/index.md",56422],"05767842":[()=>n.e("1371").then(n.t.bind(n,70374,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-authors-joey-023.json",70374],"06758c2b":[()=>n.e("9118").then(n.t.bind(n,61343,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-optimization-150.json",61343],"080a8349":[()=>n.e("8046").then(n.bind(n,46324)),"@site/docs/packaging/monitoring.yml.md",46324],"08bef15d":[()=>n.e("7450").then(n.bind(n,64401)),"@site/docs/user/privacy.md",64401],"09dbd43b":[()=>n.e("8388").then(n.bind(n,56721)),"@site/docs/user/troubleshooting/boot-rescue.md",56721],"0b254e3a":[()=>n.e("1751").then(n.bind(n,30607)),"@site/docs/packaging/updating-an-existing-package.md",30607],"0b85ec06":[()=>n.e("3161").then(n.t.bind(n,93120,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-pgo-777.json",93120],"0cfc9369":[()=>n.e("8955").then(n.t.bind(n,9093,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-lto-304.json",9093],"0e3c5e6b":[()=>n.e("5157").then(n.bind(n,67391)),"@site/docs/user/editions/plasma/index.md",67391],"0e862883":[()=>n.e("1125").then(n.bind(n,52954)),"@site/docs/user/contributing/testing-an-iso.md",52954],"14488e92":[()=>n.e("8301").then(n.bind(n,73504)),"@site/docs/user/quick-start/default-applications.md",73504],"14eb3368":[()=>Promise.all([n.e("6212"),n.e("1983")]).then(n.bind(n,40855)),"@theme/DocCategoryGeneratedIndexPage",40855],"156eae2c":[()=>n.e("9223").then(n.t.bind(n,88713,19)),"@generated/docusaurus-plugin-content-docs/default/p/docs-category-networking-814.json",88713],0x11113f9:[()=>Promise.all([n.e("6212"),n.e("7167"),n.e("8412"),n.e("7048")]).then(n.bind(n,39436)),"@theme/DocItem",39436],"1a698c37":[()=>Promise.all([n.e("619"),n.e("3899"),n.e("346")]).then(n.bind(n,46821)),"@site/docs/user/editions/index.mdx",46821],"1ae709a2":[()=>n.e("5366").then(n.bind(n,11912)),"@site/docs/user/package-management/history-and-rollback.md",11912],"1b835d51":[()=>n.e("5670").then(n.t.bind(n,26976,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-3-b1c.json",26976],"1df93b7f":[()=>Promise.all([n.e("619"),n.e("8706")]).then(n.bind(n,60105)),"@site/src/pages/index.tsx",60105],0x14ed9ec:[()=>n.e("9663").then(n.bind(n,23077)),"@site/docs/user/software/desktops/index.md",23077],"257b9082":[()=>n.e("4401").then(n.bind(n,49744)),"@site/docs/user/software/development/containers.md",49744],"2598a3a5":[()=>n.e("7824").then(n.bind(n,44472)),"@site/docs/user/editions/mate/configuration.md",44472],"2609550e":[()=>n.e("640").then(n.bind(n,17667)),"@site/docs/user/software/networking/samba.md",17667],"26308ea3":[()=>Promise.all([n.e("6212"),n.e("7167"),n.e("614")]).then(n.bind(n,4129)),"@site/docs/packaging/submitting-a-pull-request.mdx",4129],"27d71881":[()=>n.e("4033").then(n.t.bind(n,82071,19)),"@generated/docusaurus-plugin-content-docs/default/p/docs-category-package-management-681.json",82071],"2a0f90eb":[()=>n.e("9522").then(n.t.bind(n,16961,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-solus-558.json",16961],"2a34ce22":[()=>n.e("4530").then(n.bind(n,82753)),"@site/docs/user/quick-start/installation/system-requirements.md",82753],"2a37c7d8":[()=>n.e("8609").then(n.bind(n,68854)),"@site/docs/user/editions/plasma/tips-and-tricks.md",68854],"2a9c4f4d":[()=>n.e("6961").then(n.t.bind(n,91902,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-clang-1c6.json",91902],"2b4abe09":[()=>n.e("3560").then(n.bind(n,20587)),"@site/docs/user/troubleshooting/index.md",20587],"2b61a93c":[()=>n.e("9640").then(n.bind(n,21534)),"@site/docs/user/editions/mate/index.md",21534],"2c3e84bd":[()=>n.e("6133").then(n.bind(n,95858)),"@site/docs/user/quick-start/installation/disks.md",95858],"334da572":[()=>n.e("2654").then(n.t.bind(n,78927,19)),"@generated/docusaurus-plugin-content-docs/default/p/docs-category-mobile-306.json",78927],"33f669c7":[()=>n.e("3551").then(n.t.bind(n,22,19)),"@generated/docusaurus-plugin-content-docs/default/p/docs-category-software-1ab.json",22],"33fc5bb8":[()=>Promise.all([n.e("6212"),n.e("7167"),n.e("2071"),n.e("8412"),n.e("9348")]).then(n.bind(n,78979)),"@theme/Blog/Pages/BlogAuthorsPostsPage",78979],"36994c47":[()=>n.e("2792").then(n.t.bind(n,17934,19)),"@generated/docusaurus-plugin-content-blog/default/__plugin.json",17934],"38920c38":[()=>n.e("4151").then(n.bind(n,81232)),"@site/docs/user/hardware/peripherals/printers-and-scanners.md",81232],"3a2db09e":[()=>n.e("7143").then(n.t.bind(n,2668,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-df9.json",2668],"3a93f7ba":[()=>n.e("3648").then(n.t.bind(n,36444,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-hwcaps-8b3.json",36444],"3bd0a7e9":[()=>n.e("3338").then(n.t.bind(n,68103,19)),"@generated/docusaurus-plugin-content-docs/default/p/docs-category-advanced-configuration-b1b.json",68103],"3fdfc7ff":[()=>n.e("3755").then(n.bind(n,97523)),"@site/docs/user/package-management/basics.md",97523],"3ff05326":[()=>n.e("1918").then(n.bind(n,32551)),"@site/docs/packaging/package.yml.md",32551],"418a6276":[()=>n.e("8761").then(n.bind(n,28645)),"@site/devlog/2024-01-19-eopkg-is-dead.md?truncated=true",28645],"41a4de91":[()=>n.e("881").then(n.bind(n,39485)),"@site/docs/user/software/third-party/index.md",39485],"424f562c":[()=>n.e("4629").then(n.bind(n,96389)),"@site/devlog/2024-02-09-Intro-to-optimizing-packages-on-solus.md?truncated=true",96389],"439d6d8d":[()=>n.e("369").then(n.t.bind(n,52001,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-mate-495.json",52001],"43d43a8f":[()=>n.e("735").then(n.t.bind(n,29264,19)),"@generated/docusaurus-plugin-content-docs/default/p/docs-category-localization-3b5.json",29264],"45e9d313":[()=>n.e("5568").then(n.bind(n,96479)),"@site/docs/packaging/testing-a-package.md",96479],"46a65d96":[()=>n.e("9906").then(n.bind(n,1658)),"@site/docs/user/package-management/repo-management.md",1658],"47b97f63":[()=>n.e("4842").then(n.t.bind(n,40552,19)),"@generated/docusaurus-plugin-content-docs/default/p/docs-category-compatibility-048.json",40552],"4802fa93":[()=>n.e("8397").then(n.bind(n,13955)),"@site/devlog/2024-01-29-dont-call-me-mate.md",13955],"49b71c16":[()=>n.e("545").then(n.bind(n,2872)),"@site/docs/packaging/packaging-practices.md",2872],"4e87380c":[()=>n.e("8570").then(n.t.bind(n,90906,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-gnu-f4d.json",90906],"513b6405":[()=>n.e("4064").then(n.bind(n,86663)),"@site/docs/packaging/prepare-for-packaging.md",86663],"528b6a6b":[()=>n.e("9492").then(n.bind(n,87049)),"@site/docs/user/software/utilities/ksysguard.md",87049],"533eefa9":[()=>n.e("6813").then(n.bind(n,64176)),"@site/docs/user/quick-start/installation/index.md",64176],"5685b4d8":[()=>n.e("709").then(n.bind(n,29137)),"@site/docs/user/editions/xfce/configuration.md",29137],"5b7f3753":[()=>n.e("1157").then(n.bind(n,76571)),"@site/docs/packaging/git-basics.md",76571],"5e95c892":[()=>n.e("3432").then(n.bind(n,1532)),"@theme/DocsRoot",1532],"5e9f5e1a":[()=>Promise.resolve().then(n.bind(n,75150)),"@generated/docusaurus.config",75150],"5efe994e":[()=>n.e("5015").then(n.t.bind(n,35568,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-llvm-8d1.json",35568],"5f194406":[()=>n.e("1862").then(n.bind(n,57999)),"@site/docs/user/contributing/community-guidelines.md",57999],"6146d358":[()=>n.e("2149").then(n.t.bind(n,26527,19)),"@generated/docusaurus-plugin-content-docs/default/p/docs-category-contributing-e4f.json",26527],"61c953b4":[()=>n.e("9943").then(n.bind(n,27646)),"@site/docs/packaging/procedures/maintainership.md",27646],"621db11d":[()=>Promise.all([n.e("6212"),n.e("2071"),n.e("9854")]).then(n.bind(n,52273)),"@theme/Blog/Pages/BlogAuthorsListPage",52273],"62d70de2":[()=>n.e("3372").then(n.t.bind(n,18119,19)),"@generated/docusaurus-plugin-content-docs/default/p/docs-category-virtualization-413.json",18119],"633d53d7":[()=>n.e("8011").then(n.t.bind(n,68574,19)),"@generated/docusaurus-plugin-content-docs/default/p/docs-category-procedures-1dc.json",68574],0x3db3aa8:[()=>n.e("9311").then(n.bind(n,27444)),"@site/docs/user/software/development/index.md",27444],"6787574e":[()=>n.e("7192").then(n.bind(n,99023)),"@site/docs/user/intro.md",99023],"6873f895":[()=>n.e("5243").then(n.bind(n,34479)),"@site/docs/user/contributing/style.md",34479],"6875c492":[()=>Promise.all([n.e("6212"),n.e("7167"),n.e("2071"),n.e("8412"),n.e("83")]).then(n.bind(n,97559)),"@theme/BlogTagsPostsPage",97559],"6cfe09a0":[()=>n.e("7170").then(n.bind(n,61435)),"@site/docs/user/software/networking/tigervnc.md",61435],"7071adf5":[()=>n.e("2882").then(n.bind(n,92098)),"@site/docs/packaging/troubleshooting-packaging.md",92098],"72054e31":[()=>n.e("9277").then(n.bind(n,89814)),"@site/devlog/2024-02-09-Intro-to-optimizing-packages-on-solus.md",89814],"72f2f84e":[()=>n.e("698").then(n.t.bind(n,57017,19)),"@generated/docusaurus-plugin-content-docs/default/p/docs-category-utilities-bb8.json",57017],"74470af4":[()=>n.e("6327").then(n.bind(n,86728)),"@site/docs/user/software/virtualization/virtualbox.md",86728],"75c41d11":[()=>n.e("4998").then(n.bind(n,94341)),"@site/docs/user/editions/xfce/tips-and-tricks.md",94341],"793c86b2":[()=>n.e("1318").then(n.bind(n,73426)),"@site/docs/user/software/command-line/index.md",73426],"7a24477a":[()=>n.e("1990").then(n.bind(n,20095)),"@site/docs/user/contributing/getting-involved.md",20095],"7b0bdf40":[()=>n.e("8964").then(n.t.bind(n,16165,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-eopkg-20b.json",16165],"7c1fb106":[()=>n.e("9191").then(n.bind(n,74244)),"@site/docs/packaging/appstream-metainfo.md",74244],"7c2abd66":[()=>n.e("3059").then(n.t.bind(n,37831,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-moss-7c4.json",37831],"7e4100d6":[()=>n.e("6520").then(n.bind(n,58736)),"@site/docs/user/software/networking/wireshark.md",58736],"814f3328":[()=>n.e("106").then(n.t.bind(n,4200,19)),"~blog/default/blog-post-list-prop-default.json",4200],"8490a22d":[()=>n.e("8219").then(n.bind(n,12863)),"@site/docs/packaging/advanced-config/local-repository.md",12863],"88a83a8c":[()=>n.e("3187").then(n.bind(n,23371)),"@site/docs/user/software/utilities/kwallet.md",23371],"8d193990":[()=>n.e("3129").then(n.bind(n,31612)),"@site/devlog/2024-01-19-eopkg-is-dead.md",31612],"8e3d5b32":[()=>n.e("2288").then(n.bind(n,99641)),"@site/docs/user/software/localization/ibus.md",99641],"8e861970":[()=>n.e("7667").then(n.bind(n,6852)),"@site/docs/packaging/procedures/request-a-package.md",6852],"8e886580":[()=>n.e("1992").then(n.bind(n,24459)),"@site/docs/user/software/development/rust.md",24459],"920ec10a":[()=>n.e("8261").then(n.t.bind(n,35010,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-glibc-23b.json",35010],"9284d474":[()=>n.e("5528").then(n.bind(n,85529)),"@site/docs/user/software/gaming/index.md",85529],"947d9ca4":[()=>n.e("7131").then(n.bind(n,26916)),"@site/docs/user/software/development/web.md",26916],"9485dea6":[()=>n.e("628").then(n.bind(n,22633)),"@site/docs/user/hardware/compatibility/wifi.md",22633],"96af6484":[()=>n.e("8736").then(n.bind(n,31763)),"@site/docs/user/hardware/peripherals/mice-and-touchpads.md",31763],"97c623e4":[()=>n.e("4661").then(n.bind(n,39487)),"@site/docs/packaging/procedures/request-a-package-update.md",39487],"99bedda9":[()=>n.e("7240").then(n.bind(n,9982)),"@site/docs/user/hardware/index.md",9982],"9b400668":[()=>n.e("900").then(n.t.bind(n,42667,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-x-86-64-v-3-dc8.json",42667],"9e4087bc":[()=>n.e("7293").then(n.bind(n,23699)),"@theme/BlogArchivePage",23699],a05bfad9:[()=>n.e("1584").then(n.bind(n,82131)),"@site/docs/user/editions/budgie/tips-and-tricks.md",82131],a398ef57:[()=>n.e("1418").then(n.bind(n,78086)),"@site/docs/user/hardware/mobile/apple.md",78086],a52026b8:[()=>n.e("185").then(n.bind(n,87912)),"@site/devlog/2024-01-13-welcome-devlog.md?truncated=true",87912],a6aa9e1f:[()=>Promise.all([n.e("6212"),n.e("7167"),n.e("2071"),n.e("8412"),n.e("8514")]).then(n.bind(n,34760)),"@theme/BlogListPage",34760],a6c0fb2f:[()=>n.e("6973").then(n.bind(n,51346)),"@site/devlog/2024-11-21-clean-cleanl-clean.md",51346],a7456010:[()=>n.e("7365").then(n.t.bind(n,62050,19)),"@generated/docusaurus-plugin-content-pages/default/__plugin.json",62050],a7bd4aaa:[()=>n.e("5211").then(n.bind(n,35327)),"@theme/DocVersionRoot",35327],a94703ab:[()=>Promise.all([n.e("6212"),n.e("9914")]).then(n.bind(n,49341)),"@theme/DocRoot",49341],a9e19215:[()=>n.e("5147").then(n.bind(n,72459)),"@site/docs/user/software/networking/xrdp.md",72459],ab89b7a6:[()=>n.e("3960").then(n.bind(n,13414)),"@site/docs/user/editions/xfce/index.md",13414],aba21aa0:[()=>n.e("5112").then(n.t.bind(n,42418,19)),"@generated/docusaurus-plugin-content-docs/default/__plugin.json",42418],acecf23e:[()=>n.e("7627").then(n.t.bind(n,47548,19)),"~blog/default/blogMetadata-default.json",47548],ad205e99:[()=>n.e("6995").then(n.bind(n,53379)),"@site/docs/packaging/stack-rebuilds.md",53379],b4302412:[()=>n.e("3388").then(n.bind(n,37967)),"@site/docs/user/editions/gnome/tips-and-tricks.md",37967],b6ca4f35:[()=>n.e("188").then(n.t.bind(n,7,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-packaging-55a.json",7],baa66232:[()=>n.e("2549").then(n.bind(n,59710)),"@site/docs/user/software/camera/droidcam.md",59710],baf1b6e8:[()=>n.e("6762").then(n.bind(n,25709)),"@site/docs/user/software/development/java.md",25709],be4ac66b:[()=>n.e("6857").then(n.bind(n,81522)),"@site/docs/user/hardware/compatibility/laptops.md",81522],be79d003:[()=>n.e("9507").then(n.bind(n,36604)),"@site/docs/packaging/update-dev-environment.md",36604],c15d9823:[()=>n.e("9359").then(n.t.bind(n,39546,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-bd9.json",39546],c55c138b:[()=>n.e("2627").then(n.bind(n,53826)),"@site/docs/packaging/packaging-changes.md",53826],c5de29d4:[()=>n.e("3754").then(n.bind(n,48580)),"@site/docs/packaging/creating-a-new-package.md",48580],c99ea947:[()=>n.e("6717").then(n.t.bind(n,60305,19)),"@generated/docusaurus-plugin-content-docs/default/p/docs-category-camera-f25.json",60305],c9c1a3f4:[()=>n.e("2384").then(n.bind(n,27346)),"@site/docs/user/editions/budgie/configuration.md",27346],cca891e2:[()=>n.e("9132").then(n.bind(n,36810)),"@site/docs/packaging/procedures/package-inclusion.md",36810],ccc49370:[()=>Promise.all([n.e("6212"),n.e("7167"),n.e("2071"),n.e("8412"),n.e("2998")]).then(n.bind(n,57647)),"@theme/BlogPostPage",57647],ce4855c1:[()=>n.e("2796").then(n.bind(n,42202)),"@site/docs/packaging/translation-instructions.md",42202],cec10a63:[()=>n.e("4886").then(n.bind(n,87641)),"@site/docs/user/editions/plasma/configuration.md",87641],d00f7e62:[()=>n.e("8332").then(n.bind(n,55637)),"@site/docs/packaging/your-first-package-update.md",55637],d0d2faf6:[()=>n.e("7744").then(n.bind(n,64348)),"@site/docs/packaging/procedures/release-processes.md",64348],d20919b7:[()=>n.e("3237").then(n.t.bind(n,33273,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-cleanup-4e8.json",33273],d2363c7a:[()=>n.e("4154").then(n.t.bind(n,1846,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-authors-alfi-751.json",1846],d4762887:[()=>n.e("151").then(n.bind(n,4984)),"@site/docs/user/troubleshooting/installation.md",4984],d5670106:[()=>n.e("1265").then(n.bind(n,3302)),"@site/docs/user/troubleshooting/plasma.md",3302],d9c798e8:[()=>n.e("9661").then(n.t.bind(n,16618,19)),"@generated/docusaurus-plugin-content-docs/default/p/docs-category-peripherals-173.json",16618],da0423b8:[()=>n.e("7469").then(n.t.bind(n,81125,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-housekeeping-67a.json",81125],da62f019:[()=>n.e("506").then(n.t.bind(n,53158,19)),"@generated/docusaurus-plugin-content-docs/default/p/docs-category-quick-start-1ee.json",53158],dabd6b33:[()=>n.e("8194").then(n.bind(n,70032)),"@site/docs/packaging/advanced-config/eopkg-configuration.md",70032],ddc41e4a:[()=>n.e("5297").then(n.bind(n,58737)),"@site/docs/user/software/sound/index.md",58737],e083e94b:[()=>n.e("5826").then(n.bind(n,37925)),"@site/docs/user/software/third-party/snap.md",37925],e4134e95:[()=>n.e("3928").then(n.t.bind(n,42288,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-devlog-dac.json",42288],e5595530:[()=>n.e("7220").then(n.bind(n,54587)),"@site/docs/user/quick-start/boot-management.md",54587],ea6d9109:[()=>n.e("6381").then(n.t.bind(n,92145,19)),"@generated/docusaurus-plugin-content-docs/default/p/docs-category-web-23c.json",92145],eb074ba1:[()=>n.e("6218").then(n.bind(n,76283)),"@site/docs/user/software/configuration_files.md",76283],ec4e4367:[()=>n.e("8410").then(n.bind(n,74675)),"@site/docs/user/hardware/mobile/android.md",74675],ecdeb26c:[()=>n.e("1828").then(n.bind(n,76047)),"@site/devlog/2024-01-29-dont-call-me-mate.md?truncated=true",76047],ed2a5927:[()=>n.e("7265").then(n.bind(n,62077)),"@site/docs/user/quick-start/software-center/index.md",62077],ef8b811a:[()=>n.e("2134").then(n.t.bind(n,96007,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-authors-790.json",96007],f0629c21:[()=>n.e("4639").then(n.bind(n,19549)),"@site/docs/user/software/web/obs.md",19549],f1d13e1b:[()=>n.e("9227").then(n.bind(n,64954)),"@site/docs/user/editions/mate/tips-and-tricks.md",64954],f32bcb79:[()=>n.e("8025").then(n.t.bind(n,24816,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-firstpost-ddd.json",24816],f35b91b6:[()=>n.e("8719").then(n.bind(n,74298)),"@site/devlog/2024-01-13-welcome-devlog.md",74298],f3d58343:[()=>n.e("7269").then(n.t.bind(n,50073,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-authors-david-9d9.json",50073],f4aa4739:[()=>n.e("9832").then(n.bind(n,19332)),"@site/docs/user/editions/budgie/index.md",19332],f4c9601b:[()=>n.e("2991").then(n.bind(n,5545)),"@site/docs/user/quick-start/installation/secure-boot.md",5545],f6faa2b4:[()=>n.e("1878").then(n.bind(n,51472)),"@site/docs/user/hardware/peripherals/midi-keyboard.md",51472],f81c1134:[()=>n.e("5524").then(n.t.bind(n,5865,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-archive-f05.json",5865],f82cd581:[()=>n.e("1402").then(n.t.bind(n,67553,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-hello-f96.json",67553],f8dd8223:[()=>n.e("5466").then(n.bind(n,2964)),"@site/docs/user/software/development/postgresql.md",2964],fb6dc457:[()=>n.e("7127").then(n.bind(n,65631)),"@site/docs/user/editions/gnome/configuration.md",65631],fb8d634e:[()=>n.e("4983").then(n.bind(n,21144)),"@site/docs/user/editions/gnome/index.md",21144],fc733b73:[()=>n.e("1848").then(n.bind(n,75103)),"@site/docs/user/software/development/r-and-rstudio.md",75103],fe13418f:[()=>n.e("7993").then(n.bind(n,37072)),"@site/devlog/2024-11-21-clean-cleanl-clean.md?truncated=true",37072]};function l(e){let{error:t,retry:n,pastDelay:o}=e;return t?(0,r.jsxs)("div",{style:{textAlign:"center",color:"#fff",backgroundColor:"#fa383e",borderColor:"#fa383e",borderStyle:"solid",borderRadius:"0.25rem",borderWidth:"1px",boxSizing:"border-box",display:"block",padding:"1rem",flex:"0 0 50%",marginLeft:"25%",marginRight:"25%",marginTop:"5rem",maxWidth:"50%",width:"100%"},children:[(0,r.jsx)("p",{children:String(t)}),(0,r.jsx)("div",{children:(0,r.jsx)("button",{type:"button",onClick:n,children:"Retry"})})]}):o?(0,r.jsx)("div",{style:{display:"flex",justifyContent:"center",alignItems:"center",height:"100vh"},children:(0,r.jsx)("svg",{id:"loader",style:{width:128,height:110,position:"absolute",top:"calc(100vh - 64%)"},viewBox:"0 0 45 45",xmlns:"http://www.w3.org/2000/svg",stroke:"#61dafb",children:(0,r.jsxs)("g",{fill:"none",fillRule:"evenodd",transform:"translate(1 1)",strokeWidth:"2",children:[(0,r.jsxs)("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0",children:[(0,r.jsx)("animate",{attributeName:"r",begin:"1.5s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),(0,r.jsx)("animate",{attributeName:"stroke-opacity",begin:"1.5s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),(0,r.jsx)("animate",{attributeName:"stroke-width",begin:"1.5s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})]}),(0,r.jsxs)("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0",children:[(0,r.jsx)("animate",{attributeName:"r",begin:"3s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),(0,r.jsx)("animate",{attributeName:"stroke-opacity",begin:"3s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),(0,r.jsx)("animate",{attributeName:"stroke-width",begin:"3s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})]}),(0,r.jsx)("circle",{cx:"22",cy:"22",r:"8",children:(0,r.jsx)("animate",{attributeName:"r",begin:"0s",dur:"1.5s",values:"6;1;2;3;4;5;6",calcMode:"linear",repeatCount:"indefinite"})})]})})}):null}var c=n("97454"),u=n("22016");function d(e,t){if("*"===e)return a()({loading:l,loader:()=>n.e("9310").then(n.bind(n,11320)),modules:["@theme/NotFound"],webpack:()=>[11320],render(e,t){let n=e.default;return(0,r.jsx)(u.z,{value:{plugin:{name:"native",id:"default"}},children:(0,r.jsx)(n,{...t})})}});let o=i[`${e}-${t}`],d={},p=[],f=[];return Object.entries((0,c.Z)(o)).forEach(e=>{let[t,n]=e,r=s[n];r&&(d[t]=r[0],p.push(r[1]),f.push(r[2]))}),a().Map({loading:l,loader:d,modules:p,webpack:()=>f,render(t,n){let a=JSON.parse(JSON.stringify(o));Object.entries(t).forEach(t=>{let[n,r]=t,o=r.default;if(!o)throw Error(`The page component at ${e} doesn't have a default export. This makes it impossible to render anything. Consider default-exporting a React component.`);("object"==typeof o||"function"==typeof o)&&Object.keys(r).filter(e=>"default"!==e).forEach(e=>{o[e]=r[e]});let i=a,s=n.split(".");s.slice(0,-1).forEach(e=>{i=i[e]}),i[s[s.length-1]]=o});let i=a.__comp;delete a.__comp;let s=a.__context;delete a.__context;let l=a.__props;return delete a.__props,(0,r.jsx)(u.z,{value:s,children:(0,r.jsx)(i,{...a,...l,...n})})}})}let p=[{path:"/blog",component:d("/blog","040"),exact:!0},{path:"/blog/archive",component:d("/blog/archive","182"),exact:!0},{path:"/blog/authors",component:d("/blog/authors","0b7"),exact:!0},{path:"/blog/authors/alfi",component:d("/blog/authors/alfi","625"),exact:!0},{path:"/blog/authors/david",component:d("/blog/authors/david","386"),exact:!0},{path:"/blog/authors/joey",component:d("/blog/authors/joey","979"),exact:!0},{path:"/blog/clean-clean-clean",component:d("/blog/clean-clean-clean","6e9"),exact:!0},{path:"/blog/don't-call-me-mate-pal",component:d("/blog/don't-call-me-mate-pal","4cd"),exact:!0},{path:"/blog/eopkg-is-dead-long-live-eopkg",component:d("/blog/eopkg-is-dead-long-live-eopkg","a0e"),exact:!0},{path:"/blog/solus-optimizing-packages",component:d("/blog/solus-optimizing-packages","3c8"),exact:!0},{path:"/blog/tags",component:d("/blog/tags","287"),exact:!0},{path:"/blog/tags/3",component:d("/blog/tags/3","2ba"),exact:!0},{path:"/blog/tags/clang",component:d("/blog/tags/clang","7cb"),exact:!0},{path:"/blog/tags/cleanup",component:d("/blog/tags/cleanup","391"),exact:!0},{path:"/blog/tags/devlog",component:d("/blog/tags/devlog","9e2"),exact:!0},{path:"/blog/tags/eopkg",component:d("/blog/tags/eopkg","a41"),exact:!0},{path:"/blog/tags/firstpost",component:d("/blog/tags/firstpost","c48"),exact:!0},{path:"/blog/tags/glibc",component:d("/blog/tags/glibc","1b5"),exact:!0},{path:"/blog/tags/gnu",component:d("/blog/tags/gnu","94b"),exact:!0},{path:"/blog/tags/hello",component:d("/blog/tags/hello","d49"),exact:!0},{path:"/blog/tags/housekeeping",component:d("/blog/tags/housekeeping","339"),exact:!0},{path:"/blog/tags/hwcaps",component:d("/blog/tags/hwcaps","6d6"),exact:!0},{path:"/blog/tags/llvm",component:d("/blog/tags/llvm","aff"),exact:!0},{path:"/blog/tags/lto",component:d("/blog/tags/lto","24f"),exact:!0},{path:"/blog/tags/mate",component:d("/blog/tags/mate","e08"),exact:!0},{path:"/blog/tags/moss",component:d("/blog/tags/moss","e04"),exact:!0},{path:"/blog/tags/optimization",component:d("/blog/tags/optimization","535"),exact:!0},{path:"/blog/tags/packaging",component:d("/blog/tags/packaging","07c"),exact:!0},{path:"/blog/tags/pgo",component:d("/blog/tags/pgo","a42"),exact:!0},{path:"/blog/tags/solus",component:d("/blog/tags/solus","601"),exact:!0},{path:"/blog/tags/x-86-64-v-3",component:d("/blog/tags/x-86-64-v-3","716"),exact:!0},{path:"/blog/welcome-solus-devlog-v1",component:d("/blog/welcome-solus-devlog-v1","418"),exact:!0},{path:"/docs",component:d("/docs","1d8"),routes:[{path:"/docs",component:d("/docs","ad9"),routes:[{path:"/docs",component:d("/docs","38d"),routes:[{path:"/docs/category/advanced-configuration",component:d("/docs/category/advanced-configuration","21a"),exact:!0,sidebar:"packagingSidebar"},{path:"/docs/category/camera",component:d("/docs/category/camera","eec"),exact:!0,sidebar:"userSidebar"},{path:"/docs/category/compatibility",component:d("/docs/category/compatibility","41d"),exact:!0,sidebar:"userSidebar"},{path:"/docs/category/contributing",component:d("/docs/category/contributing","524"),exact:!0,sidebar:"userSidebar"},{path:"/docs/category/localization",component:d("/docs/category/localization","976"),exact:!0,sidebar:"userSidebar"},{path:"/docs/category/mobile",component:d("/docs/category/mobile","8b8"),exact:!0,sidebar:"userSidebar"},{path:"/docs/category/networking",component:d("/docs/category/networking","2c7"),exact:!0,sidebar:"userSidebar"},{path:"/docs/category/package-management",component:d("/docs/category/package-management","540"),exact:!0,sidebar:"userSidebar"},{path:"/docs/category/peripherals",component:d("/docs/category/peripherals","b31"),exact:!0,sidebar:"userSidebar"},{path:"/docs/category/procedures",component:d("/docs/category/procedures","59d"),exact:!0,sidebar:"packagingSidebar"},{path:"/docs/category/quick-start",component:d("/docs/category/quick-start","16b"),exact:!0,sidebar:"userSidebar"},{path:"/docs/category/software",component:d("/docs/category/software","5c6"),exact:!0,sidebar:"userSidebar"},{path:"/docs/category/utilities",component:d("/docs/category/utilities","7bd"),exact:!0,sidebar:"userSidebar"},{path:"/docs/category/virtualization",component:d("/docs/category/virtualization","cd2"),exact:!0,sidebar:"userSidebar"},{path:"/docs/category/web",component:d("/docs/category/web","f03"),exact:!0,sidebar:"userSidebar"},{path:"/docs/packaging/",component:d("/docs/packaging/","45c"),exact:!0,sidebar:"packagingSidebar"},{path:"/docs/packaging/advanced-config/eopkg-configuration",component:d("/docs/packaging/advanced-config/eopkg-configuration","63b"),exact:!0,sidebar:"packagingSidebar"},{path:"/docs/packaging/advanced-config/local-repository",component:d("/docs/packaging/advanced-config/local-repository","e29"),exact:!0,sidebar:"packagingSidebar"},{path:"/docs/packaging/appstream-metainfo",component:d("/docs/packaging/appstream-metainfo","296"),exact:!0,sidebar:"packagingSidebar"},{path:"/docs/packaging/creating-a-new-package",component:d("/docs/packaging/creating-a-new-package","365"),exact:!0,sidebar:"packagingSidebar"},{path:"/docs/packaging/git-basics",component:d("/docs/packaging/git-basics","c75"),exact:!0,sidebar:"packagingSidebar"},{path:"/docs/packaging/monitoring.yml",component:d("/docs/packaging/monitoring.yml","cf6"),exact:!0,sidebar:"packagingSidebar"},{path:"/docs/packaging/package.yml",component:d("/docs/packaging/package.yml","47f"),exact:!0,sidebar:"packagingSidebar"},{path:"/docs/packaging/packaging-changes",component:d("/docs/packaging/packaging-changes","983"),exact:!0,sidebar:"packagingSidebar"},{path:"/docs/packaging/packaging-practices",component:d("/docs/packaging/packaging-practices","f17"),exact:!0,sidebar:"packagingSidebar"},{path:"/docs/packaging/prepare-for-packaging",component:d("/docs/packaging/prepare-for-packaging","d33"),exact:!0,sidebar:"packagingSidebar"},{path:"/docs/packaging/procedures/maintainership",component:d("/docs/packaging/procedures/maintainership","efa"),exact:!0,sidebar:"packagingSidebar"},{path:"/docs/packaging/procedures/package-inclusion",component:d("/docs/packaging/procedures/package-inclusion","e6e"),exact:!0,sidebar:"packagingSidebar"},{path:"/docs/packaging/procedures/release-processes",component:d("/docs/packaging/procedures/release-processes","cd4"),exact:!0,sidebar:"packagingSidebar"},{path:"/docs/packaging/procedures/request-a-package",component:d("/docs/packaging/procedures/request-a-package","088"),exact:!0,sidebar:"packagingSidebar"},{path:"/docs/packaging/procedures/request-a-package-update",component:d("/docs/packaging/procedures/request-a-package-update","98c"),exact:!0,sidebar:"packagingSidebar"},{path:"/docs/packaging/stack-rebuilds",component:d("/docs/packaging/stack-rebuilds","6dc"),exact:!0,sidebar:"packagingSidebar"},{path:"/docs/packaging/submitting-a-pull-request",component:d("/docs/packaging/submitting-a-pull-request","900"),exact:!0,sidebar:"packagingSidebar"},{path:"/docs/packaging/testing-a-package",component:d("/docs/packaging/testing-a-package","8d0"),exact:!0,sidebar:"packagingSidebar"},{path:"/docs/packaging/translation-instructions",component:d("/docs/packaging/translation-instructions","8ed"),exact:!0,sidebar:"packagingSidebar"},{path:"/docs/packaging/troubleshooting-packaging",component:d("/docs/packaging/troubleshooting-packaging","031"),exact:!0,sidebar:"packagingSidebar"},{path:"/docs/packaging/update-dev-environment",component:d("/docs/packaging/update-dev-environment","d79"),exact:!0,sidebar:"packagingSidebar"},{path:"/docs/packaging/updating-an-existing-package",component:d("/docs/packaging/updating-an-existing-package","3f6"),exact:!0,sidebar:"packagingSidebar"},{path:"/docs/packaging/your-first-package-update",component:d("/docs/packaging/your-first-package-update","97e"),exact:!0,sidebar:"packagingSidebar"},{path:"/docs/user/contributing/community-guidelines",component:d("/docs/user/contributing/community-guidelines","4a0"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/contributing/getting-involved",component:d("/docs/user/contributing/getting-involved","7b3"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/contributing/style",component:d("/docs/user/contributing/style","210"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/contributing/testing-an-iso",component:d("/docs/user/contributing/testing-an-iso","6e0"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/editions/",component:d("/docs/user/editions/","f3f"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/editions/budgie/",component:d("/docs/user/editions/budgie/","17a"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/editions/budgie/configuration",component:d("/docs/user/editions/budgie/configuration","271"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/editions/budgie/tips-and-tricks",component:d("/docs/user/editions/budgie/tips-and-tricks","699"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/editions/gnome/",component:d("/docs/user/editions/gnome/","91d"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/editions/gnome/configuration",component:d("/docs/user/editions/gnome/configuration","e73"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/editions/gnome/tips-and-tricks",component:d("/docs/user/editions/gnome/tips-and-tricks","0d4"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/editions/mate/",component:d("/docs/user/editions/mate/","9d7"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/editions/mate/configuration",component:d("/docs/user/editions/mate/configuration","e10"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/editions/mate/tips-and-tricks",component:d("/docs/user/editions/mate/tips-and-tricks","883"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/editions/plasma/",component:d("/docs/user/editions/plasma/","e2b"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/editions/plasma/configuration",component:d("/docs/user/editions/plasma/configuration","09d"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/editions/plasma/tips-and-tricks",component:d("/docs/user/editions/plasma/tips-and-tricks","165"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/editions/xfce/",component:d("/docs/user/editions/xfce/","59c"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/editions/xfce/configuration",component:d("/docs/user/editions/xfce/configuration","98e"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/editions/xfce/tips-and-tricks",component:d("/docs/user/editions/xfce/tips-and-tricks","acf"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/hardware/",component:d("/docs/user/hardware/","92e"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/hardware/compatibility/laptops",component:d("/docs/user/hardware/compatibility/laptops","b49"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/hardware/compatibility/wifi",component:d("/docs/user/hardware/compatibility/wifi","d8c"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/hardware/mobile/android",component:d("/docs/user/hardware/mobile/android","0fc"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/hardware/mobile/apple",component:d("/docs/user/hardware/mobile/apple","ed6"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/hardware/peripherals/mice-and-touchpads",component:d("/docs/user/hardware/peripherals/mice-and-touchpads","cba"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/hardware/peripherals/midi-keyboard",component:d("/docs/user/hardware/peripherals/midi-keyboard","4b2"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/hardware/peripherals/printers-and-scanners",component:d("/docs/user/hardware/peripherals/printers-and-scanners","c19"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/intro",component:d("/docs/user/intro","b98"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/package-management/basics",component:d("/docs/user/package-management/basics","fd4"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/package-management/history-and-rollback",component:d("/docs/user/package-management/history-and-rollback","316"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/package-management/repo-management",component:d("/docs/user/package-management/repo-management","36a"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/privacy",component:d("/docs/user/privacy","813"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/quick-start/boot-management",component:d("/docs/user/quick-start/boot-management","142"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/quick-start/default-applications",component:d("/docs/user/quick-start/default-applications","082"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/quick-start/installation/",component:d("/docs/user/quick-start/installation/","ec6"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/quick-start/installation/disks",component:d("/docs/user/quick-start/installation/disks","c6d"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/quick-start/installation/secure-boot",component:d("/docs/user/quick-start/installation/secure-boot","73f"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/quick-start/installation/system-requirements",component:d("/docs/user/quick-start/installation/system-requirements","a3b"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/quick-start/software-center/",component:d("/docs/user/quick-start/software-center/","988"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/software/camera/droidcam",component:d("/docs/user/software/camera/droidcam","851"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/software/command-line/",component:d("/docs/user/software/command-line/","0d6"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/software/configuration_files",component:d("/docs/user/software/configuration_files","5ee"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/software/desktops/",component:d("/docs/user/software/desktops/","bee"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/software/development/",component:d("/docs/user/software/development/","a16"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/software/development/containers",component:d("/docs/user/software/development/containers","ce1"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/software/development/java",component:d("/docs/user/software/development/java","82c"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/software/development/postgresql",component:d("/docs/user/software/development/postgresql","386"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/software/development/r-and-rstudio",component:d("/docs/user/software/development/r-and-rstudio","4fe"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/software/development/rust",component:d("/docs/user/software/development/rust","6ad"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/software/development/web",component:d("/docs/user/software/development/web","854"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/software/gaming/",component:d("/docs/user/software/gaming/","344"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/software/localization/ibus",component:d("/docs/user/software/localization/ibus","f55"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/software/networking/samba",component:d("/docs/user/software/networking/samba","6fe"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/software/networking/tigervnc",component:d("/docs/user/software/networking/tigervnc","a10"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/software/networking/wireshark",component:d("/docs/user/software/networking/wireshark","66a"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/software/networking/xrdp",component:d("/docs/user/software/networking/xrdp","c71"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/software/sound/",component:d("/docs/user/software/sound/","501"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/software/third-party/",component:d("/docs/user/software/third-party/","1a1"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/software/third-party/snap",component:d("/docs/user/software/third-party/snap","037"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/software/utilities/ksysguard",component:d("/docs/user/software/utilities/ksysguard","02b"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/software/utilities/kwallet",component:d("/docs/user/software/utilities/kwallet","1c7"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/software/virtualization/virtualbox",component:d("/docs/user/software/virtualization/virtualbox","df4"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/software/web/obs",component:d("/docs/user/software/web/obs","10f"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/troubleshooting/",component:d("/docs/user/troubleshooting/","d20"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/troubleshooting/boot-rescue",component:d("/docs/user/troubleshooting/boot-rescue","248"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/troubleshooting/installation",component:d("/docs/user/troubleshooting/installation","0b0"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/troubleshooting/plasma",component:d("/docs/user/troubleshooting/plasma","fa2"),exact:!0,sidebar:"userSidebar"}]}]}]},{path:"/",component:d("/","e5f"),exact:!0},{path:"*",component:d("*")}]},22372:function(e){!function(){var t,n,r,o,a,i,s,l,c,u,d,p,f,g,m,h,b,y,v,w,k,S,x,_,E,O,P,j,C,T=function(e){var t=new T.Builder;return t.pipeline.add(T.trimmer,T.stopWordFilter,T.stemmer),t.searchPipeline.add(T.stemmer),e.call(t,t),t.build()};T.version="2.3.9",T.utils={},T.utils.warn=(t=this,function(e){t.console&&console.warn&&console.warn(e)}),T.utils.asString=function(e){return null==e?"":e.toString()},T.utils.clone=function(e){if(null==e)return e;for(var t=Object.create(null),n=Object.keys(e),r=0;r<n.length;r++){var o=n[r],a=e[o];if(Array.isArray(a)){t[o]=a.slice();continue}if("string"==typeof a||"number"==typeof a||"boolean"==typeof a){t[o]=a;continue}throw TypeError("clone is not deep and does not support nested objects")}return t},T.FieldRef=function(e,t,n){this.docRef=e,this.fieldName=t,this._stringValue=n},T.FieldRef.joiner="/",T.FieldRef.fromString=function(e){var t=e.indexOf(T.FieldRef.joiner);if(-1===t)throw"malformed field ref string";var n=e.slice(0,t),r=e.slice(t+1);return new T.FieldRef(r,n,e)},T.FieldRef.prototype.toString=function(){return void 0==this._stringValue&&(this._stringValue=this.fieldName+T.FieldRef.joiner+this.docRef),this._stringValue},T.Set=function(e){if(this.elements=Object.create(null),e){this.length=e.length;for(var t=0;t<this.length;t++)this.elements[e[t]]=!0}else this.length=0},T.Set.complete={intersect:function(e){return e},union:function(){return this},contains:function(){return!0}},T.Set.empty={intersect:function(){return this},union:function(e){return e},contains:function(){return!1}},T.Set.prototype.contains=function(e){return!!this.elements[e]},T.Set.prototype.intersect=function(e){var t,n,r,o=[];if(e===T.Set.complete)return this;if(e===T.Set.empty)return e;this.length<e.length?(t=this,n=e):(t=e,n=this),r=Object.keys(t.elements);for(var a=0;a<r.length;a++){var i=r[a];i in n.elements&&o.push(i)}return new T.Set(o)},T.Set.prototype.union=function(e){return e===T.Set.complete?T.Set.complete:e===T.Set.empty?this:new T.Set(Object.keys(this.elements).concat(Object.keys(e.elements)))},T.idf=function(e,t){var n=0;for(var r in e)"_index"!=r&&(n+=Object.keys(e[r]).length);return Math.log(1+Math.abs((t-n+.5)/(n+.5)))},T.Token=function(e,t){this.str=e||"",this.metadata=t||{}},T.Token.prototype.toString=function(){return this.str},T.Token.prototype.update=function(e){return this.str=e(this.str,this.metadata),this},T.Token.prototype.clone=function(e){return e=e||function(e){return e},new T.Token(e(this.str,this.metadata),this.metadata)},T.tokenizer=function(e,t){if(null==e||void 0==e)return[];if(Array.isArray(e))return e.map(function(e){return new T.Token(T.utils.asString(e).toLowerCase(),T.utils.clone(t))});for(var n=e.toString().toLowerCase(),r=n.length,o=[],a=0,i=0;a<=r;a++){var s=n.charAt(a),l=a-i;if(s.match(T.tokenizer.separator)||a==r){if(l>0){var c=T.utils.clone(t)||{};c.position=[i,l],c.index=o.length,o.push(new T.Token(n.slice(i,a),c))}i=a+1}}return o},T.tokenizer.separator=/[\s\-]+/,T.Pipeline=function(){this._stack=[]},T.Pipeline.registeredFunctions=Object.create(null),T.Pipeline.registerFunction=function(e,t){t in this.registeredFunctions&&T.utils.warn("Overwriting existing registered function: "+t),e.label=t,T.Pipeline.registeredFunctions[e.label]=e},T.Pipeline.warnIfFunctionNotRegistered=function(e){!(e.label&&e.label in this.registeredFunctions)&&T.utils.warn("Function is not registered with pipeline. This may cause problems when serialising the index.\n",e)},T.Pipeline.load=function(e){var t=new T.Pipeline;return e.forEach(function(e){var n=T.Pipeline.registeredFunctions[e];if(n)t.add(n);else throw Error("Cannot load unregistered function: "+e)}),t},T.Pipeline.prototype.add=function(){var e=Array.prototype.slice.call(arguments);e.forEach(function(e){T.Pipeline.warnIfFunctionNotRegistered(e),this._stack.push(e)},this)},T.Pipeline.prototype.after=function(e,t){T.Pipeline.warnIfFunctionNotRegistered(t);var n=this._stack.indexOf(e);if(-1==n)throw Error("Cannot find existingFn");n+=1,this._stack.splice(n,0,t)},T.Pipeline.prototype.before=function(e,t){T.Pipeline.warnIfFunctionNotRegistered(t);var n=this._stack.indexOf(e);if(-1==n)throw Error("Cannot find existingFn");this._stack.splice(n,0,t)},T.Pipeline.prototype.remove=function(e){var t=this._stack.indexOf(e);if(-1!=t)this._stack.splice(t,1)},T.Pipeline.prototype.run=function(e){for(var t=this._stack.length,n=0;n<t;n++){for(var r=this._stack[n],o=[],a=0;a<e.length;a++){var i=r(e[a],a,e);if(null!=i&&""!==i){if(Array.isArray(i))for(var s=0;s<i.length;s++)o.push(i[s]);else o.push(i)}}e=o}return e},T.Pipeline.prototype.runString=function(e,t){var n=new T.Token(e,t);return this.run([n]).map(function(e){return e.toString()})},T.Pipeline.prototype.reset=function(){this._stack=[]},T.Pipeline.prototype.toJSON=function(){return this._stack.map(function(e){return T.Pipeline.warnIfFunctionNotRegistered(e),e.label})},T.Vector=function(e){this._magnitude=0,this.elements=e||[]},T.Vector.prototype.positionForIndex=function(e){if(0==this.elements.length)return 0;for(var t=0,n=this.elements.length/2,r=n-t,o=Math.floor(r/2),a=this.elements[2*o];r>1&&(a<e&&(t=o),a>e&&(n=o),a!=e);){;r=n-t,o=t+Math.floor(r/2),a=this.elements[2*o]}return a==e||a>e?2*o:a<e?(o+1)*2:void 0},T.Vector.prototype.insert=function(e,t){this.upsert(e,t,function(){throw"duplicate index"})},T.Vector.prototype.upsert=function(e,t,n){this._magnitude=0;var r=this.positionForIndex(e);this.elements[r]==e?this.elements[r+1]=n(this.elements[r+1],t):this.elements.splice(r,0,e,t)},T.Vector.prototype.magnitude=function(){if(this._magnitude)return this._magnitude;for(var e=0,t=this.elements.length,n=1;n<t;n+=2){var r=this.elements[n];e+=r*r}return this._magnitude=Math.sqrt(e)},T.Vector.prototype.dot=function(e){for(var t=0,n=this.elements,r=e.elements,o=n.length,a=r.length,i=0,s=0,l=0,c=0;l<o&&c<a;)i=n[l],i<(s=r[c])?l+=2:i>s?c+=2:i==s&&(t+=n[l+1]*r[c+1],l+=2,c+=2);return t},T.Vector.prototype.similarity=function(e){return this.dot(e)/this.magnitude()||0},T.Vector.prototype.toArray=function(){for(var e=Array(this.elements.length/2),t=1,n=0;t<this.elements.length;t+=2,n++)e[n]=this.elements[t];return e},T.Vector.prototype.toJSON=function(){return this.elements},T.stemmer=(n={ational:"ate",tional:"tion",enci:"ence",anci:"ance",izer:"ize",bli:"ble",alli:"al",entli:"ent",eli:"e",ousli:"ous",ization:"ize",ation:"ate",ator:"ate",alism:"al",iveness:"ive",fulness:"ful",ousness:"ous",aliti:"al",iviti:"ive",biliti:"ble",logi:"log"},r={icate:"ic",ative:"",alize:"al",iciti:"ic",ical:"ic",ful:"",ness:""},s=RegExp("^("+(a="[^aeiou][^aeiouy]*")+")?"+(i=(o="[aeiouy]")+"[aeiou]*")+a),l=RegExp("^("+a+")?"+i+a+i+a),c=RegExp("^("+a+")?"+i+a+"("+i+")?$"),u=RegExp("^("+a+")?"+o),d=/^(.+?)(ss|i)es$/,p=/^(.+?)([^s])s$/,f=/^(.+?)eed$/,g=/^(.+?)(ed|ing)$/,m=/.$/,h=/(at|bl|iz)$/,b=RegExp("([^aeiouylsz])\\1$"),y=RegExp("^"+a+o+"[^aeiouwxy]$"),v=/^(.+?[^aeiou])y$/,w=/^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/,k=/^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/,S=/^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/,x=/^(.+?)(s|t)(ion)$/,_=/^(.+?)e$/,E=/ll$/,O=RegExp("^"+a+o+"[^aeiouwxy]$"),P=function(e){var t,o,a,i,P,j;if(e.length<3)return e;if("y"==(a=e.substr(0,1))&&(e=a.toUpperCase()+e.substr(1)),i=d,P=p,i.test(e)?e=e.replace(i,"$1$2"):P.test(e)&&(e=e.replace(P,"$1$2")),i=f,P=g,i.test(e)){var C=i.exec(e);(i=s).test(C[1])&&(i=m,e=e.replace(i,""))}else if(P.test(e)){var C=P.exec(e);if(t=C[1],(P=u).test(t)){e=t,P=h,j=b;P.test(e)?e+="e":j.test(e)?(i=m,e=e.replace(i,"")):y.test(e)&&(e+="e")}}if((i=v).test(e)){var C=i.exec(e);e=(t=C[1])+"i"}if((i=w).test(e)){var C=i.exec(e);t=C[1],o=C[2],(i=s).test(t)&&(e=t+n[o])}if((i=k).test(e)){var C=i.exec(e);t=C[1],o=C[2],(i=s).test(t)&&(e=t+r[o])}if(i=S,P=x,i.test(e)){var C=i.exec(e);t=C[1],(i=l).test(t)&&(e=t)}else if(P.test(e)){var C=P.exec(e);t=C[1]+C[2],(P=l).test(t)&&(e=t)}if((i=_).test(e)){var C=i.exec(e);t=C[1],i=l,P=c,j=O,(i.test(t)||P.test(t)&&!j.test(t))&&(e=t)}return i=E,P=l,i.test(e)&&P.test(e)&&(i=m,e=e.replace(i,"")),"y"==a&&(e=a.toLowerCase()+e.substr(1)),e},function(e){return e.update(P)}),T.Pipeline.registerFunction(T.stemmer,"stemmer"),T.generateStopWordFilter=function(e){var t=e.reduce(function(e,t){return e[t]=t,e},{});return function(e){if(e&&t[e.toString()]!==e.toString())return e}},T.stopWordFilter=T.generateStopWordFilter(["a","able","about","across","after","all","almost","also","am","among","an","and","any","are","as","at","be","because","been","but","by","can","cannot","could","dear","did","do","does","either","else","ever","every","for","from","get","got","had","has","have","he","her","hers","him","his","how","however","i","if","in","into","is","it","its","just","least","let","like","likely","may","me","might","most","must","my","neither","no","nor","not","of","off","often","on","only","or","other","our","own","rather","said","say","says","she","should","since","so","some","than","that","the","their","them","then","there","these","they","this","tis","to","too","twas","us","wants","was","we","were","what","when","where","which","while","who","whom","why","will","with","would","yet","you","your"]),T.Pipeline.registerFunction(T.stopWordFilter,"stopWordFilter"),T.trimmer=function(e){return e.update(function(e){return e.replace(/^\W+/,"").replace(/\W+$/,"")})},T.Pipeline.registerFunction(T.trimmer,"trimmer"),T.TokenSet=function(){this.final=!1,this.edges={},this.id=T.TokenSet._nextId,T.TokenSet._nextId+=1},T.TokenSet._nextId=1,T.TokenSet.fromArray=function(e){for(var t=new T.TokenSet.Builder,n=0,r=e.length;n<r;n++)t.insert(e[n]);return t.finish(),t.root},T.TokenSet.fromClause=function(e){return"editDistance"in e?T.TokenSet.fromFuzzyString(e.term,e.editDistance):T.TokenSet.fromString(e.term)},T.TokenSet.fromFuzzyString=function(e,t){for(var n=new T.TokenSet,r=[{node:n,editsRemaining:t,str:e}];r.length;){var o=r.pop();if(o.str.length>0){var a,i=o.str.charAt(0);i in o.node.edges?a=o.node.edges[i]:(a=new T.TokenSet,o.node.edges[i]=a),1==o.str.length&&(a.final=!0),r.push({node:a,editsRemaining:o.editsRemaining,str:o.str.slice(1)})}if(0!=o.editsRemaining){if("*"in o.node.edges)var s=o.node.edges["*"];else{var s=new T.TokenSet;o.node.edges["*"]=s}if(0==o.str.length&&(s.final=!0),r.push({node:s,editsRemaining:o.editsRemaining-1,str:o.str}),o.str.length>1&&r.push({node:o.node,editsRemaining:o.editsRemaining-1,str:o.str.slice(1)}),1==o.str.length&&(o.node.final=!0),o.str.length>=1){if("*"in o.node.edges)var l=o.node.edges["*"];else{var l=new T.TokenSet;o.node.edges["*"]=l}1==o.str.length&&(l.final=!0),r.push({node:l,editsRemaining:o.editsRemaining-1,str:o.str.slice(1)})}if(o.str.length>1){var c,u=o.str.charAt(0),d=o.str.charAt(1);d in o.node.edges?c=o.node.edges[d]:(c=new T.TokenSet,o.node.edges[d]=c),1==o.str.length&&(c.final=!0),r.push({node:c,editsRemaining:o.editsRemaining-1,str:u+o.str.slice(2)})}}}return n},T.TokenSet.fromString=function(e){for(var t=new T.TokenSet,n=t,r=0,o=e.length;r<o;r++){var a=e[r],i=r==o-1;if("*"==a)t.edges[a]=t,t.final=i;else{var s=new T.TokenSet;s.final=i,t.edges[a]=s,t=s}}return n},T.TokenSet.prototype.toArray=function(){for(var e=[],t=[{prefix:"",node:this}];t.length;){var n=t.pop(),r=Object.keys(n.node.edges),o=r.length;n.node.final&&(n.prefix.charAt(0),e.push(n.prefix));for(var a=0;a<o;a++){var i=r[a];t.push({prefix:n.prefix.concat(i),node:n.node.edges[i]})}}return e},T.TokenSet.prototype.toString=function(){if(this._str)return this._str;for(var e=this.final?"1":"0",t=Object.keys(this.edges).sort(),n=t.length,r=0;r<n;r++){var o=t[r],a=this.edges[o];e=e+o+a.id}return e},T.TokenSet.prototype.intersect=function(e){for(var t=new T.TokenSet,n=void 0,r=[{qNode:e,output:t,node:this}];r.length;){for(var o=Object.keys((n=r.pop()).qNode.edges),a=o.length,i=Object.keys(n.node.edges),s=i.length,l=0;l<a;l++){for(var c=o[l],u=0;u<s;u++){var d=i[u];if(d==c||"*"==c){var p=n.node.edges[d],f=n.qNode.edges[c],g=p.final&&f.final,m=void 0;d in n.output.edges?(m=n.output.edges[d]).final=m.final||g:((m=new T.TokenSet).final=g,n.output.edges[d]=m),r.push({qNode:f,output:m,node:p})}}}}return t},T.TokenSet.Builder=function(){this.previousWord="",this.root=new T.TokenSet,this.uncheckedNodes=[],this.minimizedNodes={}},T.TokenSet.Builder.prototype.insert=function(e){var t,n=0;if(e<this.previousWord)throw Error("Out of order word insertion");for(var r=0;r<e.length&&r<this.previousWord.length&&e[r]==this.previousWord[r];r++)n++;this.minimize(n),t=0==this.uncheckedNodes.length?this.root:this.uncheckedNodes[this.uncheckedNodes.length-1].child;for(var r=n;r<e.length;r++){var o=new T.TokenSet,a=e[r];t.edges[a]=o,this.uncheckedNodes.push({parent:t,char:a,child:o}),t=o}t.final=!0,this.previousWord=e},T.TokenSet.Builder.prototype.finish=function(){this.minimize(0)},T.TokenSet.Builder.prototype.minimize=function(e){for(var t=this.uncheckedNodes.length-1;t>=e;t--){var n=this.uncheckedNodes[t],r=n.child.toString();r in this.minimizedNodes?n.parent.edges[n.char]=this.minimizedNodes[r]:(n.child._str=r,this.minimizedNodes[r]=n.child),this.uncheckedNodes.pop()}},T.Index=function(e){this.invertedIndex=e.invertedIndex,this.fieldVectors=e.fieldVectors,this.tokenSet=e.tokenSet,this.fields=e.fields,this.pipeline=e.pipeline},T.Index.prototype.search=function(e){return this.query(function(t){new T.QueryParser(e,t).parse()})},T.Index.prototype.query=function(e){for(var t=new T.Query(this.fields),n=Object.create(null),r=Object.create(null),o=Object.create(null),a=Object.create(null),i=Object.create(null),s=0;s<this.fields.length;s++)r[this.fields[s]]=new T.Vector;e.call(t,t);for(var s=0;s<t.clauses.length;s++){var l=t.clauses[s],c=null,u=T.Set.empty;c=l.usePipeline?this.pipeline.runString(l.term,{fields:l.fields}):[l.term];for(var d=0;d<c.length;d++){var p=c[d];l.term=p;var f=T.TokenSet.fromClause(l),g=this.tokenSet.intersect(f).toArray();if(0===g.length&&l.presence===T.Query.presence.REQUIRED){for(var m=0;m<l.fields.length;m++){var h=l.fields[m];a[h]=T.Set.empty}break}for(var b=0;b<g.length;b++){for(var y=g[b],v=this.invertedIndex[y],w=v._index,m=0;m<l.fields.length;m++){var h=l.fields[m],k=v[h],S=Object.keys(k),x=y+"/"+h,_=new T.Set(S);if(l.presence==T.Query.presence.REQUIRED&&(u=u.union(_),void 0===a[h]&&(a[h]=T.Set.complete)),l.presence==T.Query.presence.PROHIBITED){void 0===i[h]&&(i[h]=T.Set.empty),i[h]=i[h].union(_);continue}if(r[h].upsert(w,l.boost,function(e,t){return e+t}),!o[x]){for(var E=0;E<S.length;E++){var O,P=S[E],j=new T.FieldRef(P,h),C=k[P];void 0===(O=n[j])?n[j]=new T.MatchData(y,h,C):O.add(y,h,C)}o[x]=!0}}}}if(l.presence===T.Query.presence.REQUIRED)for(var m=0;m<l.fields.length;m++){var h=l.fields[m];a[h]=a[h].intersect(u)}}for(var I=T.Set.complete,A=T.Set.empty,s=0;s<this.fields.length;s++){var h=this.fields[s];a[h]&&(I=I.intersect(a[h])),i[h]&&(A=A.union(i[h]))}var N=Object.keys(n),L=[],R=Object.create(null);if(t.isNegated()){N=Object.keys(this.fieldVectors);for(var s=0;s<N.length;s++){var j=N[s],D=T.FieldRef.fromString(j);n[j]=new T.MatchData}}for(var s=0;s<N.length;s++){var D=T.FieldRef.fromString(N[s]),F=D.docRef;if(!(!I.contains(F)||A.contains(F))){var M,B=this.fieldVectors[D],z=r[D.fieldName].similarity(B);if(void 0!==(M=R[F]))M.score+=z,M.matchData.combine(n[D]);else{var $={ref:F,score:z,matchData:n[D]};R[F]=$,L.push($)}}}return L.sort(function(e,t){return t.score-e.score})},T.Index.prototype.toJSON=function(){var e=Object.keys(this.invertedIndex).sort().map(function(e){return[e,this.invertedIndex[e]]},this),t=Object.keys(this.fieldVectors).map(function(e){return[e,this.fieldVectors[e].toJSON()]},this);return{version:T.version,fields:this.fields,fieldVectors:t,invertedIndex:e,pipeline:this.pipeline.toJSON()}},T.Index.load=function(e){var t={},n={},r=e.fieldVectors,o=Object.create(null),a=e.invertedIndex,i=new T.TokenSet.Builder,s=T.Pipeline.load(e.pipeline);e.version!=T.version&&T.utils.warn("Version mismatch when loading serialised index. Current version of lunr '"+T.version+"' does not match serialized index '"+e.version+"'");for(var l=0;l<r.length;l++){var c=r[l],u=c[0],d=c[1];n[u]=new T.Vector(d)}for(var l=0;l<a.length;l++){var c=a[l],p=c[0],f=c[1];i.insert(p),o[p]=f}return i.finish(),t.fields=e.fields,t.fieldVectors=n,t.invertedIndex=o,t.tokenSet=i.root,t.pipeline=s,new T.Index(t)},T.Builder=function(){this._ref="id",this._fields=Object.create(null),this._documents=Object.create(null),this.invertedIndex=Object.create(null),this.fieldTermFrequencies={},this.fieldLengths={},this.tokenizer=T.tokenizer,this.pipeline=new T.Pipeline,this.searchPipeline=new T.Pipeline,this.documentCount=0,this._b=.75,this._k1=1.2,this.termIndex=0,this.metadataWhitelist=[]},T.Builder.prototype.ref=function(e){this._ref=e},T.Builder.prototype.field=function(e,t){if(/\//.test(e))throw RangeError("Field '"+e+"' contains illegal character '/'");this._fields[e]=t||{}},T.Builder.prototype.b=function(e){e<0?this._b=0:e>1?this._b=1:this._b=e},T.Builder.prototype.k1=function(e){this._k1=e},T.Builder.prototype.add=function(e,t){var n=e[this._ref],r=Object.keys(this._fields);this._documents[n]=t||{},this.documentCount+=1;for(var o=0;o<r.length;o++){var a=r[o],i=this._fields[a].extractor,s=this._fields[a].isLiteral??!1,l=i?i(e):e[a],c=s?[l]:this.tokenizer(l,{fields:[a]}),u=s?c:this.pipeline.run(c),d=new T.FieldRef(n,a),p=Object.create(null);this.fieldTermFrequencies[d]=p,this.fieldLengths[d]=0,this.fieldLengths[d]+=u.length;for(var f=0;f<u.length;f++){var g=u[f];if(void 0==p[g]&&(p[g]=0),p[g]+=1,void 0==this.invertedIndex[g]){var m=Object.create(null);m._index=this.termIndex,this.termIndex+=1;for(var h=0;h<r.length;h++)m[r[h]]=Object.create(null);this.invertedIndex[g]=m}void 0==this.invertedIndex[g][a][n]&&(this.invertedIndex[g][a][n]=Object.create(null));for(var b=0;b<this.metadataWhitelist.length;b++){var y=this.metadataWhitelist[b],v=g.metadata[y];void 0==this.invertedIndex[g][a][n][y]&&(this.invertedIndex[g][a][n][y]=[]),this.invertedIndex[g][a][n][y].push(v)}}}},T.Builder.prototype.calculateAverageFieldLengths=function(){for(var e=Object.keys(this.fieldLengths),t=e.length,n={},r={},o=0;o<t;o++){var a=T.FieldRef.fromString(e[o]),i=a.fieldName;r[i]||(r[i]=0),r[i]+=1,n[i]||(n[i]=0),n[i]+=this.fieldLengths[a]}for(var s=Object.keys(this._fields),o=0;o<s.length;o++){var l=s[o];n[l]=n[l]/r[l]}this.averageFieldLength=n},T.Builder.prototype.createFieldVectors=function(){for(var e={},t=Object.keys(this.fieldTermFrequencies),n=t.length,r=Object.create(null),o=0;o<n;o++){for(var a=T.FieldRef.fromString(t[o]),i=a.fieldName,s=this.fieldLengths[a],l=new T.Vector,c=this.fieldTermFrequencies[a],u=Object.keys(c),d=u.length,p=this._fields[i].boost||1,f=this._documents[a.docRef].boost||1,g=0;g<d;g++){var m,h,b,y=u[g],v=c[y],w=this.invertedIndex[y]._index;void 0===r[y]?(m=T.idf(this.invertedIndex[y],this.documentCount),r[y]=m):m=r[y],b=Math.round(1e3*(h=m*((this._k1+1)*v)/(this._k1*(1-this._b+this._b*(s/this.averageFieldLength[i]))+v)*p*f))/1e3,l.insert(w,b)}e[a]=l}this.fieldVectors=e},T.Builder.prototype.createTokenSet=function(){this.tokenSet=T.TokenSet.fromArray(Object.keys(this.invertedIndex).sort())},T.Builder.prototype.build=function(){return this.calculateAverageFieldLengths(),this.createFieldVectors(),this.createTokenSet(),new T.Index({invertedIndex:this.invertedIndex,fieldVectors:this.fieldVectors,tokenSet:this.tokenSet,fields:Object.keys(this._fields),pipeline:this.searchPipeline})},T.Builder.prototype.use=function(e){var t=Array.prototype.slice.call(arguments,1);t.unshift(this),e.apply(this,t)},T.MatchData=function(e,t,n){for(var r=Object.create(null),o=Object.keys(n||{}),a=0;a<o.length;a++){var i=o[a];r[i]=n[i].slice()}this.metadata=Object.create(null),void 0!==e&&(this.metadata[e]=Object.create(null),this.metadata[e][t]=r)},T.MatchData.prototype.combine=function(e){for(var t=Object.keys(e.metadata),n=0;n<t.length;n++){var r=t[n],o=Object.keys(e.metadata[r]);void 0==this.metadata[r]&&(this.metadata[r]=Object.create(null));for(var a=0;a<o.length;a++){var i=o[a],s=Object.keys(e.metadata[r][i]);void 0==this.metadata[r][i]&&(this.metadata[r][i]=Object.create(null));for(var l=0;l<s.length;l++){var c=s[l];void 0==this.metadata[r][i][c]?this.metadata[r][i][c]=e.metadata[r][i][c]:this.metadata[r][i][c]=this.metadata[r][i][c].concat(e.metadata[r][i][c])}}}},T.MatchData.prototype.add=function(e,t,n){if(!(e in this.metadata)){this.metadata[e]=Object.create(null),this.metadata[e][t]=n;return}if(!(t in this.metadata[e])){this.metadata[e][t]=n;return}for(var r=Object.keys(n),o=0;o<r.length;o++){var a=r[o];a in this.metadata[e][t]?this.metadata[e][t][a]=this.metadata[e][t][a].concat(n[a]):this.metadata[e][t][a]=n[a]}},T.Query=function(e){this.clauses=[],this.allFields=e},T.Query.wildcard=new String("*"),T.Query.wildcard.NONE=0,T.Query.wildcard.LEADING=1,T.Query.wildcard.TRAILING=2,T.Query.presence={OPTIONAL:1,REQUIRED:2,PROHIBITED:3},T.Query.prototype.clause=function(e){return!("fields"in e)&&(e.fields=this.allFields),!("boost"in e)&&(e.boost=1),!("usePipeline"in e)&&(e.usePipeline=!0),!("wildcard"in e)&&(e.wildcard=T.Query.wildcard.NONE),e.wildcard&T.Query.wildcard.LEADING&&e.term.charAt(0)!=T.Query.wildcard&&(e.term="*"+e.term),e.wildcard&T.Query.wildcard.TRAILING&&e.term.slice(-1)!=T.Query.wildcard&&(e.term=""+e.term+"*"),!("presence"in e)&&(e.presence=T.Query.presence.OPTIONAL),this.clauses.push(e),this},T.Query.prototype.isNegated=function(){for(var e=0;e<this.clauses.length;e++)if(this.clauses[e].presence!=T.Query.presence.PROHIBITED)return!1;return!0},T.Query.prototype.term=function(e,t){if(Array.isArray(e))return e.forEach(function(e){this.term(e,T.utils.clone(t))},this),this;var n=t||{};return n.term=e.toString(),this.clause(n),this},T.QueryParseError=function(e,t,n){this.name="QueryParseError",this.message=e,this.start=t,this.end=n},T.QueryParseError.prototype=Error(),T.QueryLexer=function(e){this.lexemes=[],this.str=e,this.length=e.length,this.pos=0,this.start=0,this.escapeCharPositions=[]},T.QueryLexer.prototype.run=function(){for(var e=T.QueryLexer.lexText;e;)e=e(this)},T.QueryLexer.prototype.sliceString=function(){for(var e=[],t=this.start,n=this.pos,r=0;r<this.escapeCharPositions.length;r++)n=this.escapeCharPositions[r],e.push(this.str.slice(t,n)),t=n+1;return e.push(this.str.slice(t,this.pos)),this.escapeCharPositions.length=0,e.join("")},T.QueryLexer.prototype.emit=function(e){this.lexemes.push({type:e,str:this.sliceString(),start:this.start,end:this.pos}),this.start=this.pos},T.QueryLexer.prototype.escapeCharacter=function(){this.escapeCharPositions.push(this.pos-1),this.pos+=1},T.QueryLexer.prototype.next=function(){if(this.pos>=this.length)return T.QueryLexer.EOS;var e=this.str.charAt(this.pos);return this.pos+=1,e},T.QueryLexer.prototype.width=function(){return this.pos-this.start},T.QueryLexer.prototype.ignore=function(){this.start==this.pos&&(this.pos+=1),this.start=this.pos},T.QueryLexer.prototype.backup=function(){this.pos-=1},T.QueryLexer.prototype.acceptDigitRun=function(){var e,t;do t=(e=this.next()).charCodeAt(0);while(t>47&&t<58);e!=T.QueryLexer.EOS&&this.backup()},T.QueryLexer.prototype.more=function(){return this.pos<this.length},T.QueryLexer.EOS="EOS",T.QueryLexer.FIELD="FIELD",T.QueryLexer.TERM="TERM",T.QueryLexer.EDIT_DISTANCE="EDIT_DISTANCE",T.QueryLexer.BOOST="BOOST",T.QueryLexer.PRESENCE="PRESENCE",T.QueryLexer.lexField=function(e){return e.backup(),e.emit(T.QueryLexer.FIELD),e.ignore(),T.QueryLexer.lexText},T.QueryLexer.lexTerm=function(e){if(e.width()>1&&(e.backup(),e.emit(T.QueryLexer.TERM)),e.ignore(),e.more())return T.QueryLexer.lexText},T.QueryLexer.lexEditDistance=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(T.QueryLexer.EDIT_DISTANCE),T.QueryLexer.lexText},T.QueryLexer.lexBoost=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(T.QueryLexer.BOOST),T.QueryLexer.lexText},T.QueryLexer.lexEOS=function(e){e.width()>0&&e.emit(T.QueryLexer.TERM)},T.QueryLexer.termSeparator=T.tokenizer.separator,T.QueryLexer.lexText=function(e){for(;;){var t=e.next();if(t==T.QueryLexer.EOS)return T.QueryLexer.lexEOS;if(92==t.charCodeAt(0)){e.escapeCharacter();continue}if(":"==t)return T.QueryLexer.lexField;if("~"==t)return e.backup(),e.width()>0&&e.emit(T.QueryLexer.TERM),T.QueryLexer.lexEditDistance;if("^"==t)return e.backup(),e.width()>0&&e.emit(T.QueryLexer.TERM),T.QueryLexer.lexBoost;if("+"==t&&1===e.width()||"-"==t&&1===e.width())return e.emit(T.QueryLexer.PRESENCE),T.QueryLexer.lexText;if(t.match(T.QueryLexer.termSeparator))return T.QueryLexer.lexTerm}},T.QueryParser=function(e,t){this.lexer=new T.QueryLexer(e),this.query=t,this.currentClause={},this.lexemeIdx=0},T.QueryParser.prototype.parse=function(){this.lexer.run(),this.lexemes=this.lexer.lexemes;for(var e=T.QueryParser.parseClause;e;)e=e(this);return this.query},T.QueryParser.prototype.peekLexeme=function(){return this.lexemes[this.lexemeIdx]},T.QueryParser.prototype.consumeLexeme=function(){var e=this.peekLexeme();return this.lexemeIdx+=1,e},T.QueryParser.prototype.nextClause=function(){var e=this.currentClause;this.query.clause(e),this.currentClause={}},T.QueryParser.parseClause=function(e){var t=e.peekLexeme();if(void 0!=t)switch(t.type){case T.QueryLexer.PRESENCE:return T.QueryParser.parsePresence;case T.QueryLexer.FIELD:return T.QueryParser.parseField;case T.QueryLexer.TERM:return T.QueryParser.parseTerm;default:var n="expected either a field or a term, found "+t.type;throw t.str.length>=1&&(n+=" with value '"+t.str+"'"),new T.QueryParseError(n,t.start,t.end)}},T.QueryParser.parsePresence=function(e){var t=e.consumeLexeme();if(void 0!=t){switch(t.str){case"-":e.currentClause.presence=T.Query.presence.PROHIBITED;break;case"+":e.currentClause.presence=T.Query.presence.REQUIRED;break;default:var n="unrecognised presence operator'"+t.str+"'";throw new T.QueryParseError(n,t.start,t.end)}var r=e.peekLexeme();if(void 0==r){var n="expecting term or field, found nothing";throw new T.QueryParseError(n,t.start,t.end)}switch(r.type){case T.QueryLexer.FIELD:return T.QueryParser.parseField;case T.QueryLexer.TERM:return T.QueryParser.parseTerm;default:var n="expecting term or field, found '"+r.type+"'";throw new T.QueryParseError(n,r.start,r.end)}}},T.QueryParser.parseField=function(e){var t=e.consumeLexeme();if(void 0!=t){if(-1==e.query.allFields.indexOf(t.str)){var n=e.query.allFields.map(function(e){return"'"+e+"'"}).join(", "),r="unrecognised field '"+t.str+"', possible fields: "+n;throw new T.QueryParseError(r,t.start,t.end)}e.currentClause.fields=[t.str];var o=e.peekLexeme();if(void 0==o){var r="expecting term, found nothing";throw new T.QueryParseError(r,t.start,t.end)}if(o.type===T.QueryLexer.TERM)return T.QueryParser.parseTerm;var r="expecting term, found '"+o.type+"'";throw new T.QueryParseError(r,o.start,o.end)}},T.QueryParser.parseTerm=function(e){var t=e.consumeLexeme();if(void 0!=t){e.currentClause.term=t.str.toLowerCase(),-1!=t.str.indexOf("*")&&(e.currentClause.usePipeline=!1);var n=e.peekLexeme();if(void 0==n){e.nextClause();return}switch(n.type){case T.QueryLexer.TERM:return e.nextClause(),T.QueryParser.parseTerm;case T.QueryLexer.FIELD:return e.nextClause(),T.QueryParser.parseField;case T.QueryLexer.EDIT_DISTANCE:return T.QueryParser.parseEditDistance;case T.QueryLexer.BOOST:return T.QueryParser.parseBoost;case T.QueryLexer.PRESENCE:return e.nextClause(),T.QueryParser.parsePresence;default:var r="Unexpected lexeme type '"+n.type+"'";throw new T.QueryParseError(r,n.start,n.end)}}},T.QueryParser.parseEditDistance=function(e){var t=e.consumeLexeme();if(void 0!=t){var n=parseInt(t.str,10);if(isNaN(n)){var r="edit distance must be numeric";throw new T.QueryParseError(r,t.start,t.end)}e.currentClause.editDistance=n;var o=e.peekLexeme();if(void 0==o){e.nextClause();return}switch(o.type){case T.QueryLexer.TERM:return e.nextClause(),T.QueryParser.parseTerm;case T.QueryLexer.FIELD:return e.nextClause(),T.QueryParser.parseField;case T.QueryLexer.EDIT_DISTANCE:return T.QueryParser.parseEditDistance;case T.QueryLexer.BOOST:return T.QueryParser.parseBoost;case T.QueryLexer.PRESENCE:return e.nextClause(),T.QueryParser.parsePresence;default:var r="Unexpected lexeme type '"+o.type+"'";throw new T.QueryParseError(r,o.start,o.end)}}},T.QueryParser.parseBoost=function(e){var t=e.consumeLexeme();if(void 0!=t){var n=parseInt(t.str,10);if(isNaN(n)){var r="boost must be numeric";throw new T.QueryParseError(r,t.start,t.end)}e.currentClause.boost=n;var o=e.peekLexeme();if(void 0==o){e.nextClause();return}switch(o.type){case T.QueryLexer.TERM:return e.nextClause(),T.QueryParser.parseTerm;case T.QueryLexer.FIELD:return e.nextClause(),T.QueryParser.parseField;case T.QueryLexer.EDIT_DISTANCE:return T.QueryParser.parseEditDistance;case T.QueryLexer.BOOST:return T.QueryParser.parseBoost;case T.QueryLexer.PRESENCE:return e.nextClause(),T.QueryParser.parsePresence;default:var r="Unexpected lexeme type '"+o.type+"'";throw new T.QueryParseError(r,o.start,o.end)}}},j=0,C=function(){return T},"function"==typeof define&&define.amd?define(C):e.exports=C()}()},7360:function(e,t,n){"use strict";n.d(t,{_:function(){return a},t:function(){return i}});var r=n(85893),o=n(67294);let a=o.createContext(!1);function i(e){let{children:t}=e,[n,i]=(0,o.useState)(!1);return(0,o.useEffect)(()=>{i(!0)},[]),(0,r.jsx)(a.Provider,{value:n,children:t})}},5908:function(e,t,n){"use strict";var r=n("85893"),o=n("67294"),a=n("20745"),i=n("70405"),s=n("73727"),l=n("75150"),c=n("81821");let u=[n(22925),n(47877),n(96524),n(93272)];var d=n("60093"),p=n("16550"),f=n("18790");function g(e){let{children:t}=e;return(0,r.jsx)(r.Fragment,{children:t})}var m=n("50777"),h=n("93934"),b=n("7571"),y=n("45237"),v=n("81921"),w=n("7327"),k=n("54130"),S=n("1138"),x=n("3062"),_=n("49868");function E(){let{i18n:{currentLocale:e,defaultLocale:t,localeConfigs:n}}=(0,h.Z)(),o=(0,w.l)(),a=n[e].htmlLang,i=e=>e.replace("-","_");return(0,r.jsxs)(m.Z,{children:[Object.entries(n).map(e=>{let[t,{htmlLang:n}]=e;return(0,r.jsx)("link",{rel:"alternate",href:o.createUrl({locale:t,fullyQualified:!0}),hrefLang:n},t)}),(0,r.jsx)("link",{rel:"alternate",href:o.createUrl({locale:t,fullyQualified:!0}),hrefLang:"x-default"}),(0,r.jsx)("meta",{property:"og:locale",content:i(a)}),Object.values(n).filter(e=>a!==e.htmlLang).map(e=>(0,r.jsx)("meta",{property:"og:locale:alternate",content:i(e.htmlLang)},`meta-og-${e.htmlLang}`))]})}function O(e){let{permalink:t}=e,{siteConfig:{url:n}}=(0,h.Z)(),o=function(){let{siteConfig:{url:e,baseUrl:t,trailingSlash:n}}=(0,h.Z)(),{pathname:r}=(0,p.TH)();return e+(0,x.applyTrailingSlash)((0,b.ZP)(r),{trailingSlash:n,baseUrl:t})}(),a=t?`${n}${t}`:o;return(0,r.jsxs)(m.Z,{children:[(0,r.jsx)("meta",{property:"og:url",content:a}),(0,r.jsx)("link",{rel:"canonical",href:a})]})}function P(){let{i18n:{currentLocale:e}}=(0,h.Z)(),{metadata:t,image:n}=(0,y.L)();return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsxs)(m.Z,{children:[(0,r.jsx)("meta",{name:"twitter:card",content:"summary_large_image"}),(0,r.jsx)("body",{className:k.h})]}),n&&(0,r.jsx)(v.d,{image:n}),(0,r.jsx)(O,{}),(0,r.jsx)(E,{}),(0,r.jsx)(_.Z,{tag:S.H,locale:e}),(0,r.jsx)(m.Z,{children:t.map((e,t)=>(0,r.jsx)("meta",{...e},t))})]})}let j=new Map;var C=n("7360"),T=n("85549"),I=n("27222");function A(e){for(var t=arguments.length,n=Array(t>1?t-1:0),r=1;r<t;r++)n[r-1]=arguments[r];let o=u.map(t=>{let r=t.default?.[e]??t[e];return r?.(...n)});return()=>o.forEach(e=>e?.())}let N=function(e){let{children:t,location:n,previousLocation:r}=e;return(0,I.Z)(()=>{r!==n&&(!function(e){let{location:t,previousLocation:n}=e;if(!n)return;let r=t.pathname===n.pathname,o=t.hash===n.hash,a=t.search===n.search;if(r&&o&&!a)return;let{hash:i}=t;if(i){let e=decodeURIComponent(i.substring(1)),t=document.getElementById(e);t?.scrollIntoView()}else window.scrollTo(0,0)}({location:n,previousLocation:r}),A("onRouteDidUpdate",{previousLocation:r,location:n}))},[r,n]),t};function L(e){return Promise.all(Array.from(new Set([e,decodeURI(e)])).map(e=>(0,f.f)(d.Z,e)).flat().map(e=>e.route.component.preload?.()))}class R extends o.Component{previousLocation;routeUpdateCleanupCb;constructor(e){super(e),this.previousLocation=null,this.routeUpdateCleanupCb=c.Z.canUseDOM?A("onRouteUpdate",{previousLocation:null,location:this.props.location}):()=>{},this.state={nextRouteHasLoaded:!0}}shouldComponentUpdate(e,t){if(e.location===this.props.location)return t.nextRouteHasLoaded;let n=e.location;return this.previousLocation=this.props.location,this.setState({nextRouteHasLoaded:!1}),this.routeUpdateCleanupCb=A("onRouteUpdate",{previousLocation:this.previousLocation,location:n}),L(n.pathname).then(()=>{this.routeUpdateCleanupCb(),this.setState({nextRouteHasLoaded:!0})}).catch(e=>{console.warn(e),window.location.reload()}),!1}render(){let{children:e,location:t}=this.props;return(0,r.jsx)(N,{previousLocation:this.previousLocation,location:t,children:(0,r.jsx)(p.AW,{location:t,render:()=>e})})}}let D="__docusaurus-base-url-issue-banner-suggestion-container";function F(){var e,t;let{siteConfig:{baseUrl:n}}=(0,h.Z)();return(0,r.jsx)(r.Fragment,{children:!c.Z.canUseDOM&&(0,r.jsx)(m.Z,{children:(0,r.jsx)("script",{children:(e=n,` +document.addEventListener('DOMContentLoaded', function maybeInsertBanner() { + var shouldInsert = typeof window['docusaurus'] === 'undefined'; + shouldInsert && insertBanner(); +}); + +function insertBanner() { + var bannerContainer = document.createElement('div'); + bannerContainer.id = '__docusaurus-base-url-issue-banner-container'; + var bannerHtml = ${JSON.stringify((t=e,` +<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;"> + <p style="font-weight: bold; font-size: 30px;">Your Docusaurus site did not load properly.</p> + <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> + <p>Current configured baseUrl = <span style="font-weight: bold; color: red;">${t}</span> ${"/"===t?" (default value)":""}</p> + <p>We suggest trying baseUrl = <span id="${D}" style="font-weight: bold; color: green;"></span></p> +</div> +`)).replace(/</g,"\\<")}; + bannerContainer.innerHTML = bannerHtml; + document.body.prepend(bannerContainer); + var suggestionContainer = document.getElementById('${D}'); + var actualHomePagePath = window.location.pathname; + var suggestedBaseUrl = actualHomePagePath.substr(-1) === '/' + ? actualHomePagePath + : actualHomePagePath + '/'; + suggestionContainer.innerHTML = suggestedBaseUrl; +} +`)})})})}function M(){let{siteConfig:{baseUrl:e,baseUrlIssueBanner:t}}=(0,h.Z)(),{pathname:n}=(0,p.TH)();return t&&n===e?(0,r.jsx)(F,{}):null}function B(){let{siteConfig:{favicon:e,title:t,noIndex:n},i18n:{currentLocale:o,localeConfigs:a}}=(0,h.Z)(),i=(0,b.ZP)(e),{htmlLang:s,direction:l}=a[o];return(0,r.jsxs)(m.Z,{children:[(0,r.jsx)("html",{lang:s,dir:l}),(0,r.jsx)("title",{children:t}),(0,r.jsx)("meta",{property:"og:title",content:t}),(0,r.jsx)("meta",{name:"viewport",content:"width=device-width, initial-scale=1.0"}),n&&(0,r.jsx)("meta",{name:"robots",content:"noindex, nofollow"}),e&&(0,r.jsx)("link",{rel:"icon",href:i})]})}var z=n("59849"),$=n("13341");function U(){let e=(0,$.Z)();return(0,r.jsx)(m.Z,{children:(0,r.jsx)("html",{"data-has-hydrated":e})})}let H=(0,f.H)(d.Z);function q(){let e=function(e){if(j.has(e.pathname))return{...e,pathname:j.get(e.pathname)};if((0,f.f)(d.Z,e.pathname).some(e=>{let{route:t}=e;return!0===t.exact}))return j.set(e.pathname,e.pathname),e;let t=e.pathname.trim().replace(/(?:\/index)?\.html$/,"")||"/";return j.set(e.pathname,t),{...e,pathname:t}}((0,p.TH)());return(0,r.jsx)(R,{location:e,children:H})}var Q=n("37138");let Z=!function(e){try{return document.createElement("link").relList.supports(e)}catch{return!1}}("prefetch")?function(e){return new Promise((t,n)=>{let r=new XMLHttpRequest;r.open("GET",e,!0),r.withCredentials=!0,r.onload=()=>{200===r.status?t():n()},r.send(null)})}:function(e){return new Promise((t,n)=>{if("undefined"==typeof document){n();return}let r=document.createElement("link");r.setAttribute("rel","prefetch"),r.setAttribute("href",e),r.onload=()=>t(),r.onerror=()=>n();let o=document.getElementsByTagName("head")[0]??document.getElementsByName("script")[0]?.parentNode;o?.appendChild(r)})};var W=n("97454");let V=new Set,G=new Set,Y=()=>navigator.connection?.effectiveType.includes("2g")||navigator.connection?.saveData,K=e=>!Y()&&!G.has(e)&&!V.has(e),X=e=>!Y()&&!G.has(e),J=e=>Object.entries(Q).filter(t=>{let[n]=t;return n.replace(/-[^-]+$/,"")===e}).flatMap(e=>{let[,t]=e;return Object.values((0,W.Z)(t))}),ee=Object.freeze({prefetch:e=>!!K(e)&&(V.add(e),Promise.all((0,f.f)(d.Z,e).flatMap(e=>J(e.route.path)).map(e=>{let t=n.gca(e);if(t&&!t.includes("undefined"))return Z(t).catch(()=>{});return Promise.resolve()}))),preload:e=>!!X(e)&&(G.add(e),L(e))});e=n.hmd(e);if(c.Z.canUseDOM){window.docusaurus=ee;let t=document.getElementById("__docusaurus"),n=(0,r.jsx)(i.B6,{children:(0,r.jsx)(function(e){let{children:t}=e;return"hash"===l.default.future.experimental_router?(0,r.jsx)(s.UT,{children:t}):(0,r.jsx)(s.VK,{children:t})},{children:(0,r.jsx)(function(){return(0,r.jsx)(z.Z,{children:(0,r.jsx)(T.M,{children:(0,r.jsxs)(C.t,{children:[(0,r.jsxs)(g,{children:[(0,r.jsx)(B,{}),(0,r.jsx)(P,{}),(0,r.jsx)(M,{}),(0,r.jsx)(q,{})]}),(0,r.jsx)(U,{})]})})})},{})})}),c=(e,t)=>{console.error("Docusaurus React Root onRecoverableError:",e,t)},u=()=>{if(window.docusaurusRoot){window.docusaurusRoot.render(n);return}window.docusaurusRoot=a.hydrateRoot(t,n,{onRecoverableError:c})};L(window.location.pathname).then(()=>{(0,o.startTransition)(u)}),e.hot&&e.hot.accept()}},85549:function(e,t,n){"use strict";n.d(t,{_:()=>d,M:()=>p});var r=n("85893"),o=n("67294"),a=n("75150"),i=JSON.parse('{"docusaurus-plugin-content-docs":{"default":{"path":"/docs","versions":[{"name":"current","label":"Next","isLast":true,"path":"/docs","mainDocId":"user/intro","docs":[{"id":"packaging/advanced-config/eopkg-configuration","path":"/docs/packaging/advanced-config/eopkg-configuration","sidebar":"packagingSidebar"},{"id":"packaging/advanced-config/local-repository","path":"/docs/packaging/advanced-config/local-repository","sidebar":"packagingSidebar"},{"id":"packaging/appstream-metainfo","path":"/docs/packaging/appstream-metainfo","sidebar":"packagingSidebar"},{"id":"packaging/creating-a-new-package","path":"/docs/packaging/creating-a-new-package","sidebar":"packagingSidebar"},{"id":"packaging/git-basics","path":"/docs/packaging/git-basics","sidebar":"packagingSidebar"},{"id":"packaging/index","path":"/docs/packaging/","sidebar":"packagingSidebar"},{"id":"packaging/monitoring.yml","path":"/docs/packaging/monitoring.yml","sidebar":"packagingSidebar"},{"id":"packaging/package.yml","path":"/docs/packaging/package.yml","sidebar":"packagingSidebar"},{"id":"packaging/packaging-changes","path":"/docs/packaging/packaging-changes","sidebar":"packagingSidebar"},{"id":"packaging/packaging-practices","path":"/docs/packaging/packaging-practices","sidebar":"packagingSidebar"},{"id":"packaging/prepare-for-packaging","path":"/docs/packaging/prepare-for-packaging","sidebar":"packagingSidebar"},{"id":"packaging/procedures/maintainership","path":"/docs/packaging/procedures/maintainership","sidebar":"packagingSidebar"},{"id":"packaging/procedures/package-inclusion","path":"/docs/packaging/procedures/package-inclusion","sidebar":"packagingSidebar"},{"id":"packaging/procedures/release-processes","path":"/docs/packaging/procedures/release-processes","sidebar":"packagingSidebar"},{"id":"packaging/procedures/request-a-package","path":"/docs/packaging/procedures/request-a-package","sidebar":"packagingSidebar"},{"id":"packaging/procedures/request-a-package-update","path":"/docs/packaging/procedures/request-a-package-update","sidebar":"packagingSidebar"},{"id":"packaging/stack-rebuilds","path":"/docs/packaging/stack-rebuilds","sidebar":"packagingSidebar"},{"id":"packaging/submitting-a-pull-request","path":"/docs/packaging/submitting-a-pull-request","sidebar":"packagingSidebar"},{"id":"packaging/testing-a-package","path":"/docs/packaging/testing-a-package","sidebar":"packagingSidebar"},{"id":"packaging/translation-instructions","path":"/docs/packaging/translation-instructions","sidebar":"packagingSidebar"},{"id":"packaging/troubleshooting-packaging","path":"/docs/packaging/troubleshooting-packaging","sidebar":"packagingSidebar"},{"id":"packaging/update-dev-environment","path":"/docs/packaging/update-dev-environment","sidebar":"packagingSidebar"},{"id":"packaging/updating-an-existing-package","path":"/docs/packaging/updating-an-existing-package","sidebar":"packagingSidebar"},{"id":"packaging/your-first-package-update","path":"/docs/packaging/your-first-package-update","sidebar":"packagingSidebar"},{"id":"user/contributing/community-guidelines","path":"/docs/user/contributing/community-guidelines","sidebar":"userSidebar"},{"id":"user/contributing/getting-involved","path":"/docs/user/contributing/getting-involved","sidebar":"userSidebar"},{"id":"user/contributing/style","path":"/docs/user/contributing/style","sidebar":"userSidebar"},{"id":"user/contributing/testing-an-iso","path":"/docs/user/contributing/testing-an-iso","sidebar":"userSidebar"},{"id":"user/editions/budgie/configuration","path":"/docs/user/editions/budgie/configuration","sidebar":"userSidebar"},{"id":"user/editions/budgie/index","path":"/docs/user/editions/budgie/","sidebar":"userSidebar"},{"id":"user/editions/budgie/tips-and-tricks","path":"/docs/user/editions/budgie/tips-and-tricks","sidebar":"userSidebar"},{"id":"user/editions/gnome/configuration","path":"/docs/user/editions/gnome/configuration","sidebar":"userSidebar"},{"id":"user/editions/gnome/index","path":"/docs/user/editions/gnome/","sidebar":"userSidebar"},{"id":"user/editions/gnome/tips-and-tricks","path":"/docs/user/editions/gnome/tips-and-tricks","sidebar":"userSidebar"},{"id":"user/editions/index","path":"/docs/user/editions/","sidebar":"userSidebar"},{"id":"user/editions/mate/configuration","path":"/docs/user/editions/mate/configuration","sidebar":"userSidebar"},{"id":"user/editions/mate/index","path":"/docs/user/editions/mate/","sidebar":"userSidebar"},{"id":"user/editions/mate/tips-and-tricks","path":"/docs/user/editions/mate/tips-and-tricks","sidebar":"userSidebar"},{"id":"user/editions/plasma/configuration","path":"/docs/user/editions/plasma/configuration","sidebar":"userSidebar"},{"id":"user/editions/plasma/index","path":"/docs/user/editions/plasma/","sidebar":"userSidebar"},{"id":"user/editions/plasma/tips-and-tricks","path":"/docs/user/editions/plasma/tips-and-tricks","sidebar":"userSidebar"},{"id":"user/editions/xfce/configuration","path":"/docs/user/editions/xfce/configuration","sidebar":"userSidebar"},{"id":"user/editions/xfce/index","path":"/docs/user/editions/xfce/","sidebar":"userSidebar"},{"id":"user/editions/xfce/tips-and-tricks","path":"/docs/user/editions/xfce/tips-and-tricks","sidebar":"userSidebar"},{"id":"user/hardware/compatibility/laptops","path":"/docs/user/hardware/compatibility/laptops","sidebar":"userSidebar"},{"id":"user/hardware/compatibility/wifi","path":"/docs/user/hardware/compatibility/wifi","sidebar":"userSidebar"},{"id":"user/hardware/index","path":"/docs/user/hardware/","sidebar":"userSidebar"},{"id":"user/hardware/mobile/android","path":"/docs/user/hardware/mobile/android","sidebar":"userSidebar"},{"id":"user/hardware/mobile/apple","path":"/docs/user/hardware/mobile/apple","sidebar":"userSidebar"},{"id":"user/hardware/peripherals/mice-and-touchpads","path":"/docs/user/hardware/peripherals/mice-and-touchpads","sidebar":"userSidebar"},{"id":"user/hardware/peripherals/midi-keyboard","path":"/docs/user/hardware/peripherals/midi-keyboard","sidebar":"userSidebar"},{"id":"user/hardware/peripherals/printers-and-scanners","path":"/docs/user/hardware/peripherals/printers-and-scanners","sidebar":"userSidebar"},{"id":"user/intro","path":"/docs/user/intro","sidebar":"userSidebar"},{"id":"user/package-management/basics","path":"/docs/user/package-management/basics","sidebar":"userSidebar"},{"id":"user/package-management/history-and-rollback","path":"/docs/user/package-management/history-and-rollback","sidebar":"userSidebar"},{"id":"user/package-management/repo-management","path":"/docs/user/package-management/repo-management","sidebar":"userSidebar"},{"id":"user/privacy","path":"/docs/user/privacy","sidebar":"userSidebar"},{"id":"user/quick-start/boot-management","path":"/docs/user/quick-start/boot-management","sidebar":"userSidebar"},{"id":"user/quick-start/default-applications","path":"/docs/user/quick-start/default-applications","sidebar":"userSidebar"},{"id":"user/quick-start/installation/disks","path":"/docs/user/quick-start/installation/disks","sidebar":"userSidebar"},{"id":"user/quick-start/installation/index","path":"/docs/user/quick-start/installation/","sidebar":"userSidebar"},{"id":"user/quick-start/installation/secure-boot","path":"/docs/user/quick-start/installation/secure-boot","sidebar":"userSidebar"},{"id":"user/quick-start/installation/system-requirements","path":"/docs/user/quick-start/installation/system-requirements","sidebar":"userSidebar"},{"id":"user/quick-start/software-center/index","path":"/docs/user/quick-start/software-center/","sidebar":"userSidebar"},{"id":"user/software/camera/droidcam","path":"/docs/user/software/camera/droidcam","sidebar":"userSidebar"},{"id":"user/software/command-line/index","path":"/docs/user/software/command-line/","sidebar":"userSidebar"},{"id":"user/software/configuration_files","path":"/docs/user/software/configuration_files","sidebar":"userSidebar"},{"id":"user/software/desktops/index","path":"/docs/user/software/desktops/","sidebar":"userSidebar"},{"id":"user/software/development/containers","path":"/docs/user/software/development/containers","sidebar":"userSidebar"},{"id":"user/software/development/index","path":"/docs/user/software/development/","sidebar":"userSidebar"},{"id":"user/software/development/java","path":"/docs/user/software/development/java","sidebar":"userSidebar"},{"id":"user/software/development/postgresql","path":"/docs/user/software/development/postgresql","sidebar":"userSidebar"},{"id":"user/software/development/r-and-rstudio","path":"/docs/user/software/development/r-and-rstudio","sidebar":"userSidebar"},{"id":"user/software/development/rust","path":"/docs/user/software/development/rust","sidebar":"userSidebar"},{"id":"user/software/development/web","path":"/docs/user/software/development/web","sidebar":"userSidebar"},{"id":"user/software/gaming/index","path":"/docs/user/software/gaming/","sidebar":"userSidebar"},{"id":"user/software/localization/ibus","path":"/docs/user/software/localization/ibus","sidebar":"userSidebar"},{"id":"user/software/networking/samba","path":"/docs/user/software/networking/samba","sidebar":"userSidebar"},{"id":"user/software/networking/tigervnc","path":"/docs/user/software/networking/tigervnc","sidebar":"userSidebar"},{"id":"user/software/networking/wireshark","path":"/docs/user/software/networking/wireshark","sidebar":"userSidebar"},{"id":"user/software/networking/xrdp","path":"/docs/user/software/networking/xrdp","sidebar":"userSidebar"},{"id":"user/software/sound/index","path":"/docs/user/software/sound/","sidebar":"userSidebar"},{"id":"user/software/third-party/index","path":"/docs/user/software/third-party/","sidebar":"userSidebar"},{"id":"user/software/third-party/snap","path":"/docs/user/software/third-party/snap","sidebar":"userSidebar"},{"id":"user/software/utilities/ksysguard","path":"/docs/user/software/utilities/ksysguard","sidebar":"userSidebar"},{"id":"user/software/utilities/kwallet","path":"/docs/user/software/utilities/kwallet","sidebar":"userSidebar"},{"id":"user/software/virtualization/virtualbox","path":"/docs/user/software/virtualization/virtualbox","sidebar":"userSidebar"},{"id":"user/software/web/obs","path":"/docs/user/software/web/obs","sidebar":"userSidebar"},{"id":"user/troubleshooting/boot-rescue","path":"/docs/user/troubleshooting/boot-rescue","sidebar":"userSidebar"},{"id":"user/troubleshooting/index","path":"/docs/user/troubleshooting/","sidebar":"userSidebar"},{"id":"user/troubleshooting/installation","path":"/docs/user/troubleshooting/installation","sidebar":"userSidebar"},{"id":"user/troubleshooting/plasma","path":"/docs/user/troubleshooting/plasma","sidebar":"userSidebar"},{"id":"/category/quick-start","path":"/docs/category/quick-start","sidebar":"userSidebar"},{"id":"/category/contributing","path":"/docs/category/contributing","sidebar":"userSidebar"},{"id":"/category/compatibility","path":"/docs/category/compatibility","sidebar":"userSidebar"},{"id":"/category/mobile","path":"/docs/category/mobile","sidebar":"userSidebar"},{"id":"/category/peripherals","path":"/docs/category/peripherals","sidebar":"userSidebar"},{"id":"/category/package-management","path":"/docs/category/package-management","sidebar":"userSidebar"},{"id":"/category/software","path":"/docs/category/software","sidebar":"userSidebar"},{"id":"/category/camera","path":"/docs/category/camera","sidebar":"userSidebar"},{"id":"/category/localization","path":"/docs/category/localization","sidebar":"userSidebar"},{"id":"/category/networking","path":"/docs/category/networking","sidebar":"userSidebar"},{"id":"/category/utilities","path":"/docs/category/utilities","sidebar":"userSidebar"},{"id":"/category/virtualization","path":"/docs/category/virtualization","sidebar":"userSidebar"},{"id":"/category/web","path":"/docs/category/web","sidebar":"userSidebar"},{"id":"/category/advanced-configuration","path":"/docs/category/advanced-configuration","sidebar":"packagingSidebar"},{"id":"/category/procedures","path":"/docs/category/procedures","sidebar":"packagingSidebar"}],"draftIds":[],"sidebars":{"userSidebar":{"link":{"path":"/docs/user/intro","label":"user/intro"}},"packagingSidebar":{"link":{"path":"/docs/packaging/","label":"packaging/index"}}}}],"breadcrumbs":true}},"@cmfcmf/docusaurus-search-local":{"default":{"titleBoost":5,"contentBoost":1,"tagsBoost":3,"parentCategoriesBoost":2,"indexDocSidebarParentCategories":0,"maxSearchResults":8}}}'),s=JSON.parse('{"defaultLocale":"en","locales":["en"],"path":"i18n","currentLocale":"en","localeConfigs":{"en":{"label":"English","direction":"ltr","htmlLang":"en","calendar":"gregory","path":"en"}}}'),l=n("62627"),c=JSON.parse('{"docusaurusVersion":"3.6.3","siteVersion":"0.0.0","pluginVersions":{"docusaurus-plugin-content-docs":{"type":"package","name":"@docusaurus/plugin-content-docs","version":"3.6.3"},"docusaurus-plugin-content-blog":{"type":"package","name":"@docusaurus/plugin-content-blog","version":"3.6.3"},"docusaurus-plugin-content-pages":{"type":"package","name":"@docusaurus/plugin-content-pages","version":"3.6.3"},"docusaurus-plugin-sitemap":{"type":"package","name":"@docusaurus/plugin-sitemap","version":"3.6.3"},"docusaurus-theme-classic":{"type":"package","name":"@docusaurus/theme-classic","version":"3.6.3"},"@cmfcmf/docusaurus-search-local":{"type":"package","name":"@cmfcmf/docusaurus-search-local","version":"1.2.0"},"docusaurus-plugin-ideal-image":{"type":"package","name":"@docusaurus/plugin-ideal-image","version":"3.6.3"}}}');let u={siteConfig:a.default,siteMetadata:c,globalData:i,i18n:s,codeTranslations:l},d=o.createContext(u);function p(e){let{children:t}=e;return(0,r.jsx)(d.Provider,{value:u,children:t})}},59849:function(e,t,n){"use strict";n.d(t,{Z:()=>m});var r=n("85893"),o=n("67294"),a=n("81821"),i=n("50777"),s=n("3062"),l=n("99757"),c=n("22016");function u(e){let{error:t,tryAgain:n}=e;return(0,r.jsxs)("div",{style:{display:"flex",flexDirection:"column",justifyContent:"center",alignItems:"flex-start",minHeight:"100vh",width:"100%",maxWidth:"80ch",fontSize:"20px",margin:"0 auto",padding:"1rem"},children:[(0,r.jsx)("h1",{style:{fontSize:"3rem"},children:"This page crashed"}),(0,r.jsx)("button",{type:"button",onClick:n,style:{margin:"1rem 0",fontSize:"2rem",cursor:"pointer",borderRadius:20,padding:"1rem"},children:"Try again"}),(0,r.jsx)(d,{error:t})]})}function d(e){let{error:t}=e,n=(0,s.getErrorCausalChain)(t).map(e=>e.message).join("\n\nCause:\n");return(0,r.jsx)("p",{style:{whiteSpace:"pre-wrap"},children:n})}function p(e){let{children:t}=e;return(0,r.jsx)(c.z,{value:{plugin:{name:"docusaurus-core-error-boundary",id:"default"}},children:t})}function f(e){let{error:t,tryAgain:n}=e;return(0,r.jsx)(p,{children:(0,r.jsxs)(m,{fallback:()=>(0,r.jsx)(u,{error:t,tryAgain:n}),children:[(0,r.jsx)(i.Z,{children:(0,r.jsx)("title",{children:"Page Error"})}),(0,r.jsx)(l.Z,{children:(0,r.jsx)(u,{error:t,tryAgain:n})})]})})}let g=e=>(0,r.jsx)(f,{...e});class m extends o.Component{constructor(e){super(e),this.state={error:null}}componentDidCatch(e){a.Z.canUseDOM&&this.setState({error:e})}render(){let{children:e}=this.props,{error:t}=this.state;return t?(this.props.fallback??g)({error:t,tryAgain:()=>this.setState({error:null})}):e??null}}},81821:function(e,t,n){"use strict";n.d(t,{Z:function(){return o}});let r="undefined"!=typeof window&&"document"in window&&"createElement"in window.document,o={canUseDOM:r,canUseEventListeners:r&&("addEventListener"in window||"attachEvent"in window),canUseIntersectionObserver:r&&"IntersectionObserver"in window,canUseViewport:r&&"screen"in window}},50777:function(e,t,n){"use strict";n.d(t,{Z:function(){return a}});var r=n(85893);n(67294);var o=n(70405);function a(e){return(0,r.jsx)(o.ql,{...e})}},27544:function(e,t,n){"use strict";n.d(t,{Z:function(){return f}});var r=n(85893),o=n(67294),a=n(73727),i=n(3062),s=n(93934),l=n(76520),c=n(81821),u=n(12785),d=n(7571);let p=e=>e.startsWith("/"),f=o.forwardRef(function(e,t){var n;let{isNavLink:f,to:g,href:m,activeClassName:h,isActive:b,"data-noBrokenLinkCheck":y,autoAddBaseUrl:v=!0,...w}=e,{siteConfig:k}=(0,s.Z)(),{trailingSlash:S,baseUrl:x}=k,_=k.future.experimental_router,{withBaseUrl:E}=(0,d.Cg)(),O=(0,u.Z)(),P=(0,o.useRef)(null);(0,o.useImperativeHandle)(t,()=>P.current);let j=g||m,C=(0,l.Z)(j),T=j?.replace("pathname://","");let I=void 0!==T?(n=T,v&&p(n)?E(n):n):void 0;"hash"===_&&I?.startsWith("./")&&(I=I?.slice(1)),I&&C&&(I=(0,i.applyTrailingSlash)(I,{trailingSlash:S,baseUrl:x}));let A=(0,o.useRef)(!1),N=f?a.OL:a.rU,L=c.Z.canUseIntersectionObserver,R=(0,o.useRef)(),D=()=>{!A.current&&null!=I&&(window.docusaurus.preload(I),A.current=!0)};(0,o.useEffect)(()=>(!L&&C&&c.Z.canUseDOM&&null!=I&&window.docusaurus.prefetch(I),()=>{L&&R.current&&R.current.disconnect()}),[R,I,L,C]);let F=I?.startsWith("#")??!1,M=!w.target||"_self"===w.target,B=!I||!C||!M||F&&"hash"!==_;!y&&(F||!B)&&O.collectLink(I),w.id&&O.collectAnchor(w.id);let z={};return B?(0,r.jsx)("a",{ref:P,href:I,...j&&!C&&{target:"_blank",rel:"noopener noreferrer"},...w,...z}):(0,r.jsx)(N,{...w,onMouseEnter:D,onTouchStart:D,innerRef:e=>{P.current=e,L&&e&&C&&(R.current=new window.IntersectionObserver(t=>{t.forEach(t=>{e===t.target&&(t.isIntersecting||t.intersectionRatio>0)&&(R.current.unobserve(e),R.current.disconnect(),null!=I&&window.docusaurus.prefetch(I))})}),R.current.observe(e))},to:I,...f&&{isActive:b,activeClassName:h},...z})})},1822:function(e,t,n){"use strict";n.d(t,{Z:()=>c,I:()=>l});var r=n("85893"),o=n("67294");function a(e,t){let n=e.split(/(\{\w+\})/).map((e,n)=>{if(n%2==1){let n=t?.[e.slice(1,-1)];if(void 0!==n)return n}return e});return n.some(e=>(0,o.isValidElement)(e))?n.map((e,t)=>(0,o.isValidElement)(e)?o.cloneElement(e,{key:t}):e).filter(e=>""!==e):n.join("")}var i=n("62627");function s(e){let{id:t,message:n}=e;if(void 0===t&&void 0===n)throw Error("Docusaurus translation declarations must have at least a translation id or a default translation message");return i[t??n]??n??t}function l(e,t){let{message:n,id:r}=e;return a(s({message:n,id:r}),t)}function c(e){let{children:t,id:n,values:o}=e;if(t&&"string"!=typeof t)throw console.warn("Illegal <Translate> children",t),Error("The Docusaurus <Translate> component only accept simple string values");let i=s({message:t,id:n});return(0,r.jsx)(r.Fragment,{children:a(i,o)})}},61484:function(e,t,n){"use strict";n.d(t,{m:function(){return r}});let r="default"},76520:function(e,t,n){"use strict";function r(e){return/^(?:\w*:|\/\/)/.test(e)}function o(e){return void 0!==e&&!r(e)}n.d(t,{Z:function(){return o},b:function(){return r}})},7571:function(e,t,n){"use strict";n.d(t,{Cg:function(){return i},ZP:function(){return s}});var r=n(67294),o=n(93934),a=n(76520);function i(){let{siteConfig:e}=(0,o.Z)(),{baseUrl:t,url:n}=e,i=e.future.experimental_router;return{withBaseUrl:(0,r.useCallback)((e,r)=>(function(e){let{siteUrl:t,baseUrl:n,url:r,options:{forcePrependBaseUrl:o=!1,absolute:i=!1}={},router:s}=e;if(!r||r.startsWith("#")||(0,a.b)(r))return r;if("hash"===s)return r.startsWith("/")?`.${r}`:`./${r}`;if(o)return n+r.replace(/^\//,"");if(r===n.replace(/\/$/,""))return n;let l=r.startsWith(n)?r:n+r.replace(/^\//,"");return i?t+l:l})({siteUrl:n,baseUrl:t,url:e,options:r,router:i}),[n,t,i])}}function s(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},{withBaseUrl:n}=i();return n(e,t)}},12785:function(e,t,n){"use strict";n.d(t,{Z:()=>i}),n("85893");var r=n("67294");let o=r.createContext({collectAnchor:()=>{},collectLink:()=>{}}),a=()=>(0,r.useContext)(o);function i(){return a()}},93934:function(e,t,n){"use strict";n.d(t,{Z:function(){return a}});var r=n(67294),o=n(85549);function a(){return(0,r.useContext)(o._)}},75061:function(e,t,n){"use strict";n.d(t,{OD:function(){return a},eZ:function(){return i}});var r=n(93934),o=n(61484);function a(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=function(){let{globalData:e}=(0,r.Z)();return e}()[e];if(!n&&t.failfast)throw Error(`Docusaurus plugin global data not found for "${e}" plugin.`);return n}function i(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:o.m,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=a(e),i=r?.[t];if(!i&&n.failfast)throw Error(`Docusaurus plugin global data not found for "${e}" plugin with id "${t}".`);return i}},13341:function(e,t,n){"use strict";n.d(t,{Z:function(){return a}});var r=n(67294),o=n(7360);function a(){return(0,r.useContext)(o._)}},27222:function(e,t,n){"use strict";n.d(t,{Z:function(){return o}});var r=n(67294);let o=n(81821).Z.canUseDOM?r.useLayoutEffect:r.useEffect},39025:function(e,t,n){"use strict";n.d(t,{Z:function(){return a}});var r=n(67294),o=n(22016);function a(){let e=r.useContext(o._);if(!e)throw Error("Unexpected: no Docusaurus route context found");return e}},97454:function(e,t,n){"use strict";n.d(t,{Z:function(){return o}});let r=e=>"object"==typeof e&&!!e&&Object.keys(e).length>0;function o(e){let t={};return!function e(n,o){Object.entries(n).forEach(n=>{let[a,i]=n,s=o?`${o}.${a}`:a;r(i)?e(i,s):t[s]=i})}(e),t}},22016:function(e,t,n){"use strict";n.d(t,{_:function(){return a},z:function(){return i}});var r=n(85893),o=n(67294);let a=o.createContext(null);function i(e){let{children:t,value:n}=e,i=o.useContext(a),s=(0,o.useMemo)(()=>(function(e){let{parent:t,value:n}=e;if(!t){if(n){if(!("plugin"in n))throw Error("Unexpected: Docusaurus topmost route context has no `plugin` attribute")}else throw Error("Unexpected: no Docusaurus route context found");return n}let r={...t.data,...n?.data};return{plugin:t.plugin,data:r}})({parent:i,value:n}),[i,n]);return(0,r.jsx)(a.Provider,{value:s,children:t})}},13908:function(e,t,n){"use strict";n.d(t,{J:function(){return v},L5:function(){return b},Oh:function(){return w}});var r=n(85893),o=n(67294),a=n(1652),i=n(61484),s=n(45237),l=n(70085),c=n(57100);let u=e=>`docs-preferred-version-${e}`,d=(e,t,n)=>{(0,l.WA)(u(e),{persistence:t}).set(n)},p=(e,t)=>(0,l.WA)(u(e),{persistence:t}).get(),f=(e,t)=>{(0,l.WA)(u(e),{persistence:t}).del()},g=e=>Object.fromEntries(e.map(e=>[e,{preferredVersionName:null}])),m=o.createContext(null);function h(e){let{children:t}=e,n=function(){let e=(0,a._r)(),t=(0,s.L)().docs.versionPersistence,n=(0,o.useMemo)(()=>Object.keys(e),[e]),[r,i]=(0,o.useState)(()=>g(n));return(0,o.useEffect)(()=>{i(function(e){let{pluginIds:t,versionPersistence:n,allDocsData:r}=e;return Object.fromEntries(t.map(e=>[e,function(e){let t=p(e,n);return r[e].versions.some(e=>e.name===t)?{preferredVersionName:t}:(f(e,n),{preferredVersionName:null})}(e)]))}({allDocsData:e,versionPersistence:t,pluginIds:n}))},[e,t,n]),[r,(0,o.useMemo)(()=>({savePreferredVersion:function(e,n){d(e,t,n),i(t=>({...t,[e]:{preferredVersionName:n}}))}}),[t])]}();return(0,r.jsx)(m.Provider,{value:n,children:t})}function b(e){let{children:t}=e;return(0,r.jsx)(h,{children:t})}function y(){let e=(0,o.useContext)(m);if(!e)throw new c.i6("DocsPreferredVersionContextProvider");return e}function v(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:i.m,t=(0,a.zh)(e),[n,r]=y(),{preferredVersionName:s}=n[e],l=t.versions.find(e=>e.name===s)??null;return{preferredVersion:l,savePreferredVersionName:(0,o.useCallback)(t=>{r.savePreferredVersion(e,t)},[r,e])}}function w(){let e=(0,a._r)(),[t]=y();return Object.fromEntries(Object.keys(e).map(n=>[n,function(n){let r=e[n],{preferredVersionName:o}=t[n];return r.versions.find(e=>e.name===o)??null}(n)]))}},73838:function(e,t,n){"use strict";n.d(t,{J:function(){return a},z:function(){return i}});var r=n(1652),o=n(13908);function a(e,t){return`docs-${e}-${t}`}function i(){let e=(0,r._r)(),t=(0,r.WS)(),n=(0,o.Oh)();return[...Object.keys(e).map(function(r){let o=t?.activePlugin.pluginId===r?t.activeVersion:void 0,i=n[r],s=e[r].versions.find(e=>e.isLast);return a(r,(o??i??s).name)})]}},26844:function(e,t,n){"use strict";n.d(t,{V:function(){return c},b:function(){return l}});var r=n(85893),o=n(67294),a=n(57100);let i=Symbol("EmptyContext"),s=o.createContext(i);function l(e){let{children:t,name:n,items:a}=e,i=(0,o.useMemo)(()=>n&&a?{name:n,items:a}:null,[n,a]);return(0,r.jsx)(s.Provider,{value:i,children:t})}function c(){let e=(0,o.useContext)(s);if(e===i)throw new a.i6("DocsSidebarProvider");return e}},71364:function(e,t,n){"use strict";n.d(t,{LM:function(){return f},MN:function(){return E},SN:function(){return _},_F:function(){return b},f:function(){return y},jA:function(){return g},lO:function(){return k},oz:function(){return S},s1:function(){return w},vY:function(){return x},xz:function(){return p}});var r=n(67294),o=n(16550),a=n(18790),i=n(1652),s=n(16896),l=n(51373),c=n(13908),u=n(85302),d=n(26844);function p(e){let t=(0,u.E)();if(!e)return;let n=t.docs[e];if(!n)throw Error(`no version doc found by id=${e}`);return n}function f(e){return"link"!==e.type||e.unlisted?"category"===e.type?function(e){if(e.href&&!e.linkUnlisted)return e.href;for(let t of e.items){let e=f(t);if(e)return e}}(e):void 0:e.href}function g(){let{pathname:e}=(0,o.TH)(),t=(0,d.V)();if(!t)throw Error("Unexpected: cant find current sidebar in context");let n=v({sidebarItems:t.items,pathname:e,onlyCategories:!0}).slice(-1)[0];if(!n)throw Error(`${e} is not associated with a category. useCurrentSidebarCategory() should only be used on category index pages.`);return n}let m=(e,t)=>void 0!==e&&(0,s.Mg)(e,t),h=(e,t)=>e.some(e=>b(e,t));function b(e,t){return"link"===e.type?m(e.href,t):"category"===e.type&&(m(e.href,t)||h(e.items,t))}function y(e,t){return(0,r.useMemo)(()=>e.filter(e=>(function e(t,n){switch(t.type){case"category":return b(t,n)||t.items.some(t=>e(t,n));case"link":return!t.unlisted||b(t,n);default:return!0}})(e,t)),[e,t])}function v(e){let{sidebarItems:t,pathname:n,onlyCategories:r=!1}=e,o=[];return!function e(t){for(let a of t)if("category"===a.type&&((0,s.Mg)(a.href,n)||e(a.items))||"link"===a.type&&(0,s.Mg)(a.href,n))return!(r&&"category"!==a.type)&&o.unshift(a),!0;return!1}(t),o}function w(){let e=(0,d.V)(),{pathname:t}=(0,o.TH)();return!1!==i.gA()?.pluginData.breadcrumbs&&e?v({sidebarItems:e.items,pathname:t}):null}function k(e){let{activeVersion:t}=(0,i.Iw)(e),{preferredVersion:n}=(0,c.J)(e),o=(0,i.yW)(e);return(0,r.useMemo)(()=>(0,l.jj)([t,n,o].filter(Boolean)),[t,n,o])}function S(e,t){let n=k(t);return(0,r.useMemo)(()=>{let t=n.flatMap(e=>e.sidebars?Object.entries(e.sidebars):[]),r=t.find(t=>t[0]===e);if(!r)throw Error(`Can't find any sidebar with id "${e}" in version${n.length>1?"s":""} ${n.map(e=>e.name).join(", ")}". +Available sidebar ids are: +- ${t.map(e=>e[0]).join("\n- ")}`);return r[1]},[e,n])}function x(e,t){let n=k(t);return(0,r.useMemo)(()=>{let t=n.flatMap(e=>e.docs),r=t.find(t=>t.id===e);if(!r){if(n.flatMap(e=>e.draftIds).includes(e))return null;throw Error(`Couldn't find any doc with id "${e}" in version${n.length>1?"s":""} "${n.map(e=>e.name).join(", ")}". +Available doc ids are: +- ${(0,l.jj)(t.map(e=>e.id)).join("\n- ")}`)}return r},[e,n])}function _(e){let{route:t}=e,n=(0,o.TH)(),r=(0,u.E)(),i=t.routes,s=i.find(e=>(0,o.LX)(n.pathname,e));if(!s)return null;let l=s.sidebar,c=l?r.docsSidebars[l]:void 0;return{docElement:(0,a.H)(i),sidebarName:l,sidebarItems:c}}function E(e){return e.filter(e=>"category"!==e.type&&"link"!==e.type||!!f(e))}},85302:function(e,t,n){"use strict";n.d(t,{E:function(){return l},q:function(){return s}});var r=n(85893),o=n(67294),a=n(57100);let i=o.createContext(null);function s(e){let{children:t,version:n}=e;return(0,r.jsx)(i.Provider,{value:n,children:t})}function l(){let e=(0,o.useContext)(i);if(null===e)throw new a.i6("DocsVersionProvider");return e}},1652:function(e,t,n){"use strict";n.d(t,{gB:()=>h,WS:()=>m,_r:()=>p,jA:()=>l.jA,Jo:()=>v,MN:()=>l.MN,Iw:()=>y,gA:()=>g,z1:()=>u.z,zh:()=>f,J:()=>c.J,yW:()=>b});var r=n("16550"),o=n("75061");let a=e=>e.versions.find(e=>e.isLast);function i(e,t){return[...e.versions].sort((e,t)=>e.path===t.path?0:e.path.includes(t.path)?-1:t.path.includes(e.path)?1:0).find(e=>!!(0,r.LX)(t,{path:e.path,exact:!1,strict:!1}))}function s(e,t){let n=i(e,t),o=n?.docs.find(e=>!!r.LX(t,{path:e.path,exact:!0,strict:!1})),a=o?function(t){let n={};return e.versions.forEach(e=>{e.docs.forEach(r=>{r.id===t&&(n[e.name]=r)})}),n}(o.id):{};return{activeVersion:n,activeDoc:o,alternateDocVersions:a}}var l=n("71364"),c=n("13908"),u=n("73838");let d={},p=()=>(0,o.OD)("docusaurus-plugin-content-docs")??d,f=e=>{try{return(0,o.eZ)("docusaurus-plugin-content-docs",e,{failfast:!0})}catch(t){throw Error(`You are using a feature of the Docusaurus docs plugin, but this plugin does not seem to be enabled${"Default"===e?"":` (pluginId=${e}`}`,{cause:t})}};function g(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=p(),{pathname:n}=(0,r.TH)();return function(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},o=Object.entries(e).sort((e,t)=>t[1].path.localeCompare(e[1].path)).find(e=>{let[,n]=e;return!!(0,r.LX)(t,{path:n.path,exact:!1,strict:!1})}),a=o?{pluginId:o[0],pluginData:o[1]}:void 0;if(!a&&n.failfast)throw Error(`Can't find active docs plugin for "${t}" pathname, while it was expected to be found. Maybe you tried to use a docs feature that can only be used on a docs-related page? Existing docs plugin paths are: ${Object.values(e).map(e=>e.path).join(", ")}`);return a}(t,n,e)}function m(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=g(e),{pathname:n}=(0,r.TH)();if(!t)return;let o=i(t.pluginData,n);return{activePlugin:t,activeVersion:o}}function h(e){return f(e).versions}function b(e){return a(f(e))}function y(e){let t=f(e),{pathname:n}=(0,r.TH)();return s(t,n)}function v(e){let t=f(e),{pathname:n}=(0,r.TH)();return function(e,t){let n=a(e);return{latestDocSuggestion:s(e,t).alternateDocVersions[n.name],latestVersionSuggestion:n}}(t,n)}},96524:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return a}});var r=n(74865),o=n.n(r);o().configure({showSpinner:!1});let a={onRouteUpdate(e){let{location:t,previousLocation:n}=e;if(n&&t.pathname!==n.pathname){let e=window.setTimeout(()=>{o().start()},200);return()=>window.clearTimeout(e)}},onRouteDidUpdate(){o().done()}}},47877:function(e,t,n){"use strict";var r=n("43359"),o=n("75150");!function(e){let{themeConfig:{prism:t}}=o.default,{additionalLanguages:r}=t,a=globalThis.Prism;globalThis.Prism=e,r.forEach(e=>{"php"===e&&n(96854),n(16208)(`./prism-${e}`)}),delete globalThis.Prism,void 0!==a&&(globalThis.Prism=e)}(r.p1)},52068:function(e,t,n){"use strict";n.d(t,{Z:()=>u});var r=n("85893");n("67294");var o=n("74904"),a=n("1822"),i=n("45237"),s=n("27544"),l=n("12785");let c={anchorWithStickyNavbar:"anchorWithStickyNavbar_LWe7",anchorWithHideOnScrollNavbar:"anchorWithHideOnScrollNavbar_WYt5"};function u(e){let{as:t,id:n,...u}=e,d=(0,l.Z)(),{navbar:{hideOnScroll:p}}=(0,i.L)();if("h1"===t||!n)return(0,r.jsx)(t,{...u,id:void 0});d.collectAnchor(n);let f=(0,a.I)({id:"theme.common.headingLinkTitle",message:"Direct link to {heading}",description:"Title for link to heading"},{heading:"string"==typeof u.children?u.children:n});return(0,r.jsxs)(t,{...u,className:(0,o.Z)("anchor",p?c.anchorWithHideOnScrollNavbar:c.anchorWithStickyNavbar,u.className),id:n,children:[u.children,(0,r.jsx)(s.Z,{className:"hash-link",to:`#${n}`,"aria-label":f,title:f,children:"\u200B"})]})}},54072:function(e,t,n){"use strict";n.d(t,{Z:()=>a});var r=n("85893");n("67294");let o="iconExternalLink_nPIU";function a(e){let{width:t=13.5,height:n=13.5}=e;return(0,r.jsx)("svg",{width:t,height:n,"aria-hidden":"true",viewBox:"0 0 24 24",className:o,children:(0,r.jsx)("path",{fill:"currentColor",d:"M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"})})}},99757:function(e,t,n){"use strict";n.d(t,{Z:()=>oh});var r=n("85893"),o=n("67294"),a=n("74904"),i=n("59849"),s=n("81921"),l=n("16550"),c=n("1822"),u=n("11257");let d="__docusaurus_skipToContent_fallback";function p(e){e.setAttribute("tabindex","-1"),e.focus(),e.removeAttribute("tabindex")}let f=(0,c.I)({id:"theme.common.skipToMainContent",description:"The skip to content label used for accessibility, allowing to rapidly navigate to main content with keyboard tab/enter navigation",message:"Skip to main content"});function g(e){let t=e.children??f,{containerRef:n,onClick:a}=function(){let e=(0,o.useRef)(null),{action:t}=(0,l.k6)(),n=(0,o.useCallback)(e=>{e.preventDefault();let t=document.querySelector("main:first-of-type")??document.getElementById(d);t&&p(t)},[]);return(0,u.S)(n=>{let{location:r}=n;e.current&&!r.hash&&"PUSH"===t&&p(e.current)}),{containerRef:e,onClick:n}}();return(0,r.jsx)("div",{ref:n,role:"region","aria-label":f,children:(0,r.jsx)("a",{...e,href:`#${d}`,onClick:a,children:t})})}var m=n("50490"),h=n("54130");let b="skipToContent_fXgn";function y(){return(0,r.jsx)(g,{className:b})}var v=n("45237"),w=n("73183");function k(e){let{width:t=21,height:n=21,color:o="currentColor",strokeWidth:a=1.2,className:i,...s}=e;return(0,r.jsx)("svg",{viewBox:"0 0 15 15",width:t,height:n,...s,children:(0,r.jsx)("g",{stroke:o,strokeWidth:a,children:(0,r.jsx)("path",{d:"M.75.75l13.5 13.5M14.25.75L.75 14.25"})})})}let S="closeButton_CVFx";function x(e){return(0,r.jsx)("button",{type:"button","aria-label":(0,c.I)({id:"theme.AnnouncementBar.closeButtonAriaLabel",message:"Close",description:"The ARIA label for close button of announcement bar"}),...e,className:(0,a.Z)("clean-btn close",S,e.className),children:(0,r.jsx)(k,{width:14,height:14,strokeWidth:3.1})})}let _="content_knG7";function E(e){let{announcementBar:t}=(0,v.L)(),{content:n}=t;return(0,r.jsx)("div",{...e,className:(0,a.Z)(_,e.className),dangerouslySetInnerHTML:{__html:n}})}let O={announcementBar:"announcementBar_mb4j",announcementBarPlaceholder:"announcementBarPlaceholder_vyr4",announcementBarClose:"announcementBarClose_gvF7",announcementBarContent:"announcementBarContent_xLdY"};function P(){let{announcementBar:e}=(0,v.L)(),{isActive:t,close:n}=(0,w.n)();if(!t)return null;let{backgroundColor:o,textColor:a,isCloseable:i}=e;return(0,r.jsxs)("div",{className:O.announcementBar,style:{backgroundColor:o,color:a},role:"banner",children:[i&&(0,r.jsx)("div",{className:O.announcementBarPlaceholder}),(0,r.jsx)(E,{className:O.announcementBarContent}),i&&(0,r.jsx)(x,{onClick:n,className:O.announcementBarClose})]})}var j=n("25658"),C=n("27570"),T=n("57100"),I=n("5942");let A=o.createContext(null);function N(e){let{children:t}=e,n=function(){let e=(0,j.e)(),t=(0,I.HY)(),[n,r]=(0,o.useState)(!1),a=null!==t.component,i=(0,T.D9)(a);return(0,o.useEffect)(()=>{a&&!i&&r(!0)},[a,i]),(0,o.useEffect)(()=>{if(!a){r(!1);return}!e.shown&&r(!0)},[e.shown,a]),(0,o.useMemo)(()=>[n,r],[n])}();return(0,r.jsx)(A.Provider,{value:n,children:t})}function L(){let e=(0,o.useContext)(A);if(!e)throw new T.i6("NavbarSecondaryMenuDisplayProvider");let[t,n]=e,a=(0,o.useCallback)(()=>n(!1),[n]),i=(0,I.HY)();return(0,o.useMemo)(()=>({shown:t,hide:a,content:function(e){if(e.component){let t=e.component;return(0,r.jsx)(t,{...e.props})}}(i)}),[a,i,t])}function R(e){let{header:t,primaryMenu:n,secondaryMenu:o}=e,{shown:i}=L();return(0,r.jsxs)("div",{className:"navbar-sidebar",children:[t,(0,r.jsxs)("div",{className:(0,a.Z)("navbar-sidebar__items",{"navbar-sidebar__items--show-secondary":i}),children:[(0,r.jsx)("div",{className:"navbar-sidebar__item menu",children:n}),(0,r.jsx)("div",{className:"navbar-sidebar__item menu",children:o})]})]})}var D=n("96818"),F=n("13341");function M(e){return(0,r.jsx)("svg",{viewBox:"0 0 24 24",width:24,height:24,...e,children:(0,r.jsx)("path",{fill:"currentColor",d:"M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"})})}function B(e){return(0,r.jsx)("svg",{viewBox:"0 0 24 24",width:24,height:24,...e,children:(0,r.jsx)("path",{fill:"currentColor",d:"M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"})})}let z={toggle:"toggle_vylO",toggleButton:"toggleButton_gllP",darkToggleIcon:"darkToggleIcon_wfgR",lightToggleIcon:"lightToggleIcon_pyhR",toggleButtonDisabled:"toggleButtonDisabled_aARS"},$=o.memo(function(e){let{className:t,buttonClassName:n,value:o,onChange:i}=e,s=(0,F.Z)(),l=(0,c.I)({message:"Switch between dark and light mode (currently {mode})",id:"theme.colorToggle.ariaLabel",description:"The ARIA label for the navbar color mode toggle"},{mode:"dark"===o?(0,c.I)({message:"dark mode",id:"theme.colorToggle.ariaLabel.mode.dark",description:"The name for the dark color mode"}):(0,c.I)({message:"light mode",id:"theme.colorToggle.ariaLabel.mode.light",description:"The name for the light color mode"})});return(0,r.jsx)("div",{className:(0,a.Z)(z.toggle,t),children:(0,r.jsxs)("button",{className:(0,a.Z)("clean-btn",z.toggleButton,!s&&z.toggleButtonDisabled,n),type:"button",onClick:()=>i("dark"===o?"light":"dark"),disabled:!s,title:l,"aria-label":l,"aria-live":"polite","aria-pressed":"dark"===o?"true":"false",children:[(0,r.jsx)(M,{className:(0,a.Z)(z.toggleIcon,z.lightToggleIcon)}),(0,r.jsx)(B,{className:(0,a.Z)(z.toggleIcon,z.darkToggleIcon)})]})})}),U={darkNavbarColorModeToggle:"darkNavbarColorModeToggle_X3D1"};function H(e){let{className:t}=e,n=(0,v.L)().navbar.style,o=(0,v.L)().colorMode.disableSwitch,{colorMode:a,setColorMode:i}=(0,D.I)();return o?null:(0,r.jsx)($,{className:t,buttonClassName:"dark"===n?U.darkNavbarColorModeToggle:void 0,value:a,onChange:i})}var q=n("40858");function Q(){return(0,r.jsx)(q.Z,{className:"navbar__brand",imageClassName:"navbar__logo",titleClassName:"navbar__title text--truncate"})}function Z(){let e=(0,j.e)();return(0,r.jsx)("button",{type:"button","aria-label":(0,c.I)({id:"theme.docs.sidebar.closeSidebarButtonAriaLabel",message:"Close navigation bar",description:"The ARIA label for close button of mobile sidebar"}),className:"clean-btn navbar-sidebar__close",onClick:()=>e.toggle(),children:(0,r.jsx)(k,{color:"var(--ifm-color-emphasis-600)"})})}function W(){return(0,r.jsxs)("div",{className:"navbar-sidebar__brand",children:[(0,r.jsx)(Q,{}),(0,r.jsx)(H,{className:"margin-right--md"}),(0,r.jsx)(Z,{})]})}var V=n("27544"),G=n("7571"),Y=n("76520");function K(e,t){return void 0!==e&&void 0!==t&&RegExp(e,"gi").test(t)}var X=n("54072");function J(e){let{activeBasePath:t,activeBaseRegex:n,to:o,href:a,label:i,html:s,isDropdownLink:l,prependBaseUrlToHref:c,...u}=e,d=(0,G.ZP)(o),p=(0,G.ZP)(t),f=(0,G.ZP)(a,{forcePrependBaseUrl:!0}),g=i&&a&&!(0,Y.Z)(a),m=s?{dangerouslySetInnerHTML:{__html:s}}:{children:(0,r.jsxs)(r.Fragment,{children:[i,g&&(0,r.jsx)(X.Z,{...l&&{width:12,height:12}})]})};return a?(0,r.jsx)(V.Z,{href:c?f:a,...u,...m}):(0,r.jsx)(V.Z,{to:d,isNavLink:!0,...(t||n)&&{isActive:(e,t)=>n?K(n,t.pathname):t.pathname.startsWith(p)},...u,...m})}function ee(e){let{className:t,isDropdownItem:n=!1,...o}=e,i=(0,r.jsx)(J,{className:(0,a.Z)(n?"dropdown__link":"navbar__item navbar__link",t),isDropdownLink:n,...o});return n?(0,r.jsx)("li",{children:i}):i}function et(e){let{className:t,isDropdownItem:n,...o}=e;return(0,r.jsx)("li",{className:"menu__list-item",children:(0,r.jsx)(J,{className:(0,a.Z)("menu__link",t),...o})})}function en(e){let{mobile:t=!1,position:n,...o}=e;return(0,r.jsx)(t?et:ee,{...o,activeClassName:o.activeClassName??(t?"menu__link--active":"navbar__link--active")})}var er=n("6560"),eo=n("16896"),ea=n("93934");let ei="dropdownNavbarItemMobile_S0Fm";function es(e){let{items:t,position:n,className:i,onClick:s,...l}=e,c=(0,o.useRef)(null),[u,d]=(0,o.useState)(!1);return(0,o.useEffect)(()=>{let e=e=>{if(!(!c.current||c.current.contains(e.target)))d(!1)};return document.addEventListener("mousedown",e),document.addEventListener("touchstart",e),document.addEventListener("focusin",e),()=>{document.removeEventListener("mousedown",e),document.removeEventListener("touchstart",e),document.removeEventListener("focusin",e)}},[c]),(0,r.jsxs)("div",{ref:c,className:(0,a.Z)("navbar__item","dropdown","dropdown--hoverable",{"dropdown--right":"right"===n,"dropdown--show":u}),children:[(0,r.jsx)(J,{"aria-haspopup":"true","aria-expanded":u,role:"button",href:l.to?void 0:"#",className:(0,a.Z)("navbar__link",i),...l,onClick:l.to?void 0:e=>e.preventDefault(),onKeyDown:e=>{"Enter"===e.key&&(e.preventDefault(),d(!u))},children:l.children??l.label}),(0,r.jsx)("ul",{className:"dropdown__menu",children:t.map((e,t)=>(0,o.createElement)(rz,{isDropdownItem:!0,activeClassName:"dropdown__link--active",...e,key:t}))})]})}function el(e){var t,n;let{items:i,className:s,position:c,onClick:u,...d}=e,p=function(){let{siteConfig:{baseUrl:e}}=(0,ea.Z)(),{pathname:t}=(0,l.TH)();return t.replace(e,"/")}();let f=(t=i,n=p,t.some(e=>{var t,r;return t=e,r=n,!!((0,eo.Mg)(t.to,r)||K(t.activeBaseRegex,r)||t.activeBasePath&&r.startsWith(t.activeBasePath))||!1})),{collapsed:g,toggleCollapsed:m,setCollapsed:h}=(0,er.u)({initialState:()=>!f});return(0,o.useEffect)(()=>{f&&h(!f)},[p,f,h]),(0,r.jsxs)("li",{className:(0,a.Z)("menu__list-item",{"menu__list-item--collapsed":g}),children:[(0,r.jsx)(J,{role:"button",className:(0,a.Z)(ei,"menu__link menu__link--sublist menu__link--sublist-caret",s),...d,onClick:e=>{e.preventDefault(),m()},children:d.children??d.label}),(0,r.jsx)(er.z,{lazy:!0,as:"ul",className:"menu__list",collapsed:g,children:i.map((e,t)=>(0,o.createElement)(rz,{mobile:!0,isDropdownItem:!0,onClick:u,activeClassName:"menu__link--active",...e,key:t}))})]})}function ec(e){let{mobile:t=!1,...n}=e;return(0,r.jsx)(t?el:es,{...n})}var eu=n("7327");function ed(e){let{width:t=20,height:n=20,...o}=e;return(0,r.jsx)("svg",{viewBox:"0 0 24 24",width:t,height:n,"aria-hidden":!0,...o,children:(0,r.jsx)("path",{fill:"currentColor",d:"M12.87 15.07l-2.54-2.51.03-.03c1.74-1.94 2.98-4.17 3.71-6.53H17V4h-7V2H8v2H1v1.99h11.17C11.5 7.92 10.44 9.75 9 11.35 8.07 10.32 7.3 9.19 6.69 8h-2c.73 1.63 1.73 3.17 2.98 4.56l-5.09 5.02L4 19l5-5 3.11 3.11.76-2.04zM18.5 10h-2L12 22h2l1.12-3h4.75L21 22h2l-4.5-12zm-2.62 7l1.62-4.33L19.12 17h-3.24z"})})}let ep="iconLanguage_nlXk";var ef=n("73935");function eg(e,t){var n=void 0;return function(){for(var r=arguments.length,o=Array(r),a=0;a<r;a++)o[a]=arguments[a];n&&clearTimeout(n),n=setTimeout(function(){return e.apply(void 0,o)},t)}}function em(e){return e!==Object(e)}var eh=function(){};function eb(e){var t=e.item,n=e.items;return{index:t.__autocomplete_indexName,items:[t],positions:[1+n.findIndex(function(e){return e.objectID===t.objectID})],queryID:t.__autocomplete_queryID,algoliaSource:["autocomplete"]}}function ey(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}var ev=["items"],ew=["items"];function ek(e){return(ek="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function eS(e){return function(e){if(Array.isArray(e))return ex(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(e){if("string"==typeof e)return ex(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if("Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return ex(e,t)}}(e)||function(){throw TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function ex(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function e_(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++){if(n=a[r],!(t.indexOf(n)>=0))Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}}return o}function eE(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 eO(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?eE(Object(n),!0).forEach(function(t){(function(e,t,n){(t=function(e){var t=function(e,t){if("object"!==ek(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==ek(r))return r;throw TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===ek(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n})(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):eE(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function eP(e){return e.map(function(e){var t=e.items,n=e_(e,ev);return eO(eO({},n),{},{objectIDs:(null==t?void 0:t.map(function(e){return e.objectID}))||n.objectIDs})})}function ej(e){return e.objectID&&e.__autocomplete_indexName&&e.__autocomplete_queryID}function eC(e){return(eC="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function eT(e){return function(e){if(Array.isArray(e))return eI(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(e){if("string"==typeof e)return eI(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if("Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return eI(e,t)}}(e)||function(){throw TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function eI(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function eA(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 eN(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?eA(Object(n),!0).forEach(function(t){(function(e,t,n){(t=function(e){var t=function(e,t){if("object"!==eC(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==eC(r))return r;throw TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===eC(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n})(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):eA(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}var eL="2.6.0",eR="https://cdn.jsdelivr.net/npm/search-insights@".concat(eL,"/dist/search-insights.min.js"),eD=eg(function(e){var t,n=e.onItemsChange,r=e.items,o=e.insights,a=e.state;n({insights:o,insightsEvents:Object.keys(t=({items:r}).items.reduce(function(e,t){var n;return e[t.__autocomplete_indexName]=(null!==(n=e[t.__autocomplete_indexName])&&void 0!==n?n:[]).concat(t),e},{})).map(function(e){var n=t[e];return{index:e,items:n,algoliaSource:["autocomplete"]}}).map(function(e){return eN({eventName:"Items Viewed"},e)}),state:a})},400);function eF(e){return(eF="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function eM(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 eB(e){return e.reduce(function(e,t){return e.concat(t)},[])}function ez(e){return(ez="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function e$(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 eU(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?e$(Object(n),!0).forEach(function(t){(function(e,t,n){(t=function(e){var t=function(e,t){if("object"!==ez(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==ez(r))return r;throw TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===ez(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n})(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):e$(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function eH(e){return 0===e.collections.length?0:e.collections.reduce(function(e,t){return e+t.items.length},0)}var eq=0;function eQ(e,t){}function eZ(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function eW(e){return arguments.length>1&&void 0!==arguments[1]?arguments[1]:new Set,e}function eV(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 eG(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?eV(Object(n),!0).forEach(function(t){(function(e,t,n){(t=function(e){var t=function(e,t){if("object"!==eY(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==eY(r))return r;throw TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===eY(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n})(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):eV(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function eY(e){return(eY="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function eK(e){return(eK="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function eX(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function eJ(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 e0(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?eJ(Object(n),!0).forEach(function(t){(function(e,t,n){(t=function(e){var t=function(e,t){if("object"!==eK(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==eK(r))return r;throw TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===eK(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n})(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):eJ(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function e1(e){return(e1="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function e2(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 e4(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?e2(Object(n),!0).forEach(function(t){e3(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):e2(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function e3(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==e1(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==e1(r))return r;throw TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===e1(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function e9(e){return(e9="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function e6(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 e8(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?e6(Object(n),!0).forEach(function(t){(function(e,t,n){(t=function(e){var t=function(e,t){if("object"!==e9(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==e9(r))return r;throw TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===e9(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n})(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):e6(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function e5(e){return(e5="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function e7(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 te(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?e7(Object(n),!0).forEach(function(t){(function(e,t,n){(t=function(e){var t=function(e,t){if("object"!==e5(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==e5(r))return r;throw TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===e5(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n})(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):e7(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function tt(e){return function(e){if(Array.isArray(e))return tn(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(e){if("string"==typeof e)return tn(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if("Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return tn(e,t)}}(e)||function(){throw TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function tn(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function tr(e){return!!e.execute}function to(e){return Promise.all(e.reduce(function(e,t){if(!tr(t))return e.push(t),e;var n,r=t.searchClient,o=t.execute,a=t.requesterId,i=t.requests,s=e.find(function(e){return tr(t)&&tr(e)&&e.searchClient===r&&!!a&&e.requesterId===a});return s?(n=s.items).push.apply(n,tt(i)):e.push({execute:o,requesterId:a,items:i,searchClient:r}),e},[]).map(function(e){if(!tr(e))return Promise.resolve(e);var t=e.execute,n=e.items;return t({searchClient:e.searchClient,requests:n})})).then(function(e){return eB(e)})}function ta(e,t){return{then:function(n,r){return ta(e.then(tl(n,t,e),tl(r,t,e)),t)},catch:function(n){return ta(e.catch(tl(n,t,e)),t)},finally:function(n){return n&&t.onCancelList.push(n),ta(e.finally(tl(n&&function(){return t.onCancelList=[],n()},t,e)),t)},cancel:function(){t.isCanceled=!0;var e=t.onCancelList;t.onCancelList=[],e.forEach(function(e){e()})},isCanceled:function(){return!0===t.isCanceled}}}function ti(e){return ta(new Promise(function(t,n){return e(t,n)}),{isCanceled:!1,onCancelList:[]})}function ts(e){return ta(e,{isCanceled:!1,onCancelList:[]})}function tl(e,t,n){return e?function(n){return t.isCanceled?n:e(n)}:n}ti.resolve=function(e){return ts(Promise.resolve(e))},ti.reject=function(e){return ts(Promise.reject(e))};function tc(e){var t,n,r=(n=(t=e).collections.map(function(e){return e.items.length}).reduce(function(e,t,n){var r=e[n-1]||0;return e.push(r+t),e},[]).reduce(function(e,n){return n<=t.activeItemId?e+1:e},0),t.collections[n]);if(!r)return null;var o=r.items[function(e){for(var t=e.state,n=e.collection,r=!1,o=0,a=0;!1===r;){var i=t.collections[o];if(i===n){r=!0;break}a+=i.items.length,o++}return t.activeItemId-a}({state:e,collection:r})],a=r.source,i=a.getItemInputValue({item:o,state:e}),s=a.getItemUrl({item:o,state:e});return{item:o,itemInputValue:i,itemUrl:s,source:a}}function tu(e){return(tu="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}var td=["event","nextState","props","query","refresh","store"];function tp(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 tf(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?tp(Object(n),!0).forEach(function(t){(function(e,t,n){(t=function(e){var t=function(e,t){if("object"!==tu(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==tu(r))return r;throw TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===tu(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n})(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):tp(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}var tg=null;var tm=(nu=-1,nd=-1,np=void 0,function(e){var t=++nu;return Promise.resolve(e).then(function(e){return np&&t<nd?np:(nd=t,np=e,e)})});function th(e){var t=e.event,n=e.nextState,r=void 0===n?{}:n,o=e.props,a=e.query,i=e.refresh,s=e.store,l=function(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++){if(n=a[r],!(t.indexOf(n)>=0))Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}}return o}(e,td);tg&&o.environment.clearTimeout(tg);var c=l.setCollections,u=l.setIsOpen,d=l.setQuery,p=l.setActiveItemId,f=l.setStatus;if(d(a),p(o.defaultActiveItemId),!a&&!1===o.openOnFocus){var g,m=s.getState().collections.map(function(e){return tf(tf({},e),{},{items:[]})});f("idle"),c(m),u(null!==(g=r.isOpen)&&void 0!==g?g:o.shouldPanelOpen({state:s.getState()}));var h=ts(tm(m).then(function(){return Promise.resolve()}));return s.pendingRequests.add(h)}f("loading"),tg=o.environment.setTimeout(function(){f("stalled")},o.stallThreshold);var b=ts(tm(o.getSources(tf({query:a,refresh:i,state:s.getState()},l)).then(function(e){return Promise.all(e.map(function(e){return Promise.resolve(e.getItems(tf({query:a,refresh:i,state:s.getState()},l))).then(function(t){return function(e,t,n){var r;if(null==(r=e)?void 0:r.execute){var o="algolia"===e.requesterId?Object.assign.apply(Object,[{}].concat(tt(Object.keys(n.context).map(function(e){var t;return null===(t=n.context[e])||void 0===t?void 0:t.__algoliaSearchParameters})))):{};return te(te({},e),{},{requests:e.queries.map(function(n){return{query:"algolia"===e.requesterId?te(te({},n),{},{params:te(te({},o),n.params)}):n,sourceId:t,transformResponse:e.transformResponse}})})}return{items:e,sourceId:t}}(t,e.sourceId,s.getState())})})).then(to).then(function(t){var n,r,o;return n=t,r=e,o=s,r.map(function(e){var t,r=n.filter(function(t){return t.sourceId===e.sourceId}),a=r.map(function(e){return e.items}),i=r[0].transformResponse;var s=i?i({results:t=a.map(function(e){var t;return e8(e8({},e),{},{hits:null===(t=e.hits)||void 0===t?void 0:t.map(function(t){return e8(e8({},t),{},{__autocomplete_indexName:e.index,__autocomplete_queryID:e.queryID})})})}),hits:t.map(function(e){return e.hits}).filter(Boolean),facetHits:t.map(function(e){var t;return null===(t=e.facetHits)||void 0===t?void 0:t.map(function(e){return{label:e.value,count:e.count,_highlightResult:{label:{value:e.highlighted}}}})}).filter(Boolean)}):a;return e.onResolve({source:e,results:a,items:s,state:o.getState()}),eQ(Array.isArray(s),function(){return'The `getItems` function from source "'.concat(e.sourceId,'" must return an array of items but returned type ').concat(JSON.stringify(e5(s)),":\n\n").concat(JSON.stringify(eW(s),null,2),".\n\nSee: https://www.algolia.com/doc/ui-libraries/autocomplete/core-concepts/sources/#param-getitems")}),eQ(s.every(Boolean),'The `getItems` function from source "'.concat(e.sourceId,'" must return an array of items but returned ').concat(JSON.stringify(void 0),".\n\nDid you forget to return items?\n\nSee: https://www.algolia.com/doc/ui-libraries/autocomplete/core-concepts/sources/#param-getitems")),{source:e,items:s}})}).then(function(e){var t,n,r,a,i,l;return n=(t={collections:e,props:o,state:s.getState()}).collections,r=t.props,a=t.state,i=n.reduce(function(e,t){return e4(e4({},e),{},e3({},t.source.sourceId,e4(e4({},t.source),{},{getItems:function(){return eB(t.items)}})))},{}),l=r.plugins.reduce(function(e,t){return t.reshape?t.reshape(e):e},{sourcesBySourceId:i,state:a}).sourcesBySourceId,eB(r.reshape({sourcesBySourceId:l,sources:Object.values(l),state:a})).filter(Boolean).map(function(e){return{source:e,items:e.getItems()}})})}))).then(function(e){f("idle"),c(e);var n,d=o.shouldPanelOpen({state:s.getState()});u(null!==(n=r.isOpen)&&void 0!==n?n:o.openOnFocus&&!a&&d||d);var p=tc(s.getState());if(null!==s.getState().activeItemId&&p){var g=p.item,m=p.itemInputValue,h=p.itemUrl,b=p.source;b.onActive(tf({event:t,item:g,itemInputValue:m,itemUrl:h,refresh:i,source:b,state:s.getState()},l))}}).finally(function(){f("idle"),tg&&o.environment.clearTimeout(tg)});return s.pendingRequests.add(b)}function tb(e){return(tb="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}var ty=["event","props","refresh","store"];function tv(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 tw(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?tv(Object(n),!0).forEach(function(t){(function(e,t,n){(t=function(e){var t=function(e,t){if("object"!==tb(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==tb(r))return r;throw TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===tb(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n})(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):tv(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}var tk=/((gt|sm)-|galaxy nexus)|samsung[- ]/i;function tS(e){return(tS="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}var tx=["props","refresh","store"],t_=["inputElement","formElement","panelElement"],tE=["inputElement"],tO=["inputElement","maxLength"],tP=["sourceIndex"],tj=["sourceIndex"],tC=["item","source","sourceIndex"];function tT(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 tI(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?tT(Object(n),!0).forEach(function(t){(function(e,t,n){(t=function(e){var t=function(e,t){if("object"!==tS(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==tS(r))return r;throw TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===tS(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n})(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):tT(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function tA(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++){if(n=a[r],!(t.indexOf(n)>=0))Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}}return o}var tN=[{segment:"autocomplete-core",version:"1.9.2"}];function tL(e){return(tL="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function tR(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 tD(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==tL(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==tL(r))return r;throw TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===tL(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function tF(e){var t,n=e.state;return!1===n.isOpen||null===n.activeItemId?null:(null===(t=tc(n))||void 0===t?void 0:t.itemInputValue)||null}function tM(e,t,n,r){if(!n)return null;if(e<0&&(null===t||null!==r&&0===t))return n+e;var o=(null===t?-1:t)+e;return o<=-1||o>=n?null===r?null:0:o}function tB(e){return(tB="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function tz(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 t$(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?tz(Object(n),!0).forEach(function(t){(function(e,t,n){(t=function(e){var t=function(e,t){if("object"!==tB(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==tB(r))return r;throw TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===tB(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n})(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):tz(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}var tU=function(e,t){switch(t.type){case"setActiveItemId":case"mousemove":return t$(t$({},e),{},{activeItemId:t.payload});case"setQuery":return t$(t$({},e),{},{query:t.payload,completion:null});case"setCollections":return t$(t$({},e),{},{collections:t.payload});case"setIsOpen":return t$(t$({},e),{},{isOpen:t.payload});case"setStatus":return t$(t$({},e),{},{status:t.payload});case"setContext":return t$(t$({},e),{},{context:t$(t$({},e.context),t.payload)});case"ArrowDown":var n=t$(t$({},e),{},{activeItemId:t.payload.hasOwnProperty("nextActiveItemId")?t.payload.nextActiveItemId:tM(1,e.activeItemId,eH(e),t.props.defaultActiveItemId)});return t$(t$({},n),{},{completion:tF({state:n})});case"ArrowUp":var r=t$(t$({},e),{},{activeItemId:tM(-1,e.activeItemId,eH(e),t.props.defaultActiveItemId)});return t$(t$({},r),{},{completion:tF({state:r})});case"Escape":if(e.isOpen)return t$(t$({},e),{},{activeItemId:null,isOpen:!1,completion:null});return t$(t$({},e),{},{activeItemId:null,query:"",status:"idle",collections:[]});case"submit":return t$(t$({},e),{},{activeItemId:null,isOpen:!1,status:"idle"});case"reset":return t$(t$({},e),{},{activeItemId:!0===t.props.openOnFocus?t.props.defaultActiveItemId:null,status:"idle",query:""});case"focus":return t$(t$({},e),{},{activeItemId:t.props.defaultActiveItemId,isOpen:(t.props.openOnFocus||!!e.query)&&t.props.shouldPanelOpen({state:e})});case"blur":if(t.props.debug)return e;return t$(t$({},e),{},{isOpen:!1,activeItemId:null});case"mouseleave":return t$(t$({},e),{},{activeItemId:t.props.defaultActiveItemId});default:return eQ(!1,"The reducer action ".concat(JSON.stringify(t.type)," is not supported.")),e}};function tH(e){return(tH="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function tq(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 tQ(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?tq(Object(n),!0).forEach(function(t){(function(e,t,n){(t=function(e){var t=function(e,t){if("object"!==tH(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==tH(r))return r;throw TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===tH(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n})(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):tq(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function tZ(e){return{current:e}}function tW(e){return 0===e.collections.length?0:e.collections.reduce(function(e,t){return e+t.items.length},0)}function tV(e,t){var n=void 0;return function(){for(var r=arguments.length,o=Array(r),a=0;a<r;a++)o[a]=arguments[a];n&&clearTimeout(n),n=setTimeout(function(){return e.apply(void 0,o)},t)}}var tG=function(e,t,n,r){var o;t[0]=0;for(var a=1;a<t.length;a++){var i=t[a++],s=t[a]?(t[0]|=i?1:2,n[t[a++]]):t[++a];3===i?r[0]=s:4===i?r[1]=Object.assign(r[1]||{},s):5===i?(r[1]=r[1]||{})[t[++a]]=s:6===i?r[1][t[++a]]+=s+"":i?(o=e.apply(s,tG(e,s,n,["",null])),r.push(o),s[0]?t[0]|=2:(t[a-2]=0,t[a]=o)):r.push(s)}return r},tY=new Map;function tK(e){var t=tY.get(this);return t||(t=new Map,tY.set(this,t)),(t=tG(this,t.get(e)||(t.set(e,t=function(e){for(var t,n,r=1,o="",a="",i=[0],s=function(e){1===r&&(e||(o=o.replace(/^\s*\n\s*|\s*\n\s*$/g,"")))?i.push(0,e,o):3===r&&(e||o)?(i.push(3,e,o),r=2):2===r&&"..."===o&&e?i.push(4,e,0):2===r&&o&&!e?i.push(5,0,!0,o):r>=5&&((o||!e&&5===r)&&(i.push(r,0,o,n),r=6),e&&(i.push(r,e,0,n),r=6)),o=""},l=0;l<e.length;l++){l&&(1===r&&s(),s(l));for(var c=0;c<e[l].length;c++)t=e[l][c],1===r?"<"===t?(s(),i=[i],r=3):o+=t:4===r?"--"===o&&">"===t?(r=1,o=""):o=t+o[0]:a?t===a?a="":o+=t:'"'===t||"'"===t?a=t:">"===t?(s(),r=1):r&&("="===t?(r=5,n=o,o=""):"/"===t&&(r<5||">"===e[l][c+1])?(s(),3===r&&(i=i[0]),r=i,(i=i[0]).push(2,0,r),r=0):" "===t||" "===t||"\n"===t||"\r"===t?(s(),r=2):o+=t),3===r&&"!--"===o&&(r=4,i=i[0])}return s(),i}(e)),t),arguments,[])).length>1?t:t[0]}var tX=function(e){var t=e.environment,n=t.document.createElementNS("http://www.w3.org/2000/svg","svg");n.setAttribute("class","aa-SubmitIcon"),n.setAttribute("viewBox","0 0 24 24"),n.setAttribute("width","20"),n.setAttribute("height","20"),n.setAttribute("fill","currentColor");var r=t.document.createElementNS("http://www.w3.org/2000/svg","path");return r.setAttribute("d","M16.041 15.856c-0.034 0.026-0.067 0.055-0.099 0.087s-0.060 0.064-0.087 0.099c-1.258 1.213-2.969 1.958-4.855 1.958-1.933 0-3.682-0.782-4.95-2.050s-2.050-3.017-2.050-4.95 0.782-3.682 2.050-4.95 3.017-2.050 4.95-2.050 3.682 0.782 4.95 2.050 2.050 3.017 2.050 4.95c0 1.886-0.745 3.597-1.959 4.856zM21.707 20.293l-3.675-3.675c1.231-1.54 1.968-3.493 1.968-5.618 0-2.485-1.008-4.736-2.636-6.364s-3.879-2.636-6.364-2.636-4.736 1.008-6.364 2.636-2.636 3.879-2.636 6.364 1.008 4.736 2.636 6.364 3.879 2.636 6.364 2.636c2.125 0 4.078-0.737 5.618-1.968l3.675 3.675c0.391 0.391 1.024 0.391 1.414 0s0.391-1.024 0-1.414z"),n.appendChild(r),n},tJ=function(e){var t=e.environment,n=t.document.createElementNS("http://www.w3.org/2000/svg","svg");n.setAttribute("class","aa-ClearIcon"),n.setAttribute("viewBox","0 0 24 24"),n.setAttribute("width","18"),n.setAttribute("height","18"),n.setAttribute("fill","currentColor");var r=t.document.createElementNS("http://www.w3.org/2000/svg","path");return r.setAttribute("d","M5.293 6.707l5.293 5.293-5.293 5.293c-0.391 0.391-0.391 1.024 0 1.414s1.024 0.391 1.414 0l5.293-5.293 5.293 5.293c0.391 0.391 1.024 0.391 1.414 0s0.391-1.024 0-1.414l-5.293-5.293 5.293-5.293c0.391-0.391 0.391-1.024 0-1.414s-1.024-0.391-1.414 0l-5.293 5.293-5.293-5.293c-0.391-0.391-1.024-0.391-1.414 0s-0.391 1.024 0 1.414z"),n.appendChild(r),n},t0=function(e){var t=e.environment.document.createElementNS("http://www.w3.org/2000/svg","svg");return t.setAttribute("class","aa-LoadingIcon"),t.setAttribute("viewBox","0 0 100 100"),t.setAttribute("width","20"),t.setAttribute("height","20"),t.innerHTML='<circle\n cx="50"\n cy="50"\n fill="none"\n r="35"\n stroke="currentColor"\n stroke-dasharray="164.93361431346415 56.97787143782138"\n stroke-width="6"\n>\n <animateTransform\n attributeName="transform"\n type="rotate"\n repeatCount="indefinite"\n dur="1s"\n values="0 50 50;90 50 50;180 50 50;360 50 50"\n keyTimes="0;0.40;0.65;1"\n />\n</circle>',t},t1=["ontouchstart","ontouchend","ontouchmove","ontouchcancel"];function t2(e){this._listeners[e.type](e)}function t4(e,t,n){var r,o,a,i,s,l=e[t];if("style"===t){if("string"==typeof n)e.style=n;else if(null===n)e.style="";else for(t in n)if(!l||n[t]!==l[t]){;r=e.style,o=t,null===(a=n[t])?r[o]="":"number"!=typeof a?r[o]=a:r[o]=a+"px"}}else"o"===t[0]&&"n"===t[1]?(i=t!==(t=t.replace(/Capture$/,"")),((s=t.toLowerCase())in e||t1.includes(s))&&(t=s),t=t.slice(2),!e._listeners&&(e._listeners={}),e._listeners[t]=n,n?!l&&e.addEventListener(t,t2,i):e.removeEventListener(t,t2,i)):"list"!==t&&"tagName"!==t&&"form"!==t&&"type"!==t&&"size"!==t&&"download"!==t&&"href"!==t&&t in e?e[t]=null==n?"":n:"function"!=typeof n&&"dangerouslySetInnerHTML"!==t&&(null!=n&&(!1!==n||/^ar/.test(t))?e.setAttribute(t,n):e.removeAttribute(t))}function t3(e){if("onChange"===e)return"onInput";return e}function t9(e,t){for(var n in t)t4(e,t3(n),t[n])}function t6(e,t){for(var n in t)!("o"===n[0]&&"n"===n[1])&&t4(e,t3(n),t[n])}var t8=["children"];function t5(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function t7(e){return function(t,n){var r,o=n.children,a=function(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++){if(n=a[r],!(t.indexOf(n)>=0))Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}}return o}(n,t8),i=e.document.createElement(t);return t9(i,a),i.append.apply(i,function(e){if(Array.isArray(e))return t5(e)}(r=void 0===o?[]:o)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(r)||function(e,t){if(e){if("string"==typeof e)return t5(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if("Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return t5(e,t)}}(r)||function(){throw TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),i}}function ne(e){return(ne="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}var nt=["autocompleteScopeApi","environment","classNames","getInputProps","getInputPropsCore","isDetached","state"];function nn(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 nr(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?nn(Object(n),!0).forEach(function(t){(function(e,t,n){(t=function(e){var t=function(e,t){if("object"!==ne(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==ne(r))return r;throw TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===ne(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n})(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):nn(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}var no=function(e){var t=e.autocompleteScopeApi,n=e.environment,r=(e.classNames,e.getInputProps),o=e.getInputPropsCore,a=e.isDetached,i=e.state,s=function(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++){if(n=a[r],!(t.indexOf(n)>=0))Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}}return o}(e,nt),l=t7(n)("input",s),c=r(nr({state:i,props:o({inputElement:l}),inputElement:l},t));return t9(l,nr(nr({},c),{},{onKeyDown:function(e){if(!a||"Tab"!==e.key)c.onKeyDown(e)}})),l};function na(e){return(na="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function ni(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 ns(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?ni(Object(n),!0).forEach(function(t){(function(e,t,n){(t=function(e){var t=function(e,t){if("object"!==na(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==na(r))return r;throw TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===na(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n})(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):ni(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function nl(e,t){}var nc=0,nu,nd,np,nf,ng,nm,nh,nb,ny,nv,nw={},nk=[],nS=/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i,nx=Array.isArray;function n_(e,t){for(var n in t)e[n]=t[n];return e}function nE(e){var t=e.parentNode;t&&t.removeChild(e)}function nO(e,t,n){var r,o,a,i={};for(a in t)"key"==a?r=t[a]:"ref"==a?o=t[a]:i[a]=t[a];if(arguments.length>2&&(i.children=arguments.length>3?nf.call(arguments,2):n),"function"==typeof e&&null!=e.defaultProps)for(a in e.defaultProps)void 0===i[a]&&(i[a]=e.defaultProps[a]);return nP(e,i,r,o,null)}function nP(e,t,n,r,o){var a={type:e,props:t,key:n,ref:r,__k:null,__:null,__b:0,__e:null,__d:void 0,__c:null,__h:null,constructor:void 0,__v:null==o?++nm:o};return null==o&&null!=ng.vnode&&ng.vnode(a),a}function nj(e){return e.children}function nC(e,t){this.props=e,this.context=t}function nT(e,t){if(null==t)return e.__?nT(e.__,e.__.__k.indexOf(e)+1):null;for(var n;t<e.__k.length;t++)if(null!=(n=e.__k[t])&&null!=n.__e)return n.__e;return"function"==typeof e.type?nT(e):null}function nI(e){(!e.__d&&(e.__d=!0)&&nh.push(e)&&!nA.__r++||nb!==ng.debounceRendering)&&((nb=ng.debounceRendering)||ny)(nA)}function nA(){var e,t,n,r,o,a,i,s;for(nh.sort(nv);e=nh.shift();)e.__d&&(t=nh.length,r=void 0,o=void 0,i=(a=(n=e).__v).__e,(s=n.__P)&&(r=[],(o=n_({},a)).__v=a.__v+1,nB(s,a,o,n.__n,void 0!==s.ownerSVGElement,null!=a.__h?[i]:null,r,null==i?nT(a):i,a.__h),nz(r,a),a.__e!=i&&function e(t){var n,r;if(null!=(t=t.__)&&null!=t.__c){for(t.__e=t.__c.base=null,n=0;n<t.__k.length;n++)if(null!=(r=t.__k[n])&&null!=r.__e){t.__e=t.__c.base=r.__e;break}return e(t)}}(a)),nh.length>t&&nh.sort(nv));nA.__r=0}function nN(e,t,n,r,o,a,i,s,l,c){var u,d,p,f,g,m,h,b=r&&r.__k||nk,y=b.length;for(n.__k=[],u=0;u<t.length;u++)if(null!=(f=n.__k[u]=null==(f=t[u])||"boolean"==typeof f||"function"==typeof f?null:"string"==typeof f||"number"==typeof f||"bigint"==typeof f?nP(null,f,null,null,f):nx(f)?nP(nj,{children:f},null,null,null):f.__b>0?nP(f.type,f.props,f.key,f.ref?f.ref:null,f.__v):f)){if(f.__=n,f.__b=n.__b+1,null===(p=b[u])||p&&f.key==p.key&&f.type===p.type)b[u]=void 0;else for(d=0;d<y;d++){if((p=b[d])&&f.key==p.key&&f.type===p.type){b[d]=void 0;break}p=null}nB(e,f,p=p||nw,o,a,i,s,l,c),g=f.__e,(d=f.ref)&&p.ref!=d&&(h||(h=[]),p.ref&&h.push(p.ref,null,f),h.push(d,f.__c||g,f)),null!=g?(null==m&&(m=g),"function"==typeof f.type&&f.__k===p.__k?f.__d=l=function e(t,n,r){for(var o,a=t.__k,i=0;a&&i<a.length;i++)(o=a[i])&&(o.__=t,n="function"==typeof o.type?e(o,n,r):nL(r,o,o,a,o.__e,n));return n}(f,l,e):l=nL(e,f,p,b,g,l),"function"==typeof n.type&&(n.__d=l)):l&&p.__e==l&&l.parentNode!=e&&(l=nT(p))}for(n.__e=m,u=y;u--;)null!=b[u]&&("function"==typeof n.type&&null!=b[u].__e&&b[u].__e==n.__d&&(n.__d=function e(t){var n,r,o;if(null==t.type||"string"==typeof t.type)return t.__e;if(t.__k){for(n=t.__k.length-1;n>=0;n--)if((r=t.__k[n])&&(o=e(r)))return o}return null}(r).nextSibling),function e(t,n,r){var o,a;if(ng.unmount&&ng.unmount(t),(o=t.ref)&&(o.current&&o.current!==t.__e||n$(o,null,n)),null!=(o=t.__c)){if(o.componentWillUnmount)try{o.componentWillUnmount()}catch(e){ng.__e(e,n)}o.base=o.__P=null,t.__c=void 0}if(o=t.__k)for(a=0;a<o.length;a++)o[a]&&e(o[a],n,r||"function"!=typeof t.type);r||null==t.__e||nE(t.__e),t.__=t.__e=t.__d=void 0}(b[u],b[u]));if(h)for(u=0;u<h.length;u++)n$(h[u],h[++u],h[++u])}function nL(e,t,n,r,o,a){var i,s,l;if(void 0!==t.__d)i=t.__d,t.__d=void 0;else if(null==n||o!=a||null==o.parentNode)n:if(null==a||a.parentNode!==e)e.appendChild(o),i=null;else{for(s=a,l=0;(s=s.nextSibling)&&l<r.length;l+=1)if(s==o)break n;e.insertBefore(o,a),i=a}return void 0!==i?i:o.nextSibling}function nR(e,t,n){"-"===t[0]?e.setProperty(t,null==n?"":n):e[t]=null==n?"":"number"!=typeof n||nS.test(t)?n:n+"px"}function nD(e,t,n,r,o){var a;n:if("style"===t){if("string"==typeof n)e.style.cssText=n;else{if("string"==typeof r&&(e.style.cssText=r=""),r)for(t in r)n&&t in n||nR(e.style,t,"");if(n)for(t in n)r&&n[t]===r[t]||nR(e.style,t,n[t])}}else if("o"===t[0]&&"n"===t[1])a=t!==(t=t.replace(/Capture$/,"")),t=t.toLowerCase()in e?t.toLowerCase().slice(2):t.slice(2),e.l||(e.l={}),e.l[t+a]=n,n?r||e.addEventListener(t,a?nM:nF,a):e.removeEventListener(t,a?nM:nF,a);else if("dangerouslySetInnerHTML"!==t){if(o)t=t.replace(/xlink(H|:h)/,"h").replace(/sName$/,"s");else if("width"!==t&&"height"!==t&&"href"!==t&&"list"!==t&&"form"!==t&&"tabIndex"!==t&&"download"!==t&&"rowSpan"!==t&&"colSpan"!==t&&t in e)try{e[t]=null==n?"":n;break n}catch(e){}"function"==typeof n||(null==n||!1===n&&"-"!==t[4]?e.removeAttribute(t):e.setAttribute(t,n))}}function nF(e){return this.l[e.type+!1](ng.event?ng.event(e):e)}function nM(e){return this.l[e.type+!0](ng.event?ng.event(e):e)}function nB(e,t,n,r,o,a,i,s,l){var c,u,d,p,f,g,m,h,b,y,v,w,k,S,x,_=t.type;if(void 0!==t.constructor)return null;null!=n.__h&&(l=n.__h,s=t.__e=n.__e,t.__h=null,a=[s]),(c=ng.__b)&&c(t);try{n:if("function"==typeof _){if(h=t.props,b=(c=_.contextType)&&r[c.__c],y=c?b?b.props.value:c.__:r,n.__c?m=(u=t.__c=n.__c).__=u.__E:("prototype"in _&&_.prototype.render?t.__c=u=new _(h,y):(t.__c=u=new nC(h,y),u.constructor=_,u.render=nU),b&&b.sub(u),u.props=h,u.state||(u.state={}),u.context=y,u.__n=r,d=u.__d=!0,u.__h=[],u._sb=[]),null==u.__s&&(u.__s=u.state),null!=_.getDerivedStateFromProps&&(u.__s==u.state&&(u.__s=n_({},u.__s)),n_(u.__s,_.getDerivedStateFromProps(h,u.__s))),p=u.props,f=u.state,u.__v=t,d)null==_.getDerivedStateFromProps&&null!=u.componentWillMount&&u.componentWillMount(),null!=u.componentDidMount&&u.__h.push(u.componentDidMount);else{if(null==_.getDerivedStateFromProps&&h!==p&&null!=u.componentWillReceiveProps&&u.componentWillReceiveProps(h,y),!u.__e&&null!=u.shouldComponentUpdate&&!1===u.shouldComponentUpdate(h,u.__s,y)||t.__v===n.__v){for(t.__v!==n.__v&&(u.props=h,u.state=u.__s,u.__d=!1),u.__e=!1,t.__e=n.__e,t.__k=n.__k,t.__k.forEach(function(e){e&&(e.__=t)}),v=0;v<u._sb.length;v++)u.__h.push(u._sb[v]);u._sb=[],u.__h.length&&i.push(u);break n}null!=u.componentWillUpdate&&u.componentWillUpdate(h,u.__s,y),null!=u.componentDidUpdate&&u.__h.push(function(){u.componentDidUpdate(p,f,g)})}if(u.context=y,u.props=h,u.__P=e,w=ng.__r,k=0,"prototype"in _&&_.prototype.render){for(u.state=u.__s,u.__d=!1,w&&w(t),c=u.render(u.props,u.state,u.context),S=0;S<u._sb.length;S++)u.__h.push(u._sb[S]);u._sb=[]}else do u.__d=!1,w&&w(t),c=u.render(u.props,u.state,u.context),u.state=u.__s;while(u.__d&&++k<25);u.state=u.__s,null!=u.getChildContext&&(r=n_(n_({},r),u.getChildContext())),d||null==u.getSnapshotBeforeUpdate||(g=u.getSnapshotBeforeUpdate(p,f)),nN(e,nx(x=null!=c&&c.type===nj&&null==c.key?c.props.children:c)?x:[x],t,n,r,o,a,i,s,l),u.base=t.__e,t.__h=null,u.__h.length&&i.push(u),m&&(u.__E=u.__=null),u.__e=!1}else null==a&&t.__v===n.__v?(t.__k=n.__k,t.__e=n.__e):t.__e=function(e,t,n,r,o,a,i,s){var l,c,u,d=n.props,p=t.props,f=t.type,g=0;if("svg"===f&&(o=!0),null!=a){for(;g<a.length;g++)if((l=a[g])&&"setAttribute"in l==!!f&&(f?l.localName===f:3===l.nodeType)){e=l,a[g]=null;break}}if(null==e){if(null===f)return document.createTextNode(p);e=o?document.createElementNS("http://www.w3.org/2000/svg",f):document.createElement(f,p.is&&p),a=null,s=!1}if(null===f)d===p||s&&e.data===p||(e.data=p);else{if(a=a&&nf.call(e.childNodes),c=(d=n.props||nw).dangerouslySetInnerHTML,u=p.dangerouslySetInnerHTML,!s){if(null!=a)for(d={},g=0;g<e.attributes.length;g++)d[e.attributes[g].name]=e.attributes[g].value;(u||c)&&(u&&(c&&u.__html==c.__html||u.__html===e.innerHTML)||(e.innerHTML=u&&u.__html||""))}if(function(e,t,n,r,o){var a;for(a in n)"children"===a||"key"===a||a in t||nD(e,a,null,n[a],r);for(a in t)o&&"function"!=typeof t[a]||"children"===a||"key"===a||"value"===a||"checked"===a||n[a]===t[a]||nD(e,a,t[a],n[a],r)}(e,p,d,o,s),u)t.__k=[];else if(nN(e,nx(g=t.props.children)?g:[g],t,n,r,o&&"foreignObject"!==f,a,i,a?a[0]:n.__k&&nT(n,0),s),null!=a)for(g=a.length;g--;)null!=a[g]&&nE(a[g]);s||("value"in p&&void 0!==(g=p.value)&&(g!==e.value||"progress"===f&&!g||"option"===f&&g!==d.value)&&nD(e,"value",g,d.value,!1),"checked"in p&&void 0!==(g=p.checked)&&g!==e.checked&&nD(e,"checked",g,d.checked,!1))}return e}(n.__e,t,n,r,o,a,i,l);(c=ng.diffed)&&c(t)}catch(e){t.__v=null,(l||null!=a)&&(t.__e=s,t.__h=!!l,a[a.indexOf(s)]=null),ng.__e(e,t,n)}}function nz(e,t){ng.__c&&ng.__c(t,e),e.some(function(t){try{e=t.__h,t.__h=[],e.some(function(e){e.call(t)})}catch(e){ng.__e(e,t.__v)}})}function n$(e,t,n){try{"function"==typeof e?e(t):e.current=t}catch(e){ng.__e(e,n)}}function nU(e,t,n){return this.constructor(e,n)}function nH(e,t){return t.reduce(function(e,t){return e&&e[t]},e)}nf=nk.slice,ng={__e:function(e,t,n,r){for(var o,a,i;t=t.__;)if((o=t.__c)&&!o.__)try{if((a=o.constructor)&&null!=a.getDerivedStateFromError&&(o.setState(a.getDerivedStateFromError(e)),i=o.__d),null!=o.componentDidCatch&&(o.componentDidCatch(e,r||{}),i=o.__d),i)return o.__E=o}catch(t){e=t}throw e}},nm=0,nC.prototype.setState=function(e,t){var n;n=null!=this.__s&&this.__s!==this.state?this.__s:this.__s=n_({},this.state),"function"==typeof e&&(e=e(n_({},n),this.props)),e&&n_(n,e),null!=e&&this.__v&&(t&&this._sb.push(t),nI(this))},nC.prototype.forceUpdate=function(e){this.__v&&(this.__e=!0,e&&this.__h.push(e),nI(this))},nC.prototype.render=nj,nh=[],ny="function"==typeof Promise?Promise.prototype.then.bind(Promise.resolve()):setTimeout,nv=function(e,t){return e.__v.__b-t.__v.__b},nA.__r=0;function nq(e){var t=e.highlightedValue.split("__aa-highlight__"),n=t.shift(),r=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];return{get:function(){return e},add:function(t){var n=e[e.length-1];(null==n?void 0:n.isHighlighted)===t.isHighlighted?e[e.length-1]={value:n.value+t.value,isHighlighted:n.isHighlighted}:e.push(t)}}}(n?[{value:n,isHighlighted:!1}]:[]);return t.forEach(function(e){var t=e.split("__/aa-highlight__");r.add({value:t[0],isHighlighted:!0}),""!==t[1]&&r.add({value:t[1],isHighlighted:!1})}),r.get()}function nQ(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function nZ(e){var t,n=e.hit,r=e.attribute,o=Array.isArray(r)?r:[r];var a=nH(n,["_highlightResult"].concat(function(e){if(Array.isArray(e))return nQ(e)}(t=o)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(t)||function(e,t){if(e){if("string"==typeof e)return nQ(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if("Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return nQ(e,t)}}(t)||function(){throw TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}(),["value"]));return"string"!=typeof a&&(a=nH(n,o)||""),nq({highlightedValue:a})}var nW={"&":"&","<":"<",">":">",""":'"',"'":"'"},nV=new RegExp(/\w/i),nG=/&(amp|quot|lt|gt|#39);/g,nY=RegExp(nG.source);function nK(e){return(nK="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function nX(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 nJ(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?nX(Object(n),!0).forEach(function(t){(function(e,t,n){(t=function(e){var t=function(e,t){if("object"!==nK(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==nK(r))return r;throw TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===nK(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n})(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):nX(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function n0(e){return e.some(function(e){return e.isHighlighted})?e.map(function(t,n){var r,o,a,i,s,l,c,u;return nJ(nJ({},t),{},{isHighlighted:(s=(r=e)[o=n],l=(null===(a=r[o+1])||void 0===a?void 0:a.isHighlighted)||!0,c=(null===(i=r[o-1])||void 0===i?void 0:i.isHighlighted)||!0,nV.test((u=s.value)&&nY.test(u)?u.replace(nG,function(e){return nW[e]}):u)||c!==l?!s.isHighlighted:!c)})}):e.map(function(e){return nJ(nJ({},e),{},{isHighlighted:!1})})}function n1(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function n2(e){var t,n=e.hit,r=e.attribute,o=Array.isArray(r)?r:[r];var a=nH(n,["_snippetResult"].concat(function(e){if(Array.isArray(e))return n1(e)}(t=o)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(t)||function(e,t){if(e){if("string"==typeof e)return n1(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if("Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return n1(e,t)}}(t)||function(){throw TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}(),["value"]));return"string"!=typeof a&&(a=nH(n,o)||""),nq({highlightedValue:a})}function n4(e,t){if("string"==typeof t){var n=e.document.querySelector(t);return nl(null!==n,"The element ".concat(JSON.stringify(t)," is not in the document.")),n}return t}function n3(e){return(n3="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}var n9=["classNames","container","getEnvironmentProps","getFormProps","getInputProps","getItemProps","getLabelProps","getListProps","getPanelProps","getRootProps","panelContainer","panelPlacement","render","renderNoResults","renderer","detachedMediaQuery","components","translations"];function n6(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 n8(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?n6(Object(n),!0).forEach(function(t){(function(e,t,n){(t=function(e){var t=function(e,t){if("object"!==n3(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==n3(r))return r;throw TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===n3(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n})(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):n6(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}var n5={clearButton:"aa-ClearButton",detachedCancelButton:"aa-DetachedCancelButton",detachedContainer:"aa-DetachedContainer",detachedFormContainer:"aa-DetachedFormContainer",detachedOverlay:"aa-DetachedOverlay",detachedSearchButton:"aa-DetachedSearchButton",detachedSearchButtonIcon:"aa-DetachedSearchButtonIcon",detachedSearchButtonPlaceholder:"aa-DetachedSearchButtonPlaceholder",detachedSearchButtonQuery:"aa-DetachedSearchButtonQuery",form:"aa-Form",input:"aa-Input",inputWrapper:"aa-InputWrapper",inputWrapperPrefix:"aa-InputWrapperPrefix",inputWrapperSuffix:"aa-InputWrapperSuffix",item:"aa-Item",label:"aa-Label",list:"aa-List",loadingIndicator:"aa-LoadingIndicator",panel:"aa-Panel",panelLayout:"aa-PanelLayout aa-Panel--scrollable",root:"aa-Autocomplete",source:"aa-Source",sourceFooter:"aa-SourceFooter",sourceHeader:"aa-SourceHeader",sourceNoResults:"aa-SourceNoResults",submitButton:"aa-SubmitButton"},n7=function(e,t){var n=e.children;(0,e.render)(n,t)},re={createElement:nO,Fragment:nj,render:function(e,t,n){var r,o,a;ng.__&&ng.__(e,t),o=(r="function"==typeof n)?null:n&&n.__k||t.__k,a=[],nB(t,e=(!r&&n||t).__k=nO(nj,null,[e]),o||nw,nw,void 0!==t.ownerSVGElement,!r&&n?[n]:o?null:t.firstChild?nf.call(t.childNodes):null,a,!r&&n?n:o?o.__e:t.firstChild,r),nz(a,e)}};function rt(e){return(rt="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function rn(){return(rn=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}).apply(this,arguments)}function rr(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 ro(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?rr(Object(n),!0).forEach(function(t){(function(e,t,n){(t=function(e){var t=function(e,t){if("object"!==rt(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==rt(r))return r;throw TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===rt(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n})(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):rr(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}var ra=[{segment:"autocomplete-js",version:"1.9.2"}];function ri(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function rs(e){return(rs="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}var rl=function(e){return e&&"object"===rs(e)&&"[object Object]"===Object.prototype.toString.call(e)};function rc(e){return(rc="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function ru(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 rd(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?ru(Object(n),!0).forEach(function(t){rp(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):ru(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function rp(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==rc(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==rc(r))return r;throw TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===rc(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function rf(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}var rg=["components"];function rm(e){return(rm="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function rh(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 rb(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?rh(Object(n),!0).forEach(function(t){ry(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):rh(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function ry(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==rm(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==rm(r))return r;throw TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===rm(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var rv=0,rw=n("50777");let rk=n(22372),rS=e=>rk.tokenizer(e).map(e=>e.str);var rx=n("813"),r_=n.n(rx);function rE(){let e=(0,l.TH)(),t=(0,l.k6)(),{siteConfig:{baseUrl:n}}=(0,ea.Z)(),[r,a]=(0,o.useState)({terms:[],isDocsOrBlog:!1});return(0,o.useEffect)(()=>{if(!e.state?.cmfcmfhighlight||0===e.state.cmfcmfhighlight.terms.length)return;a(e.state.cmfcmfhighlight);let{cmfcmfhighlight:n,...r}=e.state;t.replace({...e,state:r})},[e.state?.cmfcmfhighlight,t,e]),(0,o.useEffect)(()=>{if(0===r.terms.length)return;let e=r.isDocsOrBlog?document.getElementsByTagName("article")[0]:document.getElementsByTagName("main")[0];if(!e)return;let t=new(r_())(e),n={ignoreJoiners:!0};return t.mark(r.terms,n),()=>t.unmark(n)},[r,n]),null}var rO=n("75061"),rP=n("1138");function rj(e){let{document:t}=e,[n,r]=t.sectionRoute.split("#"),o=n;return r&&(o+="#"+r),o}let rC={documents:[],index:rk(function(){this.ref("id"),this.field("title"),this.field("content")})};async function rT(e,t){{let n;try{let r=await fetch(`${e}search-index-${t}.json`);if(!r.ok)return rC;n=await r.json()}catch(e){return rC}return{documents:n.documents,index:rk.Index.load(n.index)}}}let rI=()=>{let e=(0,F.Z)(),[t,r]=(0,o.useState)(()=>!!e&&"dark"===document.documentElement.getAttribute("data-theme"));(0,o.useEffect)(()=>{let e=new MutationObserver(()=>{r("dark"===document.documentElement.getAttribute("data-theme"))});return e.observe(document.documentElement,{attributes:!0,attributeFilter:["data-theme"]}),()=>e.disconnect()},[]);let{siteConfig:{baseUrl:a}}=(0,ea.Z)(),{titleBoost:i,contentBoost:s,tagsBoost:u,parentCategoriesBoost:d,indexDocSidebarParentCategories:p,maxSearchResults:f}=(0,rO.eZ)("@cmfcmf/docusaurus-search-local"),g=(0,l.k6)(),{tags:m}=function(){let{i18n:e}=(0,ea.Z)(),t=n(1652).z1(),r=[rP.H,...t];return{locale:e.currentLocale,tags:r}}(),h=(0,o.useRef)(m);(0,o.useEffect)(()=>{h.current=m},[m]);let b=(0,o.useRef)({}),y=async e=>{let t=b.current[e];switch(t?.state){case"ready":return t;case void 0:{let t=[];b.current[e]={state:"loading",callbacks:t};let n=await rT(a,e);return t.forEach(e=>e(n)),b.current[e]={state:"ready",...n}}case"loading":return new Promise(e=>{t.callbacks.push(e)})}},v=(0,c.I)({message:"cmfcmf/d-s-l.searchBar.placeholder",description:"Placeholder shown in the searchbar"}),w=(0,o.useRef)(null),k=(0,o.useRef)(null);return(0,o.useEffect)(()=>{if(!!w.current)return k.current=function(e){var t,n=function(){var e=[],t=[];function n(n){e.push(n);var r=n();t.push(r)}return{runEffect:n,cleanupEffects:function(){var e=t;t=[],e.forEach(function(e){e()})},runEffects:function(){var t=e;e=[],t.forEach(function(e){n(e)})}}}(),r=n.runEffect,o=n.cleanupEffects,a=n.runEffects;var i=(t=[],{reactive:function(e){var n=e(),r={_fn:e,_ref:{current:n},get value(){return this._ref.current},set value(value){this._ref.current=value}};return t.push(r),r},runReactives:function(){t.forEach(function(e){e._ref.current=e._fn()})}}),s=i.reactive,l=i.runReactives,c=tZ(!1),u=tZ(e),d=tZ(void 0),p=s(function(){var e,t,n,r,o,a,i,s,l,c,d,p,f,g,m,h,b,y,v,w,k,S,x,_,E;return n=(e=u.current).classNames,r=e.container,o=e.getEnvironmentProps,a=e.getFormProps,i=e.getInputProps,s=e.getItemProps,l=e.getLabelProps,c=e.getListProps,d=e.getPanelProps,p=e.getRootProps,f=e.panelContainer,g=e.panelPlacement,m=e.render,h=e.renderNoResults,b=e.renderer,y=e.detachedMediaQuery,v=e.components,w=e.translations,k=function(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++){if(n=a[r],!(t.indexOf(n)>=0))Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}}return o}(e,n9),nl("INPUT"!==(x=n4(S="undefined"!=typeof window?window:{},r)).tagName,"The `container` option does not support `input` elements. You need to change the container to a `div`."),E={Highlight:function(e){var t=e.createElement,n=e.Fragment;function r(e){var r=e.hit,o=e.attribute,a=e.tagName,i=void 0===a?"mark":a;return t(n,{},nZ({hit:r,attribute:o}).map(function(e,n){return e.isHighlighted?t(i,{key:n},e.value):e.value}))}return r.__autocomplete_componentName="Highlight",r}(_=n8(n8({},re),b)),ReverseHighlight:function(e){var t=e.createElement,n=e.Fragment;function r(e){var r=e.hit,o=e.attribute,a=e.tagName,i=void 0===a?"mark":a;return t(n,{},n0(nZ({hit:r,attribute:o})).map(function(e,n){return e.isHighlighted?t(i,{key:n},e.value):e.value}))}return r.__autocomplete_componentName="ReverseHighlight",r}(_),ReverseSnippet:function(e){var t=e.createElement,n=e.Fragment;function r(e){var r=e.hit,o=e.attribute,a=e.tagName,i=void 0===a?"mark":a;return t(n,{},n0(n2({hit:r,attribute:o})).map(function(e,n){return e.isHighlighted?t(i,{key:n},e.value):e.value}))}return r.__autocomplete_componentName="ReverseSnippet",r}(_),Snippet:function(e){var t=e.createElement,n=e.Fragment;function r(e){var r=e.hit,o=e.attribute,a=e.tagName,i=void 0===a?"mark":a;return t(n,{},n2({hit:r,attribute:o}).map(function(e,n){return e.isHighlighted?t(i,{key:n},e.value):e.value}))}return r.__autocomplete_componentName="Snippet",r}(_)},{renderer:{classNames:function(){for(var e=arguments.length,t=Array(e),n=0;n<e;n++)t[n]=arguments[n];return t.reduce(function(e,t){return Object.keys(t).forEach(function(n){var r=e[n],o=t[n];r!==o&&(e[n]=[r,o].filter(Boolean).join(" "))}),e},{})}(n5,null!=n?n:{}),container:x,getEnvironmentProps:null!=o?o:function(e){return e.props},getFormProps:null!=a?a:function(e){return e.props},getInputProps:null!=i?i:function(e){return e.props},getItemProps:null!=s?s:function(e){return e.props},getLabelProps:null!=l?l:function(e){return e.props},getListProps:null!=c?c:function(e){return e.props},getPanelProps:null!=d?d:function(e){return e.props},getRootProps:null!=p?p:function(e){return e.props},panelContainer:f?n4(S,f):S.document.body,panelPlacement:null!=g?g:"input-wrapper-width",render:null!=m?m:n7,renderNoResults:h,renderer:_,detachedMediaQuery:null!=y?y:getComputedStyle(S.document.documentElement).getPropertyValue("--aa-detached-media-query"),components:n8(n8({},E),v),translations:n8(n8({},{clearButtonTitle:"Clear",detachedCancelButtonText:"Cancel",submitButtonTitle:"Submit"}),w)},core:n8(n8({},k),{},{id:null!==(t=k.id)&&void 0!==t?t:"autocomplete-".concat(nc++),environment:S})}}),f=s(function(){return p.value.core.environment.matchMedia(p.value.renderer.detachedMediaQuery).matches}),g=s(function(){return function(e){t=0;var t,n,r,o,a,i,s,l,c,u,d,p,f,g,m,h,b,y,v,w,k,S,x,_,E,O,P,j=[];var C=(n=e,r=j,a="undefined"!=typeof window?window:{},i=n.plugins||[],e0(e0({debug:!1,openOnFocus:!1,placeholder:"",autoFocus:!1,defaultActiveItemId:null,stallThreshold:300,insights:!1,environment:a,shouldPanelOpen:function(e){return eH(e.state)>0},reshape:function(e){return e.sources}},n),{},{id:null!==(o=n.id)&&void 0!==o?o:"autocomplete-".concat(eq++),plugins:i,initialState:e0({activeItemId:null,query:"",completion:null,collections:[],isOpen:!1,status:"idle",context:{}},n.initialState),onStateChange:function(e){var t;null===(t=n.onStateChange)||void 0===t||t.call(n,e),i.forEach(function(t){var n;return null===(n=t.onStateChange)||void 0===n?void 0:n.call(t,e)})},onSubmit:function(e){var t;null===(t=n.onSubmit)||void 0===t||t.call(n,e),i.forEach(function(t){var n;return null===(n=t.onSubmit)||void 0===n?void 0:n.call(t,e)})},onReset:function(e){var t;null===(t=n.onReset)||void 0===t||t.call(n,e),i.forEach(function(t){var n;return null===(n=t.onReset)||void 0===n?void 0:n.call(t,e)})},getSources:function(e){var t;return Promise.all([].concat(function(e){if(Array.isArray(e))return eX(e)}(t=i.map(function(e){return e.getSources}))||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(t)||function(e,t){if(e){if("string"==typeof e)return eX(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if("Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return eX(e,t)}}(t)||function(){throw TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}(),[n.getSources]).filter(Boolean).map(function(t){var n;return n=[],Promise.resolve(t(e)).then(function(e){return eQ(Array.isArray(e),function(){return"The `getSources` function must return an array of sources but returned type ".concat(JSON.stringify(eY(e)),":\n\n").concat(JSON.stringify(eW(e),null,2))}),Promise.all(e.filter(function(e){return!!e}).map(function(e){if(eQ("string"==typeof e.sourceId,"A source must provide a `sourceId` string."),n.includes(e.sourceId))throw Error("[Autocomplete] The `sourceId` ".concat(JSON.stringify(e.sourceId)," is not unique."));n.push(e.sourceId);var t={getItemInputValue:function(e){return e.state.query},getItemUrl:function(){},onSelect:function(e){(0,e.setIsOpen)(!1)},onActive:eh,onResolve:eh};return Object.keys(t).forEach(function(e){t[e].__default=!0}),Promise.resolve(eG(eG({},t),e))}))})})).then(function(e){return eB(e)}).then(function(e){return e.map(function(e){return e0(e0({},e),{},{onSelect:function(t){e.onSelect(t),r.forEach(function(e){var n;return null===(n=e.onSelect)||void 0===n?void 0:n.call(e,t)})},onActive:function(t){e.onActive(t),r.forEach(function(e){var n;return null===(n=e.onActive)||void 0===n?void 0:n.call(e,t)})},onResolve:function(t){e.onResolve(t),r.forEach(function(e){var n;return null===(n=e.onResolve)||void 0===n?void 0:n.call(e,t)})}})})})},navigator:e0({navigate:function(e){var t=e.itemUrl;a.location.assign(t)},navigateNewTab:function(e){var t=e.itemUrl,n=a.open(t,"_blank","noopener");null==n||n.focus()},navigateNewWindow:function(e){var t=e.itemUrl;a.open(t,"_blank","noopener")}},n.navigator)}));var T=(s=tU,l=C,c=function(e){var t=e.prevState,n=e.state;C.onStateChange(tQ({prevState:t,state:n,refresh:N,navigator:C.navigator},I))},u=l.initialState,{getState:function(){return u},dispatch:function(e,t){var n=function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?eM(Object(n),!0).forEach(function(t){(function(e,t,n){(t=function(e){var t=function(e,t){if("object"!==eF(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==eF(r))return r;throw TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===eF(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n})(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):eM(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}({},u);c({state:u=s(u,{type:e,props:l,payload:t}),prevState:n})},pendingRequests:(d=[],{add:function(e){return d.push(e),e.finally(function(){d=d.filter(function(t){return t!==e})})},cancelAll:function(){d.forEach(function(e){return e.cancel()})},isEmpty:function(){return 0===d.length}})});var I=(p=({store:T}).store,{setActiveItemId:function(e){p.dispatch("setActiveItemId",e)},setQuery:function(e){p.dispatch("setQuery",e)},setCollections:function(e){var t=0,n=e.map(function(e){return eU(eU({},e),{},{items:eB(e.items).map(function(e){return eU(eU({},e),{},{__autocomplete_id:t++})})})});p.dispatch("setCollections",n)},setIsOpen:function(e){p.dispatch("setIsOpen",e)},setStatus:function(e){p.dispatch("setStatus",e)},setContext:function(e){p.dispatch("setContext",e)}});var A=(g=(f=tQ({props:C,refresh:N,store:T,navigator:C.navigator},I)).props,m=f.refresh,h=f.store,b=tA(f,tx),y=function(e,t){return void 0!==t?"".concat(e,"-").concat(t):e},{getEnvironmentProps:function(e){var t=e.inputElement,n=e.formElement,r=e.panelElement;function o(e){if(!!(h.getState().isOpen||!h.pendingRequests.isEmpty())&&e.target!==t)!1===[n,r].some(function(t){var n,r;return(n=t)===(r=e.target)||n.contains(r)})&&(h.dispatch("blur",null),!g.debug&&h.pendingRequests.cancelAll())}return tI({onTouchStart:o,onMouseDown:o,onTouchMove:function(e){if(!1!==h.getState().isOpen&&t===g.environment.document.activeElement&&e.target!==t)t.blur()}},tA(e,t_))},getRootProps:function(e){return tI({role:"combobox","aria-expanded":h.getState().isOpen,"aria-haspopup":"listbox","aria-owns":h.getState().isOpen?"".concat(g.id,"-list"):void 0,"aria-labelledby":"".concat(g.id,"-label")},e)},getFormProps:function(e){return e.inputElement,tI({action:"",noValidate:!0,role:"search",onSubmit:function(t){var n;t.preventDefault(),g.onSubmit(tI({event:t,refresh:m,state:h.getState()},b)),h.dispatch("submit",null),null===(n=e.inputElement)||void 0===n||n.blur()},onReset:function(t){var n;t.preventDefault(),g.onReset(tI({event:t,refresh:m,state:h.getState()},b)),h.dispatch("reset",null),null===(n=e.inputElement)||void 0===n||n.focus()}},tA(e,tE))},getLabelProps:function(e){var t=e||{},n=t.sourceIndex,r=tA(t,tP);return tI({htmlFor:"".concat(y(g.id,n),"-input"),id:"".concat(y(g.id,n),"-label")},r)},getInputProps:function(e){function t(e){(g.openOnFocus||h.getState().query)&&th(tI({event:e,props:g,query:h.getState().completion||h.getState().query,refresh:m,store:h},b)),h.dispatch("focus",null)}var n,r,o=e||{},a=(o.inputElement,o.maxLength),i=void 0===a?512:a,s=tA(o,tO),l=tc(h.getState());var c=!!((n=(null===(r=g.environment.navigator)||void 0===r?void 0:r.userAgent)||"")&&n.match(tk)),u=null!=l&&l.itemUrl&&!c?"go":"search";return tI({"aria-autocomplete":"both","aria-activedescendant":h.getState().isOpen&&null!==h.getState().activeItemId?"".concat(g.id,"-item-").concat(h.getState().activeItemId):void 0,"aria-controls":h.getState().isOpen?"".concat(g.id,"-list"):void 0,"aria-labelledby":"".concat(g.id,"-label"),value:h.getState().completion||h.getState().query,id:"".concat(g.id,"-input"),autoComplete:"off",autoCorrect:"off",autoCapitalize:"off",enterKeyHint:u,spellCheck:"false",autoFocus:g.autoFocus,placeholder:g.placeholder,maxLength:i,type:"search",onChange:function(e){th(tI({event:e,props:g,query:e.currentTarget.value.slice(0,i),refresh:m,store:h},b))},onKeyDown:function(e){!function(e){var t=e.event,n=e.props,r=e.refresh,o=e.store,a=function(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++){if(n=a[r],!(t.indexOf(n)>=0))Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}}return o}(e,ty);if("ArrowUp"===t.key||"ArrowDown"===t.key){var i=function(){var e=n.environment.document.getElementById("".concat(n.id,"-item-").concat(o.getState().activeItemId));e&&(e.scrollIntoViewIfNeeded?e.scrollIntoViewIfNeeded(!1):e.scrollIntoView(!1))},s=function(){var e=tc(o.getState());if(null!==o.getState().activeItemId&&e){var n=e.item,i=e.itemInputValue,s=e.itemUrl,l=e.source;l.onActive(tw({event:t,item:n,itemInputValue:i,itemUrl:s,refresh:r,source:l,state:o.getState()},a))}};t.preventDefault(),!1===o.getState().isOpen&&(n.openOnFocus||o.getState().query)?th(tw({event:t,props:n,query:o.getState().query,refresh:r,store:o},a)).then(function(){o.dispatch(t.key,{nextActiveItemId:n.defaultActiveItemId}),s(),setTimeout(i,0)}):(o.dispatch(t.key,{}),s(),i())}else if("Escape"===t.key)t.preventDefault(),o.dispatch(t.key,null),o.pendingRequests.cancelAll();else if("Tab"===t.key)o.dispatch("blur",null),o.pendingRequests.cancelAll();else if("Enter"===t.key){if(null===o.getState().activeItemId||o.getState().collections.every(function(e){return 0===e.items.length})){!n.debug&&o.pendingRequests.cancelAll();return}t.preventDefault();var l=tc(o.getState()),c=l.item,u=l.itemInputValue,d=l.itemUrl,p=l.source;if(t.metaKey||t.ctrlKey)void 0!==d&&(p.onSelect(tw({event:t,item:c,itemInputValue:u,itemUrl:d,refresh:r,source:p,state:o.getState()},a)),n.navigator.navigateNewTab({itemUrl:d,item:c,state:o.getState()}));else if(t.shiftKey)void 0!==d&&(p.onSelect(tw({event:t,item:c,itemInputValue:u,itemUrl:d,refresh:r,source:p,state:o.getState()},a)),n.navigator.navigateNewWindow({itemUrl:d,item:c,state:o.getState()}));else if(t.altKey);else{if(void 0!==d){p.onSelect(tw({event:t,item:c,itemInputValue:u,itemUrl:d,refresh:r,source:p,state:o.getState()},a)),n.navigator.navigate({itemUrl:d,item:c,state:o.getState()});return}th(tw({event:t,nextState:{isOpen:!1},props:n,query:u,refresh:r,store:o},a)).then(function(){p.onSelect(tw({event:t,item:c,itemInputValue:u,itemUrl:d,refresh:r,source:p,state:o.getState()},a))})}}}(tI({event:e,props:g,refresh:m,store:h},b))},onFocus:t,onBlur:eh,onClick:function(n){e.inputElement===g.environment.document.activeElement&&!h.getState().isOpen&&t(n)}},s)},getPanelProps:function(e){return tI({onMouseDown:function(e){e.preventDefault()},onMouseLeave:function(){h.dispatch("mouseleave",null)}},e)},getListProps:function(e){var t=e||{},n=t.sourceIndex,r=tA(t,tj);return tI({role:"listbox","aria-labelledby":"".concat(y(g.id,n),"-label"),id:"".concat(y(g.id,n),"-list")},r)},getItemProps:function(e){var t=e.item,n=e.source,r=e.sourceIndex,o=tA(e,tC);return tI({id:"".concat(y(g.id,r),"-item-").concat(t.__autocomplete_id),role:"option","aria-selected":h.getState().activeItemId===t.__autocomplete_id,onMouseMove:function(e){if(t.__autocomplete_id!==h.getState().activeItemId){h.dispatch("mousemove",t.__autocomplete_id);var n=tc(h.getState());if(null!==h.getState().activeItemId&&n){var r=n.item,o=n.itemInputValue,a=n.itemUrl,i=n.source;i.onActive(tI({event:e,item:r,itemInputValue:o,itemUrl:a,refresh:m,source:i,state:h.getState()},b))}}},onMouseDown:function(e){e.preventDefault()},onClick:function(e){var r=n.getItemInputValue({item:t,state:h.getState()}),o=n.getItemUrl({item:t,state:h.getState()});(o?Promise.resolve():th(tI({event:e,nextState:{isOpen:!1},props:g,query:r,refresh:m,store:h},b))).then(function(){n.onSelect(tI({event:e,item:t,itemInputValue:r,itemUrl:o,refresh:m,source:n,state:h.getState()},b))})}},o)}});function N(){return th(tQ({event:new Event("input"),nextState:{isOpen:T.getState().isOpen},props:C,navigator:C.navigator,query:T.getState().query,refresh:N,store:T},I))}if(e.insights&&!C.plugins.some(function(e){return"aa.algoliaInsightsPlugin"===e.name})){var L="boolean"==typeof e.insights?{}:e.insights;C.plugins.push(function(e){var t=function(e){return eN({onItemsChange:function(e){var t=e.insights,n=e.insightsEvents;t.viewedObjectIDs.apply(t,eT(n.map(function(e){return eN(eN({},e),{},{algoliaSource:[].concat(eT(e.algoliaSource||[]),["autocomplete-internal"])})})))},onSelect:function(e){var t=e.insights,n=e.insightsEvents;t.clickedObjectIDsAfterSearch.apply(t,eT(n.map(function(e){return eN(eN({},e),{},{algoliaSource:[].concat(eT(e.algoliaSource||[]),["autocomplete-internal"])})})))},onActive:eh},e)}(e),n=t.insightsClient,r=t.onItemsChange,o=t.onSelect,a=t.onActive,i=n;!n&&!function(e){if("undefined"!=typeof window)e({window:window})}(function(e){var t=e.window,n=t.AlgoliaAnalyticsObject||"aa";"string"==typeof n&&(i=t[n]),!i&&(t.AlgoliaAnalyticsObject=n,!t[n]&&(t[n]=function(){!t[n].queue&&(t[n].queue=[]);for(var e=arguments.length,r=Array(e),o=0;o<e;o++)r[o]=arguments[o];t[n].queue.push(r)}),t[n].version=eL,i=t[n],function(e){var t="[Autocomplete]: Could not load search-insights.js. Please load it manually following https://alg.li/insights-autocomplete";try{var n=e.document.createElement("script");n.async=!0,n.src=eR,n.onerror=function(){console.error(t)},document.body.appendChild(n)}catch(e){console.error(t)}}(t))});var s=function(e){var t,n,r,o,a,i=(o=(r=(n=2,function(e){if(Array.isArray(e))return e}(t=(e.version||"").split(".").map(Number))||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,o,a,i,s=[],l=!0,c=!1;try{if(a=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;l=!1}else for(;!(l=(r=a.call(n)).done)&&(s.push(r.value),s.length!==t);l=!0);}catch(e){c=!0,o=e}finally{try{if(!l&&null!=n.return&&(i=n.return(),Object(i)!==i))return}finally{if(c)throw o}}return s}}(t,2)||function(e,t){if(e){if("string"==typeof e)return ey(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if("Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return ey(e,t)}}(t,n)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()))[0],a=r[1],o>=3||2===o&&a>=4||1===o&&a>=10);function s(t,n,r){if(i&&void 0!==r){var o=r[0].__autocomplete_algoliaCredentials,a=o.appId,s=o.apiKey;e.apply(void 0,[t].concat(eS(n),[{headers:{"X-Algolia-Application-Id":a,"X-Algolia-API-Key":s}}]))}else e.apply(void 0,[t].concat(eS(n)))}return{init:function(t,n){e("init",{appId:t,apiKey:n})},setUserToken:function(t){e("setUserToken",t)},clickedObjectIDsAfterSearch:function(){for(var e=arguments.length,t=Array(e),n=0;n<e;n++)t[n]=arguments[n];t.length>0&&s("clickedObjectIDsAfterSearch",eP(t),t[0].items)},clickedObjectIDs:function(){for(var e=arguments.length,t=Array(e),n=0;n<e;n++)t[n]=arguments[n];t.length>0&&s("clickedObjectIDs",eP(t),t[0].items)},clickedFilters:function(){for(var t=arguments.length,n=Array(t),r=0;r<t;r++)n[r]=arguments[r];n.length>0&&e.apply(void 0,["clickedFilters"].concat(n))},convertedObjectIDsAfterSearch:function(){for(var e=arguments.length,t=Array(e),n=0;n<e;n++)t[n]=arguments[n];t.length>0&&s("convertedObjectIDsAfterSearch",eP(t),t[0].items)},convertedObjectIDs:function(){for(var e=arguments.length,t=Array(e),n=0;n<e;n++)t[n]=arguments[n];t.length>0&&s("convertedObjectIDs",eP(t),t[0].items)},convertedFilters:function(){for(var t=arguments.length,n=Array(t),r=0;r<t;r++)n[r]=arguments[r];n.length>0&&e.apply(void 0,["convertedFilters"].concat(n))},viewedObjectIDs:function(){for(var e=arguments.length,t=Array(e),n=0;n<e;n++)t[n]=arguments[n];t.length>0&&t.reduce(function(e,t){var n=t.items,r=e_(t,ew);return[].concat(eS(e),eS((function(e){for(var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:20,n=[],r=0;r<e.objectIDs.length;r+=t)n.push(eO(eO({},e),{},{objectIDs:e.objectIDs.slice(r,r+t)}));return n})(eO(eO({},r),{},{objectIDs:(null==n?void 0:n.map(function(e){return e.objectID}))||r.objectIDs})).map(function(e){return{items:n,payload:e}})))},[]).forEach(function(e){var t=e.items;return s("viewedObjectIDs",[e.payload],t)})},viewedFilters:function(){for(var t=arguments.length,n=Array(t),r=0;r<t;r++)n[r]=arguments[r];n.length>0&&e.apply(void 0,["viewedFilters"].concat(n))}}}(i),l={current:[]},c=eg(function(e){var t=e.state;if(!!t.isOpen){var n=t.collections.reduce(function(e,t){return[].concat(eT(e),eT(t.items))},[]).filter(ej);!function e(t,n){if(t===n)return!0;if(em(t)||em(n)||"function"==typeof t||"function"==typeof n)return t===n;if(Object.keys(t).length!==Object.keys(n).length)return!1;for(var r=0,o=Object.keys(t);r<o.length;r++){var a=o[r];if(!(a in n)||!e(t[a],n[a]))return!1}return!0}(l.current.map(function(e){return e.objectID}),n.map(function(e){return e.objectID}))&&(l.current=n,n.length>0&&eD({onItemsChange:r,items:n,insights:s,state:t}))}},0);return{name:"aa.algoliaInsightsPlugin",subscribe:function(e){var t=e.setContext,n=e.onSelect,r=e.onActive;i("addAlgoliaAgent","insights-plugin"),t({algoliaInsightsPlugin:{__algoliaSearchParameters:{clickAnalytics:!0},insights:s}}),n(function(e){var t=e.item,n=e.state,r=e.event;if(!!ej(t))o({state:n,event:r,insights:s,item:t,insightsEvents:[eN({eventName:"Item Selected"},eb({item:t,items:l.current}))]})}),r(function(e){var t=e.item,n=e.state,r=e.event;if(!!ej(t))a({state:n,event:r,insights:s,item:t,insightsEvents:[eN({eventName:"Item Active"},eb({item:t,items:l.current}))]})})},onStateChange:function(e){c({state:e.state})},__autocomplete_pluginOptions:e}}(L))}return C.plugins.forEach(function(e){var t;return null===(t=e.subscribe)||void 0===t?void 0:t.call(e,tQ(tQ({},I),{},{navigator:C.navigator,refresh:N,onSelect:function(e){j.push({onSelect:e})},onActive:function(e){j.push({onActive:e})},onResolve:function(e){j.push({onResolve:e})}}))}),!function(e){var t,n,r=e.metadata,o=e.environment;if(null===(t=o.navigator)||void 0===t?void 0:null===(n=t.userAgent)||void 0===n?void 0:n.includes("Algolia Crawler")){var a=o.document.createElement("meta"),i=o.document.querySelector("head");a.name="algolia:metadata",setTimeout(function(){a.content=JSON.stringify(r),i.appendChild(a)},0)}}({metadata:(_=(v={plugins:C.plugins,options:e}).plugins,P=(O=null===(w=((null===(k=(E=v.options).__autocomplete_metadata)||void 0===k?void 0:k.userAgents)||[])[0])||void 0===w?void 0:w.segment)?tD({},O,Object.keys((null===(S=E.__autocomplete_metadata)||void 0===S?void 0:S.options)||{})):{},{plugins:_.map(function(e){return{name:e.name,options:Object.keys(e.__autocomplete_pluginOptions||[])}}),options:function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?tR(Object(n),!0).forEach(function(t){tD(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):tR(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}({"autocomplete-core":Object.keys(E)},P),ua:tN.concat((null===(x=E.__autocomplete_metadata)||void 0===x?void 0:x.userAgents)||[])}),environment:C.environment}),tQ(tQ({refresh:N,navigator:C.navigator},A),I)}(rb(rb({},p.value.core),{},{onStateChange:function(e){var t,n,r;c.current=e.state.collections.some(function(e){return e.source.templates.noResults}),null===(t=d.current)||void 0===t||t.call(d,e),null===(n=(r=p.value.core).onStateChange)||void 0===n||n.call(r,e)},shouldPanelOpen:u.current.shouldPanelOpen||function(e){var t=e.state;if(f.value)return!0;var n=tW(t)>0;if(!p.value.core.openOnFocus&&!t.query)return n;var r=!!(c.current||p.value.renderer.renderNoResults);return!n&&r||n},__autocomplete_metadata:{userAgents:ra,options:e}}))}),m=tZ(rb({collections:[],completion:null,context:{},isOpen:!1,query:"",activeItemId:null,status:"idle"},p.value.core.initialState)),h={getEnvironmentProps:p.value.renderer.getEnvironmentProps,getFormProps:p.value.renderer.getFormProps,getInputProps:p.value.renderer.getInputProps,getItemProps:p.value.renderer.getItemProps,getLabelProps:p.value.renderer.getLabelProps,getListProps:p.value.renderer.getListProps,getPanelProps:p.value.renderer.getPanelProps,getRootProps:p.value.renderer.getRootProps},b={setActiveItemId:g.value.setActiveItemId,setQuery:g.value.setQuery,setCollections:g.value.setCollections,setIsOpen:g.value.setIsOpen,setStatus:g.value.setStatus,setContext:g.value.setContext,refresh:g.value.refresh,navigator:g.value.navigator},y=s(function(){return tK.bind(p.value.renderer.renderer.createElement)}),v=s(function(){return function(e){var t=e.autocomplete,n=e.autocompleteScopeApi,r=e.classNames,o=e.environment,a=e.isDetached,i=e.placeholder,s=e.propGetters,l=e.setIsModalOpen,c=e.state,u=e.translations,d=t7(o),p=s.getRootProps(ns({state:c,props:t.getRootProps({})},n)),f=d("div",ns({class:r.root},p)),g=d("div",{class:r.detachedContainer,onMouseDown:function(e){e.stopPropagation()}}),m=d("div",{class:r.detachedOverlay,children:[g],onMouseDown:function(){l(!1),t.setIsOpen(!1)}}),h=s.getLabelProps(ns({state:c,props:t.getLabelProps({})},n)),b=d("button",{class:r.submitButton,type:"submit",title:u.submitButtonTitle,children:[tX({environment:o})]}),y=d("label",ns({class:r.label,children:[b]},h)),v=d("button",{class:r.clearButton,type:"reset",title:u.clearButtonTitle,children:[tJ({environment:o})]}),w=d("div",{class:r.loadingIndicator,children:[t0({environment:o})]}),k=no({class:r.input,environment:o,state:c,getInputProps:s.getInputProps,getInputPropsCore:t.getInputProps,autocompleteScopeApi:n,isDetached:a}),S=d("div",{class:r.inputWrapperPrefix,children:[y,w]}),x=d("div",{class:r.inputWrapperSuffix,children:[v]}),_=d("div",{class:r.inputWrapper,children:[k]}),E=s.getFormProps(ns({state:c,props:t.getFormProps({inputElement:k})},n)),O=d("form",ns({class:r.form,children:[S,_,x]},E)),P=s.getPanelProps(ns({state:c,props:t.getPanelProps({})},n)),j=d("div",ns({class:r.panel},P)),C=d("div",{class:r.detachedSearchButtonQuery,textContent:c.query}),T=d("div",{class:r.detachedSearchButtonPlaceholder,hidden:!!c.query,textContent:void 0===i?"Search":i});if(a){var I=d("div",{class:r.detachedSearchButtonIcon,children:[tX({environment:o})]}),A=d("button",{type:"button",class:r.detachedSearchButton,onClick:function(){l(!0)},children:[I,T,C]}),N=d("button",{type:"button",class:r.detachedCancelButton,textContent:u.detachedCancelButtonText,onTouchStart:function(e){e.stopPropagation()},onClick:function(){t.setIsOpen(!1),l(!1)}}),L=d("div",{class:r.detachedFormContainer,children:[O,N]});g.appendChild(L),f.appendChild(A)}else f.appendChild(O);return{detachedContainer:g,detachedOverlay:m,detachedSearchButtonQuery:C,detachedSearchButtonPlaceholder:T,inputWrapper:_,input:k,root:f,form:O,label:y,submitButton:b,clearButton:v,loadingIndicator:w,panel:j}}({autocomplete:g.value,autocompleteScopeApi:b,classNames:p.value.renderer.classNames,environment:p.value.core.environment,isDetached:f.value,placeholder:p.value.core.placeholder,propGetters:h,setIsModalOpen:x,state:m.current,translations:p.value.renderer.translations})});function w(){t9(v.value.panel,{style:f.value?{}:function(e){var t=e.panelPlacement,n=e.container,r=e.form,o=e.environment,a=n.getBoundingClientRect(),i=(o.pageYOffset||o.document.documentElement.scrollTop||o.document.body.scrollTop||0)+a.top+a.height;switch(t){case"start":return{top:i,left:a.left};case"end":return{top:i,right:o.document.documentElement.clientWidth-(a.left+a.width)};case"full-width":return{top:i,left:0,right:0,width:"unset",maxWidth:"unset"};case"input-wrapper-width":var s=r.getBoundingClientRect();return{top:i,left:s.left,right:o.document.documentElement.clientWidth-(s.left+s.width),width:"unset",maxWidth:"unset"};default:throw Error("[Autocomplete] The `panelPlacement` value ".concat(JSON.stringify(t)," is not valid."))}}({panelPlacement:p.value.renderer.panelPlacement,container:v.value.root,form:v.value.form,environment:p.value.core.environment})})}function k(e){m.current=e;var t,n,r,o,a,i,s={autocomplete:g.value,autocompleteScopeApi:b,classNames:p.value.renderer.classNames,components:p.value.renderer.components,container:p.value.renderer.container,html:y.value,dom:v.value,panelContainer:f.value?v.value.detachedContainer:p.value.renderer.panelContainer,propGetters:h,state:m.current,renderer:p.value.renderer.renderer},l=!tW(e)&&!c.current&&p.value.renderer.renderNoResults||p.value.renderer.render;n=(t=s).autocomplete,r=t.autocompleteScopeApi,o=t.dom,a=t.propGetters,i=t.state,t6(o.root,a.getRootProps(ro({state:i,props:n.getRootProps({})},r))),t6(o.input,a.getInputProps(ro({state:i,props:n.getInputProps({inputElement:o.input}),inputElement:o.input},r))),t9(o.label,{hidden:"stalled"===i.status}),t9(o.loadingIndicator,{hidden:"stalled"!==i.status}),t9(o.clearButton,{hidden:!i.query}),t9(o.detachedSearchButtonQuery,{textContent:i.query}),t9(o.detachedSearchButtonPlaceholder,{hidden:!!i.query}),!function(e,t){var n=t.autocomplete,r=t.autocompleteScopeApi,o=t.classNames,a=t.html,i=t.dom,s=t.panelContainer,l=t.propGetters,c=t.state,u=t.components,d=t.renderer;if(!c.isOpen){s.contains(i.panel)&&s.removeChild(i.panel);return}!s.contains(i.panel)&&"loading"!==c.status&&s.appendChild(i.panel),i.panel.classList.toggle("aa-Panel--stalled","stalled"===c.status);var p=c.collections.filter(function(e){var t=e.source,n=e.items;return t.templates.noResults||n.length>0}).map(function(e,t){var i=e.source,s=e.items;return d.createElement("section",{key:t,className:o.source,"data-autocomplete-source-id":i.sourceId},i.templates.header&&d.createElement("div",{className:o.sourceHeader},i.templates.header({components:u,createElement:d.createElement,Fragment:d.Fragment,items:s,source:i,state:c,html:a})),i.templates.noResults&&0===s.length?d.createElement("div",{className:o.sourceNoResults},i.templates.noResults({components:u,createElement:d.createElement,Fragment:d.Fragment,source:i,state:c,html:a})):d.createElement("ul",rn({className:o.list},l.getListProps(ro({state:c,props:n.getListProps({sourceIndex:t})},r))),s.map(function(e){var s=n.getItemProps({item:e,source:i,sourceIndex:t});return d.createElement("li",rn({key:s.id,className:o.item},l.getItemProps(ro({state:c,props:s},r))),i.templates.item({components:u,createElement:d.createElement,Fragment:d.Fragment,item:e,state:c,html:a}))})),i.templates.footer&&d.createElement("div",{className:o.sourceFooter},i.templates.footer({components:u,createElement:d.createElement,Fragment:d.Fragment,items:s,source:i,state:c,html:a})))}),f=d.createElement(d.Fragment,null,d.createElement("div",{className:o.panelLayout},p),d.createElement("div",{className:"aa-GradientBottom"})),g=p.reduce(function(e,t){return e[t.props["data-autocomplete-source-id"]]=t,e},{});e(ro(ro({children:f,state:c,sections:p,elements:g},d),{},{components:u,html:a},r),i.panel)}(l,s)}r(function(){var e=g.value.getEnvironmentProps({formElement:v.value.form,panelElement:v.value.panel,inputElement:v.value.input});return t9(p.value.core.environment,e),function(){t9(p.value.core.environment,Object.keys(e).reduce(function(e,t){return rb(rb({},e),{},ry({},t,void 0))},{}))}}),r(function(){var e=f.value?p.value.core.environment.document.body:p.value.renderer.panelContainer,t=f.value?v.value.detachedOverlay:v.value.panel;return f.value&&m.current.isOpen&&x(!0),k(m.current),function(){e.contains(t)&&e.removeChild(t)}}),r(function(){var e=p.value.renderer.container;return e.appendChild(v.value.root),function(){e.removeChild(v.value.root)}}),r(function(){var e=tV(function(e){k(e.state)},0);return d.current=function(t){var n=t.state,r=t.prevState;f.value&&r.isOpen!==n.isOpen&&x(n.isOpen),!f.value&&n.isOpen&&!r.isOpen&&w(),n.query!==r.query&&p.value.core.environment.document.querySelectorAll(".aa-Panel--scrollable").forEach(function(e){0!==e.scrollTop&&(e.scrollTop=0)}),e({state:n})},function(){d.current=void 0}}),r(function(){var e=tV(function(){var e=f.value;f.value=p.value.core.environment.matchMedia(p.value.renderer.detachedMediaQuery).matches,e!==f.value?S({}):requestAnimationFrame(w)},20);return p.value.core.environment.addEventListener("resize",e),function(){p.value.core.environment.removeEventListener("resize",e)}}),r(function(){if(!f.value)return function(){};function e(e){v.value.detachedContainer.classList.toggle("aa-DetachedContainer--modal",e)}function t(t){e(t.matches)}var n=p.value.core.environment.matchMedia(getComputedStyle(p.value.core.environment.document.documentElement).getPropertyValue("--aa-detached-modal-media-query"));e(n.matches);var r=!!n.addEventListener;return r?n.addEventListener("change",t):n.addListener(t),function(){r?n.removeEventListener("change",t):n.removeListener(t)}}),r(function(){return requestAnimationFrame(w),function(){}});function S(){var e,t,n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};o();var r=p.value.renderer,i=r.components,s=function(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++){if(n=a[r],!(t.indexOf(n)>=0))Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}}return o}(r,rg);u.current=function e(){for(var t=arguments.length,n=Array(t),r=0;r<t;r++)n[r]=arguments[r];return n.reduce(function(t,n){return Object.keys(n).forEach(function(r){var o,a=t[r],i=n[r];if(Array.isArray(a)&&Array.isArray(i)){;t[r]=a.concat.apply(a,function(e){if(Array.isArray(e))return ri(e)}(o=i)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(o)||function(e,t){if(e){if("string"==typeof e)return ri(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if("Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return ri(e,t)}}(o)||function(){throw TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}())}else rl(a)&&rl(i)?t[r]=e(a,i):t[r]=i}),t},{})}(s,p.value.core,{components:(e=i,t=function(e){return!e.value.hasOwnProperty("__autocomplete_componentName")},Object.entries(e).reduce(function(e,n){var r,o,a=(o=2,function(e){if(Array.isArray(e))return e}(r=n)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,o,a,i,s=[],l=!0,c=!1;try{if(a=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;l=!1}else for(;!(l=(r=a.call(n)).done)&&(s.push(r.value),s.length!==t);l=!0);}catch(e){c=!0,o=e}finally{try{if(!l&&null!=n.return&&(i=n.return(),Object(i)!==i))return}finally{if(c)throw o}}return s}}(r,2)||function(e,t){if(e){if("string"==typeof e)return rf(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if("Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return rf(e,t)}}(r,o)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),i=a[0],s=a[1];return t({key:i,value:s})?rd(rd({},e),{},rp({},i,s)):e},{})),initialState:m.current},n),l(),a(),g.value.refresh().then(function(){k(m.current)})}function x(e){requestAnimationFrame(function(){if(e!==p.value.core.environment.document.body.contains(v.value.detachedOverlay))e?(p.value.core.environment.document.body.appendChild(v.value.detachedOverlay),p.value.core.environment.document.body.classList.add("aa-Detached"),v.value.input.focus()):(p.value.core.environment.document.body.removeChild(v.value.detachedOverlay),p.value.core.environment.document.body.classList.remove("aa-Detached"))})}return rv++,rb(rb({},b),{},{update:S,destroy:function(){rv--,o()}})}({container:w.current,placeholder:v,renderer:{createElement:o.createElement,Fragment:o.Fragment,render:ef.render},navigator:{navigate(e){let{item:t,itemUrl:n}=e;g.push(n,{cmfcmfhighlight:{terms:t.terms,isDocsOrBlog:"docs"===t.document.type||"blog"===t.document.type}})}},detachedMediaQuery:"",defaultActiveItemId:0,translations:{clearButtonTitle:(0,c.I)({message:"cmfcmf/d-s-l.searchBar.clearButtonTitle",description:"Title of the button to clear the current search input"}),detachedCancelButtonText:(0,c.I)({message:"cmfcmf/d-s-l.searchBar.detachedCancelButtonText",description:"Text of the button to close the detached search window"}),submitButtonTitle:(0,c.I)({message:"cmfcmf/d-s-l.searchBar.submitButtonTitle",description:"Title of the button to submit a new search"})},getSources(e){let{query:t}=e;return[{sourceId:"search-results",templates:{item(e){let{item:t}=e,n=rj(t);return o.createElement("a",{href:n,className:"aa-ItemLink",onClick:e=>{e.preventDefault(),g.push(n,{cmfcmfhighlight:{terms:t.terms,isDocsOrBlog:"docs"===t.document.type||"blog"===t.document.type}})}},o.createElement("div",{className:"aa-ItemContent"},o.createElement("div",{className:"aa-ItemContentBody"},o.createElement("div",{className:"aa-ItemContentTitle"},t.document.sectionTitle),t.document.pageTitle!==t.document.sectionTitle&&o.createElement("div",{className:"aa-ItemContentDescription"},t.document.pageTitle))),o.createElement("div",{className:"aa-ItemActions"},o.createElement("button",{className:"aa-ItemActionButton aa-DesktopOnly aa-ActiveOnly",type:"button",title:"Select"},o.createElement("svg",{viewBox:"0 0 24 24",width:"20",height:"20",fill:"currentColor"},o.createElement("path",{d:"M18.984 6.984h2.016v6h-15.188l3.609 3.609-1.406 1.406-6-6 6-6 1.406 1.406-3.609 3.609h13.172v-4.031z"})))))},noResults:()=>o.createElement("div",{className:"aa-ItemContent"},o.createElement("div",{className:"aa-ItemContentBody"},(0,c.I)({message:"cmfcmf/d-s-l.searchBar.noResults",description:"message shown if no results are found"})))},getItemUrl(e){let{item:t}=e;return rj(t)},async getItems(){let e=h.current,n=await Promise.all(e.map(e=>y(e))),r=rS(t);return n.flatMap(e=>{let{index:t,documents:n}=e;return t.query(e=>{e.term(r,{fields:["title"],boost:i}),e.term(r,{fields:["title"],boost:i,wildcard:rk.Query.wildcard.TRAILING}),e.term(r,{fields:["content"],boost:s}),e.term(r,{fields:["content"],boost:s,wildcard:rk.Query.wildcard.TRAILING}),e.term(r,{fields:["tags"],boost:u}),e.term(r,{fields:["tags"],boost:u,wildcard:rk.Query.wildcard.TRAILING}),p&&(e.term(r,{fields:["sidebarParentCategories"],boost:d}),e.term(r,{fields:["sidebarParentCategories"],boost:d,wildcard:rk.Query.wildcard.TRAILING}))}).slice(0,f).map(e=>({document:n.find(t=>t.id.toString()===e.ref),score:e.score,terms:r}))}).sort((e,t)=>t.score-e.score).slice(0,f)}}]}}),()=>k.current?.destroy()},[f]),o.createElement(o.Fragment,null,o.createElement(rw.Z,null,o.createElement("body",{"data-theme":t?"dark":"light"})),o.createElement(rE,null),o.createElement("div",{className:"dsla-search-wrapper"},o.createElement("div",{className:"dsla-search-field",ref:w,"data-tags":m.join(",")})))},rA="navbarSearchContainer_Bca1";function rN(e){let{children:t,className:n}=e;return(0,r.jsx)("div",{className:(0,a.Z)(n,rA),children:t})}var rL=n("1652"),rR=n("71364");let rD=e=>e.docs.find(t=>t.id===e.mainDocId);var rF=n("13908");function rM(e,t){var n;return t.alternateDocVersions[e.name]??(n=e).docs.find(e=>e.id===n.mainDocId)}let rB={default:en,localeDropdown:function(e){let{mobile:t,dropdownItemsBefore:n,dropdownItemsAfter:o,queryString:a="",...i}=e,{i18n:{currentLocale:s,locales:u,localeConfigs:d}}=(0,ea.Z)(),p=(0,eu.l)(),{search:f,hash:g}=(0,l.TH)(),m=[...n,...u.map(e=>{let n=`pathname://${p.createUrl({locale:e,fullyQualified:!1})}`,r=`${n}${f}${g}${a}`;return{label:d[e].label,lang:d[e].htmlLang,to:r,target:"_self",autoAddBaseUrl:!1,className:e===s?t?"menu__link--active":"dropdown__link--active":""}}),...o],h=t?(0,c.I)({message:"Languages",id:"theme.navbar.mobileLanguageDropdown.label",description:"The label for the mobile language switcher dropdown"}):d[s].label;return(0,r.jsx)(ec,{...i,mobile:t,label:(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(ed,{className:ep}),h]}),items:m})},search:function(e){let{mobile:t,className:n}=e;return t?null:(0,r.jsx)(rN,{className:n,children:(0,r.jsx)(rI,{})})},dropdown:ec,html:function(e){let{value:t,className:n,mobile:o=!1,isDropdownItem:i=!1}=e;return(0,r.jsx)(i?"li":"div",{className:(0,a.Z)({navbar__item:!o&&!i,"menu__list-item":o},n),dangerouslySetInnerHTML:{__html:t}})},doc:function(e){let{docId:t,label:n,docsPluginId:o,...a}=e,{activeDoc:i}=(0,rL.Iw)(o),s=(0,rR.vY)(t,o),l=i?.path===s?.path;return null===s||s.unlisted&&!l?null:(0,r.jsx)(en,{exact:!0,...a,isActive:()=>l||!!i?.sidebar&&i.sidebar===s.sidebar,label:n??s.id,to:s.path})},docSidebar:function(e){let{sidebarId:t,label:n,docsPluginId:o,...a}=e,{activeDoc:i}=(0,rL.Iw)(o),s=(0,rR.oz)(t,o).link;if(!s)throw Error(`DocSidebarNavbarItem: Sidebar with ID "${t}" doesn't have anything to be linked to.`);return(0,r.jsx)(en,{exact:!0,...a,isActive:()=>i?.sidebar===t,label:n??s.label,to:s.path})},docsVersion:function(e){let{label:t,to:n,docsPluginId:o,...a}=e,i=(0,rR.lO)(o)[0],s=t??i.label,l=n??rD(i).path;return(0,r.jsx)(en,{...a,label:s,to:l})},docsVersionDropdown:function(e){let{mobile:t,docsPluginId:n,dropdownActiveClassDisabled:o,dropdownItemsBefore:a,dropdownItemsAfter:i,...s}=e,{search:u,hash:d}=(0,l.TH)(),p=(0,rL.Iw)(n),f=(0,rL.gB)(n),{savePreferredVersionName:g}=(0,rF.J)(n),m=[...a,...f.map(function(e){let t=rM(e,p);return{label:e.label,to:`${t.path}${u}${d}`,isActive:()=>e===p.activeVersion,onClick:()=>g(e.name)}}),...i],h=(0,rR.lO)(n)[0],b=t&&m.length>1?(0,c.I)({id:"theme.navbar.mobileVersionsDropdown.label",message:"Versions",description:"The label for the navbar versions dropdown on mobile view"}):h.label,y=t&&m.length>1?void 0:rM(h,p).path;return m.length<=1?(0,r.jsx)(en,{...s,mobile:t,label:b,to:y,isActive:o?()=>!1:void 0}):(0,r.jsx)(ec,{...s,mobile:t,label:b,to:y,items:m,isActive:o?()=>!1:void 0})}};function rz(e){var t,n;let{type:o,...a}=e;let i=rB[t=o,n=a,t&&"default"!==t?t:"items"in n?"dropdown":"default"];if(!i)throw Error(`No NavbarItem component found for type "${o}".`);return(0,r.jsx)(i,{...a})}function r$(){let e=(0,j.e)(),t=(0,v.L)().navbar.items;return(0,r.jsx)("ul",{className:"menu__list",children:t.map((t,n)=>(0,o.createElement)(rz,{mobile:!0,...t,onClick:()=>e.toggle(),key:n}))})}function rU(e){return(0,r.jsx)("button",{...e,type:"button",className:"clean-btn navbar-sidebar__back",children:(0,r.jsx)(c.Z,{id:"theme.navbar.mobileSidebarSecondaryMenu.backButtonLabel",description:"The label of the back button to return to main menu, inside the mobile navbar sidebar secondary menu (notably used to display the docs sidebar)",children:"\u2190 Back to main menu"})})}function rH(){let e=0===(0,v.L)().navbar.items.length,t=L();return(0,r.jsxs)(r.Fragment,{children:[!e&&(0,r.jsx)(rU,{onClick:()=>t.hide()}),t.content]})}function rq(){let e=(0,j.e)();return(!function(){let e=!(arguments.length>0)||void 0===arguments[0]||arguments[0];(0,o.useEffect)(()=>(document.body.style.overflow=e?"hidden":"visible",()=>{document.body.style.overflow="visible"}),[e])}(e.shown),e.shouldRender)?(0,r.jsx)(R,{header:(0,r.jsx)(W,{}),primaryMenu:(0,r.jsx)(r$,{}),secondaryMenu:(0,r.jsx)(rH,{})}):null}let rQ={navbarHideable:"navbarHideable_m1mJ",navbarHidden:"navbarHidden_jGov"};function rZ(e){return(0,r.jsx)("div",{role:"presentation",...e,className:(0,a.Z)("navbar-sidebar__backdrop",e.className)})}function rW(e){let{children:t}=e,{navbar:{hideOnScroll:n,style:i}}=(0,v.L)(),s=(0,j.e)(),{navbarRef:l,isNavbarVisible:d}=function(e){let[t,n]=(0,o.useState)(e),r=(0,o.useRef)(!1),a=(0,o.useRef)(0),i=(0,o.useCallback)(e=>{null!==e&&(a.current=e.getBoundingClientRect().height)},[]);return(0,C.RF)((t,o)=>{let{scrollY:i}=t;if(!e)return;if(i<a.current){n(!0);return}if(r.current){r.current=!1;return}let s=o?.scrollY,l=document.documentElement.scrollHeight-a.current,c=window.innerHeight;s&&i>=s?n(!1):i+c<l&&n(!0)}),(0,u.S)(t=>{if(!e)return;let o=t.location.hash;if(o?document.getElementById(o.substring(1)):void 0){r.current=!0,n(!1);return}n(!0)}),{navbarRef:i,isNavbarVisible:t}}(n);return(0,r.jsxs)("nav",{ref:l,"aria-label":(0,c.I)({id:"theme.NavBar.navAriaLabel",message:"Main",description:"The ARIA label for the main navigation"}),className:(0,a.Z)("navbar","navbar--fixed-top",n&&[rQ.navbarHideable,!d&&rQ.navbarHidden],{"navbar--dark":"dark"===i,"navbar--primary":"primary"===i,"navbar-sidebar--show":s.shown}),children:[t,(0,r.jsx)(rZ,{onClick:s.toggle}),(0,r.jsx)(rq,{})]})}var rV=n("3062");let rG="errorBoundaryError_a6uf";function rY(e){return(0,r.jsx)("button",{type:"button",...e,children:(0,r.jsx)(c.Z,{id:"theme.ErrorPageContent.tryAgain",description:"The label of the button to try again rendering when the React error boundary captures an error",children:"Try again"})})}function rK(e){let{error:t}=e,n=(0,rV.getErrorCausalChain)(t).map(e=>e.message).join("\n\nCause:\n");return(0,r.jsx)("p",{className:rG,children:n})}class rX extends o.Component{componentDidCatch(e,t){throw this.props.onError(e,t)}render(){return this.props.children}}function rJ(e){let{width:t=30,height:n=30,className:o,...a}=e;return(0,r.jsx)("svg",{className:o,width:t,height:n,viewBox:"0 0 30 30","aria-hidden":"true",...a,children:(0,r.jsx)("path",{stroke:"currentColor",strokeLinecap:"round",strokeMiterlimit:"10",strokeWidth:"2",d:"M4 7h22M4 15h22M4 23h22"})})}function r0(){let{toggle:e,shown:t}=(0,j.e)();return(0,r.jsx)("button",{onClick:e,"aria-label":(0,c.I)({id:"theme.docs.sidebar.toggleSidebarButtonAriaLabel",message:"Toggle navigation bar",description:"The ARIA label for hamburger menu button of mobile navigation"}),"aria-expanded":t,className:"navbar__toggle clean-btn",type:"button",children:(0,r.jsx)(rJ,{})})}let r1="colorModeToggle_DEke";function r2(e){let{items:t}=e;return(0,r.jsx)(r.Fragment,{children:t.map((e,t)=>(0,r.jsx)(rX,{onError:t=>Error(`A theme navbar item failed to render. +Please double-check the following navbar item (themeConfig.navbar.items) of your Docusaurus config: +${JSON.stringify(e,null,2)}`,{cause:t}),children:(0,r.jsx)(rz,{...e})},t))})}function r4(e){let{left:t,right:n}=e;return(0,r.jsxs)("div",{className:"navbar__inner",children:[(0,r.jsx)("div",{className:"navbar__items",children:t}),(0,r.jsx)("div",{className:"navbar__items navbar__items--right",children:n})]})}function r3(){let e=(0,j.e)(),t=(0,v.L)().navbar.items,[n,o]=function(e){function t(e){return(e.position??"right")==="left"}let n=e.filter(t);return[n,e.filter(e=>!t(e))]}(t),a=t.find(e=>"search"===e.type);return(0,r.jsx)(r4,{left:(0,r.jsxs)(r.Fragment,{children:[!e.disabled&&(0,r.jsx)(r0,{}),(0,r.jsx)(Q,{}),(0,r.jsx)(r2,{items:n})]}),right:(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(r2,{items:o}),(0,r.jsx)(H,{className:r1}),!a&&(0,r.jsx)(rN,{children:(0,r.jsx)(rI,{})})]})})}function r9(){return(0,r.jsx)(rW,{children:(0,r.jsx)(r3,{})})}function r6(e){let{item:t}=e,{to:n,href:o,label:a,prependBaseUrlToHref:i,...s}=t,l=(0,G.ZP)(n),c=(0,G.ZP)(o,{forcePrependBaseUrl:!0});return(0,r.jsxs)(V.Z,{className:"footer__link-item",...o?{href:i?c:o}:{to:l},...s,children:[a,o&&!(0,Y.Z)(o)&&(0,r.jsx)(X.Z,{})]})}function r8(e){let{item:t}=e;return t.html?(0,r.jsx)("li",{className:"footer__item",dangerouslySetInnerHTML:{__html:t.html}}):(0,r.jsx)("li",{className:"footer__item",children:(0,r.jsx)(r6,{item:t})},t.href??t.to)}function r5(e){let{column:t}=e;return(0,r.jsxs)("div",{className:"col footer__col",children:[(0,r.jsx)("div",{className:"footer__title",children:t.title}),(0,r.jsx)("ul",{className:"footer__items clean-list",children:t.items.map((e,t)=>(0,r.jsx)(r8,{item:e},t))})]})}function r7(e){let{columns:t}=e;return(0,r.jsx)("div",{className:"row footer__links",children:t.map((e,t)=>(0,r.jsx)(r5,{column:e},t))})}function oe(){return(0,r.jsx)("span",{className:"footer__link-separator",children:"\xb7"})}function ot(e){let{item:t}=e;return t.html?(0,r.jsx)("span",{className:"footer__link-item",dangerouslySetInnerHTML:{__html:t.html}}):(0,r.jsx)(r6,{item:t})}function on(e){let{links:t}=e;return(0,r.jsx)("div",{className:"footer__links text--center",children:(0,r.jsx)("div",{className:"footer__links",children:t.map((e,n)=>(0,r.jsxs)(o.Fragment,{children:[(0,r.jsx)(ot,{item:e}),t.length!==n+1&&(0,r.jsx)(oe,{})]},n))})})}function or(e){let{links:t}=e;return"title"in t[0]?(0,r.jsx)(r7,{columns:t}):(0,r.jsx)(on,{links:t})}var oo=n("59975");let oa={footerLogoLink:"footerLogoLink_BH7S"};function oi(e){let{logo:t}=e,{withBaseUrl:n}=(0,G.Cg)(),o={light:n(t.src),dark:n(t.srcDark??t.src)};return(0,r.jsx)(oo.Z,{className:(0,a.Z)("footer__logo",t.className),alt:t.alt,sources:o,width:t.width,height:t.height,style:t.style})}function os(e){let{logo:t}=e;return t.href?(0,r.jsx)(V.Z,{href:t.href,className:oa.footerLogoLink,target:t.target,children:(0,r.jsx)(oi,{logo:t})}):(0,r.jsx)(oi,{logo:t})}function ol(e){let{copyright:t}=e;return(0,r.jsx)("div",{className:"footer__copyright",dangerouslySetInnerHTML:{__html:t}})}function oc(e){let{style:t,links:n,logo:o,copyright:i}=e;return(0,r.jsx)("footer",{className:(0,a.Z)("footer",{"footer--dark":"dark"===t}),children:(0,r.jsxs)("div",{className:"container container-fluid",children:[n,(o||i)&&(0,r.jsxs)("div",{className:"footer__bottom text--center",children:[o&&(0,r.jsx)("div",{className:"margin-bottom--sm",children:o}),i]})]})})}let ou=o.memo(function(){let{footer:e}=(0,v.L)();if(!e)return null;let{copyright:t,links:n,logo:o,style:a}=e;return(0,r.jsx)(oc,{style:a,links:n&&n.length>0&&(0,r.jsx)(or,{links:n}),logo:o&&(0,r.jsx)(os,{logo:o}),copyright:t&&(0,r.jsx)(ol,{copyright:t})})}),od=(0,T.Qc)([D.S,w.p,C.OC,rF.L5,s.VC,function(e){let{children:t}=e;return(0,r.jsx)(I.n2,{children:(0,r.jsx)(j.M,{children:(0,r.jsx)(N,{children:t})})})}]);function op(e){let{children:t}=e;return(0,r.jsx)(od,{children:t})}var of=n("52068");function og(e){let{error:t,tryAgain:n}=e;return(0,r.jsx)("main",{className:"container margin-vert--xl",children:(0,r.jsx)("div",{className:"row",children:(0,r.jsxs)("div",{className:"col col--6 col--offset-3",children:[(0,r.jsx)(of.Z,{as:"h1",className:"hero__title",children:(0,r.jsx)(c.Z,{id:"theme.ErrorPageContent.title",description:"The title of the fallback page when the page crashed",children:"This page crashed."})}),(0,r.jsx)("div",{className:"margin-vert--lg",children:(0,r.jsx)(rY,{onClick:n,className:"button button--primary shadow--lw"})}),(0,r.jsx)("hr",{}),(0,r.jsx)("div",{className:"margin-vert--md",children:(0,r.jsx)(rK,{error:t})})]})})})}let om="mainWrapper_z2l0";function oh(e){let{children:t,noFooter:n,wrapperClassName:o,title:l,description:c}=e;return(0,h.t)(),(0,r.jsxs)(op,{children:[(0,r.jsx)(s.d,{title:l,description:c}),(0,r.jsx)(y,{}),(0,r.jsx)(P,{}),(0,r.jsx)(r9,{}),(0,r.jsx)("div",{id:d,className:(0,a.Z)(m.k.wrapper.main,om,o),children:(0,r.jsx)(i.Z,{fallback:e=>(0,r.jsx)(og,{...e}),children:t})}),!n&&(0,r.jsx)(ou,{})]})}},40858:function(e,t,n){"use strict";n.d(t,{Z:function(){return u}});var r=n(85893);n(67294);var o=n(27544),a=n(7571),i=n(93934),s=n(45237),l=n(59975);function c(e){let{logo:t,alt:n,imageClassName:o}=e,i={light:(0,a.ZP)(t.src),dark:(0,a.ZP)(t.srcDark||t.src)},s=(0,r.jsx)(l.Z,{className:t.className,sources:i,height:t.height,width:t.width,alt:n,style:t.style});return o?(0,r.jsx)("div",{className:o,children:s}):s}function u(e){let{siteConfig:{title:t}}=(0,i.Z)(),{navbar:{title:n,logo:l}}=(0,s.L)(),{imageClassName:u,titleClassName:d,...p}=e,f=(0,a.ZP)(l?.href||"/"),g=l?.alt??(n?"":t);return(0,r.jsxs)(o.Z,{to:f,...p,...l?.target&&{target:l.target},children:[l&&(0,r.jsx)(c,{logo:l,alt:g,imageClassName:u}),null!=n&&(0,r.jsx)("b",{className:d,children:n})]})}},49868:function(e,t,n){"use strict";n.d(t,{Z:function(){return a}});var r=n(85893);n(67294);var o=n(50777);function a(e){let{locale:t,version:n,tag:a}=e;return(0,r.jsxs)(o.Z,{children:[t&&(0,r.jsx)("meta",{name:"docusaurus_locale",content:t}),n&&(0,r.jsx)("meta",{name:"docusaurus_version",content:n}),a&&(0,r.jsx)("meta",{name:"docusaurus_tag",content:a}),t&&(0,r.jsx)("meta",{name:"docsearch:language",content:t}),n&&(0,r.jsx)("meta",{name:"docsearch:version",content:n}),a&&(0,r.jsx)("meta",{name:"docsearch:docusaurus_tag",content:a})]})}},59975:function(e,t,n){"use strict";n.d(t,{Z:()=>u});var r=n("85893"),o=n("67294"),a=n("88942"),i=n("13341"),s=n("96818");let l={themedComponent:"themedComponent_mlkZ","themedComponent--light":"themedComponent--light_NVdE","themedComponent--dark":"themedComponent--dark_xIcU"};function c(e){let{className:t,children:n}=e,c=(0,i.Z)(),{colorMode:u}=(0,s.I)();return(0,r.jsx)(r.Fragment,{children:(c?"dark"===u?["dark"]:["light"]:["light","dark"]).map(e=>{let i=n({theme:e,className:(0,a.Z)(t,l.themedComponent,l[`themedComponent--${e}`])});return(0,r.jsx)(o.Fragment,{children:i},e)})})}function u(e){let{sources:t,className:n,alt:o,...a}=e;return(0,r.jsx)(c,{className:n,children:e=>{let{theme:n,className:i}=e;return(0,r.jsx)("img",{src:t[n],alt:o,className:i,...a})}})}},6560:function(e,t,n){"use strict";n.d(t,{u:function(){return l},z:function(){return g}});var r=n(85893),o=n(67294),a=n(81821),i=n(27222),s=n(11027);function l(e){let{initialState:t}=e,[n,r]=(0,o.useState)(t??!1),a=(0,o.useCallback)(()=>{r(e=>!e)},[]);return{collapsed:n,setCollapsed:r,toggleCollapsed:a}}let c={display:"none",overflow:"hidden",height:"0px"},u={display:"block",overflow:"visible",height:"auto"};function d(e,t){let n=t?c:u;e.style.display=n.display,e.style.overflow=n.overflow,e.style.height=n.height}function p(e){let{as:t="div",collapsed:n,children:i,animation:l,onCollapseTransitionEnd:p,className:f,disableSSRStyle:g}=e,m=(0,o.useRef)(null);return!function(e){let{collapsibleRef:t,collapsed:n,animation:r}=e,a=(0,o.useRef)(!1);(0,o.useEffect)(()=>{let e=t.current;function o(){let t=function(){let t=e.scrollHeight,n=r?.duration??function(e){if((0,s.n)())return 1;let t=e/36;return Math.round((4+15*t**.25+t/5)*10)}(t),o=r?.easing??"ease-in-out";return{transition:`height ${n}ms ${o}`,height:`${t}px`}}();e.style.transition=t.transition,e.style.height=t.height}if(!a.current){d(e,n),a.current=!0;return}return e.style.willChange="height",function(){let t=requestAnimationFrame(()=>{n?(o(),requestAnimationFrame(()=>{e.style.height=c.height,e.style.overflow=c.overflow})):(e.style.display="block",requestAnimationFrame(()=>{o()}))});return()=>cancelAnimationFrame(t)}()},[t,n,r])}({collapsibleRef:m,collapsed:n,animation:l}),(0,r.jsx)(t,{ref:m,style:g?void 0:function(e){if(!a.Z.canUseDOM)return e?c:u}(n),onTransitionEnd:e=>{if("height"===e.propertyName)d(m.current,n),p?.(n)},className:f,children:i})}function f(e){let{collapsed:t,...n}=e,[a,s]=(0,o.useState)(!t),[l,c]=(0,o.useState)(t);return(0,i.Z)(()=>{!t&&s(!0)},[t]),(0,i.Z)(()=>{a&&c(t)},[a,t]),a?(0,r.jsx)(p,{...n,collapsed:l}):null}function g(e){let{lazy:t,...n}=e;return(0,r.jsx)(t?f:p,{...n})}},73183:function(e,t,n){"use strict";n.d(t,{n:function(){return m},p:function(){return g}});var r=n(85893),o=n(67294),a=n(13341),i=n(70085),s=n(57100),l=n(45237);let c=(0,i.WA)("docusaurus.announcement.dismiss"),u=(0,i.WA)("docusaurus.announcement.id"),d=()=>"true"===c.get(),p=e=>c.set(String(e)),f=o.createContext(null);function g(e){let{children:t}=e,n=function(){let{announcementBar:e}=(0,l.L)(),t=(0,a.Z)(),[n,r]=(0,o.useState)(()=>!!t&&d());(0,o.useEffect)(()=>{r(d())},[]);let i=(0,o.useCallback)(()=>{p(!0),r(!0)},[]);return(0,o.useEffect)(()=>{if(!e)return;let{id:t}=e,n=u.get();"annoucement-bar"===n&&(n="announcement-bar");let o=t!==n;u.set(t),o&&p(!1),(o||!d())&&r(!1)},[e]),(0,o.useMemo)(()=>({isActive:!!e&&!n,close:i}),[e,n,i])}();return(0,r.jsx)(f.Provider,{value:n,children:t})}function m(){let e=(0,o.useContext)(f);if(!e)throw new s.i6("AnnouncementBarProvider");return e}},96818:function(e,t,n){"use strict";n.d(t,{I:function(){return b},S:function(){return h}});var r=n(85893),o=n(67294),a=n(81821),i=n(57100),s=n(70085),l=n(45237);let c=o.createContext(void 0),u="theme",d=(0,s.WA)(u),p={light:"light",dark:"dark"},f=e=>e===p.dark?p.dark:p.light,g=e=>a.Z.canUseDOM?f(document.documentElement.getAttribute("data-theme")):f(e),m=e=>{d.set(f(e))};function h(e){let{children:t}=e,n=function(){let{colorMode:{defaultMode:e,disableSwitch:t,respectPrefersColorScheme:n}}=(0,l.L)(),[r,a]=(0,o.useState)(g(e));(0,o.useEffect)(()=>{t&&d.del()},[t]);let i=(0,o.useCallback)(function(t){let r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},{persist:o=!0}=r;t?(a(t),o&&m(t)):(n?a(window.matchMedia("(prefers-color-scheme: dark)").matches?p.dark:p.light):a(e),d.del())},[n,e]);(0,o.useEffect)(()=>{document.documentElement.setAttribute("data-theme",f(r))},[r]),(0,o.useEffect)(()=>{if(t)return;let e=e=>{if(e.key!==u)return;let t=d.get();null!==t&&i(f(t))};return window.addEventListener("storage",e),()=>window.removeEventListener("storage",e)},[t,i]);let s=(0,o.useRef)(!1);return(0,o.useEffect)(()=>{if(t&&!n)return;let e=window.matchMedia("(prefers-color-scheme: dark)"),r=()=>{if(window.matchMedia("print").matches||s.current){s.current=window.matchMedia("print").matches;return}i(null)};return e.addListener(r),()=>e.removeListener(r)},[i,t,n]),(0,o.useMemo)(()=>({colorMode:r,setColorMode:i,get isDarkTheme(){return r===p.dark},setLightTheme(){i(p.light)},setDarkTheme(){i(p.dark)}}),[r,i])}();return(0,r.jsx)(c.Provider,{value:n,children:t})}function b(){let e=(0,o.useContext)(c);if(null==e)throw new i.i6("ColorModeProvider","Please see https://docusaurus.io/docs/api/themes/configuration#use-color-mode.");return e}},25658:function(e,t,n){"use strict";n.d(t,{M:function(){return d},e:function(){return p}});var r=n(85893),o=n(67294),a=n(5942),i=n(72649),s=n(63237),l=n(45237),c=n(57100);let u=o.createContext(void 0);function d(e){let{children:t}=e,n=function(){let e=function(){let e=(0,a.HY)(),{items:t}=(0,l.L)().navbar;return 0===t.length&&!e.component}(),t=(0,i.i)(),n=!e&&"mobile"===t,[r,c]=(0,o.useState)(!1);(0,s.Rb)(()=>{if(r)return c(!1),!1});let u=(0,o.useCallback)(()=>{c(e=>!e)},[]);return(0,o.useEffect)(()=>{"desktop"===t&&c(!1)},[t]),(0,o.useMemo)(()=>({disabled:e,shouldRender:n,toggle:u,shown:r}),[e,n,u,r])}();return(0,r.jsx)(u.Provider,{value:n,children:t})}function p(){let e=o.useContext(u);if(void 0===e)throw new c.i6("NavbarMobileSidebarProvider");return e}},5942:function(e,t,n){"use strict";n.d(t,{HY:function(){return l},Zo:function(){return c},n2:function(){return s}});var r=n(85893),o=n(67294),a=n(57100);let i=o.createContext(null);function s(e){let{children:t}=e,n=(0,o.useState)({component:null,props:null});return(0,r.jsx)(i.Provider,{value:n,children:t})}function l(){let e=(0,o.useContext)(i);if(!e)throw new a.i6("NavbarSecondaryMenuContentProvider");return e[0]}function c(e){let{component:t,props:n}=e,r=(0,o.useContext)(i);if(!r)throw new a.i6("NavbarSecondaryMenuContentProvider");let[,s]=r,l=(0,a.Ql)(n);return(0,o.useEffect)(()=>{s({component:t,props:l})},[s,t,l]),(0,o.useEffect)(()=>()=>s({component:null,props:null}),[s]),null}},54130:function(e,t,n){"use strict";n.d(t,{h:()=>o,t:()=>a});var r=n("67294");let o="navigation-with-keyboard";function a(){(0,r.useEffect)(()=>{function e(e){"keydown"===e.type&&"Tab"===e.key&&document.body.classList.add(o),"mousedown"===e.type&&document.body.classList.remove(o)}return document.addEventListener("keydown",e),document.addEventListener("mousedown",e),()=>{document.body.classList.remove(o),document.removeEventListener("keydown",e),document.removeEventListener("mousedown",e)}},[])}},72649:function(e,t,n){"use strict";n.d(t,{i:function(){return i}});var r=n(67294),o=n(81821);let a={desktop:"desktop",mobile:"mobile"};function i(){let{desktopBreakpoint:e=996}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},[t,n]=(0,r.useState)(()=>"ssr");return(0,r.useEffect)(()=>{function t(){n(function(e){if(!o.Z.canUseDOM)throw Error("getWindowSize() should only be called after React hydration");return window.innerWidth>e?a.desktop:a.mobile}(e))}return t(),window.addEventListener("resize",t),()=>{window.removeEventListener("resize",t)}},[e]),t}},50490:function(e,t,n){"use strict";n.d(t,{k:function(){return r}});let r={page:{blogListPage:"blog-list-page",blogPostPage:"blog-post-page",blogTagsListPage:"blog-tags-list-page",blogTagPostListPage:"blog-tags-post-list-page",blogAuthorsListPage:"blog-authors-list-page",blogAuthorsPostsPage:"blog-authors-posts-page",docsDocPage:"docs-doc-page",docsTagsListPage:"docs-tags-list-page",docsTagDocListPage:"docs-tags-doc-list-page",mdxPage:"mdx-page"},wrapper:{main:"main-wrapper",blogPages:"blog-wrapper",docsPages:"docs-wrapper",mdxPages:"mdx-wrapper"},common:{editThisPage:"theme-edit-this-page",lastUpdated:"theme-last-updated",backToTopButton:"theme-back-to-top-button",codeBlock:"theme-code-block",admonition:"theme-admonition",unlistedBanner:"theme-unlisted-banner",draftBanner:"theme-draft-banner",admonitionType:e=>`theme-admonition-${e}`},layout:{},docs:{docVersionBanner:"theme-doc-version-banner",docVersionBadge:"theme-doc-version-badge",docBreadcrumbs:"theme-doc-breadcrumbs",docMarkdown:"theme-doc-markdown",docTocMobile:"theme-doc-toc-mobile",docTocDesktop:"theme-doc-toc-desktop",docFooter:"theme-doc-footer",docFooterTagsRow:"theme-doc-footer-tags-row",docFooterEditMetaRow:"theme-doc-footer-edit-meta-row",docSidebarContainer:"theme-doc-sidebar-container",docSidebarMenu:"theme-doc-sidebar-menu",docSidebarItemCategory:"theme-doc-sidebar-item-category",docSidebarItemLink:"theme-doc-sidebar-item-link",docSidebarItemCategoryLevel:e=>`theme-doc-sidebar-item-category-level-${e}`,docSidebarItemLinkLevel:e=>`theme-doc-sidebar-item-link-level-${e}`},blog:{blogFooterTagsRow:"theme-blog-footer-tags-row",blogFooterEditMetaRow:"theme-blog-footer-edit-meta-row"},pages:{pageFooterEditMetaRow:"theme-pages-footer-edit-meta-row"}}},11027:function(e,t,n){"use strict";function r(){return window.matchMedia("(prefers-reduced-motion: reduce)").matches}n.d(t,{n:function(){return r}})},63237:function(e,t,n){"use strict";n.d(t,{Rb:function(){return i},_X:function(){return s}});var r=n(67294),o=n(16550),a=n(57100);function i(e){!function(e){let t=(0,o.k6)(),n=(0,a.zX)(e);(0,r.useEffect)(()=>t.block((e,t)=>n(e,t)),[t,n])}((t,n)=>{if("POP"===n)return e(t,n)})}function s(e){return function(e){let t=(0,o.k6)();return(0,r.useSyncExternalStore)(t.listen,()=>e(t),()=>e(t))}(t=>null===e?null:new URLSearchParams(t.location.search).get(e))}},51373:function(e,t,n){"use strict";function r(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:(e,t)=>e===t;return e.filter((n,r)=>e.findIndex(e=>t(e,n))!==r)}function o(e){return Array.from(new Set(e))}function a(e,t){let n={},r=0;for(let o of e){let e=t(o,r);n[e]??=[],n[e].push(o),r+=1}return n}n.d(t,{jj:function(){return o},lx:function(){return r},vM:function(){return a}})},81921:function(e,t,n){"use strict";n.d(t,{FG:()=>p,d:()=>u,VC:()=>f});var r=n("85893"),o=n("67294"),a=n("88942"),i=n("50777"),s=n("39025"),l=n("7571"),c=n("93934");function u(e){let{title:t,description:n,keywords:o,image:a,children:s}=e,u=function(e){let{siteConfig:t}=(0,c.Z)(),{title:n,titleDelimiter:r}=t;return e?.trim().length?`${e.trim()} ${r} ${n}`:n}(t),{withBaseUrl:d}=(0,l.Cg)(),p=a?d(a,{absolute:!0}):void 0;return(0,r.jsxs)(i.Z,{children:[t&&(0,r.jsx)("title",{children:u}),t&&(0,r.jsx)("meta",{property:"og:title",content:u}),n&&(0,r.jsx)("meta",{name:"description",content:n}),n&&(0,r.jsx)("meta",{property:"og:description",content:n}),o&&(0,r.jsx)("meta",{name:"keywords",content:Array.isArray(o)?o.join(","):o}),p&&(0,r.jsx)("meta",{property:"og:image",content:p}),p&&(0,r.jsx)("meta",{name:"twitter:image",content:p}),s]})}let d=o.createContext(void 0);function p(e){let{className:t,children:n}=e,s=o.useContext(d),l=(0,a.Z)(s,t);return(0,r.jsxs)(d.Provider,{value:l,children:[(0,r.jsx)(i.Z,{children:(0,r.jsx)("html",{className:l})}),n]})}function f(e){var t;let{children:n}=e,o=(0,s.Z)();let i=(t=o.plugin.name,`plugin-${t.replace(/docusaurus-(?:plugin|theme)-(?:content-)?/gi,"")}`),l=`plugin-id-${o.plugin.id}`;return(0,r.jsx)(p,{className:(0,a.Z)(i,l),children:n})}},57100:function(e,t,n){"use strict";n.d(t,{D9:function(){return s},Qc:function(){return u},Ql:function(){return c},i6:function(){return l},zX:function(){return i}});var r=n(85893),o=n(67294),a=n(27222);function i(e){let t=(0,o.useRef)(e);return(0,a.Z)(()=>{t.current=e},[e]),(0,o.useCallback)(function(){for(var e=arguments.length,n=Array(e),r=0;r<e;r++)n[r]=arguments[r];return t.current(...n)},[])}function s(e){let t=(0,o.useRef)();return(0,a.Z)(()=>{t.current=e}),t.current}class l extends Error{constructor(e,t){super(),this.name="ReactContextError",this.message=`Hook ${this.stack?.split("\n")[1]?.match(/at (?:\w+\.)?(?<name>\w+)/)?.groups.name??""} is called outside the <${e}>. ${t??""}`}}function c(e){let t=Object.entries(e);return t.sort((e,t)=>e[0].localeCompare(t[0])),(0,o.useMemo)(()=>e,t.flat())}function u(e){return t=>{let{children:n}=t;return(0,r.jsx)(r.Fragment,{children:e.reduceRight((e,t)=>(0,r.jsx)(t,{children:e}),n)})}}},16896:function(e,t,n){"use strict";n.d(t,{Mg:function(){return i},Ns:function(){return s}});var r=n(67294),o=n(60093),a=n(93934);function i(e,t){let n=e=>(!e||e.endsWith("/")?e:`${e}/`)?.toLowerCase();return n(e)===n(t)}function s(){let{baseUrl:e}=(0,a.Z)().siteConfig;return(0,r.useMemo)(()=>(function(e){let{baseUrl:t,routes:n}=e;function r(e){return e.path===t&&!0===e.exact}function o(e){return e.path===t&&!e.exact}return function e(t){if(0===t.length)return;let n=t.find(r);return n?n:e(t.filter(o).flatMap(e=>e.routes??[]))}(n)})({routes:o.Z,baseUrl:e}),[e])}},27570:function(e,t,n){"use strict";n.d(t,{Ct:function(){return m},OC:function(){return u},RF:function(){return f},o5:function(){return g}});var r=n(85893),o=n(67294),a=n(81821),i=n(13341),s=n(27222),l=n(57100);let c=o.createContext(void 0);function u(e){let{children:t}=e,n=function(){let e=(0,o.useRef)(!0);return(0,o.useMemo)(()=>({scrollEventsEnabledRef:e,enableScrollEvents:()=>{e.current=!0},disableScrollEvents:()=>{e.current=!1}}),[])}();return(0,r.jsx)(c.Provider,{value:n,children:t})}function d(){let e=(0,o.useContext)(c);if(null==e)throw new l.i6("ScrollControllerProvider");return e}let p=()=>a.Z.canUseDOM?{scrollX:window.pageXOffset,scrollY:window.pageYOffset}:null;function f(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],{scrollEventsEnabledRef:n}=d(),r=(0,o.useRef)(p()),a=(0,l.zX)(e);(0,o.useEffect)(()=>{let e=()=>{if(!n.current)return;let e=p();a(e,r.current),r.current=e},t={passive:!0};return e(),window.addEventListener("scroll",e,t),()=>window.removeEventListener("scroll",e,t)},[a,n,...t])}function g(){let e=d(),t=function(){let e=(0,o.useRef)({elem:null,top:0}),t=(0,o.useCallback)(t=>{e.current={elem:t,top:t.getBoundingClientRect().top}},[]),n=(0,o.useCallback)(()=>{let{current:{elem:t,top:n}}=e;if(!t)return{restored:!1};let r=t.getBoundingClientRect().top-n;return r&&window.scrollBy({left:0,top:r}),e.current={elem:null,top:0},{restored:0!==r}},[]);return(0,o.useMemo)(()=>({save:t,restore:n}),[n,t])}(),n=(0,o.useRef)(void 0),r=(0,o.useCallback)(r=>{t.save(r),e.disableScrollEvents(),n.current=()=>{let{restored:r}=t.restore();if(n.current=void 0,r){let t=()=>{e.enableScrollEvents(),window.removeEventListener("scroll",t)};window.addEventListener("scroll",t)}else e.enableScrollEvents()}},[e,t]);return(0,s.Z)(()=>{queueMicrotask(()=>n.current?.())}),{blockElementScrollPositionUntilNextRender:r}}function m(){let e=(0,o.useRef)(null),t=(0,i.Z)()&&"smooth"===getComputedStyle(document.documentElement).scrollBehavior;return{startScroll:n=>{var r;e.current=t?(r=n,window.scrollTo({top:r,behavior:"smooth"}),()=>{}):function(e){let t=null,n=document.documentElement.scrollTop>e;return!function r(){let o=document.documentElement.scrollTop;(n&&o>e||!n&&o<e)&&(t=requestAnimationFrame(r),window.scrollTo(0,Math.floor((o-e)*.85)+e))}(),()=>t&&cancelAnimationFrame(t)}(n)},cancelScroll:()=>e.current?.()}}},1138:function(e,t,n){"use strict";n.d(t,{H:function(){return r}});let r="default"},70085:function(e,t,n){"use strict";n.d(t,{WA:()=>c,Nk:()=>u});var r=n("67294"),o=JSON.parse('{"d":"localStorage","u":""}');let a=o.d;function i(e){let{key:t,oldValue:n,newValue:r,storage:o}=e;if(n===r)return;let a=document.createEvent("StorageEvent");a.initStorageEvent("storage",!1,!1,t,n,r,window.location.href,o),window.dispatchEvent(a)}let s=!1,l={get:()=>null,set:()=>{},del:()=>{},listen:()=>()=>{}};function c(e,t){var n;let r=(n=e,`${n}${o.u}`);if("undefined"==typeof window)return function(e){function t(){throw Error(`Illegal storage API usage for storage key "${e}". +Docusaurus storage APIs are not supposed to be called on the server-rendering process. +Please only call storage APIs in effects and event handlers.`)}return{get:t,set:t,del:t,listen:t}}(r);let c=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:a;if("undefined"==typeof window)throw Error("Browser storage is not available on Node.js/Docusaurus SSR process.");if("none"===e)return null;try{return window[e]}catch(e){return function(e){!s&&(console.warn(`Docusaurus browser storage is not available. +Possible reasons: running Docusaurus in an iframe, in an incognito browser session, or using too strict browser privacy settings.`,e),s=!0)}(e),null}}(t?.persistence);return null===c?l:{get:()=>{try{return c.getItem(r)}catch(e){return console.error(`Docusaurus storage error, can't get key=${r}`,e),null}},set:e=>{try{let t=c.getItem(r);c.setItem(r,e),i({key:r,oldValue:t,newValue:e,storage:c})}catch(t){console.error(`Docusaurus storage error, can't set ${r}=${e}`,t)}},del:()=>{try{let e=c.getItem(r);c.removeItem(r),i({key:r,oldValue:e,newValue:null,storage:c})}catch(e){console.error(`Docusaurus storage error, can't delete key=${r}`,e)}},listen:e=>{try{let t=t=>{t.storageArea===c&&t.key===r&&e(t)};return window.addEventListener("storage",t),()=>window.removeEventListener("storage",t)}catch(e){return console.error(`Docusaurus storage error, can't listen for changes of key=${r}`,e),()=>{}}}}}function u(e,t){let n=(0,r.useRef)(()=>null===e?l:c(e,t)).current(),o=(0,r.useCallback)(e=>"undefined"==typeof window?()=>{}:n.listen(e),[n]);return[(0,r.useSyncExternalStore)(o,()=>"undefined"==typeof window?null:n.get(),()=>null),n]}},7327:function(e,t,n){"use strict";n.d(t,{l:function(){return i}});var r=n(93934),o=n(16550),a=n(3062);function i(){let{siteConfig:{baseUrl:e,url:t,trailingSlash:n},i18n:{defaultLocale:i,currentLocale:s}}=(0,r.Z)(),{pathname:l}=(0,o.TH)(),c=(0,a.applyTrailingSlash)(l,{trailingSlash:n,baseUrl:e}),u=s===i?e:e.replace(`/${s}/`,"/"),d=c.replace(e,"");return{createUrl:function(e){var n;let{locale:r,fullyQualified:o}=e;return`${o?t:""}${(n=r)===i?`${u}`:`${u}${n}/`}${d}`}}}},11257:function(e,t,n){"use strict";n.d(t,{S:function(){return i}});var r=n(67294),o=n(16550),a=n(57100);function i(e){let t=(0,o.TH)(),n=(0,a.D9)(t),i=(0,a.zX)(e);(0,r.useEffect)(()=>{if(!!n)t!==n&&i({location:t,previousLocation:n})},[i,t,n])}},45237:function(e,t,n){"use strict";n.d(t,{L:function(){return o}});var r=n(93934);function o(){return(0,r.Z)().siteConfig.themeConfig}},49133:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.addTrailingSlash=o,t.default=function(e,t){var n;let{trailingSlash:r,baseUrl:i}=t;if(e.startsWith("#"))return e;if(void 0===r)return e;let[s]=e.split(/[#?]/);let l="/"===s||s===i?s:(n=s,r?o(n):a(n));return e.replace(s,l)},t.addLeadingSlash=function(e){return(0,r.addPrefix)(e,"/")},t.removeTrailingSlash=a;let r=n(41724);function o(e){return e.endsWith("/")?e:`${e}/`}function a(e){return(0,r.removeSuffix)(e,"/")}},71028:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.getErrorCausalChain=function e(t){return t.cause?[t,...e(t.cause)]:[t]}},3062:function(e,t,n){"use strict";t.getErrorCausalChain=t.applyTrailingSlash=t.blogPostContainerID=void 0;let r=n(28395);t.blogPostContainerID="__blog-post-container";var o,a=n(49133);Object.defineProperty(t,"applyTrailingSlash",{enumerable:!0,get:function(){return r.__importDefault(a).default}}),n(41724);var i=n(71028);Object.defineProperty(t,"getErrorCausalChain",{enumerable:!0,get:function(){return i.getErrorCausalChain}})},41724:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.addPrefix=function(e,t){return e.startsWith(t)?e:`${t}${e}`},t.removeSuffix=function(e,t){return""===t?e:e.endsWith(t)?e.slice(0,-t.length):e},t.addSuffix=function(e,t){return e.endsWith(t)?e:`${e}${t}`},t.removePrefix=function(e,t){return e.startsWith(t)?e.slice(t.length):e}},75150:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return r}});let r={title:"Solus Help Center",tagline:"Help center for the Solus operating system",favicon:"img/support-icon-2.svg",url:"https://help.getsol.us",baseUrl:"/",organizationName:"getsolus",projectName:"help-center-docs",onBrokenLinks:"warn",onBrokenMarkdownLinks:"warn",i18n:{defaultLocale:"en",locales:["en"],path:"i18n",localeConfigs:{}},future:{experimental_faster:{swcJsLoader:!0,swcJsMinimizer:!0,swcHtmlMinimizer:!0,lightningCssMinimizer:!0,mdxCrossCompilerCache:!0,rspackBundler:!0},experimental_storage:{type:"localStorage",namespace:!1},experimental_router:"browser"},presets:[["classic",{docs:{sidebarPath:"/home/runner/work/help-center-docs/help-center-docs/sidebars.js",editUrl:"https://github.com/getsolus/help-center-docs/tree/master/",showLastUpdateTime:!0},blog:{showReadingTime:!0,blogTitle:"Solus DevLog",blogDescription:"The Solus Development (b)log!",postsPerPage:"ALL",blogSidebarTitle:"All posts",blogSidebarCount:"ALL",path:"devlog"},theme:{customCss:"/home/runner/work/help-center-docs/help-center-docs/src/css/custom.css"}}]],plugins:[["/home/runner/work/help-center-docs/help-center-docs/node_modules/@cmfcmf/docusaurus-search-local/lib/server/index.js",{}],["@docusaurus/plugin-ideal-image",{quality:70,max:1030,min:640,steps:2,disableInDev:!1}]],themeConfig:{image:"img/logo.jpg",navbar:{title:"Solus Help Center",logo:{alt:"Solus Logo",src:"img/logo.svg"},items:[{type:"docSidebar",sidebarId:"userSidebar",position:"left",label:"Users"},{type:"docSidebar",sidebarId:"packagingSidebar",position:"left",label:"Packaging"},{to:"blog",label:"Dev Log",position:"left"},{label:"More",items:[{href:"https://getsol.us",label:"Solus Homepage"},{label:"Forums",href:"https://discuss.getsol.us/"},{href:"https://matrix.to/#/#solus:matrix.org",label:"Matrix"},{label:"Mastodon",href:"https://fosstodon.org/@Solus"},{label:"Github",href:"https://github.com/getsolus"},{label:"Packages",href:"https://dev.getsol.us/"},{label:"Issue Tracker",href:"https://issues.getsol.us/"},{label:"Security",href:"https://github.com/getsolus/packages/blob/main/SECURITY.md"}],type:"dropdown",position:"left"}],hideOnScroll:!1},footer:{style:"dark",links:[{title:"Docs",items:[{label:"Users",to:"/docs/user/intro"},{label:"Packaging",to:"/docs/packaging"}]},{title:"News",items:[{label:"Solus Blog",to:"https://getsol.us/blog"},{label:"Solus Devlog",to:"blog"}]},{title:"Community",items:[{label:"Forums",href:"https://discuss.getsol.us"},{label:"Matrix",href:"https://matrix.to/#/#solus:matrix.org"},{label:"Mastodon",href:"https://fosstodon.org/@Solus",rel:"me"}]},{title:"More",items:[{label:"Solus Homepage",to:"https://getsol.us/"},{label:"GitHub",href:"https://github.com/getsolus",rel:"me"},{label:"Packages",href:"https://dev.getsol.us"},{label:"Issue Tracker",href:"https://issues.getsol.us"},{label:"Security",href:"https://github.com/getsolus/packages/blob/main/SECURITY.md"}]}],copyright:"Copyright \xa9 2024 Solus Project. Built with Docusaurus."},prism:{theme:{plain:{color:"#393A34",backgroundColor:"#f6f8fa"},styles:[{types:["comment","prolog","doctype","cdata"],style:{color:"#999988",fontStyle:"italic"}},{types:["namespace"],style:{opacity:.7}},{types:["string","attr-value"],style:{color:"#e3116c"}},{types:["punctuation","operator"],style:{color:"#393A34"}},{types:["entity","url","symbol","number","boolean","variable","constant","property","regex","inserted"],style:{color:"#36acaa"}},{types:["atrule","keyword","attr-name","selector"],style:{color:"#00a4db"}},{types:["function","deleted","tag"],style:{color:"#d73a49"}},{types:["function-variable"],style:{color:"#6f42c1"}},{types:["tag","selector","keyword"],style:{color:"#00009f"}}]},darkTheme:{plain:{color:"#F8F8F2",backgroundColor:"#282A36"},styles:[{types:["prolog","constant","builtin"],style:{color:"rgb(189, 147, 249)"}},{types:["inserted","function"],style:{color:"rgb(80, 250, 123)"}},{types:["deleted"],style:{color:"rgb(255, 85, 85)"}},{types:["changed"],style:{color:"rgb(255, 184, 108)"}},{types:["punctuation","symbol"],style:{color:"rgb(248, 248, 242)"}},{types:["string","char","tag","selector"],style:{color:"rgb(255, 121, 198)"}},{types:["keyword","variable"],style:{color:"rgb(189, 147, 249)",fontStyle:"italic"}},{types:["comment"],style:{color:"rgb(98, 114, 164)"}},{types:["attr-name"],style:{color:"rgb(241, 250, 140)"}}]},additionalLanguages:["bash","diff","ini","powershell"],magicComments:[{className:"theme-code-block-highlighted-line",line:"highlight-next-line",block:{start:"highlight-start",end:"highlight-end"}}]},colorMode:{defaultMode:"light",disableSwitch:!1,respectPrefersColorScheme:!1},docs:{versionPersistence:"localStorage",sidebar:{hideable:!1,autoCollapseCategories:!1}},blog:{sidebar:{groupByYear:!0}},metadata:[],tableOfContents:{minHeadingLevel:2,maxHeadingLevel:3}},baseUrlIssueBanner:!0,onBrokenAnchors:"warn",onDuplicateRoutes:"warn",staticDirectories:["static"],customFields:{},themes:[],scripts:[],headTags:[],stylesheets:[],clientModules:[],titleDelimiter:"|",noIndex:!1,markdown:{format:"mdx",mermaid:!1,mdx1Compat:{comments:!0,admonitions:!0,headingIds:!0},anchors:{maintainCase:!1}}}},16019:function(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}).apply(this,arguments)}n.d(t,{Z:function(){return r}})},35091:function(e,t,n){"use strict";function r(e,t){return(r=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function o(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,r(e,t)}n.d(t,{Z:()=>o})},70443:function(e,t,n){"use strict";function r(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}n.d(t,{Z:function(){return r}})},74904:function(e,t,n){"use strict";n.d(t,{Z:function(){return r}});let r=function(){for(var e,t,n=0,r="",o=arguments.length;n<o;n++)(e=arguments[n])&&(t=function e(t){var n,r,o="";if("string"==typeof t||"number"==typeof t)o+=t;else if("object"==typeof t){if(Array.isArray(t)){var a=t.length;for(n=0;n<a;n++)t[n]&&(r=e(t[n]))&&(o&&(o+=" "),o+=r)}else for(r in t)t[r]&&(o&&(o+=" "),o+=r)}return o}(e))&&(r&&(r+=" "),r+=t);return r}},88942:function(e,t,n){"use strict";n.d(t,{Z:function(){return r}});let r=function(){for(var e,t,n=0,r="",o=arguments.length;n<o;n++)(e=arguments[n])&&(t=function e(t){var n,r,o="";if("string"==typeof t||"number"==typeof t)o+=t;else if("object"==typeof t){if(Array.isArray(t)){var a=t.length;for(n=0;n<a;n++)t[n]&&(r=e(t[n]))&&(o&&(o+=" "),o+=r)}else for(r in t)t[r]&&(o&&(o+=" "),o+=r)}return o}(e))&&(r&&(r+=" "),r+=t);return r}},43359:function(e,t,n){"use strict";let r,o,a,i,s;n.d(t,{y$:()=>eD,p1:()=>K});var l,c,u,d,p,f,g,m,h,b,y,v,w,k,S,x,_,E,O,P,j,C,T,I,A,N,L=n("67294");let R=function(){for(var e,t,n=0,r="",o=arguments.length;n<o;n++)(e=arguments[n])&&(t=function e(t){var n,r,o="";if("string"==typeof t||"number"==typeof t)o+=t;else if("object"==typeof t){if(Array.isArray(t)){var a=t.length;for(n=0;n<a;n++)t[n]&&(r=e(t[n]))&&(o&&(o+=" "),o+=r)}else for(r in t)t[r]&&(o&&(o+=" "),o+=r)}return o}(e))&&(r&&(r+=" "),r+=t);return r};var D=Object.create,F=Object.defineProperty,M=Object.defineProperties,B=Object.getOwnPropertyDescriptor,z=Object.getOwnPropertyDescriptors,$=Object.getOwnPropertyNames,U=Object.getOwnPropertySymbols,H=Object.getPrototypeOf,q=Object.prototype.hasOwnProperty,Q=Object.prototype.propertyIsEnumerable,Z=(e,t,n)=>t in e?F(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,W=(e,t)=>{for(var n in t||(t={}))q.call(t,n)&&Z(e,n,t[n]);if(U)for(var n of U(t))Q.call(t,n)&&Z(e,n,t[n]);return e},V=(e,t)=>M(e,z(t)),G=(e,t)=>{var n={};for(var r in e)q.call(e,r)&&0>t.indexOf(r)&&(n[r]=e[r]);if(null!=e&&U)for(var r of U(e))0>t.indexOf(r)&&Q.call(e,r)&&(n[r]=e[r]);return n},Y=(e,t,n,r)=>{if(t&&"object"==typeof t||"function"==typeof t)for(let o of $(t))!q.call(e,o)&&o!==n&&F(e,o,{get:()=>t[o],enumerable:!(r=B(t,o))||r.enumerable});return e};var K=(s=null!=(a=(r={"../../node_modules/.pnpm/prismjs@1.29.0_patch_hash=vrxx3pzkik6jpmgpayxfjunetu/node_modules/prismjs/prism.js"(e,t){var n=function(){var e=/(?:^|\s)lang(?:uage)?-([\w-]+)(?=\s|$)/i,t=0,n={},r={util:{encode:function e(t){return t instanceof o?new o(t.type,e(t.content),t.alias):Array.isArray(t)?t.map(e):t.replace(/&/g,"&").replace(/</g,"<").replace(/\u00a0/g," ")},type:function(e){return Object.prototype.toString.call(e).slice(8,-1)},objId:function(e){return e.__id||Object.defineProperty(e,"__id",{value:++t}),e.__id},clone:function e(t,n){var o,a;switch(n=n||{},r.util.type(t)){case"Object":if(n[a=r.util.objId(t)])return n[a];for(var i in o={},n[a]=o,t)t.hasOwnProperty(i)&&(o[i]=e(t[i],n));return o;case"Array":if(n[a=r.util.objId(t)])return n[a];return o=[],n[a]=o,t.forEach(function(t,r){o[r]=e(t,n)}),o;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 o=e.classList;if(o.contains(t))return!0;if(o.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 o in t)n[o]=t[o];return n},insertBefore:function(e,t,n,o){var a=(o=o||r.languages)[e],i={};for(var s in a)if(a.hasOwnProperty(s)){if(s==t)for(var l in n)n.hasOwnProperty(l)&&(i[l]=n[l]);n.hasOwnProperty(s)||(i[s]=a[s])}var c=o[e];return o[e]=i,r.languages.DFS(r.languages,function(t,n){n===c&&t!=e&&(this[t]=i)}),i},DFS:function e(t,n,o,a){a=a||{};var i=r.util.objId;for(var s in t)if(t.hasOwnProperty(s)){n.call(t,s,t[s],o||s);var l=t[s],c=r.util.type(l);"Object"!==c||a[i(l)]?"Array"!==c||a[i(l)]||(a[i(l)]=!0,e(l,n,s,a)):(a[i(l)]=!0,e(l,n,null,a))}}},plugins:{},highlight:function(e,t,n){var a={code:e,grammar:t,language:n};if(r.hooks.run("before-tokenize",a),!a.grammar)throw Error('The language "'+a.language+'" has no grammar.');return a.tokens=r.tokenize(a.code,a.grammar),r.hooks.run("after-tokenize",a),o.stringify(r.util.encode(a.tokens),a.language)},tokenize:function(e,t){var n=t.rest;if(n){for(var l in n)t[l]=n[l];delete t.rest}var c=new i;return s(c,c.head,e),function e(t,n,i,l,c,u){for(var d in i){if(!!i.hasOwnProperty(d)&&!!i[d]){var p=i[d];p=Array.isArray(p)?p:[p];for(var f=0;f<p.length;++f){if(u&&u.cause==d+","+f)return;var g=p[f],m=g.inside,h=!!g.lookbehind,b=!!g.greedy,y=g.alias;if(b&&!g.pattern.global){var v=g.pattern.toString().match(/[imsuy]*$/)[0];g.pattern=RegExp(g.pattern.source,v+"g")}for(var w=g.pattern||g,k=l.next,S=c;k!==n.tail&&(!u||!(S>=u.reach));S+=k.value.length,k=k.next){;var x,_=k.value;if(n.length>t.length)return;if(!(_ instanceof o)){var E=1;if(b){if(!(x=a(w,S,t,h))||x.index>=t.length)break;var O=x.index,P=x.index+x[0].length,j=S;for(j+=k.value.length;O>=j;)j+=(k=k.next).value.length;if(j-=k.value.length,S=j,k.value instanceof o)continue;for(var C=k;C!==n.tail&&(j<P||"string"==typeof C.value);C=C.next)E++,j+=C.value.length;E--,_=t.slice(S,j),x.index-=S}else if(!(x=a(w,0,_,h)))continue;var O=x.index,T=x[0],I=_.slice(0,O),A=_.slice(O+T.length),N=S+_.length;u&&N>u.reach&&(u.reach=N);var L=k.prev;if(I&&(L=s(n,L,I),S+=I.length),function(e,t,n){for(var r=t.next,o=0;o<n&&r!==e.tail;o++)r=r.next;t.next=r,r.prev=t,e.length-=o}(n,L,E),k=s(n,L,new o(d,m?r.tokenize(T,m):T,y,T)),A&&s(n,k,A),E>1){var R={cause:d+","+f,reach:N};e(t,n,i,k.prev,S,R),u&&R.reach>u.reach&&(u.reach=R.reach)}}}}}}}(e,c,t,c.head,0),function(e){for(var t=[],n=e.head.next;n!==e.tail;)t.push(n.value),n=n.next;return t}(c)},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 o,a=0;o=n[a++];)o(t)}},Token:o};function o(e,t,n,r){this.type=e,this.content=t,this.alias=n,this.length=0|(r||"").length}function a(e,t,n,r){e.lastIndex=t;var o=e.exec(n);if(o&&r&&o[1]){var a=o[1].length;o.index+=a,o[0]=o[0].slice(a)}return o}function i(){var e={value:null,prev:null,next:null},t={value:null,prev:e,next:null};e.next=t,this.head=e,this.tail=t,this.length=0}function s(e,t,n){var r=t.next,o={value:n,prev:t,next:r};return t.next=o,r.prev=o,e.length++,o}return o.stringify=function e(t,n){if("string"==typeof t)return t;if(Array.isArray(t)){var o="";return t.forEach(function(t){o+=e(t,n)}),o}var a={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(a.classes,i):a.classes.push(i)),r.hooks.run("wrap",a);var s="";for(var l in a.attributes)s+=" "+l+'="'+(a.attributes[l]||"").replace(/"/g,""")+'"';return"<"+a.tag+' class="'+a.classes.join(" ")+'"'+s+">"+a.content+"</"+a.tag+">"},r}();t.exports=n,n.default=n}},function(){return o||(0,r[$(r)[0]])((o={exports:{}}).exports,o),o.exports})())?D(H(a)):{},Y(!i&&a&&a.__esModule?s:F(s,"default",{value:a,enumerable:!0}),a));K.languages.markup={comment:{pattern:/<!--(?:(?!<!--)[\s\S])*?-->/,greedy:!0},prolog:{pattern:/<\?[\s\S]+?\?>/,greedy:!0},doctype:{pattern:/<!DOCTYPE(?:[^>"'[\]]|"[^"]*"|'[^']*')+(?:\[(?:[^<"'\]]|"[^"]*"|'[^']*'|<(?!!--)|<!--(?:[^-]|-(?!->))*-->)*\]\s*)?>/i,greedy:!0,inside:{"internal-subset":{pattern:/(^[^\[]*\[)[\s\S]+(?=\]>$)/,lookbehind:!0,greedy:!0,inside:null},string:{pattern:/"[^"]*"|'[^']*'/,greedy:!0},punctuation:/^<!|>$|[[\]]/,"doctype-tag":/^DOCTYPE/i,name:/[^\s<>'"]+/}},cdata:{pattern:/<!\[CDATA\[[\s\S]*?\]\]>/i,greedy:!0},tag:{pattern:/<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/,greedy:!0,inside:{tag:{pattern:/^<\/?[^\s>\/]+/,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"special-attr":[],"attr-value":{pattern:/=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/,inside:{punctuation:[{pattern:/^=/,alias:"attr-equals"},{pattern:/^(\s*)["']|["']$/,lookbehind:!0}]}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:[{pattern:/&[\da-z]{1,8};/i,alias:"named-entity"},/&#x?[\da-f]{1,8};/i]},K.languages.markup.tag.inside["attr-value"].inside.entity=K.languages.markup.entity,K.languages.markup.doctype.inside["internal-subset"].inside=K.languages.markup,K.hooks.add("wrap",function(e){"entity"===e.type&&(e.attributes.title=e.content.replace(/&/,"&"))}),Object.defineProperty(K.languages.markup.tag,"addInlined",{value:function(e,t){var n={},n=(n["language-"+t]={pattern:/(^<!\[CDATA\[)[\s\S]+?(?=\]\]>$)/i,lookbehind:!0,inside:K.languages[t]},n.cdata=/^<!\[CDATA\[|\]\]>$/i,{"included-cdata":{pattern:/<!\[CDATA\[[\s\S]*?\]\]>/i,inside:n}}),t=(n["language-"+t]={pattern:/[\s\S]+/,inside:K.languages[t]},{});t[e]={pattern:RegExp(/(<__[^>]*>)(?:<!\[CDATA\[(?:[^\]]|\](?!\]>))*\]\]>|(?!<!\[CDATA\[)[\s\S])*?(?=<\/__>)/.source.replace(/__/g,function(){return e}),"i"),lookbehind:!0,greedy:!0,inside:n},K.languages.insertBefore("markup","cdata",t)}}),Object.defineProperty(K.languages.markup.tag,"addAttribute",{value:function(e,t){K.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:K.languages[t]},punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}}}})}}),K.languages.html=K.languages.markup,K.languages.mathml=K.languages.markup,K.languages.svg=K.languages.markup,K.languages.xml=K.languages.extend("markup",{}),K.languages.ssml=K.languages.xml,K.languages.atom=K.languages.xml,K.languages.rss=K.languages.xml,l=K,c={pattern:/\\[\\(){}[\]^$+*?|.]/,alias:"escape"},d=RegExp((d="(?:[^\\\\-]|"+(u=/\\(?:x[\da-fA-F]{2}|u[\da-fA-F]{4}|u\{[\da-fA-F]+\}|0[0-7]{0,2}|[123][0-7]{2}|c[a-zA-Z]|.)/).source+")")+"-"+d),p={pattern:/(<|')[^<>']+(?=[>']$)/,lookbehind:!0,alias:"variable"},l.languages.regex={"char-class":{pattern:/((?:^|[^\\])(?:\\\\)*)\[(?:[^\\\]]|\\[\s\S])*\]/,lookbehind:!0,inside:{"char-class-negation":{pattern:/(^\[)\^/,lookbehind:!0,alias:"operator"},"char-class-punctuation":{pattern:/^\[|\]$/,alias:"punctuation"},range:{pattern:d,inside:{escape:u,"range-punctuation":{pattern:/-/,alias:"operator"}}},"special-escape":c,"char-set":{pattern:/\\[wsd]|\\p\{[^{}]+\}/i,alias:"class-name"},escape:u}},"special-escape":c,"char-set":{pattern:/\.|\\[wsd]|\\p\{[^{}]+\}/i,alias:"class-name"},backreference:[{pattern:/\\(?![123][0-7]{2})[1-9]/,alias:"keyword"},{pattern:/\\k<[^<>']+>/,alias:"keyword",inside:{"group-name":p}}],anchor:{pattern:/[$^]|\\[ABbGZz]/,alias:"function"},escape:u,group:[{pattern:/\((?:\?(?:<[^<>']+>|'[^<>']+'|[>:]|<?[=!]|[idmnsuxU]+(?:-[idmnsuxU]+)?:?))?/,alias:"punctuation",inside:{"group-name":p}},{pattern:/\)/,alias:"punctuation"}],quantifier:{pattern:/(?:[+*?]|\{\d+(?:,\d*)?\})[?+]?/,alias:"number"},alternation:{pattern:/\|/,alias:"keyword"}},K.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:/[{}[\];(),.:]/},K.languages.javascript=K.languages.extend("clike",{"class-name":[K.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}|\?\?=?|\?\.?|[~:]/}),K.languages.javascript["class-name"][0].pattern=/(\b(?:class|extends|implements|instanceof|interface|new)\s+)[\w.\\]+/,K.languages.insertBefore("javascript","keyword",{regex:{pattern:RegExp(/((?:^|[^$\w\xA0-\uFFFF."'\])\s]|\b(?:return|yield))\s*)/.source+/\//.source+"(?:"+/(?:\[(?:[^\]\\\r\n]|\\.)*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}/.source+"|"+/(?:\[(?:[^[\]\\\r\n]|\\.|\[(?:[^[\]\\\r\n]|\\.|\[(?:[^[\]\\\r\n]|\\.)*\])*\])*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}v[dgimyus]{0,7}/.source+")"+/(?=(?:\s|\/\*(?:[^*]|\*(?!\/))*\*\/)*(?:$|[\r\n,.;:})\]]|\/\/))/.source),lookbehind:!0,greedy:!0,inside:{"regex-source":{pattern:/^(\/)[\s\S]+(?=\/[a-z]*$)/,lookbehind:!0,alias:"language-regex",inside:K.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:K.languages.javascript},{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=>)/i,lookbehind:!0,inside:K.languages.javascript},{pattern:/(\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*=>)/,lookbehind:!0,inside:K.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:K.languages.javascript}],constant:/\b[A-Z](?:[A-Z_]|\dx?)*\b/}),K.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:K.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"}}),K.languages.insertBefore("javascript","operator",{"literal-property":{pattern:/((?:^|[,{])[ \t]*)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*:)/m,lookbehind:!0,alias:"property"}}),K.languages.markup&&(K.languages.markup.tag.addInlined("script","javascript"),K.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")),K.languages.js=K.languages.javascript,K.languages.actionscript=K.languages.extend("javascript",{keyword:/\b(?:as|break|case|catch|class|const|default|delete|do|dynamic|each|else|extends|final|finally|for|function|get|if|implements|import|in|include|instanceof|interface|internal|is|namespace|native|new|null|override|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|use|var|void|while|with)\b/,operator:/\+\+|--|(?:[+\-*\/%^]|&&?|\|\|?|<<?|>>?>?|[!=]=?)=?|[~?@]/}),K.languages.actionscript["class-name"].alias="function",delete K.languages.actionscript.parameter,delete K.languages.actionscript["literal-property"],K.languages.markup&&K.languages.insertBefore("actionscript","string",{xml:{pattern:/(^|[^.])<\/?\w+(?:\s+[^\s>\/=]+=("|')(?:\\[\s\S]|(?!\2)[^\\])*\2)*\s*\/?>/,lookbehind:!0,inside:K.languages.markup}}),g=/#(?!\{).+/,m={pattern:/#\{[^}]+\}/,alias:"variable"},(f=K).languages.coffeescript=f.languages.extend("javascript",{comment:g,string:[{pattern:/'(?:\\[\s\S]|[^\\'])*'/,greedy:!0},{pattern:/"(?:\\[\s\S]|[^\\"])*"/,greedy:!0,inside:{interpolation:m}}],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"}}),f.languages.insertBefore("coffeescript","comment",{"multiline-comment":{pattern:/###[\s\S]+?###/,alias:"comment"},"block-regex":{pattern:/\/{3}[\s\S]*?\/{3}/,alias:"regex",inside:{comment:g,interpolation:m}}}),f.languages.insertBefore("coffeescript","string",{"inline-javascript":{pattern:/`(?:\\[\s\S]|[^\\`])*`/,inside:{delimiter:{pattern:/^`|`$/,alias:"punctuation"},script:{pattern:/[\s\S]+/,alias:"language-javascript",inside:f.languages.javascript}}},"multiline-string":[{pattern:/'''[\s\S]*?'''/,greedy:!0,alias:"string"},{pattern:/"""[\s\S]*?"""/,greedy:!0,alias:"string",inside:{interpolation:m}}]}),f.languages.insertBefore("coffeescript","keyword",{property:/(?!\d)\w+(?=\s*:(?!:))/}),delete f.languages.coffeescript["template-string"],f.languages.coffee=f.languages.coffeescript,Object.defineProperty(b=(h=K).languages.javadoclike={parameter:{pattern:/(^[\t ]*(?:\/{3}|\*|\/\*\*)\s*@(?:arg|arguments|param)\s+)\w+/m,lookbehind:!0},keyword:{pattern:/(^[\t ]*(?:\/{3}|\*|\/\*\*)\s*|\{)@[a-z][a-zA-Z-]+\b/m,lookbehind:!0},punctuation:/[{}]/},"addSupport",{value:function(e,t){(e="string"==typeof e?[e]:e).forEach(function(e){var n=function(e){e.inside||(e.inside={}),e.inside.rest=t},r="doc-comment";if(o=h.languages[e]){var o,a=o[r];if((a=a||(o=h.languages.insertBefore(e,"comment",{"doc-comment":{pattern:/(^|[^\\])\/\*\*[^/][\s\S]*?(?:\*\/|$)/,lookbehind:!0,alias:"comment"}}))[r])instanceof RegExp&&(a=o[r]={pattern:a}),Array.isArray(a))for(var i=0,s=a.length;i<s;i++)a[i]instanceof RegExp&&(a[i]={pattern:a[i]}),n(a[i]);else n(a)}})}}),b.addSupport(["java","javascript","php"],b),v=/(?:"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n])*')/,(v=((y=K).languages.css={comment:/\/\*[\s\S]*?\*\//,atrule:{pattern:RegExp("@[\\w-](?:"+/[^;{\s"']|\s+(?!\s)/.source+"|"+v.source+")*?"+/(?:;|(?=\s*\{))/.source),inside:{rule:/^@[\w-]+/,"selector-function-argument":{pattern:/(\bselector\s*\(\s*(?![\s)]))(?:[^()\s]|\s+(?![\s)])|\((?:[^()]|\([^()]*\))*\))+(?=\s*\))/,lookbehind:!0,alias:"selector"},keyword:{pattern:/(^|[^\w-])(?:and|not|only|or)(?![\w-])/,lookbehind:!0}}},url:{pattern:RegExp("\\burl\\((?:"+v.source+"|"+/(?:[^\\\r\n()"']|\\[\s\S])*/.source+")\\)","i"),greedy:!0,inside:{function:/^url/i,punctuation:/^\(|\)$/,string:{pattern:RegExp("^"+v.source+"$"),alias:"url"}}},selector:{pattern:RegExp("(^|[{}\\s])[^{}\\s](?:[^{};\"'\\s]|\\s+(?![\\s{])|"+v.source+")*(?=\\s*\\{)"),lookbehind:!0},string:{pattern:v,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:/[(){};:,]/},y.languages.css.atrule.inside.rest=y.languages.css,y.languages.markup))&&(v.tag.addInlined("style","css"),v.tag.addAttribute("style","css")),function(e){var t=/("|')(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,t=(e.languages.css.selector={pattern:e.languages.css.selector.pattern,lookbehind:!0,inside:t={"pseudo-element":/:(?:after|before|first-letter|first-line|selection)|::[-\w]+/,"pseudo-class":/:[-\w]+/,class:/\.[-\w]+/,id:/#[-\w]+/,attribute:{pattern:RegExp("\\[(?:[^[\\]\"']|"+t.source+")*\\]"),greedy:!0,inside:{punctuation:/^\[|\]$/,"case-sensitivity":{pattern:/(\s)[si]$/i,lookbehind:!0,alias:"keyword"},namespace:{pattern:/^(\s*)(?:(?!\s)[-*\w\xA0-\uFFFF])*\|(?!=)/,lookbehind:!0,inside:{punctuation:/\|$/}},"attr-name":{pattern:/^(\s*)(?:(?!\s)[-\w\xA0-\uFFFF])+/,lookbehind:!0},"attr-value":[t,{pattern:/(=\s*)(?:(?!\s)[-\w\xA0-\uFFFF])+(?=\s*$)/,lookbehind:!0}],operator:/[|~*^$]?=/}},"n-th":[{pattern:/(\(\s*)[+-]?\d*[\dn](?:\s*[+-]\s*\d+)?(?=\s*\))/,lookbehind:!0,inside:{number:/[\dn]+/,operator:/[+-]/}},{pattern:/(\(\s*)(?:even|odd)(?=\s*\))/i,lookbehind:!0}],combinator:/>|\+|~|\|\|/,punctuation:/[(),]/}},e.languages.css.atrule.inside["selector-function-argument"].inside=t,e.languages.insertBefore("css","property",{variable:{pattern:/(^|[^-\w\xA0-\uFFFF])--(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*/i,lookbehind:!0}}),{pattern:/(\b\d+)(?:%|[a-z]+(?![\w-]))/,lookbehind:!0}),n={pattern:/(^|[^\w.-])-?(?:\d+(?:\.\d+)?|\.\d+)/,lookbehind:!0};e.languages.insertBefore("css","function",{operator:{pattern:/(\s)[+\-*\/](?=\s)/,lookbehind:!0},hexcode:{pattern:/\B#[\da-f]{3,8}\b/i,alias:"color"},color:[{pattern:/(^|[^\w-])(?:AliceBlue|AntiqueWhite|Aqua|Aquamarine|Azure|Beige|Bisque|Black|BlanchedAlmond|Blue|BlueViolet|Brown|BurlyWood|CadetBlue|Chartreuse|Chocolate|Coral|CornflowerBlue|Cornsilk|Crimson|Cyan|DarkBlue|DarkCyan|DarkGoldenRod|DarkGr[ae]y|DarkGreen|DarkKhaki|DarkMagenta|DarkOliveGreen|DarkOrange|DarkOrchid|DarkRed|DarkSalmon|DarkSeaGreen|DarkSlateBlue|DarkSlateGr[ae]y|DarkTurquoise|DarkViolet|DeepPink|DeepSkyBlue|DimGr[ae]y|DodgerBlue|FireBrick|FloralWhite|ForestGreen|Fuchsia|Gainsboro|GhostWhite|Gold|GoldenRod|Gr[ae]y|Green|GreenYellow|HoneyDew|HotPink|IndianRed|Indigo|Ivory|Khaki|Lavender|LavenderBlush|LawnGreen|LemonChiffon|LightBlue|LightCoral|LightCyan|LightGoldenRodYellow|LightGr[ae]y|LightGreen|LightPink|LightSalmon|LightSeaGreen|LightSkyBlue|LightSlateGr[ae]y|LightSteelBlue|LightYellow|Lime|LimeGreen|Linen|Magenta|Maroon|MediumAquaMarine|MediumBlue|MediumOrchid|MediumPurple|MediumSeaGreen|MediumSlateBlue|MediumSpringGreen|MediumTurquoise|MediumVioletRed|MidnightBlue|MintCream|MistyRose|Moccasin|NavajoWhite|Navy|OldLace|Olive|OliveDrab|Orange|OrangeRed|Orchid|PaleGoldenRod|PaleGreen|PaleTurquoise|PaleVioletRed|PapayaWhip|PeachPuff|Peru|Pink|Plum|PowderBlue|Purple|RebeccaPurple|Red|RosyBrown|RoyalBlue|SaddleBrown|Salmon|SandyBrown|SeaGreen|SeaShell|Sienna|Silver|SkyBlue|SlateBlue|SlateGr[ae]y|Snow|SpringGreen|SteelBlue|Tan|Teal|Thistle|Tomato|Transparent|Turquoise|Violet|Wheat|White|WhiteSmoke|Yellow|YellowGreen)(?![\w-])/i,lookbehind:!0},{pattern:/\b(?:hsl|rgb)\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*\)\B|\b(?:hsl|rgb)a\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*,\s*(?:0|0?\.\d+|1)\s*\)\B/i,inside:{unit:t,number:n,function:/[\w-]+(?=\()/,punctuation:/[(),]/}}],entity:/\\[\da-f]{1,8}/i,unit:t,number:n})}(K),function(e){var t=/[*&][^\s[\]{},]+/,n=/!(?:<[\w\-%#;/?:@&=+$,.!~*'()[\]]+>|(?:[a-zA-Z\d-]*!)?[\w\-%#;/?:@&=+$.~*'()]+)?/,r="(?:"+n.source+"(?:[ ]+"+t.source+")?|"+t.source+"(?:[ ]+"+n.source+")?)",o=/(?:[^\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}),a=/"(?:[^"\\\r\n]|\\.)*"|'(?:[^'\\\r\n]|\\.)*'/.source;function i(e,t){return t=(t||"").replace(/m/g,"")+"m",RegExp(/([:\-,[{]\s*(?:\s<<prop>>[ \t]+)?)(?:<<value>>)(?=[ \t]*(?:$|,|\]|\}|(?:[\r\n]\s*)?#))/.source.replace(/<<prop>>/g,function(){return r}).replace(/<<value>>/g,function(){return e}),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"(?:"+o+"|"+a+")"})),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(a),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}(K),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,o=/\|?__(?:\|__)+\|?(?:(?:\n|\r\n?)|(?![\s\S]))/.source.replace(/__/g,function(){return r}),a=/\|?[ \t]*:?-{3,}:?[ \t]*(?:\|[ \t]*:?-{3,}:?[ \t]*)+\|?(?:\n|\r\n?)/.source,i=(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("^"+o+a+"(?:"+o+")*","m"),inside:{"table-data-rows":{pattern:RegExp("^("+o+a+")(?:"+o+")*$"),lookbehind:!0,inside:{"table-data":{pattern:RegExp(r),inside:e.languages.markdown},punctuation:/\|/}},"table-line":{pattern:RegExp("^("+o+")"+a+"$"),lookbehind:!0,inside:{punctuation:/\||:?-{3,}:?/}},"table-header-row":{pattern:RegExp("^"+o+"$"),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 o,a=t[n];"code"!==a.type?e(a.content):(o=a.content[1],a=a.content[3],o&&a&&"code-language"===o.type&&"code-block"===a.type&&"string"==typeof o.content&&(o=o.content.replace(/\b#/g,"sharp").replace(/\b\+\+/g,"pp"),o="language-"+(o=(/[a-z][\w-]*/i.exec(o)||[""])[0].toLowerCase()),a.alias?"string"==typeof a.alias?a.alias=[a.alias,o]:a.alias.push(o):a.alias=[o]))}}(e.tokens)}),e.hooks.add("wrap",function(t){if("code-block"===t.type){for(var n,r="",o=0,a=t.classes.length;o<a;o++){var c=t.classes[o],c=/language-(.+)/.exec(c);if(c){r=c[1];break}}var u,d=e.languages[r];d?t.content=e.highlight(n=(n=(n=t.content).replace(i,"")).replace(/&(\w{1,8}|#x?[\da-f]{1,8});/gi,function(e,t){return"#"===(t=t.toLowerCase())[0]?l("x"===t[1]?parseInt(t.slice(2),16):Number(t.slice(1))):s[t]||e}),d,r):r&&"none"!==r&&e.plugins.autoloader&&(u="md-"+new Date().valueOf()+"-"+Math.floor(1e16*Math.random()),t.attributes.id=u,e.plugins.autoloader.loadLanguages(r,function(){var t=document.getElementById(u);t&&(t.innerHTML=e.highlight(t.textContent,e.languages[r],r))}))}}),RegExp(e.languages.markup.tag.pattern.source,"gi")),s={amp:"&",lt:"<",gt:">",quot:'"'},l=String.fromCodePoint||String.fromCharCode;e.languages.md=e.languages.markdown}(K),K.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:K.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+/},K.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 o=[];if(d(["definition-mutation","punctuation"])&&"("===function(e){return t[n+e]}(1).content){n+=2;var a=p(/^\($/,/^\)$/);if(-1===a)continue;for(;n<a;n++){var i=function(e){return t[n+e]}(0);"variable"===i.type&&(f(i,"variable-input"),o.push(i.content))}n=a+1}if(d(["punctuation","property-query"])&&"{"===function(e){return t[n+e]}(0).content&&(n++,f(function(e){return t[n+e]}(0),"property-mutation"),0<o.length)){var s=p(/^\{$/,/^\}$/);if(-1!==s)for(var l=n;l<s;l++){var c=t[l];"variable"===c.type&&0<=o.indexOf(c.content)&&f(c,"variable-input")}}}}function u(e){return t[n+e]}function d(e,r){r=r||0;for(var o=0;o<e.length;o++){var a=t[n+(o+r)];if(!a||a.type!==e[o])return}return 1}function p(e,r){for(var o=1,a=n;a<t.length;a++){var i=t[a],s=i.content;if("punctuation"===i.type&&"string"==typeof s){if(e.test(s))o++;else if(r.test(s)&&0==--o)return a}}return -1}function f(e,t){var n=e.alias;n?Array.isArray(n)||(e.alias=n=[n]):e.alias=n=[],n.push(t)}}),K.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,o=r.inside["interpolation-punctuation"],a=r.pattern.source;function i(t,r){if(e.languages[t])return{pattern:RegExp("((?:"+r+")\\s*)"+n),lookbehind:!0,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},"embedded-code":{pattern:/[\s\S]+/,alias:t}}}}function s(t,n,r){return t={code:t,grammar:n,language:r},e.hooks.run("before-tokenize",t),t.tokens=e.tokenize(t.code,t.grammar),e.hooks.run("after-tokenize",t),t.tokens}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 l={javascript:!0,js:!0,typescript:!0,ts:!0,jsx:!0,tsx:!0};e.hooks.add("after-tokenize",function(t){t.language in l&&function t(n){for(var i=0,l=n.length;i<l;i++){var c,u,d,p=n[i];"string"!=typeof p&&(Array.isArray(c=p.content)?"template-string"===p.type?(p=c[1],3===c.length&&"string"!=typeof p&&"embedded-code"===p.type&&(u=function e(t){return"string"==typeof t?t:Array.isArray(t)?t.map(e).join(""):e(t.content)}(p),p=Array.isArray(p=p.alias)?p[0]:p,d=e.languages[p])&&(c[1]=function(t,n,i){var l=e.tokenize(t,{interpolation:{pattern:RegExp(a),lookbehind:!0}}),c=0,u={},l=s(l.map(function(e){if("string"==typeof e)return e;for(var n,r,e=e.content;-1!==t.indexOf((r=c++,n="___"+i.toUpperCase()+"_"+r+"___")););return u[n]=e,n}).join(""),n,i),d=Object.keys(u);return c=0,function t(n){for(var a=0;a<n.length;a++){if(c>=d.length)return;var i,l,p,f,g,m,h,b=n[a];"string"==typeof b||"string"==typeof b.content?(i=d[c],-1!==(h=(m="string"==typeof b?b:b.content).indexOf(i))&&(++c,l=m.substring(0,h),g=u[i],p=void 0,(f={})["interpolation-punctuation"]=o,3===(f=e.tokenize(g,f)).length&&((p=[1,1]).push.apply(p,s(f[1],e.languages.javascript,"javascript")),f.splice.apply(f,p)),p=new e.Token("interpolation",f,r.alias,g),f=m.substring(h+i.length),g=[],l&&g.push(l),g.push(p),f&&(t(m=[f]),g.push.apply(g,m)),"string"==typeof b?(n.splice.apply(n,[a,1].concat(g)),a+=g.length-1):b.content=g)):Array.isArray(h=b.content)?t(h):t([h])}}(l),new e.Token(i,l,"language-"+i,t)}(u,d,p))):t(c):"string"!=typeof c&&t([c]))}}(t.tokens)})}(K),(w=K).languages.typescript=w.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/}),w.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 w.languages.typescript.parameter,delete w.languages.typescript["literal-property"],k=w.languages.extend("typescript",{}),delete k["class-name"],w.languages.typescript["class-name"].inside=k,w.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:k}}}}),w.languages.ts=w.languages.typescript,x=(S=K).languages.javascript,E="(@(?:arg|argument|param|property)\\s+(?:"+(_=/\{(?:[^{}]|\{(?:[^{}]|\{[^{}]*\})*\})+\}/.source)+"\\s+)?)",S.languages.jsdoc=S.languages.extend("javadoclike",{parameter:{pattern:RegExp(E+/(?:(?!\s)[$\w\xA0-\uFFFF.])+(?=\s|$)/.source),lookbehind:!0,inside:{punctuation:/\./}}}),S.languages.insertBefore("jsdoc","keyword",{"optional-parameter":{pattern:RegExp(E+/\[(?:(?!\s)[$\w\xA0-\uFFFF.])+(?:=[^[\]]+)?\](?=\s|$)/.source),lookbehind:!0,inside:{parameter:{pattern:/(^\[)[$\w\xA0-\uFFFF\.]+/,lookbehind:!0,inside:{punctuation:/\./}},code:{pattern:/(=)[\s\S]*(?=\]$)/,lookbehind:!0,inside:x,alias:"language-javascript"},punctuation:/[=[\]]/}},"class-name":[{pattern:RegExp(/(@(?:augments|class|extends|interface|memberof!?|template|this|typedef)\s+(?:<TYPE>\s+)?)[A-Z]\w*(?:\.[A-Z]\w*)*/.source.replace(/<TYPE>/g,function(){return _})),lookbehind:!0,inside:{punctuation:/\./}},{pattern:RegExp("(@[a-z]+\\s+)"+_),lookbehind:!0,inside:{string:x.string,number:x.number,boolean:x.boolean,keyword:S.languages.typescript.keyword,operator:/=>|\.\.\.|[&|?:*]/,punctuation:/[.,;=<>{}()[\]]/}}],example:{pattern:/(@example\s+(?!\s))(?:[^@\s]|\s+(?!\s))+?(?=\s*(?:\*\s*)?(?:@\w|\*\/))/,lookbehind:!0,inside:{code:{pattern:/^([\t ]*(?:\*\s*)?)\S.*$/m,lookbehind:!0,inside:x,alias:"language-javascript"}}}}),S.languages.javadoclike.addSupport("javascript",S.languages.jsdoc),(O=K).languages.flow=O.languages.extend("javascript",{}),O.languages.insertBefore("flow","keyword",{type:[{pattern:/\b(?:[Bb]oolean|Function|[Nn]umber|[Ss]tring|[Ss]ymbol|any|mixed|null|void)\b/,alias:"class-name"}]}),O.languages.flow["function-variable"].pattern=/(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=\s*(?:function\b|(?:\([^()]*\)(?:\s*:\s*\w+)?|(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)\s*=>))/i,delete O.languages.flow.parameter,O.languages.insertBefore("flow","operator",{"flow-punctuation":{pattern:/\{\||\|\}/,alias:"punctuation"}}),Array.isArray(O.languages.flow.keyword)||(O.languages.flow.keyword=[O.languages.flow.keyword]),O.languages.flow.keyword.unshift({pattern:/(^|[^$]\b)(?:Class|declare|opaque|type)\b(?!\$)/,lookbehind:!0},{pattern:/(^|[^$]\B)\$(?:Diff|Enum|Exact|Keys|ObjMap|PropertyType|Record|Shape|Subtype|Supertype|await)\b(?!\$)/,lookbehind:!0}),K.languages.n4js=K.languages.extend("javascript",{keyword:/\b(?:Array|any|boolean|break|case|catch|class|const|constructor|continue|debugger|declare|default|delete|do|else|enum|export|extends|false|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|module|new|null|number|package|private|protected|public|return|set|static|string|super|switch|this|throw|true|try|typeof|var|void|while|with|yield)\b/}),K.languages.insertBefore("n4js","constant",{annotation:{pattern:/@+\w+/,alias:"operator"}}),K.languages.n4jsd=K.languages.n4js,function(e){function t(e,t){return RegExp(e.replace(/<ID>/g,function(){return/(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*/.source}),t)}e.languages.insertBefore("javascript","function-variable",{"method-variable":{pattern:RegExp("(\\.\\s*)"+e.languages.javascript["function-variable"].pattern.source),lookbehind:!0,alias:["function-variable","method","function","property-access"]}}),e.languages.insertBefore("javascript","function",{method:{pattern:RegExp("(\\.\\s*)"+e.languages.javascript.function.source),lookbehind:!0,alias:["function","property-access"]}}),e.languages.insertBefore("javascript","constant",{"known-class-name":[{pattern:/\b(?:(?:Float(?:32|64)|(?:Int|Uint)(?:8|16|32)|Uint8Clamped)?Array|ArrayBuffer|BigInt|Boolean|DataView|Date|Error|Function|Intl|JSON|(?:Weak)?(?:Map|Set)|Math|Number|Object|Promise|Proxy|Reflect|RegExp|String|Symbol|WebAssembly)\b/,alias:"class-name"},{pattern:/\b(?:[A-Z]\w*)Error\b/,alias:"class-name"}]}),e.languages.insertBefore("javascript","keyword",{imports:{pattern:t(/(\bimport\b\s*)(?:<ID>(?:\s*,\s*(?:\*\s*as\s+<ID>|\{[^{}]*\}))?|\*\s*as\s+<ID>|\{[^{}]*\})(?=\s*\bfrom\b)/.source),lookbehind:!0,inside:e.languages.javascript},exports:{pattern:t(/(\bexport\b\s*)(?:\*(?:\s*as\s+<ID>)?(?=\s*\bfrom\b)|\{[^{}]*\})/.source),lookbehind:!0,inside:e.languages.javascript}}),e.languages.javascript.keyword.unshift({pattern:/\b(?:as|default|export|from|import)\b/,alias:"module"},{pattern:/\b(?:await|break|catch|continue|do|else|finally|for|if|return|switch|throw|try|while|yield)\b/,alias:"control-flow"},{pattern:/\bnull\b/,alias:["null","nil"]},{pattern:/\bundefined\b/,alias:"nil"}),e.languages.insertBefore("javascript","operator",{spread:{pattern:/\.{3}/,alias:"operator"},arrow:{pattern:/=>/,alias:"operator"}}),e.languages.insertBefore("javascript","punctuation",{"property-access":{pattern:t(/(\.\s*)#?<ID>/.source),lookbehind:!0},"maybe-class-name":{pattern:/(^|[^$\w\xA0-\uFFFF])[A-Z][$\w\xA0-\uFFFF]+/,lookbehind:!0},dom:{pattern:/\b(?:document|(?:local|session)Storage|location|navigator|performance|window)\b/,alias:"variable"},console:{pattern:/\bconsole(?=\s*\.)/,alias:"class-name"}});for(var n=["function","function-variable","method","method-variable","property-access"],r=0;r<n.length;r++){var o=n[r],a=e.languages.javascript[o],o=(a="RegExp"===e.util.type(a)?e.languages.javascript[o]={pattern:a}:a).inside||{};(a.inside=o)["maybe-class-name"]=/^[A-Z][\s\S]*/}}(K),function(e){var t=e.util.clone(e.languages.javascript),n=/(?:\s|\/\/.*(?!.)|\/\*(?:[^*]|\*(?!\/))\*\/)/.source,r=/(?:\{(?:\{(?:\{[^{}]*\}|[^{}])*\}|[^{}])*\})/.source,o=/(?:\{<S>*\.{3}(?:[^{}]|<BRACES>)*\})/.source;function a(e,t){return RegExp(e=e.replace(/<S>/g,function(){return n}).replace(/<BRACES>/g,function(){return r}).replace(/<SPREAD>/g,function(){return o}),t)}o=a(o).source,e.languages.jsx=e.languages.extend("markup",t),e.languages.jsx.tag.pattern=a(/<\/?(?:[\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:a(/<SPREAD>/.source),inside:e.languages.jsx}},e.languages.jsx.tag),e.languages.insertBefore("inside","special-attr",{script:{pattern:a(/=<BRACES>/.source),alias:"language-javascript",inside:{"script-punctuation":{pattern:/^=(?=\{)/,alias:"punctuation"},rest:e.languages.jsx}}},e.languages.jsx.tag);var i=function(e){return e?"string"==typeof e?e:"string"==typeof e.content?e.content:e.content.map(i).join(""):""};e.hooks.add("after-tokenize",function(t){"jsx"!==t.language&&"tsx"!==t.language||function t(n){for(var r=[],o=0;o<n.length;o++){var a=n[o],s=!1;"string"!=typeof a&&("tag"===a.type&&a.content[0]&&"tag"===a.content[0].type?"</"===a.content[0].content[0].content?0<r.length&&r[r.length-1].tagName===i(a.content[0].content[1])&&r.pop():"/>"!==a.content[a.content.length-1].content&&r.push({tagName:i(a.content[0].content[1]),openedBraces:0}):0<r.length&&"punctuation"===a.type&&"{"===a.content?r[r.length-1].openedBraces++:0<r.length&&0<r[r.length-1].openedBraces&&"punctuation"===a.type&&"}"===a.content?r[r.length-1].openedBraces--:s=!0),(s||"string"==typeof a)&&0<r.length&&0===r[r.length-1].openedBraces&&(s=i(a),o<n.length-1&&("string"==typeof n[o+1]||"plain-text"===n[o+1].type)&&(s+=i(n[o+1]),n.splice(o+1,1)),0<o&&("string"==typeof n[o-1]||"plain-text"===n[o-1].type)&&(s=i(n[o-1])+s,n.splice(o-1,1),o--),n[o]=new e.Token("plain-text",s,null,s)),a.content&&"string"!=typeof a.content&&t(a.content)}}(t.tokens)})}(K),j=(P=K).util.clone(P.languages.typescript),(j=(P.languages.tsx=P.languages.extend("jsx",j),delete P.languages.tsx.parameter,delete P.languages.tsx["literal-property"],P.languages.tsx.tag)).pattern=RegExp(/(^|[^\w$]|(?=<\/))/.source+"(?:"+j.pattern.source+")",j.pattern.flags),j.lookbehind=!0,K.languages.swift={comment:{pattern:/(^|[^\\:])(?:\/\/.*|\/\*(?:[^/*]|\/(?!\*)|\*(?!\/)|\/\*(?:[^*]|\*(?!\/))*\*\/)*\*\/)/,lookbehind:!0,greedy:!0},"string-literal":[{pattern:RegExp(/(^|[^"#])/.source+"(?:"+/"(?:\\(?:\((?:[^()]|\([^()]*\))*\)|\r\n|[^(])|[^\\\r\n"])*"/.source+"|"+/"""(?:\\(?:\((?:[^()]|\([^()]*\))*\)|[^(])|[^\\"]|"(?!""))*"""/.source+")"+/(?!["#])/.source),lookbehind:!0,greedy:!0,inside:{interpolation:{pattern:/(\\\()(?:[^()]|\([^()]*\))*(?=\))/,lookbehind:!0,inside:null},"interpolation-punctuation":{pattern:/^\)|\\\($/,alias:"punctuation"},punctuation:/\\(?=[\r\n])/,string:/[\s\S]+/}},{pattern:RegExp(/(^|[^"#])(#+)/.source+"(?:"+/"(?:\\(?:#+\((?:[^()]|\([^()]*\))*\)|\r\n|[^#])|[^\\\r\n])*?"/.source+"|"+/"""(?:\\(?:#+\((?:[^()]|\([^()]*\))*\)|[^#])|[^\\])*?"""/.source+")\\2"),lookbehind:!0,greedy:!0,inside:{interpolation:{pattern:/(\\#+\()(?:[^()]|\([^()]*\))*(?=\))/,lookbehind:!0,inside:null},"interpolation-punctuation":{pattern:/^\)|\\#+\($/,alias:"punctuation"},string:/[\s\S]+/}}],directive:{pattern:RegExp(/#/.source+"(?:"+/(?:elseif|if)\b/.source+"(?:[ ]*"+/(?:![ \t]*)?(?:\b\w+\b(?:[ \t]*\((?:[^()]|\([^()]*\))*\))?|\((?:[^()]|\([^()]*\))*\))(?:[ \t]*(?:&&|\|\|))?/.source+")+|"+/(?:else|endif)\b/.source+")"),alias:"property",inside:{"directive-name":/^#\w+/,boolean:/\b(?:false|true)\b/,number:/\b\d+(?:\.\d+)*\b/,operator:/!|&&|\|\||[<>]=?/,punctuation:/[(),]/}},literal:{pattern:/#(?:colorLiteral|column|dsohandle|file(?:ID|Literal|Path)?|function|imageLiteral|line)\b/,alias:"constant"},"other-directive":{pattern:/#\w+\b/,alias:"property"},attribute:{pattern:/@\w+/,alias:"atrule"},"function-definition":{pattern:/(\bfunc\s+)\w+/,lookbehind:!0,alias:"function"},label:{pattern:/\b(break|continue)\s+\w+|\b[a-zA-Z_]\w*(?=\s*:\s*(?:for|repeat|while)\b)/,lookbehind:!0,alias:"important"},keyword:/\b(?:Any|Protocol|Self|Type|actor|as|assignment|associatedtype|associativity|async|await|break|case|catch|class|continue|convenience|default|defer|deinit|didSet|do|dynamic|else|enum|extension|fallthrough|fileprivate|final|for|func|get|guard|higherThan|if|import|in|indirect|infix|init|inout|internal|is|isolated|lazy|left|let|lowerThan|mutating|none|nonisolated|nonmutating|open|operator|optional|override|postfix|precedencegroup|prefix|private|protocol|public|repeat|required|rethrows|return|right|safe|self|set|some|static|struct|subscript|super|switch|throw|throws|try|typealias|unowned|unsafe|var|weak|where|while|willSet)\b/,boolean:/\b(?:false|true)\b/,nil:{pattern:/\bnil\b/,alias:"constant"},"short-argument":/\$\d+\b/,omit:{pattern:/\b_\b/,alias:"keyword"},number:/\b(?:[\d_]+(?:\.[\de_]+)?|0x[a-f0-9_]+(?:\.[a-f0-9p_]+)?|0b[01_]+|0o[0-7_]+)\b/i,"class-name":/\b[A-Z](?:[A-Z_\d]*[a-z]\w*)?\b/,function:/\b[a-z_]\w*(?=\s*\()/i,constant:/\b(?:[A-Z_]{2,}|k[A-Z][A-Za-z_]+)\b/,operator:/[-+*/%=!<>&|^~?]+|\.[.\-+*/%=!<>&|^~?]+/,punctuation:/[{}[\]();,.:\\]/},K.languages.swift["string-literal"].forEach(function(e){e.inside.interpolation.inside=K.languages.swift}),(C=K).languages.kotlin=C.languages.extend("clike",{keyword:{pattern:/(^|[^.])\b(?:abstract|actual|annotation|as|break|by|catch|class|companion|const|constructor|continue|crossinline|data|do|dynamic|else|enum|expect|external|final|finally|for|fun|get|if|import|in|infix|init|inline|inner|interface|internal|is|lateinit|noinline|null|object|open|operator|out|override|package|private|protected|public|reified|return|sealed|set|super|suspend|tailrec|this|throw|to|try|typealias|val|var|vararg|when|where|while)\b/,lookbehind:!0},function:[{pattern:/(?:`[^\r\n`]+`|\b\w+)(?=\s*\()/,greedy:!0},{pattern:/(\.)(?:`[^\r\n`]+`|\w+)(?=\s*\{)/,lookbehind:!0,greedy:!0}],number:/\b(?:0[xX][\da-fA-F]+(?:_[\da-fA-F]+)*|0[bB][01]+(?:_[01]+)*|\d+(?:_\d+)*(?:\.\d+(?:_\d+)*)?(?:[eE][+-]?\d+(?:_\d+)*)?[fFL]?)\b/,operator:/\+[+=]?|-[-=>]?|==?=?|!(?:!|==?)?|[\/*%<>]=?|[?:]:?|\.\.|&&|\|\||\b(?:and|inv|or|shl|shr|ushr|xor)\b/}),delete C.languages.kotlin["class-name"],T={"interpolation-punctuation":{pattern:/^\$\{?|\}$/,alias:"punctuation"},expression:{pattern:/[\s\S]+/,inside:C.languages.kotlin}},C.languages.insertBefore("kotlin","string",{"string-literal":[{pattern:/"""(?:[^$]|\$(?:(?!\{)|\{[^{}]*\}))*?"""/,alias:"multiline",inside:{interpolation:{pattern:/\$(?:[a-z_]\w*|\{[^{}]*\})/i,inside:T},string:/[\s\S]+/}},{pattern:/"(?:[^"\\\r\n$]|\\.|\$(?:(?!\{)|\{[^{}]*\}))*"/,alias:"singleline",inside:{interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\$(?:[a-z_]\w*|\{[^{}]*\})/i,lookbehind:!0,inside:T},string:/[\s\S]+/}}],char:{pattern:/'(?:[^'\\\r\n]|\\(?:.|u[a-fA-F0-9]{0,4}))'/,greedy:!0}}),delete C.languages.kotlin.string,C.languages.insertBefore("kotlin","keyword",{annotation:{pattern:/\B@(?:\w+:)?(?:[A-Z]\w*|\[[^\]]+\])/,alias:"builtin"}}),C.languages.insertBefore("kotlin","function",{label:{pattern:/\b\w+@|@\w+\b/,alias:"symbol"}}),C.languages.kt=C.languages.kotlin,C.languages.kts=C.languages.kotlin,K.languages.c=K.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|[?:~]|[-+*/%&|^!=<>]=?/}),K.languages.insertBefore("c","string",{char:{pattern:/'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n]){0,32}'/,greedy:!0}}),K.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},K.languages.c.string],char:K.languages.c.char,comment:K.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:K.languages.c}}}}),K.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 K.languages.c.boolean,K.languages.objectivec=K.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 K.languages.objectivec["class-name"],K.languages.objc=K.languages.objectivec,K.languages.reason=K.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/}),K.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 K.languages.reason.function,function(e){for(var t=/\/\*(?:[^*/]|\*(?!\/)|\/(?!\*)|<self>)*\*\//.source,n=0;n<2;n++)t=t.replace(/<self>/g,function(){return t});t=t.replace(/<self>/g,function(){return/[^\s\S]/.source}),e.languages.rust={comment:[{pattern:RegExp(/(^|[^\\])/.source+t),lookbehind:!0,greedy:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0}],string:{pattern:/b?"(?:\\[\s\S]|[^\\"])*"|b?r(#*)"(?:[^"]|"(?!\1))*"\1/,greedy:!0},char:{pattern:/b?'(?:\\(?:x[0-7][\da-fA-F]|u\{(?:[\da-fA-F]_*){1,6}\}|.)|[^\\\r\n\t'])'/,greedy:!0},attribute:{pattern:/#!?\[(?:[^\[\]"]|"(?:\\[\s\S]|[^\\"])*")*\]/,greedy:!0,alias:"attr-name",inside:{string:null}},"closure-params":{pattern:/([=(,:]\s*|\bmove\s*)\|[^|]*\||\|[^|]*\|(?=\s*(?:\{|->))/,lookbehind:!0,greedy:!0,inside:{"closure-punctuation":{pattern:/^\||\|$/,alias:"punctuation"},rest:null}},"lifetime-annotation":{pattern:/'\w+/,alias:"symbol"},"fragment-specifier":{pattern:/(\$\w+:)[a-z]+/,lookbehind:!0,alias:"punctuation"},variable:/\$\w+/,"function-definition":{pattern:/(\bfn\s+)\w+/,lookbehind:!0,alias:"function"},"type-definition":{pattern:/(\b(?:enum|struct|trait|type|union)\s+)\w+/,lookbehind:!0,alias:"class-name"},"module-declaration":[{pattern:/(\b(?:crate|mod)\s+)[a-z][a-z_\d]*/,lookbehind:!0,alias:"namespace"},{pattern:/(\b(?:crate|self|super)\s*)::\s*[a-z][a-z_\d]*\b(?:\s*::(?:\s*[a-z][a-z_\d]*\s*::)*)?/,lookbehind:!0,alias:"namespace",inside:{punctuation:/::/}}],keyword:[/\b(?:Self|abstract|as|async|await|become|box|break|const|continue|crate|do|dyn|else|enum|extern|final|fn|for|if|impl|in|let|loop|macro|match|mod|move|mut|override|priv|pub|ref|return|self|static|struct|super|trait|try|type|typeof|union|unsafe|unsized|use|virtual|where|while|yield)\b/,/\b(?:bool|char|f(?:32|64)|[ui](?:8|16|32|64|128|size)|str)\b/],function:/\b[a-z_]\w*(?=\s*(?:::\s*<|\())/,macro:{pattern:/\b\w+!/,alias:"property"},constant:/\b[A-Z_][A-Z_\d]+\b/,"class-name":/\b[A-Z]\w*\b/,namespace:{pattern:/(?:\b[a-z][a-z_\d]*\s*::\s*)*\b[a-z][a-z_\d]*\s*::(?!\s*<)/,inside:{punctuation:/::/}},number:/\b(?:0x[\dA-Fa-f](?:_?[\dA-Fa-f])*|0o[0-7](?:_?[0-7])*|0b[01](?:_?[01])*|(?:(?:\d(?:_?\d)*)?\.)?\d(?:_?\d)*(?:[Ee][+-]?\d+)?)(?:_?(?:f32|f64|[iu](?:8|16|32|64|size)?))?\b/,boolean:/\b(?:false|true)\b/,punctuation:/->|\.\.=|\.{1,3}|::|[{}[\];(),:]/,operator:/[-+*\/%!^]=?|=[=>]?|&[&=]?|\|[|=]?|<<?=?|>>?=?|[@?]/},e.languages.rust["closure-params"].inside.rest=e.languages.rust,e.languages.rust.attribute.inside.string=e.languages.rust.string}(K),K.languages.go=K.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/}),K.languages.insertBefore("go","string",{char:{pattern:/'(?:\\.|[^'\\\r\n]){0,10}'/,greedy:!0}}),delete K.languages.go["class-name"],I=K,A=/\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 A.source}),I.languages.cpp=I.languages.extend("c",{"class-name":[{pattern:RegExp(/(\b(?:class|concept|enum|struct|typename)\s+)(?!<keyword>)\w+/.source.replace(/<keyword>/g,function(){return A.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:A,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/}),I.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}}),I.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:I.languages.cpp}}}}),I.languages.insertBefore("cpp","operator",{"double-colon":{pattern:/::/,alias:"punctuation"}}),I.languages.insertBefore("cpp","class-name",{"base-clause":{pattern:/(\b(?:class|struct)\s+\w+\s*:\s*)[^;{}"'\s]+(?:\s+[^;{}"'\s]+)*(?=\s*[;{])/,lookbehind:!0,greedy:!0,inside:I.languages.extend("cpp",{})}}),I.languages.insertBefore("inside","double-colon",{"class-name":/\b[a-z_]\w*\b(?!\s*::)/i},I.languages.cpp["base-clause"]),K.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:/[{}[\];(),.:]/},K.languages.python["string-interpolation"].inside.interpolation.inside.rest=K.languages.python,K.languages.py=K.languages.python;((e,t)=>{for(var n in t)F(e,n,{get:t[n],enumerable:!0})})({},{dracula:()=>X,duotoneDark:()=>J,duotoneLight:()=>ee,github:()=>et,jettwaveDark:()=>eS,jettwaveLight:()=>ex,nightOwl:()=>en,nightOwlLight:()=>er,oceanicNext:()=>eg,okaidia:()=>em,oneDark:()=>e_,oneLight:()=>eE,palenight:()=>eh,shadesOfPurple:()=>eb,synthwave84:()=>ey,ultramin:()=>ev,vsDark:()=>ew,vsLight:()=>ek});var X={plain:{color:"#F8F8F2",backgroundColor:"#282A36"},styles:[{types:["prolog","constant","builtin"],style:{color:"rgb(189, 147, 249)"}},{types:["inserted","function"],style:{color:"rgb(80, 250, 123)"}},{types:["deleted"],style:{color:"rgb(255, 85, 85)"}},{types:["changed"],style:{color:"rgb(255, 184, 108)"}},{types:["punctuation","symbol"],style:{color:"rgb(248, 248, 242)"}},{types:["string","char","tag","selector"],style:{color:"rgb(255, 121, 198)"}},{types:["keyword","variable"],style:{color:"rgb(189, 147, 249)",fontStyle:"italic"}},{types:["comment"],style:{color:"rgb(98, 114, 164)"}},{types:["attr-name"],style:{color:"rgb(241, 250, 140)"}}]},J={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"}}]},ee={plain:{backgroundColor:"#faf8f5",color:"#728fcb"},styles:[{types:["comment","prolog","doctype","cdata","punctuation"],style:{color:"#b6ad9a"}},{types:["namespace"],style:{opacity:.7}},{types:["tag","operator","number"],style:{color:"#063289"}},{types:["property","function"],style:{color:"#b29762"}},{types:["tag-id","selector","atrule-id"],style:{color:"#2d2006"}},{types:["attr-name"],style:{color:"#896724"}},{types:["boolean","string","entity","url","attr-value","keyword","control","directive","unit","statement","regex","atrule"],style:{color:"#728fcb"}},{types:["placeholder","variable"],style:{color:"#93abdc"}},{types:["deleted"],style:{textDecorationLine:"line-through"}},{types:["inserted"],style:{textDecorationLine:"underline"}},{types:["italic"],style:{fontStyle:"italic"}},{types:["important","bold"],style:{fontWeight:"bold"}},{types:["important"],style:{color:"#896724"}}]},et={plain:{color:"#393A34",backgroundColor:"#f6f8fa"},styles:[{types:["comment","prolog","doctype","cdata"],style:{color:"#999988",fontStyle:"italic"}},{types:["namespace"],style:{opacity:.7}},{types:["string","attr-value"],style:{color:"#e3116c"}},{types:["punctuation","operator"],style:{color:"#393A34"}},{types:["entity","url","symbol","number","boolean","variable","constant","property","regex","inserted"],style:{color:"#36acaa"}},{types:["atrule","keyword","attr-name","selector"],style:{color:"#00a4db"}},{types:["function","deleted","tag"],style:{color:"#d73a49"}},{types:["function-variable"],style:{color:"#6f42c1"}},{types:["tag","selector","keyword"],style:{color:"#00009f"}}]},en={plain:{color:"#d6deeb",backgroundColor:"#011627"},styles:[{types:["changed"],style:{color:"rgb(162, 191, 252)",fontStyle:"italic"}},{types:["deleted"],style:{color:"rgba(239, 83, 80, 0.56)",fontStyle:"italic"}},{types:["inserted","attr-name"],style:{color:"rgb(173, 219, 103)",fontStyle:"italic"}},{types:["comment"],style:{color:"rgb(99, 119, 119)",fontStyle:"italic"}},{types:["string","url"],style:{color:"rgb(173, 219, 103)"}},{types:["variable"],style:{color:"rgb(214, 222, 235)"}},{types:["number"],style:{color:"rgb(247, 140, 108)"}},{types:["builtin","char","constant","function"],style:{color:"rgb(130, 170, 255)"}},{types:["punctuation"],style:{color:"rgb(199, 146, 234)"}},{types:["selector","doctype"],style:{color:"rgb(199, 146, 234)",fontStyle:"italic"}},{types:["class-name"],style:{color:"rgb(255, 203, 139)"}},{types:["tag","operator","keyword"],style:{color:"rgb(127, 219, 202)"}},{types:["boolean"],style:{color:"rgb(255, 88, 116)"}},{types:["property"],style:{color:"rgb(128, 203, 196)"}},{types:["namespace"],style:{color:"rgb(178, 204, 214)"}}]},er={plain:{color:"#403f53",backgroundColor:"#FBFBFB"},styles:[{types:["changed"],style:{color:"rgb(162, 191, 252)",fontStyle:"italic"}},{types:["deleted"],style:{color:"rgba(239, 83, 80, 0.56)",fontStyle:"italic"}},{types:["inserted","attr-name"],style:{color:"rgb(72, 118, 214)",fontStyle:"italic"}},{types:["comment"],style:{color:"rgb(152, 159, 177)",fontStyle:"italic"}},{types:["string","builtin","char","constant","url"],style:{color:"rgb(72, 118, 214)"}},{types:["variable"],style:{color:"rgb(201, 103, 101)"}},{types:["number"],style:{color:"rgb(170, 9, 130)"}},{types:["punctuation"],style:{color:"rgb(153, 76, 195)"}},{types:["function","selector","doctype"],style:{color:"rgb(153, 76, 195)",fontStyle:"italic"}},{types:["class-name"],style:{color:"rgb(17, 17, 17)"}},{types:["tag"],style:{color:"rgb(153, 76, 195)"}},{types:["operator","property","keyword","namespace"],style:{color:"rgb(12, 150, 155)"}},{types:["boolean"],style:{color:"rgb(188, 84, 84)"}}]},eo="#D8DEE9",ea="#999999",ei="#c5a5c5",es="#5a9bcf",el="#8dc891",ec="#d7deea",eu="#ff8b50",ed="#fc929e",ep="#79b6f2",ef="#FAC863",eg={plain:{backgroundColor:"#282c34",color:"#ffffff"},styles:[{types:["attr-name"],style:{color:ei}},{types:["attr-value"],style:{color:el}},{types:["comment","block-comment","prolog","doctype","cdata","shebang"],style:{color:ea}},{types:["property","number","function-name","constant","symbol","deleted"],style:{color:es}},{types:["boolean"],style:{color:eu}},{types:["tag"],style:{color:ed}},{types:["string"],style:{color:el}},{types:["punctuation"],style:{color:el}},{types:["selector","char","builtin","inserted"],style:{color:eo}},{types:["function"],style:{color:ep}},{types:["operator","entity","url","variable"],style:{color:ec}},{types:["keyword"],style:{color:ei}},{types:["atrule","class-name"],style:{color:ef}},{types:["important"],style:{fontWeight:"400"}},{types:["bold"],style:{fontWeight:"bold"}},{types:["italic"],style:{fontStyle:"italic"}},{types:["namespace"],style:{opacity:.7}}]},em={plain:{color:"#f8f8f2",backgroundColor:"#272822"},styles:[{types:["changed"],style:{color:"rgb(162, 191, 252)",fontStyle:"italic"}},{types:["deleted"],style:{color:"#f92672",fontStyle:"italic"}},{types:["inserted"],style:{color:"rgb(173, 219, 103)",fontStyle:"italic"}},{types:["comment"],style:{color:"#8292a2",fontStyle:"italic"}},{types:["string","url"],style:{color:"#a6e22e"}},{types:["variable"],style:{color:"#f8f8f2"}},{types:["number"],style:{color:"#ae81ff"}},{types:["builtin","char","constant","function","class-name"],style:{color:"#e6db74"}},{types:["punctuation"],style:{color:"#f8f8f2"}},{types:["selector","doctype"],style:{color:"#a6e22e",fontStyle:"italic"}},{types:["tag","operator","keyword"],style:{color:"#66d9ef"}},{types:["boolean"],style:{color:"#ae81ff"}},{types:["namespace"],style:{color:"rgb(178, 204, 214)",opacity:.7}},{types:["tag","property"],style:{color:"#f92672"}},{types:["attr-name"],style:{color:"#a6e22e !important"}},{types:["doctype"],style:{color:"#8292a2"}},{types:["rule"],style:{color:"#e6db74"}}]},eh={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)"}}]},eb={plain:{color:"#9EFEFF",backgroundColor:"#2D2A55"},styles:[{types:["changed"],style:{color:"rgb(255, 238, 128)"}},{types:["deleted"],style:{color:"rgba(239, 83, 80, 0.56)"}},{types:["inserted"],style:{color:"rgb(173, 219, 103)"}},{types:["comment"],style:{color:"rgb(179, 98, 255)",fontStyle:"italic"}},{types:["punctuation"],style:{color:"rgb(255, 255, 255)"}},{types:["constant"],style:{color:"rgb(255, 98, 140)"}},{types:["string","url"],style:{color:"rgb(165, 255, 144)"}},{types:["variable"],style:{color:"rgb(255, 238, 128)"}},{types:["number","boolean"],style:{color:"rgb(255, 98, 140)"}},{types:["attr-name"],style:{color:"rgb(255, 180, 84)"}},{types:["keyword","operator","property","namespace","tag","selector","doctype"],style:{color:"rgb(255, 157, 0)"}},{types:["builtin","char","constant","function","class-name"],style:{color:"rgb(250, 208, 0)"}}]},ey={plain:{backgroundColor:"linear-gradient(to bottom, #2a2139 75%, #34294f)",backgroundImage:"#34294f",color:"#f92aad",textShadow:"0 0 2px #100c0f, 0 0 5px #dc078e33, 0 0 10px #fff3"},styles:[{types:["comment","block-comment","prolog","doctype","cdata"],style:{color:"#495495",fontStyle:"italic"}},{types:["punctuation"],style:{color:"#ccc"}},{types:["tag","attr-name","namespace","number","unit","hexcode","deleted"],style:{color:"#e2777a"}},{types:["property","selector"],style:{color:"#72f1b8",textShadow:"0 0 2px #100c0f, 0 0 10px #257c5575, 0 0 35px #21272475"}},{types:["function-name"],style:{color:"#6196cc"}},{types:["boolean","selector-id","function"],style:{color:"#fdfdfd",textShadow:"0 0 2px #001716, 0 0 3px #03edf975, 0 0 5px #03edf975, 0 0 8px #03edf975"}},{types:["class-name","maybe-class-name","builtin"],style:{color:"#fff5f6",textShadow:"0 0 2px #000, 0 0 10px #fc1f2c75, 0 0 5px #fc1f2c75, 0 0 25px #fc1f2c75"}},{types:["constant","symbol"],style:{color:"#f92aad",textShadow:"0 0 2px #100c0f, 0 0 5px #dc078e33, 0 0 10px #fff3"}},{types:["important","atrule","keyword","selector-class"],style:{color:"#f4eee4",textShadow:"0 0 2px #393a33, 0 0 8px #f39f0575, 0 0 2px #f39f0575"}},{types:["string","char","attr-value","regex","variable"],style:{color:"#f87c32"}},{types:["parameter"],style:{fontStyle:"italic"}},{types:["entity","url"],style:{color:"#67cdcc"}},{types:["operator"],style:{color:"ffffffee"}},{types:["important","bold"],style:{fontWeight:"bold"}},{types:["italic"],style:{fontStyle:"italic"}},{types:["entity"],style:{cursor:"help"}},{types:["inserted"],style:{color:"green"}}]},ev={plain:{color:"#282a2e",backgroundColor:"#ffffff"},styles:[{types:["comment"],style:{color:"rgb(197, 200, 198)"}},{types:["string","number","builtin","variable"],style:{color:"rgb(150, 152, 150)"}},{types:["class-name","function","tag","attr-name"],style:{color:"rgb(40, 42, 46)"}}]},ew={plain:{color:"#9CDCFE",backgroundColor:"#1E1E1E"},styles:[{types:["prolog"],style:{color:"rgb(0, 0, 128)"}},{types:["comment"],style:{color:"rgb(106, 153, 85)"}},{types:["builtin","changed","keyword","interpolation-punctuation"],style:{color:"rgb(86, 156, 214)"}},{types:["number","inserted"],style:{color:"rgb(181, 206, 168)"}},{types:["constant"],style:{color:"rgb(100, 102, 149)"}},{types:["attr-name","variable"],style:{color:"rgb(156, 220, 254)"}},{types:["deleted","string","attr-value","template-punctuation"],style:{color:"rgb(206, 145, 120)"}},{types:["selector"],style:{color:"rgb(215, 186, 125)"}},{types:["tag"],style:{color:"rgb(78, 201, 176)"}},{types:["tag"],languages:["markup"],style:{color:"rgb(86, 156, 214)"}},{types:["punctuation","operator"],style:{color:"rgb(212, 212, 212)"}},{types:["punctuation"],languages:["markup"],style:{color:"#808080"}},{types:["function"],style:{color:"rgb(220, 220, 170)"}},{types:["class-name"],style:{color:"rgb(78, 201, 176)"}},{types:["char"],style:{color:"rgb(209, 105, 105)"}}]},ek={plain:{color:"#000000",backgroundColor:"#ffffff"},styles:[{types:["comment"],style:{color:"rgb(0, 128, 0)"}},{types:["builtin"],style:{color:"rgb(0, 112, 193)"}},{types:["number","variable","inserted"],style:{color:"rgb(9, 134, 88)"}},{types:["operator"],style:{color:"rgb(0, 0, 0)"}},{types:["constant","char"],style:{color:"rgb(129, 31, 63)"}},{types:["tag"],style:{color:"rgb(128, 0, 0)"}},{types:["attr-name"],style:{color:"rgb(255, 0, 0)"}},{types:["deleted","string"],style:{color:"rgb(163, 21, 21)"}},{types:["changed","punctuation"],style:{color:"rgb(4, 81, 165)"}},{types:["function","keyword"],style:{color:"rgb(0, 0, 255)"}},{types:["class-name"],style:{color:"rgb(38, 127, 153)"}}]},eS={plain:{color:"#f8fafc",backgroundColor:"#011627"},styles:[{types:["prolog"],style:{color:"#000080"}},{types:["comment"],style:{color:"#6A9955"}},{types:["builtin","changed","keyword","interpolation-punctuation"],style:{color:"#569CD6"}},{types:["number","inserted"],style:{color:"#B5CEA8"}},{types:["constant"],style:{color:"#f8fafc"}},{types:["attr-name","variable"],style:{color:"#9CDCFE"}},{types:["deleted","string","attr-value","template-punctuation"],style:{color:"#cbd5e1"}},{types:["selector"],style:{color:"#D7BA7D"}},{types:["tag"],style:{color:"#0ea5e9"}},{types:["tag"],languages:["markup"],style:{color:"#0ea5e9"}},{types:["punctuation","operator"],style:{color:"#D4D4D4"}},{types:["punctuation"],languages:["markup"],style:{color:"#808080"}},{types:["function"],style:{color:"#7dd3fc"}},{types:["class-name"],style:{color:"#0ea5e9"}},{types:["char"],style:{color:"#D16969"}}]},ex={plain:{color:"#0f172a",backgroundColor:"#f1f5f9"},styles:[{types:["prolog"],style:{color:"#000080"}},{types:["comment"],style:{color:"#6A9955"}},{types:["builtin","changed","keyword","interpolation-punctuation"],style:{color:"#0c4a6e"}},{types:["number","inserted"],style:{color:"#B5CEA8"}},{types:["constant"],style:{color:"#0f172a"}},{types:["attr-name","variable"],style:{color:"#0c4a6e"}},{types:["deleted","string","attr-value","template-punctuation"],style:{color:"#64748b"}},{types:["selector"],style:{color:"#D7BA7D"}},{types:["tag"],style:{color:"#0ea5e9"}},{types:["tag"],languages:["markup"],style:{color:"#0ea5e9"}},{types:["punctuation","operator"],style:{color:"#475569"}},{types:["punctuation"],languages:["markup"],style:{color:"#808080"}},{types:["function"],style:{color:"#0e7490"}},{types:["class-name"],style:{color:"#0ea5e9"}},{types:["char"],style:{color:"#D16969"}}]},e_={plain:{backgroundColor:"hsl(220, 13%, 18%)",color:"hsl(220, 14%, 71%)",textShadow:"0 1px rgba(0, 0, 0, 0.3)"},styles:[{types:["comment","prolog","cdata"],style:{color:"hsl(220, 10%, 40%)"}},{types:["doctype","punctuation","entity"],style:{color:"hsl(220, 14%, 71%)"}},{types:["attr-name","class-name","maybe-class-name","boolean","constant","number","atrule"],style:{color:"hsl(29, 54%, 61%)"}},{types:["keyword"],style:{color:"hsl(286, 60%, 67%)"}},{types:["property","tag","symbol","deleted","important"],style:{color:"hsl(355, 65%, 65%)"}},{types:["selector","string","char","builtin","inserted","regex","attr-value"],style:{color:"hsl(95, 38%, 62%)"}},{types:["variable","operator","function"],style:{color:"hsl(207, 82%, 66%)"}},{types:["url"],style:{color:"hsl(187, 47%, 55%)"}},{types:["deleted"],style:{textDecorationLine:"line-through"}},{types:["inserted"],style:{textDecorationLine:"underline"}},{types:["italic"],style:{fontStyle:"italic"}},{types:["important","bold"],style:{fontWeight:"bold"}},{types:["important"],style:{color:"hsl(220, 14%, 71%)"}}]},eE={plain:{backgroundColor:"hsl(230, 1%, 98%)",color:"hsl(230, 8%, 24%)"},styles:[{types:["comment","prolog","cdata"],style:{color:"hsl(230, 4%, 64%)"}},{types:["doctype","punctuation","entity"],style:{color:"hsl(230, 8%, 24%)"}},{types:["attr-name","class-name","boolean","constant","number","atrule"],style:{color:"hsl(35, 99%, 36%)"}},{types:["keyword"],style:{color:"hsl(301, 63%, 40%)"}},{types:["property","tag","symbol","deleted","important"],style:{color:"hsl(5, 74%, 59%)"}},{types:["selector","string","char","builtin","inserted","regex","attr-value","punctuation"],style:{color:"hsl(119, 34%, 47%)"}},{types:["variable","operator","function"],style:{color:"hsl(221, 87%, 60%)"}},{types:["url"],style:{color:"hsl(198, 99%, 37%)"}},{types:["deleted"],style:{textDecorationLine:"line-through"}},{types:["inserted"],style:{textDecorationLine:"underline"}},{types:["italic"],style:{fontStyle:"italic"}},{types:["important","bold"],style:{fontWeight:"bold"}},{types:["important"],style:{color:"hsl(230, 8%, 24%)"}}]},eO=(e,t)=>{let{plain:n}=e,r=e.styles.reduce((e,n)=>{let{languages:r,style:o}=n;return r&&!r.includes(t)?e:(n.types.forEach(t=>{let n=W(W({},e[t]),o);e[t]=n}),e)},{});return r.root=n,r.plain=V(W({},n),{backgroundColor:void 0}),r},eP=(e,t)=>{let[n,r]=(0,L.useState)(eO(t,e)),o=(0,L.useRef)(),a=(0,L.useRef)();return(0,L.useEffect)(()=>{(t!==o.current||e!==a.current)&&(o.current=t,a.current=e,r(eO(t,e)))},[e,t]),n},ej=e=>(0,L.useCallback)(t=>{var{className:n,style:r,line:o}=t;let a=V(W({},G(t,["className","style","line"])),{className:R("token-line",n)});return"object"==typeof e&&"plain"in e&&(a.style=e.plain),"object"==typeof r&&(a.style=W(W({},a.style||{}),r)),a},[e]),eC=e=>{let t=(0,L.useCallback)(({types:t,empty:n})=>{if(null!=e){if(1===t.length&&"plain"===t[0])return null!=n?{display:"inline-block"}:void 0;if(1===t.length&&null!=n)return e[t[0]];return Object.assign(null!=n?{display:"inline-block"}:{},...t.map(t=>e[t]))}},[e]);return(0,L.useCallback)(e=>{var{token:n,className:r,style:o}=e;let a=V(W({},G(e,["token","className","style"])),{className:R("token",...n.types,r),children:n.content,style:t(n)});return null!=o&&(a.style=W(W({},a.style||{}),o)),a},[t])},eT=/\r\n|\r|\n/,eI=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)},eA=(e,t)=>{let n=e.length;return n>0&&e[n-1]===t?e:e.concat(t)},eN=e=>{let t=[[]],n=[e],r=[0],o=[e.length],a=0,i=0,s=[],l=[s];for(;i>-1;){for(;(a=r[i]++)<o[i];){let e;let c=t[i],u=n[i][a];if("string"==typeof u?(c=i>0?c:["plain"],e=u):(c=eA(c,u.type),u.alias&&(c=eA(c,u.alias)),e=u.content),"string"!=typeof e){i++,t.push(c),n.push(e),r.push(0),o.push(e.length);continue}let d=e.split(eT),p=d.length;s.push({types:c,content:d[0]});for(let e=1;e<p;e++)eI(s),l.push(s=[]),s.push({types:c,content:d[e]})}i--,t.pop(),n.pop(),r.pop(),o.pop()}return eI(s),l},eL=({prism:e,code:t,grammar:n,language:r})=>{let o=(0,L.useRef)(e);return(0,L.useMemo)(()=>{if(null==n)return eN([t]);let e={code:t,grammar:n,language:r,tokens:[]};return o.current.hooks.run("before-tokenize",e),e.tokens=o.current.tokenize(t,n),o.current.hooks.run("after-tokenize",e),eN(e.tokens)},[t,n,r])},eR=({children:e,language:t,code:n,theme:r,prism:o})=>{let a=t.toLowerCase(),i=eP(a,r),s=ej(i),l=eC(i),c=o.languages[a];return e({tokens:eL({prism:o,language:a,code:n,grammar:c}),className:`prism-code language-${a}`,style:null!=i?i.root:{},getLineProps:s,getTokenProps:l})},eD=e=>(0,L.createElement)(eR,V(W({},e),{prism:e.prism||K,theme:e.theme||ew,code:e.code,language:e.language}))},21835:function(e,t,n){"use strict";n.d(t,{Z:function(){return o}});var r="Invariant failed";function o(e,t){var n;if(!e)throw Error(r)}},28395:function(e,t,n){"use strict";n.r(t),n.d(t,{__addDisposableResource:function(){return L},__assign:function(){return a},__asyncDelegator:function(){return E},__asyncGenerator:function(){return _},__asyncValues:function(){return O},__await:function(){return x},__awaiter:function(){return g},__classPrivateFieldGet:function(){return I},__classPrivateFieldIn:function(){return N},__classPrivateFieldSet:function(){return A},__createBinding:function(){return h},__decorate:function(){return s},__disposeResources:function(){return D},__esDecorate:function(){return c},__exportStar:function(){return b},__extends:function(){return o},__generator:function(){return m},__importDefault:function(){return T},__importStar:function(){return C},__makeTemplateObject:function(){return P},__metadata:function(){return f},__param:function(){return l},__propKey:function(){return d},__read:function(){return v},__rest:function(){return i},__runInitializers:function(){return u},__setFunctionName:function(){return p},__spread:function(){return w},__spreadArray:function(){return S},__spreadArrays:function(){return k},__values:function(){return y},default:function(){return F}});var r=function(e,t){return(r=Object.setPrototypeOf||({__proto__:[]})instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])})(e,t)};function o(e,t){if("function"!=typeof t&&null!==t)throw TypeError("Class extends value "+String(t)+" is not a constructor or null");function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}var a=function(){return(a=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var o in t=arguments[n],t)Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e}).apply(this,arguments)};function i(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&0>t.indexOf(r)&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols)for(var o=0,r=Object.getOwnPropertySymbols(e);o<r.length;o++)0>t.indexOf(r[o])&&Object.prototype.propertyIsEnumerable.call(e,r[o])&&(n[r[o]]=e[r[o]]);return n}function s(e,t,n,r){var o,a=arguments.length,i=a<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,n):r;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)i=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(i=(a<3?o(i):a>3?o(t,n,i):o(t,n))||i);return a>3&&i&&Object.defineProperty(t,n,i),i}function l(e,t){return function(n,r){t(n,r,e)}}function c(e,t,n,r,o,a){function i(e){if(void 0!==e&&"function"!=typeof e)throw TypeError("Function expected");return e}for(var s=r.kind,l="getter"===s?"get":"setter"===s?"set":"value",c=!t&&e?r.static?e:e.prototype:null,u=t||(c?Object.getOwnPropertyDescriptor(c,r.name):{}),d,p=!1,f=n.length-1;f>=0;f--){var g={};for(var m in r)g[m]="access"===m?{}:r[m];for(var m in r.access)g.access[m]=r.access[m];g.addInitializer=function(e){if(p)throw TypeError("Cannot add initializers after decoration has completed");a.push(i(e||null))};var h=(0,n[f])("accessor"===s?{get:u.get,set:u.set}:u[l],g);if("accessor"===s){if(void 0===h)continue;if(null===h||"object"!=typeof h)throw TypeError("Object expected");(d=i(h.get))&&(u.get=d),(d=i(h.set))&&(u.set=d),(d=i(h.init))&&o.unshift(d)}else(d=i(h))&&("field"===s?o.unshift(d):u[l]=d)}c&&Object.defineProperty(c,r.name,u),p=!0}function u(e,t,n){for(var r=arguments.length>2,o=0;o<t.length;o++)n=r?t[o].call(e,n):t[o].call(e);return r?n:void 0}function d(e){return"symbol"==typeof e?e:"".concat(e)}function p(e,t,n){return"symbol"==typeof t&&(t=t.description?"[".concat(t.description,"]"):""),Object.defineProperty(e,"name",{configurable:!0,value:n?"".concat(n," ",t):t})}function f(e,t){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(e,t)}function g(e,t,n,r){return new(n||(n=Promise))(function(o,a){function i(e){try{l(r.next(e))}catch(e){a(e)}}function s(e){try{l(r.throw(e))}catch(e){a(e)}}function l(e){var t;e.done?o(e.value):((t=e.value)instanceof n?t:new n(function(e){e(t)})).then(i,s)}l((r=r.apply(e,t||[])).next())})}function m(e,t){var n,r,o,a,i={label:0,sent:function(){if(1&o[0])throw o[1];return o[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(l){return function(s){if(n)throw TypeError("Generator is already executing.");for(;a&&(a=0,s[0]&&(i=0)),i;)try{if(n=1,r&&(o=2&s[0]?r.return:s[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,s[1])).done)return o;switch(r=0,o&&(s=[2&s[0],o.value]),s[0]){case 0:case 1:o=s;break;case 4:return i.label++,{value:s[1],done:!1};case 5:i.label++,r=s[1],s=[0];continue;case 7:s=i.ops.pop(),i.trys.pop();continue;default:if(!(o=(o=i.trys).length>0&&o[o.length-1])&&(6===s[0]||2===s[0])){i=0;continue}if(3===s[0]&&(!o||s[1]>o[0]&&s[1]<o[3])){i.label=s[1];break}if(6===s[0]&&i.label<o[1]){i.label=o[1],o=s;break}if(o&&i.label<o[2]){i.label=o[2],i.ops.push(s);break}o[2]&&i.ops.pop(),i.trys.pop();continue}s=t.call(e,i)}catch(e){s=[6,e],r=0}finally{n=o=0}if(5&s[0])throw s[1];return{value:s[0]?s[1]:void 0,done:!0}}([s,l])}}}var h=Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);(!o||("get"in o?!t.__esModule:o.writable||o.configurable))&&(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]};function b(e,t){for(var n in e)"default"!==n&&!Object.prototype.hasOwnProperty.call(t,n)&&h(t,e,n)}function y(e){var t="function"==typeof Symbol&&Symbol.iterator,n=t&&e[t],r=0;if(n)return n.call(e);if(e&&"number"==typeof e.length)return{next:function(){return e&&r>=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}};throw TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")}function v(e,t){var n="function"==typeof Symbol&&e[Symbol.iterator];if(!n)return e;var r,o,a=n.call(e),i=[];try{for(;(void 0===t||t-- >0)&&!(r=a.next()).done;)i.push(r.value)}catch(e){o={error:e}}finally{try{r&&!r.done&&(n=a.return)&&n.call(a)}finally{if(o)throw o.error}}return i}function w(){for(var e=[],t=0;t<arguments.length;t++)e=e.concat(v(arguments[t]));return e}function k(){for(var e=0,t=0,n=arguments.length;t<n;t++)e+=arguments[t].length;for(var r=Array(e),o=0,t=0;t<n;t++)for(var a=arguments[t],i=0,s=a.length;i<s;i++,o++)r[o]=a[i];return r}function S(e,t,n){if(n||2==arguments.length)for(var r,o=0,a=t.length;o<a;o++)(r||!(o in t))&&(!r&&(r=Array.prototype.slice.call(t,0,o)),r[o]=t[o]);return e.concat(r||Array.prototype.slice.call(t))}function x(e){return this instanceof x?(this.v=e,this):new x(e)}function _(e,t,n){if(!Symbol.asyncIterator)throw TypeError("Symbol.asyncIterator is not defined.");var r,o=n.apply(e,t||[]),a=[];return r={},i("next"),i("throw"),i("return"),r[Symbol.asyncIterator]=function(){return this},r;function i(e){o[e]&&(r[e]=function(t){return new Promise(function(n,r){a.push([e,t,n,r])>1||s(e,t)})})}function s(e,t){try{(function(e){e.value instanceof x?Promise.resolve(e.value.v).then(l,c):u(a[0][2],e)})(o[e](t))}catch(e){u(a[0][3],e)}}function l(e){s("next",e)}function c(e){s("throw",e)}function u(e,t){e(t),a.shift(),a.length&&s(a[0][0],a[0][1])}}function E(e){var t,n;return t={},r("next"),r("throw",function(e){throw e}),r("return"),t[Symbol.iterator]=function(){return this},t;function r(r,o){t[r]=e[r]?function(t){return(n=!n)?{value:x(e[r](t)),done:!1}:o?o(t):t}:o}}function O(e){if(!Symbol.asyncIterator)throw TypeError("Symbol.asyncIterator is not defined.");var t,n=e[Symbol.asyncIterator];return n?n.call(e):(e=y(e),t={},r("next"),r("throw"),r("return"),t[Symbol.asyncIterator]=function(){return this},t);function r(n){t[n]=e[n]&&function(t){return new Promise(function(r,o){(function(e,t,n,r){Promise.resolve(r).then(function(t){e({value:t,done:n})},t)})(r,o,(t=e[n](t)).done,t.value)})}}}function P(e,t){return Object.defineProperty?Object.defineProperty(e,"raw",{value:t}):e.raw=t,e}var j=Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t};function C(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&h(t,e,n);return j(t,e),t}function T(e){return e&&e.__esModule?e:{default:e}}function I(e,t,n,r){if("a"===n&&!r)throw TypeError("Private accessor was defined without a getter");if("function"==typeof t?e!==t||!r:!t.has(e))throw TypeError("Cannot read private member from an object whose class did not declare it");return"m"===n?r:"a"===n?r.call(e):r?r.value:t.get(e)}function A(e,t,n,r,o){if("m"===r)throw TypeError("Private method is not writable");if("a"===r&&!o)throw TypeError("Private accessor was defined without a setter");if("function"==typeof t?e!==t||!o:!t.has(e))throw TypeError("Cannot write private member to an object whose class did not declare it");return"a"===r?o.call(e,n):o?o.value=n:t.set(e,n),n}function N(e,t){if(null===t||"object"!=typeof t&&"function"!=typeof t)throw TypeError("Cannot use 'in' operator on non-object");return"function"==typeof e?t===e:e.has(t)}function L(e,t,n){if(null!=t){var r;if("object"!=typeof t&&"function"!=typeof t)throw TypeError("Object expected.");if(n){if(!Symbol.asyncDispose)throw TypeError("Symbol.asyncDispose is not defined.");r=t[Symbol.asyncDispose]}if(void 0===r){if(!Symbol.dispose)throw TypeError("Symbol.dispose is not defined.");r=t[Symbol.dispose]}if("function"!=typeof r)throw TypeError("Object not disposable.");e.stack.push({value:t,dispose:r,async:n})}else n&&e.stack.push({async:!0});return t}var R="function"==typeof SuppressedError?SuppressedError:function(e,t,n){var r=Error(n);return r.name="SuppressedError",r.error=e,r.suppressed=t,r};function D(e){function t(t){e.error=e.hasError?new R(t,e.error,"An error was suppressed during disposal."):t,e.hasError=!0}return function n(){for(;e.stack.length;){var r=e.stack.pop();try{var o=r.dispose&&r.dispose.call(r.value);if(r.async)return Promise.resolve(o).then(n,function(e){return t(e),n()})}catch(e){t(e)}}if(e.hasError)throw e.error}()}let F={__extends:o,__assign:a,__rest:i,__decorate:s,__param:l,__metadata:f,__awaiter:g,__generator:m,__createBinding:h,__exportStar:b,__values:y,__read:v,__spread:w,__spreadArrays:k,__spreadArray:S,__await:x,__asyncGenerator:_,__asyncDelegator:E,__asyncValues:O,__makeTemplateObject:P,__importStar:C,__importDefault:T,__classPrivateFieldGet:I,__classPrivateFieldSet:A,__classPrivateFieldIn:N,__addDisposableResource:L,__disposeResources:D}},62627:function(e){"use strict";e.exports=JSON.parse('{"cmfcmf/d-s-l.searchBar.placeholder":"Search...","cmfcmf/d-s-l.searchBar.noResults":"No results found.","cmfcmf/d-s-l.searchBar.clearButtonTitle":"Clear","cmfcmf/d-s-l.searchBar.detachedCancelButtonText":"Cancel","cmfcmf/d-s-l.searchBar.submitButtonTitle":"Submit","edition.budgie.description":"A feature-rich, luxurious desktop using the most modern technologies.","edition.plasma.description":"A sophisticated desktop experience for the tinkerers. Simple by default, powerful when needed.","edition.gnome.description":"A simple, streamlined desktop for more modern hardware.","edition.mate.description":"A traditional desktop for advanced users and older hardware.","edition.xfce.description":"A lightweight desktop that aims to be fast while still being friendly.","edition.card.configuration":"Configuration","edition.card.tipsntricks":"Tips & Tricks","theme.ErrorPageContent.title":"This page crashed.","theme.NotFound.title":"Page Not Found","theme.NotFound.p1":"We could not find what you were looking for.","theme.NotFound.p2":"Please contact the owner of the site that linked you to the original URL and let them know their link is broken.","theme.admonition.note":"note","theme.admonition.tip":"tip","theme.admonition.danger":"danger","theme.admonition.info":"info","theme.admonition.caution":"caution","theme.BackToTopButton.buttonAriaLabel":"Scroll back to top","theme.blog.archive.title":"Archive","theme.blog.archive.description":"Archive","theme.blog.paginator.navAriaLabel":"Blog list page navigation","theme.blog.paginator.newerEntries":"Newer Entries","theme.blog.paginator.olderEntries":"Older Entries","theme.blog.post.paginator.navAriaLabel":"Blog post page navigation","theme.blog.post.paginator.newerPost":"Newer Post","theme.blog.post.paginator.olderPost":"Older Post","theme.blog.post.plurals":"One post|{count} posts","theme.blog.tagTitle":"{nPosts} tagged with \\"{tagName}\\"","theme.tags.tagsPageLink":"View All Tags","theme.colorToggle.ariaLabel":"Switch between dark and light mode (currently {mode})","theme.colorToggle.ariaLabel.mode.dark":"dark mode","theme.colorToggle.ariaLabel.mode.light":"light mode","theme.docs.breadcrumbs.navAriaLabel":"Breadcrumbs","theme.docs.DocCard.categoryDescription":"{count} items","theme.docs.paginator.navAriaLabel":"Docs pages","theme.docs.paginator.previous":"Previous","theme.docs.paginator.next":"Next","theme.docs.tagDocListPageTitle.nDocsTagged":"One doc tagged|{count} docs tagged","theme.docs.tagDocListPageTitle":"{nDocsTagged} with \\"{tagName}\\"","theme.docs.versionBadge.label":"Version: {versionLabel}","theme.docs.versions.unreleasedVersionLabel":"This is unreleased documentation for {siteTitle} {versionLabel} version.","theme.docs.versions.unmaintainedVersionLabel":"This is documentation for {siteTitle} {versionLabel}, which is no longer actively maintained.","theme.docs.versions.latestVersionSuggestionLabel":"For up-to-date documentation, see the {latestVersionLink} ({versionLabel}).","theme.docs.versions.latestVersionLinkLabel":"latest version","theme.common.editThisPage":"Edit this page","theme.common.headingLinkTitle":"Direct link to {heading}","theme.lastUpdated.atDate":" on {date}","theme.lastUpdated.byUser":" by {user}","theme.lastUpdated.lastUpdatedAtBy":"Last updated{atDate}{byUser}","theme.navbar.mobileVersionsDropdown.label":"Versions","theme.tags.tagsListLabel":"Tags:","theme.AnnouncementBar.closeButtonAriaLabel":"Close","theme.blog.sidebar.navAriaLabel":"Blog recent posts navigation","theme.CodeBlock.copied":"Copied","theme.CodeBlock.copyButtonAriaLabel":"Copy code to clipboard","theme.CodeBlock.copy":"Copy","theme.CodeBlock.wordWrapToggle":"Toggle word wrap","theme.DocSidebarItem.toggleCollapsedCategoryAriaLabel":"Toggle the collapsible sidebar category \'{label}\'","theme.NavBar.navAriaLabel":"Main","theme.navbar.mobileLanguageDropdown.label":"Languages","theme.TOCCollapsible.toggleButtonLabel":"On this page","theme.blog.post.readMore":"Read More","theme.blog.post.readMoreLabel":"Read more about {title}","theme.blog.post.readingTime.plurals":"One min read|{readingTime} min read","theme.docs.breadcrumbs.home":"Home page","theme.docs.sidebar.collapseButtonTitle":"Collapse sidebar","theme.docs.sidebar.collapseButtonAriaLabel":"Collapse sidebar","theme.docs.sidebar.navAriaLabel":"Docs sidebar","theme.docs.sidebar.closeSidebarButtonAriaLabel":"Close navigation bar","theme.navbar.mobileSidebarSecondaryMenu.backButtonLabel":"\u2190 Back to main menu","theme.docs.sidebar.toggleSidebarButtonAriaLabel":"Toggle navigation bar","theme.docs.sidebar.expandButtonTitle":"Expand sidebar","theme.docs.sidebar.expandButtonAriaLabel":"Expand sidebar","theme.IdealImageMessage.loading":"Loading...","theme.IdealImageMessage.load":"Click to load{sizeMessage}","theme.IdealImageMessage.offline":"Your browser is offline. Image not loaded","theme.IdealImageMessage.404error":"404. Image not found","theme.IdealImageMessage.error":"Error. Click to reload","theme.ErrorPageContent.tryAgain":"Try again","theme.common.skipToMainContent":"Skip to main content","theme.tags.tagsPageTitle":"Tags","edition.card.image":"Screenshot of {name} edition"}')},37138:function(e){"use strict";e.exports=JSON.parse('{"/blog-040":{"__comp":"a6aa9e1f","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"fe13418f"},{"content":"424f562c"},{"content":"ecdeb26c"},{"content":"418a6276"},{"content":"a52026b8"}],"__props":"c15d9823"},"/blog/archive-182":{"__comp":"9e4087bc","__context":{"plugin":"36994c47"},"__props":"f81c1134"},"/blog/authors-0b7":{"__comp":"621db11d","__context":{"data":{"blogMetadata":"acecf23e"},"plugin":"36994c47"},"sidebar":"814f3328","__props":"ef8b811a"},"/blog/authors/alfi-625":{"__comp":"33fc5bb8","__context":{"data":{"blogMetadata":"acecf23e"},"plugin":"36994c47"},"items":[{"content":"fe13418f"}],"sidebar":"814f3328","__props":"d2363c7a"},"/blog/authors/david-386":{"__comp":"33fc5bb8","__context":{"data":{"blogMetadata":"acecf23e"},"plugin":"36994c47"},"items":[{"content":"ecdeb26c"},{"content":"418a6276"}],"sidebar":"814f3328","__props":"f3d58343"},"/blog/authors/joey-979":{"__comp":"33fc5bb8","__context":{"data":{"blogMetadata":"acecf23e"},"plugin":"36994c47"},"items":[{"content":"424f562c"},{"content":"a52026b8"}],"sidebar":"814f3328","__props":"05767842"},"/blog/clean-clean-clean-6e9":{"__comp":"ccc49370","__context":{"data":{"blogMetadata":"acecf23e"},"plugin":"36994c47"},"sidebar":"814f3328","content":"a6c0fb2f"},"/blog/don\'t-call-me-mate-pal-4cd":{"__comp":"ccc49370","__context":{"data":{"blogMetadata":"acecf23e"},"plugin":"36994c47"},"sidebar":"814f3328","content":"4802fa93"},"/blog/eopkg-is-dead-long-live-eopkg-a0e":{"__comp":"ccc49370","__context":{"data":{"blogMetadata":"acecf23e"},"plugin":"36994c47"},"sidebar":"814f3328","content":"8d193990"},"/blog/solus-optimizing-packages-3c8":{"__comp":"ccc49370","__context":{"data":{"blogMetadata":"acecf23e"},"plugin":"36994c47"},"sidebar":"814f3328","content":"72054e31"},"/blog/tags-287":{"__comp":"01a85c17","__context":{"plugin":"36994c47"},"sidebar":"814f3328","__props":"3a2db09e"},"/blog/tags/3-2ba":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"424f562c"}],"__props":"1b835d51"},"/blog/tags/clang-7cb":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"424f562c"}],"__props":"2a9c4f4d"},"/blog/tags/cleanup-391":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"fe13418f"}],"__props":"d20919b7"},"/blog/tags/devlog-9e2":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"fe13418f"},{"content":"ecdeb26c"},{"content":"418a6276"},{"content":"a52026b8"}],"__props":"e4134e95"},"/blog/tags/eopkg-a41":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"418a6276"}],"__props":"7b0bdf40"},"/blog/tags/firstpost-c48":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"a52026b8"}],"__props":"f32bcb79"},"/blog/tags/glibc-1b5":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"424f562c"}],"__props":"920ec10a"},"/blog/tags/gnu-94b":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"424f562c"}],"__props":"4e87380c"},"/blog/tags/hello-d49":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"a52026b8"}],"__props":"f82cd581"},"/blog/tags/housekeeping-339":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"fe13418f"}],"__props":"da0423b8"},"/blog/tags/hwcaps-6d6":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"424f562c"}],"__props":"3a93f7ba"},"/blog/tags/llvm-aff":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"424f562c"}],"__props":"5efe994e"},"/blog/tags/lto-24f":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"424f562c"}],"__props":"0cfc9369"},"/blog/tags/mate-e08":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"ecdeb26c"}],"__props":"439d6d8d"},"/blog/tags/moss-e04":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"418a6276"}],"__props":"7c2abd66"},"/blog/tags/optimization-535":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"424f562c"}],"__props":"06758c2b"},"/blog/tags/packaging-07c":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"424f562c"}],"__props":"b6ca4f35"},"/blog/tags/pgo-a42":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"424f562c"}],"__props":"0b85ec06"},"/blog/tags/solus-601":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"fe13418f"},{"content":"424f562c"},{"content":"ecdeb26c"},{"content":"418a6276"},{"content":"a52026b8"}],"__props":"2a0f90eb"},"/blog/tags/x-86-64-v-3-716":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"424f562c"}],"__props":"9b400668"},"/blog/welcome-solus-devlog-v1-418":{"__comp":"ccc49370","__context":{"data":{"blogMetadata":"acecf23e"},"plugin":"36994c47"},"sidebar":"814f3328","content":"f35b91b6"},"/docs-1d8":{"__comp":"5e95c892","__context":{"plugin":"aba21aa0"}},"/docs-ad9":{"__comp":"a7bd4aaa","__props":"0058b4c6"},"/docs-38d":{"__comp":"a94703ab"},"/docs/category/advanced-configuration-21a":{"__comp":"14eb3368","__props":"3bd0a7e9"},"/docs/category/camera-eec":{"__comp":"14eb3368","__props":"c99ea947"},"/docs/category/compatibility-41d":{"__comp":"14eb3368","__props":"47b97f63"},"/docs/category/contributing-524":{"__comp":"14eb3368","__props":"6146d358"},"/docs/category/localization-976":{"__comp":"14eb3368","__props":"43d43a8f"},"/docs/category/mobile-8b8":{"__comp":"14eb3368","__props":"334da572"},"/docs/category/networking-2c7":{"__comp":"14eb3368","__props":"156eae2c"},"/docs/category/package-management-540":{"__comp":"14eb3368","__props":"27d71881"},"/docs/category/peripherals-b31":{"__comp":"14eb3368","__props":"d9c798e8"},"/docs/category/procedures-59d":{"__comp":"14eb3368","__props":"633d53d7"},"/docs/category/quick-start-16b":{"__comp":"14eb3368","__props":"da62f019"},"/docs/category/software-5c6":{"__comp":"14eb3368","__props":"33f669c7"},"/docs/category/utilities-7bd":{"__comp":"14eb3368","__props":"72f2f84e"},"/docs/category/virtualization-cd2":{"__comp":"14eb3368","__props":"62d70de2"},"/docs/category/web-f03":{"__comp":"14eb3368","__props":"ea6d9109"},"/docs/packaging/-45c":{"__comp":"17896441","content":"04b18502"},"/docs/packaging/advanced-config/eopkg-configuration-63b":{"__comp":"17896441","content":"dabd6b33"},"/docs/packaging/advanced-config/local-repository-e29":{"__comp":"17896441","content":"8490a22d"},"/docs/packaging/appstream-metainfo-296":{"__comp":"17896441","content":"7c1fb106"},"/docs/packaging/creating-a-new-package-365":{"__comp":"17896441","content":"c5de29d4"},"/docs/packaging/git-basics-c75":{"__comp":"17896441","content":"5b7f3753"},"/docs/packaging/monitoring.yml-cf6":{"__comp":"17896441","content":"080a8349"},"/docs/packaging/package.yml-47f":{"__comp":"17896441","content":"3ff05326"},"/docs/packaging/packaging-changes-983":{"__comp":"17896441","content":"c55c138b"},"/docs/packaging/packaging-practices-f17":{"__comp":"17896441","content":"49b71c16"},"/docs/packaging/prepare-for-packaging-d33":{"__comp":"17896441","content":"513b6405"},"/docs/packaging/procedures/maintainership-efa":{"__comp":"17896441","content":"61c953b4"},"/docs/packaging/procedures/package-inclusion-e6e":{"__comp":"17896441","content":"cca891e2"},"/docs/packaging/procedures/release-processes-cd4":{"__comp":"17896441","content":"d0d2faf6"},"/docs/packaging/procedures/request-a-package-088":{"__comp":"17896441","content":"8e861970"},"/docs/packaging/procedures/request-a-package-update-98c":{"__comp":"17896441","content":"97c623e4"},"/docs/packaging/stack-rebuilds-6dc":{"__comp":"17896441","content":"ad205e99"},"/docs/packaging/submitting-a-pull-request-900":{"__comp":"17896441","content":"26308ea3"},"/docs/packaging/testing-a-package-8d0":{"__comp":"17896441","content":"45e9d313"},"/docs/packaging/translation-instructions-8ed":{"__comp":"17896441","content":"ce4855c1"},"/docs/packaging/troubleshooting-packaging-031":{"__comp":"17896441","content":"7071adf5"},"/docs/packaging/update-dev-environment-d79":{"__comp":"17896441","content":"be79d003"},"/docs/packaging/updating-an-existing-package-3f6":{"__comp":"17896441","content":"0b254e3a"},"/docs/packaging/your-first-package-update-97e":{"__comp":"17896441","content":"d00f7e62"},"/docs/user/contributing/community-guidelines-4a0":{"__comp":"17896441","content":"5f194406"},"/docs/user/contributing/getting-involved-7b3":{"__comp":"17896441","content":"7a24477a"},"/docs/user/contributing/style-210":{"__comp":"17896441","content":"6873f895"},"/docs/user/contributing/testing-an-iso-6e0":{"__comp":"17896441","content":"0e862883"},"/docs/user/editions/-f3f":{"__comp":"17896441","content":"1a698c37"},"/docs/user/editions/budgie/-17a":{"__comp":"17896441","content":"f4aa4739"},"/docs/user/editions/budgie/configuration-271":{"__comp":"17896441","content":"c9c1a3f4"},"/docs/user/editions/budgie/tips-and-tricks-699":{"__comp":"17896441","content":"a05bfad9"},"/docs/user/editions/gnome/-91d":{"__comp":"17896441","content":"fb8d634e"},"/docs/user/editions/gnome/configuration-e73":{"__comp":"17896441","content":"fb6dc457"},"/docs/user/editions/gnome/tips-and-tricks-0d4":{"__comp":"17896441","content":"b4302412"},"/docs/user/editions/mate/-9d7":{"__comp":"17896441","content":"2b61a93c"},"/docs/user/editions/mate/configuration-e10":{"__comp":"17896441","content":"2598a3a5"},"/docs/user/editions/mate/tips-and-tricks-883":{"__comp":"17896441","content":"f1d13e1b"},"/docs/user/editions/plasma/-e2b":{"__comp":"17896441","content":"0e3c5e6b"},"/docs/user/editions/plasma/configuration-09d":{"__comp":"17896441","content":"cec10a63"},"/docs/user/editions/plasma/tips-and-tricks-165":{"__comp":"17896441","content":"2a37c7d8"},"/docs/user/editions/xfce/-59c":{"__comp":"17896441","content":"ab89b7a6"},"/docs/user/editions/xfce/configuration-98e":{"__comp":"17896441","content":"5685b4d8"},"/docs/user/editions/xfce/tips-and-tricks-acf":{"__comp":"17896441","content":"75c41d11"},"/docs/user/hardware/-92e":{"__comp":"17896441","content":"99bedda9"},"/docs/user/hardware/compatibility/laptops-b49":{"__comp":"17896441","content":"be4ac66b"},"/docs/user/hardware/compatibility/wifi-d8c":{"__comp":"17896441","content":"9485dea6"},"/docs/user/hardware/mobile/android-0fc":{"__comp":"17896441","content":"ec4e4367"},"/docs/user/hardware/mobile/apple-ed6":{"__comp":"17896441","content":"a398ef57"},"/docs/user/hardware/peripherals/mice-and-touchpads-cba":{"__comp":"17896441","content":"96af6484"},"/docs/user/hardware/peripherals/midi-keyboard-4b2":{"__comp":"17896441","content":"f6faa2b4"},"/docs/user/hardware/peripherals/printers-and-scanners-c19":{"__comp":"17896441","content":"38920c38"},"/docs/user/intro-b98":{"__comp":"17896441","content":"6787574e"},"/docs/user/package-management/basics-fd4":{"__comp":"17896441","content":"3fdfc7ff"},"/docs/user/package-management/history-and-rollback-316":{"__comp":"17896441","content":"1ae709a2"},"/docs/user/package-management/repo-management-36a":{"__comp":"17896441","content":"46a65d96"},"/docs/user/privacy-813":{"__comp":"17896441","content":"08bef15d"},"/docs/user/quick-start/boot-management-142":{"__comp":"17896441","content":"e5595530"},"/docs/user/quick-start/default-applications-082":{"__comp":"17896441","content":"14488e92"},"/docs/user/quick-start/installation/-ec6":{"__comp":"17896441","content":"533eefa9"},"/docs/user/quick-start/installation/disks-c6d":{"__comp":"17896441","content":"2c3e84bd"},"/docs/user/quick-start/installation/secure-boot-73f":{"__comp":"17896441","content":"f4c9601b"},"/docs/user/quick-start/installation/system-requirements-a3b":{"__comp":"17896441","content":"2a34ce22"},"/docs/user/quick-start/software-center/-988":{"__comp":"17896441","content":"ed2a5927"},"/docs/user/software/camera/droidcam-851":{"__comp":"17896441","content":"baa66232"},"/docs/user/software/command-line/-0d6":{"__comp":"17896441","content":"793c86b2"},"/docs/user/software/configuration_files-5ee":{"__comp":"17896441","content":"eb074ba1"},"/docs/user/software/desktops/-bee":{"__comp":"17896441","content":"21944812"},"/docs/user/software/development/-a16":{"__comp":"17896441","content":"64699048"},"/docs/user/software/development/containers-ce1":{"__comp":"17896441","content":"257b9082"},"/docs/user/software/development/java-82c":{"__comp":"17896441","content":"baf1b6e8"},"/docs/user/software/development/postgresql-386":{"__comp":"17896441","content":"f8dd8223"},"/docs/user/software/development/r-and-rstudio-4fe":{"__comp":"17896441","content":"fc733b73"},"/docs/user/software/development/rust-6ad":{"__comp":"17896441","content":"8e886580"},"/docs/user/software/development/web-854":{"__comp":"17896441","content":"947d9ca4"},"/docs/user/software/gaming/-344":{"__comp":"17896441","content":"9284d474"},"/docs/user/software/localization/ibus-f55":{"__comp":"17896441","content":"8e3d5b32"},"/docs/user/software/networking/samba-6fe":{"__comp":"17896441","content":"2609550e"},"/docs/user/software/networking/tigervnc-a10":{"__comp":"17896441","content":"6cfe09a0"},"/docs/user/software/networking/wireshark-66a":{"__comp":"17896441","content":"7e4100d6"},"/docs/user/software/networking/xrdp-c71":{"__comp":"17896441","content":"a9e19215"},"/docs/user/software/sound/-501":{"__comp":"17896441","content":"ddc41e4a"},"/docs/user/software/third-party/-1a1":{"__comp":"17896441","content":"41a4de91"},"/docs/user/software/third-party/snap-037":{"__comp":"17896441","content":"e083e94b"},"/docs/user/software/utilities/ksysguard-02b":{"__comp":"17896441","content":"528b6a6b"},"/docs/user/software/utilities/kwallet-1c7":{"__comp":"17896441","content":"88a83a8c"},"/docs/user/software/virtualization/virtualbox-df4":{"__comp":"17896441","content":"74470af4"},"/docs/user/software/web/obs-10f":{"__comp":"17896441","content":"f0629c21"},"/docs/user/troubleshooting/-d20":{"__comp":"17896441","content":"2b4abe09"},"/docs/user/troubleshooting/boot-rescue-248":{"__comp":"17896441","content":"09dbd43b"},"/docs/user/troubleshooting/installation-0b0":{"__comp":"17896441","content":"d4762887"},"/docs/user/troubleshooting/plasma-fa2":{"__comp":"17896441","content":"d5670106"},"/-e5f":{"__comp":"1df93b7f","__context":{"plugin":"a7456010"},"config":"5e9f5e1a"}}')}},function(e){e.O(0,["6212"],function(){return e(e.s="5908")}),e.O()}]); \ No newline at end of file diff --git a/assets/js/runtime~main.26383928.js b/assets/js/runtime~main.26383928.js deleted file mode 100644 index 780f6c6ff..000000000 --- a/assets/js/runtime~main.26383928.js +++ /dev/null @@ -1 +0,0 @@ -(()=>{"use strict";var e,a,b,c,d,f={},t={};function r(e){var a=t[e];if(void 0!==a)return a.exports;var b=t[e]={exports:{}};return f[e].call(b.exports,b,b.exports,r),b.exports}r.m=f,e=[],r.O=(a,b,c,d)=>{if(!b){var f=1/0;for(i=0;i<e.length;i++){b=e[i][0],c=e[i][1],d=e[i][2];for(var t=!0,o=0;o<b.length;o++)(!1&d||f>=d)&&Object.keys(r.O).every((e=>r.O[e](b[o])))?b.splice(o--,1):(t=!1,d<f&&(f=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]=[b,c,d]},r.n=e=>{var a=e&&e.__esModule?()=>e.default:()=>e;return r.d(a,{a:a}),a},b=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 f={};a=a||[null,b({}),b([]),b(b)];for(var t=2&c&&e;"object"==typeof t&&!~a.indexOf(t);t=b(t))Object.getOwnPropertyNames(t).forEach((a=>f[a]=()=>e[a]));return f.default=()=>e,r.d(d,f),d},r.d=(e,a)=>{for(var b in a)r.o(a,b)&&!r.o(e,b)&&Object.defineProperty(e,b,{enumerable:!0,get:a[b]})},r.f={},r.e=e=>Promise.all(Object.keys(r.f).reduce(((a,b)=>(r.f[b](e,a),a)),[])),r.u=e=>"assets/js/"+({29:"7b0bdf40",168:"793c86b2",172:"0e862883",224:"080a8349",247:"3bd0a7e9",255:"d00f7e62",333:"a9e19215",355:"1ae709a2",425:"633d53d7",532:"1b835d51",586:"7c2abd66",794:"72f2f84e",807:"d9c798e8",812:"ea6d9109",818:"62d70de2",834:"47b97f63",885:"a05bfad9",984:"baa66232",999:"fb8d634e",1059:"dabd6b33",1073:"06758c2b",1174:"6cfe09a0",1182:"fe13418f",1242:"88a83a8c",1539:"8d193990",1540:"5685b4d8",1598:"5efe994e",1606:"05767842",1617:"ad205e99",1648:"e5595530",1774:"4802fa93",1821:"da62f019",1896:"74470af4",1942:"04b18502",1944:"947d9ca4",1950:"d5670106",1971:"ecdeb26c",2081:"b4302412",2151:"64699048",2358:"9485dea6",2413:"2b4abe09",2535:"814f3328",2585:"4e87380c",2586:"a398ef57",2595:"f4c9601b",2627:"d20919b7",2644:"ef8b811a",2741:"d2363c7a",2775:"3ff05326",2817:"2a0f90eb",3056:"e083e94b",3089:"a6aa9e1f",3090:"da0423b8",3122:"424f562c",3192:"257b9082",3206:"2609550e",3237:"1df93b7f",3337:"75c41d11",3375:"f0629c21",3398:"0b85ec06",3440:"ce4855c1",3608:"9e4087bc",3624:"d4762887",3629:"aba21aa0",3705:"eb074ba1",3783:"49b71c16",3851:"c5de29d4",3940:"621db11d",4002:"533eefa9",4013:"01a85c17",4031:"f81c1134",4088:"0058b4c6",4278:"513b6405",4368:"a94703ab",4374:"439d6d8d",4500:"6787574e",4507:"d0d2faf6",4529:"ec4e4367",4560:"ed2a5927",4605:"7c1fb106",4608:"3fdfc7ff",4725:"920ec10a",4796:"7071adf5",4815:"14488e92",4859:"0e3c5e6b",4869:"be4ac66b",4978:"8e886580",5462:"f1d13e1b",5481:"38920c38",5482:"fb6dc457",5575:"ab89b7a6",5854:"33f669c7",5900:"334da572",5951:"2598a3a5",5980:"a7456010",6012:"be79d003",6025:"0cfc9369",6042:"fc733b73",6074:"2a34ce22",6103:"ccc49370",6114:"45e9d313",6121:"c9c1a3f4",6126:"1a698c37",6160:"418a6276",6225:"96af6484",6335:"a6c0fb2f",6413:"5b7f3753",6427:"97c623e4",6485:"26308ea3",6515:"f32bcb79",6642:"c15d9823",6726:"0b254e3a",6990:"7e4100d6",7018:"c99ea947",7135:"72054e31",7212:"f8dd8223",7228:"08bef15d",7393:"acecf23e",7422:"3a93f7ba",7465:"c55c138b",7577:"27d71881",7607:"5f194406",7626:"9284d474",7670:"9b400668",7682:"41a4de91",7798:"6146d358",7822:"528b6a6b",7862:"a52026b8",7918:"17896441",8026:"8e861970",8032:"61c953b4",8092:"46a65d96",8143:"f6faa2b4",8157:"2c3e84bd",8355:"33fc5bb8",8422:"cec10a63",8499:"8e3d5b32",8518:"a7bd4aaa",8575:"8490a22d",8610:"6875c492",8621:"e4134e95",8626:"f82cd581",8639:"99bedda9",8692:"156eae2c",8812:"f3d58343",8849:"6873f895",9135:"7a24477a",9156:"43d43a8f",9170:"f4aa4739",9208:"36994c47",9214:"b6ca4f35",9361:"3a2db09e",9397:"09dbd43b",9451:"ddc41e4a",9474:"2a9c4f4d",9661:"5e95c892",9677:"baf1b6e8",9749:"f35b91b6",9773:"cca891e2",9817:"14eb3368",9873:"21944812",9897:"2b61a93c",9995:"2a37c7d8"}[e]||e)+"."+{29:"702b25a1",168:"06954f0a",172:"f9142d94",224:"c3ed1278",247:"b12fda7c",255:"20392454",333:"59ba6bf2",355:"e38f79ec",425:"9280c3c1",532:"f45078d9",586:"1c99e3a1",794:"3511f922",807:"7a81ce36",812:"f94baf95",818:"11c6a7b7",834:"dbbcd3f9",885:"c2946a01",984:"bf45c7ea",999:"bd00f4ee",1059:"ca399a8f",1073:"4c9f371f",1174:"82bdd5bd",1182:"ea789d98",1242:"9ab002a9",1539:"e1e40f22",1540:"fffedb97",1598:"eb5044e0",1606:"2aaac066",1617:"4667a45a",1648:"3c3b46b7",1774:"68b985c8",1821:"3506ee34",1896:"017d0ea6",1942:"237889a0",1944:"734cbf9e",1950:"484a3fb0",1971:"df2e94ce",2081:"365f4a53",2151:"80dc9cf5",2358:"14b20627",2413:"3b9f5715",2535:"6bedb449",2585:"a121e477",2586:"1f7e170d",2595:"688d28e5",2627:"02c2f2df",2644:"5c57c19d",2741:"3ca2df4f",2775:"4e90b0e4",2817:"493adcbc",3056:"f1de6fb8",3089:"4c879bac",3090:"d2dff3fd",3122:"af0382ed",3192:"7d6673cb",3206:"ee6a6ea4",3237:"af2b12f5",3323:"3aa8447b",3337:"97b0873a",3375:"220ef5fc",3398:"4722941f",3440:"6a665116",3608:"ae5a1aa1",3624:"462d875b",3629:"0e4979fa",3705:"42ac8859",3783:"eabd15cf",3851:"159ae9df",3940:"e79b5237",4002:"b522d5bf",4013:"47c6c1ba",4031:"ac31f1df",4088:"5b9529fc",4278:"64a20a0d",4368:"092bd870",4374:"c4a508f4",4500:"ccc44262",4507:"f0f9583d",4529:"b33b2a81",4560:"f68db7ff",4605:"e67f5672",4608:"ec6f3b7c",4725:"ba0a929e",4796:"47fc74c7",4815:"3f3176d3",4859:"6d3db483",4869:"a5924dbe",4978:"32f66441",5462:"736a2c39",5481:"b46b6d2c",5482:"58cf99c8",5575:"db136f45",5854:"8f15dd3d",5900:"80ca41d4",5951:"6ed95506",5966:"bb6949e9",5980:"3f4d399e",6012:"f1a4d102",6025:"b63787ba",6042:"f541a162",6074:"174c770a",6103:"903a1abc",6114:"a04ba549",6121:"92bf0225",6126:"7fce42ce",6160:"42385bff",6225:"878ddd89",6335:"5ab50382",6413:"8147221e",6427:"9f56cce7",6485:"adc66a12",6515:"c99ad29c",6614:"fed91556",6642:"bd5c9de5",6726:"1f9c4124",6937:"dcb23d21",6990:"ac132a79",7018:"e547d0e0",7135:"855d44cc",7212:"22ff61c6",7228:"856e2b7d",7393:"c3c14ed7",7422:"9dba08d8",7465:"d270ff03",7577:"f7c66090",7607:"500d2564",7626:"2fb1c458",7670:"6f6321d9",7682:"cff75d56",7734:"0f69c48a",7798:"6a1e8ad3",7822:"f7c0a1da",7862:"d25a67cc",7918:"33637281",8026:"23584379",8032:"7b785f4a",8092:"32f1bce3",8143:"d52872e4",8157:"55228a2e",8355:"5866e2e2",8422:"c49b4863",8499:"fae5b38f",8518:"cf59d69a",8575:"bf17f908",8610:"b58fb002",8621:"e4a2ef15",8626:"a3280881",8639:"7d99703c",8692:"2c19d67a",8812:"c90fcc92",8849:"b8b4b2c1",8917:"d2a12266",9135:"fafb3313",9156:"4eecf98a",9170:"af7c7acb",9208:"55d3f56c",9214:"2eb370e8",9361:"844e4be4",9397:"0c8820f5",9451:"f4d67b46",9474:"20c74296",9661:"0f0e0eb4",9677:"62f87ab0",9749:"239937fe",9773:"a56180c1",9817:"e474746e",9873:"d04e0cac",9897:"852b4fa1",9995:"f8ac206e"}[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={},d="solus-help-center:",r.l=(e,a,b,f)=>{if(c[e])c[e].push(a);else{var t,o;if(void 0!==b)for(var n=document.getElementsByTagName("script"),i=0;i<n.length;i++){var u=n[i];if(u.getAttribute("src")==e||u.getAttribute("data-webpack")==d+b){t=u;break}}t||(o=!0,(t=document.createElement("script")).charset="utf-8",t.timeout=120,r.nc&&t.setAttribute("nonce",r.nc),t.setAttribute("data-webpack",d+b),t.src=e),c[e]=[a];var l=(a,b)=>{t.onerror=t.onload=null,clearTimeout(s);var d=c[e];if(delete c[e],t.parentNode&&t.parentNode.removeChild(t),d&&d.forEach((e=>e(b))),a)return a(b)},s=setTimeout(l.bind(null,void 0,{type:"timeout",target:t}),12e4);t.onerror=l.bind(null,t.onerror),t.onload=l.bind(null,t.onload),o&&document.head.appendChild(t)}},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",21944812:"9873",64699048:"2151","7b0bdf40":"29","793c86b2":"168","0e862883":"172","080a8349":"224","3bd0a7e9":"247",d00f7e62:"255",a9e19215:"333","1ae709a2":"355","633d53d7":"425","1b835d51":"532","7c2abd66":"586","72f2f84e":"794",d9c798e8:"807",ea6d9109:"812","62d70de2":"818","47b97f63":"834",a05bfad9:"885",baa66232:"984",fb8d634e:"999",dabd6b33:"1059","06758c2b":"1073","6cfe09a0":"1174",fe13418f:"1182","88a83a8c":"1242","8d193990":"1539","5685b4d8":"1540","5efe994e":"1598","05767842":"1606",ad205e99:"1617",e5595530:"1648","4802fa93":"1774",da62f019:"1821","74470af4":"1896","04b18502":"1942","947d9ca4":"1944",d5670106:"1950",ecdeb26c:"1971",b4302412:"2081","9485dea6":"2358","2b4abe09":"2413","814f3328":"2535","4e87380c":"2585",a398ef57:"2586",f4c9601b:"2595",d20919b7:"2627",ef8b811a:"2644",d2363c7a:"2741","3ff05326":"2775","2a0f90eb":"2817",e083e94b:"3056",a6aa9e1f:"3089",da0423b8:"3090","424f562c":"3122","257b9082":"3192","2609550e":"3206","1df93b7f":"3237","75c41d11":"3337",f0629c21:"3375","0b85ec06":"3398",ce4855c1:"3440","9e4087bc":"3608",d4762887:"3624",aba21aa0:"3629",eb074ba1:"3705","49b71c16":"3783",c5de29d4:"3851","621db11d":"3940","533eefa9":"4002","01a85c17":"4013",f81c1134:"4031","0058b4c6":"4088","513b6405":"4278",a94703ab:"4368","439d6d8d":"4374","6787574e":"4500",d0d2faf6:"4507",ec4e4367:"4529",ed2a5927:"4560","7c1fb106":"4605","3fdfc7ff":"4608","920ec10a":"4725","7071adf5":"4796","14488e92":"4815","0e3c5e6b":"4859",be4ac66b:"4869","8e886580":"4978",f1d13e1b:"5462","38920c38":"5481",fb6dc457:"5482",ab89b7a6:"5575","33f669c7":"5854","334da572":"5900","2598a3a5":"5951",a7456010:"5980",be79d003:"6012","0cfc9369":"6025",fc733b73:"6042","2a34ce22":"6074",ccc49370:"6103","45e9d313":"6114",c9c1a3f4:"6121","1a698c37":"6126","418a6276":"6160","96af6484":"6225",a6c0fb2f:"6335","5b7f3753":"6413","97c623e4":"6427","26308ea3":"6485",f32bcb79:"6515",c15d9823:"6642","0b254e3a":"6726","7e4100d6":"6990",c99ea947:"7018","72054e31":"7135",f8dd8223:"7212","08bef15d":"7228",acecf23e:"7393","3a93f7ba":"7422",c55c138b:"7465","27d71881":"7577","5f194406":"7607","9284d474":"7626","9b400668":"7670","41a4de91":"7682","6146d358":"7798","528b6a6b":"7822",a52026b8:"7862","8e861970":"8026","61c953b4":"8032","46a65d96":"8092",f6faa2b4:"8143","2c3e84bd":"8157","33fc5bb8":"8355",cec10a63:"8422","8e3d5b32":"8499",a7bd4aaa:"8518","8490a22d":"8575","6875c492":"8610",e4134e95:"8621",f82cd581:"8626","99bedda9":"8639","156eae2c":"8692",f3d58343:"8812","6873f895":"8849","7a24477a":"9135","43d43a8f":"9156",f4aa4739:"9170","36994c47":"9208",b6ca4f35:"9214","3a2db09e":"9361","09dbd43b":"9397",ddc41e4a:"9451","2a9c4f4d":"9474","5e95c892":"9661",baf1b6e8:"9677",f35b91b6:"9749",cca891e2:"9773","14eb3368":"9817","2b61a93c":"9897","2a37c7d8":"9995"}[e]||e,r.p+r.u(e)},(()=>{var e={1303:0,3312:0};r.f.j=(a,b)=>{var c=r.o(e,a)?e[a]:void 0;if(0!==c)if(c)b.push(c[2]);else if(/^(1303|3312)$/.test(a))e[a]=0;else{var d=new Promise(((b,d)=>c=e[a]=[b,d]));b.push(c[2]=d);var f=r.p+r.u(a),t=new Error;r.l(f,(b=>{if(r.o(e,a)&&(0!==(c=e[a])&&(e[a]=void 0),c)){var d=b&&("load"===b.type?"missing":b.type),f=b&&b.target&&b.target.src;t.message="Loading chunk "+a+" failed.\n("+d+": "+f+")",t.name="ChunkLoadError",t.type=d,t.request=f,c[1](t)}}),"chunk-"+a,a)}},r.O.j=a=>0===e[a];var a=(a,b)=>{var c,d,f=b[0],t=b[1],o=b[2],n=0;if(f.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(b);n<f.length;n++)d=f[n],r.o(e,d)&&e[d]&&e[d][0](),e[d]=0;return r.O(i)},b=self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[];b.forEach(a.bind(null,0)),b.push=a.bind(null,b.push.bind(b))})()})(); \ No newline at end of file diff --git a/assets/js/runtime~main.e2e30706.js b/assets/js/runtime~main.e2e30706.js new file mode 100644 index 000000000..d7323c4a5 --- /dev/null +++ b/assets/js/runtime~main.e2e30706.js @@ -0,0 +1 @@ +(()=>{"use strict";var e,a,c,d,f,b,t,r,n={},o={};function u(e){var a=o[e];if(void 0!==a)return a.exports;var c=o[e]={id:e,loaded:!1,exports:{}};return n[e].call(c.exports,c,c.exports,u),c.loaded=!0,c.exports}u.m=n,u.n=function(e){var a=e&&e.__esModule?function(){return e.default}:function(){return e};return u.d(a,{a:a}),a},a=Object.getPrototypeOf?function(e){return Object.getPrototypeOf(e)}:function(e){return e.__proto__},u.t=function(c,d){if(1&d&&(c=this(c)),8&d||"object"==typeof c&&c&&(4&d&&c.__esModule||16&d&&"function"==typeof c.then))return c;var f=Object.create(null);u.r(f);var b={};e=e||[null,a({}),a([]),a(a)];for(var t=2&d&&c;"object"==typeof t&&!~e.indexOf(t);t=a(t))Object.getOwnPropertyNames(t).forEach(function(e){b[e]=function(){return c[e]}});return b.default=function(){return c},u.d(f,b),f},u.d=function(e,a){for(var c in a)u.o(a,c)&&!u.o(e,c)&&Object.defineProperty(e,c,{enumerable:!0,get:a[c]})},u.f={},u.e=function(e){return Promise.all(Object.keys(u.f).reduce(function(a,c){return u.f[c](e,a),a},[]))},u.hmd=function(e){return!(e=Object.create(e)).children&&(e.children=[]),Object.defineProperty(e,"exports",{enumerable:!0,set:function(){throw Error("ES Modules may not assign module.exports or exports.*, Use ESM export syntax, instead: "+e.id)}}),e},u.u=function(e){return"assets/js/"+(({106:"814f3328",1125:"0e862883",1157:"5b7f3753",1265:"d5670106",1318:"793c86b2",1371:"05767842",1402:"f82cd581",1418:"a398ef57",1489:"0058b4c6",151:"d4762887",1584:"a05bfad9",1751:"0b254e3a",1828:"ecdeb26c",1848:"fc733b73",185:"a52026b8",1862:"5f194406",1878:"f6faa2b4",188:"b6ca4f35",1918:"3ff05326",1983:"14eb3368",1990:"7a24477a",1992:"8e886580",2134:"ef8b811a",2149:"6146d358",2288:"8e3d5b32",2384:"c9c1a3f4",2549:"baa66232",2627:"c55c138b",2654:"334da572",2792:"36994c47",2796:"ce4855c1",2882:"7071adf5",2991:"f4c9601b",2998:"ccc49370",3059:"7c2abd66",3129:"8d193990",3161:"0b85ec06",3187:"88a83a8c",3237:"d20919b7",3338:"3bd0a7e9",3372:"62d70de2",3388:"b4302412",3432:"5e95c892",346:"1a698c37",3551:"33f669c7",3560:"2b4abe09",3648:"3a93f7ba",369:"439d6d8d",3754:"c5de29d4",3755:"3fdfc7ff",3928:"e4134e95",3960:"ab89b7a6",4033:"27d71881",4064:"513b6405",4151:"38920c38",4154:"d2363c7a",4401:"257b9082",4530:"2a34ce22",4629:"424f562c",4639:"f0629c21",4661:"97c623e4",4842:"47b97f63",4886:"cec10a63",4983:"fb8d634e",4998:"75c41d11",5015:"5efe994e",506:"da62f019",5112:"aba21aa0",5147:"a9e19215",5157:"0e3c5e6b",5211:"a7bd4aaa",5243:"6873f895",5275:"04b18502",5297:"ddc41e4a",5366:"1ae709a2",545:"49b71c16",5466:"f8dd8223",5524:"f81c1134",5528:"9284d474",5568:"45e9d313",565:"01a85c17",5670:"1b835d51",5826:"e083e94b",6133:"2c3e84bd",614:"26308ea3",6218:"eb074ba1",628:"9485dea6",6327:"74470af4",6381:"ea6d9109",640:"2609550e",6520:"7e4100d6",6717:"c99ea947",6762:"baf1b6e8",6813:"533eefa9",6857:"be4ac66b",6961:"2a9c4f4d",6973:"a6c0fb2f",698:"72f2f84e",6995:"ad205e99",7048:"17896441",709:"5685b4d8",7127:"fb6dc457",7131:"947d9ca4",7143:"3a2db09e",7170:"6cfe09a0",7192:"6787574e",7220:"e5595530",7240:"99bedda9",7265:"ed2a5927",7269:"f3d58343",7293:"9e4087bc",735:"43d43a8f",7365:"a7456010",7450:"08bef15d",7469:"da0423b8",7627:"acecf23e",7667:"8e861970",7744:"d0d2faf6",7824:"2598a3a5",7993:"fe13418f",8011:"633d53d7",8025:"f32bcb79",8046:"080a8349",8194:"dabd6b33",8219:"8490a22d",8261:"920ec10a",83:"6875c492",8301:"14488e92",8332:"d00f7e62",8388:"09dbd43b",8397:"4802fa93",8410:"ec4e4367",8514:"a6aa9e1f",8570:"4e87380c",8609:"2a37c7d8",8706:"1df93b7f",8719:"f35b91b6",8736:"96af6484",8761:"418a6276",881:"41a4de91",8955:"0cfc9369",8964:"7b0bdf40",900:"9b400668",9118:"06758c2b",9132:"cca891e2",9191:"7c1fb106",9223:"156eae2c",9227:"f1d13e1b",9277:"72054e31",9311:"64699048",9348:"33fc5bb8",9359:"c15d9823",9492:"528b6a6b",9507:"be79d003",9522:"2a0f90eb",9640:"2b61a93c",9661:"d9c798e8",9663:"21944812",9832:"f4aa4739",9854:"621db11d",9906:"46a65d96",9914:"a94703ab",9943:"61c953b4"})[e]||e)+"."+({106:"7d9ca34f",1125:"abf6c904",1157:"8b669d2a",1265:"cbe2d220",1318:"b1f96949",1371:"fef8ed1e",1402:"9acf415a",1418:"d7b3741a",1489:"a676eb23",151:"879a74c2",1584:"3a4b6377",1751:"5f373001",1828:"1fe9d20f",1848:"c3b7228b",185:"062c3310",1862:"6e7ff150",1878:"27a4bd74",188:"a395af94",1918:"1d58d170",1983:"14ad20f9",1990:"cb1e3345",1992:"4d5d1ca9",2071:"bc085cd1",2134:"38a80317",2149:"f47249dd",2288:"7f0788ff",2384:"86590624",2549:"58180d72",2627:"f8000794",2654:"22ebc5a0",2792:"8096dd72",2796:"52c0a384",2882:"484f9146",2991:"556d1b17",2998:"682cb85d",3059:"5be3e187",3129:"8949a660",3161:"f6b30f07",3187:"c8c11340",3237:"cf59cb9e",3338:"6115ca87",3372:"347fe47c",3388:"700e839d",3432:"c55661b1",346:"366fd749",3551:"bb082428",3560:"e29d0b47",3648:"29317772",369:"3bacfc95",3754:"69e499a8",3755:"274d8cb8",3899:"e1adeb2b",3928:"baf1413e",3960:"23b91f29",4033:"29975ae9",4064:"6e1fe729",4151:"71e009d1",4154:"ffbb0747",4401:"b2e4019a",4530:"61bd3e7c",4629:"6f9228c4",4639:"8c4a1e13",4661:"fe9ce8f4",4842:"a5802b6e",4886:"96b0fffc",4983:"09f44ff6",4998:"b31164a6",5015:"c42eb5a5",506:"a85685fc",5112:"6e47277b",5147:"1e237522",5157:"6768dae5",5211:"28cde8bd",5243:"cdfc1918",5275:"b1befb9c",5297:"571d60b8",5366:"c386f78c",545:"970cd721",5466:"50c5bc73",5524:"0ddf9775",5528:"2f7ad000",5568:"2336280a",565:"b1768a6e",5670:"4dc923fa",5826:"534a88b9",6133:"3f7e7e11",614:"5643d214",619:"680b2fd2",6218:"7903bbcc",628:"9c558050",6327:"5551336b",6381:"ade06918",640:"71ed5abe",6520:"f9f19d50",6717:"dc2e0edb",6762:"ade100ee",6813:"13c88c49",6857:"f0a25510",6961:"71209c15",6973:"5a3c7a0e",698:"26590b14",6995:"b5bdb675",7048:"0ad84ab7",709:"92a85a9a",7127:"e87ac9bb",7131:"21091671",7143:"a7968b65",7167:"2229f351",7170:"f301a118",7192:"5501c302",7220:"8eb3fe79",7240:"5bdd5b90",7265:"ee16d26e",7269:"a6934cc2",7293:"2ef313bc",735:"a9272102",7365:"503de679",7450:"701eeb09",7469:"bc82e401",7627:"6898e8f6",7667:"9590ad1b",7744:"69666dde",7824:"ec59d237",7993:"ffa9f3e1",8011:"7abdbd1e",8025:"1a54b319",8046:"2a008348",8194:"60a83e2a",8219:"4dda6488",8261:"28cf9cf6",83:"49d5c80f",8301:"4a4843cc",8332:"c0883b3e",8388:"33479490",8397:"ee0589fc",8410:"b8aea460",8412:"1f597009",8514:"5913345c",8570:"14c405d8",8609:"b4c6dbb5",8706:"6c454b7b",8719:"d946cc37",8736:"b9da4550",8761:"8e4d12df",881:"77cea898",8955:"d0ec6f81",8964:"9366d3da",900:"5f9fa4fa",9118:"90c52c90",9132:"f0382551",9191:"a5495bc2",9223:"cb0cfbcc",9227:"a2a60264",9277:"129ae3b7",9310:"a97e1cbd",9311:"6d2870b9",9348:"fd781283",9359:"c5249e7e",9492:"ddf2f8d1",9507:"aac528f5",9522:"61aa8e18",9640:"58316b4c",9661:"bb19fe27",9663:"434ec424",9832:"a946a5ba",9854:"87a9b056",9906:"d66cb6de",9914:"f3353760",9943:"5840f995"})[e]+".js"},u.miniCssF=function(e){return""+e+".css"},u.h=function(){return"3a3b96dfa4df2ab9"},u.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||Function("return this")()}catch(e){if("object"==typeof window)return window}}(),u.o=function(e,a){return Object.prototype.hasOwnProperty.call(e,a)},c={},d="solus-help-center:",u.l=function(e,a,f,b){if(c[e]){c[e].push(a);return}if(void 0!==f){for(var t,r,n=document.getElementsByTagName("script"),o=0;o<n.length;o++){var i=n[o];if(i.getAttribute("src")==e||i.getAttribute("data-webpack")==d+f){t=i;break}}}!t&&(r=!0,(t=document.createElement("script")).charset="utf-8",t.timeout=120,u.nc&&t.setAttribute("nonce",u.nc),t.setAttribute("data-webpack",d+f),t.src=e),c[e]=[a];var l=function(a,d){t.onerror=t.onload=null,clearTimeout(s);var f=c[e];if(delete c[e],t.parentNode&&t.parentNode.removeChild(t),f&&f.forEach(function(e){return e(d)}),a)return a(d)},s=setTimeout(l.bind(null,void 0,{type:"timeout",target:t}),12e4);t.onerror=l.bind(null,t.onerror),t.onload=l.bind(null,t.onload),r&&document.head.appendChild(t)},u.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},f=[],u.O=function(e,a,c,d){if(a){d=d||0;for(var b=f.length;b>0&&f[b-1][2]>d;b--)f[b]=f[b-1];f[b]=[a,c,d];return}for(var t=1/0,b=0;b<f.length;b++){for(var a=f[b][0],c=f[b][1],d=f[b][2],r=!0,n=0;n<a.length;n++)(!1&d||t>=d)&&Object.keys(u.O).every(function(e){return u.O[e](a[n])})?a.splice(n--,1):(r=!1,d<t&&(t=d));if(r){f.splice(b--,1);var o=c();void 0!==o&&(e=o)}}return e},u.p="/",u.rv=function(){return"1.1.5"},u.gca=function(e){return e=({0x11113f9:"7048",0x14ed9ec:"9663",0x3db3aa8:"9311","6875c492":"83","814f3328":"106",d4762887:"151",a52026b8:"185",b6ca4f35:"188","1a698c37":"346","439d6d8d":"369",da62f019:"506","49b71c16":"545","01a85c17":"565","26308ea3":"614","9485dea6":"628","2609550e":"640","72f2f84e":"698","5685b4d8":"709","43d43a8f":"735","41a4de91":"881","9b400668":"900","0e862883":"1125","5b7f3753":"1157",d5670106:"1265","793c86b2":"1318","05767842":"1371",f82cd581:"1402",a398ef57:"1418","0058b4c6":"1489",a05bfad9:"1584","0b254e3a":"1751",ecdeb26c:"1828",fc733b73:"1848","5f194406":"1862",f6faa2b4:"1878","3ff05326":"1918","14eb3368":"1983","7a24477a":"1990","8e886580":"1992",ef8b811a:"2134","6146d358":"2149","8e3d5b32":"2288",c9c1a3f4:"2384",baa66232:"2549",c55c138b:"2627","334da572":"2654","36994c47":"2792",ce4855c1:"2796","7071adf5":"2882",f4c9601b:"2991",ccc49370:"2998","7c2abd66":"3059","8d193990":"3129","0b85ec06":"3161","88a83a8c":"3187",d20919b7:"3237","3bd0a7e9":"3338","62d70de2":"3372",b4302412:"3388","5e95c892":"3432","33f669c7":"3551","2b4abe09":"3560","3a93f7ba":"3648",c5de29d4:"3754","3fdfc7ff":"3755",e4134e95:"3928",ab89b7a6:"3960","27d71881":"4033","513b6405":"4064","38920c38":"4151",d2363c7a:"4154","257b9082":"4401","2a34ce22":"4530","424f562c":"4629",f0629c21:"4639","97c623e4":"4661","47b97f63":"4842",cec10a63:"4886",fb8d634e:"4983","75c41d11":"4998","5efe994e":"5015",aba21aa0:"5112",a9e19215:"5147","0e3c5e6b":"5157",a7bd4aaa:"5211","6873f895":"5243","04b18502":"5275",ddc41e4a:"5297","1ae709a2":"5366",f8dd8223:"5466",f81c1134:"5524","9284d474":"5528","45e9d313":"5568","1b835d51":"5670",e083e94b:"5826","2c3e84bd":"6133",eb074ba1:"6218","74470af4":"6327",ea6d9109:"6381","7e4100d6":"6520",c99ea947:"6717",baf1b6e8:"6762","533eefa9":"6813",be4ac66b:"6857","2a9c4f4d":"6961",a6c0fb2f:"6973",ad205e99:"6995",fb6dc457:"7127","947d9ca4":"7131","3a2db09e":"7143","6cfe09a0":"7170","6787574e":"7192",e5595530:"7220","99bedda9":"7240",ed2a5927:"7265",f3d58343:"7269","9e4087bc":"7293",a7456010:"7365","08bef15d":"7450",da0423b8:"7469",acecf23e:"7627","8e861970":"7667",d0d2faf6:"7744","2598a3a5":"7824",fe13418f:"7993","633d53d7":"8011",f32bcb79:"8025","080a8349":"8046",dabd6b33:"8194","8490a22d":"8219","920ec10a":"8261","14488e92":"8301",d00f7e62:"8332","09dbd43b":"8388","4802fa93":"8397",ec4e4367:"8410",a6aa9e1f:"8514","4e87380c":"8570","2a37c7d8":"8609","1df93b7f":"8706",f35b91b6:"8719","96af6484":"8736","418a6276":"8761","0cfc9369":"8955","7b0bdf40":"8964","06758c2b":"9118",cca891e2:"9132","7c1fb106":"9191","156eae2c":"9223",f1d13e1b:"9227","72054e31":"9277","33fc5bb8":"9348",c15d9823:"9359","528b6a6b":"9492",be79d003:"9507","2a0f90eb":"9522","2b61a93c":"9640",d9c798e8:"9661",f4aa4739:"9832","621db11d":"9854","46a65d96":"9906",a94703ab:"9914","61c953b4":"9943"})[e]||e,u.p+u.u(e)},b={2580:0,6212:0},u.f.j=function(e,a){var c=u.o(b,e)?b[e]:void 0;if(0!==c){if(c)a.push(c[2]);else if(/^(2580|6212)$/.test(e))b[e]=0;else{var d=new Promise(function(a,d){c=b[e]=[a,d]});a.push(c[2]=d);var f=u.p+u.u(e),t=Error();u.l(f,function(a){if(u.o(b,e)&&(0!==(c=b[e])&&(b[e]=void 0),c)){var d=a&&("load"===a.type?"missing":a.type),f=a&&a.target&&a.target.src;t.message="Loading chunk "+e+" failed.\n("+d+": "+f+")",t.name="ChunkLoadError",t.type=d,t.request=f,c[1](t)}},"chunk-"+e,e)}}},u.O.j=function(e){return 0===b[e]},t=function(e,a){var c=a[0],d=a[1],f=a[2],t,r,n=0;if(c.some(function(e){return 0!==b[e]})){for(t in d)u.o(d,t)&&(u.m[t]=d[t]);if(f)var o=f(u)}for(e&&e(a);n<c.length;n++)r=c[n],u.o(b,r)&&b[r]&&b[r][0](),b[r]=0;return u.O(o)},(r=self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).forEach(t.bind(null,0)),r.push=t.bind(null,r.push.bind(r))})(); \ No newline at end of file diff --git a/blog/archive/index.html b/blog/archive/index.html index 6b74c25b7..d85bc6569 100644 --- a/blog/archive/index.html +++ b/blog/archive/index.html @@ -1,14 +1 @@ -<!doctype html> -<html lang="en" dir="ltr" class="plugin-blog plugin-id-default" data-has-hydrated="false"> -<head> -<meta charset="UTF-8"> -<meta name="generator" content="Docusaurus v3.5.2"> -<title data-rh="true">Archive | Solus Help Center - - - - - - - - \ No newline at end of file +Archive | Solus Help Center \ No newline at end of file diff --git a/blog/authors/alfi/index.html b/blog/authors/alfi/index.html index 888ab8922..06aac2aeb 100644 --- a/blog/authors/alfi/index.html +++ b/blog/authors/alfi/index.html @@ -1,14 +1 @@ - - - - - -Muhammad Alfi Syahrin - One post | Solus Help Center - - - - - -
View all authors

- - \ No newline at end of file +Muhammad Alfi Syahrin - One post | Solus Help Center
View all authors

\ No newline at end of file diff --git a/blog/authors/david/index.html b/blog/authors/david/index.html index ba50dfcaa..7aa92185e 100644 --- a/blog/authors/david/index.html +++ b/blog/authors/david/index.html @@ -1,19 +1,6 @@ - - - - - -David Harder - 2 posts | Solus Help Center - - - - - -
David Harder
Solus Staff
View all authors

Don't call me MATE, pal!

· 3 min read
David Harder
Solus Staff

Back in our 4.4 release post we announced that Solus would stop shipping a MATE ISO, mostly because MATE showed no signs of moving away from X11 and towards wayland. At the beginning of this year, we shipped our new XFCE ISO as a beta. And now we're getting ready to ship the Solus MATE Transition Tool to move existing users off of MATE.

eopkg is dead, long live eopkg

· 2 min read
David Harder
Solus Staff

Close watchers of our packages repository may have noticed some strange looking items:

+David Harder - 2 posts | Solus Help Center
David Harder
Solus Staff
View all authors

Don't call me MATE, pal!

· 3 min read
David Harder
Solus Staff

Back in our 4.4 release post we announced that Solus would stop shipping a MATE ISO, mostly because MATE showed no signs of moving away from X11 and towards wayland. At the beginning of this year, we shipped our new XFCE ISO as a beta. And now we're getting ready to ship the Solus MATE Transition Tool to move existing users off of MATE.

- - \ No newline at end of file +

It's a long story.

\ No newline at end of file diff --git a/blog/authors/index.html b/blog/authors/index.html index e1454de33..e28a26119 100644 --- a/blog/authors/index.html +++ b/blog/authors/index.html @@ -1,14 +1 @@ - - - - - -Authors | Solus Help Center - - - - - - - - \ No newline at end of file +Authors | Solus Help Center \ No newline at end of file diff --git a/blog/authors/joey/index.html b/blog/authors/joey/index.html index e76d045b7..d9f5d1910 100644 --- a/blog/authors/joey/index.html +++ b/blog/authors/joey/index.html @@ -1,15 +1,2 @@ - - - - - -Joey Riches - 2 posts | Solus Help Center - - - - - -
Joey Riches
Solus Staff
View all authors

- - \ No newline at end of file +Joey Riches - 2 posts | Solus Help Center
Joey Riches
Solus Staff
View all authors

\ No newline at end of file diff --git a/blog/clean-clean-clean/index.html b/blog/clean-clean-clean/index.html index f4bc9d23d..66548c9be 100644 --- a/blog/clean-clean-clean/index.html +++ b/blog/clean-clean-clean/index.html @@ -1,40 +1,27 @@ - - - - - -Clean, clean, clean! | Solus Help Center - - - - - -

Clean, clean, clean!

· 6 min read

Hello everyone! Alfi here, member of Solus Cleanup Crew. It's been more than a year since I started contributing to Solus and I want to talk about it. About what I did, what we did, what we accomplished so far, and what we want to do next.

-

A bit of background

-

I started contributing in October 2023, when Solus participated in Hacktoberfest. Hacktoberfest is a month-long event that encourage people to contribute to open source project in exchange for some digital merchandise. Finally, an excuse to contribute to something I use every day. Although, as an accountant, all of this is new experience to me. It was confusing at first, but I persisted. Finally, I got the hang of it and I managed to submit around 100 pull request during the month of the event. I was very excited and motivated. During the month, a few people joined the event and contributed to Solus, but then November came and most of the contribution slowed down. I was the only one left that continued doing the beginner tasks, mostly adding homepage to packages.

-

At the start of January 2024, Jakob Gezelius (androidnisse) comes in and starts contributing to homepage task too. Worried that we would stepped on each other's feet, we started a private chat to organize the tasks between ourselves. Until May, the two of us had been chipping away at the homepage task which at this point left 650 packages without a homepage. Then we had more contributors joining. I decided to make a group chat to accommodate all the people joining. It was called "Solus Homepage Team" at the time. More contributors and staff members joined the room, then it was renamed as "Solus Cleanup Crew" and moved under the official Solus matrix space.

-

What is it?

+Clean, clean, clean! | Solus Help Center

Clean, clean, clean!

· 6 min read

Hello everyone! Alfi here, member of Solus Cleanup Crew. It's been more than a year since I started contributing to Solus and I want to talk about it. About what I did, what we did, what we accomplished so far, and what we want to do next.

+

A bit of background

+

I started contributing in October 2023, when Solus participated in Hacktoberfest. Hacktoberfest is a month-long event that encourage people to contribute to open source project in exchange for some digital merchandise. Finally, an excuse to contribute to something I use every day. Although, as an accountant, all of this is new experience to me. It was confusing at first, but I persisted. Finally, I got the hang of it and I managed to submit around 100 pull request during the month of the event. I was very excited and motivated. During the month, a few people joined the event and contributed to Solus, but then November came and most of the contribution slowed down. I was the only one left that continued doing the beginner tasks, mostly adding homepage to packages.

+

At the start of January 2024, Jakob Gezelius (androidnisse) comes in and starts contributing to homepage task too. Worried that we would stepped on each other's feet, we started a private chat to organize the tasks between ourselves. Until May, the two of us had been chipping away at the homepage task which at this point left 650 packages without a homepage. Then we had more contributors joining. I decided to make a group chat to accommodate all the people joining. It was called "Solus Homepage Team" at the time. More contributors and staff members joined the room, then it was renamed as "Solus Cleanup Crew" and moved under the official Solus matrix space.

+

What is it?

Solus cleanup crew is a group of community contributors as as well staff members with the goal of bringing the Solus package repository up to current standard. It is a subset of the packaging room on our matrix channel. We organize the work on all the cleanup related tasks.

-

Why bother?

-

Solus has been updating their tooling and infrastructure since its resurrection. While most of the tooling changes can be accomplished by staff members alone, there are things that they cannot do. While many consider Solus repository as small, it still contains more than 6000 packages. Some packages have never even gotten an update since Solus was first created! We want to get rid of all its cruft before we can migrate to a better tooling. That's where the community contributor can come in and help.

+

Why bother?

+

Solus has been updating their tooling and infrastructure since its resurrection. While most of the tooling changes can be accomplished by staff members alone, there are things that they cannot do. While many consider Solus repository as small, it still contains more than 6000 packages. Some packages have never even gotten an update since Solus was first created! We want to get rid of all its cruft before we can migrate to a better tooling. That's where the community contributor can come in and help.

For me personally, it is a chance to learn something new and fill my time with more purpose. Sometimes, I feel like a slob scrolling through things, opening the same three apps over and over or sleeping midday. Technically speaking, doing packaging is still scrolling through things, still opening the same three apps over and over, and I still get my midday nap, but now it is with purpose. I love that what I do can be enjoyed by other people. It is mostly invisible and not even noticed by people, but the chance of it helping people gives me so much joy. Why bother? Because I love it.

-

What we accomplished

+

What we accomplished

We create a few repository wide task that can done with little reading of our packaging guide. The keen-eyed of you may have already seen these tasks. It is always attached at the end of every Sync Updates since July. These are the tasks we did:

-
No.TaskDate StartedStart countCurrent count
1.Adding homepage key to package.yml30-09-202323008
2.Adding AppStream metainfo to all font packages06-10-202338Done 🎉
3.Adding AppStream metainfo to all graphical applications22-01-2024316198
4.Applying new cargo macros27-06-202437Done 🎉
5.Changing all packages with homepages pointing to wiki.gnome.org20-10-20248762
6.Adding monitoring.yml21-10-202430702937
7.Tagging packages that do not buildOngoingN/A13
8.Tagging packages that should be deprecatedOngoingN/A25
+
No.TaskDate StartedStart countCurrent count
1.Adding homepage key to package.yml30-09-202323008
2.Adding AppStream metainfo to all font packages06-10-202338Done 🎉
3.Adding AppStream metainfo to all graphical applications22-01-2024316198
4.Applying new cargo macros27-06-202437Done 🎉
5.Changing all packages with homepages pointing to wiki.gnome.org20-10-20248762
6.Adding monitoring.yml21-10-202430702937
7.Tagging packages that do not buildOngoingN/A13
8.Tagging packages that should be deprecatedOngoingN/A25

As you can see from the table above, we just completed two tasks and we are close to completing homepage task. Packages that do not build also are also getting solved one by one. Right now, there are 12 people in Solus Cleanup Crew Matrix room, 6 of them are new contributors. We also create a new AppStream metainfo documentation, clean up our issue templates, implement a better tagging system for organizing issues and much more. Solus Cleanup Crew is also becoming a place where we can onboard new contributors and recruit new staff. I thought we accomplished a lot and I am happy with it.

-

What next?

+

What next?

We want to focus on adding appstream metainfo for remaining 200 packages, in line with the goal of 4.7 ISO. It will not be easy nor quick, but we will try our best. We want Solus users to have the best experience possible when we finally say goodbye to solus-sc and switch to modern software center (Gnome Software and KDE Discover). We want you to be able to install all graphical application from software center and have all the relevant information (Legible screenshot, Hi-Res Icon, good description, etc).

-

We also want to add more monitoring.yml files to packages, so we can utilize our proof-of-concept "Package Update Monitor" created by Justin Zobel. I, myself and Joey Riches will explore the possibility of curating our own "Editor's Choice" and "Featured Apps" in Gnome Software, made possible by gnome-app-list. I think the road ahead is very exciting for us and hopefully for you too!

-

Want to help?

-

We are always eager for people to join and spend their time contributing to Solus. There are many ways you can contribute, but for me it is packaging. For me, packaging can be relaxing, sometimes frustrating, but always gives me joy at the end. If you are interested to dip your toe on packaging and want to help us, here are the simple steps:

+

We also want to add more monitoring.yml files to packages, so we can utilize our proof-of-concept "Package Update Monitor" created by Justin Zobel. I, myself and Joey Riches will explore the possibility of curating our own "Editor's Choice" and "Featured Apps" in Gnome Software, made possible by gnome-app-list. I think the road ahead is very exciting for us and hopefully for you too!

+

Want to help?

+

We are always eager for people to join and spend their time contributing to Solus. There are many ways you can contribute, but for me it is packaging. For me, packaging can be relaxing, sometimes frustrating, but always gives me joy at the end. If you are interested to dip your toe on packaging and want to help us, here are the simple steps:

  1. Join the Solus Packaging Room on Matrix
  2. -
  3. Read and practice our packaging documentation
  4. +
  5. Read and practice our packaging documentation
  6. Submit your first Pull Request. We recommend doing the wiki gnome task or monitoring task
  7. Follow along the review process until your PR gets merged
  8. Continue on contributing and you might get invited to Solus Cleanup Crew
-

Closing thoughts

-

I want to thank all the contributors that made all of this possible. It was such a wonderful effort from everyone and we will strive to keep that up. Let me know if you are interested in a follow-up blog about the detail of doing packaging for Solus. Terima kasih dan sampai jumpa!

- - \ No newline at end of file +

Closing thoughts

+

I want to thank all the contributors that made all of this possible. It was such a wonderful effort from everyone and we will strive to keep that up. Let me know if you are interested in a follow-up blog about the detail of doing packaging for Solus. Terima kasih dan sampai jumpa!

\ No newline at end of file diff --git a/blog/don't-call-me-mate-pal/index.html b/blog/don't-call-me-mate-pal/index.html index 58d778e32..721e5a837 100644 --- a/blog/don't-call-me-mate-pal/index.html +++ b/blog/don't-call-me-mate-pal/index.html @@ -1,35 +1,22 @@ - - - - - -Don't call me MATE, pal! | Solus Help Center - - - - - -

Don't call me MATE, pal!

· 3 min read
David Harder
Solus Staff

Back in our 4.4 release post we announced that Solus would stop shipping a MATE ISO, mostly because MATE showed no signs of moving away from X11 and towards wayland. At the beginning of this year, we shipped our new XFCE ISO as a beta. And now we're getting ready to ship the Solus MATE Transition Tool to move existing users off of MATE.

-

The problem

-

MATE and XFCE are similar enough that eager Solusians can, and have, installed XCFE on their MATE machines with nothing more than a couple of eopkg commands. We're pretty sure our resident bash script enthusiast (ermo) could hammer out a working transition script in an evening. But we want a more polished experience. We know you follow Solus news; after all, you're reading this. However, we assume there are users who dutifully update their systems, but have no interest in keeping up with our blog posts. How do we get their attention and prompt them to move away from MATE?

-

Introducing the Solus MATE Transition Tool

-

We're pleased to show off the MATE Transition Tool, which we plan to include in normal updates to MATE systems in the coming weeks. Most of the work on this tool was done by Joey; more on his efforts in the section below. Here's how MATE users will encounter the tool:

-
note

These screenshots are current as of the publishing of this post, we may change things as we continue testing.

+Don't call me MATE, pal! | Solus Help Center

Don't call me MATE, pal!

· 3 min read
David Harder
Solus Staff

Back in our 4.4 release post we announced that Solus would stop shipping a MATE ISO, mostly because MATE showed no signs of moving away from X11 and towards wayland. At the beginning of this year, we shipped our new XFCE ISO as a beta. And now we're getting ready to ship the Solus MATE Transition Tool to move existing users off of MATE.

+

The problem

+

MATE and XFCE are similar enough that eager Solusians can, and have, installed XCFE on their MATE machines with nothing more than a couple of eopkg commands. We're pretty sure our resident bash script enthusiast (ermo) could hammer out a working transition script in an evening. But we want a more polished experience. We know you follow Solus news; after all, you're reading this. However, we assume there are users who dutifully update their systems, but have no interest in keeping up with our blog posts. How do we get their attention and prompt them to move away from MATE?

+

Introducing the Solus MATE Transition Tool

+

We're pleased to show off the MATE Transition Tool, which we plan to include in normal updates to MATE systems in the coming weeks. Most of the work on this tool was done by Joey; more on his efforts in the section below. Here's how MATE users will encounter the tool:

+
note

These screenshots are current as of the publishing of this post, we may change things as we continue testing.

  1. Users will get a notification on every start-up informing them that they need to transition away from MATE.
-

Notification: Solus Transition Service

-
    +

    Notification: Solus Transition Service

    +
    1. Clicking on that notification will launch the Solus MATE Transition Tool.
    -

    MATE Transition Tool Launch

    -
      +

      MATE Transition Tool Launch

      +
      1. Users select either Solus Budgie or Solus XFCE. The tool installs the selected edition, removes MATE, and prompts for a reboot
      2. The tool removes itself after a successful transition.
      -

      Simple. At least, that's what we want users to think.

      -

      How the Mate Transition Tool is actually part of our Python2 work

      -

      The story of the MATE Transition Tool is actually tied up in our fight to drag eopkg into the current decade. As I wrote previously, we're somewhat embarrassed by the amount of Solus tooling which still relies on Python2. One such tool is the Solus Software Center solus-sc. A while back, the team decided the sane thing to do was to ditch solus-sc in favor of KDE Discover and GNOME Software . This would have the additional benefit of promoting flatpak applications to first-class citizens. The problem is Discover and Software have no way to talk to our package manager eopkg. We need an API. Luckily, other projects have encountered the same issue, leading to packagekit.

      -

      Joey has been doing the dirty work of bolting packagekit support onto eopkg, and saw an opportunity: If eopkg could be upgraded to understand some of packagekit, then he could write a special-purpose application to move users off MATE without asking them to run scary bash scripts (sorry ermo). We're rather pleased with this solution. MATE users get a simple transition and Solus gets closer to checking solus-sc off the list.

- - \ No newline at end of file +

Simple. At least, that's what we want users to think.

+

How the Mate Transition Tool is actually part of our Python2 work

+

The story of the MATE Transition Tool is actually tied up in our fight to drag eopkg into the current decade. As I wrote previously, we're somewhat embarrassed by the amount of Solus tooling which still relies on Python2. One such tool is the Solus Software Center solus-sc. A while back, the team decided the sane thing to do was to ditch solus-sc in favor of KDE Discover and GNOME Software . This would have the additional benefit of promoting flatpak applications to first-class citizens. The problem is Discover and Software have no way to talk to our package manager eopkg. We need an API. Luckily, other projects have encountered the same issue, leading to packagekit.

+

Joey has been doing the dirty work of bolting packagekit support onto eopkg, and saw an opportunity: If eopkg could be upgraded to understand some of packagekit, then he could write a special-purpose application to move users off MATE without asking them to run scary bash scripts (sorry ermo). We're rather pleased with this solution. MATE users get a simple transition and Solus gets closer to checking solus-sc off the list.

\ No newline at end of file diff --git a/blog/eopkg-is-dead-long-live-eopkg/index.html b/blog/eopkg-is-dead-long-live-eopkg/index.html index 9b2e71283..b833bded3 100644 --- a/blog/eopkg-is-dead-long-live-eopkg/index.html +++ b/blog/eopkg-is-dead-long-live-eopkg/index.html @@ -1,28 +1,15 @@ - - - - - -eopkg is dead, long live eopkg | Solus Help Center - - - - - -

eopkg is dead, long live eopkg

· 2 min read
David Harder
Solus Staff

Close watchers of our packages repository may have noticed some strange looking items:

+eopkg is dead, long live eopkg | Solus Help Center

eopkg is dead, long live eopkg

· 2 min read
David Harder
Solus Staff

Close watchers of our packages repository may have noticed some strange looking items:

-

It's a long story.

+

It's a long story.

Our package manager eopkg is written in Python2. Python2 was originally planned to hit end-of-life all the way back in 2015! So Solus contributors past and present have wrestled with three thorny issues:

  • Do we really want to just port eopkg to python3? Surely we could build something newer and shinier.
  • -
  • How exactly do we want to port eopkg to Python3? (We'll call this ported version eopkg3 for short)
  • -
  • How do we make sure eopkg3 works even if something goes wrong with the Python3 libraries on someone's machine?
  • +
  • How exactly do we want to port eopkg to Python3? (We'll call this ported version eopkg3 for short)
  • +
  • How do we make sure eopkg3 works even if something goes wrong with the Python3 libraries on someone's machine?
-

Here's the plan to solve this: Ikey and friends over at Serpent OS are actively building a new package manager moss that we are excited about. And they're building it with Solus in mind as an eventual user. This will be our fix for the first problem. In the meantime, we're taking a pragmatic approach to the last two issues so that (frankly) we can do more exciting things.

-

Sheepman, Livingsilver, and others completed a direct Python3 port, which we never expect our users to actually run directly like a traditional Python program. Instead, that port will be compiled into a binary using nuitka. We're calling this compiled eopkg3 binary eopkg4-bin for now. Critically, this binary will have no dependencies other than libc. If we can successfully swap eopkg with eopkg4-bin on user's machines, then we've solved the last issue: Python3 can be updated without worrying about also wrecking the package manager. Got it?

-

But what about Python2? Well, now that Evan and Joey have seen off a successful ISO release with a calamares based installer, we can cross os-installer off the list. And eopkg4-bin will let us cross off a whole bunch more. The rest of that list is a story for another day.

- - \ No newline at end of file +

Here's the plan to solve this: Ikey and friends over at Serpent OS are actively building a new package manager moss that we are excited about. And they're building it with Solus in mind as an eventual user. This will be our fix for the first problem. In the meantime, we're taking a pragmatic approach to the last two issues so that (frankly) we can do more exciting things.

+

Sheepman, Livingsilver, and others completed a direct Python3 port, which we never expect our users to actually run directly like a traditional Python program. Instead, that port will be compiled into a binary using nuitka. We're calling this compiled eopkg3 binary eopkg4-bin for now. Critically, this binary will have no dependencies other than libc. If we can successfully swap eopkg with eopkg4-bin on user's machines, then we've solved the last issue: Python3 can be updated without worrying about also wrecking the package manager. Got it?

+

But what about Python2? Well, now that Evan and Joey have seen off a successful ISO release with a calamares based installer, we can cross os-installer off the list. And eopkg4-bin will let us cross off a whole bunch more. The rest of that list is a story for another day.

\ No newline at end of file diff --git a/blog/index.html b/blog/index.html index 9ef2846da..c1b2f3363 100644 --- a/blog/index.html +++ b/blog/index.html @@ -1,20 +1,7 @@ - - - - - -Blog | Solus Help Center - - - - - -

Don't call me MATE, pal!

· 3 min read
David Harder
Solus Staff

Back in our 4.4 release post we announced that Solus would stop shipping a MATE ISO, mostly because MATE showed no signs of moving away from X11 and towards wayland. At the beginning of this year, we shipped our new XFCE ISO as a beta. And now we're getting ready to ship the Solus MATE Transition Tool to move existing users off of MATE.

eopkg is dead, long live eopkg

· 2 min read
David Harder
Solus Staff

Close watchers of our packages repository may have noticed some strange looking items:

+Blog | Solus Help Center

Don't call me MATE, pal!

· 3 min read
David Harder
Solus Staff

Back in our 4.4 release post we announced that Solus would stop shipping a MATE ISO, mostly because MATE showed no signs of moving away from X11 and towards wayland. At the beginning of this year, we shipped our new XFCE ISO as a beta. And now we're getting ready to ship the Solus MATE Transition Tool to move existing users off of MATE.

- - \ No newline at end of file +

It's a long story.

\ No newline at end of file diff --git a/blog/solus-optimizing-packages/index.html b/blog/solus-optimizing-packages/index.html index 81996bbe3..1efedf511 100644 --- a/blog/solus-optimizing-packages/index.html +++ b/blog/solus-optimizing-packages/index.html @@ -1,17 +1,6 @@ - - - - - -Intro to Optimizing Packages on Solus | Solus Help Center - - - - - -

Intro to Optimizing Packages on Solus

· 23 min read
Joey Riches
Solus Staff

We'll explore how to build packages with advanced compiler techniques in order to squeeze more performance out of the box for packages in Solus. We'll be using the story of how libwebp was optimized for and how it led to an unexpected side quest.

+Intro to Optimizing Packages on Solus | Solus Help Center

Intro to Optimizing Packages on Solus

· 23 min read
Joey Riches
Solus Staff

We'll explore how to build packages with advanced compiler techniques in order to squeeze more performance out of the box for packages in Solus. We'll be using the story of how libwebp was optimized for and how it led to an unexpected side quest.

Linux distributions have a lot of control over how a source-based package gets compiled and shipped to users as part of a binary repository. Aggressive and advanced compiler optimization techniques, as well as other methods can be used to provide greater out of the box performance for end users. This can greatly benefit users running on older hardware to provide a snappier end-user experience; reducing time waiting on a heavy workload to finish; or even improved battery life; amongst other improvements.

-

Part of the problem is, a packager's time is limited. So how, as a distribution, do you choose to try provide faster compatible packages for an end user. A historic approach is to simply change the default compiler flags for all packages, such as enabling LTO by default. Whilst this approach can work well, at Solus the philosophy is slightly different where a packager can trivially enable several advanced compiler optimization techniques such as PGO without too much faffing around on a targeted package.

+

Part of the problem is, a packager's time is limited. So how, as a distribution, do you choose to try provide faster compatible packages for an end user. A historic approach is to simply change the default compiler flags for all packages, such as enabling LTO by default. Whilst this approach can work well, at Solus the philosophy is slightly different where a packager can trivially enable several advanced compiler optimization techniques such as PGO without too much faffing around on a targeted package.

The benefits of such an approach are:

  • Can target the performance of a specific package to benefit all users
  • @@ -38,7 +27,7 @@

    Optimization Techniques Available

  • Clang:
      -
    • Not strictly an optimization, but, building a package with clang instead of gcc and ld.ldd to link instead of the infamous ld.bfd may provide a faster package out of the box. You'll have to be careful of subtle ABI differences if building with clang. If in doubt, and, clang is the obvious choice, perform safety rebuilds on all reverse dependencies of the package.
    • +
    • Not strictly an optimization, but, building a package with clang instead of gcc and ld.ldd to link instead of the infamous ld.bfd may provide a faster package out of the box. You'll have to be careful of subtle ABI differences if building with clang. If in doubt, and, clang is the obvious choice, perform safety rebuilds on all reverse dependencies of the package.
  • PGO: @@ -48,37 +37,37 @@

    Optimization Techniques Available

  • BOLT:
      -
    • Binary optimization and layout tool. You can think of this as "post-link PGO" where you instrument a binary with bolt to collect profiling data. Run that binary. Then finally reorganize the binary layout using the collected profile data. This generally works better on large statically linked binaries but smaller binaries or libraries such as found in a typical package can benefit too. This optimization is still quite new.
    • +
    • Binary optimization and layout tool. You can think of this as "post-link PGO" where you instrument a binary with bolt to collect profiling data. Run that binary. Then finally reorganize the binary layout using the collected profile data. This generally works better on large statically linked binaries but smaller binaries or libraries such as found in a typical package can benefit too. This optimization is still quite new.
-

Regardless, that's enough word spaghetti, let's look at the process to actually optimize a package.

+

Regardless, that's enough word spaghetti, let's look at the process to actually optimize a package.

Optimizing a Package

-

Right, to begin with we'll have to start on choosing an actual package to benchmark and optimize. I've heard the .webp file format is becoming increasingly common on the web, slowly replacing .png and .jpg file formats due to the strong backing of Google (for better or for worst). An improvement in decoding time for .webp files would benefit any user using a web browser casually browsing the web.

-

Let's have a look at the package.yml build recipe for libwebp.

-
name       : libwebp
version : 1.3.2
release : 25
source :
- https://github.com/webmproject/libwebp/archive/refs/tags/v1.3.2.tar.gz : c2c2f521fa468e3c5949ab698c2da410f5dce1c5e99f5ad9e70e0e8446b86505
homepage : https://developers.google.com/speed/webp/
license : BSD-3-Clause
component : multimedia.codecs
summary : A new image format for the web
description: |
WebP is a new image format that provides lossless and lossy compression for images on the web. WebP lossless images are 26% smaller in size compared to PNGs. WebP lossy images are 25-34% smaller in size compared to JPEG images at equivalent SSIM index. WebP supports lossless transparency (also known as alpha channel) with just 22% additional bytes. Transparency is also supported with lossy compression and typically provides 3x smaller file sizes compared to PNG when lossy compression is acceptable for the red/green/blue color channels.
emul32 : yes
patterns :
- devel : /usr/share/man
builddeps :
- pkgconfig32(glu)
- pkgconfig32(glut)
- pkgconfig32(libpng)
- pkgconfig32(libtiff-4)
- pkgconfig32(libturbojpeg)
- pkgconfig32(zlib)
- giflib-devel
setup : |
%reconfigure --disable-static --enable-everything
build : |
%make
install : |
%make_install
-

Okay, looks to be a quite simple affair. A simple configure, make, make install as well as emul32 being enabled specifying the -32bit packages are also provided from this recipe. Next step is to look for a repeatable and easy way to benchmark it. We'll begin by looking at the pspec_x86_64.xml file which lists all the files produced from the package.yml recipe as well as some metadata.

-
        <Name>libwebp</Name>
<Summary xml:lang="en">A new image format for the web</Summary>
<Description xml:lang="en">WebP is a new image format that provides lossless and lossy compression for images on the web. WebP lossless images are 26% smaller in size compared to PNGs. WebP lossy images are 25-34% smaller in size compared to JPEG images at equivalent SSIM index. WebP supports lossless transparency (also known as alpha channel) with just 22% additional bytes. Transparency is also supported with lossy compression and typically provides 3x smaller file sizes compared to PNG when lossy compression is acceptable for the red/green/blue color channels.
</Description>
<PartOf>multimedia.codecs</PartOf>
<Files>
<Path fileType="executable">/usr/bin/cwebp</Path>
<Path fileType="executable">/usr/bin/dwebp</Path>
<Path fileType="executable">/usr/bin/gif2webp</Path>
<Path fileType="executable">/usr/bin/img2webp</Path>
<Path fileType="executable">/usr/bin/vwebp</Path>
<Path fileType="executable">/usr/bin/webpinfo</Path>
<Path fileType="executable">/usr/bin/webpmux</Path>
-

Perfect, we have dwebp and cwebp binaries available in the main package, which from a guess can be used to decode and encode .webp files. Let's try it out.

-
$ dwebp -h
Usage: dwebp in_file [options] [-o out_file]

Decodes the WebP image file to PNG format [Default].
Note: Animated WebP files are not supported.
$ cwebp -h
Usage:

cwebp [options] -q quality input.png -o output.webp
-

Awesome, these binaries do exactly what we need to benchmark libwebp, but, we are also indirectly testing libpng as well for this benchmark, we'll have to keep an eye out for that.

-

One extra step we have to do is ensure these binaries are actually linking against their own library, as upstream developers can have a habit of making sure their binaries don't link against their own libraries and end up being self-contained. Run ldd to verify.

-
$ ldd /usr/bin/dwebp
linux-vdso.so.1 (0x00007ffed8733000)
libwebpdemux.so.2 => /usr/lib/libwebpdemux.so.2.0.14 (0x00007f7473bb4000)
libwebp.so.7 => /usr/lib/libwebp.so.7.1.8 (0x00007f7473ae2000)
libpng16.so.16 => /usr/lib/libpng16.so.16 (0x00007f7473aa6000)
libc.so.6 => /usr/lib/glibc-hwcaps/x86-64-v3/libc.so.6 (0x00007f74738a9000)
libsharpyuv.so.0 => /usr/lib/libsharpyuv.so.0.0.1 (0x00007f747389e000)
libm.so.6 => /usr/lib/glibc-hwcaps/x86-64-v3/libm.so.6 (0x00007f74737b8000)
libz.so.1 => /usr/lib/libz.so.1.3.0 (0x00007f7473200000)
/usr/lib64/ld-linux-x86-64.so.2 (0x00007f7473bea000)
+

Right, to begin with we'll have to start on choosing an actual package to benchmark and optimize. I've heard the .webp file format is becoming increasingly common on the web, slowly replacing .png and .jpg file formats due to the strong backing of Google (for better or for worst). An improvement in decoding time for .webp files would benefit any user using a web browser casually browsing the web.

+

Let's have a look at the package.yml build recipe for libwebp.

+
name       : libwebp
version : 1.3.2
release : 25
source :
- https://github.com/webmproject/libwebp/archive/refs/tags/v1.3.2.tar.gz : c2c2f521fa468e3c5949ab698c2da410f5dce1c5e99f5ad9e70e0e8446b86505
homepage : https://developers.google.com/speed/webp/
license : BSD-3-Clause
component : multimedia.codecs
summary : A new image format for the web
description: |
WebP is a new image format that provides lossless and lossy compression for images on the web. WebP lossless images are 26% smaller in size compared to PNGs. WebP lossy images are 25-34% smaller in size compared to JPEG images at equivalent SSIM index. WebP supports lossless transparency (also known as alpha channel) with just 22% additional bytes. Transparency is also supported with lossy compression and typically provides 3x smaller file sizes compared to PNG when lossy compression is acceptable for the red/green/blue color channels.
emul32 : yes
patterns :
- devel : /usr/share/man
builddeps :
- pkgconfig32(glu)
- pkgconfig32(glut)
- pkgconfig32(libpng)
- pkgconfig32(libtiff-4)
- pkgconfig32(libturbojpeg)
- pkgconfig32(zlib)
- giflib-devel
setup : |
%reconfigure --disable-static --enable-everything
build : |
%make
install : |
%make_install
+

Okay, looks to be a quite simple affair. A simple configure, make, make install as well as emul32 being enabled specifying the -32bit packages are also provided from this recipe. Next step is to look for a repeatable and easy way to benchmark it. We'll begin by looking at the pspec_x86_64.xml file which lists all the files produced from the package.yml recipe as well as some metadata.

+
        <Name>libwebp</Name>
<Summary xml:lang="en">A new image format for the web</Summary>
<Description xml:lang="en">WebP is a new image format that provides lossless and lossy compression for images on the web. WebP lossless images are 26% smaller in size compared to PNGs. WebP lossy images are 25-34% smaller in size compared to JPEG images at equivalent SSIM index. WebP supports lossless transparency (also known as alpha channel) with just 22% additional bytes. Transparency is also supported with lossy compression and typically provides 3x smaller file sizes compared to PNG when lossy compression is acceptable for the red/green/blue color channels.
</Description>
<PartOf>multimedia.codecs</PartOf>
<Files>
<Path fileType="executable">/usr/bin/cwebp</Path>
<Path fileType="executable">/usr/bin/dwebp</Path>
<Path fileType="executable">/usr/bin/gif2webp</Path>
<Path fileType="executable">/usr/bin/img2webp</Path>
<Path fileType="executable">/usr/bin/vwebp</Path>
<Path fileType="executable">/usr/bin/webpinfo</Path>
<Path fileType="executable">/usr/bin/webpmux</Path>
+

Perfect, we have dwebp and cwebp binaries available in the main package, which from a guess can be used to decode and encode .webp files. Let's try it out.

+
$ dwebp -h
Usage: dwebp in_file [options] [-o out_file]

Decodes the WebP image file to PNG format [Default].
Note: Animated WebP files are not supported.
$ cwebp -h
Usage:

cwebp [options] -q quality input.png -o output.webp
+

Awesome, these binaries do exactly what we need to benchmark libwebp, but, we are also indirectly testing libpng as well for this benchmark, we'll have to keep an eye out for that.

+

One extra step we have to do is ensure these binaries are actually linking against their own library, as upstream developers can have a habit of making sure their binaries don't link against their own libraries and end up being self-contained. Run ldd to verify.

+
$ ldd /usr/bin/dwebp
linux-vdso.so.1 (0x00007ffed8733000)
libwebpdemux.so.2 => /usr/lib/libwebpdemux.so.2.0.14 (0x00007f7473bb4000)
libwebp.so.7 => /usr/lib/libwebp.so.7.1.8 (0x00007f7473ae2000)
libpng16.so.16 => /usr/lib/libpng16.so.16 (0x00007f7473aa6000)
libc.so.6 => /usr/lib/glibc-hwcaps/x86-64-v3/libc.so.6 (0x00007f74738a9000)
libsharpyuv.so.0 => /usr/lib/libsharpyuv.so.0.0.1 (0x00007f747389e000)
libm.so.6 => /usr/lib/glibc-hwcaps/x86-64-v3/libm.so.6 (0x00007f74737b8000)
libz.so.1 => /usr/lib/libz.so.1.3.0 (0x00007f7473200000)
/usr/lib64/ld-linux-x86-64.so.2 (0x00007f7473bea000)

Awesome in this case both dwebp and cwebp link against libwebp.so so we can be confident that any performance improvements will be applicable to all packages in the repository linking against libwebp.

-

Let's grab a couple of .webp files from here to test with. We'll just use the largest image size available in this case to reduce noise as much as possible when running benchmarks as well as allow any potential optimizations to stretch their legs a little more.

+

Let's grab a couple of .webp files from here to test with. We'll just use the largest image size available in this case to reduce noise as much as possible when running benchmarks as well as allow any potential optimizations to stretch their legs a little more.

Now having done the prep work, lets actually benchmark the damn thing using hyperfine for the time being.

-
$ hyperfine "dwebp ~/3.webp -o /dev/null"
Benchmark 1: dwebp ~/3.webp -o /dev/null
Time (mean ± σ): 202.2 ms ± 0.3 ms [User: 198.9 ms, System: 3.0 ms]
Range (min … max): 201.8 ms … 202.7 ms 14 runs
$ hyperfine "cwebp ~/PNG_Test.png -o /dev/null"
Benchmark 1: cwebp ~/PNG_Test.png -o /dev/null
Time (mean ± σ): 1.423 s ± 0.009 s [User: 1.346 s, System: 0.076 s]
Range (min … max): 1.410 s … 1.435 s 10 runs
+
$ hyperfine "dwebp ~/3.webp -o /dev/null"
Benchmark 1: dwebp ~/3.webp -o /dev/null
Time (mean ± σ): 202.2 ms ± 0.3 ms [User: 198.9 ms, System: 3.0 ms]
Range (min … max): 201.8 ms … 202.7 ms 14 runs
$ hyperfine "cwebp ~/PNG_Test.png -o /dev/null"
Benchmark 1: cwebp ~/PNG_Test.png -o /dev/null
Time (mean ± σ): 1.423 s ± 0.009 s [User: 1.346 s, System: 0.076 s]
Range (min … max): 1.410 s … 1.435 s 10 runs

There, we have our a basic baseline for encode and decode performance. We mostly care about decode performance here but improved encoding performance would also not go amiss.

-

Let's Start Obvious

-

Let's start basic, enabling the speed optimization which basically builds with -O3 instead of -O2 as well as any other flags that are deemed to be worthy to be part of the speed group. As well as, the lto optimization which builds with link time optimization allowing for inter-procedural optimizations to take place.

-
optimize:
- speed
- lto
+

Let's Start Obvious

+

Let's start basic, enabling the speed optimization which basically builds with -O3 instead of -O2 as well as any other flags that are deemed to be worthy to be part of the speed group. As well as, the lto optimization which builds with link time optimization allowing for inter-procedural optimizations to take place.

+
optimize:
- speed
- lto

Moment of truth...

-
$ hyperfine "dwebp ~/3.webp -o /dev/null"
Benchmark 1: dwebp ~/3.webp -o /dev/null
Time (mean ± σ): 200.0 ms ± 1.5 ms [User: 197.3 ms, System: 2.5 ms]
Range (min … max): 198.1 ms … 203.2 ms 15 runs
$ hyperfine "cwebp ~/PNG_Test.png -o /dev/null"
Benchmark 1: cwebp ~/PNG_Test.png -o /dev/null
Time (mean ± σ): 1.353 s ± 0.012 s [User: 1.281 s, System: 0.071 s]
Range (min … max): 1.336 s … 1.369 s 10 runs
+
$ hyperfine "dwebp ~/3.webp -o /dev/null"
Benchmark 1: dwebp ~/3.webp -o /dev/null
Time (mean ± σ): 200.0 ms ± 1.5 ms [User: 197.3 ms, System: 2.5 ms]
Range (min … max): 198.1 ms … 203.2 ms 15 runs
$ hyperfine "cwebp ~/PNG_Test.png -o /dev/null"
Benchmark 1: cwebp ~/PNG_Test.png -o /dev/null
Time (mean ± σ): 1.353 s ± 0.012 s [User: 1.281 s, System: 0.071 s]
Range (min … max): 1.336 s … 1.369 s 10 runs

Well okay, we got a very minor uplift in decoding performance and a slightly higher improvement in encoding performance, but nothing too much to write home about. Luckily we have several more optimizations to explore...

-

PGO is great, except, when it isn't.

-

Next step is to explore PGO (Profile Guided Optimization). For our libwebp package, looks like we already hit a bit of a snafu. There's no test suite included in the tarball! That's a bit of a disappointment as a test suite such as make check is by far and away the easiest and most comprehensive workload that can be used for profiling as part of PGO, especially for smaller libraries. However, we can still experiment with the just built dwebp and cwebp binaries as a suitable workload for PGO.

+

PGO is great, except, when it isn't.

+

Next step is to explore PGO (Profile Guided Optimization). For our libwebp package, looks like we already hit a bit of a snafu. There's no test suite included in the tarball! That's a bit of a disappointment as a test suite such as make check is by far and away the easiest and most comprehensive workload that can be used for profiling as part of PGO, especially for smaller libraries. However, we can still experiment with the just built dwebp and cwebp binaries as a suitable workload for PGO.

Luckily, as part of the package.yml format all you have to do is provide a profile for automatic PGO. After chrooting into the build environment and fiddling around a bit we end up with:

-
profile    : |
./examples/dwebp webp_js/test_webp_js.webp -o test_png.png
./examples/cwebp test_png.png -o /dev/null
+
profile    : |
./examples/dwebp webp_js/test_webp_js.webp -o test_png.png
./examples/cwebp test_png.png -o /dev/null

After specifying that, 6 builds will now be performed instead of 2:

  • emul32: @@ -98,11 +87,11 @@

    $ hyperfine "dwebp ~/3.webp -o /dev/null"
    Benchmark 1: dwebp ~/3.webp -o /dev/null
    Time (mean ± σ): 204.1 ms ± 2.2 ms [User: 201.3 ms, System: 2.7 ms]
    Range (min … max): 201.6 ms … 207.1 ms 14 runs
    $ hyperfine "cwebp ~/PNG_Test.png -o /dev/null"
    Benchmark 1: cwebp ~/PNG_Test.png -o /dev/null
    Time (mean ± σ): 1.349 s ± 0.010 s [User: 1.266 s, System: 0.082 s]
    Range (min … max): 1.335 s … 1.374 s 10 runs

-

Well... That's interesting. We actually regress in performance for decode performance whilst gaining another small bump in encoding performance. Worse still, we get a bunch of profile count data file not found [-Wmissing-profile] warning messages during the optimized build indicating to us our profiling workload isn't comprehensive enough and doesn't cover enough code paths. The lack of a handy make check that could be used as a profiling workload is really hurting us here. For now, let's put a pin in exploring PGO, it isn't a dead end but more work needs to be done curating a more comprehensive workload to chuck at it in this particular case, whilst other, easier, optimization techniques are still available to us.

-

256 Vector Units go brrrrrr...

+
$ hyperfine "dwebp ~/3.webp -o /dev/null"
Benchmark 1: dwebp ~/3.webp -o /dev/null
Time (mean ± σ): 204.1 ms ± 2.2 ms [User: 201.3 ms, System: 2.7 ms]
Range (min … max): 201.6 ms … 207.1 ms 14 runs
$ hyperfine "cwebp ~/PNG_Test.png -o /dev/null"
Benchmark 1: cwebp ~/PNG_Test.png -o /dev/null
Time (mean ± σ): 1.349 s ± 0.010 s [User: 1.266 s, System: 0.082 s]
Range (min … max): 1.335 s … 1.374 s 10 runs
+

Well... That's interesting. We actually regress in performance for decode performance whilst gaining another small bump in encoding performance. Worse still, we get a bunch of profile count data file not found [-Wmissing-profile] warning messages during the optimized build indicating to us our profiling workload isn't comprehensive enough and doesn't cover enough code paths. The lack of a handy make check that could be used as a profiling workload is really hurting us here. For now, let's put a pin in exploring PGO, it isn't a dead end but more work needs to be done curating a more comprehensive workload to chuck at it in this particular case, whilst other, easier, optimization techniques are still available to us.

+

256 Vector Units go brrrrrr...

The next obvious step is to explore glibc hardware capabilities. For those unaware both clang and gnu compilers provide x86_64-v2, x86_64-v3 and x86_64-v4 micro-architecture build options on top of the baseline of x86_64. These enable the use of targeting additional CPU instruction sets during compilation for better performance. For example, -sse4.2 for x86_64-v2, -avx2 for x86_64-v3, and -avx512 for x86_64-v4.

-

Whilst that's great 'n all, if a program is built with x86_64-v3 and gains an additional ~10% uplift in performance, it's no good if a x86_64-v2 compatible cpu can't run it. Luckily the glibc loader that's found on almost general purpose linux installs provides a way to load higher or lower micro-architecture libraries if they're installed and supported.

+

Whilst that's great 'n all, if a program is built with x86_64-v3 and gains an additional ~10% uplift in performance, it's no good if a x86_64-v2 compatible cpu can't run it. Luckily the glibc loader that's found on almost general purpose linux installs provides a way to load higher or lower micro-architecture libraries if they're installed and supported.

On top of all that, the package.yml format provides an incredibly simple way of providing x86_64-v3 built libraries by enabling the avx2 : yes flag.

With avx2 : yes enabled in the libwebp package three builds are performed.

    @@ -111,78 +100,76 @@

  • x86_64

We now see these additional files in the pspec_x86_64.xml file

-
+            <Path fileType="library">/usr/lib64/glibc-hwcaps/x86-64-v3/libsharpyuv.so.0</Path>
+ <Path fileType="library">/usr/lib64/glibc-hwcaps/x86-64-v3/libsharpyuv.so.0.0.1</Path>
+ <Path fileType="library">/usr/lib64/glibc-hwcaps/x86-64-v3/libwebp.so.7</Path>
+ <Path fileType="library">/usr/lib64/glibc-hwcaps/x86-64-v3/libwebp.so.7.1.8</Path>
+ <Path fileType="library">/usr/lib64/glibc-hwcaps/x86-64-v3/libwebpdecoder.so.3</Path>
+ <Path fileType="library">/usr/lib64/glibc-hwcaps/x86-64-v3/libwebpdecoder.so.3.1.8</Path>
+ <Path fileType="library">/usr/lib64/glibc-hwcaps/x86-64-v3/libwebpdemux.so.2</Path>
+ <Path fileType="library">/usr/lib64/glibc-hwcaps/x86-64-v3/libwebpdemux.so.2.0.14</Path>
+ <Path fileType="library">/usr/lib64/glibc-hwcaps/x86-64-v3/libwebpmux.so.3</Path>
+ <Path fileType="library">/usr/lib64/glibc-hwcaps/x86-64-v3/libwebpmux.so.3.0.13</Path>
-

Let's rerun lld on dwebp after installing the new package and...

-
$ ldd /usr/bin/dwebp
linux-vdso.so.1 (0x00007ffeab5b1000)
libwebpdemux.so.2 => /usr/lib/glibc-hwcaps/x86-64-v3/libwebpdemux.so.2.0.14 (0x00007f9a351d5000)
libwebp.so.7 => /usr/lib/glibc-hwcaps/x86-64-v3/libwebp.so.7.1.8 (0x00007f9a3510b000)
libpng16.so.16 => /usr/lib/libpng16.so.16 (0x00007f9a350cf000)
libc.so.6 => /usr/lib/glibc-hwcaps/x86-64-v3/libc.so.6 (0x00007f9a34ed2000)
libsharpyuv.so.0 => /usr/lib/glibc-hwcaps/x86-64-v3/libsharpyuv.so.0.0.1 (0x00007f9a34ec1000)
libm.so.6 => /usr/lib/glibc-hwcaps/x86-64-v3/libm.so.6 (0x00007f9a34ddb000)
libz.so.1 => /usr/lib/glibc-hwcaps/x86-64-v3/libz.so.1.3 (0x00007f9a34dbb000)
/usr/lib64/ld-linux-x86-64.so.2 (0x00007f9a3520b000)
-

We can crucially see that dwebp is now loading the x86-64-v3 built libwebp.so lib from /usr/lib/glibc-hwcaps/x86-64-v3/libwebp.so.7.1.8, success! Let's what our performance looks like.

-
$ hyperfine "dwebp ~/3.webp -o /dev/null"
Benchmark 1: dwebp ~/3.webp -o /dev/null
Time (mean ± σ): 198.2 ms ± 1.2 ms [User: 195.4 ms, System: 2.5 ms]
Range (min … max): 197.0 ms … 200.5 ms 14 runs
$ hyperfine "cwebp ~/PNG_Test.png -o /dev/null"
Benchmark 1: cwebp ~/PNG_Test.png -o /dev/null
Time (mean ± σ): 1.313 s ± 0.009 s [User: 1.243 s, System: 0.078 s]
Range (min … max): 1.308 s … 1.341 s 10 runs
-

Let's recap so far:

-
OptimizationDecodeEncodeSize
Baseline202.2 ms1.399 s1.33 MB
Speed + LTO200.0 ms1.353 s1.73 MB
Speed + LTO + PGO204.1 ms ⚠️1.349 s1.07 MB
Speed + LTO + x86_64-v3198.2 ms1.313 s3.17 MB
-

Whilst we're still getting an additional speedup it isn't really anything to write home about. A measly ~2% improvement in decoding performance and a fairly respectable ~7% improvement in encoding performance for our test case. However, increasing the package size by an extra ~2MiB from providing a bunch of extra libs in /usr/lib/glibc-hwcaps/x86-64-v3/ just ain't worth it. This hints that either the compiler optimizations aren't really effective here or we're being bottle-necked by something else.

-

So far, we've been benchmarking fairly simply using hyperfine, let's swap that out for perf so we can get a callgraph.

-

Something about perf to the rescue

+
+            <Path fileType="library">/usr/lib64/glibc-hwcaps/x86-64-v3/libsharpyuv.so.0</Path>
+ <Path fileType="library">/usr/lib64/glibc-hwcaps/x86-64-v3/libsharpyuv.so.0.0.1</Path>
+ <Path fileType="library">/usr/lib64/glibc-hwcaps/x86-64-v3/libwebp.so.7</Path>
+ <Path fileType="library">/usr/lib64/glibc-hwcaps/x86-64-v3/libwebp.so.7.1.8</Path>
+ <Path fileType="library">/usr/lib64/glibc-hwcaps/x86-64-v3/libwebpdecoder.so.3</Path>
+ <Path fileType="library">/usr/lib64/glibc-hwcaps/x86-64-v3/libwebpdecoder.so.3.1.8</Path>
+ <Path fileType="library">/usr/lib64/glibc-hwcaps/x86-64-v3/libwebpdemux.so.2</Path>
+ <Path fileType="library">/usr/lib64/glibc-hwcaps/x86-64-v3/libwebpdemux.so.2.0.14</Path>
+ <Path fileType="library">/usr/lib64/glibc-hwcaps/x86-64-v3/libwebpmux.so.3</Path>
+ <Path fileType="library">/usr/lib64/glibc-hwcaps/x86-64-v3/libwebpmux.so.3.0.13</Path>
+

Let's rerun lld on dwebp after installing the new package and...

+
$ ldd /usr/bin/dwebp
linux-vdso.so.1 (0x00007ffeab5b1000)
libwebpdemux.so.2 => /usr/lib/glibc-hwcaps/x86-64-v3/libwebpdemux.so.2.0.14 (0x00007f9a351d5000)
libwebp.so.7 => /usr/lib/glibc-hwcaps/x86-64-v3/libwebp.so.7.1.8 (0x00007f9a3510b000)
libpng16.so.16 => /usr/lib/libpng16.so.16 (0x00007f9a350cf000)
libc.so.6 => /usr/lib/glibc-hwcaps/x86-64-v3/libc.so.6 (0x00007f9a34ed2000)
libsharpyuv.so.0 => /usr/lib/glibc-hwcaps/x86-64-v3/libsharpyuv.so.0.0.1 (0x00007f9a34ec1000)
libm.so.6 => /usr/lib/glibc-hwcaps/x86-64-v3/libm.so.6 (0x00007f9a34ddb000)
libz.so.1 => /usr/lib/glibc-hwcaps/x86-64-v3/libz.so.1.3 (0x00007f9a34dbb000)
/usr/lib64/ld-linux-x86-64.so.2 (0x00007f9a3520b000)
+

We can crucially see that dwebp is now loading the x86-64-v3 built libwebp.so lib from /usr/lib/glibc-hwcaps/x86-64-v3/libwebp.so.7.1.8, success! Let's what our performance looks like.

+
$ hyperfine "dwebp ~/3.webp -o /dev/null"
Benchmark 1: dwebp ~/3.webp -o /dev/null
Time (mean ± σ): 198.2 ms ± 1.2 ms [User: 195.4 ms, System: 2.5 ms]
Range (min … max): 197.0 ms … 200.5 ms 14 runs
$ hyperfine "cwebp ~/PNG_Test.png -o /dev/null"
Benchmark 1: cwebp ~/PNG_Test.png -o /dev/null
Time (mean ± σ): 1.313 s ± 0.009 s [User: 1.243 s, System: 0.078 s]
Range (min … max): 1.308 s … 1.341 s 10 runs
+

Let's recap so far:

+
OptimizationDecodeEncodeSize
Baseline202.2 ms1.399 s1.33 MB
Speed + LTO200.0 ms1.353 s1.73 MB
Speed + LTO + PGO204.1 ms ⚠️1.349 s1.07 MB
Speed + LTO + x86_64-v3198.2 ms1.313 s3.17 MB
+

Whilst we're still getting an additional speedup it isn't really anything to write home about. A measly ~2% improvement in decoding performance and a fairly respectable ~7% improvement in encoding performance for our test case. However, increasing the package size by an extra ~2MiB from providing a bunch of extra libs in /usr/lib/glibc-hwcaps/x86-64-v3/ just ain't worth it. This hints that either the compiler optimizations aren't really effective here or we're being bottle-necked by something else.

+

So far, we've been benchmarking fairly simply using hyperfine, let's swap that out for perf so we can get a callgraph.

+

Something about perf to the rescue

perf record -o dwebp.data -- dwebp ~/3.webp -o /dev/null

perf record -o cwebp.data -- cwebp ~/PNG_Test.png -o /dev/null

-

Let's look at dwebp first with perf report -i dwebp.data.

-

Perf report dwebp

-

Well god damn, literally all of our time is being spent in libz.so it's no wonder our compiler optimizations were hardly improving performance.

-

Let's also look at the cwebp report, we've generally been getting better results from it.

-

Perf report cwebp

+

Let's look at dwebp first with perf report -i dwebp.data.

+

Perf report dwebp

+

Well god damn, literally all of our time is being spent in libz.so it's no wonder our compiler optimizations were hardly improving performance.

+

Let's also look at the cwebp report, we've generally been getting better results from it.

+

Perf report cwebp

Okay, much more of our time is being spent in libwebp.so itself here which helps to explain why we were seeing a better performance uplift. Still 5.68% of our time is being spent in libz.

-

Choosing Wisely

-

You may remember early on, when I said we are also indirectly testing libpng. Well... after some more digging, that's exactly what's happening here. Re-running the dwebp binary it says this

+

Choosing Wisely

+

You may remember early on, when I said we are also indirectly testing libpng. Well... after some more digging, that's exactly what's happening here. Re-running the dwebp binary it says this

Decodes the WebP image file to PNG format

-

Turns out, it's more accurate to say we are directly testing libpng and by extension zlib. It isn't libwebp that's spending all of its time in libz.so, it's libpng! This is exactly the reason you have to be careful about the benchmarks chosen and, ensure you understand what they're doing.

+

Turns out, it's more accurate to say we are directly testing libpng and by extension zlib. It isn't libwebp that's spending all of its time in libz.so, it's libpng! This is exactly the reason you have to be careful about the benchmarks chosen and, ensure you understand what they're doing.

However, the good news about this little snafu is:

    -
  1. dwebp can be used to translate to another image format such as .yuv that'll more accurately remove the bottleneck from libz.so.
  2. +
  3. dwebp can be used to translate to another image format such as .yuv that'll more accurately remove the bottleneck from libz.so.
  4. We now know that libpng has a huge bottleneck in libz.so and speeding up zlib should dramatically speed up libpng performance.
-

Adjusting the Benchmark

-

After reverting the libwebp package to the baseline let's use our adjusted decoding benchmark.

-

We'll now use dwebp ~/3.webp -yuv -o /dev/null for a decoding test, let's run that with perf to ensure we're exclusively testing libwebp.so here.

-

Perf report dwebp to yuv

-

Okay that's awesome, no libpng.so or libz.so to mess with our tests!

-

Let's reapply our optimizations, keeping those which apply an uplift

-
OptimizationDecodeSize
Baseline14.7 ms1.33 MB
Speed14.5 ms1.56 MB
LTO14.6 ms1.40 MB
PGO18.0 ms ⚠️1.07 MB
x86-64-v312.7 ms2.35 MB
Speed + LTO + x86-64-v312.3 ms3.17 MB
-

Okay, this is great, whilst we aren't getting much from speed or LTO, we are getting a big uplift from x86-64-v3 libraries and when combined with the other optimizations we're getting an uplift in performance of around ~16% at the cost of close to thrice the installed package size.

-

Partial Profiling

-

Once again we see that PGO regresses performance hard, however, that smaller size is giving a good hint! We already know that the profiling workload we gave it isn't very comprehensive due to the bunch of -Wmissing-profile warnings we get during the optimized build. By default, PGO will aggressively inline and apply additional optimizations to code that's part of the profiling workload while everything else will be optimized for size. The idea being, hot-path code is fast and code that doesn't matter is small. However, what happens when you can't craft a comprehensive workload, as seems to be the case here? Luckily GCC has a flag for exactly that -fprofile-partial-training. GCC docs state that:

+

Adjusting the Benchmark

+

After reverting the libwebp package to the baseline let's use our adjusted decoding benchmark.

+

We'll now use dwebp ~/3.webp -yuv -o /dev/null for a decoding test, let's run that with perf to ensure we're exclusively testing libwebp.so here.

+

Perf report dwebp to yuv

+

Okay that's awesome, no libpng.so or libz.so to mess with our tests!

+

Let's reapply our optimizations, keeping those which apply an uplift

+
OptimizationDecodeSize
Baseline14.7 ms1.33 MB
Speed14.5 ms1.56 MB
LTO14.6 ms1.40 MB
PGO18.0 ms ⚠️1.07 MB
x86-64-v312.7 ms2.35 MB
Speed + LTO + x86-64-v312.3 ms3.17 MB
+

Okay, this is great, whilst we aren't getting much from speed or LTO, we are getting a big uplift from x86-64-v3 libraries and when combined with the other optimizations we're getting an uplift in performance of around ~16% at the cost of close to thrice the installed package size.

+

Partial Profiling

+

Once again we see that PGO regresses performance hard, however, that smaller size is giving a good hint! We already know that the profiling workload we gave it isn't very comprehensive due to the bunch of -Wmissing-profile warnings we get during the optimized build. By default, PGO will aggressively inline and apply additional optimizations to code that's part of the profiling workload while everything else will be optimized for size. The idea being, hot-path code is fast and code that doesn't matter is small. However, what happens when you can't craft a comprehensive workload, as seems to be the case here? Luckily GCC has a flag for exactly that -fprofile-partial-training. GCC docs state that:

In some cases it is not practical to train all possible hot paths in the program. (For example, program may contain functions specific for a given hardware and training may not cover all hardware configurations program is run on.) With -fprofile-partial-training profile feedback will be ignored for all functions not executed during the train run leading them to be optimized as if they were compiled without profile feedback. This leads to better performance when train run is not representative but also leads to significantly bigger code.

-

Okay, let's try it out, all we need to do is specify in our package.yml recipe.

-
environment: |
if [[ -n ${PGO_USE_BUILD} ]]; then
export CFLAGS="${CFLAGS} -fprofile-partial-training"
export CXXFLAGS="${CXXFLAGS} -fprofile-partial-training"
fi
+

Okay, let's try it out, all we need to do is specify in our package.yml recipe.

+
environment: |
if [[ -n ${PGO_USE_BUILD} ]]; then
export CFLAGS="${CFLAGS} -fprofile-partial-training"
export CXXFLAGS="${CXXFLAGS} -fprofile-partial-training"
fi

And the results:

-
OptimizationDecodeSize
Speed + LTO + x86-64-v312.3 ms3.17 MB
Speed + LTO + x86-64-v3 + Partial PGO12.5 ms3.13 MB
-

Well, it was worth a try. This highlights how useless PGO can be when you don't or can't provide it a good workload. Interestingly, we don't get the size bloat that was promised, in fact, the opposite.

+
OptimizationDecodeSize
Speed + LTO + x86-64-v312.3 ms3.17 MB
Speed + LTO + x86-64-v3 + Partial PGO12.5 ms3.13 MB
+

Well, it was worth a try. This highlights how useless PGO can be when you don't or can't provide it a good workload. Interestingly, we don't get the size bloat that was promised, in fact, the opposite.

Final libwebp Results

-
BenchmarkTime BeforeTime AfterSize BeforeSize After
"dwebp ~/3.webp -yuv -o /dev/null"14.5 ms12.3 ms1.33 MB3.17 MB
"cwebp ~/PNG_Test.png -o /dev/null"1.399 s1.313 s----
-

In the end, we get a very healthy ~16% improvement in decoding from a .webp to .yuv file. As well as a respectable 6% improvement in encoding from a .png to .webp file. However, the increased package size is very unfortunate. It's possible to tweak the x86-64-v3 build and only ship the libs that actually improve performance in order to get the installed size back to an acceptable level.

-

"Next-Generation" Side Quest

+
BenchmarkTime BeforeTime AfterSize BeforeSize After
"dwebp ~/3.webp -yuv -o /dev/null"14.5 ms12.3 ms1.33 MB3.17 MB
"cwebp ~/PNG_Test.png -o /dev/null"1.399 s1.313 s----
+

In the end, we get a very healthy ~16% improvement in decoding from a .webp to .yuv file. As well as a respectable 6% improvement in encoding from a .png to .webp file. However, the increased package size is very unfortunate. It's possible to tweak the x86-64-v3 build and only ship the libs that actually improve performance in order to get the installed size back to an acceptable level.

+

"Next-Generation" Side Quest

Now, you probably remember earlier due to our unrepresentative benchmark we found out that libpng is getting highly bottlenecked by libz.so. This now seems like a perfect opportunity to take a look at zlib and circle-back to our original benchmark that we were using.

-

Zlib is widely employed throughout the ecosystem and, as such you'd think it would be highly-optimized for performance. However, that isn't really the case. Zlib is written in an old-fashioned way of C and tries to be extremely portable; supporting dozens of systems that have fallen out of common use. As such, it's hard to apply architecture specific optimizations that wouldn't break some old system or without introducing code spaghetti. There have been a couple of attempts to merge AArch64 and x86_64 optimizations into the canonical zlib library without success.

-

However, there is some light in this tunnel as various forks of zlib having been popping up, applying new optimizations on top of zlib. The most promising of these looks be to zlib-ng. When built in compatible mode, it promises to be API compatible with canonical zlib and tries to be as ABI compatible as possible.

-

Let's just go for it, replacing Solus' zlib package with zlib-ng built in compatible mode. It's a bit scary due to how integral zlib is in a typical Linux install, but, how hard could it be?

-

I Zee a Purty lil' Package

-

Well that was simple. Here's what our zlib-ng package.yml recipe looks like.

-
name       : zlib
version : 2.1.5
release : 28
source :
- https://github.com/zlib-ng/zlib-ng/archive/refs/tags/2.1.5.tar.gz : 3f6576971397b379d4205ae5451ff5a68edf6c103b2f03c4188ed7075fbb5f04
homepage : https://github.com/zlib-ng/zlib-ng
license : ZLIB
component : system.base
summary : zlib replacement with optimizations for next generation systems.
description:
- A zlib data compression library for the next generation systems. ABI/API compatible mode.
devel : yes
emul32 : yes
setup : |
%cmake_ninja \
-DZLIB_COMPAT=ON \
-DWITH_GTEST=OFF \
-DBUILD_SHARED_LIBS=ON \
-DINSTALL_LIB_DIR=%libdir%
build : |
%ninja_build
install : |
%ninja_install
check : |
%ninja_check
-

After building it, all the files seem to be in the right place and the test suite is passing. Let's just install it overwriting our canonical zlib package and hope our system doesn't die... I think the word is YOLO.

-
$ hyperfine "dwebp ~/3.webp -o /dev/null"
Benchmark 1: dwebp ~/3.webp -o /dev/null
Time (mean ± σ): 198.6 ms ± 2.3 ms [User: 194.3 ms, System: 3.6 ms]
Range (min … max): 196.3 ms … 203.3 ms 14 runs
$ sudo eopkg it zlib-2.1.5-28-1-x86_64.eopkg
...
$ $ hyperfine "dwebp ~/3.webp -o /dev/null"
Benchmark 1: dwebp ~/3.webp -o /dev/null
Time (mean ± σ): 87.6 ms ± 0.7 ms [User: 84.7 ms, System: 2.6 ms]
Range (min … max): 86.5 ms … 88.7 ms 33 runs
+

Zlib is widely employed throughout the ecosystem and, as such you'd think it would be highly-optimized for performance. However, that isn't really the case. Zlib is written in an old-fashioned way of C and tries to be extremely portable; supporting dozens of systems that have fallen out of common use. As such, it's hard to apply architecture specific optimizations that wouldn't break some old system or without introducing code spaghetti. There have been a couple of attempts to merge AArch64 and x86_64 optimizations into the canonical zlib library without success.

+

However, there is some light in this tunnel as various forks of zlib having been popping up, applying new optimizations on top of zlib. The most promising of these looks be to zlib-ng. When built in compatible mode, it promises to be API compatible with canonical zlib and tries to be as ABI compatible as possible.

+

Let's just go for it, replacing Solus' zlib package with zlib-ng built in compatible mode. It's a bit scary due to how integral zlib is in a typical Linux install, but, how hard could it be?

+

I Zee a Purty lil' Package

+

Well that was simple. Here's what our zlib-ng package.yml recipe looks like.

+
name       : zlib
version : 2.1.5
release : 28
source :
- https://github.com/zlib-ng/zlib-ng/archive/refs/tags/2.1.5.tar.gz : 3f6576971397b379d4205ae5451ff5a68edf6c103b2f03c4188ed7075fbb5f04
homepage : https://github.com/zlib-ng/zlib-ng
license : ZLIB
component : system.base
summary : zlib replacement with optimizations for next generation systems.
description:
- A zlib data compression library for the next generation systems. ABI/API compatible mode.
devel : yes
emul32 : yes
setup : |
%cmake_ninja \
-DZLIB_COMPAT=ON \
-DWITH_GTEST=OFF \
-DBUILD_SHARED_LIBS=ON \
-DINSTALL_LIB_DIR=%libdir%
build : |
%ninja_build
install : |
%ninja_install
check : |
%ninja_check
+

After building it, all the files seem to be in the right place and the test suite is passing. Let's just install it overwriting our canonical zlib package and hope our system doesn't die... I think the word is YOLO.

+
$ hyperfine "dwebp ~/3.webp -o /dev/null"
Benchmark 1: dwebp ~/3.webp -o /dev/null
Time (mean ± σ): 198.6 ms ± 2.3 ms [User: 194.3 ms, System: 3.6 ms]
Range (min … max): 196.3 ms … 203.3 ms 14 runs
$ sudo eopkg it zlib-2.1.5-28-1-x86_64.eopkg
...
$ $ hyperfine "dwebp ~/3.webp -o /dev/null"
Benchmark 1: dwebp ~/3.webp -o /dev/null
Time (mean ± σ): 87.6 ms ± 0.7 ms [User: 84.7 ms, System: 2.6 ms]
Range (min … max): 86.5 ms … 88.7 ms 33 runs

Well, hot diggity damn. Swapping out the zlib package for a more performant variant has instantly more than halved(!!) our decoding time.

-

We need to find a more contained libpng benchmark here that removes the libwebp stuff to really confirm the findings here. After some sleuthing the libpng source repository has a pngtopng.c file we can compile to use the system libpng library.

-

Changing the header from #include "../../png.h" to #include <png.h> then running gcc -Ofast pngtopng.c -lpng16 -o pngtopng to compile it, we have a libpng benchmark. We can reuse our test .png file from earlier. Ending up with: ./pngtopng ~/PNG_Test.png /dev/null for our benchmark.

-
LibraryTime
zlib (canonical)1.464 s
zlib-ng (compat)896.6 ms
+

We need to find a more contained libpng benchmark here that removes the libwebp stuff to really confirm the findings here. After some sleuthing the libpng source repository has a pngtopng.c file we can compile to use the system libpng library.

+

Changing the header from #include "../../png.h" to #include <png.h> then running gcc -Ofast pngtopng.c -lpng16 -o pngtopng to compile it, we have a libpng benchmark. We can reuse our test .png file from earlier. Ending up with: ./pngtopng ~/PNG_Test.png /dev/null for our benchmark.

+
LibraryTime
zlib (canonical)1.464 s
zlib-ng (compat)896.6 ms

Well. This is pretty much inline with our flawed dwebp benchmark from earlier. Swapping out zlib almost halves libpng decoding time.

-

Squeezing more from zlib-ng

-

However, we're not done yet. We still have our compiler optimizations available to us to squeeze more performance from zlib-ng.

-
OptimizationDecodeSize
Baseline896.6 ms141.00 KB
Speed883.6 ms182.00 KB
LTO892.7 ms133.00 KB
PGO894.6 ms141.00 KB
x86-64-v3892.5 ms295.00 KB
Speed + LTO882.6 ms170.00 KB
Speed + LTO + PGO + x86-64-v3882.5 ms250.00 KB
-

It looks like in this case the simple speed + LTO optimizations is the way to go. Speed gives the majority of the speedup but LTO helps bring back down the package size again. However, it's only a 1.5% improvement from baseline for this benchmark. We can always re-benchmark it later, testing zlib performance more directly instead of via libpng. It shows how good a job the zlib-ng developers have done that it's so performant right out of the gate.

+

Squeezing more from zlib-ng

+

However, we're not done yet. We still have our compiler optimizations available to us to squeeze more performance from zlib-ng.

+
OptimizationDecodeSize
Baseline896.6 ms141.00 KB
Speed883.6 ms182.00 KB
LTO892.7 ms133.00 KB
PGO894.6 ms141.00 KB
x86-64-v3892.5 ms295.00 KB
Speed + LTO882.6 ms170.00 KB
Speed + LTO + PGO + x86-64-v3882.5 ms250.00 KB
+

It looks like in this case the simple speed + LTO optimizations is the way to go. Speed gives the majority of the speedup but LTO helps bring back down the package size again. However, it's only a 1.5% improvement from baseline for this benchmark. We can always re-benchmark it later, testing zlib performance more directly instead of via libpng. It shows how good a job the zlib-ng developers have done that it's so performant right out of the gate.

Final Words

-

We've shown the process of how a package can be optimized in Solus, through the failings and wins here I hope some good tips and tricks were provided in avoiding common pitfalls. Additional benchmarking strategies such as BOLT or Polly optimizations were not discussed and it'll be good material for a future blog post.

+

We've shown the process of how a package can be optimized in Solus, through the failings and wins here I hope some good tips and tricks were provided in avoiding common pitfalls. Additional benchmarking strategies such as BOLT or Polly optimizations were not discussed and it'll be good material for a future blog post.

Some other important things such as tweaking the system for benchmarking in order to get representative and consistent results were also not discussed. This is especially important in power budget constrained systems such as laptops and worth bearing in mind.

-

Regardless, I hope the story of how libwebp was optimized for was entertaining and some things were learnt for anyone looking to optimize packages in Solus for the future.

- - \ No newline at end of file +

Regardless, I hope the story of how libwebp was optimized for was entertaining and some things were learnt for anyone looking to optimize packages in Solus for the future.

\ No newline at end of file diff --git a/blog/tags/3/index.html b/blog/tags/3/index.html index a96c9c79d..a7a10d838 100644 --- a/blog/tags/3/index.html +++ b/blog/tags/3/index.html @@ -1,14 +1 @@ - - - - - -One post tagged with "3" | Solus Help Center - - - - - -

One post tagged with "3"

View All Tags
- - \ No newline at end of file +One post tagged with "3" | Solus Help Center

One post tagged with "3"

View All Tags
\ No newline at end of file diff --git a/blog/tags/clang/index.html b/blog/tags/clang/index.html index 927d73e43..247a714be 100644 --- a/blog/tags/clang/index.html +++ b/blog/tags/clang/index.html @@ -1,14 +1 @@ - - - - - -One post tagged with "clang" | Solus Help Center - - - - - -

One post tagged with "clang"

View All Tags
- - \ No newline at end of file +One post tagged with "clang" | Solus Help Center

One post tagged with "clang"

View All Tags
\ No newline at end of file diff --git a/blog/tags/cleanup/index.html b/blog/tags/cleanup/index.html index 321ee795c..9f57db84f 100644 --- a/blog/tags/cleanup/index.html +++ b/blog/tags/cleanup/index.html @@ -1,14 +1 @@ - - - - - -One post tagged with "cleanup" | Solus Help Center - - - - - -

One post tagged with "cleanup"

View All Tags
- - \ No newline at end of file +One post tagged with "cleanup" | Solus Help Center

One post tagged with "cleanup"

View All Tags
\ No newline at end of file diff --git a/blog/tags/devlog/index.html b/blog/tags/devlog/index.html index 2c5dde52e..b3d8add41 100644 --- a/blog/tags/devlog/index.html +++ b/blog/tags/devlog/index.html @@ -1,20 +1,7 @@ - - - - - -4 posts tagged with "devlog" | Solus Help Center - - - - - -

4 posts tagged with "devlog"

View All Tags

Don't call me MATE, pal!

· 3 min read
David Harder
Solus Staff

Back in our 4.4 release post we announced that Solus would stop shipping a MATE ISO, mostly because MATE showed no signs of moving away from X11 and towards wayland. At the beginning of this year, we shipped our new XFCE ISO as a beta. And now we're getting ready to ship the Solus MATE Transition Tool to move existing users off of MATE.

eopkg is dead, long live eopkg

· 2 min read
David Harder
Solus Staff

Close watchers of our packages repository may have noticed some strange looking items:

+4 posts tagged with "devlog" | Solus Help Center

4 posts tagged with "devlog"

View All Tags

Don't call me MATE, pal!

· 3 min read
David Harder
Solus Staff

Back in our 4.4 release post we announced that Solus would stop shipping a MATE ISO, mostly because MATE showed no signs of moving away from X11 and towards wayland. At the beginning of this year, we shipped our new XFCE ISO as a beta. And now we're getting ready to ship the Solus MATE Transition Tool to move existing users off of MATE.

- - \ No newline at end of file +

It's a long story.

\ No newline at end of file diff --git a/blog/tags/eopkg/index.html b/blog/tags/eopkg/index.html index 44be80f73..9b2af33cc 100644 --- a/blog/tags/eopkg/index.html +++ b/blog/tags/eopkg/index.html @@ -1,19 +1,6 @@ - - - - - -One post tagged with "eopkg" | Solus Help Center - - - - - -

One post tagged with "eopkg"

View All Tags

eopkg is dead, long live eopkg

· 2 min read
David Harder
Solus Staff

Close watchers of our packages repository may have noticed some strange looking items:

+One post tagged with "eopkg" | Solus Help Center - - \ No newline at end of file +

It's a long story.

\ No newline at end of file diff --git a/blog/tags/firstpost/index.html b/blog/tags/firstpost/index.html index 707404e20..618889d2c 100644 --- a/blog/tags/firstpost/index.html +++ b/blog/tags/firstpost/index.html @@ -1,15 +1,2 @@ - - - - - -One post tagged with "firstpost" | Solus Help Center - - - - - -

One post tagged with "firstpost"

View All Tags
- - \ No newline at end of file +One post tagged with "firstpost" | Solus Help Center

One post tagged with "firstpost"

View All Tags
\ No newline at end of file diff --git a/blog/tags/glibc/index.html b/blog/tags/glibc/index.html index 59fd00a70..35d500a6d 100644 --- a/blog/tags/glibc/index.html +++ b/blog/tags/glibc/index.html @@ -1,14 +1 @@ - - - - - -One post tagged with "glibc" | Solus Help Center - - - - - -

One post tagged with "glibc"

View All Tags
- - \ No newline at end of file +One post tagged with "glibc" | Solus Help Center

One post tagged with "glibc"

View All Tags
\ No newline at end of file diff --git a/blog/tags/gnu/index.html b/blog/tags/gnu/index.html index ef7e86d29..a160a3075 100644 --- a/blog/tags/gnu/index.html +++ b/blog/tags/gnu/index.html @@ -1,14 +1 @@ - - - - - -One post tagged with "gnu" | Solus Help Center - - - - - -

One post tagged with "gnu"

View All Tags
- - \ No newline at end of file +One post tagged with "gnu" | Solus Help Center

One post tagged with "gnu"

View All Tags
\ No newline at end of file diff --git a/blog/tags/hello/index.html b/blog/tags/hello/index.html index 83c3f21c6..a65fd0d1d 100644 --- a/blog/tags/hello/index.html +++ b/blog/tags/hello/index.html @@ -1,15 +1,2 @@ - - - - - -One post tagged with "hello" | Solus Help Center - - - - - -

One post tagged with "hello"

View All Tags
- - \ No newline at end of file +One post tagged with "hello" | Solus Help Center

One post tagged with "hello"

View All Tags
\ No newline at end of file diff --git a/blog/tags/housekeeping/index.html b/blog/tags/housekeeping/index.html index 29c67e6b2..a15b0acc9 100644 --- a/blog/tags/housekeeping/index.html +++ b/blog/tags/housekeeping/index.html @@ -1,14 +1 @@ - - - - - -One post tagged with "housekeeping" | Solus Help Center - - - - - -

One post tagged with "housekeeping"

View All Tags
- - \ No newline at end of file +One post tagged with "housekeeping" | Solus Help Center

One post tagged with "housekeeping"

View All Tags
\ No newline at end of file diff --git a/blog/tags/hwcaps/index.html b/blog/tags/hwcaps/index.html index 249d1ef51..d05177588 100644 --- a/blog/tags/hwcaps/index.html +++ b/blog/tags/hwcaps/index.html @@ -1,14 +1 @@ - - - - - -One post tagged with "hwcaps" | Solus Help Center - - - - - -

One post tagged with "hwcaps"

View All Tags
- - \ No newline at end of file +One post tagged with "hwcaps" | Solus Help Center

One post tagged with "hwcaps"

View All Tags
\ No newline at end of file diff --git a/blog/tags/index.html b/blog/tags/index.html index 98097aac0..9baecd1b8 100644 --- a/blog/tags/index.html +++ b/blog/tags/index.html @@ -1,14 +1 @@ - - - - - -Tags | Solus Help Center - - - - - - - - \ No newline at end of file +Tags | Solus Help Center \ No newline at end of file diff --git a/blog/tags/llvm/index.html b/blog/tags/llvm/index.html index 25cbfefdc..ef8676c8d 100644 --- a/blog/tags/llvm/index.html +++ b/blog/tags/llvm/index.html @@ -1,14 +1 @@ - - - - - -One post tagged with "llvm" | Solus Help Center - - - - - -

One post tagged with "llvm"

View All Tags
- - \ No newline at end of file +One post tagged with "llvm" | Solus Help Center

One post tagged with "llvm"

View All Tags
\ No newline at end of file diff --git a/blog/tags/lto/index.html b/blog/tags/lto/index.html index ac7ccff8b..cdc5bc4a2 100644 --- a/blog/tags/lto/index.html +++ b/blog/tags/lto/index.html @@ -1,14 +1 @@ - - - - - -One post tagged with "lto" | Solus Help Center - - - - - -

One post tagged with "lto"

View All Tags
- - \ No newline at end of file +One post tagged with "lto" | Solus Help Center

One post tagged with "lto"

View All Tags
\ No newline at end of file diff --git a/blog/tags/mate/index.html b/blog/tags/mate/index.html index e1f7a949b..2e203e75f 100644 --- a/blog/tags/mate/index.html +++ b/blog/tags/mate/index.html @@ -1,14 +1 @@ - - - - - -One post tagged with "MATE" | Solus Help Center - - - - - -

One post tagged with "MATE"

View All Tags

Don't call me MATE, pal!

· 3 min read
David Harder
Solus Staff

Back in our 4.4 release post we announced that Solus would stop shipping a MATE ISO, mostly because MATE showed no signs of moving away from X11 and towards wayland. At the beginning of this year, we shipped our new XFCE ISO as a beta. And now we're getting ready to ship the Solus MATE Transition Tool to move existing users off of MATE.

- - \ No newline at end of file +One post tagged with "MATE" | Solus Help Center

One post tagged with "MATE"

View All Tags

Don't call me MATE, pal!

· 3 min read
David Harder
Solus Staff

Back in our 4.4 release post we announced that Solus would stop shipping a MATE ISO, mostly because MATE showed no signs of moving away from X11 and towards wayland. At the beginning of this year, we shipped our new XFCE ISO as a beta. And now we're getting ready to ship the Solus MATE Transition Tool to move existing users off of MATE.

\ No newline at end of file diff --git a/blog/tags/moss/index.html b/blog/tags/moss/index.html index bf33135cf..f352ef270 100644 --- a/blog/tags/moss/index.html +++ b/blog/tags/moss/index.html @@ -1,19 +1,6 @@ - - - - - -One post tagged with "moss" | Solus Help Center - - - - - -

One post tagged with "moss"

View All Tags

eopkg is dead, long live eopkg

· 2 min read
David Harder
Solus Staff

Close watchers of our packages repository may have noticed some strange looking items:

+One post tagged with "moss" | Solus Help Center - - \ No newline at end of file +

It's a long story.

\ No newline at end of file diff --git a/blog/tags/optimization/index.html b/blog/tags/optimization/index.html index 875a1e3d3..711d62cc1 100644 --- a/blog/tags/optimization/index.html +++ b/blog/tags/optimization/index.html @@ -1,14 +1 @@ - - - - - -One post tagged with "optimization" | Solus Help Center - - - - - -

One post tagged with "optimization"

View All Tags
- - \ No newline at end of file +One post tagged with "optimization" | Solus Help Center

One post tagged with "optimization"

View All Tags
\ No newline at end of file diff --git a/blog/tags/packaging/index.html b/blog/tags/packaging/index.html index ce1932a07..a778ad2ed 100644 --- a/blog/tags/packaging/index.html +++ b/blog/tags/packaging/index.html @@ -1,14 +1 @@ - - - - - -One post tagged with "packaging" | Solus Help Center - - - - - -

One post tagged with "packaging"

View All Tags
- - \ No newline at end of file +One post tagged with "packaging" | Solus Help Center

One post tagged with "packaging"

View All Tags
\ No newline at end of file diff --git a/blog/tags/pgo/index.html b/blog/tags/pgo/index.html index 79b12bc61..ee5c346b7 100644 --- a/blog/tags/pgo/index.html +++ b/blog/tags/pgo/index.html @@ -1,14 +1 @@ - - - - - -One post tagged with "pgo" | Solus Help Center - - - - - -

One post tagged with "pgo"

View All Tags
- - \ No newline at end of file +One post tagged with "pgo" | Solus Help Center

One post tagged with "pgo"

View All Tags
\ No newline at end of file diff --git a/blog/tags/solus/index.html b/blog/tags/solus/index.html index b5b9a5c5c..8ae1edd39 100644 --- a/blog/tags/solus/index.html +++ b/blog/tags/solus/index.html @@ -1,20 +1,7 @@ - - - - - -5 posts tagged with "solus" | Solus Help Center - - - - - -

5 posts tagged with "solus"

View All Tags

Don't call me MATE, pal!

· 3 min read
David Harder
Solus Staff

Back in our 4.4 release post we announced that Solus would stop shipping a MATE ISO, mostly because MATE showed no signs of moving away from X11 and towards wayland. At the beginning of this year, we shipped our new XFCE ISO as a beta. And now we're getting ready to ship the Solus MATE Transition Tool to move existing users off of MATE.

eopkg is dead, long live eopkg

· 2 min read
David Harder
Solus Staff

Close watchers of our packages repository may have noticed some strange looking items:

+5 posts tagged with "solus" | Solus Help Center

5 posts tagged with "solus"

View All Tags

Don't call me MATE, pal!

· 3 min read
David Harder
Solus Staff

Back in our 4.4 release post we announced that Solus would stop shipping a MATE ISO, mostly because MATE showed no signs of moving away from X11 and towards wayland. At the beginning of this year, we shipped our new XFCE ISO as a beta. And now we're getting ready to ship the Solus MATE Transition Tool to move existing users off of MATE.

- - \ No newline at end of file +

It's a long story.

\ No newline at end of file diff --git a/blog/tags/x-86-64-v-3/index.html b/blog/tags/x-86-64-v-3/index.html index e6179c0dc..4c4d0f274 100644 --- a/blog/tags/x-86-64-v-3/index.html +++ b/blog/tags/x-86-64-v-3/index.html @@ -1,14 +1 @@ - - - - - -One post tagged with "x86_64-v3" | Solus Help Center - - - - - -

One post tagged with "x86_64-v3"

View All Tags
- - \ No newline at end of file +One post tagged with "x86_64-v3" | Solus Help Center

One post tagged with "x86_64-v3"

View All Tags
\ No newline at end of file diff --git a/blog/welcome-solus-devlog-v1/index.html b/blog/welcome-solus-devlog-v1/index.html index 387f55d27..07a1f3a91 100644 --- a/blog/welcome-solus-devlog-v1/index.html +++ b/blog/welcome-solus-devlog-v1/index.html @@ -1,20 +1,7 @@ - - - - - -Welcome to the Solus Devlog | Solus Help Center - - - - - -

Welcome to the Solus Devlog

· One min read
Joey Riches
Solus Staff

Welcome to the Solus Development Log.

+Welcome to the Solus Devlog | Solus Help Center

Welcome to the Solus Devlog

· One min read
Joey Riches
Solus Staff

Welcome to the Solus Development Log.

The Solus Development Log will be used by Solus Staff and outside contributors to highlight wins and changes in Solus. Keep an eye on this space.

The Solus DevLog has been setup to facilitate improved communication with the outside world; wins, significant changes, as well as challenges, within Solus. Solus Staff and contributors are encouraged to use this space.

-

The DevLog has been setup as a separate entity to the Solus Blog to encourage more short form development content that doesn't require the same level of polish as an official blog post.

-

It is hoped that this will be used to help communicate what's going on in Solus such that our short-term and medium-term progress, goals, and ambitions are less of a black box to the outside world.

-

Additionally, we believe it will help provide context to any of our murmurings for any users who keep an eye on the getsolus GitHub organization page and the Solus Matrix channels.

-

Hope to see you back at this space soon with more content!

- - \ No newline at end of file +

The DevLog has been setup as a separate entity to the Solus Blog to encourage more short form development content that doesn't require the same level of polish as an official blog post.

+

It is hoped that this will be used to help communicate what's going on in Solus such that our short-term and medium-term progress, goals, and ambitions are less of a black box to the outside world.

+

Additionally, we believe it will help provide context to any of our murmurings for any users who keep an eye on the getsolus GitHub organization page and the Solus Matrix channels.

+

Hope to see you back at this space soon with more content!

\ No newline at end of file diff --git a/docs/category/advanced-configuration/index.html b/docs/category/advanced-configuration/index.html index 97e053942..8003d8d4d 100644 --- a/docs/category/advanced-configuration/index.html +++ b/docs/category/advanced-configuration/index.html @@ -1,14 +1 @@ - - - - - -Advanced Configuration | Solus Help Center - - - - - - - - \ No newline at end of file +Advanced Configuration | Solus Help Center \ No newline at end of file diff --git a/docs/category/camera/index.html b/docs/category/camera/index.html index ec74e6f7c..ac0129f41 100644 --- a/docs/category/camera/index.html +++ b/docs/category/camera/index.html @@ -1,14 +1 @@ - - - - - -Camera | Solus Help Center - - - - - - - - \ No newline at end of file +Camera | Solus Help Center \ No newline at end of file diff --git a/docs/category/compatibility/index.html b/docs/category/compatibility/index.html index 4e669068a..b7272daa3 100644 --- a/docs/category/compatibility/index.html +++ b/docs/category/compatibility/index.html @@ -1,14 +1 @@ - - - - - -Compatibility | Solus Help Center - - - - - - - - \ No newline at end of file +Compatibility | Solus Help Center \ No newline at end of file diff --git a/docs/category/contributing/index.html b/docs/category/contributing/index.html index f5978f309..0d9a8ef52 100644 --- a/docs/category/contributing/index.html +++ b/docs/category/contributing/index.html @@ -1,14 +1 @@ - - - - - -Contributing | Solus Help Center - - - - - - - - \ No newline at end of file +Contributing | Solus Help Center \ No newline at end of file diff --git a/docs/category/localization/index.html b/docs/category/localization/index.html index dc2e6b6b2..8a2b73e73 100644 --- a/docs/category/localization/index.html +++ b/docs/category/localization/index.html @@ -1,14 +1 @@ - - - - - -Localization | Solus Help Center - - - - - - - - \ No newline at end of file +Localization | Solus Help Center \ No newline at end of file diff --git a/docs/category/mobile/index.html b/docs/category/mobile/index.html index 7f05ac325..3f8eb2dcf 100644 --- a/docs/category/mobile/index.html +++ b/docs/category/mobile/index.html @@ -1,14 +1 @@ - - - - - -Mobile | Solus Help Center - - - - - - - - \ No newline at end of file +Mobile | Solus Help Center \ No newline at end of file diff --git a/docs/category/networking/index.html b/docs/category/networking/index.html index 8e8a6813f..578b9293b 100644 --- a/docs/category/networking/index.html +++ b/docs/category/networking/index.html @@ -1,14 +1 @@ - - - - - -Networking | Solus Help Center - - - - - - - - \ No newline at end of file +Networking | Solus Help Center \ No newline at end of file diff --git a/docs/category/package-management/index.html b/docs/category/package-management/index.html index 2fae31bb8..48a59c0b8 100644 --- a/docs/category/package-management/index.html +++ b/docs/category/package-management/index.html @@ -1,14 +1 @@ - - - - - -Package Management | Solus Help Center - - - - - - - - \ No newline at end of file +Package Management | Solus Help Center \ No newline at end of file diff --git a/docs/category/peripherals/index.html b/docs/category/peripherals/index.html index 530a55740..e95229041 100644 --- a/docs/category/peripherals/index.html +++ b/docs/category/peripherals/index.html @@ -1,14 +1 @@ - - - - - -Peripherals | Solus Help Center - - - - - - - - \ No newline at end of file +Peripherals | Solus Help Center \ No newline at end of file diff --git a/docs/category/procedures/index.html b/docs/category/procedures/index.html index e847e205f..d812ba072 100644 --- a/docs/category/procedures/index.html +++ b/docs/category/procedures/index.html @@ -1,14 +1 @@ - - - - - -Procedures | Solus Help Center - - - - - -
- - \ No newline at end of file +Procedures | Solus Help Center
\ No newline at end of file diff --git a/docs/category/quick-start/index.html b/docs/category/quick-start/index.html index be93c21cc..46d6749fc 100644 --- a/docs/category/quick-start/index.html +++ b/docs/category/quick-start/index.html @@ -1,14 +1 @@ - - - - - -Quick Start | Solus Help Center - - - - - - - - \ No newline at end of file +Quick Start | Solus Help Center \ No newline at end of file diff --git a/docs/category/software/index.html b/docs/category/software/index.html index 3d2ffbfdc..7810adec7 100644 --- a/docs/category/software/index.html +++ b/docs/category/software/index.html @@ -1,14 +1 @@ - - - - - -Software | Solus Help Center - - - - - - - - \ No newline at end of file +Software | Solus Help Center \ No newline at end of file diff --git a/docs/category/utilities/index.html b/docs/category/utilities/index.html index e09370abb..7d90101e3 100644 --- a/docs/category/utilities/index.html +++ b/docs/category/utilities/index.html @@ -1,14 +1 @@ - - - - - -Utilities | Solus Help Center - - - - - - - - \ No newline at end of file +Utilities | Solus Help Center \ No newline at end of file diff --git a/docs/category/virtualization/index.html b/docs/category/virtualization/index.html index b91701c94..11de47feb 100644 --- a/docs/category/virtualization/index.html +++ b/docs/category/virtualization/index.html @@ -1,14 +1 @@ - - - - - -Virtualization | Solus Help Center - - - - - - - - \ No newline at end of file +Virtualization | Solus Help Center \ No newline at end of file diff --git a/docs/category/web/index.html b/docs/category/web/index.html index b467d8073..77e0e956b 100644 --- a/docs/category/web/index.html +++ b/docs/category/web/index.html @@ -1,14 +1 @@ - - - - - -Web | Solus Help Center - - - - - - - - \ No newline at end of file +Web | Solus Help Center \ No newline at end of file diff --git a/docs/packaging/advanced-config/eopkg-configuration/index.html b/docs/packaging/advanced-config/eopkg-configuration/index.html index 0b89bc902..f20631d96 100644 --- a/docs/packaging/advanced-config/eopkg-configuration/index.html +++ b/docs/packaging/advanced-config/eopkg-configuration/index.html @@ -1,24 +1,11 @@ - - - - - -Eopkg Configuration | Solus Help Center - - - - - -

Eopkg Configuration

+Eopkg Configuration | Solus Help Center

Eopkg Configuration

The eopkg configuration file changes how eopkg works. The first section in the config has settings for the process of building a package. The second section allows you to configure the directories that eopkg uses for various operations. Lastly, the [general] section contains settings for the general operation of eopkg.

-

Copying the default configuration

-

Solus aims to be a stateless operating system, so the default configuration file for eopkg is saved to /usr/share/defaults/eopkg/eopkg.conf. To modify the configuration, you'll have to start by copying the default configuration file into /etc/eopkg so it will override the default file:

-
sudo mkdir -p /etc/eopkg && sudo cp /usr/share/defaults/eopkg/eopkg.conf /etc/eopkg/eopkg.conf
+

Copying the default configuration

+

Solus aims to be a stateless operating system, so the default configuration file for eopkg is saved to /usr/share/defaults/eopkg/eopkg.conf. To modify the configuration, you'll have to start by copying the default configuration file into /etc/eopkg so it will override the default file:

+
sudo mkdir -p /etc/eopkg && sudo cp /usr/share/defaults/eopkg/eopkg.conf /etc/eopkg/eopkg.conf

Once the file has been copied, you can edit it with your text editor of choice.

-

Notable keys

-

Most keys in the config you'll probably want to leave untouched. However, some are useful to know about:

-
KeyDescriptionValues
generateDebugWhether or not debug symbol subpackages will be generatedTrue / False
jobsHow many building jobs to use when compiling the sourceauto / number
retry_attemptsHow many times to retry downloading a package during installnumber
-

Restoring defaults

-

If at any time you want to go back to the default configuration, simply remove the config file in /etc/eopkg.

- - \ No newline at end of file +

Notable keys

+

Most keys in the config you'll probably want to leave untouched. However, some are useful to know about:

+
KeyDescriptionValues
generateDebugWhether or not debug symbol subpackages will be generatedTrue / False
jobsHow many building jobs to use when compiling the sourceauto / number
retry_attemptsHow many times to retry downloading a package during installnumber
+

Restoring defaults

+

If at any time you want to go back to the default configuration, simply remove the config file in /etc/eopkg.

\ No newline at end of file diff --git a/docs/packaging/advanced-config/local-repository/index.html b/docs/packaging/advanced-config/local-repository/index.html index aeab4f618..b5747338b 100644 --- a/docs/packaging/advanced-config/local-repository/index.html +++ b/docs/packaging/advanced-config/local-repository/index.html @@ -1,37 +1,26 @@ - - - - - -Local Repository | Solus Help Center - - - - - -

Packaging using a local repository

+Local Repository | Solus Help Center

Packaging using a local repository

This guide walks you through the steps necessary to tell solbuild how to use your locally built .eopkg files that are not yet in the Solus repository.

-
note

It is not necessary to use a local repository to test most package submissions. The easier and recommended way is to install the .eopkg files created when a package is built. This procedure is intended for use with stack upgrades, rebuilds, or new packages that need new dependencies that are not yet in the repository.

-

We assume you have worked through the packaging material for creating a package with solbuild.

-

Install the local profile

-
sudo eopkg install solbuild-config-local-unstable
-

You will also need to ensure that your repository is fully up to date. See Update Your Development Environment

-

Using the local repository

+
note

It is not necessary to use a local repository to test most package submissions. The easier and recommended way is to install the .eopkg files created when a package is built. This procedure is intended for use with stack upgrades, rebuilds, or new packages that need new dependencies that are not yet in the repository.

+

We assume you have worked through the packaging material for creating a package with solbuild.

+

Install the local profile

+
sudo eopkg install solbuild-config-local-unstable
+

You will also need to ensure that your repository is fully up to date. See Update Your Development Environment

+

Using the local repository

The local repository index and any local eopkg files are stored in /var/lib/solbuild/local/

-

Copying .eopkg files to the local repository

+

Copying .eopkg files to the local repository

To use your locally built .eopkg package files as dependencies for another package, you must copy the regular package files, and any accompanying -devel package files to the /var/lib/solbuild/local local repository directory.

For example, building the package libcmis produces the packages libcmis and libcmis-devel. Both should be copied to the local repository to build other packages against libcmis.

To copy all .eopkg files within a directory to the local repository, use the following command:

-
sudo cp -v *.eopkg /var/lib/solbuild/local
-

Listing locally built eopkg files

+
sudo cp -v *.eopkg /var/lib/solbuild/local
+

Listing locally built eopkg files

Use this to list all index and eopkg files in the local repository:

-
go-task list-local
-

Using the local repository to build a package

+
go-task list-local
+

Using the local repository to build a package

With the .eopkg files now present in the local repository, you can use them to build a package by running go-task build-local, rather than just go-task, and solbuild will prefer your packages over packages found in the Solus repository.

Every time you run go-task build-local, all .eopkg files in the local repository will be re-indexed.

-

A streamlined local repository workflow for stack updates

+

A streamlined local repository workflow for stack updates

If you know ahead of time that you are going to need to put the package files from the current build into the local repository as dependencies for subsequent builds, you can use:

-
go-task build-localcp
+
go-task build-localcp

The build-localcp task will:

  • Build the current package against any existing packages in your local repository.
  • @@ -39,55 +28,53 @@

    Best practices when working with a solbuild local repository

    +

    Best practices when working with a solbuild local repository

    There are some important things to know when working with local repositories, as they may lead to issues later on.

      -
    • solbuild will use your version of a package from the local repository regardless of whether there's a higher release in the Solus repository. Therefore: +
    • solbuild will use your version of a package from the local repository regardless of whether there's a higher release in the Solus repository. Therefore:
      • Only use the build-local or build-localcp tasks when required.
      • Old packages in the local repository can be removed with the clean-local task: -
        go-task clean-local
        +
        go-task clean-local
        Note that the clean-local task will automatically re-index the (now empty) local repository.
      • If a package is already installed in the solbuild image, the release number of the updated version must be higher for it to be installed and used as a dependency at build time.
    -

    Installing packages from the local repository index

    +

    Installing packages from the local repository index

    eopkg supports resolving packages from more than one repository. This can be used to configure eopkg to prefer installing local repository packages over packages from the Solus repository.

    This requires an existing local repository index. If you have used the command go-task build-local, then an index was created automatically. Otherwise, you must create one.

    -

    Creating or updating the local repository index

    +

    Creating or updating the local repository index

    To generate or refresh the eopkg index in /var/lib/solbuild/local, use the following command:

    -
    go-task build-localindex
    -

    Or, if you have our helper functions set up, you get the same result by running:

    -
    localrepo_reindex
    -

    Keep in mind that the index needs to be refreshed whenever you add or remove locally built packages to your local repository. Otherwise, eopkg won't know that new packages are available or have been removed from the local repository.

    -

    Package resolution priority in eopkg

    +
    go-task build-localindex
    +

    Or, if you have our helper functions set up, you get the same result by running:

    +
    localrepo_reindex
    +

    Keep in mind that the index needs to be refreshed whenever you add or remove locally built packages to your local repository. Otherwise, eopkg won't know that new packages are available or have been removed from the local repository.

    +

    Package resolution priority in eopkg

    eopkg will always prefer packages from the topmost repository listed with eopkg lr.

    In other words, if a package exists both in the local repository and the Solus repository, eopkg will only consider the package from the first repository listed with eopkg lr regardless of its release number.

    -

    Adding the local repository index to the eopkg repository database

    +

    Adding the local repository index to the eopkg repository database

    The easiest way to add the local repository index to the list of repositories known to eopkg, in the correct order, is to add the local repository and then re-add the official Solus repository:

      -
    1. First, let's list the repositories currently known to eopkg with eopkg lr. This should produce output similar to:
    2. +
    3. First, let's list the repositories currently known to eopkg with eopkg lr. This should produce output similar to:
    -
    Solus [active]
    https://cdn.getsol.us/repo/unstable/eopkg-index.xml.xz
    -
      +
      Solus [active]
      https://cdn.getsol.us/repo/unstable/eopkg-index.xml.xz
      +
      1. Now the repositories need to be added to account for the desired dependency resolution order:
      -
      sudo eopkg ar Local /var/lib/solbuild/local/eopkg-index.xml.xz
      sudo eopkg ar Solus https://cdn.getsol.us/repo/unstable/eopkg-index.xml.xz
      +
      sudo eopkg ar Local /var/lib/solbuild/local/eopkg-index.xml.xz
      sudo eopkg ar Solus https://cdn.getsol.us/repo/unstable/eopkg-index.xml.xz

      This should yield output similar to:

      -
      $ sudo eopkg ar Local /var/lib/solbuild/local/eopkg-index.xml.xz
      Repo Local added to system.
      Updating repository: Local
      Package database updated.
      $ sudo eopkg ar Solus https://cdn.getsol.us/repo/unstable/eopkg-index.xml.xz
      Repo already present with name Solus and same URL. Removing first.
      Repo Solus added to system.
      Updating repository: Solus
      eopkg-index.xml.xz.sha1sum (40.0 B)100% 765.61 KB/s [00:00:00] [complete]
      eopkg-index.xml.xz (2.1 MB)100% 914.38 KB/s [00:00:01] [complete]
      Package database updated.
      -
        +
        $ sudo eopkg ar Local /var/lib/solbuild/local/eopkg-index.xml.xz
        Repo Local added to system.
        Updating repository: Local
        Package database updated.
        $ sudo eopkg ar Solus https://cdn.getsol.us/repo/unstable/eopkg-index.xml.xz
        Repo already present with name Solus and same URL. Removing first.
        Repo Solus added to system.
        Updating repository: Solus
        eopkg-index.xml.xz.sha1sum (40.0 B)100% 765.61 KB/s [00:00:00] [complete]
        eopkg-index.xml.xz (2.1 MB)100% 914.38 KB/s [00:00:01] [complete]
        Package database updated.
        +
        1. Check that the dependency resolution order is correct so that packages from the local solbuild repository are preferred over the upstream Solus repository.

        eopkg lr should yield output similar to:

        -
        $ eopkg lr
        Local [active]
        /var/lib/solbuild/local/eopkg-index.xml.xz
        Solus [active]
        https://cdn.getsol.us/repo/unstable/eopkg-index.xml.xz
        -

        Disabling the local solbuild repository in eopkg

        -

        To reset the system to use only packages from the official Solus repository, disable the "Local" eopkg repository using the command sudo eopkg disable-repo Local.

        +
        $ eopkg lr
        Local [active]
        /var/lib/solbuild/local/eopkg-index.xml.xz
        Solus [active]
        https://cdn.getsol.us/repo/unstable/eopkg-index.xml.xz
        +

        Disabling the local solbuild repository in eopkg

        +

        To reset the system to use only packages from the official Solus repository, disable the "Local" eopkg repository using the command sudo eopkg disable-repo Local.

        The output should look similar to:

        -
        $ sudo eopkg disable-repo Local
        $ sudo eopkg lr
        Local [inactive]
        /var/lib/solbuild/local/eopkg-index.xml.xz
        Solus [active]
        https://cdn.getsol.us/repo/unstable/eopkg-index.xml.xz
        -

        The "Local" eopkg repository can be re-enabled with sudo eopkg enable-repo Local.

        -
        $ sudo eopkg enable-repo Local
        $ sudo eopkg lr
        Local [active]
        /var/lib/solbuild/local/eopkg-index.xml.xz
        Solus [active]
        https://cdn.getsol.us/repo/unstable/eopkg-index.xml.xz
        -

        Closing thoughts

        -

        Congratulations on making it this far! Your system should now be ready for convenient deployment and testing of locally built packages.

- - \ No newline at end of file +
$ sudo eopkg disable-repo Local
$ sudo eopkg lr
Local [inactive]
/var/lib/solbuild/local/eopkg-index.xml.xz
Solus [active]
https://cdn.getsol.us/repo/unstable/eopkg-index.xml.xz
+

The "Local" eopkg repository can be re-enabled with sudo eopkg enable-repo Local.

+
$ sudo eopkg enable-repo Local
$ sudo eopkg lr
Local [active]
/var/lib/solbuild/local/eopkg-index.xml.xz
Solus [active]
https://cdn.getsol.us/repo/unstable/eopkg-index.xml.xz
+

Closing thoughts

+

Congratulations on making it this far! Your system should now be ready for convenient deployment and testing of locally built packages.

\ No newline at end of file diff --git a/docs/packaging/appstream-metainfo/index.html b/docs/packaging/appstream-metainfo/index.html index 22e7948a1..8780c3495 100644 --- a/docs/packaging/appstream-metainfo/index.html +++ b/docs/packaging/appstream-metainfo/index.html @@ -1,24 +1,13 @@ - - - - - -Appstream Metainfo | Solus Help Center - - - - - -

AppStream Metainfo

-
important

AppStream metainfo is required for all graphical application in Solus repository.

+Appstream Metainfo | Solus Help Center

AppStream Metainfo

+
important

AppStream metainfo is required for all graphical application in Solus repository.

AppStream allows upstream projects to define metadata about the components they provide using small XML files, metainfo files, which get installed into locations on the client system and are used by distributors to enhance their metadata.

-

AppStream metainfo become a requirement for all graphical application in Solus repository because software centers such as GNOME software and KDE Discover rely on it to display applications that are available in repository. AppStream metainfo should be shipped by the upstream project, bundled in with its source, but sometimes upstream projects don't do so. In which case, packagers are required to add AppStream metainfo themselves.

-

Adding appstream metainfo to an existing package

+

AppStream metainfo become a requirement for all graphical application in Solus repository because software centers such as GNOME software and KDE Discover rely on it to display applications that are available in repository. AppStream metainfo should be shipped by the upstream project, bundled in with its source, but sometimes upstream projects don't do so. In which case, packagers are required to add AppStream metainfo themselves.

+

Adding appstream metainfo to an existing package

There are a few scenarios that Packagers might encounter:

-
NoScenarioSolution
1An application already provides appstream metainfoNothing to do
2An application contains appstream metainfo in the source package but we do not install itInstall the appstream metainfo to /usr/share/metainfo. Example: here
3An application doesn't contain appstream metainfo in the source package but it exists on FlathubBorrow and tweak the appstream metainfo from the Flathub repo. Encourage upstream project to add it to their source. Example: here
4An application doesn't provide appstream metainfo and it doesn't exist on flathubWrite the appstream metadata, submit it to upstream project. Example: here
5Appstream metainfo is provided but generation of it is failingSee here. Example: here.
+
NoScenarioSolution
1An application already provides appstream metainfoNothing to do
2An application contains appstream metainfo in the source package but we do not install itInstall the appstream metainfo to /usr/share/metainfo. Example: here
3An application doesn't contain appstream metainfo in the source package but it exists on FlathubBorrow and tweak the appstream metainfo from the Flathub repo. Encourage upstream project to add it to their source. Example: here
4An application doesn't provide appstream metainfo and it doesn't exist on flathubWrite the appstream metadata, submit it to upstream project. Example: here
5Appstream metainfo is provided but generation of it is failingSee here. Example: here.

AppStream metainfo is to be installed in the /usr/share/metainfo/ directory. It must be placed in the package which should be installed in order to get the software described by the respective metadata. This means that you might need to move the _.metainfo.xml or _.appdata.xml to the right (sub)package.

-

In case your AppStream metainfo is describing a desktop-application (you can tell by the XML root-node having a type="desktop-application" or type="desktop" attribute), the .appdata.xml file must be placed in the same package as the .desktop file already is, which (as above) must be the package containing the application itself.

-

Testing appstream metainfo

+

In case your AppStream metainfo is describing a desktop-application (you can tell by the XML root-node having a type="desktop-application" or type="desktop" attribute), the .appdata.xml file must be placed in the same package as the .desktop file already is, which (as above) must be the package containing the application itself.

+

Testing appstream metainfo

  • Clone the package repo

    @@ -36,7 +25,5 @@

    T

    Look in the example.xml.gz file to see if the appstream generation succeeded.

-

Other Info

-

A package must provide one appstream metainfo file, an icon file and a .desktop file for AppStream generation to succeed. However, there are exceptions to this. If an application provides more than one AppStream metainfo file then the package must be subpackaged for generation of all the appstream metainfo files to succeed.

- - \ No newline at end of file +

Other Info

+

A package must provide one appstream metainfo file, an icon file and a .desktop file for AppStream generation to succeed. However, there are exceptions to this. If an application provides more than one AppStream metainfo file then the package must be subpackaged for generation of all the appstream metainfo files to succeed.

\ No newline at end of file diff --git a/docs/packaging/creating-a-new-package/index.html b/docs/packaging/creating-a-new-package/index.html index efd4b844b..4761846fb 100644 --- a/docs/packaging/creating-a-new-package/index.html +++ b/docs/packaging/creating-a-new-package/index.html @@ -1,69 +1,58 @@ - - - - - -Creating a New Package | Solus Help Center - - - - - -

Creating a New Package

-

This page will take you through the steps required to build a new package for the Solus package repositories. For this example, we will use the command line utility tree, which is already packaged for Solus, but we will pretend like it's not.

-
note

Please look to see if an issue has been filed and accepted for the software or library you intend to package. If there is an existing request, please add a link to it in your pull request. Ex:

This PR resolves software request https://github.com/getsolus/packages/issues/123
-

Update an existing clone

-

If you do not have a local clone set up yet, see Prepare for Packaging

+Creating a New Package | Solus Help Center

Creating a New Package

+

This page will take you through the steps required to build a new package for the Solus package repositories. For this example, we will use the command line utility tree, which is already packaged for Solus, but we will pretend like it's not.

+
note

Please look to see if an issue has been filed and accepted for the software or library you intend to package. If there is an existing request, please add a link to it in your pull request. Ex:

This PR resolves software request https://github.com/getsolus/packages/issues/123
+

Update an existing clone

+

If you do not have a local clone set up yet, see Prepare for Packaging

Bring your local clone up to date. Run:

-
cd ~/solus-packages
git switch main
git pull
-

Create a new branch

-

It's always a good idea to switch to a new git branch before beginning packaging work. This helps to separate your work from any new changes made to the package repository, which will allow you to more easily rebase any changes if needed. To do so run:

-
git switch -c your-branch
-

Create the MAINTAINERS.md file

-

You must add a file called MAINTAINERS.md using the template in Maintainership. Solus uses this to track the primary maintainer(s) for each package.

-

Create the package.yml file

-

You will need a link to the most recent source tarball for this from the software's website.

+
cd ~/solus-packages
git switch main
git pull
+

Create a new branch

+

It's always a good idea to switch to a new git branch before beginning packaging work. This helps to separate your work from any new changes made to the package repository, which will allow you to more easily rebase any changes if needed. To do so run:

+
git switch -c your-branch
+

Create the MAINTAINERS.md file

+

You must add a file called MAINTAINERS.md using the template in Maintainership. Solus uses this to track the primary maintainer(s) for each package.

+

Create the package.yml file

+

You will need a link to the most recent source tarball for this from the software's website.

To create a skeleton package.yml file, use the go-task new command.

This command takes two arguments, in the following order:

  1. Package name
  2. Source URL
-
go-task new -- tree https://gitlab.com/OldManProgrammer/unix-tree/-/archive/2.1.1/unix-tree-2.1.1.tar.gz
+
go-task new -- tree https://gitlab.com/OldManProgrammer/unix-tree/-/archive/2.1.1/unix-tree-2.1.1.tar.gz

The go-task new command will automatically place the new package.yml in the proper directory according the package name, and will overwrite any existing package.yml file at that location.

-
note

You can, of course, create your package.yml file entirely from scratch, but go-task new will give you a better starting point. We recommend using the go-task new command.

+
note

You can, of course, create your package.yml file entirely from scratch, but go-task new will give you a better starting point. We recommend using the go-task new command.

Now you should have a package.yml file that looks something like this:

-
name       : unix-tree
version : 2.1.1
release : 1
source :
- https://gitlab.com/OldManProgrammer/unix-tree/-/archive/2.1.1/unix-tree-2.1.1.tar.gz : bcd2a0327ad40592a9c43e09a4d2ef834e6f17aa9a59012a5fb1007950b5eced
homepage : PLEASE FILL ME IN
license : GPL-2.0-or-later # CHECK ME
component : PLEASE FILL ME IN
summary : PLEASE FILL ME IN
description: |
PLEASE FILL ME IN
builddeps :
setup : |
%configure
build : |
%make
install : |
%make_install
-

The go-task new command has filled many fields for us, but not all of them will be right, and some of them need to be filled in. Refer to the package.yml page to see how each field should be used.

+
name       : unix-tree
version : 2.1.1
release : 1
source :
- https://gitlab.com/OldManProgrammer/unix-tree/-/archive/2.1.1/unix-tree-2.1.1.tar.gz : bcd2a0327ad40592a9c43e09a4d2ef834e6f17aa9a59012a5fb1007950b5eced
homepage : PLEASE FILL ME IN
license : GPL-2.0-or-later # CHECK ME
component : PLEASE FILL ME IN
summary : PLEASE FILL ME IN
description: |
PLEASE FILL ME IN
builddeps :
setup : |
%configure
build : |
%make
install : |
%make_install
+

The go-task new command has filled many fields for us, but not all of them will be right, and some of them need to be filled in. Refer to the package.yml page to see how each field should be used.

For this example, we need to fix the following:

  • The name needs to be tree, so update it.
  • -
  • The license is correct, so we remove the comment. License values need to match an "Identifier" in the SPDX License List.
  • +
  • The license is correct, so we remove the comment. License values need to match an "Identifier" in the SPDX License List.
  • Fill in homepage, component, summary, and description.
  • Remove builddeps. This package has no build dependencies beyond the ones already available for every package (the system.devel packages).
  • The setup step is not required, remove it.
  • -
  • In the install key, we can't use the %make_install macro for this package. The files are installed in their correct locations individually.
  • +
  • In the install key, we can't use the %make_install macro for this package. The files are installed in their correct locations individually.

After updating the file, it will now look like:

-
name       : tree
version : 2.1.1
release : 1
source :
- https://gitlab.com/OldManProgrammer/unix-tree/-/archive/2.1.1/unix-tree-2.1.1.tar.gz : bcd2a0327ad40592a9c43e09a4d2ef834e6f17aa9a59012a5fb1007950b5eced
homepage : https://gitlab.com/OldManProgrammer/unix-tree
license : GPL-2.0-or-later
component : system.utils
summary : list contents of directories in a tree-like format.
description: |
Tree is a recursive directory listing command that produces a depth indented listing of files, which is colorized ala dircolors if the LS_COLORS environment variable is set and output is to tty
build : |
%make
install : |
install -Dm00664 $workdir/doc/tree.1 $installdir/usr/share/man/man1/tree.1
install -Dm00755 $workdir/tree $installdir/usr/bin/tree
-

To read more about finding and including dependencies and other parts of package.yml please see Packaging Practices.

-

Understanding how to translate source code into a good package.yml file is the heart of packaging. If you are stumped, or have questions, ask for help in our Solus Packaging room on Matrix.

-

Build the package

-

Build the package using go-task. The default task will build the package against the Unstable repository, so you don't have to specify a task here.

-
go-task
+
name       : tree
version : 2.1.1
release : 1
source :
- https://gitlab.com/OldManProgrammer/unix-tree/-/archive/2.1.1/unix-tree-2.1.1.tar.gz : bcd2a0327ad40592a9c43e09a4d2ef834e6f17aa9a59012a5fb1007950b5eced
homepage : https://gitlab.com/OldManProgrammer/unix-tree
license : GPL-2.0-or-later
component : system.utils
summary : list contents of directories in a tree-like format.
description: |
Tree is a recursive directory listing command that produces a depth indented listing of files, which is colorized ala dircolors if the LS_COLORS environment variable is set and output is to tty
build : |
%make
install : |
install -Dm00664 $workdir/doc/tree.1 $installdir/usr/share/man/man1/tree.1
install -Dm00755 $workdir/tree $installdir/usr/bin/tree
+

To read more about finding and including dependencies and other parts of package.yml please see Packaging Practices.

+

Understanding how to translate source code into a good package.yml file is the heart of packaging. If you are stumped, or have questions, ask for help in our Solus Packaging room on Matrix.

+

Build the package

+

Build the package using go-task. The default task will build the package against the Unstable repository, so you don't have to specify a task here.

+
go-task

Once the build completes, your directory should now include the following files:

-
├── abi_used_libs
├── abi_used_symbols
├── package.yml
├── pspec_x86_64.xml
└── tree-2.1.1-1-1-x86_64.eopkg
+
├── abi_used_libs
├── abi_used_symbols
├── package.yml
├── pspec_x86_64.xml
└── tree-2.1.1-1-1-x86_64.eopkg

All these files except the .eopkg file(s) should be included in your pull request. You will remove the .eopkg files after testing the package.

-

Once your package has built successfully, you will need to test it.

-

Commit your changes

-

Check the changes in your files.

-

Add / remove files as necessary to the commit. Then, check your branch.

+

Once your package has built successfully, you will need to test it.

+

Commit your changes

+

Check the changes in your files.

+

Add / remove files as necessary to the commit. Then, check your branch.

Double-check that everything looks correct and all of the files have been staged before committing.

-
git status
+
git status

If all looks well, commit your changes.

-
git commit
-

Commit message format for new packages

-

git commit on an initialized repository will automatically open your editor with the correct template. +

git commit
+

Commit message format for new packages

+

git commit on an initialized repository will automatically open your editor with the correct template. Note that lines starting with a # will be ignored by Git and do not need to be removed.

There should be a summary line (with the package name), a blank line, and then the rest of the commit message.

    @@ -72,10 +61,8 @@
+
tree: Add at v2.1.1

**Summary**

Add the tree package, which recursively lists directories in a tree like manner.

Resolves getsolus/packages#issuenumber

Where issuenumber is the issue number of the package request.

-

For more information on suitable commit messages, please check the tooling central documentation.

+

For more information on suitable commit messages, please check the tooling central documentation.

If you need a change to depend on another change, mention it in the commit message too (use the full URL): Depends on https://github.com/getsolus/packages/issues/234

-

Next, you'll submit a pull request for review.

- - \ No newline at end of file +

Next, you'll submit a pull request for review.

\ No newline at end of file diff --git a/docs/packaging/git-basics/index.html b/docs/packaging/git-basics/index.html index 5ca29b4cf..74909d38b 100644 --- a/docs/packaging/git-basics/index.html +++ b/docs/packaging/git-basics/index.html @@ -1,40 +1,27 @@ - - - - - -Git Basics | Solus Help Center - - - - - -

Git Basics

-

Working with branches

+Git Basics | Solus Help Center

Git Basics

+

Working with branches

The recommended way to switch branches is git switch. To create a new branch use git switch -c.

-

Keeping your branch up to date with the main branch

-

If there any new changes to the repository whilst you are still working on your branch you need to sync your fork. +

Keeping your branch up to date with the main branch

+

If there any new changes to the repository whilst you are still working on your branch you need to sync your fork. Run git fetch, and git rebase origin/main to pull the changes in. You will need to fix any conflicts manually. You can check your branch against main with git diff origin/main..my-branch.

-

Adding files

+

Adding files

For every file you change or add, you must let git know about it: git add someFile

-

Removing files

+

Removing files

For files that need to be removed, you must do so using git: git rm someFile

-

Renaming files

+

Renaming files

Likewise, for renaming a file, you must do so via git: git mv someFile someFileName2

-

Check the changes in your files

-

It's a good idea to review the changes you have made to each file. This is to make sure you're committing what you intend and to make sure it looks good. Do this before adding changed files.

+

Check the changes in your files

+

It's a good idea to review the changes you have made to each file. This is to make sure you're committing what you intend and to make sure it looks good. Do this before adding changed files.

To diff them all at once, useful for small changes, use git diff. To diff each file one at a time run git diff filename on each one.

-

Commit your changes

+

Commit your changes

Check your branch

Get the status of the branch with git status. Make sure all the files you changed are staged, and that there are no untracked files. The git status should say your branch is clean.

-

Now that you've tested and reviewed your change, when you're happy with it, it's time to commit your changes with git commit.

-

Deleting your branch after a pull request is merged

+

Now that you've tested and reviewed your change, when you're happy with it, it's time to commit your changes with git commit.

+

Deleting your branch after a pull request is merged

Once your pull request has been accepted you can delete your working branches. First, change to the package directory, switch to the main branch, then delete your local and the remote branches.

-
cd ~/solus-packages
git switch main
git branch -D my-branch
git push -d origin my-branch
- - \ No newline at end of file +
cd ~/solus-packages
git switch main
git branch -D my-branch
git push -d origin my-branch
\ No newline at end of file diff --git a/docs/packaging/index.html b/docs/packaging/index.html index 237d15715..caf2c584f 100644 --- a/docs/packaging/index.html +++ b/docs/packaging/index.html @@ -1,40 +1,27 @@ - - - - - -Packaging Overview | Solus Help Center - - - - - -

Packaging Overview

+Packaging Overview | Solus Help Center

Packaging Overview

This is the overall workflow for creating or updating a package.

-

Development environment preparation

+

Development environment preparation

    -
  1. Prepare for Packaging
  2. -
  3. Review the requirements for the package.yml file.
  4. -
  5. Also review our Packaging Practices.
  6. +
  7. Prepare for Packaging
  8. +
  9. Review the requirements for the package.yml file.
  10. +
  11. Also review our Packaging Practices.
-

Prior to building a package

+

Prior to building a package

Please check the following:

    -
  • Search open package requests to see if there is one for the package. If there isn't an existing issue, go ahead and submit your pull request. If there is already a pull request, please check its status to avoid duplicating work.
  • +
  • Search open package requests to see if there is one for the package. If there isn't an existing issue, go ahead and submit your pull request. If there is already a pull request, please check its status to avoid duplicating work.
  • If you are submitting a pull request for the inclusion of software in the repo, the package has a corresponding package request that is accepted for inclusion or is a dependency of a package that has been accepted into the repository.
-

Building packages

+

Building packages

    -
  1. Update your development environment
  2. +
  3. Update your development environment
  4. Prepare the package directory and build the package
-
    -
  1. Test the Package
  2. -
  3. Submit a Pull Request for Review
  4. -
- - \ No newline at end of file +
    +
  1. Test the Package
  2. +
  3. Submit a Pull Request for Review
  4. +
\ No newline at end of file diff --git a/docs/packaging/monitoring.yml/index.html b/docs/packaging/monitoring.yml/index.html index 6b03ec58e..dc59b0f8a 100644 --- a/docs/packaging/monitoring.yml/index.html +++ b/docs/packaging/monitoring.yml/index.html @@ -1,66 +1,53 @@ - - - - - -Monitoring YAML | Solus Help Center - - - - - -

monitoring.yml

-
important

A monitoring.yml file is strongly suggested, but not yet required for Solus packages.

+Monitoring YAML | Solus Help Center

monitoring.yml

+
important

A monitoring.yml file is strongly suggested, but not yet required for Solus packages.

A monitoring.yml file is included in the Packages repository directory for every Solus package to enable automatic scanning for new releases and security advisories.

-

Checking for new releases is done by mapping the Solus package to an Anitya ID. Anitya is a Red Hat project, part of release-monitoring.org

-

Checking for security advisories (CVEs), is done by mapping the Solus package to a Common Platform Enumeration Name (CPE) from the National Vulnerability Database.

-

Adding monitoring.yml to an existing package

+

Checking for new releases is done by mapping the Solus package to an Anitya ID. Anitya is a Red Hat project, part of release-monitoring.org

+

Checking for security advisories (CVEs), is done by mapping the Solus package to a Common Platform Enumeration Name (CPE) from the National Vulnerability Database.

+

Adding monitoring.yml to an existing package

To add a monitoring.yml file to an existing package you can use the following go-task command to add a template file, starting from within the directory containing the package.yml for a given package:

-
go-task add-monitoring
+
go-task add-monitoring

Which will create a file with the following contents:

-
# Remove all comments before submitting, except CPE check date if none found
releases:
id: ~ # Check https://release-monitoring.org/
rss: ~ # For example https://github.com/PyO3/maturin/releases.atom
# No known CPE, checked 2024-04-24
security:
cpe: ~
-

You must, at minimum, fill out id and check if the package has an RSS feed and CPE name. If you can find no data for either of these fields, it must be set to ~.

-

systemd as an example

-

Let's look at the monitoring.yml file for systemd as an example.

+
# Remove all comments before submitting, except CPE check date if none found
releases:
id: ~ # Check https://release-monitoring.org/
rss: ~ # For example https://github.com/PyO3/maturin/releases.atom
# No known CPE, checked 2024-04-24
security:
cpe: ~
+

You must, at minimum, fill out id and check if the package has an RSS feed and CPE name. If you can find no data for either of these fields, it must be set to ~.

+

systemd as an example

+

Let's look at the monitoring.yml file for systemd as an example.

The systemd directory in the Packages repository looks like this:

-
systemd
├── monitoring.yml
├── package.yml
├── pspec_x86_64.xml
└── *lots of other files we can ignore*
+
systemd
├── monitoring.yml
├── package.yml
├── pspec_x86_64.xml
└── *lots of other files we can ignore*

The monitoring.yml looks like this:

-
releases:
id: 205088
ignore:
# We only update to the n-1 stable release. So for now we're only interested in 252.x updates
- "253.*"
rss: https://github.com/systemd/systemd-stable/tags.atom
security:
cpe:
- vendor: systemd_project
product: systemd
- vendor: freedesktop
product: systemd
ignore:
# A non-existent CVE added here as an example
- CVE-2022-55555
-

"releases" fields

+
releases:
id: 205088
ignore:
# We only update to the n-1 stable release. So for now we're only interested in 252.x updates
- "253.*"
rss: https://github.com/systemd/systemd-stable/tags.atom
security:
cpe:
- vendor: systemd_project
product: systemd
- vendor: freedesktop
product: systemd
ignore:
# A non-existent CVE added here as an example
- CVE-2022-55555
+

"releases" fields

Fields used to monitor for new versions.

-
FieldTypeRequired ?Description
idintegerYesAnitya ID from release-monitoring.org
ignorelist of regular expressionsNoList of regular expressions enclosed in quotes matching versions to ignore. Include a comment explaining the ignored versions.
rssURLYesURL for a releases RSS feed. If the only RSS feed you can find for a project is a general "news" feed, set it to ~. For GitHub projects, you can use the "tags" or "releases" feed: https://github.com/USER/REPOSITORY/tagsORreleases.atom
-

Finding the Anitya ID

-

To find the Anitya ID, search release-monitoring.org by project name, then take the ID out of the URL for the correct search result.

-

For example, the correct systemd search result for us is systemd-stable with the URL https://release-monitoring.org/project/205088/, so we use 205088 in the id field

-

If a project is not tracked by release-monitoring.org, you can create an account and add it.

-

"security" fields

+
FieldTypeRequired ?Description
idintegerYesAnitya ID from release-monitoring.org
ignorelist of regular expressionsNoList of regular expressions enclosed in quotes matching versions to ignore. Include a comment explaining the ignored versions.
rssURLYesURL for a releases RSS feed. If the only RSS feed you can find for a project is a general "news" feed, set it to ~. For GitHub projects, you can use the "tags" or "releases" feed: https://github.com/USER/REPOSITORY/tagsORreleases.atom
+

Finding the Anitya ID

+

To find the Anitya ID, search release-monitoring.org by project name, then take the ID out of the URL for the correct search result.

+

For example, the correct systemd search result for us is systemd-stable with the URL https://release-monitoring.org/project/205088/, so we use 205088 in the id field

+

If a project is not tracked by release-monitoring.org, you can create an account and add it.

+

"security" fields

Fields used to monitor for security advisories (CVEs)

-
FieldTypeRequired ?Description
cpelistYesList of vendor:product pairs from a full CPE name. CVEs for a given project may be published under more than one CPE; include more than one if that is likely.
ignorelist of stringsNoList of specific CVE identifiers which can be ignored, including a comment explaining why each CVE was ignored. As an example, a CVE can be ignored if the Solus package includes a patch fixing the CVE.
-

What is a CPE Name?

-

A CPE Name is a structured naming scheme for information technology systems, primarily used to search for CVEs.

+
FieldTypeRequired ?Description
cpelistYesList of vendor:product pairs from a full CPE name. CVEs for a given project may be published under more than one CPE; include more than one if that is likely.
ignorelist of stringsNoList of specific CVE identifiers which can be ignored, including a comment explaining why each CVE was ignored. As an example, a CVE can be ignored if the Solus package includes a patch fixing the CVE.
+

What is a CPE Name?

+

A CPE Name is a structured naming scheme for information technology systems, primarily used to search for CVEs.

CPE names contain redundant information we can ignore, we are only interested in the vendor and the product.

For example, cpe:2.3:a:systemd_project:systemd is the CPE for the vendor systemd_project, and the product systemd.

-

Finding the CPE Name

+

Finding the CPE Name

The easiest way to search for CPE Names is with the following command; replacing systemd with your search term:

-
curl -s -X POST https://cpe-guesser.cve-search.org/search -d "{\"query\": [\"systemd\"]}" | jq .
+
curl -s -X POST https://cpe-guesser.cve-search.org/search -d "{\"query\": [\"systemd\"]}" | jq .

Note this command uses the jq tool, which you may not have installed:

-
sudo eopkg it jq
-

If you have our helper functions installed, you can use the following command:

-
cpesearch systemd
-
tip

Convert your search term to lower case and try variations on the search term if you get no results. The CPE search is not a "fuzzy" search.

+
sudo eopkg it jq
+

If you have our helper functions installed, you can use the following command:

+
cpesearch systemd
+
tip

Convert your search term to lower case and try variations on the search term if you get no results. The CPE search is not a "fuzzy" search.

The command returns the following:

-
[
[
49192,
"cpe:2.3:a:ubuntu_developers:systemd"
],
[
116392,
"cpe:2.3:a:lennart_poettering:systemd"
],
[
120506,
"cpe:2.3:a:freedesktop:systemd"
],
[
120627,
"cpe:2.3:a:systemd_project:systemd"
]
]
-

Ignore the numerical ids, let's walk through the CPEs by vendor:

+
[
[
49192,
"cpe:2.3:a:ubuntu_developers:systemd"
],
[
116392,
"cpe:2.3:a:lennart_poettering:systemd"
],
[
120506,
"cpe:2.3:a:freedesktop:systemd"
],
[
120627,
"cpe:2.3:a:systemd_project:systemd"
]
]
+

Ignore the numerical ids, let's walk through the CPEs by vendor:

  • ubuntu_developers is for systemd patched by Ubuntu; we can ignore it
  • lennart_poettering is for the main systemd developer and is probably a bleeding edge vendor; ignore it
  • freedesktop is from freedesktop.org and is a good candidate, so we add it
  • systemd_project is a good candidate, so we add it
-

No known CPE

-

If an established product hasn't had a security advisory in the past, it might not have a CPE.

+

No known CPE

+

If an established product hasn't had a security advisory in the past, it might not have a CPE.

In that case, include an empty security and cpe field with a comment in the following format:

-
# No known CPE, checked 2024-01-23
security:
cpe: ~
-
tip

If you are unsure of what to do in this case, feel free to ask in the Solus Packaging Matrix room.

- - \ No newline at end of file +
# No known CPE, checked 2024-01-23
security:
cpe: ~
+
tip

If you are unsure of what to do in this case, feel free to ask in the Solus Packaging Matrix room.

\ No newline at end of file diff --git a/docs/packaging/package.yml/index.html b/docs/packaging/package.yml/index.html index 5703a29e8..10b7d1450 100644 --- a/docs/packaging/package.yml/index.html +++ b/docs/packaging/package.yml/index.html @@ -1,30 +1,19 @@ - - - - - -Package YAML | Solus Help Center - - - - - -

package.yml

-

Each package is generated from a single build file named package.yml. This file is sometimes also called a "recipe" since it provides steps for building a package. It provides all of the required metadata for the package manager, plus the packaging steps involved to produce a package. This file follows the YAML specification.

-

Format

+Package YAML | Solus Help Center

package.yml

+

Each package is generated from a single build file named package.yml. This file is sometimes also called a "recipe" since it provides steps for building a package. It provides all of the required metadata for the package manager, plus the packaging steps involved to produce a package. This file follows the YAML specification.

+

Format

All package.yml files must be valid YAML.

The file is organised into a key→value hierarchy. The ypkg tool parses a package.yml file to build the corresponding package in a declarative manner. As such, most of the keys are simple strings, lists or nested key→value pairs. A special case consists in the packaging steps, which are scripts.

An example file follows:

-
name       : nano
version : 2.9.5
release : 96
source :
- https://www.nano-editor.org/dist/v2.9/nano-2.9.5.tar.xz: 7b8d181cb57f42fa86a380bb9ad46abab859b60383607f731b65a9077f4b4e19
homepage : https://www.nano-editor.org
license : GPL-3.0-or-later
summary : Small, friendly text editor inspired by Pico
component : system.devel
description: |
GNU nano is an easy-to-use text editor originally designed as a replacement for Pico, the ncurses-based editor from the non-free mailer package Pine (itself now available under the Apache License as Alpine).
setup : |
%patch -p1 -i $pkgfiles/0001-Use-a-stateless-configuration.patch
%reconfigure --enable-utf8 --docdir=/usr/share/doc/nano
build : |
%make
install : |
%make_install
install -D -m 00644 $pkgfiles/nanorc $installdir/usr/share/defaults/nano/nanorc
install -D -m 00644 $pkgfiles/git.nanorc $installdir/usr/share/nano/git.nanorc
# https://github.com/scopatz/nanorc
for rcFile in $pkgfiles/nanorc-extras/*.nanorc; do
install -m 00644 $rcFile $installdir/usr/share/nano
done
-

Keys

+
name       : nano
version : 2.9.5
release : 96
source :
- https://www.nano-editor.org/dist/v2.9/nano-2.9.5.tar.xz: 7b8d181cb57f42fa86a380bb9ad46abab859b60383607f731b65a9077f4b4e19
homepage : https://www.nano-editor.org
license : GPL-3.0-or-later
summary : Small, friendly text editor inspired by Pico
component : system.devel
description: |
GNU nano is an easy-to-use text editor originally designed as a replacement for Pico, the ncurses-based editor from the non-free mailer package Pine (itself now available under the Apache License as Alpine).
setup : |
%patch -p1 -i $pkgfiles/0001-Use-a-stateless-configuration.patch
%reconfigure --enable-utf8 --docdir=/usr/share/doc/nano
build : |
%make
install : |
%make_install
install -D -m 00644 $pkgfiles/nanorc $installdir/usr/share/defaults/nano/nanorc
install -D -m 00644 $pkgfiles/git.nanorc $installdir/usr/share/nano/git.nanorc
# https://github.com/scopatz/nanorc
for rcFile in $pkgfiles/nanorc-extras/*.nanorc; do
install -m 00644 $rcFile $installdir/usr/share/nano
done
+

Keys

Not all fields in package.yml are mandatory, but a small selection are. Below is the complete list of the available fields.

-

Mandatory keys

-
Key NameTypeDescription
namestringThe name of the package. This is also used as the base of all sub-package names. Unless unavoidable, this should match the upstream name.
versionstringThe version of the currently packaged software. This is taken from the tarball in most cases.
releaseintegerSpecifies the current release number. Updates in the package number are based on this release number, not the version number. As such, to release an update to users, this number must be incremented by one.
sourcedict(s)See source key below.
homepagestringProvides a link to the package's homepage, used in the Software Center.
licensestring(s)Valid upstream license(s). Try to ensure these use SPDX identifiers.
summarystringBrief package summary, or display name.
componentstringComponent / group of packages this package belongs to. Check available components via eopkg lc.
descriptionstringMore extensive description of the software, usually taken from the vendor website.
-

"source" key

+

Mandatory keys

+
Key NameTypeDescription
namestringThe name of the package. This is also used as the base of all sub-package names. Unless unavoidable, this should match the upstream name.
versionstringThe version of the currently packaged software. This is taken from the tarball in most cases.
releaseintegerSpecifies the current release number. Updates in the package number are based on this release number, not the version number. As such, to release an update to users, this number must be incremented by one.
sourcedict(s)See source key below.
homepagestringProvides a link to the package's homepage, used in the Software Center.
licensestring(s)Valid upstream license(s). Try to ensure these use SPDX identifiers.
summarystringBrief package summary, or display name.
componentstringComponent / group of packages this package belongs to. Check available components via eopkg lc.
descriptionstringMore extensive description of the software, usually taken from the vendor website.
+

"source" key

  • Tarball source
      -
    • Upstream source URL to the source code archive (often called the "tarball"), followed by the sha256sum for the tarball, as a value.
    • +
    • Upstream source URL to the source code archive (often called the "tarball"), followed by the sha256sum for the tarball, as a value.
    • Example: https://www.nano-editor.org/dist/v7/nano-7.2.tar.xz : 86f3442768bd2873cec693f83cdf80b4b444ad3cc14760b74361474fc87a4526
    • Tarball sources are preferred over git sources, whenever possible, because git tags can be changed to point to different commits.
    @@ -56,78 +45,76 @@

    "source"
  • This URL does not have a trailing /download, you may have to remove this by hand.
-
  • The correct SourceForge tarball URLs are found under the "Files" tab, then often within a directory, when starting from a project homepage on SourceForge.
  • +
  • The correct SourceForge tarball URLs are found under the "Files" tab, then often within a directory, when starting from a project homepage on SourceForge.
  • -

    Optional, supported keys

    -
    Key NameTypeDescription
    clangboolSet to yes if this package benefits from being built with Clang.
    extractboolSet to no to disable automatic source extraction.
    autodepboolSet to no to disable automatic binary dependency resolution at build time.
    emul32boolSet to yes to enable an -m32 build (32-bit libs).
    libsplitboolSet to no to disable splitting of libraries into devel sub-packages.
    conflictsstring(s)Specify packages that cannot be installed together with this one.
    optimizelistSpecify preset keys to modify compiler and linker flags during build. You can learn more here.
    builddepslistSpecify build dependencies for the package. You can learn more here.
    rundepsdict(s)Specify further runtime dependencies for the packages. You can learn more here.
    checkdepsdict(s)Specify build dependencies for the package which will not be considered when determining build order for automatic builds. These dependencies should only be used during the check build phase. You can learn more here
    replacesdict(s)Replace one package with another, used when renaming or deprecating packages for clean upgrade paths.
    patternsdict(s)Allows fine grained control over file placement within the package or sub-packages. Useful for packages that are development only (i.e. /usr/bin files).
    environmentunicodeSpecify code that will be exported to all packaging steps of the build (i.e. exporting variables for the entire build).
    networkingboolSet to yes to enable networking within solbuild.
    -

    Packaging step keys, optional

    +

    Optional, supported keys

    +
    Key NameTypeDescription
    clangboolSet to yes if this package benefits from being built with Clang.
    extractboolSet to no to disable automatic source extraction.
    autodepboolSet to no to disable automatic binary dependency resolution at build time.
    emul32boolSet to yes to enable an -m32 build (32-bit libs).
    libsplitboolSet to no to disable splitting of libraries into devel sub-packages.
    conflictsstring(s)Specify packages that cannot be installed together with this one.
    optimizelistSpecify preset keys to modify compiler and linker flags during build. You can learn more here.
    builddepslistSpecify build dependencies for the package. You can learn more here.
    rundepsdict(s)Specify further runtime dependencies for the packages. You can learn more here.
    checkdepsdict(s)Specify build dependencies for the package which will not be considered when determining build order for automatic builds. These dependencies should only be used during the check build phase. You can learn more here
    replacesdict(s)Replace one package with another, used when renaming or deprecating packages for clean upgrade paths.
    patternsdict(s)Allows fine grained control over file placement within the package or sub-packages. Useful for packages that are development only (i.e. /usr/bin files).
    environmentunicodeSpecify code that will be exported to all packaging steps of the build (i.e. exporting variables for the entire build).
    networkingboolSet to yes to enable networking within solbuild.
    +

    Packaging step keys, optional

    The packaging steps are all considered optional, however the absence of the install step will result in no package generated. Each of these keys contains content that will be placed within a script and executed within a controlled environment to perform the package build. For all intents and purposes, they are Bash scripts with a predefined environment.

    -
    Step NameDescription
    setupPerformed after the source extraction. This is the correct place to perform any configure routine, or to patch the sources.
    buildUse this step to run the build portion, for example, make.
    installThis is where you should install the files into the final packaging directory, for example, make install.
    checkThis is where tests / checking should occur, for example, make check.
    profileThis is where profiling tests should be specified. ypkg will handle setting flags to generate profiling data and using that data for an optimized build.
    -

    Optimize values

    +
    Step NameDescription
    setupPerformed after the source extraction. This is the correct place to perform any configure routine, or to patch the sources.
    buildUse this step to run the build portion, for example, make.
    installThis is where you should install the files into the final packaging directory, for example, make install.
    checkThis is where tests / checking should occur, for example, make check.
    profileThis is where profiling tests should be specified. ypkg will handle setting flags to generate profiling data and using that data for an optimized build.
    +

    Optimize values

    One or more optimize values can be specified in a list with the optimize key in the package.yml file. Several values can override or conflict with each other and should be used only where they provide a performance benefit, or fix a bug in the package or build.

    -
    Optimize ValueDescription
    speedOptimizes the package for performance -O3 plus other flags.
    sizeOptimizes the package build to minimize size -Os. Not supported with clang.
    no-bind-nowConfigures the package to disable certain flags, where RELRO is unsupported.
    no-symbolicDisables -Wl,-Bsymbolic-functions linker flag.
    unroll-loopsEnables -funroll-loops. Use this sparingly, only when it provides proven benefit.
    runpathEnables -Wl,--enable-new-dtags to make linker use RUNPATH's instead of RPATH's.
    avx256Disables -mprefer-vector-width=128 in avx2 builds.
    thin-ltoEnables Thin Link Time Optimization -flto=thin with a supported linker.
    ltoEnables Link Time Optimization -flto.
    icf-safeEnables safe Identical Cold Folding --icf=safe. function-sections is recommended when not using clang. Uses gold linker when not using clang.
    icf-allEnables Identical Cold Folding --icf=all. function-sections is recommended when not using clang. Uses gold linker when not using clang.
    pollyEnables polyhedral optimizations for the clang toolchain.
    function-sectionsGenerate a separate ELF section for each function. Recommended with ICF when not using clang.
    no-reorder-blocks-partitionDisables block partition reordering with the gcc toolchain. Provided to facilitate BOLT'ed binaries/libraries.
    emit-relocsInstructs the linker to emit relocations. Provided to facilitate BOLT'ed binaries/libraries.
    -

    Macros

    +
    Optimize ValueDescription
    speedOptimizes the package for performance -O3 plus other flags.
    sizeOptimizes the package build to minimize size -Os. Not supported with clang.
    no-bind-nowConfigures the package to disable certain flags, where RELRO is unsupported.
    no-symbolicDisables -Wl,-Bsymbolic-functions linker flag.
    unroll-loopsEnables -funroll-loops. Use this sparingly, only when it provides proven benefit.
    runpathEnables -Wl,--enable-new-dtags to make linker use RUNPATH's instead of RPATH's.
    avx256Disables -mprefer-vector-width=128 in avx2 builds.
    thin-ltoEnables Thin Link Time Optimization -flto=thin with a supported linker.
    ltoEnables Link Time Optimization -flto.
    icf-safeEnables safe Identical Cold Folding --icf=safe. function-sections is recommended when not using clang. Uses gold linker when not using clang.
    icf-allEnables Identical Cold Folding --icf=all. function-sections is recommended when not using clang. Uses gold linker when not using clang.
    pollyEnables polyhedral optimizations for the clang toolchain.
    function-sectionsGenerate a separate ELF section for each function. Recommended with ICF when not using clang.
    no-reorder-blocks-partitionDisables block partition reordering with the gcc toolchain. Provided to facilitate BOLT'ed binaries/libraries.
    emit-relocsInstructs the linker to emit relocations. Provided to facilitate BOLT'ed binaries/libraries.
    +

    Macros

    To further assist in packaging, a number of macros are available. These are simply shorthand ways to perform a normal build operation. They also ensure that the resulting package is consistent. These macros are only available in our packaging steps, as they are substituted within the script before execution.

    -

    Usage

    +

    Usage

    Macros are prefixed with %, and are substituted before your script is executed. Macros ending with % are used to provide directory names or build values to the script.

    -
    # Run the configure macro with the given arguments
    %configure --disable-static
    -

    Actionable macros

    -
    MacroDescription
    %autogenRuns autogen with our %CONFOPTS% to create a configure script then proceeds to run %configure.
    %cmakeConfigures a CMake project with the distribution specific options, such as prefix and release type.
    %cmake_ninjaConfigures a CMake project with ninja so it can be used with %ninja_build, %ninja_install and %ninja_check macros.
    %configureRuns ./configure with our %CONFOPTS% variable macro.
    %configure_no_runstatedirRuns %configure without the --runstatedir option. Use if you encounter configure: error: unrecognized option: '--runstatedir=/run'.
    %makeRuns the make command with the job count specified in eopkg.conf (more info).
    %make_installPerforms a make install, using the DESTDIR variant. Should work for the vast majority of packages.
    %patchSane patch macro to run in batch mode and not contaminate source tree on failure.
    %apply_patchesApplies all patches listed in the series file in ./files folder.
    %reconfigureUpdates build scripts such as ./configure and proceeds to run %configure.
    %symlink_checkChecks for broken symlinks in the install directory and aborts the build if any are found. Must run after install macros.
    -

    Haskell actionable macros

    -
    MacroDescription
    %cabal_configureConfigures a Cabal project that requires online dependencies, like a Cargo-style build
    %haskell_configureRuns runhaskell configure with prefix, libdir, etc. and ensures the necessary package.conf.d is copied to the correct location.
    %haskell_buildRuns runhaskell build with %JOBS%.
    %haskell_installRuns runhaskell copy to $installdir.
    %haskell_registerRuns runhaskell register to generate a pkg-config for package and version, then installs the conf file.
    +
    # Run the configure macro with the given arguments
    %configure --disable-static
    +

    Actionable macros

    +
    MacroDescription
    %autogenRuns autogen with our %CONFOPTS% to create a configure script then proceeds to run %configure.
    %cmakeConfigures a CMake project with the distribution specific options, such as prefix and release type.
    %cmake_ninjaConfigures a CMake project with ninja so it can be used with %ninja_build, %ninja_install and %ninja_check macros.
    %configureRuns ./configure with our %CONFOPTS% variable macro.
    %configure_no_runstatedirRuns %configure without the --runstatedir option. Use if you encounter configure: error: unrecognized option: '--runstatedir=/run'.
    %makeRuns the make command with the job count specified in eopkg.conf (more info).
    %make_installPerforms a make install, using the DESTDIR variant. Should work for the vast majority of packages.
    %patchSane patch macro to run in batch mode and not contaminate source tree on failure.
    %apply_patchesApplies all patches listed in the series file in ./files folder.
    %reconfigureUpdates build scripts such as ./configure and proceeds to run %configure.
    %symlink_checkChecks for broken symlinks in the install directory and aborts the build if any are found. Must run after install macros.
    +

    Haskell actionable macros

    +
    MacroDescription
    %cabal_configureConfigures a Cabal project that requires online dependencies, like a Cargo-style build
    %haskell_configureRuns runhaskell configure with prefix, libdir, etc. and ensures the necessary package.conf.d is copied to the correct location.
    %haskell_buildRuns runhaskell build with %JOBS%.
    %haskell_installRuns runhaskell copy to $installdir.
    %haskell_registerRuns runhaskell register to generate a pkg-config for package and version, then installs the conf file.

    Existing Haskell packages may use the old cabal_build, cabal_install, cabal_register macros. Please use the new haskell_* macros instead.

    -

    Ninja actionable macros

    -
    MacroDescription
    %meson_configureRuns meson with our CFLAGS and appropriate flags such as libdir.
    %ninja_buildRuns ninja and passes our %JOBS% variable. This macro obsoletes %meson_build.
    %ninja_installRuns ninja install and passes the appropriate DESTDIR and %JOBS% variable. This macro obsoletes %meson_install.
    %ninja_checkRuns ninja test and passes our %JOBS% variable. This macro obsoletes %meson_check.
    -

    Perl actionable macros

    -
    MacroDescription
    %perl_setupRuns Perl setup scripts Build.pl or Makefile.pl with the appropriate variable flags.
    %perl_buildRuns Perl build scripts or attempts %make.
    %perl_installRuns Perl install scripts or attempts %make_install.
    -

    Python actionable macros

    -
    MacroDescription
    %python_setupRuns the build portion of a setup.py using python2.
    %python_installRuns the install portion of a setup.py, to the appropriate root, using python2.
    %python_testWithout argument, runs the test portion of setup.py. With a .py script, execute the script with python2. With something else execute the command "as it is". (More info)
    %python_compileCompiles *.py files using python2. This is only useful where the build doesn't compile them already (indicated by availability of *.pyc files).
    %python3_setupRuns the build portion of a setup.py using python3.
    %python3_installRuns the install portion of a setup.py, to the appropriate root, using python3.
    %python3_testWithout argument, runs the test portion of setup.py. With a .py script, execute the script with python3. With something else execute the command "as it is". (More info)
    %python3_compileCompiles *.py files using python3. This is only useful where the build doesn't compile them already (indicated by availability of *.pyc files).
    -

    Ruby actionable macros

    -
    MacroDescription
    %gem_buildRuns gem build.
    %gem_installRuns gem install with the appropriate parameters.
    -

    Rust (cargo) actionable macros

    -
    MacroDescription
    %cargo_fetchRuns cargo fetch --locked to get dependencies.
    %cargo_buildRuns cargo build with some additional flags.
    %cargo_installInstalls the built binary to /usr/bin/PACKAGE-NAME, OR to /usr/bin/ARGUMENT.
    %cargo_testRuns cargo test with some additional flags.
    -

    Qt actionable macros

    -
    MacroDescription
    %qmakeRuns qmake for Qt5 with the appropriate make flags.
    %qmake4Runs qmake for Qt4, as well as adding the necessary MOC, RCC, and UIC flags since those Qt4 executables end in -qt4.
    %qml_cacheCompiles *.qml files into *.qmlc so they are compiled ahead of time.
    %qml6_cacheSame as %qml_cache, but for Qt6.
    -

    Waf actionable macros

    -
    MacroDescription
    %waf_configureRuns waf configure with prefix.
    %waf_buildRuns waf and passes our %JOBS% variable.
    %waf_installRuns waf install and passes the appropriate destdir and %JOBS% variable.
    -

    BOLT actionable macros

    +

    Ninja actionable macros

    +
    MacroDescription
    %meson_configureRuns meson with our CFLAGS and appropriate flags such as libdir.
    %ninja_buildRuns ninja and passes our %JOBS% variable. This macro obsoletes %meson_build.
    %ninja_installRuns ninja install and passes the appropriate DESTDIR and %JOBS% variable. This macro obsoletes %meson_install.
    %ninja_checkRuns ninja test and passes our %JOBS% variable. This macro obsoletes %meson_check.
    +

    Perl actionable macros

    +
    MacroDescription
    %perl_setupRuns Perl setup scripts Build.pl or Makefile.pl with the appropriate variable flags.
    %perl_buildRuns Perl build scripts or attempts %make.
    %perl_installRuns Perl install scripts or attempts %make_install.
    +

    Python actionable macros

    +
    MacroDescription
    %python_setupRuns the build portion of a setup.py using python2.
    %python_installRuns the install portion of a setup.py, to the appropriate root, using python2.
    %python_testWithout argument, runs the test portion of setup.py. With a .py script, execute the script with python2. With something else execute the command "as it is". (More info)
    %python_compileCompiles *.py files using python2. This is only useful where the build doesn't compile them already (indicated by availability of *.pyc files).
    %python3_setupRuns the build portion of a setup.py using python3.
    %python3_installRuns the install portion of a setup.py, to the appropriate root, using python3.
    %python3_testWithout argument, runs the test portion of setup.py. With a .py script, execute the script with python3. With something else execute the command "as it is". (More info)
    %python3_compileCompiles *.py files using python3. This is only useful where the build doesn't compile them already (indicated by availability of *.pyc files).
    +

    Ruby actionable macros

    +
    MacroDescription
    %gem_buildRuns gem build.
    %gem_installRuns gem install with the appropriate parameters.
    +

    Rust (cargo) actionable macros

    +
    MacroDescription
    %cargo_fetchRuns cargo fetch --locked to get dependencies.
    %cargo_buildRuns cargo build with some additional flags.
    %cargo_installInstalls the built binary to /usr/bin/PACKAGE-NAME, OR to /usr/bin/ARGUMENT.
    %cargo_testRuns cargo test with some additional flags.
    +

    Qt actionable macros

    +
    MacroDescription
    %qmakeRuns qmake for Qt5 with the appropriate make flags.
    %qmake4Runs qmake for Qt4, as well as adding the necessary MOC, RCC, and UIC flags since those Qt4 executables end in -qt4.
    %qml_cacheCompiles *.qml files into *.qmlc so they are compiled ahead of time.
    %qml6_cacheSame as %qml_cache, but for Qt6.
    +

    Waf actionable macros

    +
    MacroDescription
    %waf_configureRuns waf configure with prefix.
    %waf_buildRuns waf and passes our %JOBS% variable.
    %waf_installRuns waf install and passes the appropriate destdir and %JOBS% variable.
    +

    BOLT actionable macros

    BOLT is a post-link optimizer developed to speed up large applications. You will need to run a workload after instrumenting a binary or library. Think of it as post-link profile guided optimization.

    -
    MacroDescription
    %bolt_instrInstrument a binary or library with llvm-bolt. Requires it to be built with emit-relocs, as well as no-reorder-blocks-partition if not using clang.
    %bolt_mergeMerge fdata profiles into a single file after running a workload with a BOLT instrumented binary.
    %bolt_optOptimize a binary using BOLT after running %bolt_merge.
    -

    Variable macros

    -
    MacroDescription
    %ARCH%Indicates the current build architecture.
    %CC%C compiler.
    %CFLAGS%cflags as set in eopkg.conf.
    %CONFOPTS%Flags / options for configuration, such as --prefix=%PREFIX%. Full List.
    %CXX%C++ compiler.
    %CXXFLAGS%cxxflags as set in eopkg.conf.
    %JOBS%jobs, as set in eopkg.conf.
    %LDFLAGS%ldflags as set in eopkg.conf.
    %LIBSUFFIX%Library suffix (either 32 for 32-bit or 64 for 64-bit).
    %PREFIX%Hard-coded prefix /usr.
    %YJOBS%Job count without -j as set in eopkg.conf.
    %installroot%Hard-coded install directory.
    %libdir%The distribution’s default library directory, i.e. /usr/lib64 (Alters for emul32).
    %version%Version of the package, as specified in the version key.
    %workdir%Hard-coded work directory (source tree).
    %kernel_version_lts%Version of the linux-lts kernel.
    %kernel_version_current%Version of the linux-current kernel.
    %python2_version%Version of the python (Python 2) distribution.
    %python3_version%Version of the python3 distribution.
    -

    Variables

    +
    MacroDescription
    %bolt_instrInstrument a binary or library with llvm-bolt. Requires it to be built with emit-relocs, as well as no-reorder-blocks-partition if not using clang.
    %bolt_mergeMerge fdata profiles into a single file after running a workload with a BOLT instrumented binary.
    %bolt_optOptimize a binary using BOLT after running %bolt_merge.
    +

    Variable macros

    +
    MacroDescription
    %ARCH%Indicates the current build architecture.
    %CC%C compiler.
    %CFLAGS%cflags as set in eopkg.conf.
    %CONFOPTS%Flags / options for configuration, such as --prefix=%PREFIX%. Full List.
    %CXX%C++ compiler.
    %CXXFLAGS%cxxflags as set in eopkg.conf.
    %JOBS%jobs, as set in eopkg.conf.
    %LDFLAGS%ldflags as set in eopkg.conf.
    %LIBSUFFIX%Library suffix (either 32 for 32-bit or 64 for 64-bit).
    %PREFIX%Hard-coded prefix /usr.
    %YJOBS%Job count without -j as set in eopkg.conf.
    %installroot%Hard-coded install directory.
    %libdir%The distribution’s default library directory, i.e. /usr/lib64 (Alters for emul32).
    %version%Version of the package, as specified in the version key.
    %workdir%Hard-coded work directory (source tree).
    %kernel_version_lts%Version of the linux-lts kernel.
    %kernel_version_current%Version of the linux-current kernel.
    %python2_version%Version of the python (Python 2) distribution.
    %python3_version%Version of the python3 distribution.
    +

    Variables

    A set of variables are exported in our build stages. These are used to provide context and structure to the scripts.

    -
    VariableDescription
    $CFLAGScflags as set in eopkg.conf.
    $CXXFLAGScxxflags as set in eopkg.conf.
    $LDFLAGSldflags as set in eopkg.conf.
    $CCC compiler.
    $CXXC++ compiler.
    $EMUL32BUILDSet only when compiling in emul32 mode.
    $AVX2BUILDSet only when compiling in avx2 mode.
    $PGO_GEN_BUILDSet during the instrumentation phase of a PGO build.
    $PGO_USE_BUILDSet during the use phase of a PGO build.
    $installdirThe install directory, i.e. where files are installed to for packaging.
    $pkgfilesRefers to the ./files directory relative to the package.yml file.
    $sourcesRefers to the directory where your source files are stored, for example, $sources/nano.tar.gz.
    $workdirThe work, or source, directory of the package build.
    -

    Types

    +
    VariableDescription
    $CFLAGScflags as set in eopkg.conf.
    $CXXFLAGScxxflags as set in eopkg.conf.
    $LDFLAGSldflags as set in eopkg.conf.
    $CCC compiler.
    $CXXC++ compiler.
    $EMUL32BUILDSet only when compiling in emul32 mode.
    $AVX2BUILDSet only when compiling in avx2 mode.
    $PGO_GEN_BUILDSet during the instrumentation phase of a PGO build.
    $PGO_USE_BUILDSet during the use phase of a PGO build.
    $installdirThe install directory, i.e. where files are installed to for packaging.
    $pkgfilesRefers to the ./files directory relative to the package.yml file.
    $sourcesRefers to the directory where your source files are stored, for example, $sources/nano.tar.gz.
    $workdirThe work, or source, directory of the package build.
    +

    Types

    The package.yml file uses native YAML types, however it follows syntactic conventions and may accept multiple value types for a given key.

    -

    string

    +

    string

    This is simply text, which does not need to be quoted.

    -

    string(s)

    +

    string(s)

    Indicates that it is possible to use a list of strings, or one single string.

    -

    integer

    +

    integer

    Whole, positive number, used in the release field.

    -

    list

    +

    list

    A YAML list (or array) can be expressed in multiple ways. A short array-notation would look like this:

    [one, two, three]

    They can also be expressed like this:

    -
    - First Value
    - Second Value
    - Third Value
    -

    dict

    +
    - First Value
    - Second Value
    - Third Value
    +

    dict

    Known as an associative array, this is key to value mapping. These are separated by a colon (:), the token on the left is taken to be a key, and the token on the right is the value.

    SomeKey: Some Value

    Note that each ypkg key in the YAML file is actually a dict.

    -

    dict(s)

    +

    dict(s)

    dict(s) consists of a list of dicts and some assumptions. We primarily make use of this to express advanced information within the package. These permit you to provide no key, and a value only. In this instance, the key is implicitly assumed to be the package name (for example, nano):

    - some value

    An explicit key, usually a sub-package name:

    - somekey: somevalue

    A mix of both:

    -
    - somevalue
    - somekey: another value
    +
    - somevalue
    - somekey: another value

    The values may also be expressed in list form, still using the same default key logic:

    -
    - [one, two, three]
    - somekey: [one, two, three]
    - key:
    - value one
    - value two
    - value three
    -

    Packaging practices

    -

    The concepts in this document merely expose the syntax of a package.yml file. Solus adheres to strict packaging practices and conventions which packagers must follow. They are explained in the Packaging Practices article.

    - - \ No newline at end of file +
    - [one, two, three]
    - somekey: [one, two, three]
    - key:
    - value one
    - value two
    - value three
    +

    Packaging practices

    +

    The concepts in this document merely expose the syntax of a package.yml file. Solus adheres to strict packaging practices and conventions which packagers must follow. They are explained in the Packaging Practices article.

    \ No newline at end of file diff --git a/docs/packaging/packaging-changes/index.html b/docs/packaging/packaging-changes/index.html index e8d6d60af..535bb9cf8 100644 --- a/docs/packaging/packaging-changes/index.html +++ b/docs/packaging/packaging-changes/index.html @@ -1,61 +1,50 @@ - - - - - -Packaging Changes | Solus Help Center - - - - - -

    Packaging Changes

    +Packaging Changes | Solus Help Center

    Packaging Changes

    This page is meant to serve as a changelog of sorts for the Solus packaging environment and the packaging instructions. Refer to specific help pages for more details.

    • This list is not exhaustive
    • This list is in reverse chronological order (newest first)
    -

    2024

    -

    May

    -

    Remove 'Test Plan' and 'Checklist' from commit messages

    +

    2024

    +

    May

    +

    Remove 'Test Plan' and 'Checklist' from commit messages

    • These are no longer needed in commit messages.
    • They must still be included in the pull request description.
    -

    Add Rust macros to package.yml

    +

    Add Rust macros to package.yml

    • We now have macros for building Rust packages. Example: %cargo_build. Rust packages should be switched to use the new macros as they are updated.
    • -
    • See the "Rust (cargo) actionable macros" section on the package.yml page.
    • +
    • See the "Rust (cargo) actionable macros" section on the package.yml page.
    -

    Add guidance for SourceForge sources in package.yml

    +

    Add guidance for SourceForge sources in package.yml

    -

    February

    -

    Begin adding monitoring.yml to packages

    +

    February

    +

    Begin adding monitoring.yml to packages

      -
    • A new per-package file was introduced: monitoring.yml. Used to monitor packages for releases and security advisories; see monitoring.yml.
    • +
    • A new per-package file was introduced: monitoring.yml. Used to monitor packages for releases and security advisories; see monitoring.yml.
    • This is not enforced by automatic checks yet, but we may ask that it be added.
    -

    2023

    -

    October

    -

    Adding checkdeps in package.yml

    +

    2023

    +

    October

    +

    Adding checkdeps in package.yml

      -
    • A new type of packaging dependency was added: checkdeps. They behave the same as builddeps, except they are not considered when determining build order for automatic builds. See the package.yml page.
    • +
    • A new type of packaging dependency was added: checkdeps. They behave the same as builddeps, except they are not considered when determining build order for automatic builds. See the package.yml page.
    -

    Git hooks

    +

    Git hooks

      -
    • Run go-task init to initialize Git hooks for the packages repository. See Prepare for packaging.
    • +
    • Run go-task init to initialize Git hooks for the packages repository. See Prepare for packaging.
    • Use git commit for committing packaging changes and fill in the template shown. It is no longer required to manually copy-paste the template or use git commit --cleanup=scissors.
    -

    Requiring homepage in package.yml

    +

    Requiring homepage in package.yml

    • The homepage key in package.yml has become mandatory. Use the address to the upstream source repository (eg: the GitHub page) if a package does not have a homepage.
    • This is enforced by checks on all pull requests.
    -

    Recommending amending commits in Pull Requests

    +

    Recommending amending commits in Pull Requests

    • Amending commits and force pushing the changes works better with our build tooling.
        @@ -63,42 +52,40 @@

        September

        -

        Switch to asterisk bolding for PR template

        +

        September

        +

        Switch to asterisk bolding for PR template

        -

        Switching From make to go-task

        +

        Switching From make to go-task

        • All packaging actions are now handled by go-task rather than make.
          • Building a package can be done using go-task rather than make.
          • Commands are the same: make local, for example, is replaced by go-task local.
          • -
          • You can see all available commands by either browsing to Taskfile.yml in the packages repository OR running go-task -l somewhere in your updated clone of the packages git monorepo.
          • +
          • You can see all available commands by either browsing to Taskfile.yml in the packages repository OR running go-task -l somewhere in your updated clone of the packages git monorepo.
        • Packagers should install go-task on their machines if they have not already.
        • The Makefile included with every package is no longer required. Please delete it from a package when updating, and do not include it when making the initial commit of a new package.
        -

        GitHub Monorepo Migration

        +

        GitHub Monorepo Migration

          -
        • Packages were moved from the initial multirepo setup to the packages monorepo: github.com/getsolus/packages Now packagers only need to clone/fork one repository for all packages.
        • +
        • Packages were moved from the initial multirepo setup to the packages monorepo: github.com/getsolus/packages Now packagers only need to clone/fork one repository for all packages.
        • The recommended migration strategy is to fork this repository and start with a clean clone. Any local changes to packages should be moved over manually.
        • Packagers should now title commits like packagename: Action; for example: nano: Update to 9.0. Generic titles like Update to 9.0 should not be used, except for rebuilds.
        • Packagers should use the pull request template for package updates, filling out the Summary and Test Plan sections as usual.
        -

        August

        -

        Initial GitHub Migration from old Phabricator Dev Tracker

        +

        August

        +

        Initial GitHub Migration from old Phabricator Dev Tracker

        • This change was superseded by the later monorepo migration.
        • The new multirepo setup for packages was under github.com/solus-packages organization, packages were updated with PRs to individual repositories.
        • Issues were migrated to github.com/getsolus/packages from Phabricator. Closed issues were not migrated.
        • -
        • A read-only instance of the old Dev Tracker is available at phab.getsol.us. This will eventually be shut down.
        • +
        • A read-only instance of the old Dev Tracker is available at phab.getsol.us. This will eventually be shut down.
        -

        April

        +

        April

        The repository index was moved to cdn.getsol.us.

        -

        2022 and Earlier

        -

        Not included in this list.

    - - \ No newline at end of file +

    2022 and Earlier

    +

    Not included in this list.

    \ No newline at end of file diff --git a/docs/packaging/packaging-practices/index.html b/docs/packaging/packaging-practices/index.html index e21b333b0..83068bcc3 100644 --- a/docs/packaging/packaging-practices/index.html +++ b/docs/packaging/packaging-practices/index.html @@ -1,141 +1,128 @@ - - - - - -Packaging Practices | Solus Help Center - - - - - -

    Packaging Practices

    +Packaging Practices | Solus Help Center

    Packaging Practices

    The primary goal of ypkg is ease of maintenance. In order to do so we ensure packages in the binary repository adhere to a strict set of conventions and practices.

    The next few sections will detail these.

    -

    Package naming

    +

    Package naming

    The ypkg tool does not allow for custom subpackages or subpackage naming, and will enforce its own policy. This can be eased somewhat through the use of patterns, however the available subpackage names are limited.

    We request you use (where possible) the upstream source name for your package. Subpackage names (when generated) are constructed by using the name value first, then applying the subpackage name as such:

    pkgname-$subpackage

    Subpackages are fully automatic with ypkg, and are created based on file patterns. All subpackages automatically depend on the main package, to ensure correct operation. In the following explanations, $lib is used to refer to the host library directory, i.e. lib or lib64 (or lib32 on emul32 builds).

    For the libraries / packages of the following programming languages, you should typically use the following template for it.

    -
    LanguagePrefixExample
    Haskellhaskell-text-binary would be haskell-text-binary
    Perlperl-algorithm-diff would be perl-algorithm-diff
    Pythonpython-wikipedia would be python-wikipedia even if only Python3 is enabled
    Rubyruby-gssapi would be ruby-gssapi
    -

    The devel subpackage

    +
    LanguagePrefixExample
    Haskellhaskell-text-binary would be haskell-text-binary
    Perlperl-algorithm-diff would be perl-algorithm-diff
    Pythonpython-wikipedia would be python-wikipedia even if only Python3 is enabled
    Rubyruby-gssapi would be ruby-gssapi
    +

    The devel subpackage

    This is invariably created for packages that provide libraries and development headers. The following rules will result in files being placed in a devel subpackage:

    -
    /usr/include
    /usr/$lib/lib*.so
    /usr/$lib/lib*.a
    /usr/share/man/man3
    /usr/share/pkgconfig
    /usr/$lib/pkgconfig
    /usr/share/cmake
    /usr/share/vala
    +
    /usr/include
    /usr/$lib/lib*.so
    /usr/$lib/lib*.a
    /usr/share/man/man3
    /usr/share/pkgconfig
    /usr/$lib/pkgconfig
    /usr/share/cmake
    /usr/share/vala

    Note that for some packages, /usr/$lib/lib*.so files are not symlinks. In this instance, the main package will be broken with no library files present. This can quickly be determined by looking at the resulting pspec_*.xml file generated after running the build. If this happens, simply override with patterns or set libsplit to “no”.

    A note on static archives: Unless it is absolutely unavoidable, you should disable static libraries within your build. This is usually fixed by adding --disable-static to your configure routine. If *.a files are shown in your packaging request, it will be questioned, as they can pose a greater security risk if packages link against these static archives.

    -

    The docs subpackage

    +

    The docs subpackage

    Currently there is only one pattern which is forced into a docs subpackage:

    -
    /usr/share/gtk-doc/html
    +
    /usr/share/gtk-doc/html

    If required, you can use patterns to move other files into the docs subpackage, reducing the size of the main package.

    -

    The 32bit subpackage

    +

    The 32bit subpackage

    This subpackage is only generated during an emul32 build. The following paths will automatically be placed into a 32bit subpackage

    -
    /usr/lib32/lib*.so
    /usr/lib32/lib*.so.*
    /usr/lib32/lib*.a
    +
    /usr/lib32/lib*.so
    /usr/lib32/lib*.so.*
    /usr/lib32/lib*.a

    Note the same static archive rules apply to 32bit packages. These packages aren’t as heavily split as we try to discourage their use, though they must be provided in some instances.

    -

    The utils subpackage

    +

    The utils subpackage

    This is not an automatic subpackage, you must use patterns to utilize it. It is provided for instances that it may not be suitable to have binaries present, i.e. for a library package.

    -

    Maintenance

    +

    Maintenance

    When submitting a changed package.yml, it must be accompanied by its corresponding pspec_*.xml file, which was generated at build time. This machine file allows the repository maintainers to evaluate the package condition.

    When providing a new version of a package, or a fix, always ensure you increment the release number by 1. This ensures that users of your package are correctly updated to the latest version.

    Never submit a package without having first tested it, and ensuring it builds within solbuild, a clean chroot environment.

    -

    Licenses

    -

    All new packages or updates to packages should abide by the SPDX 3.x definitions, with the following policy:

    +

    Licenses

    +

    All new packages or updates to packages should abide by the SPDX 3.x definitions, with the following policy:

      -
    • -only licenses, such as GPL-2.0-only, should only be declared as such when the upstream explicitly states "only", otherwise it should always be -or-later.
    • +
    • -only licenses, such as GPL-2.0-only, should only be declared as such when the upstream explicitly states "only", otherwise it should always be -or-later.
    -

    Build dependencies

    -
    note

    Build dependencies should be ordered according to the following rules in package.yml:

      +

      Build dependencies

      +
      note

      Build dependencies should be ordered according to the following rules in package.yml:

      1. pkgconfig dependencies before explicitly named dependencies
      2. -
      3. Each of these two groups in so-called ASCIIbetical order (that is, alphabetical order with all uppercase letters before lowercase letters, and digits/punctuation before letters, see here)
      4. -

      Example:

      builddeps  :
      - pkgconfig(MYGUI)
      - pkgconfig(Qt5Core)
      - pkgconfig(ayatana-appindicator-0.1)
      - pkgconfig(dri)
      - pkgconfig(gtk+-3.0)
      - The-Powder-Toy
      - abcMIDI
      - abcm2ps
      - git
      - python-poetry
      - swig
      -

      Background

      +
    1. Each of these two groups in so-called ASCIIbetical order (that is, alphabetical order with all uppercase letters before lowercase letters, and digits/punctuation before letters, see here)
    2. +

    Example:

    builddeps  :
    - pkgconfig(MYGUI)
    - pkgconfig(Qt5Core)
    - pkgconfig(ayatana-appindicator-0.1)
    - pkgconfig(dri)
    - pkgconfig(gtk+-3.0)
    - The-Powder-Toy
    - abcMIDI
    - abcm2ps
    - git
    - python-poetry
    - swig
    +

    Background

    Most software packages that you build will, in one way or another, depend on another software package to provide specific functionality. This is usually achieved by using a library.

    Any package that is submitted to our repositories is always built in a clean chroot environment. Therefore, any dependencies required to build that package in a reproducible and sane fashion must be listed.

    This is achieved by populating the builddeps key with a list of build dependencies. We support two kinds of build dependencies: explicitly named, or pkgconfig dependencies.

    We prefer the use of pkgconfig dependencies. Most modern software will use the pkg-config tool (package configuration) to determine which files are required to build the current software. This may include compiler flags, library to link against and where the package headers are located.

    An obvious advantage to supporting pkgconfig dependencies is that there is a 1:1 mapping between the name requested by the build and the name used within the package.yml. Instead of trying to hunt down the package providing that dependency, you simply list the same name. Any package in the repository will export information about the .pc files (for pkg-config) it contains, enabling you to use those as a build dependency.

    A secondary advantage is that this allows for easily switching or replacing a providing package. When no pkgconfig name is available (some packages do not provide these, or it doesn’t make sense for them to), you may use the explicit package name. Always ensure you select the correct package, i.e. the -devel subpackage. This provides the necessary symlinks and headers to build packages.

    -

    Finding what package provides a pkgconfig dependency (if any)

    +

    Finding what package provides a pkgconfig dependency (if any)

    You can use go-task to find packages that satisfy pkgconfig dependencies. It can search for multiple dependencies at once.

    As an example, if you know a package has the build dependencies Qt5Core and Qt6Core, you would run:

    -
    go-task pkgconfig -- Qt5Core Qt6Core
    +
    go-task pkgconfig -- Qt5Core Qt6Core

    This will output:

    -
    pkgconfig(Qt5Core) found in: qt5-base-devel
    pkgconfig(Qt6Core) found in: qt6-base-devel
    +
    pkgconfig(Qt5Core) found in: qt5-base-devel
    pkgconfig(Qt6Core) found in: qt6-base-devel

    You can also determine if there are pkgconfigs available from a -devel package by doing eopkg info (name) and looking for the Provides key.

    Example:

    -
    eopkg info libgtk-3-devel
    +
    eopkg info libgtk-3-devel

    In output:

    -
    Provides: pkgconfig(gtk+-3.0) pkgconfig(gdk-3.0) pkgconfig(gdk-wayland-3.0) pkgconfig(gail-3.0) pkgconfig(gdk-x11-3.0) pkgconfig(gtk+-unix-print-3.0)
    pkgconfig(gtk+-wayland-3.0) pkgconfig(gtk+-x11-3.0)
    -

    Using pkgconfig dependencies

    +
    Provides: pkgconfig(gtk+-3.0) pkgconfig(gdk-3.0) pkgconfig(gdk-wayland-3.0) pkgconfig(gail-3.0) pkgconfig(gdk-x11-3.0) pkgconfig(gtk+-unix-print-3.0)
    pkgconfig(gtk+-wayland-3.0) pkgconfig(gtk+-x11-3.0)
    +

    Using pkgconfig dependencies

    In the builddeps list, use the pkgconfig(name) syntax. For example, to add gtk+-3.0 to the build dependencies, you would do the following:

    -
    builddeps:
    - pkgconfig(gtk+-3.0)
    +
    builddeps:
    - pkgconfig(gtk+-3.0)

    At build time the appropriate provider package is selected, in this instance libgtk-3-devel

    -

    Using explicitly named dependencies

    +

    Using explicitly named dependencies

    When there is not a pkgconfig dependency available, use an explicitly named dependency. Simply list the package name.

    -
    note

    When a pkgconfig dependency is available you will be asked to use that instead.

    +
    note

    When a pkgconfig dependency is available you will be asked to use that instead.

    Example:

    -
    builddeps:
    - stk-devel
    -

    Runtime dependencies

    +
    builddeps:
    - stk-devel
    +

    Runtime dependencies

    Runtime dependencies are extra packages that a package needs in order to function correctly. A common example of this is other libraries. Solus eopkg packages will automatically add any binary dependencies at runtime, so that you do not have to.

    All devel subpackages automatically depend on their parent package. On top of this, if they provide a .pc pkg-config file, we export this information, and automatically determine the packages this particular package would need to be able to build against correctly. As such, the majority of dependencies for builds are automatically resolved.

    In certain instances, binary dependencies aren’t enough. An example of this might be an extra Python package, or a font, something that is not accounted for by binary checks.

    To account for this, you may add extra explicit runtime dependencies to your package. These are taken from the optional rundeps ypkg key.

    This key uses the dict(s) type, and the default key is the current package name. You may express a different subpackage to apply dependencies to by using that name as a key, i.e. devel, or docs.

    This would add the “python-gobject” runtime dependency to the main package:

    -
    rundeps:
    - python-gobject
    +
    rundeps:
    - python-gobject

    This would add the same dependency, as well as adding it to the devel subpackage:

    -
    rundeps:
    - python-gobject
    - devel: python-gobject
    +
    rundeps:
    - python-gobject
    - devel: python-gobject

    Remember this uses the dict(s) type, which is very flexible. You can equally express this as follows (adding more deps as an example):

    -
    rundeps:
    - python-gobject
    - devel:
    - somepackage
    - someotherpackage
    -

    Check dependencies

    +
    rundeps:
    - python-gobject
    - devel:
    - somepackage
    - someotherpackage
    +

    Check dependencies

    Check dependencies are a special kind of build dependency reserved for automatic package testing by solbuild. Check dependencies should only be used during the check build phase. When a package is part of an automatic build sequence, these dependencies will not be considered when determining build order.

    -

    Example

    +

    Example

    The package cbindgen includes cython in checkdeps to run tests in the check phase.

    -

    cbindgen package.yml file

    -

    Patching / extra files

    +

    cbindgen package.yml file

    +

    Patching / extra files

    Files that may be required during the build can be accessed via the $pkgfiles variable. Note that you must store your files in the ./files directory relative to your package.yml

    Both patches and extra files (such as systemd units) are stored in this directory. Note that if your patch is to address a CVE, you must use the following naming scheme: ./files/security/cve-xxxx-xxxx.patch

    Where xxxx-xxxx is replaced with the full CVE ID. Complying with this simple rule ensures that we can know at any time the security status of packages when using tools such as cve-check-tool kept -Solus tooling allows the use of ./files/security/cve-xxxx-xxxx.nopatch (which isn't applied in the build) to indicate that a CVE has been validated as not applicable to the Solus package. This can be because another patch resolves this CVE, or there is a false positive via cve-check-tool. The contents of the file can describe why it doesn't apply without requiring a patch (i.e. Resolved by cve-xxxx-xxxx.patch).

    -

    Applying a patch

    +Solus tooling allows the use of ./files/security/cve-xxxx-xxxx.nopatch (which isn't applied in the build) to indicate that a CVE has been validated as not applicable to the Solus package. This can be because another patch resolves this CVE, or there is a false positive via cve-check-tool. The contents of the file can describe why it doesn't apply without requiring a patch (i.e. Resolved by cve-xxxx-xxxx.patch).

    +

    Applying a patch

    It is common practice to apply the patch file(s) within the setup section of your build staging. We can achieve this using the %patch macro, and the $pkgfiles variable. In this example, the required file is located at ./files/0002-Sample-commit-2.patch

    -
    %patch -p1 -i $pkgfiles/0002-Sample-commit-2.patch
    +
    %patch -p1 -i $pkgfiles/0002-Sample-commit-2.patch

    Note you use the macro as you would normally use the patch command, however use of the macro ensures it performs a clean batch-mode patch.

    If you are using compressed patches, i.e. for the bash or readline packages, you can pipe the call through zcat or similar:

    -
    zcat $pkgfiles/bash43-032.gz | %patch -p0
    -

    Handling multiple patches

    -

    In the event you need to apply multiple patches, such as a multitude of CVE patches, it may be sensible to use our %apply_patches macro, which will apply all the patches listed in a series file in your package's ./files folder. Example below:

    -
    security/cve-xxxx-xxxx.patch
    fix-silliness.patch
    +
    zcat $pkgfiles/bash43-032.gz | %patch -p0
    +

    Handling multiple patches

    +

    In the event you need to apply multiple patches, such as a multitude of CVE patches, it may be sensible to use our %apply_patches macro, which will apply all the patches listed in a series file in your package's ./files folder. Example below:

    +
    security/cve-xxxx-xxxx.patch
    fix-silliness.patch

    Both of the files above will be applied using stripping number -p1. If you need to use a different stripping number, like -p4, you can write:

    -
    security/cve-xxxx-xxxx.patch -p4
    fix-silliness.patch
    -

    Installing extra files

    +
    security/cve-xxxx-xxxx.patch -p4
    fix-silliness.patch
    +

    Installing extra files

    We recommend using patches where possible first, as they ensure correct maintenance and will be updated across package versions. If you must install extra files into the directory, please use the install command, ensuring you set the correct permissions. Again, files are accessible from the ./files directory, relative to package.yml.

    This is an example of installing a custom profile file, seen in the bash package:

    -
    install -m 0644 $pkgfiles/profile $installdir/etc/profile
    -

    Patterns

    +
    install -m 0644 $pkgfiles/profile $installdir/etc/profile
    +

    Patterns

    In most instances, ypkg will assign the correct location for files, whether it be in the main name package, or a subpackage. However there may be instances where the default does not match the intended behaviour.

    In these instances it is possible to override the default assignment by way of patterns. These are simply a list of paths or globs to ensure a particular file, or set of files, end up in the desired location.

    The patterns key expects a dict(s) argument. The default key for each pattern is assumed to be the name of the package, so omitting the name would place files into the main package. The value should be a path or pattern you wish to match, ensuring files go to a specific location.

    In this example from libjpeg-turbo, we move all documentation into the docs subpackage:

    -
    patterns:
    - docs: [/usr/share/man]
    +
    patterns:
    - docs: [/usr/share/man]

    This example, taken from the wayland package, ensures the binaries from /usr/bin and the directory /usr/share/wayland are located in the devel subpackage:

    -
    patterns:
    - devel:
    - /usr/bin
    - /usr/share/wayland
    -

    Replace / rename

    +
    patterns:
    - devel:
    - /usr/bin
    - /usr/share/wayland
    +

    Replace / rename

    In some situations, it may be required to replace one package with another, or to rename an existing package. In these instances you should coordinate with a repository maintainer to ensure the replaced package is marked Obsolete within the index. This will ensure correct upgrade paths for users.

    Note that to retire a package, you must also coordinate with a repository maintainer. An Obsolete package is removed by the package manager when the user upgrades. As such, correct upgrade paths need to be established.

    The replaces ypkg key uses the dict(s) type, and the default key is assumed to be the current package name.

    In this example, we rename the libgeoclue* packages to use the correct names, and ensure a working upgrade path.

    -
    replaces:
    - devel: libgeoclue-devel
    - libgeoclue
    +
    replaces:
    - devel: libgeoclue-devel
    - libgeoclue

    The name of this package is geoclue, and the new package names are now:

    • geoclue
    • geoclue-devel

    Given the replaces values above, geoclue now replaces libgeoclue, and geoclue-devel replaces libgeoclue-devel. This is entirely transparent to the user, with a seamless update replacing the old packages with the new renamed packages.

    -

    The repository maintainer marked the old names as Obsolete in the index.

    - - \ No newline at end of file +

    The repository maintainer marked the old names as Obsolete in the index.

    \ No newline at end of file diff --git a/docs/packaging/prepare-for-packaging/index.html b/docs/packaging/prepare-for-packaging/index.html index 043bec15c..908effeab 100644 --- a/docs/packaging/prepare-for-packaging/index.html +++ b/docs/packaging/prepare-for-packaging/index.html @@ -1,79 +1,66 @@ - - - - - -Prepare for Packaging | Solus Help Center - - - - - -

    Prepare for packaging

    -

    Switch to the Unstable repository

    -

    Packages need to be built and tested against the "unstable" repository. If you don't want to switch your primary system to unstable, you can do your packaging work in a VM. We have Virtual Machine Manager and other similar tools in the Solus repository.

    -

    Refer to Repository Management to see how to add and switch to unstable.

    -

    Setting up the packager file

    +Prepare for Packaging | Solus Help Center

    Prepare for packaging

    +

    Switch to the Unstable repository

    +

    Packages need to be built and tested against the "unstable" repository. If you don't want to switch your primary system to unstable, you can do your packaging work in a VM. We have Virtual Machine Manager and other similar tools in the Solus repository.

    +

    Refer to Repository Management to see how to add and switch to unstable.

    +

    Setting up the packager file

    In order to utilize the build system, you must first set up a configuration file that has your packager details.

    This file lives in the .config/solus folder of your home directory. You will need to create the .config/solus folder as well as the inner packager file. Inside the packager file, you need two keys, Name and Email. This is used when generating the machine file so that the packager details are stored within the resulting binary package.

    Name and email address are mandatory. You must use your real first and last name(s) for accountability purposes. -A Matrix contact is optional but recommended.

    -
    [Packager]
    Name=Your Name Here
    Email=your.email@address
    Matrix=@username:matrix.org
    -

    Installing development tools

    +A Matrix contact is optional but recommended.

    +
    [Packager]
    Name=Your Name Here
    Email=your.email@address
    Matrix=@username:matrix.org
    +

    Installing development tools

    We need to install a few things in order to get started with packaging:

    • ent is used by the go-task updatecheck command to check for updated versions of packaged software
    • git is used for version control of the Solus sources
    • github-cli is used to make working with GitHub easier
    • go-task is used by our build tools for scripting
    • -
    • jq is used by our optional Helper Functions
    • +
    • jq is used by our optional Helper Functions
    • solbuild is a lightweight container environment for building packages repeatably
    • solbuild-config-unstable sets up solbuild for working with the unstable repository
    • ypkg is the program that actually builds packages
    • -
    • yq is used by the go-task add-monitoring command to create new monitoring.yml files
    • +
    • yq is used by the go-task add-monitoring command to create new monitoring.yml files
    -
    sudo eopkg it ent git github-cli go-task jq solbuild solbuild-config-unstable ypkg yq
    -

    Setting up a GitHub account and Git

    -

    The Solus source repositories for the package repository currently reside on github.com/getsolus/packages. You will need a GitHub account to submit patches and file issues. You can create a GitHub account here. Note that you will also need to set up 2FA (two-factor authentication) for your account.

    -

    Configure github-cli.

    +
    sudo eopkg it ent git github-cli go-task jq solbuild solbuild-config-unstable ypkg yq
    +

    Setting up a GitHub account and Git

    +

    The Solus source repositories for the package repository currently reside on github.com/getsolus/packages. You will need a GitHub account to submit patches and file issues. You can create a GitHub account here. Note that you will also need to set up 2FA (two-factor authentication) for your account.

    +

    Configure github-cli.

    Once you have a GitHub account, you need to configure github-cli to work with it. At minimum, you need to run gh auth login. Have your GitHub credentials and 2FA (two-factor authentication) mechanism at hand.

    -

    See the GitHub CLI quickstart for some common uses of the tool.

    -

    Git identity setup

    +

    See the GitHub CLI quickstart for some common uses of the tool.

    +

    Git identity setup

    If you have not used git before, you should set your git identity in your global git config file (~/.gitconfig). Use the following commands:

    -
    git config --global user.name "John Doe"
    git config --global user.email johndoe@example.com
    -

    See the Git Book for more first-time setup options.

    -

    Setting up solbuild

    +
    git config --global user.name "John Doe"
    git config --global user.email johndoe@example.com
    +

    See the Git Book for more first-time setup options.

    +

    Setting up solbuild

    The solbuild tool must first be initialized with a base image. All builds thereafter will use this as a base, and construct a temporary overlay root to save on time and disk space in builds.

    Initialize solbuild via:

    -
    sudo solbuild init
    +
    sudo solbuild init

    This will take some time as it downloads and prepares the image.

    -

    Updating solbuild

    +

    Updating solbuild

    It is a good idea to keep the base image updated. It will help reduce build times by not having to repeatedly download updates to packages in the base image, and will strictly need to pull down the packages your build needs.

    To update solbuild, run:

    -
    sudo solbuild update
    -

    Fork the getsolus/packages repository

    -

    Create your own fork of getsolus/packages using the GitHub web UI or gh cli tool from the github-cli package. It will be forked to github.com/yourgithubaccount/packages.

    -

    Clone your forked package repository

    +
    sudo solbuild update
    +

    Fork the getsolus/packages repository

    +

    Create your own fork of getsolus/packages using the GitHub web UI or gh cli tool from the github-cli package. It will be forked to github.com/yourgithubaccount/packages.

    +

    Clone your forked package repository

    Create a local clone of the package repository you just forked. Here we are using the name solus-packages and cloning it into our home directoy. The rest of the documentation will presume this structure. You can choose a different name and path but will have to make sure to replace it in every command that refers to the solus-packages directory.

    -
    gh repo clone packages ~/solus-packages
    -

    Initialize git hooks

    +
    gh repo clone packages ~/solus-packages
    +

    Initialize git hooks

    Initialize Git hooks for working with the repository by running:

    -
    go-task -d ~/solus-packages init
    +
    go-task -d ~/solus-packages init

    This makes it easy to create commits in the correct format, and will warn you about issues with changes you commit.

    -

    Set up repository helper functions (optional)

    +

    Set up repository helper functions (optional)

    The helper functions are a collection of shell scripts that help you navigate the packages repository more quickly, and perform some specialized searches.

    After cloning your repository, create a symlink to source the helper functions for your shell. Then, start a new instance of the shell.

    -

    bash

    -
    mkdir -p ~/.bashrc.d
    ln -s ~/solus-packages/common/Scripts/helpers.sh ~/.bashrc.d/solus-monorepo-helpers.sh
    -

    fish

    -
    mkdir -p ~/.config/fish/conf.d
    ln -s ~/solus-packages/common/Scripts/helpers.fish ~/.config/fish/conf.d/solus.fish
    -

    zsh

    -
    mkdir -p ~/.zshrc.d
    printf "\nfpath=(~/.zshrc.d \$fpath)" >> ~/.zshrc
    source ~/.zshrc
    ln -s ~/solus-packages/common/Scripts/helpers.zsh ~/.zshrc.d/solus-monorepo-helpers.zsh
    +

    bash

    +
    mkdir -p ~/.bashrc.d
    ln -s ~/solus-packages/common/Scripts/helpers.sh ~/.bashrc.d/solus-monorepo-helpers.sh
    +

    fish

    +
    mkdir -p ~/.config/fish/conf.d
    ln -s ~/solus-packages/common/Scripts/helpers.fish ~/.config/fish/conf.d/solus.fish
    +

    zsh

    +
    mkdir -p ~/.zshrc.d
    printf "\nfpath=(~/.zshrc.d \$fpath)" >> ~/.zshrc
    source ~/.zshrc
    ln -s ~/solus-packages/common/Scripts/helpers.zsh ~/.zshrc.d/solus-monorepo-helpers.zsh

    You should now have the following available from your shell:

    -
    FunctionDescriptionUsage
    cpesearchSearch for CPE Names for packages. For use when writing the monitoring.yml file for a packagecpesearch search-term
    gorootWhen in the Solus packages repository, change directory to the root directory.goroot
    gotopkgChange directory to any Solus package. You can type part of the package name then double press Tab to get autocompletion for this function.gotopkg firefox
    gotosoluspkgsChange directory to the Solus packages repository from anywhere on the filesystem.gotosoluspkgs
    whatprovidesFind out what package provides a library by reading the abi_libs files.whatprovides libfoobar.so.1
    whatusesFind out what packages use a library by reading the abi_used_libs files.whatuses libfoobar.so.1
    -

    Building packages

    +
    FunctionDescriptionUsage
    cpesearchSearch for CPE Names for packages. For use when writing the monitoring.yml file for a packagecpesearch search-term
    gorootWhen in the Solus packages repository, change directory to the root directory.goroot
    gotopkgChange directory to any Solus package. You can type part of the package name then double press Tab to get autocompletion for this function.gotopkg firefox
    gotosoluspkgsChange directory to the Solus packages repository from anywhere on the filesystem.gotosoluspkgs
    whatprovidesFind out what package provides a library by reading the abi_libs files.whatprovides libfoobar.so.1
    whatusesFind out what packages use a library by reading the abi_used_libs files.whatuses libfoobar.so.1
    +

    Building packages

    Your system is now set up for package work. -If you are new to packaging, see Your First Package Update.

    - - \ No newline at end of file +If you are new to packaging, see Your First Package Update.
    \ No newline at end of file diff --git a/docs/packaging/procedures/maintainership/index.html b/docs/packaging/procedures/maintainership/index.html index 6b80b5ee1..972bb75c4 100644 --- a/docs/packaging/procedures/maintainership/index.html +++ b/docs/packaging/procedures/maintainership/index.html @@ -1,36 +1,23 @@ - - - - - -Maintainership | Solus Help Center - - - - - -

    Maintainership

    +Maintainership | Solus Help Center

    Maintainership

    The role of a maintainer is to update package(s) on a regular basis, while following Solus packaging and consistency standards.

    -

    Commitment

    +

    Commitment

    Each new package which is going to land in the Solus repository must have one or more maintainers. These individuals commit to:

    • Update the package reasonably regularly, unless there are valid reasons to hold it back
    • -
    • Ensure the packaging file adheres to the Solus standards
    • +
    • Ensure the packaging file adheres to the Solus standards
    • Ensure the application or library is consistent with the Operating System aesthetics, file system conventions and the Solus philosophy in general
    -

    On the Solus side however, the community must not forget that maintainers are volunteers, which may or may not have a technical background. More experienced users are to engage new maintainers in a welcoming manner, e.g. by listing their errors and inviting them to fix them. (More on this in the community guidelines)

    -

    The Solus Staff have the right to enforce certain practices, even when in contrast with maintainers' vision. It also has the right to ultimately accept or reject a patch.

    -

    Stepping in

    +

    On the Solus side however, the community must not forget that maintainers are volunteers, which may or may not have a technical background. More experienced users are to engage new maintainers in a welcoming manner, e.g. by listing their errors and inviting them to fix them. (More on this in the community guidelines)

    +

    The Solus Staff have the right to enforce certain practices, even when in contrast with maintainers' vision. It also has the right to ultimately accept or reject a patch.

    +

    Stepping in

    To officially step in as the maintainer of a package, a MAINTAINERS.md file must be provided for accepted packages that are not yet included in the repository, or if the package predates the policy of requiring one. Instead, if a previously maintained package is marked by Solus Staff as needing a new maintainer, the MAINTAINERS.md file must be updated.

    -

    Updating a maintained package

    +

    Updating a maintained package

    The procedure varies depending on whether or not the individual is the maintainer.

    -

    Maintainers

    -

    Maintainers are free to update a package at their will, unless otherwise indicated by Solus Staff.

    -

    Non-maintainers

    -

    If a package is actively maintained, modifications should not occur and the individual should exercise patience when it comes to updates. In some cases, a maintainer may intentionally be holding back a package, or has simply not updated yet. If pertinent, the individual should file a package update request. Alternatively, the individual can reach the maintainers or Solus Staff via the Solus Packaging room on Matrix and ask permission to update the package. It is also possible to submit an update and attach a message to it clarifying the intention of updating the package, although this is a special case reserved to e.g. security updates.

    -

    Template for the MAINTAINERS.md file

    -

    Presented here is the MAINTAINERS.md file. This file must be provided verbatim alongside the other patch contents, and filled in with the maintainers' personal information. A Matrix contact is optional but recommended, while an email address is mandatory. Similar to the .solus/packager file used for packaging, the maintainers listed in MAINTAINERS.md must use their real first and last name(s) for accountability purposes.

    +

    Maintainers

    +

    Maintainers are free to update a package at their will, unless otherwise indicated by Solus Staff.

    +

    Non-maintainers

    +

    If a package is actively maintained, modifications should not occur and the individual should exercise patience when it comes to updates. In some cases, a maintainer may intentionally be holding back a package, or has simply not updated yet. If pertinent, the individual should file a package update request. Alternatively, the individual can reach the maintainers or Solus Staff via the Solus Packaging room on Matrix and ask permission to update the package. It is also possible to submit an update and attach a message to it clarifying the intention of updating the package, although this is a special case reserved to e.g. security updates.

    +

    Template for the MAINTAINERS.md file

    +

    Presented here is the MAINTAINERS.md file. This file must be provided verbatim alongside the other patch contents, and filled in with the maintainers' personal information. A Matrix contact is optional but recommended, while an email address is mandatory. Similar to the .solus/packager file used for packaging, the maintainers listed in MAINTAINERS.md must use their real first and last name(s) for accountability purposes.

    The contact information section is a YAML list. If needed, more elements may be added, each per maintainer. Do not edit the file in any other way, including spacing, except Name, Surname and REPLACEME placeholders.

    -
    This file is used to indicate primary maintainership for this package. A package may list more than one maintainer to avoid bus factor issues. People on this list may be considered “subject-matter experts”. Please note that Solus Staff may need to perform necessary rebuilds, upgrades, or security fixes as part of the normal maintenance of the Solus package repository. If you believe this package requires an update, follow documentation from https://help.getsol.us/docs/packaging/procedures/request-a-package-update. In the event that this package becomes insufficiently maintained, the Solus Staff reserves the right to request a new maintainer, or deprecate and remove this package from the repository entirely.

    - Name Surname
    - Matrix: REPLACEME
    - Email: REPLACEME
    - - \ No newline at end of file +
    This file is used to indicate primary maintainership for this package. A package may list more than one maintainer to avoid bus factor issues. People on this list may be considered “subject-matter experts”. Please note that Solus Staff may need to perform necessary rebuilds, upgrades, or security fixes as part of the normal maintenance of the Solus package repository. If you believe this package requires an update, follow documentation from https://help.getsol.us/docs/packaging/procedures/request-a-package-update. In the event that this package becomes insufficiently maintained, the Solus Staff reserves the right to request a new maintainer, or deprecate and remove this package from the repository entirely.

    - Name Surname
    - Matrix: REPLACEME
    - Email: REPLACEME
    \ No newline at end of file diff --git a/docs/packaging/procedures/package-inclusion/index.html b/docs/packaging/procedures/package-inclusion/index.html index 5aa50b5f9..b47480ee3 100644 --- a/docs/packaging/procedures/package-inclusion/index.html +++ b/docs/packaging/procedures/package-inclusion/index.html @@ -1,31 +1,20 @@ - - - - - -Package Inclusion Policy | Solus Help Center - - - - - -

    Package Inclusion Policy

    +Package Inclusion Policy | Solus Help Center

    Package Inclusion Policy

    This policy sets forth the criteria for a package to be accepted for inclusion into the Solus repositories or rejected.

    -

    Criteria

    -

    Explicitly redistributable

    +

    Criteria

    +

    Explicitly redistributable

      -
    • Software under a free software or open source software license, or license text which explicitly states that it is permissible to redistribute the software. We use the SPDX License List.
    • +
    • Software under a free software or open source software license, or license text which explicitly states that it is permissible to redistribute the software. We use the SPDX License List.
    • For anything that cannot be redistributed by Solus, there is the possibility for them to be provided as a Flatpak, for Third Party repository inclusion, however the Solus project is not responsible for flatpak or snap implementation of these items. These items should then fetch only at installation time, and not contain non distributable components.
    • Solus supports both VCS (currently only git, this will expand) and traditional software sources (such as tarballs) for packages, equally.
    • Unless absolutely unavoidable, the sources for a package should be source, and not binary, prebuilt sources. Exceptions may be made in rare cases, such as stage1 bootstrap for a compiler, or requires custom components otherwise impossible to provide in Solus (patched libraries, etc.)
    -

    Server software

    +

    Server software

    • Mail servers such as Postfix, Dovecot, etc, are not eligible for inclusion. Solus does not provide a server operating system.
    • Web servers and database daemons are eligible for inclusion, as they facilitate web developers to work locally.
    • Anything outside of these may be catered to by the usage of Docker, or other container technology. Thus, container technology must be supported by Solus to support access to ancillary cases.
    -

    Software age

    +

    Software age

    • DOA (dead-on-arrival) packages are generally rejected from Solus. However, they may be included at the discretion of the project, if they provide unique functionality.
    • Projects with no tags/tarballs which lack traction, may be frozen until a suitable release is made. Tagging releases is an indicator for good release engineering practices.
    • @@ -36,12 +25,12 @@

      Software age

    -

    Stack complexity

    +

    Stack complexity

    • Certain requests may tick all the boxes, but introduce a level of complexity or require a level of engagement not possible to balance for Solus Staff. Under certain situations, a request will be frozen until it has a dedicated maintainer.
    • This extends to requests for full desktop environments. However, this does not extend to minor components like drop-in window managers or panels separate of a dependent stack (i.e. Awesome WM, tint2, etc.)
    -

    Value-add

    +

    Value-add

    • A web wrapper which adds value, such as Discord, with the global push-to-talk shortcut, is eligible for inclusion.
    • A web page wrapper, that adds no further value other than “convenient desktop shortcut” or “tray icon”, are not eligible for inclusion. Web browsers already support desktop notifications.
    • @@ -49,7 +38,5 @@

      Value-addRejection

      -

      Solus Staff members reserve the right to permanently reject a package request without the need for further discussion once the rejection is issued. The limited time of contributors should be considered and respected, instead of dragging out and 'necromancing' old issues in a vain attempt to force inclusion of previously rejected software. In the event of any policy change, existing/expired package requests will NOT be reevaluated under new criteria as this would lead to an exponential growth in work upon every policy change, and is physically impossible to handle for a project of any size.

    - - \ No newline at end of file +

    Rejection

    +

    Solus Staff members reserve the right to permanently reject a package request without the need for further discussion once the rejection is issued. The limited time of contributors should be considered and respected, instead of dragging out and 'necromancing' old issues in a vain attempt to force inclusion of previously rejected software. In the event of any policy change, existing/expired package requests will NOT be reevaluated under new criteria as this would lead to an exponential growth in work upon every policy change, and is physically impossible to handle for a project of any size.

    \ No newline at end of file diff --git a/docs/packaging/procedures/release-processes/index.html b/docs/packaging/procedures/release-processes/index.html index d1b4deb3f..f2d9122bf 100644 --- a/docs/packaging/procedures/release-processes/index.html +++ b/docs/packaging/procedures/release-processes/index.html @@ -1,49 +1,36 @@ - - - - - -Release Processes | Solus Help Center - - - - - -

    Release Processes

    +Release Processes | Solus Help Center

    Release Processes

    This post is intended as both information to users, and guidelines for developers and contributors of Solus. Solus employs a formal architecture to enable the curated rolling release model, which is made possible through the use of ferryd, solbuild and a split-repository model.

    -

    Repository staging

    +

    Repository staging

    All package builds for Solus, updates or otherwise, will always enter the unstable repository first. Consequently, all Solus developers and contributors should ensure solbuild is configured to use the unstable target. As and when the weekly stabilization efforts have completed, the unstable repository will be pulled into shannon, the stable target.

    This effectively means that shannon is a rolling snapshot of unstable. Note that the weekly sync will not make each repository match identically - the tip of every package in unstable will be merged into shannon. This ensures that the shannon update path is cost-efficient in terms of package availability, and that the delta packages provided on shannon match the true update path for those users. Lastly, this also ensures that there are no unintended packages arriving in shannon from older builds.

    Solus installations always default to the shannon repository, making shannon the published distribution, and unstable the development distribution.

    -

    Weekly Sync - Every Friday

    +

    Weekly Sync - Every Friday

    At minimum there shall be one sync per week - this will always be on a Friday. As a result, users are never more than a few days away from unstable. This allows packagers to make deeper changes to Solus and still have time to stabilize the repository before releasing changes on the Friday.

    Given the high volume of changes within Solus in any sync window, the Friday sync should be viewed more as a release than a simple sync. All developers and contributors should try their best to ensure that their changes do not introduce regressions, and that existing update paths are always respected.

    Minor syncs during the week, and correctional syncs shortly after the Friday-sync, are permitted assuming they do not introduce breaking changes to shannon. These may include minor packaging changes, security updates, etc.

    -

    Package deprecation

    +

    Package deprecation

    There are times when a package may need to be deprecated or even renamed. Packagers owning these changes must first communicate the need to ensure a coordinated deprecation.

    Deprecated packages will remove themselves from the users systems as the first operation in an update or package install using the package manager, once marked as Obsolete in the index.

    -

    Deprecating a package

    +

    Deprecating a package

    Follow these steps to submit a package for deprecation:

      -
    1. Create a new branch in the Solus packages repository on GitHub (forking it first if necessary) with a suitable name such as "deprecate-foobar"
    2. +
    3. Create a new branch in the Solus packages repository on GitHub (forking it first if necessary) with a suitable name such as "deprecate-foobar"
    4. Edit repo_data/distribution.xml.in
    5. -
    6. Add the package you wish to deprecate at the end of the <Obsoletes> section
    7. +
    8. Add the package you wish to deprecate at the end of the <Obsoletes> section
    9. Change directory to repo_data (cd repo_data), then run the merged_repos.sh script
    10. Remove the package from the Solus packages repository, for example rm -fr packages/f/foobar
    11. Commit and push your changes to your repository/branch
    12. Open a Pull Request on GitHub
    -

    Un-deprecating a package

    +

    Un-deprecating a package

    The above steps also apply to un-deprecating a package, with the following additions:

      -
    1. Create a new branch in the Solus packages repository on GitHub (forking it first if necessary) with a suitable name such as "undeprecate-foobar"
    2. +
    3. Create a new branch in the Solus packages repository on GitHub (forking it first if necessary) with a suitable name such as "undeprecate-foobar"
    4. Find the commit deprecating the package and restore the package within the repository structure. For example restore all files in packages/f/foobar or use git revert if appropriate
    5. -
    6. Edit repo_data/distribution.xml.in and remove the package you wish to undeprecate in the <Obsoletes> section
    7. +
    8. Edit repo_data/distribution.xml.in and remove the package you wish to undeprecate in the <Obsoletes> section
    9. Change directory to repo_data (cd repo_data), then run the merged_repos.sh script
    10. Open a Pull Request on GitHub and ask a Solus Staff member to use available tooling to update the repository files, then index the repository with ferryctl index unstable (or do it yourself if you have the ability)
    11. Bump or update the package
    -

    Major stack changes

    -

    Large stack upgrades should begin as closely to the last Friday sync as possible, to ensure there is plenty of time for the work to be completed, integrated, and tested for regressions.

    - - \ No newline at end of file +

    Major stack changes

    +

    Large stack upgrades should begin as closely to the last Friday sync as possible, to ensure there is plenty of time for the work to be completed, integrated, and tested for regressions.

    \ No newline at end of file diff --git a/docs/packaging/procedures/request-a-package-update/index.html b/docs/packaging/procedures/request-a-package-update/index.html index 5fbca67ed..8b09c1655 100644 --- a/docs/packaging/procedures/request-a-package-update/index.html +++ b/docs/packaging/procedures/request-a-package-update/index.html @@ -1,24 +1,11 @@ - - - - - -Requesting a Package Update | Solus Help Center - - - - - -

    Requesting A Package Update

    +Requesting a Package Update | Solus Help Center

    Requesting A Package Update

    Packages updates are typically provided by the community or dedicated package maintainers. If we are not shipping the latest stable release of a package, however, you can let us know.

    -

    First, please look to see if an update request has already been filed for the software or library you require.

    -

    If there isn't an existing request, you can use the link below to request a package update. Note that updates solely for a new version number, platform-specific updates (such as to macOS or Windows) which aren't relevant, or solely translation updates, are generally not accepted or not prioritized.

    +

    First, please look to see if an update request has already been filed for the software or library you require.

    +

    If there isn't an existing request, you can use the link below to request a package update. Note that updates solely for a new version number, platform-specific updates (such as to macOS or Windows) which aren't relevant, or solely translation updates, are generally not accepted or not prioritized.

    You will be asked in the form to provide the following information:

    • Title: Update $packagename to $version (Example: Update nano to 2.9.7)
    • Description: Explanation as to the value-add of updating this package.
    • -
    • Link to source tarball/zip file. Note: master.zip files are not permitted. We require versioned tarballs, for example: "1.2.3.tar.gz".
    • +
    • Link to source tarball/zip file. Note: master.zip files are not permitted. We require versioned tarballs, for example: "1.2.3.tar.gz".
    -

    Please put this into a new issue.

    - - \ No newline at end of file +

    Please put this into a new issue.

    \ No newline at end of file diff --git a/docs/packaging/procedures/request-a-package/index.html b/docs/packaging/procedures/request-a-package/index.html index 3c100a2a8..83e6b37a5 100644 --- a/docs/packaging/procedures/request-a-package/index.html +++ b/docs/packaging/procedures/request-a-package/index.html @@ -1,28 +1,17 @@ - - - - - -Requesting a Package | Solus Help Center - - - - - -

    Requesting A Package

    +Requesting a Package | Solus Help Center

    Requesting A Package

    If you think Solus is missing a package that would be useful, you can let us know using our Issue Tracker.

    -

    Steps to request a new package

    +

    Steps to request a new package

      -
    1. Look to see if an issue has already been filed for the package you want. If there is already request for your package, please do not open another issue. Instead, add your comments to the existing issue.
    2. -
    3. Skim our Package inclusion policy to make sure your request won't be rejected.
    4. -
    5. Open a new issue for your package using the Request a new package template. The template will ask you for the following information. Please complete as much as you can. +
    6. Look to see if an issue has already been filed for the package you want. If there is already request for your package, please do not open another issue. Instead, add your comments to the existing issue.
    7. +
    8. Skim our Package inclusion policy to make sure your request won't be rejected.
    9. +
    10. Open a new issue for your package using the Request a new package template. The template will ask you for the following information. Please complete as much as you can.
      • Name
      • Homepage
      • Why should this be included in the repository? If we already offer similar packages in our repository or third party repository, please tell us what your new package does that our existing packages do not (How is it different or better).
      • Are we allowed to distribute it?
          -
        • For Solus to distribute the package it must use a license found on the SPDX License List, or Solus must be given permission to redistribute it by the owner.
        • +
        • For Solus to distribute the package it must use a license found on the SPDX License List, or Solus must be given permission to redistribute it by the owner.
      • What kind of user will use this package, and how many users do you think will use this package?
      • @@ -30,6 +19,4 @@

    - - \ No newline at end of file +
    \ No newline at end of file diff --git a/docs/packaging/stack-rebuilds/index.html b/docs/packaging/stack-rebuilds/index.html index b1c6e9f00..6e73b126d 100644 --- a/docs/packaging/stack-rebuilds/index.html +++ b/docs/packaging/stack-rebuilds/index.html @@ -1,54 +1,41 @@ - - - - - -Rebuilding a stack | Solus Help Center - - - - - -

    Rebuilding a stack

    -

    In packaging, a stack is a package and the packages that depend on it. Most commonly, this refers to libraries, such as the Poppler stack, but other software can be referred to a stack as well. One example is the GNOME stack, which includes the libraries and applications that are the core of the GNOME desktop environment. Packages that depend on another package are called that package's reverse dependencies. When updating a library, one has to be mindful of its reverse dependencies, and if they will need to be rebuilt after updating the library.

    -
    note

    If you haven't already, you will need to set up a local repository to do stack rebuilds.

    -

    Updating the library

    -

    Go through the steps in Updating an Existing Package as normal, but instead of running go-task build, run go-task build-localcp. This will automatically copy the produced package files to your local repository for use in future builds.

    -

    What are symbols?

    -

    Updating a library often means also building its reverse dependencies against the new version due to dynamic linking. Libraries are distributed as shared object, or .so, files, which contain the code symbols that other software can use. These files are usually versioned, such as libpoppler.so.140. This version is called the "so version". When a piece of software is built, it is linked to the versioned libraries and code symbols that it uses.

    +Rebuilding a stack | Solus Help Center

    Rebuilding a stack

    +

    In packaging, a stack is a package and the packages that depend on it. Most commonly, this refers to libraries, such as the Poppler stack, but other software can be referred to a stack as well. One example is the GNOME stack, which includes the libraries and applications that are the core of the GNOME desktop environment. Packages that depend on another package are called that package's reverse dependencies. When updating a library, one has to be mindful of its reverse dependencies, and if they will need to be rebuilt after updating the library.

    +
    note

    If you haven't already, you will need to set up a local repository to do stack rebuilds.

    +

    Updating the library

    +

    Go through the steps in Updating an Existing Package as normal, but instead of running go-task build, run go-task build-localcp. This will automatically copy the produced package files to your local repository for use in future builds.

    +

    What are symbols?

    +

    Updating a library often means also building its reverse dependencies against the new version due to dynamic linking. Libraries are distributed as shared object, or .so, files, which contain the code symbols that other software can use. These files are usually versioned, such as libpoppler.so.140. This version is called the "so version". When a piece of software is built, it is linked to the versioned libraries and code symbols that it uses.

    When the developers of a library release a new update, they may decide to bump the .so version, and code symbols are added and/or removed from the library. If this happens, but its reverse dependencies are not rebuilt after updating, they will try to use the old shared object file and symbols. Because they no longer exist, however, the program will crash when it tries to open them. Rebuilding the stack ensures that every piece of software is pointing to the correct version of its dependencies.

    -

    Checking if rebuilds are necessary

    -

    That's where the abi_* files in the package repository come in. abi_libs and abi_symbols list the libraries and code symbols provided by a package, while abi_used_libs and abi_used_symbols list what libraries and symbols the package links to. After updating a package that has abi_libs and abi_symbols files, run git diff on them and check for two things:

    +

    Checking if rebuilds are necessary

    +

    That's where the abi_* files in the package repository come in. abi_libs and abi_symbols list the libraries and code symbols provided by a package, while abi_used_libs and abi_used_symbols list what libraries and symbols the package links to. After updating a package that has abi_libs and abi_symbols files, run git diff on them and check for two things:

    1. Changes in the .so version
    2. Removed lines in abi_symbols

    If either of these conditions are true, then all reverse dependencies of that package need to be rebuilt.

    -
    note

    Sometimes, packages in a stack are rebuilt even though the above conditions are not met. These are called Safety Rebuilds.

    -

    Finding reverse dependencies

    -

    In most cases, all of the required rebuilds can be found by running eopkg info <package> and looking at the Reverse Dependencies line, thanks to our tooling's automatic dependency detection. This doesn't always work, though, such as with abseil-cpp. In that case, you can use a tool like RipGrep to find all of the packages that link against the library you're updating, for example:

    -
    # Run in the root of the Solus package repository on your system
    rg "absl" packages/*/*/abi_used_libs
    -

    Rebuild the stack

    +
    note

    Sometimes, packages in a stack are rebuilt even though the above conditions are not met. These are called Safety Rebuilds.

    +

    Finding reverse dependencies

    +

    In most cases, all of the required rebuilds can be found by running eopkg info <package> and looking at the Reverse Dependencies line, thanks to our tooling's automatic dependency detection. This doesn't always work, though, such as with abseil-cpp. In that case, you can use a tool like RipGrep to find all of the packages that link against the library you're updating, for example:

    +
    # Run in the root of the Solus package repository on your system
    rg "absl" packages/*/*/abi_used_libs
    +

    Rebuild the stack

    For each package in the stack, follow this procedure:

    1. Bump the package

      -
      go-task bump
      +
      go-task bump
    2. Make sure there are no unwanted changes

      -
      git diff .
      +
      git diff .
    3. Build the package using packages in your local repository

      -
      go-task build-local
      +
      go-task build-local
    4. -

      Commit your changes. Use this format for your commit message:

      -
      package: Rebuild for other-package
      +

      Commit your changes. Use this format for your commit message:

      +
      package: Rebuild for other-package

      Do this in the same git branch as the library update.

    -

    Once all packages in the stack have been rebuilt, submit a pull request for review. If changes are requested, see this section about amending a pull request with multiple commits.

    - - \ No newline at end of file +

    Once all packages in the stack have been rebuilt, submit a pull request for review. If changes are requested, see this section about amending a pull request with multiple commits.

    \ No newline at end of file diff --git a/docs/packaging/submitting-a-pull-request/index.html b/docs/packaging/submitting-a-pull-request/index.html index 385bd4df7..45431cc6b 100644 --- a/docs/packaging/submitting-a-pull-request/index.html +++ b/docs/packaging/submitting-a-pull-request/index.html @@ -1,22 +1,11 @@ - - - - - -Submitting a Pull Request for Review | Solus Help Center - - - - - -

    Submitting a Pull Request for Review

    +Submitting a Pull Request for Review | Solus Help Center

    Submitting a Pull Request for Review

    Please refrain from submitting a pull request for the following instances:

      -
    • For a package that is yet to be accepted for inclusion by a member of the Solus Staff team. Search open package requests to see if there is an open request for the package. -We welcome you to politely reach out via the package request issue or our Support room on Matrix if you deem the review of the request to be time-sensitive in nature.
    • -
    • If your pull request is a Work In Progress / WIP. Pull requests that are completed or are marked as request for comments (RFC) are accepted. For RFC request please ensure your patch title contains [RFC] and is marked as 'draft'. WIP patches clutter the issue tracker, make patch review by Solus Staff more time consuming, and introduce unnecessary work.
    • +
    • For a package that is yet to be accepted for inclusion by a member of the Solus Staff team. Search open package requests to see if there is an open request for the package. +We welcome you to politely reach out via the package request issue or our Support room on Matrix if you deem the review of the request to be time-sensitive in nature.
    • +
    • If your pull request is a Work In Progress / WIP. Pull requests that are completed or are marked as request for comments (RFC) are accepted. For RFC request please ensure your patch title contains [RFC] and is marked as 'draft'. WIP patches clutter the issue tracker, make patch review by Solus Staff more time consuming, and introduce unnecessary work.
    -

    Final branch review

    +

    Final branch review

    At minimum, your pull request will include changes for the following files:

    • package.yml
    • @@ -27,26 +16,26 @@

      Final br
    • MAINTAINERS.md
    • monitoring.yml
    -

    Double check the package.yml to make sure the builddeps are in the right order, and that it otherwise adheres to the standards Solus has set.

    -

    If any additional files were required for the build, then you must also include the files/ directory. See Packaging Practices for more detail.

    +

    Double check the package.yml to make sure the builddeps are in the right order, and that it otherwise adheres to the standards Solus has set.

    +

    If any additional files were required for the build, then you must also include the files/ directory. See Packaging Practices for more detail.

    Many package builds may result in the automatic generation of an ABI report. These files start with abi_* and must also be included, as they allow simple tracking of changes to symbols and dependencies.

    Take a final look over your commit message to make sure it has all the necessary information, and that the formatting is good. You can use this, which will show the most recent commit:

    -
    git log -1
    -

    Creating the pull request

    +
    git log -1
    +

    Creating the pull request

    There are multiple ways to create a pull request with GitHub, either from the website, or from the command line.

    -

    In the package folder, push your local changes to a remote branch:

    git push

    info

    If you've created your own branch, as recommended, the CLI tool will show you a new command to create and push to a remote branch matching the local one. Run this.

    Once the commit is successfully pushed, you'll notice that a URL will be provided that will immediately allow you to create a pull request with your changes.

    Run git status one last time to make sure your branch is clean. If it is:

      +

      In the package folder, push your local changes to a remote branch:

      git push

      info

      If you've created your own branch, as recommended, the CLI tool will show you a new command to create and push to a remote branch matching the local one. Run this.

      Once the commit is successfully pushed, you'll notice that a URL will be provided that will immediately allow you to create a pull request with your changes.

      Run git status one last time to make sure your branch is clean. If it is:

      1. Open the link.
      2. Fill in a summary of your changes (usually the same as the commit message).
      3. Link any relevant issues:
          -
        • If you want to link this pull request to an existing issue, simply mention it in the PR summary: The inclusion of <somepackage> fixes #123.
        • +
        • If you want to link this pull request to an existing issue, simply mention it in the PR summary: The inclusion of <somepackage> fixes #123.
        • If you need a change to depend on another change, mention it in the PR summary too: Depends on #234.
      4. Double-check everything.
      5. Create the pull request!
      6. -

      -

      Amending a pull request

      +
    +

    Amending a pull request

    There may be times you need to make minor changes after submitting the pull request. For instance, you see something that needs correcting. To do this, you will need to amend your commit.

    1. Make your changes
    2. @@ -55,8 +44,8 @@

      Amen
    3. Push the amended commit: git push --force

    The web interface on GitHub will automatically update with the latest changes.

    -
    note

    We want amended commits because of the way our tooling works. It expects that there is only one Git commit per package change.

    -

    Amending a pull request with multiple commits

    +
    note

    We want amended commits because of the way our tooling works. It expects that there is only one Git commit per package change.

    +

    Amending a pull request with multiple commits

    Sometimes, you may be submitting multiple packages in a single pull request, and one of them might need changes. The process is very similar to the above steps, but with a couple of additions.

    1. Rebase on the main branch: git rebase -i origin/main
    2. @@ -69,11 +58,9 @@

      Updating a pull request that has changes requested

      -

      Your pull request will be reviewed, and changes may be requested. This is normal. It's to ensure the quality of the packages in our repository and to make sure each PR adheres to our standards.

      -

      If you need to make changes in response to a review, follow the steps in the section above.

      -

      After the pull request is accepted

      +

      Updating a pull request that has changes requested

      +

      Your pull request will be reviewed, and changes may be requested. This is normal. It's to ensure the quality of the packages in our repository and to make sure each PR adheres to our standards.

      +

      If you need to make changes in response to a review, follow the steps in the section above.

      +

      After the pull request is accepted

      Once your pull request is accepted and merged, someone on the Solus Team will issue a build. Your new / updated package will be published to the unstable repos.

      -

      At this point you may delete the local and remote branches for this pull request.

    - - \ No newline at end of file +

    At this point you may delete the local and remote branches for this pull request.

    \ No newline at end of file diff --git a/docs/packaging/testing-a-package/index.html b/docs/packaging/testing-a-package/index.html index 7c18f0711..d336d9288 100644 --- a/docs/packaging/testing-a-package/index.html +++ b/docs/packaging/testing-a-package/index.html @@ -1,28 +1,15 @@ - - - - - -Testing a Package | Solus Help Center - - - - - -

    Testing a Package

    +Testing a Package | Solus Help Center

    Testing a Package

    After building a package, it must be tested against the unstable repository before a pull request can be submitted. Each pull request requires you to explain how you tested the package to make sure things work as expected.

    You will use the .eopkg file(s) created by the build process for testing.

    -

    Install the .eopkg files

    +

    Install the .eopkg files

    To install your new package, run the following command in the directory where you built the package. Include all .eopkg files that were built.

    -
    sudo eopkg it *.eopkg
    +
    sudo eopkg it *.eopkg

    Testing need not be very complicated. The goal is to ensure the package will reliably work for our users. Testing effort will depend on how complex the software is. At minimum, you want to ensure the application launches, and performs basic functionality as expected.

    -

    For example, if you were updating a text editor, you would want to make sure you can open, create and save files. If you know of issues the package has had in the past, it's a good idea to test that as well to make sure there are no regressions. There are plenty of historical pull requests to review if you want more detail.

    -

    For updated packages: Return to the repository version

    +

    For example, if you were updating a text editor, you would want to make sure you can open, create and save files. If you know of issues the package has had in the past, it's a good idea to test that as well to make sure there are no regressions. There are plenty of historical pull requests to review if you want more detail.

    +

    For updated packages: Return to the repository version

    It is a good idea to uninstall the package you built, and return to the repository version, once you are done testing. To do this, run the following command on the main application. For example, if you just built and tested tree:

    -
    sudo eopkg it --reinstall tree
    -

    Remove the .eopkg files

    +
    sudo eopkg it --reinstall tree
    +

    Remove the .eopkg files

    Before you can submit your pull request, you need to remove the .eopkg files. All repository packages are built by a dedicated build server from the source files provided in your pull request.

    To remove these files, run:

    -
    go-task clean
    - - \ No newline at end of file +
    go-task clean
    \ No newline at end of file diff --git a/docs/packaging/translation-instructions/index.html b/docs/packaging/translation-instructions/index.html index 39720901a..39f55c84e 100644 --- a/docs/packaging/translation-instructions/index.html +++ b/docs/packaging/translation-instructions/index.html @@ -1,20 +1,9 @@ - - - - - -Translation instructions | Solus Help Center - - - - - -

    Translation instructions

    -

    Users will arrive here from the "Translation instructions" link on Transifex.

    -

    Please join our Matrix rooms if you have questions about our translation projects.

    -

    Project specific instructions

    -

    Solus Mate Transition Tool

    -

    Transifex project link

    +Translation instructions | Solus Help Center

    Translation instructions

    +

    Users will arrive here from the "Translation instructions" link on Transifex.

    +

    Please join our Matrix rooms if you have questions about our translation projects.

    +

    Project specific instructions

    +

    Solus Mate Transition Tool

    +

    Transifex project link

    • Strings which include curly braces { } should be translated leaving the curly braces, and anything inside the braces, untouched.
    • Examples: @@ -32,6 +21,4 @@

      S

  • If a string includes a new-line character, be sure to include it in the same place in the translation.
  • -
    - - \ No newline at end of file +
    \ No newline at end of file diff --git a/docs/packaging/troubleshooting-packaging/index.html b/docs/packaging/troubleshooting-packaging/index.html index ae3acf351..5c3a1805f 100644 --- a/docs/packaging/troubleshooting-packaging/index.html +++ b/docs/packaging/troubleshooting-packaging/index.html @@ -1,50 +1,37 @@ - - - - - -Troubleshooting for Packagers | Solus Help Center - - - - - -

    Troubleshooting for Packagers

    +Troubleshooting for Packagers | Solus Help Center

    Troubleshooting for Packagers

    This page covers common packaging issues and how to fix them. We also show you how to share your packaging work so you can ask for help in the Solus Matrix rooms.

    -

    Asking for help

    -

    When you run into a problem that you don't know how to fix you should ask for help in the Solus Packaging Matrix room. But first you should send the package.yml file and solbuild output to somewhere others can see it; we recommend you use GitHub Gists. These commands assume you have set up github-cli.

    -

    If you would rather not use Gists, use a pastebin site like bpaste

    +

    Asking for help

    +

    When you run into a problem that you don't know how to fix you should ask for help in the Solus Packaging Matrix room. But first you should send the package.yml file and solbuild output to somewhere others can see it; we recommend you use GitHub Gists. These commands assume you have set up github-cli.

    +

    If you would rather not use Gists, use a pastebin site like bpaste

    Send the package.yml file in the current directory to a public Gist:

    -
    cat package.yml | gh gist create --public
    +
    cat package.yml | gh gist create --public

    Send the output of solbuild to a public Gist:

    -
    go-task |& gh gist create --public
    +
    go-task |& gh gist create --public

    Note: the usual solbuild output will not be shown when this command is running, and it will take at least a few seconds

    Send the output of solbuild to a new output.txt file:

    -
    go-task |& tee output.txt
    -

    Common Issues

    -

    "Error downloading https://github.com/project/blah/1.2.3.tar.gz: checksum mismatch"

    +
    go-task |& tee output.txt
    +

    Common Issues

    +

    "Error downloading https://github.com/project/blah/1.2.3.tar.gz: checksum mismatch"

    Your source tarball does not match the checksum next to it in package.yml. You should use go-task new or go-task update to write the correct checksum automatically.

    -

    "Failed to build packages err="Failed to fetch source https://github.com/project/blah.git#{commit ref here}, reason: exit status 1\n"

    +

    "Failed to build packages err="Failed to fetch source https://github.com/project/blah.git#{commit ref here}, reason: exit status 1\n"

    If your build fails immediately this message, and you are using a git source, you should clear the solbuild git sources cache:

    -
    sudo rm -rf /var/lib/solbuild/sources/git
    -

    "mount: /var/lib/solbuild/roots/unstable-x86_64: WARNING: source write-protected, mounted read-only"

    +
    sudo rm -rf /var/lib/solbuild/sources/git
    +

    "mount: /var/lib/solbuild/roots/unstable-x86_64: WARNING: source write-protected, mounted read-only"

    If you interrupt a build sometimes solbuild does not unmount cleanly, and you will need to unmount manually:

    -
    sudo umount -f /var/lib/solbuild/roots/unstable-x86_64
    -

    Solbuild is eating up all my disk space

    -

    The solbuild cache at /var/cache/solbuild can grow to tens of gigabytes easily. Recover that disk space by running the "delete cache (dc)" command:

    -
    sudo solbuild dc
    -

    An old package using %configure doesn't build

    +
    sudo umount -f /var/lib/solbuild/roots/unstable-x86_64
    +

    Solbuild is eating up all my disk space

    +

    The solbuild cache at /var/cache/solbuild can grow to tens of gigabytes easily. Recover that disk space by running the "delete cache (dc)" command:

    +
    sudo solbuild dc
    +

    An old package using %configure doesn't build

    • Replace %configure with %reconfigure and try again.
    • -
    • If %reconfigure produces the error configure: error: unrecognized option: '--runstatedir=/run', then use the new %configure_no_runstatedir macro
    • +
    • If %reconfigure produces the error configure: error: unrecognized option: '--runstatedir=/run', then use the new %configure_no_runstatedir macro
    -

    Something is wrong with my solbuild profile

    +

    Something is wrong with my solbuild profile

    Try running go-task solbuild-reset. This will delete the solbuild cache and profile, then download and initialize a fresh copy of the default unstable profile.

    -

    Git commands fail and complain about package checks

    -
    git commit --amend
    WRN packages/q/qqwing/package.yml:1: Package release is not incremented by 1
    ERR packages/q/qqwing/pspec_x86_64.xml:1: Package release is not incremented by 1
    Package checks failed: /home/user/solus-packages/common/CI/package_checks.py packages/q/qqwing/package.yml packages/q/qqwing/pspec_x86_64.xml
    +

    Git commands fail and complain about package checks

    +
    git commit --amend
    WRN packages/q/qqwing/package.yml:1: Package release is not incremented by 1
    ERR packages/q/qqwing/pspec_x86_64.xml:1: Package release is not incremented by 1
    Package checks failed: /home/user/solus-packages/common/CI/package_checks.py packages/q/qqwing/package.yml packages/q/qqwing/pspec_x86_64.xml
    • Solus uses pre-commit hooks to check for simple errors. Right now, certain git commands can fail, particularly git commit --amend and git commit --fixup
    • You can bypass the pre-commit hooks by adding the no-verify option, for example: git commit --amend --no-verify. Checks will still be run by GitHub after a Pull Request is created.
    • -
    - - \ No newline at end of file +
    \ No newline at end of file diff --git a/docs/packaging/update-dev-environment/index.html b/docs/packaging/update-dev-environment/index.html index 39b079239..366589145 100644 --- a/docs/packaging/update-dev-environment/index.html +++ b/docs/packaging/update-dev-environment/index.html @@ -1,29 +1,16 @@ - - - - - -Update Your Development Environment | Solus Help Center - - - - - -

    Update Your Development Environment

    +Update Your Development Environment | Solus Help Center

    Update Your Development Environment

    Always make sure your development environment and system are up to date before beginning work on a package

      -
    1. Update your fork of the getsolus/packages repository.
    2. +
    3. Update your fork of the getsolus/packages repository.
    4. Update your local clone of your fork.
    5. Update the solbuild base image sudo solbuild update
    6. Update the system.
    -

    Update your fork of the getsolus/packages repository

    -

    If you already have a fork of getsolus/packages in GitHub, log into GitHub. Make sure you're looking at the main branch. Check to see that your fork is up to date with the main repository it was forked from. If your fork indicates it is behind, use the "Sync fork" button to bring it up to date.

    -

    Update your local clone of your fork

    +

    Update your fork of the getsolus/packages repository

    +

    If you already have a fork of getsolus/packages in GitHub, log into GitHub. Make sure you're looking at the main branch. Check to see that your fork is up to date with the main repository it was forked from. If your fork indicates it is behind, use the "Sync fork" button to bring it up to date.

    +

    Update your local clone of your fork

    If you already have a local clone, you need to bring it up to date. To do so run:

    -
    cd ~/solus-packages
    git switch main
    git pull
    -

    Update solbuild and the system

    -
    sudo solbuild update
    sudo eopkg up
    -

    Next, you can either Submit a New Package or Update an Existing Package

    - - \ No newline at end of file +
    cd ~/solus-packages
    git switch main
    git pull
    +

    Update solbuild and the system

    +
    sudo solbuild update
    sudo eopkg up
    +

    Next, you can either Submit a New Package or Update an Existing Package

    \ No newline at end of file diff --git a/docs/packaging/updating-an-existing-package/index.html b/docs/packaging/updating-an-existing-package/index.html index 6f294102b..e68623610 100644 --- a/docs/packaging/updating-an-existing-package/index.html +++ b/docs/packaging/updating-an-existing-package/index.html @@ -1,62 +1,51 @@ - - - - - -Updating an Existing Package | Solus Help Center - - - - - -

    Updating an Existing Package

    +Updating an Existing Package | Solus Help Center

    Updating an Existing Package

    This article will go over updating a package that is already in the Solus package repositories.

    -
    note

    Please look to see if an issue has been filed for the software update. -If there is an existing request, please add a link to it in your pull request. Ex:

    This PR resolves software update request https://github.com/getsolus/packages/issues/123
    -

    Update your clone of the packages repository

    -

    If you do not have a local clone set up yet, see Prepare for Packaging

    +
    note

    Please look to see if an issue has been filed for the software update. +If there is an existing request, please add a link to it in your pull request. Ex:

    This PR resolves software update request https://github.com/getsolus/packages/issues/123
    +

    Update your clone of the packages repository

    +

    If you do not have a local clone set up yet, see Prepare for Packaging

    Bring your local clone up to date. Run:

    -
    cd ~/solus-packages/packages/n/nano
    git switch main
    git pull
    -

    Switch to a new git branch

    -

    It's always a good idea to switch to a new git branch before beginning packaging work. This helps to separate your work from any new changes made to the package repository, which will allow you to more easily rebase any changes if needed. To do so run:

    -
    git switch -c update_nano
    -

    Updating a package

    +
    cd ~/solus-packages/packages/n/nano
    git switch main
    git pull
    +

    Switch to a new git branch

    +

    It's always a good idea to switch to a new git branch before beginning packaging work. This helps to separate your work from any new changes made to the package repository, which will allow you to more easily rebase any changes if needed. To do so run:

    +
    git switch -c update_nano
    +

    Updating a package

    There are two types of package updates: a package bump, and moving a package to a different version.

    -

    Bumping a package is typically done when rebuilding against a changed dependency, such as imagemagick needing to be rebuilt if libwebp changes. It is also done if changes are being made to the package, such as adding new dependencies or other modifications which aren't a version update.

    -

    Bumping a package

    +

    Bumping a package is typically done when rebuilding against a changed dependency, such as imagemagick needing to be rebuilt if libwebp changes. It is also done if changes are being made to the package, such as adding new dependencies or other modifications which aren't a version update.

    +

    Bumping a package

    Bumping can be achieved by running the bump task, which increments the release number by 1.

    -
    go-task bump
    +
    go-task bump

    Check to make sure that the result is as expected.

    -
    git diff package.yml
    -
    note

    Certain packages with long descriptions might have their description messed up when this is run. Check if this happened, and fix it if necessary.

    -

    Using a different version

    +
    git diff package.yml
    +
    note

    Certain packages with long descriptions might have their description messed up when this is run. Check if this happened, and fix it if necessary.

    +

    Using a different version

    To update the package to a newer version, use the update task.

    This task takes two arguments, in the following order:

    1. Version
    2. Source URL
    -

    If you're updating the package to a newer version, naturally you would change both the version and source. If you're merely changing the source URL for the existing version, just pass the same version number and the new source URL.

    +

    If you're updating the package to a newer version, naturally you would change both the version and source. If you're merely changing the source URL for the existing version, just pass the same version number and the new source URL.

    Example:

    -
    go-task update -- 1.0 https://example.com/example-1.0.tar.xz
    -

    The MAINTAINERS.md file

    -

    There must be a file called MAINTAINERS.md using the template in Maintainership. Add it if it does not already exist. It should name the current maintainer(s) of the package.

    -

    Build the package

    -

    Build the package using go-task. The default task will build the package against the Unstable repository, so you don't have to specify a task here.

    -
    go-task
    -

    Once your package has built successfully, you will need to test it.

    -

    Commit your changes

    -

    Check the changes in your files.

    -

    Add / remove files as necessary to the commit. Then, check your branch.

    +
    go-task update -- 1.0 https://example.com/example-1.0.tar.xz
    +

    The MAINTAINERS.md file

    +

    There must be a file called MAINTAINERS.md using the template in Maintainership. Add it if it does not already exist. It should name the current maintainer(s) of the package.

    +

    Build the package

    +

    Build the package using go-task. The default task will build the package against the Unstable repository, so you don't have to specify a task here.

    +
    go-task
    +

    Once your package has built successfully, you will need to test it.

    +

    Commit your changes

    +

    Check the changes in your files.

    +

    Add / remove files as necessary to the commit. Then, check your branch.

    Double-check that everything looks correct and all of the files have been staged before committing.

    -
    git status
    +
    git status

    If all looks well, commit your changes.

    -
    git commit
    -

    Commit message format

    -

    With the switch to a single large package git repository, having a regular, easy-to-read, and standardized commit message format helps enable quick and efficient "at-a-glance" reading of git commit messages for packagers and Staff alike.

    +
    git commit
    +

    Commit message format

    +

    With the switch to a single large package git repository, having a regular, easy-to-read, and standardized commit message format helps enable quick and efficient "at-a-glance" reading of git commit messages for packagers and Staff alike.

    Each commit message should consist of a meaningful summary line (which starts with the package name), a blank line, and then the rest of the commit message body.

    -

    Note that [NFC] (listed in an example below) is an abbreviation for "No Functional Change".

    -

    Package update

    +

    Note that [NFC] (listed in an example below) is an abbreviation for "No Functional Change".

    +

    Package update

    The following guidelines apply to the commit message body:

    • Bullet point lists should start with a dash.
    • @@ -64,16 +53,16 @@

      Package updat
    • There may also be a section for Solus specific work (e.g. rebuild against x / rework to remove dependency).
    • Optional: A link to the upstream release notes page.
    -

    git commit on an initialized repository will automatically open your editor with the correct template. +

    git commit on an initialized repository will automatically open your editor with the correct template. Note that lines starting with a # will be ignored by Git and do not need to be removed.

    Important: Do not include issue numbers in changelogs. This will incorrectly link your issue to another one in our repository.

    Example:

    -
    - #123 fixed a thing
    +
    - #123 fixed a thing

    If you want to intentionally link to another issue in this repository, the right way is to use our repository name:

    -
    Fixes getsolus/packages#issuenumber
    +
    Fixes getsolus/packages#issuenumber

    Here is an example in our standard format:

    -
    foo: Update to 1.2.3

    **Summary**

    Bugfixes:

    - Fixed a crash
    - Something else

    Enhancements:

    - Implemented a feature
    - Error when encountering a thing

    Full release notes:

    - [1.2.3](https://github.com/foo/foo/releases/tag/v1.2.3)
    -

    Other commit message format examples

    +
    foo: Update to 1.2.3

    **Summary**

    Bugfixes:

    - Fixed a crash
    - Something else

    Enhancements:

    - Implemented a feature
    - Error when encountering a thing

    Full release notes:

    - [1.2.3](https://github.com/foo/foo/releases/tag/v1.2.3)
    +

    Other commit message format examples

    In the cases where you are not updating a package to a new version, but simply applying a patch or fixing an existing version, the following commit messages are considered suitable:

    • Add the homepage metadata key: @@ -86,14 +75,12 @@

      monitoring.yml file or other stuff that does not directly change the package, meaning the package release number didn't need a bump: +
    • Updating a README, monitoring.yml file or other stuff that does not directly change the package, meaning the package release number didn't need a bump:
      • package: [NFC] Add README.md and monitoring.yml
    -

    As stated previously, [NFC] is an abbreviation of "No Functional Change".

    -

    For more information on suitable commit messages, please check the tooling central documentation.

    -

    Next, you'll submit a pull request for review.

    - - \ No newline at end of file +

    As stated previously, [NFC] is an abbreviation of "No Functional Change".

    +

    For more information on suitable commit messages, please check the tooling central documentation.

    +

    Next, you'll submit a pull request for review.

    \ No newline at end of file diff --git a/docs/packaging/your-first-package-update/index.html b/docs/packaging/your-first-package-update/index.html index 60644afce..bec559219 100644 --- a/docs/packaging/your-first-package-update/index.html +++ b/docs/packaging/your-first-package-update/index.html @@ -1,42 +1,29 @@ - - - - - -Your First Package Update | Solus Help Center - - - - - -

    Your First Package Update

    -

    This page will guide you through the steps required to build your first package. This is really a test to make sure that your build environment is set up correctly. You will clone an existing package, build it, then install it, and finally remove it.

    -

    Cloning and building nano

    +Your First Package Update | Solus Help Center

    Your First Package Update

    +

    This page will guide you through the steps required to build your first package. This is really a test to make sure that your build environment is set up correctly. You will clone an existing package, build it, then install it, and finally remove it.

    +

    Cloning and building nano

    For this example we will use the text editor nano.

    Change to your packaging directory. Your directory may have a different name or location:

    -
    cd ~/solus-packages
    +
    cd ~/solus-packages

    Switch to the directory containing the nano recipe:

    -
    cd packages/n/nano
    -

    Alternatively, if you've set up the Monorepo Helper Functions you can replace the above to steps by these simple commands:n

    -
    gotosoluspkgs
    gotopkg nano
    -

    Increase the release number by one ("bump" the package) and then check the results:

    -
    go-task bump
    git diff
    +
    cd packages/n/nano
    +

    Alternatively, if you've set up the Monorepo Helper Functions you can replace the above to steps by these simple commands:n

    +
    gotosoluspkgs
    gotopkg nano
    +

    Increase the release number by one ("bump" the package) and then check the results:

    +
    go-task bump
    git diff

    You should see output from git similar to the following:

    -
    diff --git a/package.yml b/package.yml
    index 2ff1756..4bc344c 100644
    --- a/package.yml
    +++ b/package.yml
    @@ -1,6 +1,6 @@
    name : nano
    version : '7.2'
    -release : 161
    +release : 162
    source :
    - https://www.nano-editor.org/dist/v7/nano-7.2.tar.xz : 86f3442768bd2873cec693f83cdf80b4b444ad3cc14760b74361474fc87a4526
    homepage : https://www.nano-editor.org
    +
    diff --git a/package.yml b/package.yml
    index 2ff1756..4bc344c 100644
    --- a/package.yml
    +++ b/package.yml
    @@ -1,6 +1,6 @@
    name : nano
    version : '7.2'
    -release : 161
    +release : 162
    source :
    - https://www.nano-editor.org/dist/v7/nano-7.2.tar.xz : 86f3442768bd2873cec693f83cdf80b4b444ad3cc14760b74361474fc87a4526
    homepage : https://www.nano-editor.org

    Next, build the package:

    -
    go-task
    +
    go-task

    You will be prompted to enter your password by sudo, and the solbuild tool will build the package. If the build is successful, you will have a nano package file with a name like nano-7.2-161-1-x86_64.eopkg. Run the ls tool to check the exact name:

    -
    $ ls
    abi_used_libs files package.yml
    abi_used_symbols nano-7.2-162-1-x86_64.eopkg pspec_x86_64.xml
    +
    $ ls
    abi_used_libs files package.yml
    abi_used_symbols nano-7.2-162-1-x86_64.eopkg pspec_x86_64.xml

    Congratulations! You have successfully built your first package on Solus.

    -

    Installing your new nano package

    +

    Installing your new nano package

    To install your new nano package, run the following command. Your filename will probably be slightly different.

    This is done so you can test that the package works as expected. Each package submission will require you to describe what testing you did.

    -
    sudo eopkg it nano-7.2-162-1-x86_64.eopkg
    +
    sudo eopkg it nano-7.2-162-1-x86_64.eopkg

    Testing nano is pretty easy. Testing other packages may be more complicated, depending on what they do.

    To test your newly built nano package, simply run it on command line, then make sure you can edit and save a file.

    -

    Returning to the repository version (optional)

    +

    Returning to the repository version (optional)

    It is a good idea to remove the package you built, and return to the repository version, once you are done testing.

    -
    sudo eopkg it --reinstall nano
    - - \ No newline at end of file +
    sudo eopkg it --reinstall nano
    \ No newline at end of file diff --git a/docs/user/contributing/community-guidelines/index.html b/docs/user/contributing/community-guidelines/index.html index 409b2b8eb..316480895 100644 --- a/docs/user/contributing/community-guidelines/index.html +++ b/docs/user/contributing/community-guidelines/index.html @@ -1,18 +1,7 @@ - - - - - -Community Guidelines | Solus Help Center - - - - - -

    Community guidelines

    +Community Guidelines | Solus Help Center

    Community guidelines

    Solus enforces a set of community guidelines to maintain a family-friendly, respectful, and professional environment.

    Our guidelines apply to all services offered or used by the project, in addition to any terms of service of third-party services used by the project. Solus Staff reserves the right to either ban or terminate access, on a temporary or permanent basis, to members of the community which are found to be violating our guidelines.

    -

    General guidelines

    +

    General guidelines

    The guidelines laid out in this section apply to all services offered or used by the project, such as (but not limited to):

    • Our package issue tracker
    • @@ -20,11 +9,11 @@

      General g
    • Matrix, IRC, or any other officially supported means of communicating with the project and community members in real-time
    • Postings to social media pages / properties owned or used by the project.
    -

    Harassment

    +

    Harassment

    The project condemns any and all forms of harassment. Harassment by individuals in our community, whether in public (on services provided by or used by the project) or private (e.g. direct messages), to other members in our community, will result in the temporary or permanent banning of such individuals across any and all services provided by or used by the project.

    This extends to any and all events / venues sponsored or otherwise supported by the project. Harassment in such events or venues will result in the permanent banning of such individuals from future events and if necessary, the immediate removal of such individuals from any current events / venues.

    You are encouraged to reach out to a member of the Solus Staff should you be harassed by any member of our community so such matters may be addressed immediately.

    -

    Language

    +

    Language

    Members of the community are expected to engage in a manner which is respectful and avoids the use of language which is hateful, derogatory, or otherwise intentionally degrading. This includes (but is not limited to) language which could be classified as:

    - - \ No newline at end of file +
    \ No newline at end of file diff --git a/docs/user/contributing/getting-involved/index.html b/docs/user/contributing/getting-involved/index.html index 0f00cbfd0..72a6c8f75 100644 --- a/docs/user/contributing/getting-involved/index.html +++ b/docs/user/contributing/getting-involved/index.html @@ -1,64 +1,51 @@ - - - - - -Getting Involved | Solus Help Center - - - - - -

    Getting Involved

    +Getting Involved | Solus Help Center

    Getting Involved

    Solus is a big undertaking, and as such there are many ways in which your involvement can help us. Naturally, that means there are also many ways in which you can help out.

    -

    Engaging with the community

    -

    Community guidelines

    -

    Solus enforces a set of community guidelines to maintain respect and professionalism, as well as a family-friendly environment. Please view our community guidelines here.

    -

    Community forums

    -

    With so many new users joining, there are always more people needing help. A great way to help us out, would be to help out our users on the Solus Forums.

    -

    Matrix (chat)

    -

    Matrix is a great way to discuss issues and development with the community, and project developers in real-time. It's also a great place for getting support, but remember due -to timezone differences there might not always be people there to answer your question immediately. You can access Matrix using a client like Element Web, or many others. You will need a Matrix account.

    +

    Engaging with the community

    +

    Community guidelines

    +

    Solus enforces a set of community guidelines to maintain respect and professionalism, as well as a family-friendly environment. Please view our community guidelines here.

    +

    Community forums

    +

    With so many new users joining, there are always more people needing help. A great way to help us out, would be to help out our users on the Solus Forums.

    +

    Matrix (chat)

    +

    Matrix is a great way to discuss issues and development with the community, and project developers in real-time. It's also a great place for getting support, but remember due +to timezone differences there might not always be people there to answer your question immediately. You can access Matrix using a client like Element Web, or many others. You will need a Matrix account.

    You will find the following Solus rooms on the matrix.org homeserver:

    -

    Social Media

    +

    Social Media

    Alongside the forums, you can communicate with developers or others in the community by using one of the following websites:

    -

    Funding

    -

    Solus is funded through our Open Collective, with our fiscal host being the non-profit 501(c)(3) organization Open Source Collective. To read more about what this funding enables us to do take a look at the "About" section of our Open Collective page.

    -

    Improving documentation

    -

    Our Help Center improves when the documentation improves. If there are docs that you think would be valuable to add, get involved by submitting pull requests to our Help Center Docs repository!

    -

    Packaging

    +

    Funding

    +

    Solus is funded through our Open Collective, with our fiscal host being the non-profit 501(c)(3) organization Open Source Collective. To read more about what this funding enables us to do take a look at the "About" section of our Open Collective page.

    +

    Improving documentation

    +

    Our Help Center improves when the documentation improves. If there are docs that you think would be valuable to add, get involved by submitting pull requests to our Help Center Docs repository!

    +

    Packaging

    There may be software you wish to have on your system that is currently not available in the repository. While you are more than welcome to submit a bug and wait for someone else to package the software you want, you can also improve -and contribute to the community by packaging software. If you're interested in learning to package software, feel free to visit our documentation here.

    -

    Report bugs

    -

    We're always looking to improve our systems, especially when they're not functioning as expected. By reporting bugs, you improve the system not only for you, but for all Solus users.

    +and contribute to the community by packaging software. If you're interested in learning to package software, feel free to visit our documentation here.

    +

    Report bugs

    +

    We're always looking to improve our systems, especially when they're not functioning as expected. By reporting bugs, you improve the system not only for you, but for all Solus users.

    -

    Translations

    -

    Assistance is always welcome in translating our projects to other languages!

    - - \ No newline at end of file +

    Translations

    +

    Assistance is always welcome in translating our projects to other languages!

    \ No newline at end of file diff --git a/docs/user/contributing/style/index.html b/docs/user/contributing/style/index.html index b136e0a03..62c33fbdc 100644 --- a/docs/user/contributing/style/index.html +++ b/docs/user/contributing/style/index.html @@ -1,52 +1,41 @@ - - - - - -Solus Style Guide | Solus Help Center - - - - - -

    Solus style guide

    -

    Solus needs a style guide to give clarity to our contributors and a consistent experience for readers. But we don't want to write our own! We surveyed existing style guides, and we picked parts that were more suitable for our content.

    -
    note

    Existing help center topics might not follow our style guide yet.

    -

    General writing style

    -

    Use the Google developer documentation style guide for general writing style, grammar, and formatting.

    +Solus Style Guide | Solus Help Center

    Solus style guide

    +

    Solus needs a style guide to give clarity to our contributors and a consistent experience for readers. But we don't want to write our own! We surveyed existing style guides, and we picked parts that were more suitable for our content.

    +
    note

    Existing help center topics might not follow our style guide yet.

    +

    General writing style

    +

    Use the Google developer documentation style guide for general writing style, grammar, and formatting.

    Some useful pages:

    -

    Linux-specific terms

    -

    If you are unsure of how to use a common Linux term, refer to the Glossary of terms and conventions from the Red Hat supplementary style guide for documentation

    -

    Specific guidance

    +

    Linux-specific terms

    +

    If you are unsure of how to use a common Linux term, refer to the Glossary of terms and conventions from the Red Hat supplementary style guide for documentation

    +

    Specific guidance

    In alphabetical order, not order of importance.

    -

    Admonitions

    -

    This section is based on the Red Hat supplementary style guide.

    -

    Admonitions should draw the reader’s attention to certain information. Keep admonitions to a minimum, and avoid placing multiple admonitions close to one another. If multiple admonitions are necessary, restructure the information by moving the less-important statements into the flow of the main content. See the Docusaurus documentation to learn the correct syntax.

    -
    TypeDescription
    NoteAdditional guidance or advice that improves product configuration, performance, or supportability
    TipRecommendations, suggestions, and alternative methods that might not be obvious. Tips are not essential to using the product.
    InfoGeneral information about the topic at hand that may be useful or relevant to user.
    ImportantAdvisory information essential to the completion of a task or default configuration settings. Users must not disregard this information.
    WarningInformation that warns the user to proceed with caution. Warning emphasizes a course of action’s potential downsides.
    DangerInformation about imminent system damage, data loss, or a support-related issue if the user disregards this admonition. If available, offer information to avoid the problem in the future or state where to find more information.
    -

    Code blocks

    +

    Admonitions

    +

    This section is based on the Red Hat supplementary style guide.

    +

    Admonitions should draw the reader’s attention to certain information. Keep admonitions to a minimum, and avoid placing multiple admonitions close to one another. If multiple admonitions are necessary, restructure the information by moving the less-important statements into the flow of the main content. See the Docusaurus documentation to learn the correct syntax.

    +
    TypeDescription
    NoteAdditional guidance or advice that improves product configuration, performance, or supportability
    TipRecommendations, suggestions, and alternative methods that might not be obvious. Tips are not essential to using the product.
    InfoGeneral information about the topic at hand that may be useful or relevant to user.
    ImportantAdvisory information essential to the completion of a task or default configuration settings. Users must not disregard this information.
    WarningInformation that warns the user to proceed with caution. Warning emphasizes a course of action’s potential downsides.
    DangerInformation about imminent system damage, data loss, or a support-related issue if the user disregards this admonition. If available, offer information to avoid the problem in the future or state where to find more information.
    +

    Code blocks

    Code blocks must indicate the programming language of the code snippet.

    -
    ```js
    console.log("Hello, world!");
    ```
    -

    Commands

    +
    ```js
    console.log("Hello, world!");
    ```
    +

    Commands

    • -

      Commands as part of procedures must be inside code blocks with bash as the language type. This ensures users get a "copy to clipboard" button.

      +

      Commands as part of procedures must be inside code blocks with bash as the language type. This ensures users get a "copy to clipboard" button.

    • When needed, indicate the directory where users need to move before executing the command.

      -
      ```bash
      cd ~/path/to/directory
      sudo somecommand
      ```
      +
      ```bash
      cd ~/path/to/directory
      sudo somecommand
      ```
    -

    Common Solus terms

    +

    Common Solus terms

    • Solus
        -
      • Prefer Solus rather than Solus Project. Don't use Solus OS or Solus Linux.
      • +
      • Prefer Solus rather than Solus Project. Don't use Solus OS or Solus Linux.
      • The names of the different editions of Solus are:
        • Solus Budgie
        • @@ -60,34 +49,32 @@

          Common So
        • Repositories
          • Avoid using terms such as repo, or monorepo, use the specific repository name instead.
          • -
          • Example: "The packages repository", instead of "The monorepo".
          • +
          • Example: "The packages repository", instead of "The monorepo".
        • Dev Tracker
          • Avoid using the term Dev Tracker.
          • -
          • Example: "The packages issue tracker", instead of "The dev tracker"
          • +
          • Example: "The packages issue tracker", instead of "The dev tracker"
        • eopkg
            -
          • If you're referring to the application or package, use "eopkg" with inline code formatting (see below)
          • -
          • If you're referring to package files, use ".eopkg" with inline code formatting, including the period but no wildcard
          • +
          • If you're referring to the application or package, use "eopkg" with inline code formatting (see below)
          • +
          • If you're referring to package files, use ".eopkg" with inline code formatting, including the period but no wildcard
        -

        Markdown formatting

        -

        Write content using Markdown formatting, use Prettier to enforce consistent formatting.

        -

        Package names

        +

        Markdown formatting

        +

        Write content using Markdown formatting, use Prettier to enforce consistent formatting.

        +

        Package names

        • The name of packages in the Solus repository must use inline code formatting.
        -
        To install `caddy`, use the Software Center or execute the following command:
        +
        To install `caddy`, use the Software Center or execute the following command:
        • When referring to the name of a product or project, use the name the authors use.

        Examples: RetroArch, and Code::Blocks

        -

        Spelling

        -

        We prefer American spelling over British spelling. When in doubt about the spelling of a word, see the Merriam-Webster dictionary.

    - - \ No newline at end of file +

    Spelling

    +

    We prefer American spelling over British spelling. When in doubt about the spelling of a word, see the Merriam-Webster dictionary.

    \ No newline at end of file diff --git a/docs/user/contributing/testing-an-iso/index.html b/docs/user/contributing/testing-an-iso/index.html index 35cd44621..f78157349 100644 --- a/docs/user/contributing/testing-an-iso/index.html +++ b/docs/user/contributing/testing-an-iso/index.html @@ -1,24 +1,13 @@ - - - - - -Testing an ISO | Solus Help Center - - - - - -

    Testing an ISO

    +Testing an ISO | Solus Help Center

    Testing an ISO

    A handy checklist anyone can use for testing an ISO.

    This is a list of some general things to check. It is not meant to be exhaustive, just enough to hit major points and hopefully uncover obvious problems. Testers are certainly not prohibited from doing more, at their discretion. Not all points will be testable by everyone (ex: docking / undocking). That is fine; this is just a reference.

    When testing, try to keep different types of users in mind. For instance, would a general / new user be comfortable with the experience? Would a technical user be put off by a limitation?

    -

    For any release

    +

    For any release

    • ISO can be written to a USB, used to boot a system and install
    • Can unlock the device if the live ISO lock screen engages
    • Installer is easy to follow
    • -
    • Installer detects location, time and time zone properly. Bonus points if the correct timezone is shown in the picker and you don't have to manually select one.
    • +
    • Installer detects location, time and time zone properly. Bonus points if the correct timezone is shown in the picker and you don't have to manually select one.
    • Start menu works, has search
    • Can scan / print / use your peripherals
    • Sound over speakers
    • @@ -26,23 +15,21 @@

      For any rele
    • Install your usual software and just make sure basic functionality works
    • Plugging in a USB drive allows user to mount the drive and access files
    • System can be put to sleep and woken, things still work after waking (display, keyboard, mouse, sound, network)
    • -
    • Able to create and use samba shares via file manager (you must enable smb after installation)
    • -
    • Anything that's been flaky in your experience (LVM, for instance)
    • +
    • Able to create and use samba shares via file manager (you must enable smb after installation)
    • +
    • Anything that's been flaky in your experience (LVM, for instance)
    -

    Laptops

    +

    Laptops

    • Multi-monitor display behaves properly with docking and undocking.
    -

    VMs

    +

    VMs

    This functionality might be affected by the settings of the VM.

    • Copy and paste works from host to guest before install, while booted into the live ISO
    • Copy and paste works after installation and rebooting the VM
    -

    For the specific release

    +

    For the specific release

    • Any issues that have been recently fixed, or are known to be recently flaky.
    • Check the ISO task in the tracker for other potential areas of interest.
    • -
    - - \ No newline at end of file +
    \ No newline at end of file diff --git a/docs/user/editions/budgie/configuration/index.html b/docs/user/editions/budgie/configuration/index.html index 5047c9cf8..8e98fcc86 100644 --- a/docs/user/editions/budgie/configuration/index.html +++ b/docs/user/editions/budgie/configuration/index.html @@ -1,161 +1,148 @@ - - - - - -Configuration | Solus Help Center - - - - - -

    Configuration

    +Configuration | Solus Help Center

    Configuration

    System

    -

    Date and Time

    -

    In Budgie, the easiest way to access the date and time settings is by left clicking on the time in the bottom panel and clicking on "System time and date settings".

    -

    Budgie Date and Time Right-Click

    -

    Alternatively, you can open the Budgie Control Center, and scroll the left-hand sidebar down to the bottom to find "Date & Time".

    -

    You will be presented with the following window. From here, you can enable / disable automatic date & time, automatic time zone changing, and change between AM/PM and 24-hour time formats. Note that changing the system date & time and time zone information requires clicking the "Unlock" button at the top of the window, and entering your password.

    -

    Budgie Date and Time

    -

    If you wish to change how the time is displayed in the bottom panel, open Budgie Desktop Settings from the Budgie Menu, choose the Bottom Panel from the left-hand sidebar, choose "Clock" from the list of applets in the middle, then adjust your desired settings on the right-hand side.

    -

    Budgie Clock Applet

    -

    If you want to set a custom date & time format, the "conversion specifications" referenced by the POSIX standards list the options that can be entered.

    -

    Default Applications

    -

    You can configure default applications in Budgie by opening the Budgie Control Center, and scrolling the left-hand sidebar down to "Default Applications".

    +

    Date and Time

    +

    In Budgie, the easiest way to access the date and time settings is by left clicking on the time in the bottom panel and clicking on "System time and date settings".

    +

    Budgie Date and Time Right-Click

    +

    Alternatively, you can open the Budgie Control Center, and scroll the left-hand sidebar down to the bottom to find "Date & Time".

    +

    You will be presented with the following window. From here, you can enable / disable automatic date & time, automatic time zone changing, and change between AM/PM and 24-hour time formats. Note that changing the system date & time and time zone information requires clicking the "Unlock" button at the top of the window, and entering your password.

    +

    Budgie Date and Time

    +

    If you wish to change how the time is displayed in the bottom panel, open Budgie Desktop Settings from the Budgie Menu, choose the Bottom Panel from the left-hand sidebar, choose "Clock" from the list of applets in the middle, then adjust your desired settings on the right-hand side.

    +

    Budgie Clock Applet

    +

    If you want to set a custom date & time format, the "conversion specifications" referenced by the POSIX standards list the options that can be entered.

    +

    Default Applications

    +

    You can configure default applications in Budgie by opening the Budgie Control Center, and scrolling the left-hand sidebar down to "Default Applications".

    The drop-down boxes here enable choosing the default application for each category of file. For most categories, you will need to have already installed alternative applications before you can change the default settings. For instance, if you wish to change the default video player from Celluloid to VLC, then you must first install VLC (available in the Software Center).

    -

    Budgie Default Applications

    -

    You can specify default applications for individual file types by right-clicking on a file and clicking on "Open With" from the popup menu, then choosing "Other Application".

    -

    Budgie Context Menu

    -

    Next, select the application you wish to use from the list, then click "Set as default" below the list. Finish by clicking "OK". In the future, all files with the same file type will open with the chosen application.

    -

    Budgie Application Selection

    -

    Displays

    -

    You can configure your display(s) in Budgie by opening the Budgie Menu and then clicking on "Displays" in the System Settings category.

    +

    Budgie Default Applications

    +

    You can specify default applications for individual file types by right-clicking on a file and clicking on "Open With" from the popup menu, then choosing "Other Application".

    +

    Budgie Context Menu

    +

    Next, select the application you wish to use from the list, then click "Set as default" below the list. Finish by clicking "OK". In the future, all files with the same file type will open with the chosen application.

    +

    Budgie Application Selection

    +

    Displays

    +

    You can configure your display(s) in Budgie by opening the Budgie Menu and then clicking on "Displays" in the System Settings category.

    You will then be shown the following window.

    -

    Budgie Displays Overview

    +

    Budgie Displays Overview

    Click on the individual display you wish to configure. You will now be able to select if you wish to use this monitor as the primary or secondary display, mirror it with another display, or turn it off. This window also gives you the size and aspect ratio, ability to rotate the display, and ability to change the resolution.

    -

    Budgie Individual Display Settings

    +

    Budgie Individual Display Settings

    Going back to the Displays section, you also have the option to arrange your displays. Click the “Arrange Combined Displays” button and then drag your displays so they are arranged to your liking.

    -

    Budgie Arrange Displays

    -

    Click "Apply" once you are happy with your changes. You will be shown a message asking if the display looks OK, if it does, click on "Keep This Configuration".

    -

    Budgie Confirm Display Settings

    -

    Keyboard Layout

    -

    Using Budgie, you can change your keyboard layout in the Budgie Control Center. Click on the Budgie Menu, click the System Settings icon at the bottom or "Budgie Control Center" in the application list, and then click on "Keyboard" in the System Settings category.

    -

    Budgie Keyboard Settings

    -

    Click the "+" button to add an input source (keyboard layout). You will be shown the following dialog.

    -

    Budgie Add Input Source

    -

    Here you can select the language and then keyboard layout within each language section. If it does not appear in this list, click the "⋮" button (three vertical dots). This will enable you to search for the keyboard layout you wish to use.

    -

    After choosing the keyboard layout, click the "Add" button at the top of the window. You will be brought back to the following dialog with your new keyboard layout. In the image below, we are now using English (US) and English (UK) layouts.

    -

    Budgie New Layout Added

    -

    You can remove a keyboard layout by clicking on one of the items, for instance English (UK), then clicking the "⋮" button, then choosing "Remove".

    +

    Budgie Arrange Displays

    +

    Click "Apply" once you are happy with your changes. You will be shown a message asking if the display looks OK, if it does, click on "Keep This Configuration".

    +

    Budgie Confirm Display Settings

    +

    Keyboard Layout

    +

    Using Budgie, you can change your keyboard layout in the Budgie Control Center. Click on the Budgie Menu, click the System Settings icon at the bottom or "Budgie Control Center" in the application list, and then click on "Keyboard" in the System Settings category.

    +

    Budgie Keyboard Settings

    +

    Click the "+" button to add an input source (keyboard layout). You will be shown the following dialog.

    +

    Budgie Add Input Source

    +

    Here you can select the language and then keyboard layout within each language section. If it does not appear in this list, click the "⋮" button (three vertical dots). This will enable you to search for the keyboard layout you wish to use.

    +

    After choosing the keyboard layout, click the "Add" button at the top of the window. You will be brought back to the following dialog with your new keyboard layout. In the image below, we are now using English (US) and English (UK) layouts.

    +

    Budgie New Layout Added

    +

    You can remove a keyboard layout by clicking on one of the items, for instance English (UK), then clicking the "⋮" button, then choosing "Remove".

    If you wish to use multiple keyboard layouts, you can switch between them by using the keyboard shortcut Super + Shift + Space, or by adding the Keyboard Layout Indicator applet to your Budgie panel.

    -

    Keyboard Layout Indicator

    -

    To add the Keyboard Layout Indicator to your panel, open the Budgie Desktop Settings app from the Budgie Menu, then click "Bottom Panel" on the left-hand sidebar.

    -

    Budgie Bottom Panel Settings

    -

    On the right side of the window, click the "+" button next to "Add applet".

    -

    Find the Keyboard Layout Indicator entry and select it, then click "Add" at the top of the window. This will add the Keyboard Layout Indicator (to the center section by default), as shown below.

    -

    Budgie Keyboard Layout Applet

    -

    IBus

    -

    Budgie comes with IBus ready to go straight out of the box. If you need an additional IBus IME see: IBus

    +

    Keyboard Layout Indicator

    +

    To add the Keyboard Layout Indicator to your panel, open the Budgie Desktop Settings app from the Budgie Menu, then click "Bottom Panel" on the left-hand sidebar.

    +

    Budgie Bottom Panel Settings

    +

    On the right side of the window, click the "+" button next to "Add applet".

    +

    Find the Keyboard Layout Indicator entry and select it, then click "Add" at the top of the window. This will add the Keyboard Layout Indicator (to the center section by default), as shown below.

    +

    Budgie Keyboard Layout Applet

    +

    IBus

    +

    Budgie comes with IBus ready to go straight out of the box. If you need an additional IBus IME see: IBus

    You will now be able to switch between your keyboard layouts by using the keyboard shortcut Super + Shift + Space or by using the Keyboard Layout Indicator applet.

    -

    Budgie Keyboard Layout Applet: IBus

    -

    Language

    -

    You can change your language in Budgie by opening the Budgie Menu and then clicking on "Region and Language" in the System Settings category.

    +

    Budgie Keyboard Layout Applet: IBus

    +

    Language

    +

    You can change your language in Budgie by opening the Budgie Menu and then clicking on "Region and Language" in the System Settings category.

    You will now be shown the following window. This window allows you to change your language, formatting for dates and times and the language of your keyboard.

    -

    Budgie Region and Languages

    -

    Start by clicking "Language". This brings up a selection of languages to chose from.

    -

    Budgie Selecting Language

    +

    Budgie Region and Languages

    +

    Start by clicking "Language". This brings up a selection of languages to chose from.

    +

    Budgie Selecting Language

    If your language does not appear in the list, click the ⋮ button at the bottom (three vertical dots) to show all the available languages. You can use the search box to go directly to your choice or scroll down the list.

    -

    Budgie Language Search

    -

    Once you have selected the language you wish to use, click "Done". You may need to logout and login to your computer for it to take affect.

    -

    Mouse and Touchpad

    -

    You can configure the settings of your mouse and / or touchpad by opening the Budgie Menu and then clicking on "Mouse and Touchpad" in the System Settings category. You will see either settings for your mouse or trackpad, depending on the device.

    -

    Mouse

    -

    Budgie Mouse Settings

    +

    Budgie Language Search

    +

    Once you have selected the language you wish to use, click "Done". You may need to logout and login to your computer for it to take affect.

    +

    Mouse and Touchpad

    +

    You can configure the settings of your mouse and / or touchpad by opening the Budgie Menu and then clicking on "Mouse and Touchpad" in the System Settings category. You will see either settings for your mouse or trackpad, depending on the device.

    +

    Mouse

    +

    Budgie Mouse Settings

    For mice, you can set:

    • The primary button (usually left click) to be left or right.
    • Mouse speed.
    • -
    • Enabling / disabling "natural scrolling" (reversed scrolling direction).
    • +
    • Enabling / disabling "natural scrolling" (reversed scrolling direction).
    -

    Touchpad

    -

    Budgie Touchpad Settings

    +

    Touchpad

    +

    Budgie Touchpad Settings

    For touchpads, you can set:

    • The primary button (usually left click) to be left or right.
    • Enabling / disabling of the touchpad.
    • -
    • Enabling / disabling "natural scrolling" (reversed scrolling direction).
    • +
    • Enabling / disabling "natural scrolling" (reversed scrolling direction).
    • Touchpad speed.
    • Enabling / disabling of Tap to Click.
    -

    Testing

    -

    You can test your settings by clicking the "Test Your Settings" button in the top right of the window.

    -

    Network

    -

    To configure your network settings in Budgie, start by opening the Budgie Menu and then click on "Network" in the System Settings category.

    -

    Budgie Network Overview

    +

    Testing

    +

    You can test your settings by clicking the "Test Your Settings" button in the top right of the window.

    +

    Network

    +

    To configure your network settings in Budgie, start by opening the Budgie Menu and then click on "Network" in the System Settings category.

    +

    Budgie Network Overview

    To configure wireless, go to the Wi-Fi section. If your wireless is currently turned off, click the toggle button, leave the Network section, and go back in.

    -

    Non-Hidden Network

    +

    Non-Hidden Network

    In the WiFi section of the Network settings window, click the access point you wish to connect to.

    -

    You may now be prompted to authenticate with the network. Type in your password and then click "Connect".

    -

    Budgie Network Authentication

    +

    You may now be prompted to authenticate with the network. Type in your password and then click "Connect".

    +

    Budgie Network Authentication

    If your password is correct, you will now be authenticated with the network.

    -

    Hidden Network

    +

    Hidden Network

    If you wish to connect to a hidden network, click “Connect to Hidden Network...” in the WiFi section of the Network settings window. It will show the following dialog, where you type the network name and type of security (if any).

    -

    Budgie Hidden Network

    +

    Budgie Hidden Network

    If the network is found and has a password, you will be prompted to authenticate with the network.

    -

    Sound and Sound Devices

    +

    Sound and Sound Devices

    To change the volume in Budgie, simply left click on the speaker icon in the system tray and drag the slider or use the plus and minus icons to reach your desired level.

    -

    Budgie Volume Control

    -

    Settings

    +

    Budgie Volume Control

    +

    Settings

    You can access sound settings via the Sound applet in Raven, the Notification and Widget Center. Open Raven, either by clicking on its icon in the far right of the system tray or using the keyboard shortcut Super + A. The Sound applet allows you to enable, disable and alter input and output methods as well as providing a simple volume slider.

    -

    Raven Sound Applet

    -

    You can access further sound settings, including individual application volume controls, and a simple speaker test by opening the Budgie Menu and then clicking on "Sound" in the System Settings category.

    -

    Budgie Sound Settings

    -

    Users

    -

    To add and remove users with Budgie, start by opening the Budgie Menu and then click on "Users" in the System Settings category.

    -

    Budgie User Settings

    -

    To manage your own or other accounts, you first need to authenticate. Click the "Unlock" button in the top right corner and type your password. Note that you are required to be an administrator. If you're the only user on the system, then your account is an administrator by default.

    -

    In the event the password provided is correct, the "Unlock" button will change to "Add User..."

    -

    Adding a User

    -

    To add a user, click the "Add User..." button in the top right corner of the Users window.

    -

    Budgie Add User Button

    +

    Raven Sound Applet

    +

    You can access further sound settings, including individual application volume controls, and a simple speaker test by opening the Budgie Menu and then clicking on "Sound" in the System Settings category.

    +

    Budgie Sound Settings

    +

    Users

    +

    To add and remove users with Budgie, start by opening the Budgie Menu and then click on "Users" in the System Settings category.

    +

    Budgie User Settings

    +

    To manage your own or other accounts, you first need to authenticate. Click the "Unlock" button in the top right corner and type your password. Note that you are required to be an administrator. If you're the only user on the system, then your account is an administrator by default.

    +

    In the event the password provided is correct, the "Unlock" button will change to "Add User..."

    +

    Adding a User

    +

    To add a user, click the "Add User..." button in the top right corner of the Users window.

    +

    Budgie Add User Button

    This will open the Add User window (shown below).

    -

    Budgie Add User Dialog

    -

    Fill in the required items and then finish adding the new user by clicking "Add" in the top right corner.

    -

    Removing a User

    -

    To remove a user, open the Users window and then click on the user you wish to remove. Now click on the red "Remove User..." button in the bottom right corner.

    -

    Budgie User List

    +

    Budgie Add User Dialog

    +

    Fill in the required items and then finish adding the new user by clicking "Add" in the top right corner.

    +

    Removing a User

    +

    To remove a user, open the Users window and then click on the user you wish to remove. Now click on the red "Remove User..." button in the bottom right corner.

    +

    Budgie User List

    Upon clicking to remove the user, you will be given the option to keep their files, delete their files, or cancel the removal of the user’s account.

    -

    Budgie Keep Files Prompt

    +

    Budgie Keep Files Prompt

    User Interface

    -

    Desktop Background

    -

    To change the desktop background in Budgie, open the Budgie Control Center by selecting "System Settings" from either the Budgie Menu, or by right-clicking on a blank spot on the desktop.

    -

    Budgie Desktop Right-Click Menu

    -

    Once the Budgie Control Center is open, click "Background" on the left-hand sidebar.

    -

    Click one of the images displayed on the right to choose a pre-installed background image, or click "Add Picture..." in the headerbar to add one of your own image files to the available options.

    -

    Budgie Control Center Background Section

    -

    Desktop Icons

    -

    Desktop Icons are enabled by default. To disable them, open the Budgie Desktop Settings app by selecting "Budgie Desktop Settings" from the Budgie Menu, or from the pop-up menu when right-clicking on a blank spot on the desktop.

    -

    In the Budgie Desktop Settings app, click "Desktop" in the left-hand sidebar - Desktop Icons is the first toggle switch on that screen.

    -

    Budgie Desktop Icons

    +

    Desktop Background

    +

    To change the desktop background in Budgie, open the Budgie Control Center by selecting "System Settings" from either the Budgie Menu, or by right-clicking on a blank spot on the desktop.

    +

    Budgie Desktop Right-Click Menu

    +

    Once the Budgie Control Center is open, click "Background" on the left-hand sidebar.

    +

    Click one of the images displayed on the right to choose a pre-installed background image, or click "Add Picture..." in the headerbar to add one of your own image files to the available options.

    +

    Budgie Control Center Background Section

    +

    Desktop Icons

    +

    Desktop Icons are enabled by default. To disable them, open the Budgie Desktop Settings app by selecting "Budgie Desktop Settings" from the Budgie Menu, or from the pop-up menu when right-clicking on a blank spot on the desktop.

    +

    In the Budgie Desktop Settings app, click "Desktop" in the left-hand sidebar - Desktop Icons is the first toggle switch on that screen.

    +

    Budgie Desktop Icons

    To place files on your desktop, you can either drag them directly onto the Desktop, or move the files you want to the Desktop folder within the Nemo file manager app (as shown in the image below).

    -

    Budgie Desktop Folder

    -

    Workspaces

    +

    Budgie Desktop Folder

    +

    Workspaces

    Budgie enables the switching of workspaces with the Workspace Switcher. You can enable workspaces in Budgie by adding the Workspace Switcher applet to your panel.

    -

    To add this applet, open the Budgie Control Center by selecting "System Settings" from either the Budgie Menu, or by right-clicking on a blank spot on the desktop. Once in the Budgie Control Center, in the left-hand sidebar, select the panel to which you want to add the Workspace Switcher (choose the default Bottom Panel if you don't want to add more panels at this time).

    -

    Budgie Desktop Settings Panel Section

    -

    Click the + button next to "Add applet" on the right side of the window. This will open the list of available applets - scroll down until you find "Workspace Switcher", select it, and then click the 'Add' button in the top-right of the window.

    -

    Adding Budgie Workspaces Applet

    +

    To add this applet, open the Budgie Control Center by selecting "System Settings" from either the Budgie Menu, or by right-clicking on a blank spot on the desktop. Once in the Budgie Control Center, in the left-hand sidebar, select the panel to which you want to add the Workspace Switcher (choose the default Bottom Panel if you don't want to add more panels at this time).

    +

    Budgie Desktop Settings Panel Section

    +

    Click the + button next to "Add applet" on the right side of the window. This will open the list of available applets - scroll down until you find "Workspace Switcher", select it, and then click the 'Add' button in the top-right of the window.

    +

    Adding Budgie Workspaces Applet

    You should now see your workspaces available in the main Budgie panel. Applications can be moved between workspaces by dragging and dropping their icons within the Workspace Switcher.

    -

    Budgie Workspaces

    -

    Keyboard Shortcuts

    +

    Budgie Workspaces

    +

    Keyboard Shortcuts

    Budgie provides a variety of keyboard shortcuts for workspaces.

    -

    To view these shortcuts, open the Budgie Control Center app, choose the "Keyboard" section in the left-hand sidebar, then scroll down in the right part of the window to choose "Keyboard Shortcuts".

    -

    Budgie Control Center Keyboard Shortcuts

    -

    Workspace shortcuts are contained in the "Navigation" section of the Keyboard Shortcuts window.

    -

    Budgie Control Center Keyboard Shortcuts Sections

    -

    Workspaces Configuration

    -

    There are 4 workspaces available in Budgie by default. To add a new workspace, click on the "+" button.

    +

    To view these shortcuts, open the Budgie Control Center app, choose the "Keyboard" section in the left-hand sidebar, then scroll down in the right part of the window to choose "Keyboard Shortcuts".

    +

    Budgie Control Center Keyboard Shortcuts

    +

    Workspace shortcuts are contained in the "Navigation" section of the Keyboard Shortcuts window.

    +

    Budgie Control Center Keyboard Shortcuts Sections

    +

    Workspaces Configuration

    +

    There are 4 workspaces available in Budgie by default. To add a new workspace, click on the "+" button.

    If you wish to remove or rename your workspace, right click on the desired workspace and select rename or remove.

    -

    Budgie Remove or Rename Workspaces

    - - \ No newline at end of file +

    Budgie Remove or Rename Workspaces

    \ No newline at end of file diff --git a/docs/user/editions/budgie/index.html b/docs/user/editions/budgie/index.html index d4360dba7..6cf578e37 100644 --- a/docs/user/editions/budgie/index.html +++ b/docs/user/editions/budgie/index.html @@ -1,15 +1,4 @@ - - - - - -Budgie | Solus Help Center - - - - - -

    Budgie Desktop

    +Budgie | Solus Help Center - - \ No newline at end of file +

    Go to Budgie Configuration

    +

    Go to Budgie Tips and Tricks

    \ No newline at end of file diff --git a/docs/user/editions/budgie/tips-and-tricks/index.html b/docs/user/editions/budgie/tips-and-tricks/index.html index cd2f9ac7a..84793c145 100644 --- a/docs/user/editions/budgie/tips-and-tricks/index.html +++ b/docs/user/editions/budgie/tips-and-tricks/index.html @@ -1,24 +1,11 @@ - - - - - -Tips and Tricks | Solus Help Center - - - - - -

    Tips and Tricks

    -

    Budgie Shortcuts

    +Tips and Tricks | Solus Help Center

    Tips and Tricks

    +

    Budgie Shortcuts

    Budgie provides multiple shortcuts to make navigating around Budgie faster and easier.

    -
    Keyboard ShortcutAction
    Alt + F2Open Budgie Run dialog
    Alt + F4Kill the active window on the desktop
    Alt + TabOpen application switcher overlay
    Shift + Alt + TabOpen application switcher, switch to previous applications
    Super (also Super + S)Open Budgie Menu
    Super + AOpen Applets section of Raven
    Super + LLock the screen
    Super + NOpen Notifications section of Raven
    Super + Space (also Alt + Shift)Switch keyboard layouts
    -

    Restoring Panel Defaults

    -

    To restore Budgie's default panel settings, run the command below

    -
    budgie-panel --reset --replace &
    +
    Keyboard ShortcutAction
    Alt + F2Open Budgie Run dialog
    Alt + F4Kill the active window on the desktop
    Alt + TabOpen application switcher overlay
    Shift + Alt + TabOpen application switcher, switch to previous applications
    Super (also Super + S)Open Budgie Menu
    Super + AOpen Applets section of Raven
    Super + LLock the screen
    Super + NOpen Notifications section of Raven
    Super + Space (also Alt + Shift)Switch keyboard layouts
    +

    Restoring Panel Defaults

    +

    To restore Budgie's default panel settings, run the command below

    +
    budgie-panel --reset --replace &

    After this you can press CTRL + D to close the terminal without closing the Budgie Panel process.

    -

    TODO: There's got to be more that we can add here

    -
    - - \ No newline at end of file +

    TODO: There's got to be more that we can add here

    +
    \ No newline at end of file diff --git a/docs/user/editions/gnome/configuration/index.html b/docs/user/editions/gnome/configuration/index.html index c5bdc1add..ff2354243 100644 --- a/docs/user/editions/gnome/configuration/index.html +++ b/docs/user/editions/gnome/configuration/index.html @@ -1,148 +1,135 @@ - - - - - -Configuration | Solus Help Center - - - - - -

    Configuration

    -

    System

    -

    Date and time

    -

    To change the date and time settings in GNOME, you can open the Overlay using the Super button on your keyboard or by clicking the applications icon in the dock and then finding and clicking on "Date & Time".

    -

    You will be presented with the following window. This window provides you with the ability to enable / disable automatic date & time, automatic time zone changing, and the time format. You will need to click on "Unlock" and input your user password before changes can be made.

    -

    GNOME Date and Time

    -

    If you wish to change how the time is displayed in the top panel, go back to the Applications Overlay and then find and click on "Tweak Tool". You can now show the date and / or seconds by opening the Top Bar section.

    -

    GNOME Tweak Tool: Top Bar

    -

    Default applications

    -

    With GNOME, you will need to open the Overlay using the Super button on your keyboard or by clicking the applications icon in the dock and then finding and clicking on "Details".

    -

    Upon entering the Details section, click on "Default Applications" and then use the drop down boxes to select a different default application for each category. For most categories, you will need to have installed alternative applications before you can change the default settings. For instance, if you wish to change the default video player from GNOME MPV to VLC then you must first install VLC (available in the Software Center).

    -

    GNOME Default Applications

    -

    Note: In the image above, we've changed the Web browser and Photo viewer.

    -

    You can specify default applications for individual file types by right clicking on a file and then clicking on "Open With Other Application".

    -

    GNOME Context Menu

    -

    Next, select the application you wish to use from the list. You may need to click "View All Applications" if you can't see the one you would like to use. Finish by clicking "Select". In the future, all files with the same file type will open with the same application.

    -

    GNOME Application Selection

    -

    Displays

    -

    In GNOME, You can configure your display(s) simply by right clicking anywhere on the desktop and clicking "Display Settings".

    -

    GNOME Desktop Context Menu

    -

    Alternatively, you can open the Overlay using the Super button on your keyboard or by clicking the applications icon in the dock and then finding and clicking on "Displays".

    +Configuration | Solus Help Center

    Configuration

    +

    System

    +

    Date and time

    +

    To change the date and time settings in GNOME, you can open the Overlay using the Super button on your keyboard or by clicking the applications icon in the dock and then finding and clicking on "Date & Time".

    +

    You will be presented with the following window. This window provides you with the ability to enable / disable automatic date & time, automatic time zone changing, and the time format. You will need to click on "Unlock" and input your user password before changes can be made.

    +

    GNOME Date and Time

    +

    If you wish to change how the time is displayed in the top panel, go back to the Applications Overlay and then find and click on "Tweak Tool". You can now show the date and / or seconds by opening the Top Bar section.

    +

    GNOME Tweak Tool: Top Bar

    +

    Default applications

    +

    With GNOME, you will need to open the Overlay using the Super button on your keyboard or by clicking the applications icon in the dock and then finding and clicking on "Details".

    +

    Upon entering the Details section, click on "Default Applications" and then use the drop down boxes to select a different default application for each category. For most categories, you will need to have installed alternative applications before you can change the default settings. For instance, if you wish to change the default video player from GNOME MPV to VLC then you must first install VLC (available in the Software Center).

    +

    GNOME Default Applications

    +

    Note: In the image above, we've changed the Web browser and Photo viewer.

    +

    You can specify default applications for individual file types by right clicking on a file and then clicking on "Open With Other Application".

    +

    GNOME Context Menu

    +

    Next, select the application you wish to use from the list. You may need to click "View All Applications" if you can't see the one you would like to use. Finish by clicking "Select". In the future, all files with the same file type will open with the same application.

    +

    GNOME Application Selection

    +

    Displays

    +

    In GNOME, You can configure your display(s) simply by right clicking anywhere on the desktop and clicking "Display Settings".

    +

    GNOME Desktop Context Menu

    +

    Alternatively, you can open the Overlay using the Super button on your keyboard or by clicking the applications icon in the dock and then finding and clicking on "Displays".

    You will then be shown the following window.

    -

    GNOME Displays Overview

    +

    GNOME Displays Overview

    Click on the individual display you wish to configure. You will now be able to select if you wish to use this monitor as the primary or secondary display, mirror it with another display, or turn it off. This window also gives you the size and aspect ratio, ability to rotate the display, and ability to change the resolution.

    -

    GNOME Individual Display Settings

    +

    GNOME Individual Display Settings

    Going back to the Displays section, you also have the option to arrange your displays. Click the “Arrange Combined Displays” button and then drag your displays so they are arranged to your liking.

    -

    GNOME Arrange Displays

    -

    Click "Apply" once you are happy with your changes. You will be shown a message asking if the display looks OK, if it does, click on "Keep Changes" within 20 seconds.

    -

    GNOME Confirm Display Settings

    -

    Keyboard layout

    -

    With GNOME, open the Overlay using the Super button on your keyboard or by clicking the applications icon in the dock and then find and click on "Region and Language".

    +

    GNOME Arrange Displays

    +

    Click "Apply" once you are happy with your changes. You will be shown a message asking if the display looks OK, if it does, click on "Keep Changes" within 20 seconds.

    +

    GNOME Confirm Display Settings

    +

    Keyboard layout

    +

    With GNOME, open the Overlay using the Super button on your keyboard or by clicking the applications icon in the dock and then find and click on "Region and Language".

    You will now be shown the following dialog.

    -

    GNOME Region and Languages

    +

    GNOME Region and Languages

    Click the + button to add an input source (keyboard layout). You will be shown the following dialog.

    -

    GNOME Add Input Source

    +

    GNOME Add Input Source

    Here you can select the language and then keyboard layout within each language section. If it does not appear in this list, click the button (three vertical dots). This will enable you to search for the keyboard layout you wish to use.

    -

    After choosing the keyboard layout, click "Done". You will be brought back to the following dialog with your new keyboard layout. In the image below, we are now using English (US), Finnish, and Swedish layout.

    -

    GNOME New Input Source Added

    +

    After choosing the keyboard layout, click "Done". You will be brought back to the following dialog with your new keyboard layout. In the image below, we are now using English (US), Finnish, and Swedish layout.

    +

    GNOME New Input Source Added

    You can remove a keyboard layout by clicking on one of the items, for instance Swedish, then clicking the - button.

    If you wish to use multiple keyboard layouts, you can switch between them by using the keyboard shortcut Super + Space or by clicking on the keyboard layout icon shown in the system tray. The icon will automatically appear when you have 2 or more keyboard layouts selected.

    -

    GNOME Keyboard Indicator

    -

    IBus

    -

    For ease of use, GNOME has IBus up and running by default. If you need an additional IBus IME see: IBus

    +

    GNOME Keyboard Indicator

    +

    IBus

    +

    For ease of use, GNOME has IBus up and running by default. If you need an additional IBus IME see: IBus

    You can now switch between your layouts by using the keyboard shortcut Super + Space or by clicking on the keyboard layout icon shown in the system tray.

    -

    Language

    -

    With GNOME, open the Overlay using the Super button on your keyboard or by clicking the applications icon in the dock and then find and click on "Region and Language".

    +

    Language

    +

    With GNOME, open the Overlay using the Super button on your keyboard or by clicking the applications icon in the dock and then find and click on "Region and Language".

    You will now be shown the following window. This window allows you to change your language, formatting for dates and times and the language of your keyboard.

    -

    GNOME Region and Languages

    -

    Start by clicking "Language". This brings up a selection of languages to chose from.

    -

    GNOME Selecting Language

    +

    GNOME Region and Languages

    +

    Start by clicking "Language". This brings up a selection of languages to chose from.

    +

    GNOME Selecting Language

    If your language does not appear in the list, click the ⋮ button at the bottom (three vertical dots) to show all the available languages. You can use the search box to go directly to your choice or scroll down the list.

    -

    GNOME Language Search

    -

    Once you have selected the language you wish to use, click "Done". You may need to logout and login to your computer for it to take affect.

    -

    Mouse and touchpad

    -

    With GNOME, open the Overlay using the Super button on your keyboard or by clicking the applications icon in the dock and then find and click on "Mouse and Touchpad". You will see either settings for your mouse or trackpad, depending on the device.

    -

    Mouse

    -

    GNOME Mouse Settings

    +

    GNOME Language Search

    +

    Once you have selected the language you wish to use, click "Done". You may need to logout and login to your computer for it to take affect.

    +

    Mouse and touchpad

    +

    With GNOME, open the Overlay using the Super button on your keyboard or by clicking the applications icon in the dock and then find and click on "Mouse and Touchpad". You will see either settings for your mouse or trackpad, depending on the device.

    +

    Mouse

    +

    GNOME Mouse Settings

    For mice, you can set:

    • The primary button (usually left click) to be left or right.
    • Mouse speed.
    • -
    • Enabling / disabling "natural scrolling" (reversed scrolling direction).
    • +
    • Enabling / disabling "natural scrolling" (reversed scrolling direction).
    -

    Touchpad

    -

    GNOME Touchpad Settings

    +

    Touchpad

    +

    GNOME Touchpad Settings

    For touchpads, you can set:

    • The primary button (usually left click) to be left or right.
    • Enabling / disabling of the touchpad.
    • -
    • Enabling / disabling "natural scrolling" (reversed scrolling direction).
    • +
    • Enabling / disabling "natural scrolling" (reversed scrolling direction).
    • Touchpad speed.
    • Enabling / disabling of Tap to Click.
    -

    Testing

    -

    You can test your settings by clicking the "Test Your Settings" button in the top right of the window.

    -

    Networking

    -

    Easily change network settings with GNOME by left or right clicking on the system tray in the top panel and then clicking on "WiFi Not Connected".

    -

    GNOME Network Indicator

    -

    Alternatively, you can open the Overlay using the Super button on your keyboard or by clicking the applications icon in the dock and then finding and clicking on "Network".

    -

    Non-hidden network

    -

    Once you have opened the "WiFi Not Connected" menu, click on "Select Network". Click on the network you wish to join and then on "Connect".

    -

    GNOME Network Selection

    -

    You may now be prompted to authenticate with the network. Type in your password and then click "Connect".

    -

    GNOME Network Authentication

    +

    Testing

    +

    You can test your settings by clicking the "Test Your Settings" button in the top right of the window.

    +

    Networking

    +

    Easily change network settings with GNOME by left or right clicking on the system tray in the top panel and then clicking on "WiFi Not Connected".

    +

    GNOME Network Indicator

    +

    Alternatively, you can open the Overlay using the Super button on your keyboard or by clicking the applications icon in the dock and then finding and clicking on "Network".

    +

    Non-hidden network

    +

    Once you have opened the "WiFi Not Connected" menu, click on "Select Network". Click on the network you wish to join and then on "Connect".

    +

    GNOME Network Selection

    +

    You may now be prompted to authenticate with the network. Type in your password and then click "Connect".

    +

    GNOME Network Authentication

    If your password is correct, you will now be authenticated with the network.

    -

    Hidden network

    -

    To join a hidden network, open the "WiFi Not Connected" menu and click on "WiFi Settings".

    -

    GNOME Network Overview

    +

    Hidden network

    +

    To join a hidden network, open the "WiFi Not Connected" menu and click on "WiFi Settings".

    +

    GNOME Network Overview

    Next, click on “Connect to Hidden Network...”. It will show the following dialog, where you type the network name and type of security (if any).

    -

    GNOME Hidden Network

    +

    GNOME Hidden Network

    If the network is found and has a password, you will be prompted to authenticate with the network.

    -

    Sound and sound devices

    +

    Sound and sound devices

    With GNOME, the volume can be changed by left or right clicking the system tray in the top panel and then simply dragging the volume slider with your mouse.

    -

    GNOME Volume Control

    -

    Settings

    -

    You can access sound settings, including individual application volume controls, and a simple speaker test by opening the Overlay using the Super button on your keyboard or by clicking the applications icon in the dock and then finding and clicking on "Sound".

    -

    GNOME Sound Settings

    -

    Users

    -

    To add and remove users with GNOME, you can click on the icons in the far right of the top panel. Click on your name and then on "Account Setting".

    -

    GNOME User Indicator

    -

    Alternatively, you can open the Overlay using the Super button on your keyboard or by clicking the applications icon in the dock and then finding and clicking on "Users".

    -

    GNOME User Settings

    -

    To manage your own or other accounts, you first need to authenticate. Click the "Unlock" button in the top right corner and type your password. Note that you are required to be an administrator. If you're the only user on the system, then your account is an administrator by default.

    -

    In the event the password provided is correct, the "Unlock" button will change to "Add User..."

    -

    Adding a user

    -

    To add a user, click the "Add User..." button in the top right corner of the Users window.

    -

    GNOME Add User Button

    +

    GNOME Volume Control

    +

    Settings

    +

    You can access sound settings, including individual application volume controls, and a simple speaker test by opening the Overlay using the Super button on your keyboard or by clicking the applications icon in the dock and then finding and clicking on "Sound".

    +

    GNOME Sound Settings

    +

    Users

    +

    To add and remove users with GNOME, you can click on the icons in the far right of the top panel. Click on your name and then on "Account Setting".

    +

    GNOME User Indicator

    +

    Alternatively, you can open the Overlay using the Super button on your keyboard or by clicking the applications icon in the dock and then finding and clicking on "Users".

    +

    GNOME User Settings

    +

    To manage your own or other accounts, you first need to authenticate. Click the "Unlock" button in the top right corner and type your password. Note that you are required to be an administrator. If you're the only user on the system, then your account is an administrator by default.

    +

    In the event the password provided is correct, the "Unlock" button will change to "Add User..."

    +

    Adding a user

    +

    To add a user, click the "Add User..." button in the top right corner of the Users window.

    +

    GNOME Add User Button

    This will open the Add User window (shown below).

    -

    GNOME Add User Dialog

    -

    Fill in the required items and then finish adding the new user by clicking "Add" in the top right corner.

    -

    Removing a user

    -

    To remove a user, open the Users window and then click on the user you wish to remove. Now click on the red "Remove User..." button in the bottom right corner.

    -

    GNOME User List

    +

    GNOME Add User Dialog

    +

    Fill in the required items and then finish adding the new user by clicking "Add" in the top right corner.

    +

    Removing a user

    +

    To remove a user, open the Users window and then click on the user you wish to remove. Now click on the red "Remove User..." button in the bottom right corner.

    +

    GNOME User List

    Upon clicking to remove the user, you will be given the option to keep their files, delete their files, or cancel the removal of the user’s account.

    -

    GNOME Keep Files Prompt

    -

    User interface

    -

    Desktop background

    -

    The GNOME desktop background can be changed by simply right clicking anywhere on the desktop and selecting "Change background".

    -

    GNOME Background Right Click Menu

    -

    Alternatively, you can open the Applications Overlay by clicking the applications icon in the dock and then finding and clicking on "Background".

    -

    You will have two options, Background and Lock Screen. Click "Background".

    -

    GNOME Settings Background Section

    -

    In this section, you can choose between Solus wallpapers, pictures in your Pictures folder, or solid colors. After choosing, click "Select".

    -

    GNOME Background Selection

    -

    Desktop icons

    -

    In GNOME, you can enable desktop items by opening the Overlay using the Super button on your keyboard or by clicking the Applications icon in the dock and then search for and open "Tweak Tool". You can then toggle them on and off by clicking "Icons on Desktop" under the Desktop section.

    -

    GNOME Tweak Tool

    -

    You may now add things to your Desktop. This can be done by dragging an item onto the Desktop or by right clicking an icon and selecting Copy to / Move to Desktop. Alternatively, click on the "Files" icon in the dock and then move the files you want to the Desktop folder (as shown in the image below). Please note, the Desktop folder is not visible in "Files" until you've enabled the Desktop icons.

    -

    GNOME Desktop Folder

    -

    Workspaces

    +

    GNOME Keep Files Prompt

    +

    User interface

    +

    Desktop background

    +

    The GNOME desktop background can be changed by simply right clicking anywhere on the desktop and selecting "Change background".

    +

    GNOME Background Right Click Menu

    +

    Alternatively, you can open the Applications Overlay by clicking the applications icon in the dock and then finding and clicking on "Background".

    +

    You will have two options, Background and Lock Screen. Click "Background".

    +

    GNOME Settings Background Section

    +

    In this section, you can choose between Solus wallpapers, pictures in your Pictures folder, or solid colors. After choosing, click "Select".

    +

    GNOME Background Selection

    +

    Desktop icons

    +

    In GNOME, you can enable desktop items by opening the Overlay using the Super button on your keyboard or by clicking the Applications icon in the dock and then search for and open "Tweak Tool". You can then toggle them on and off by clicking "Icons on Desktop" under the Desktop section.

    +

    GNOME Tweak Tool

    +

    You may now add things to your Desktop. This can be done by dragging an item onto the Desktop or by right clicking an icon and selecting Copy to / Move to Desktop. Alternatively, click on the "Files" icon in the dock and then move the files you want to the Desktop folder (as shown in the image below). Please note, the Desktop folder is not visible in "Files" until you've enabled the Desktop icons.

    +

    GNOME Desktop Folder

    +

    Workspaces

    GNOME enables the switching of workspaces via the Workspace Switcher on the right side of the Activities Overview screen. Application windows can be dragged from the Activities Overview to a workspace, whether it is empty / new, or one that already has windows in it.

    -

    Keyboard Shortcuts

    +

    Keyboard Shortcuts

    GNOME provides a variety of keyboard shortcuts for workspaces.

    To view these shortcuts open the Keyboard application and scroll to the Navigation section.

    -

    GNOME Workspaces Keyboard Shortcuts

    - - \ No newline at end of file +

    GNOME Workspaces Keyboard Shortcuts

    \ No newline at end of file diff --git a/docs/user/editions/gnome/index.html b/docs/user/editions/gnome/index.html index 01e4c90c1..23cd2e513 100644 --- a/docs/user/editions/gnome/index.html +++ b/docs/user/editions/gnome/index.html @@ -1,26 +1,13 @@ - - - - - -GNOME | Solus Help Center - - - - - -

    GNOME Shell

    +GNOME | Solus Help Center

    GNOME Shell

    GNOME Shell is provided by default with the GNOME Edition of Solus. They describe it as:

    Provides core interface functions like switching windows, launching applications or see your notifications. It takes advantage of the capabilities of modern graphics hardware and introduces innovative user interface concepts to provide a delightful and easy to use experience. GNOME Shell is the defining technology of the GNOME 3 user experience.

    Here are some links related to this project that you may find helpful:

    -

    Go to GNOME Configuration

    -

    Go to GNOME Tips and Tricks

    - - \ No newline at end of file +

    Go to GNOME Configuration

    +

    Go to GNOME Tips and Tricks

    \ No newline at end of file diff --git a/docs/user/editions/gnome/tips-and-tricks/index.html b/docs/user/editions/gnome/tips-and-tricks/index.html index b1acad8ef..17dd0a32d 100644 --- a/docs/user/editions/gnome/tips-and-tricks/index.html +++ b/docs/user/editions/gnome/tips-and-tricks/index.html @@ -1,19 +1,6 @@ - - - - - -Tips and Tricks | Solus Help Center - - - - - -

    Tips and Tricks

    -

    GNOME Keyboard Shortcuts

    +Tips and Tricks | Solus Help Center

    Tips and Tricks

    +

    GNOME Keyboard Shortcuts

    TODO: Provide a quick guide to these shortcuts like we did for Budgie

    -

    GNOME Hot Corners

    -

    TODO: Since Hot Corners aren't easily discoverable, maybe a quick intro to using them

    -

    TODO: I'm sure there are other things that GNOME users can point out

    - - \ No newline at end of file +

    GNOME Hot Corners

    +

    TODO: Since Hot Corners aren't easily discoverable, maybe a quick intro to using them

    +

    TODO: I'm sure there are other things that GNOME users can point out

    \ No newline at end of file diff --git a/docs/user/editions/index.html b/docs/user/editions/index.html index 4e247bcbb..50db9f52f 100644 --- a/docs/user/editions/index.html +++ b/docs/user/editions/index.html @@ -1,16 +1,3 @@ - - - - - -Editions | Solus Help Center - - - - - -

    Editions

    +Editions | Solus Help Center

    Editions

    -
    Screenshot of {name} edition

    Budgie

    A feature-rich, luxurious desktop using the most modern technologies.

    Screenshot of {name} edition

    Plasma

    A sophisticated desktop experience for the tinkerers. Simple by default, powerful when needed.

    Screenshot of {name} edition

    GNOME

    A simple, streamlined desktop for more modern hardware.

    Screenshot of {name} edition

    MATE

    A traditional desktop for advanced users and older hardware.

    Screenshot of {name} edition

    XFCE

    A lightweight desktop that aims to be fast while still being friendly.

    - - \ No newline at end of file +
    Screenshot of {name} edition

    Budgie

    A feature-rich, luxurious desktop using the most modern technologies.

    Screenshot of {name} edition

    Plasma

    A sophisticated desktop experience for the tinkerers. Simple by default, powerful when needed.

    Screenshot of {name} edition

    GNOME

    A simple, streamlined desktop for more modern hardware.

    Screenshot of {name} edition

    MATE

    A traditional desktop for advanced users and older hardware.

    Screenshot of {name} edition

    XFCE

    A lightweight desktop that aims to be fast while still being friendly.

    \ No newline at end of file diff --git a/docs/user/editions/mate/configuration/index.html b/docs/user/editions/mate/configuration/index.html index b3ae3a45a..773cd4dd4 100644 --- a/docs/user/editions/mate/configuration/index.html +++ b/docs/user/editions/mate/configuration/index.html @@ -1,68 +1,57 @@ - - - - - -Configuration | Solus Help Center - - - - - -

    Configuration

    -

    System

    -

    Date and time

    -

    Using MATE, there are a couple of different ways to change the date and time. You can right click on the time in the bottom panel and click on "Preferences".

    -

    MATE Date and Time Right-Click Menu

    +Configuration | Solus Help Center

    Configuration

    +

    System

    +

    Date and time

    +

    Using MATE, there are a couple of different ways to change the date and time. You can right click on the time in the bottom panel and click on "Preferences".

    +

    MATE Date and Time Right-Click Menu

    This opens the Clock Preferences window and allows you to show the date, seconds or use 24 hour time.

    -

    MATE Clock Preferences

    -

    To change the time, click on "Time Settings" at the bottom of this window.

    -

    MATE Time Settings

    -

    Once you have the correct time, you can click on "Set System Time".

    -

    Alternatively, if you wish to change your timezone, open the Brisk Menu and then click on "Administration" followed by "Time and Date". Click on "Unlock" and input your user password so that you can alter the time zone.

    -

    MATE Timezone Settings

    -

    Default applications

    -

    Using MATE, open the Brisk Menu and click on "Preferences" and then on "Preferred Applications".

    +

    MATE Clock Preferences

    +

    To change the time, click on "Time Settings" at the bottom of this window.

    +

    MATE Time Settings

    +

    Once you have the correct time, you can click on "Set System Time".

    +

    Alternatively, if you wish to change your timezone, open the Brisk Menu and then click on "Administration" followed by "Time and Date". Click on "Unlock" and input your user password so that you can alter the time zone.

    +

    MATE Timezone Settings

    +

    Default applications

    +

    Using MATE, open the Brisk Menu and click on "Preferences" and then on "Preferred Applications".

    In this section you will need to click one of the five tabs at the top to find the category you wish to change. For most categories, you will need to have installed alternative applications before you can change the default settings. For instance, if you wish to change the default image viewer from Eye of MATE to GIMP then you must first install GIMP (available in the Software Center).

    -

    MATE Preferred Applications

    -

    You can specify default applications for individual file types by right clicking on a file and then clicking on "Open with other Application...".

    -

    MATE File Context Menu

    -

    Next, select the application you wish to use and make sure "Remember this application for "your file type" files" is ticked. Finish by clicking "Open". In the future, all files with the same file type will open with the same application.

    -

    MATE Application Selection

    -

    Displays

    -

    With MATE, open the Brisk Menu and click on "Preferences" and then on "Displays".

    -

    This opens the Monitor Preferences window and your display(s) will be represented by 1 or more colored boxes. Click on the individual display you wish to configure. You will now be able to select if you wish to set this monitor as the primary display, mirror all displays by turning on "Same image in all monitors", or turn it off. This window also gives you the ability to change the aspect ratio, rotate the display, and to change the resolution.

    -

    MATE Monitor Preferences

    +

    MATE Preferred Applications

    +

    You can specify default applications for individual file types by right clicking on a file and then clicking on "Open with other Application...".

    +

    MATE File Context Menu

    +

    Next, select the application you wish to use and make sure "Remember this application for "your file type" files" is ticked. Finish by clicking "Open". In the future, all files with the same file type will open with the same application.

    +

    MATE Application Selection

    +

    Displays

    +

    With MATE, open the Brisk Menu and click on "Preferences" and then on "Displays".

    +

    This opens the Monitor Preferences window and your display(s) will be represented by 1 or more colored boxes. Click on the individual display you wish to configure. You will now be able to select if you wish to set this monitor as the primary display, mirror all displays by turning on "Same image in all monitors", or turn it off. This window also gives you the ability to change the aspect ratio, rotate the display, and to change the resolution.

    +

    MATE Monitor Preferences

    You can arrange your displays by dragging the colored boxes to your preferred positions, as shown below.

    -

    MATE Monitor Arrangement

    -

    Click "Apply" once you are happy with your changes. If you would like to apply the changes to all the user accounts on your system, click on "Apply system-wide". You will be shown a message asking if the display looks OK, if it does, click on "Keep This Configuration" within 30 seconds.

    -

    MATE Confirm Monitor Preferences

    -

    Keyboard layout

    -

    To change your keyboard layout in MATE, open the Brisk Menu and click on "Preferences" and then on "Keyboard". This will open the Keyboard Preferences window, now click on the "Layouts" tab.

    -

    MATE Keyboard Preferences

    -

    To add a layout, click on the "+ Add..." button. The 2 tabs at the top of the chooser window give you the option to find your layout by country or by language. The preview gives you a graphical representation of each layout. Once you are happy with your selection, click on "+ Add".

    -

    MATE Choose Keyboard Layout

    -

    You can remove a keyboard layout by selecting one of the items in your layouts list and then clicking the "- Remove" button.

    +

    MATE Monitor Arrangement

    +

    Click "Apply" once you are happy with your changes. If you would like to apply the changes to all the user accounts on your system, click on "Apply system-wide". You will be shown a message asking if the display looks OK, if it does, click on "Keep This Configuration" within 30 seconds.

    +

    MATE Confirm Monitor Preferences

    +

    Keyboard layout

    +

    To change your keyboard layout in MATE, open the Brisk Menu and click on "Preferences" and then on "Keyboard". This will open the Keyboard Preferences window, now click on the "Layouts" tab.

    +

    MATE Keyboard Preferences

    +

    To add a layout, click on the "+ Add..." button. The 2 tabs at the top of the chooser window give you the option to find your layout by country or by language. The preview gives you a graphical representation of each layout. Once you are happy with your selection, click on "+ Add".

    +

    MATE Choose Keyboard Layout

    +

    You can remove a keyboard layout by selecting one of the items in your layouts list and then clicking the "- Remove" button.

    If you wish to use multiple keyboard layouts, you can switch between them by left clicking on the keyboard layout icon shown in the system tray. The icon will automatically appear when you have 2 or more keyboard layouts selected. A right click allows you to open the keyboard preferences window and to see the graphical view of your current layout.

    -

    MATE Keyboard Indicator

    -

    To enable keyboard shortcuts for easy switching, re-open the Keyboard Preferences window and open the "Layouts" tab again. Now click on the "Options..." button. This will open a detailed options list, look for and click on "Switching to another layout". Select one or more of the available keyboard shortcuts and then finish by clicking "X Close".

    -

    MATE Keyboard Layout Shortcuts

    -

    IBus

    -

    By default, IBus needs to be started in MATE before it can be used. Open the Brisk Menu, click on "Preferences" and then on "IBus Preferences". You will be asked if you wish to start the IBus daemon, click "Yes".

    -

    MATE IBus Starting Daemon

    -

    If you wish to have the IBus daemon start automatically every time you start Solus MATE, Open the Brisk Menu, click on "Preferences" and then on "Startup Applications". Under the Startup Programs tab, click on "+ Add".

    -

    MATE Startup Applications

    -

    In the Command box, you will need to write ibus-daemon --xim. If you wish, you can also fill in a Name and Comment but these are not compulsory. Once you are happy with your inputs, click the "+ Add" button. IBus will now run each time you boot your computer.

    -

    MATE Add IBus Startup Entry

    -

    If you need an additional IBus IME for your language see: IBus

    +

    MATE Keyboard Indicator

    +

    To enable keyboard shortcuts for easy switching, re-open the Keyboard Preferences window and open the "Layouts" tab again. Now click on the "Options..." button. This will open a detailed options list, look for and click on "Switching to another layout". Select one or more of the available keyboard shortcuts and then finish by clicking "X Close".

    +

    MATE Keyboard Layout Shortcuts

    +

    IBus

    +

    By default, IBus needs to be started in MATE before it can be used. Open the Brisk Menu, click on "Preferences" and then on "IBus Preferences". You will be asked if you wish to start the IBus daemon, click "Yes".

    +

    MATE IBus Starting Daemon

    +

    If you wish to have the IBus daemon start automatically every time you start Solus MATE, Open the Brisk Menu, click on "Preferences" and then on "Startup Applications". Under the Startup Programs tab, click on "+ Add".

    +

    MATE Startup Applications

    +

    In the Command box, you will need to write ibus-daemon --xim. If you wish, you can also fill in a Name and Comment but these are not compulsory. Once you are happy with your inputs, click the "+ Add" button. IBus will now run each time you boot your computer.

    +

    MATE Add IBus Startup Entry

    +

    If you need an additional IBus IME for your language see: IBus

    Finish by closing the IBus Preferences window. You can now switch between your layouts by using the keyboard shortcut Super + Space.

    -

    MATE IBus Keyboard Shortcut

    +

    MATE IBus Keyboard Shortcut

    Or by left clicking on the keyboard layout icon shown in the system tray and selecting the layout you wish to use.

    -

    MATE Bottom Panel IBus

    -

    Mouse and touchpad

    -

    With MATE, open the Brisk Menu and click on "Preferences" and then on "Mouse". You can toggle between the mouse and touchpad settings using the tabs at the top of the Mouse Preferences window. Click "Close" once you have finished making changes.

    -

    Mouse

    -

    MATE Mouse Settings

    +

    MATE Bottom Panel IBus

    +

    Mouse and touchpad

    +

    With MATE, open the Brisk Menu and click on "Preferences" and then on "Mouse". You can toggle between the mouse and touchpad settings using the tabs at the top of the Mouse Preferences window. Click "Close" once you have finished making changes.

    +

    Mouse

    +

    MATE Mouse Settings

    For mice, you can set:

    -

    Touchpad

    -

    MATE Touchpad Settings

    +

    Touchpad

    +

    MATE Touchpad Settings

    For touchpads, you can set:

    -

    Networking

    -

    With MATE, you can manage your network settings by left or right clicking on the network icon in the bottom panel system tray. A left click will bring up any wireless or wired connections currently available whilst a right click allows you to disable networking, view your current connection information and to create new connections and networks by clicking "Edit Connections...".

    -

    Non-hidden network

    -

    To connect to a network, left click on the network icon in the system tray. This will show you a selection of the networks currently available and you may need to click on "More networks" to find the one you want.

    -

    MATE Networking Applet

    -

    You may now be prompted to authenticate with the network. Type in your password and then click "Connect".

    -

    MATE Network Authentication

    +

    Networking

    +

    With MATE, you can manage your network settings by left or right clicking on the network icon in the bottom panel system tray. A left click will bring up any wireless or wired connections currently available whilst a right click allows you to disable networking, view your current connection information and to create new connections and networks by clicking "Edit Connections...".

    +

    Non-hidden network

    +

    To connect to a network, left click on the network icon in the system tray. This will show you a selection of the networks currently available and you may need to click on "More networks" to find the one you want.

    +

    MATE Networking Applet

    +

    You may now be prompted to authenticate with the network. Type in your password and then click "Connect".

    +

    MATE Network Authentication

    If your password is correct, you will now be authenticated with the network.

    -

    Should you wish to disconnect from a network, left click on the network icon again and then click on "Disconnect" underneath the network you wish to leave.

    -

    MATE Disconnect from Network

    -

    Hidden network

    -

    To connect to a hidden network, left click on the network icon in the system tray and then on "Connect to Hidden Wi-Fi Network...". You will now be asked for the network name and type of security (if any).

    -

    MATE Hidden Network

    +

    Should you wish to disconnect from a network, left click on the network icon again and then click on "Disconnect" underneath the network you wish to leave.

    +

    MATE Disconnect from Network

    +

    Hidden network

    +

    To connect to a hidden network, left click on the network icon in the system tray and then on "Connect to Hidden Wi-Fi Network...". You will now be asked for the network name and type of security (if any).

    +

    MATE Hidden Network

    If the network is found and has a password, you will be prompted to authenticate with the network.

    -

    Sound and sound devices

    +

    Sound and sound devices

    To alter the volume in MATE, left click on the speaker icon in the bottom panel system tray and then drag the volume slider with your mouse.

    -

    MATE Volume Control

    -

    Settings

    -

    You can access sound settings, including individual application volume controls, and a simple speaker test by right clicking on the speaker icon in the bottom panel system tray and then clicking on "Sound Preferences". Alternatively, you can open the Brisk Menu and then click on "Preferences" followed by "Sound".

    -

    MATE Sound Applet

    +

    MATE Volume Control

    +

    Settings

    +

    You can access sound settings, including individual application volume controls, and a simple speaker test by right clicking on the speaker icon in the bottom panel system tray and then clicking on "Sound Preferences". Alternatively, you can open the Brisk Menu and then click on "Preferences" followed by "Sound".

    +

    MATE Sound Applet

    This will open the Sound Preferences window as shown below.

    -

    MATE Sound Preferences

    -

    Users

    -

    To add and remove users with MATE, open the Brisk Menu and click on "Administration" and then on "Users and Groups".

    -

    MATE Users and Groups

    -

    Adding a user

    -

    To add a user, click the "+ Add" button underneath the list of users. You will be asked to input your password before you can make changes.

    -

    MATE New User

    -

    Fill in the required items and then finish adding the new user by clicking "OK" in the bottom right corner.

    -

    Removing a user

    -

    To remove a user, open the User Settings window and then click on the user you wish to remove. Now click on the "- Delete" button underneath the list of users.

    -

    MATE User List

    +

    MATE Sound Preferences

    +

    Users

    +

    To add and remove users with MATE, open the Brisk Menu and click on "Administration" and then on "Users and Groups".

    +

    MATE Users and Groups

    +

    Adding a user

    +

    To add a user, click the "+ Add" button underneath the list of users. You will be asked to input your password before you can make changes.

    +

    MATE New User

    +

    Fill in the required items and then finish adding the new user by clicking "OK" in the bottom right corner.

    +

    Removing a user

    +

    To remove a user, open the User Settings window and then click on the user you wish to remove. Now click on the "- Delete" button underneath the list of users.

    +

    MATE User List

    Upon clicking to remove the user, you will be given the option to keep their files, delete their files, or cancel the removal of the user’s account.

    -

    MATE Keep Files Prompt

    -

    User interface

    -

    Desktop background

    -

    If you wish to change the MATE desktop background, simply right click anywhere on the desktop and select "Change Desktop Background".

    -

    MATE Background Right Click Menu

    -

    Alternatively, open the Brisk Menu and click on "Preferences" and then on "Appearance". Click on the "Background" tab at the top if it isn't already selected.

    -

    In this section, you can choose between Solus wallpapers, solid colors, gradients or using your own pictures by clicking "Add". After choosing, click "Close".

    -

    MATE Desktop Background Selection

    -

    Desktop icons

    -

    MATE has desktop icons enabled by default. If you wish to disable or re-enable them, open the Brisk Menu, click on "Preferences" and then on "MATE Tweak". You can then toggle them on and off by clicking "Show Desktop Icons" under the Desktop section.

    -

    MATE Tweak Tool

    +

    MATE Keep Files Prompt

    +

    User interface

    +

    Desktop background

    +

    If you wish to change the MATE desktop background, simply right click anywhere on the desktop and select "Change Desktop Background".

    +

    MATE Background Right Click Menu

    +

    Alternatively, open the Brisk Menu and click on "Preferences" and then on "Appearance". Click on the "Background" tab at the top if it isn't already selected.

    +

    In this section, you can choose between Solus wallpapers, solid colors, gradients or using your own pictures by clicking "Add". After choosing, click "Close".

    +

    MATE Desktop Background Selection

    +

    Desktop icons

    +

    MATE has desktop icons enabled by default. If you wish to disable or re-enable them, open the Brisk Menu, click on "Preferences" and then on "MATE Tweak". You can then toggle them on and off by clicking "Show Desktop Icons" under the Desktop section.

    +

    MATE Tweak Tool

    You may now add things to your Desktop. This can be done by dragging an item onto the Desktop, right clicking an icon and selecting Copy to / Move to Desktop or by opening the Caja file manager and then moving the files you want to the Desktop folder (as shown in the image below).

    -

    MATE Desktop Folder

    -

    Workspaces

    +

    MATE Desktop Folder

    +

    Workspaces

    In MATE, workspaces are enabled by default. You can move between workspaces by using the keyboard shortcuts Ctrl + Alt + Left and Ctrl + Alt + Right.

    -

    MATE Workspace Switching

    -

    To send an application to a different workspace, right click on the applications titlebar and then use the "Move to Another Workspace" option or "Move to Workspace Right".

    -

    MATE Workspace Menu

    -

    One of the easiest ways to view and manage your workspaces is by using the Workspace Switcher. Right click inside the bottom panel and then click on "+ Add to Panel...".

    -

    MATE Open Panel Configuration

    -

    Towards the bottom of the list you will find the Workspace Switcher. Click on it and then finish by clicking "+ Add".

    -

    MATE Add Applet to Panel

    +

    MATE Workspace Switching

    +

    To send an application to a different workspace, right click on the applications titlebar and then use the "Move to Another Workspace" option or "Move to Workspace Right".

    +

    MATE Workspace Menu

    +

    One of the easiest ways to view and manage your workspaces is by using the Workspace Switcher. Right click inside the bottom panel and then click on "+ Add to Panel...".

    +

    MATE Open Panel Configuration

    +

    Towards the bottom of the list you will find the Workspace Switcher. Click on it and then finish by clicking "+ Add".

    +

    MATE Add Applet to Panel

    You should now be able to see 4 slightly darker boxes to the left of your MATE system tray in the bottom panel. The workspace you are currently viewing will be highlighted in blue.

    -

    MATE Workspace Switcher

    +

    MATE Workspace Switcher

    In addition to using keyboard shortcuts, you will now be able to switch workspaces by clicking on them in the bottom panel. You can also drag one workspace onto another in the bottom panel which will move the current active application to the new workspace.

    -

    Keyboard shortcuts

    +

    Keyboard shortcuts

    MATE provides a variety of keyboard shortcuts for workspaces. By default, the keyboard shortcuts for switching directly to a certain workspace are disabled.

    -

    To enable these and to also view all other available shortcuts open the Brisk Menu and click on "Preferences" and then on "Keyboard Shortcuts". The workspace shortcuts are listed under Windows Management.

    -

    MATE Workspace Keyboard Shortcuts

    -

    Workspaces configuration

    -

    By default, MATE provides you with 4 workspaces. If you would like to have more, less or change their names you must first add the Workspace Switcher to your bottom panel, as detailed above. You'll then be able to right click on the Workspace Switcher and select "Preferences".

    -

    MATE Open Switcher Preferences

    -

    Use the plus and minus icons to add or remove workspaces. You can rename workspaces by double clicking on the current names and typing in an alternative. Click "X Close" once you are happy with your changes.

    -

    MATE Workspace Switcher Preferences

    - - \ No newline at end of file +

    To enable these and to also view all other available shortcuts open the Brisk Menu and click on "Preferences" and then on "Keyboard Shortcuts". The workspace shortcuts are listed under Windows Management.

    +

    MATE Workspace Keyboard Shortcuts

    +

    Workspaces configuration

    +

    By default, MATE provides you with 4 workspaces. If you would like to have more, less or change their names you must first add the Workspace Switcher to your bottom panel, as detailed above. You'll then be able to right click on the Workspace Switcher and select "Preferences".

    +

    MATE Open Switcher Preferences

    +

    Use the plus and minus icons to add or remove workspaces. You can rename workspaces by double clicking on the current names and typing in an alternative. Click "X Close" once you are happy with your changes.

    +

    MATE Workspace Switcher Preferences

    \ No newline at end of file diff --git a/docs/user/editions/mate/index.html b/docs/user/editions/mate/index.html index 611593ce9..0f7e11263 100644 --- a/docs/user/editions/mate/index.html +++ b/docs/user/editions/mate/index.html @@ -1,27 +1,14 @@ - - - - - -MATE | Solus Help Center - - - - - -

    MATE Desktop

    -
    caution

    The MATE Edition is deprecated. XFCE has been included to replace it. See the Solus 4.4 blog post here

    +MATE | Solus Help Center

    MATE Desktop

    +
    caution

    The MATE Edition is deprecated. XFCE has been included to replace it. See the Solus 4.4 blog post here

    MATE Desktop is provided by the MATE Edition of Solus. They describe it as:

    The MATE Desktop Environment is the continuation of GNOME 2. It provides an intuitive and attractive desktop environment using traditional metaphors for Linux and other Unix-like operating systems.

    Here are some links related to this project that you may find helpful:

    -

    Go to MATE Configuration

    -

    Go to MATE Tips and Tricks

    - - \ No newline at end of file +

    Go to MATE Configuration

    +

    Go to MATE Tips and Tricks

    \ No newline at end of file diff --git a/docs/user/editions/mate/tips-and-tricks/index.html b/docs/user/editions/mate/tips-and-tricks/index.html index 81180461a..5bdbbb847 100644 --- a/docs/user/editions/mate/tips-and-tricks/index.html +++ b/docs/user/editions/mate/tips-and-tricks/index.html @@ -1,17 +1,4 @@ - - - - - -Tips and Tricks | Solus Help Center - - - - - -

    Tips and Tricks

    -

    MATE Keyboard Shortcuts

    +Tips and Tricks | Solus Help Center - - \ No newline at end of file +

    TODO: Add a few other tips and tricks useful to MATE users

    \ No newline at end of file diff --git a/docs/user/editions/plasma/configuration/index.html b/docs/user/editions/plasma/configuration/index.html index 80407eecd..35bcdf679 100644 --- a/docs/user/editions/plasma/configuration/index.html +++ b/docs/user/editions/plasma/configuration/index.html @@ -1,26 +1,15 @@ - - - - - -Configuration | Solus Help Center - - - - - -

    Configuration

    -

    Opening System Settings

    +Configuration | Solus Help Center

    Configuration

    +

    Opening System Settings

    You can open the system settings in Solus Plasma using any of the following methods:

    -
    MethodDescription
    Application menuOpen the application menu and go to Settings > System Settings
    KRunnerPress Alt + F2 or Alt + Space, type systemsettings, and press Enter
    TerminalOpen a terminal window and execute systemsettings
    -

    Date and time

    +
    MethodDescription
    Application menuOpen the application menu and go to Settings > System Settings
    KRunnerPress Alt + F2 or Alt + Space, type systemsettings, and press Enter
    TerminalOpen a terminal window and execute systemsettings
    +

    Date and time

      -
    1. In the System Settings screen, go to Personalization > Regional Settings > Date and Time.
    2. +
    3. In the System Settings screen, go to Personalization > Regional Settings > Date and Time.
    4. Configure the date and time of your system.
      • If you want Solus to set the date and time automatically, select Set date and time automatically.
      • If you want to set the date and time manually, clear the Set date and time automatically checkbox, then use the available controls. -Plasma date and time settings
      • +Plasma date and time settings
    5. (Optional) Configure the time zone of your system. @@ -38,11 +27,11 @@

      Date and time<

    -

    Default Applications

    -

    Configuring default applications from System Settings

    -

    In the System Settings screen, go to Personalization > Applications > Default Applications, then use the menus to select your preferred default applications.

    -

    Default applications

    -

    Configuring default applications from the file manager

    +

    Default Applications

    +

    Configuring default applications from System Settings

    +

    In the System Settings screen, go to Personalization > Applications > Default Applications, then use the menus to select your preferred default applications.

    +

    Default applications

    +

    Configuring default applications from the file manager

    1. Open Dolphin.

      @@ -52,10 +41,10 @@

      +

      Context menu

    2. -

      Go to Open With > Other Application.

      +

      Go to Open With > Other Application.

      The Choose Application dialog appears.

    3. @@ -66,26 +55,26 @@

      +

      Choose application dialog

    -

    Displays

    -
    tip

    Press Super + P to access the screen layout settings.

    +

    Displays

    +
    tip

    Press Super + P to access the screen layout settings.

      -
    1. In the System Settings screen, go to Hardware > Display and Monitor > Display Configuration.
    2. +
    3. In the System Settings screen, go to Hardware > Display and Monitor > Display Configuration.
    4. Select the display you want to configure.
    5. Configure the available settings as needed. -Screen settings available in Solus Plasma
    6. +Screen settings available in Solus Plasma
    7. Click Apply.
    -

    Keyboard layout

    -

    Configuring keyboard layouts

    -
    Important

    If you need to input languages that do not use Latin characters (for example, Chinese or Japanese), use IBus instead.

    +

    Keyboard layout

    +

    Configuring keyboard layouts

    +
    Important

    If you need to input languages that do not use Latin characters (for example, Chinese or Japanese), use IBus instead.

    1. -

      In the System Settings screen, go to Input Devices > Keyboard > Layouts.

      +

      In the System Settings screen, go to Input Devices > Keyboard > Layouts.

      The layouts screen appears. -Keyboard layouts

      +Keyboard layouts

    2. Select Configure layouts.

      @@ -109,19 +98,19 @@

      Click Apply.

    -

    Using IBus

    +

    Using IBus

    Solus Plasma includes IBus installed by default. However, you need to enable and integrate IBus with Plasma before usage.

    -
    Important

    Using IBus overrides the configuration in the Layouts section of System Settings

    +
    Important

    Using IBus overrides the configuration in the Layouts section of System Settings

    1. Open the /home/[username]/.bashrc file with a text editor.
    2. Add the following lines at the end of the file.
    -
    export GTK_IM_MODULE=ibus
    export QT_IM_MODULE=ibus
    export XMODIFIERS=@im=ibus
    -
      +
      export GTK_IM_MODULE=ibus
      export QT_IM_MODULE=ibus
      export XMODIFIERS=@im=ibus
      +
      1. Save the file.
      2. Configure IBus to autostart.
          -
        1. In the System Settings screen, go to Workspace > Startup and Shutdown > Autostart.
        2. +
        3. In the System Settings screen, go to Workspace > Startup and Shutdown > Autostart.
        4. Click Add, then Add Application.
        5. In the search box, enter ibus-daemon -rxR and press OK.
        @@ -134,27 +123,27 @@

        Using IBus

      - -

      Mouse and touchpad

      +
      Important

      Some keyboard layouts require installing additional packages.

      +

      Mouse and touchpad

        -
      1. In the System Settings screen, go to the appropriate configuration screen: +
      2. In the System Settings screen, go to the appropriate configuration screen:
          -
        • To configure the mouse, go to Input Devices > Mouse. -Mouse settings
        • -
        • To configure the touchpad, go to Input Devices > Touchpad. -Touchpad settings
        • +
        • To configure the mouse, go to Input Devices > Mouse. +Mouse settings
        • +
        • To configure the touchpad, go to Input Devices > Touchpad. +Touchpad settings
      3. Configure the available settings as needed.
      4. Click Apply.
      -

      Network settings

      +

      Network settings

      The Networks widget on the bottom panel allows you to perform frequent networking tasks, such as connecting to a Wi-Fi network or enabling airplane mode.

      -

      Networks widget

      -

      Connecting to a hidden Wi-Fi network

      +

      Networks widget

      +

      Connecting to a hidden Wi-Fi network

      1. -

        In the System Settings screen, go to Network > Connections.

        +

        In the System Settings screen, go to Network > Connections.

      2. Click the Add new connection icon (+).

        @@ -165,7 +154,7 @@

        +New connection settings

      3. In the Wi-Fi tab, specify the name (SSID) and basic network settings.

        @@ -180,22 +169,22 @@

        Sound and sound devices

        -

        Audio Volume widget

        +

        Sound and sound devices

        +

        Audio Volume widget

        The Audio Volume widget on the bottom panel allows you to perform the following tasks:

        -
        TaskDescription
        Select the active output deviceSelect any of the available output devices to change the active output device of your system.
        Select the active input deviceSelect any of the available input devices to change the active input device of your system.
        Control the volume of a deviceUse the sliders to adjust the master volume of an input/output device.
        Adjust the volume for a specific appThe Volume tab allows you to control the volume for a specific application.
        Open the audio settingsClick the Configure Audio Devices button to open the audio configuration screen in System Settings.
        -

        Users

        -

        Adding user accounts

        +
        TaskDescription
        Select the active output deviceSelect any of the available output devices to change the active output device of your system.
        Select the active input deviceSelect any of the available input devices to change the active input device of your system.
        Control the volume of a deviceUse the sliders to adjust the master volume of an input/output device.
        Adjust the volume for a specific appThe Volume tab allows you to control the volume for a specific application.
        Open the audio settingsClick the Configure Audio Devices button to open the audio configuration screen in System Settings.
        +

        Users

        +

        Adding user accounts

        1. -

          In the System Settings screen, go to Personalization > Users.

          +

          In the System Settings screen, go to Personalization > Users.

        2. Click Add New User.

        3. Configure the necessary settings.

          -

          Add user account

          +

          Add user account

        4. Click Create

          @@ -205,10 +194,10 @@

          Adding

          Specify your user password and click OK.

        -

        Removing user accounts

        +

        Removing user accounts

        1. -

          In the System Settings screen, go to Personalization > Users.

          +

          In the System Settings screen, go to Personalization > Users.

        2. Select an account from the user list.

          @@ -218,25 +207,25 @@

          Remov

        3. To delete the the user account files, select Delete files; to keep the files for posterior use, select Keep files.

          -

          Keep or delete user files

          +

          Keep or delete user files

        -

        User interface

        -

        Customizing the desktop

        +

        User interface

        +

        Customizing the desktop

        The Desktop Settings screen allows you to customize various aspects of your desktop, such as the wallpaper and the desktop icons. To open Desktop Settings screen, right-click anywhere on the desktop and select Configure Desktop and Wallpaper....

        -

        Desktop context menu

        +

        Desktop context menu

        The following table describes how to customize the desktop using the Desktop Folder Settings screen.

        -
        SectionDescription
        Change the wallpaperGo to the Wallpaper section, choose an image from the list, and click OK.
        Hide the desktop iconsGo to the Wallpaper section, change Layout to Desktop, and click OK.
        Configure mouse gesturesGo to the Mouse Actions section to setup mouse gestures.
        Change the folder displayed on the desktopGo to the Location section, select a location in your system, and click OK.
        Change the appearance of the desktop iconsGo to the Icons section, configure the necessary settings, and click OK.
        Display only specific files in the desktopGo to the Filter section,configure the necessary settings, and click OK.
        -
        info

        Icons and Location are only available when the desktop layout is set to Folder View.

        -

        Virtual desktops

        +
        SectionDescription
        Change the wallpaperGo to the Wallpaper section, choose an image from the list, and click OK.
        Hide the desktop iconsGo to the Wallpaper section, change Layout to Desktop, and click OK.
        Configure mouse gesturesGo to the Mouse Actions section to setup mouse gestures.
        Change the folder displayed on the desktopGo to the Location section, select a location in your system, and click OK.
        Change the appearance of the desktop iconsGo to the Icons section, configure the necessary settings, and click OK.
        Display only specific files in the desktopGo to the Filter section,configure the necessary settings, and click OK.
        +
        info

        Icons and Location are only available when the desktop layout is set to Folder View.

        +

        Virtual desktops

        Plasma allows you to have multiple desktops on your computer.

        Virtual desktops are helpful to keep tasks organized and avoid clutter. For example, you could have one virtual desktop for work, one for school, and one for personal use.

        Plasma arranges virtual desktops in a grid. You can configure the rows of the grid to suit your needs.

        -
        note

        Solus Plasma has one virtual desktop and one row by default.

        -

        Creating virtual desktops

        +
        note

        Solus Plasma has one virtual desktop and one row by default.

        +

        Creating virtual desktops

        1. -

          In the System Settings screen, go to Workspace > Workspace Behavior > Virtual Desktops.

          +

          In the System Settings screen, go to Workspace > Workspace Behavior > Virtual Desktops.

        2. Define the number of rows in the grid.

          @@ -250,7 +239,7 @@

          Cr

        3. Repeat the previous step to add multiple virtual desktops.

          -
          caution

          Plasma arranges the desktops by the rows automatically.

          +
          caution

          Plasma arranges the desktops by the rows automatically.

        4. (Optional) Configure the behavior of the virtual desktops.

          @@ -265,12 +254,10 @@

          Cr

          Click Apply

        -
        tip

        Plasma displays the virtual desktop grid next to the application launcher button. -Virtual desktop grid

        -

        Switching between virtual desktops

        +
        tip

        Plasma displays the virtual desktop grid next to the application launcher button. +Virtual desktop grid

        +

        Switching between virtual desktops

        The following table outlines the methods to change between desktops in Solus Plasma.

        -
        MethodDescription
        Using the applet in the bottom panelUse the the virtual desktop grid next to the application launcher button to change between your virtual desktops.
        Using mouse gesturesMove the mouse pointer anywhere in the desktop, then move the mouse wheel to change between your virtual desktops.
        Using keyboard shortcutsOpen System Settings, go to Workspace > Shortcuts > KWin, then search for desktop to see the available keyboard shortcuts to switch between virtual desktops
        -

        Keyboard shortcuts to switch between desktops

        -
        note

        Some of the keyboard shortcuts are disabled by default.

    - - \ No newline at end of file +
    MethodDescription
    Using the applet in the bottom panelUse the the virtual desktop grid next to the application launcher button to change between your virtual desktops.
    Using mouse gesturesMove the mouse pointer anywhere in the desktop, then move the mouse wheel to change between your virtual desktops.
    Using keyboard shortcutsOpen System Settings, go to Workspace > Shortcuts > KWin, then search for desktop to see the available keyboard shortcuts to switch between virtual desktops
    +

    Keyboard shortcuts to switch between desktops

    +
    note

    Some of the keyboard shortcuts are disabled by default.

    \ No newline at end of file diff --git a/docs/user/editions/plasma/index.html b/docs/user/editions/plasma/index.html index 70aec5ccf..1629ef886 100644 --- a/docs/user/editions/plasma/index.html +++ b/docs/user/editions/plasma/index.html @@ -1,27 +1,14 @@ - - - - - -Plasma | Solus Help Center - - - - - -

    Plasma

    -

    Solus Plasma

    +Plasma | Solus Help Center

    Plasma

    +

    Solus Plasma

    The Plasma desktop is a graphical user interface for Linux distributions that aims to offer users an intuitive and customizable user interface to interact with their devices. The Plasma desktop is developed by KDE.

    To learn more about the Plasma desktop and KDE, refer to the following pages:


    -

    Configuration

    +

    Configuration

    Learn how to customize and configure the Plasma Desktop on Solus.

    -

    Tips and Tricks

    -

    Helpful tips and tricks for using Plasma on Solus.

    - - \ No newline at end of file +

    Tips and Tricks

    +

    Helpful tips and tricks for using Plasma on Solus.

    \ No newline at end of file diff --git a/docs/user/editions/plasma/tips-and-tricks/index.html b/docs/user/editions/plasma/tips-and-tricks/index.html index f461efce2..4cc4fd329 100644 --- a/docs/user/editions/plasma/tips-and-tricks/index.html +++ b/docs/user/editions/plasma/tips-and-tricks/index.html @@ -1,36 +1,23 @@ - - - - - -Tips and Tricks | Solus Help Center - - - - - -

    Tips and Tricks

    -

    Keyboard shortcuts

    -
    tip

    To see the complete list of keyboard shortcuts available on your system, open the System Settings screen, then go to Workspace > Shortcuts.

    +Tips and Tricks | Solus Help Center

    Tips and Tricks

    +

    Keyboard shortcuts

    +
    tip

    To see the complete list of keyboard shortcuts available on your system, open the System Settings screen, then go to Workspace > Shortcuts.

    The following table shows some of the keyboard shortcuts available in Solus Plasma.

    -
    Keyboard shortcutAction
    Alt + F2Opens KRunner
    Alt + SpaceOpens KRunner
    Alt + F4Closes the active window on the desktop
    Alt + TabOpens application switcher, switch to the next application on the list
    Shift + Alt + TabOpens application switcher, switch to previous application on the list
    SuperOpens the application menu
    Super + LLocks the screen
    Super + DShows the desktop
    PrintOpens the screenshot utility (Spectacle)
    Super + PrintCaptures the active window
    Super + Shift + PrintCaptures a rectangular region of the screen
    -

    Using KRunner

    +
    Keyboard shortcutAction
    Alt + F2Opens KRunner
    Alt + SpaceOpens KRunner
    Alt + F4Closes the active window on the desktop
    Alt + TabOpens application switcher, switch to the next application on the list
    Shift + Alt + TabOpens application switcher, switch to previous application on the list
    SuperOpens the application menu
    Super + LLocks the screen
    Super + DShows the desktop
    PrintOpens the screenshot utility (Spectacle)
    Super + PrintCaptures the active window
    Super + Shift + PrintCaptures a rectangular region of the screen
    +

    Using KRunner

    KRunner is a system-wide desktop search and launcher app available on Solus Plasma. KRunner allows you to perform a variety of actions such as launching apps, executing commands, search files and open open system settings.

    Open KRunner by pressing Alt + F2 or Alt + Space.

    -

    KRunner interface

    +

    KRunner interface

    The following table outlines the actions you can perform using KRunner.

    -
    ActionDescription
    Open an applicationEnter the name of the application, then select the application from the list.
    Run a commandEnter the command you want to run and press Enter.
    See the man pages of a commandAdd # before a command name and press enter (Example, #wget).
    Terminate a programEnter kill [application name] and press Enter (Example: kill firefox)
    Do math operationsEnter = followed by the calculation you want to perform (Examples: =2*2, =5!, =sin(20)).
    Unit conversionsEnter [measurement] to [destination unit] (Examples: 200 mi to km).
    Currency conversionsEnter [amount] to [destination currency]. You can use the ISO code or the name of the currencies to do the conversion (Examples: 200 CAD to NOK, 50 koruna to yen).
    Check the time of other countries or time zonesEnter time [country] or time [time zone] (Examples: time finland, time gmt-1).
    Open files and foldersEnter the name of a file or folder, then select an entry from the list.
    Switch between windowsEnter the name of an open window and select an entry from the Windows list.
    -
    info
      -
    • To see a list of the currencies KRunner supports, see https://www.ecb.europa.eu/stats/policy_and_exchange_rates/euro_reference_exchange_rates/html/index.en.html.
    • +
      ActionDescription
      Open an applicationEnter the name of the application, then select the application from the list.
      Run a commandEnter the command you want to run and press Enter.
      See the man pages of a commandAdd # before a command name and press enter (Example, #wget).
      Terminate a programEnter kill [application name] and press Enter (Example: kill firefox)
      Do math operationsEnter = followed by the calculation you want to perform (Examples: =2*2, =5!, =sin(20)).
      Unit conversionsEnter [measurement] to [destination unit] (Examples: 200 mi to km).
      Currency conversionsEnter [amount] to [destination currency]. You can use the ISO code or the name of the currencies to do the conversion (Examples: 200 CAD to NOK, 50 koruna to yen).
      Check the time of other countries or time zonesEnter time [country] or time [time zone] (Examples: time finland, time gmt-1).
      Open files and foldersEnter the name of a file or folder, then select an entry from the list.
      Switch between windowsEnter the name of an open window and select an entry from the Windows list.
      +
      info
      -

      Dolphin

      +

      Dolphin

      Dolphin is the file manager included by default in Solus Plasma. Dolphin has multiple features, including tabs, split views, integrated terminal, and support for various file formats and protocols.

      The following table describes some of the keyboard shortcuts you can use in Dolphin.

      -
      ActionDescription
      Create a new folderPress F10 to create a new folder.
      Enabling dual-pane modePress F3 to enable dual-pane mode.
      Open multiple tabsPress Ctrl + T to open multiple Dolphin tabs.
      Open a terminal window in the current locationPress Alt + Shift + F4 to open a terminal window in the location you have open.
      Show/hide hidden filesPress Ctrl + H to show/hide hidden files.
      Show/hide the side panelPress F9 to show/hide the Places side panel.
      Switch between the view modesPress Ctrl + 1 to display icons in icons view, press Ctrl + 2 to display icons in compact view, or press Ctrl + 3 to display icons in details view;
      -

      Context menu

      +
      ActionDescription
      Create a new folderPress F10 to create a new folder.
      Enabling dual-pane modePress F3 to enable dual-pane mode.
      Open multiple tabsPress Ctrl + T to open multiple Dolphin tabs.
      Open a terminal window in the current locationPress Alt + Shift + F4 to open a terminal window in the location you have open.
      Show/hide hidden filesPress Ctrl + H to show/hide hidden files.
      Show/hide the side panelPress F9 to show/hide the Places side panel.
      Switch between the view modesPress Ctrl + 1 to display icons in icons view, press Ctrl + 2 to display icons in compact view, or press Ctrl + 3 to display icons in details view;
      +

      Context menu

      The Plasma desktop provides a variety of context menus. Context menus display options, settings, and actions applicable to the current context or element you select.

      The following table describes some of the context menus available in Plasma.

      -
      Context menuDescription
      Bottom panel settingsRight-click on an empty space of the bottom panel to open the bottom panel context menu.
      Widget settingsRight-click on any widget in the bottom panel to open the widget context menu.
      Desktop settingsRight-click anywhere on the desktop to open the desktop context menu.
      FileRight-click a file to open the file context menu.
    - - \ No newline at end of file +
    Context menuDescription
    Bottom panel settingsRight-click on an empty space of the bottom panel to open the bottom panel context menu.
    Widget settingsRight-click on any widget in the bottom panel to open the widget context menu.
    Desktop settingsRight-click anywhere on the desktop to open the desktop context menu.
    FileRight-click a file to open the file context menu.
    \ No newline at end of file diff --git a/docs/user/editions/xfce/configuration/index.html b/docs/user/editions/xfce/configuration/index.html index 65720aae1..0fb45c280 100644 --- a/docs/user/editions/xfce/configuration/index.html +++ b/docs/user/editions/xfce/configuration/index.html @@ -1,15 +1,2 @@ - - - - - -Configuration | Solus Help Center - - - - - - - - \ No newline at end of file +Configuration | Solus Help Center \ No newline at end of file diff --git a/docs/user/editions/xfce/index.html b/docs/user/editions/xfce/index.html index f8f2a2ec5..f6a9b9c10 100644 --- a/docs/user/editions/xfce/index.html +++ b/docs/user/editions/xfce/index.html @@ -1,26 +1,13 @@ - - - - - -XFCE | Solus Help Center - - - - - -

    XFCE Desktop

    +XFCE | Solus Help Center
    - - \ No newline at end of file +

    Go to XFCE Configuration

    +

    Go to XFCE Tips and Tricks

    \ No newline at end of file diff --git a/docs/user/editions/xfce/tips-and-tricks/index.html b/docs/user/editions/xfce/tips-and-tricks/index.html index 30556481d..6c7610ca8 100644 --- a/docs/user/editions/xfce/tips-and-tricks/index.html +++ b/docs/user/editions/xfce/tips-and-tricks/index.html @@ -1,17 +1,4 @@ - - - - - -Tips and Tricks | Solus Help Center - - - - - -

    Tips and Tricks

    -

    XFCE Keyboard Shortcuts

    +Tips and Tricks | Solus Help Center - - \ No newline at end of file +

    TODO: Add a few other tips and tricks useful to XFCE users

    \ No newline at end of file diff --git a/docs/user/hardware/compatibility/laptops/index.html b/docs/user/hardware/compatibility/laptops/index.html index 217075fe4..c149b8cf7 100644 --- a/docs/user/hardware/compatibility/laptops/index.html +++ b/docs/user/hardware/compatibility/laptops/index.html @@ -1,18 +1,7 @@ - - - - - -Laptops | Solus Help Center - - - - - -

    Laptops

    +Laptops | Solus Help Center

    Laptops

    The following laptops have been tested and/or suggested to function correctly by our users.

    This list should not suggest that only such devices listed below are compatible with Solus, as there may be devices not listed below that are in fact compatible.

    -

    Acer

    +

    Acer

    -

    Alienware

    +

    Alienware

    • Alienware 14
    • Alienware 17 R3
    • Alienware 17 R4
    -

    Apple

    +

    Apple

    • Apple Macbook (late 2008)
    • Apple MacBookPro8,3
    -

    ASUS

    +

    ASUS

    -

    Dell

    +

    Dell

    -

    eMachines

    +

    eMachines

    • eMachines E728
    -

    Fujitsu

    +

    Fujitsu

    • Fujitsu Lifebook A531
    • Fujitsu Lifebook T900
    -

    GIGABYTE

    +

    GIGABYTE

    • GIGABYTE Aero 14K
    -

    Google

    +

    Google

    • Google Chromebook CR48
    -

    HP

    +

    HP

    • HP 240 G3
    • HP Compaq 6730B
    • @@ -143,7 +132,7 @@

      HPLenovo

      +

      Lenovo

      • Lenovo 3000 V200
      • Lenovo B41-80
      • @@ -189,11 +178,11 @@

        LenovoMSI

        +

        MSI

        • MSI GE70
        -

        Samsung

        +

        Samsung

        • Samsung NP270E5E-X02PL
        • Samsung NP300E4C-AD5BR
        • @@ -202,21 +191,21 @@

          SamsungSchenker

          +

          Schenker

          • Schenker XMG A506-VE
          -

          Sony

          +

          Sony

          • Sony VAIO Pro 13
          • Sony VAIO S Series 13
          • Sony VAIO VPCEC3M1E
          -

          System76

          +

          System76

          • System76 Gazelle Professional
          -

          Toshiba

          +

          Toshiba

          • Toshiba Portege R930
          • Toshiba Qosmio X305
          • @@ -231,6 +220,4 @@

            Toshiba

    - - \ No newline at end of file +
    \ No newline at end of file diff --git a/docs/user/hardware/compatibility/wifi/index.html b/docs/user/hardware/compatibility/wifi/index.html index 2e6fae3c5..a4662dfd2 100644 --- a/docs/user/hardware/compatibility/wifi/index.html +++ b/docs/user/hardware/compatibility/wifi/index.html @@ -1,18 +1,7 @@ - - - - - -WiFi | Solus Help Center - - - - - -

    WiFi

    +WiFi | Solus Help Center

    WiFi

    The following wireless chipsets have been tested and/or suggested to function correctly by our users.

    This list should not suggest that only- such devices listed below are compatible with Solus, as there may be devices not listed below that are in fact compatible.

    -

    Atheros

    +

    Atheros

    - - \ No newline at end of file +
    \ No newline at end of file diff --git a/docs/user/hardware/index.html b/docs/user/hardware/index.html index 0ac088068..2574d1dfc 100644 --- a/docs/user/hardware/index.html +++ b/docs/user/hardware/index.html @@ -1,16 +1,5 @@ - - - - - -Hardware | Solus Help Center - - - - - -

    Hardware

    -

    Preinstalled drivers

    +Hardware | Solus Help Center

    Hardware

    +

    Preinstalled drivers

    The vast majority of hardware on Linux is supported by driver modules included with the Linux Kernel. This includes things like:

    • CPUs (AMD, Intel)
    • @@ -20,7 +9,7 @@

      Preinst
    • USB

    The purpose of this documentation is to help you find drivers for hardware that is not directly supported or requires additional configuration to be used on Solus.

    -

    GPUs

    +

    GPUs

    The situations with GPU drivers on Linux is a little complicated. Each driver is actually broken up into multiple pieces:

    • Direct Rendering Manager (DRM) @@ -44,12 +33,10 @@

      GPUs

    -

    Proprietary drivers

    +

    Proprietary drivers

    Installing proprietary drivers may improve performance or certain features, however they are usually not necessary for normal daily usage. Solus provides a utility for installing drivers for detected hardware.

    -

    DoFlicky Screenshot

    +

    DoFlicky Screenshot

    If there are proprietary drivers that can be installed, they will show up in the box below the description. You can click the item you wish to install and click Install. If you are installing NVIDIA drivers, you may find it to be desirable to install the 32-bit driver as well, in the event you wish to use Steam or Wine.

    Note: A reboot will be required to use the newly installed driver.

    -

    Supported drivers

    -
    VendorDrivers
    ASUSpiper
    Broadcombroadcom-sta
    Logitechpiper
    NVIDIA470, main series
    Razeropenrazer
    Roccatpiper
    SteelSeriespiper
    VMwareopen-vm-tools
    Xboxxone
    - - \ No newline at end of file +

    Supported drivers

    +
    VendorDrivers
    ASUSpiper
    Broadcombroadcom-sta
    Logitechpiper
    NVIDIA470, main series
    Razeropenrazer
    Roccatpiper
    SteelSeriespiper
    VMwareopen-vm-tools
    Xboxxone
    \ No newline at end of file diff --git a/docs/user/hardware/mobile/android/index.html b/docs/user/hardware/mobile/android/index.html index 211d30db0..7c509b8f7 100644 --- a/docs/user/hardware/mobile/android/index.html +++ b/docs/user/hardware/mobile/android/index.html @@ -1,20 +1,7 @@ - - - - - -Android | Solus Help Center - - - - - -

    Android

    +Android | Solus Help Center

    Android

    For the most part, Android devices will work out of the box on Solus. The experience is similar to other operating systems.

    -

    File management

    +

    File management

    TODO: Tutorial on accessing files from a file browser. Android screenshots would be nice to have.

    -

    Developer tools

    -

    Whether you are an Android developer or just need adb or fastboot for installing a ROM, we've got you covered! We just need to install android-tools from the Software Center or command-line:

    -
    sudo eopkg install android-tools
    - - \ No newline at end of file +

    Developer tools

    +

    Whether you are an Android developer or just need adb or fastboot for installing a ROM, we've got you covered! We just need to install android-tools from the Software Center or command-line:

    +
    sudo eopkg install android-tools
    \ No newline at end of file diff --git a/docs/user/hardware/mobile/apple/index.html b/docs/user/hardware/mobile/apple/index.html index 48d0498d5..5684f97d7 100644 --- a/docs/user/hardware/mobile/apple/index.html +++ b/docs/user/hardware/mobile/apple/index.html @@ -1,23 +1,10 @@ - - - - - -Apple | Solus Help Center - - - - - -

    Apple

    -

    Solus provides iOS support via libimobiledevice and libgpod.

    +Apple | Solus Help Center

    Apple

    +

    Solus provides iOS support via libimobiledevice and libgpod.

    Please note that the below mentioned installation instructions do not guarantee functional iOS features such as content synchronization (music) or file copying.

    This support can be exposed via your file manager (such as Nautilus) upon connecting your iOS device or music players such as Rhythmbox.

    -

    Installation

    +

    Installation

    To ensure you have the required software for iOS support, install libideviceactivation via the Software Center or terminal:

    -
    sudo eopkg install libideviceactivation
    +
    sudo eopkg install libideviceactivation

    NOTE: It is recommended that you reboot your system after this installation.

    -

    File management

    -

    TODO: Tutorial on file access and syncing

    - - \ No newline at end of file +

    File management

    +

    TODO: Tutorial on file access and syncing

    \ No newline at end of file diff --git a/docs/user/hardware/peripherals/mice-and-touchpads/index.html b/docs/user/hardware/peripherals/mice-and-touchpads/index.html index 982418967..dab2ce60d 100644 --- a/docs/user/hardware/peripherals/mice-and-touchpads/index.html +++ b/docs/user/hardware/peripherals/mice-and-touchpads/index.html @@ -1,39 +1,26 @@ - - - - - -Mice and Touchpads | Solus Help Center - - - - - -

    Mice and Touchpads

    -

    ASUS, Logitech, Roccat, SteelSeries

    +Mice and Touchpads | Solus Help Center

    Mice and Touchpads

    +

    ASUS, Logitech, Roccat, SteelSeries

    TODO: Quick tutorial on installing piper with a screenshot. And point them at the official documentation.

    -

    Razer

    +

    Razer

    TODO: Quick tutorial on installing polychromatic with a screenshot. And point them at the official documentation.

    -

    Synaptics

    +

    Synaptics

    These instructions describe how to use the the synaptics driver instead of the default libinput driver to manage your touchpad. You might try this if:

      -
    • libinput doesn't allow for two-finger scrolling
    • -
    • libinput doesn't supports edge scrolling or vice versa
    • +
    • libinput doesn't allow for two-finger scrolling
    • +
    • libinput doesn't supports edge scrolling or vice versa
    • You want to take advantage of the extended configurability of the synaptics driver

    NOTE: The synaptics driver will only be used for your touchpad and libinput will be used for all other input devices.

    NOTE: That the synaptics driver is in maintenance mode and libinput is the preferred driver and also sees active development.

    -

    Setup

    +

    Setup

    To get started open up a terminal and install the synaptics driver.

    -
    sudo eopkg it xorg-driver-input-synaptics
    +
    sudo eopkg it xorg-driver-input-synaptics

    Then, copy the default synaptics config file to the /etc/ directory.

    -
    sudo cp /usr/share/X11/xorg.conf.d/50-synaptics.conf /etc/X11/xorg.conf.d/90-synaptics.conf
    +
    sudo cp /usr/share/X11/xorg.conf.d/50-synaptics.conf /etc/X11/xorg.conf.d/90-synaptics.conf

    NOTE: The /etc/ directory has a higher priority over the default config location and will ensure the synaptics driver gets loaded first, additionally by copying to /etc/ first it will avoid a three-way merge issue if you wish the edit the config file directly.

    Reboot your machine then verify the synaptics driver is in use:

    -
    cat /var/log/Xorg.0.log | grep "Using input driver 'synaptics' for"
    +
    cat /var/log/Xorg.0.log | grep "Using input driver 'synaptics' for"

    If it returns a result, then success! The synaptics driver is in use instead of libinput for your Touchpad.

    -

    Revert configuration

    +

    Revert configuration

    If you wish to switch back to using libinput:

    -
    sudo rm /etc/X11/xorg.conf.d/90-synaptics.conf
    sudo eopkg rm xorg-driver-input-synaptics
    - - \ No newline at end of file +
    sudo rm /etc/X11/xorg.conf.d/90-synaptics.conf
    sudo eopkg rm xorg-driver-input-synaptics
    \ No newline at end of file diff --git a/docs/user/hardware/peripherals/midi-keyboard/index.html b/docs/user/hardware/peripherals/midi-keyboard/index.html index 689e1d9f1..33d45e1aa 100644 --- a/docs/user/hardware/peripherals/midi-keyboard/index.html +++ b/docs/user/hardware/peripherals/midi-keyboard/index.html @@ -1,37 +1,24 @@ - - - - - -MIDI Keyboards | Solus Help Center - - - - - -

    MIDI Keyboards

    +MIDI Keyboards | Solus Help Center

    MIDI Keyboards

    These instructions will guide you through how to set up and use a USB-connected MIDI keyboard on Solus. This will easily let you use the keyboard to play music with a wide set of instruments.

    -

    Installing required software

    +

    Installing required software

    We will need to install three packages in order to use the keyboard:

    1. qsynth - A frontend for fluidsynth
    2. qjackctl - A controller for the JACK audio server
    3. fluid-soundfont - An open source soundfont to use with fluidsynth
    -
    sudo eopkg it qsynth qjackctl fluid-soundfont
    -

    Setting up the soundfont in qsynth

    +
    sudo eopkg it qsynth qjackctl fluid-soundfont
    +

    Setting up the soundfont in qsynth

    In order to use the soundfont, we need to open up qsynth and set the soundfont. For the purposes of this article, it would be FluidR3.sf2, however any other soundfont should work fine too. You set the soundfont by clicking on Setup... and navigating to Soundfonts. There you just need click Open... and navigate to the soundfont of your liking. The soundfont that we will be using will be placed in /usr/share/sounds/sf2/ by default.

    -

    QSynth SoundFont

    -

    Connecting the keyboard

    -

    At this stage you need to first verify that the keyboard is plugged in and turned on. Now we just need to open up qjackctl to connect the keyboard on a software level. In qjackctl you press on Graph and drag the keyboard's output to the input called FLUID Synth (Your keyboard name will probably differ from the on in the image below). This step will need to be done every time you disconnect or turn off you keyboard.

    -

    QJackCtl Connect

    +

    QSynth SoundFont

    +

    Connecting the keyboard

    +

    At this stage you need to first verify that the keyboard is plugged in and turned on. Now we just need to open up qjackctl to connect the keyboard on a software level. In qjackctl you press on Graph and drag the keyboard's output to the input called FLUID Synth (Your keyboard name will probably differ from the on in the image below). This step will need to be done every time you disconnect or turn off you keyboard.

    +

    QJackCtl Connect

    You should now be ready to play on the keyboard using qsynth.

    -

    Keyboard compatibility

    +

    Keyboard compatibility

    The following keyboards have been tested and/or suggested to function correctly by our users.

    This list should not suggest that only such devices listed below are compatible with Solus, as there may be devices not listed below that are in fact compatible.

    -

    M-audio

    +

    M-audio

    • KeyRig 49
    • -
    - - \ No newline at end of file +
    \ No newline at end of file diff --git a/docs/user/hardware/peripherals/printers-and-scanners/index.html b/docs/user/hardware/peripherals/printers-and-scanners/index.html index f070e331f..c3dc1508c 100644 --- a/docs/user/hardware/peripherals/printers-and-scanners/index.html +++ b/docs/user/hardware/peripherals/printers-and-scanners/index.html @@ -1,27 +1,16 @@ - - - - - -Printers and Scanners | Solus Help Center - - - - - -

    Printers and Scanners

    +Printers and Scanners | Solus Help Center

    Printers and Scanners

    Printers

    -

    Drivers

    -

    Many printers will work out-of the box on Solus. If yours doesn't, you should try installing additional drivers.

    -
    BrandDriver Package(s)
    Canoncanon-ufriilt-common
    Dymodymo-cups-driver
    Epsonepson-inkjet-printer-escpr
    HPhplip
    -

    Brother

    -

    The Solus repositories include brlaser, an open-source driver for many Brother monochrome laser printers and multi-function devices. Compatible models are listed here

    +

    Drivers

    +

    Many printers will work out-of the box on Solus. If yours doesn't, you should try installing additional drivers.

    +
    BrandDriver Package(s)
    Canoncanon-ufriilt-common
    Dymodymo-cups-driver
    Epsonepson-inkjet-printer-escpr
    HPhplip
    +

    Brother

    +

    The Solus repositories include brlaser, an open-source driver for many Brother monochrome laser printers and multi-function devices. Compatible models are listed here

    Other Brother drivers are distributed by Brother for a single printer only. Because of this, you will need to install the package for your specific printer.

    For example, brother-mfc1910w provides drivers for the MFC-1910w.

    -

    Compatibility

    +

    Compatibility

    The following printers have been tested and/or suggested to function correctly by our users.

    This list should not suggest that only such devices listed below are compatible with Solus, as there may be devices not listed below that are in fact compatible.

    -

    Brother

    +

    Brother

    • Brother DCP-135C
    • Brother DCP-1510
    • @@ -47,12 +36,10 @@

      Brotherhere

      +

      Should your printer not be on this list, and the generic brlaser driver does not work, you can request your printer here for inclusion here

      Scanners

      -

      Brother

      +

      Brother

      You can connect your Brother scanner via USB or LAN to be able to scan. To get newer Brother scanners to work you will have to install the package brscan4

      -

      Network scanner

      -

      If your scanner is networked, you need to tell saned the IP of your printer. It's advised to always give your printer the same IP inside your network (that is, a static IP address). Run the following command to accomplish this:

      -
      brsaneconfig4 -a name=SCANNER model=$MODEL ip=$IPOFYOURSCANNER
    - - \ No newline at end of file +

    Network scanner

    +

    If your scanner is networked, you need to tell saned the IP of your printer. It's advised to always give your printer the same IP inside your network (that is, a static IP address). Run the following command to accomplish this:

    +
    brsaneconfig4 -a name=SCANNER model=$MODEL ip=$IPOFYOURSCANNER
    \ No newline at end of file diff --git a/docs/user/intro/index.html b/docs/user/intro/index.html index f3b94d923..12cc7ab80 100644 --- a/docs/user/intro/index.html +++ b/docs/user/intro/index.html @@ -1,22 +1,9 @@ - - - - - -Welcome | Solus Help Center - - - - - -

    Welcome

    +Welcome | Solus Help Center

    Welcome

    Solus is committed to helping users get the most out of their systems. We designed the help center to introduce our ecosystem and guide you through typical tasks you might need help with.

    -

    Table of contents

    +

    Table of contents

    We organized the help center into sections to help you navigate the contents easily:

    -
    SectionDescription
    Quick StartIf you're new to Solus, this section will set you on the right track. Find documentation on system requirements, installing Solus, software management, the boot process, and troubleshooting.
    ContributingFind how you can contribute to Solus, whether you're a beginner or an experienced Linux and Solus user.
    EditionsUnderstand the different editions of Solus: differences between editions, configuration tasks, and helpful tips and tricks.
    HardwareSolus supports most hardware out-of-the-box, but there are exceptions. This section focuses on those exceptions and how to get the most out of your hardware.
    Package managementLearn how to install software and manage the repositories of your Solus system.
    Privacy policyUnderstand our privacy policy: Learn how we handle your data, and how to contact us for privacy concerns.
    SoftwareGetting started and configuration guides for the software packages included in Solus.
    TroubleshootingLearn how to diagnose and fix problems you might have with Solus.
    -

    Support channels

    +
    SectionDescription
    Quick StartIf you're new to Solus, this section will set you on the right track. Find documentation on system requirements, installing Solus, software management, the boot process, and troubleshooting.
    ContributingFind how you can contribute to Solus, whether you're a beginner or an experienced Linux and Solus user.
    EditionsUnderstand the different editions of Solus: differences between editions, configuration tasks, and helpful tips and tricks.
    HardwareSolus supports most hardware out-of-the-box, but there are exceptions. This section focuses on those exceptions and how to get the most out of your hardware.
    Package managementLearn how to install software and manage the repositories of your Solus system.
    Privacy policyUnderstand our privacy policy: Learn how we handle your data, and how to contact us for privacy concerns.
    SoftwareGetting started and configuration guides for the software packages included in Solus.
    TroubleshootingLearn how to diagnose and fix problems you might have with Solus.
    +

    Support channels

    If you need help with something not covered in the help center, there are various channels where you can seek support from the Solus team or other Solus users.

    -
    ChannelDescription
    ForumsOur Flarum-powered forums are easy to use from any device and are a great resource for getting support.
    MatrixMatrix is a great way to discuss issues and development in real-time. Learn how to access Solus' Matrix space here.
    RedditIf you are a Redditor, our subreddit has a similar purpose to the forums.
    Issue trackerIf you have issues with your Solus system, or any of our software packages doesn't work as expected, consider filing a bug report on our issue tracker.
    -
    Important

    Volunteers around the world build and maintain Solus. Due to time zone differences there might not always be people to answer your questions immediately.

    - - \ No newline at end of file +
    ChannelDescription
    ForumsOur Flarum-powered forums are easy to use from any device and are a great resource for getting support.
    MatrixMatrix is a great way to discuss issues and development in real-time. Learn how to access Solus' Matrix space here.
    RedditIf you are a Redditor, our subreddit has a similar purpose to the forums.
    Issue trackerIf you have issues with your Solus system, or any of our software packages doesn't work as expected, consider filing a bug report on our issue tracker.
    +
    Important

    Volunteers around the world build and maintain Solus. Due to time zone differences there might not always be people to answer your questions immediately.

    \ No newline at end of file diff --git a/docs/user/package-management/basics/index.html b/docs/user/package-management/basics/index.html index 768498542..4659ff340 100644 --- a/docs/user/package-management/basics/index.html +++ b/docs/user/package-management/basics/index.html @@ -1,17 +1,4 @@ - - - - - -Basics to Package Management | Solus Help Center - - - - - -

    Basics of package management in Solus

    +Basics to Package Management | Solus Help Center

    Basics of package management in Solus

    Solus uses the eopkg package manager. You can use eopkg to install, update, and remove software packages on your Solus system.

    The following table lists the most common eopkg commands:

    -
    ActionCommandExample
    Install softwaresudo eopkg install PACKAGE_NAMEsudo eopkg install gnome-documents gnome-music
    Reinstall softwaresudo eopkg install --reinstall PACKAGE_NAMEsudo eopkg install --reinstall gnome-documents gnome-music
    Uninstall softwaresudo eopkg remove PACKAGE_NAMEsudo eopkg remove gnome-documents gnome-music
    Update your systemsudo eopkg upgrade-
    Update specific softwaresudo eopkg upgrade PACKAGE_NAMEsudo eopkg upgrade firefox
    Search for softwareeopkg search KEYWORDeopkg search documents
    Get information on software, such as description or versioneopkg info PACKAGE_NAMEeopkg info gnome-documents
    - - \ No newline at end of file +
    ActionCommandExample
    Install softwaresudo eopkg install PACKAGE_NAMEsudo eopkg install gnome-documents gnome-music
    Reinstall softwaresudo eopkg install --reinstall PACKAGE_NAMEsudo eopkg install --reinstall gnome-documents gnome-music
    Uninstall softwaresudo eopkg remove PACKAGE_NAMEsudo eopkg remove gnome-documents gnome-music
    Update your systemsudo eopkg upgrade-
    Update specific softwaresudo eopkg upgrade PACKAGE_NAMEsudo eopkg upgrade firefox
    Search for softwareeopkg search KEYWORDeopkg search documents
    Get information on software, such as description or versioneopkg info PACKAGE_NAMEeopkg info gnome-documents
    \ No newline at end of file diff --git a/docs/user/package-management/history-and-rollback/index.html b/docs/user/package-management/history-and-rollback/index.html index 707009f01..a19246512 100644 --- a/docs/user/package-management/history-and-rollback/index.html +++ b/docs/user/package-management/history-and-rollback/index.html @@ -1,34 +1,23 @@ - - - - - -History and Software Rollback | Solus Help Center - - - - - -

    History and software rollback in Solus

    +History and Software Rollback | Solus Help Center

    History and software rollback in Solus

    Solus offers a feature to view your history of software changes and revert your system to previous versions.

    You can use this feature if you have issues after installing packages or system updates, and you need to return to a working state.

    -

    History of software changes

    +

    History of software changes

    • To see your history of software changes, open a terminal and execute:

      -
      eopkg history
      +
      eopkg history

      The terminal displays a list of all the software changes in your system.

      -

      eopkg history output

      +

      eopkg history output

    -

    Rollback

    -
    Important

    Reverting software changes works if either:

      +

      Rollback

      +
      Important

      Reverting software changes works if either:

      • The Solus repository has the version of the package you need, or
      • You have a local copy of the package.
      1. -

        Disable any local repository you have.

        +

        Disable any local repository you have.

        Local repositories can cause errors during rollbacks.

      2. @@ -36,18 +25,16 @@

        Rollback
        eopkg history

    +
    eopkg history
  • Note the number of the most recent software change.

  • Go back to the desired state:

    -
    sudo eopkg history -t NUMBER
    +
    sudo eopkg history -t NUMBER

    Replace NUMBER with a number lower than the latest software change.

    For example, if you want to revert operation 100, use 99 as the number.

  • -

    After reverting to the desired state, verify your system status. You might need to restart your system to see some of the changes.

    - - \ No newline at end of file +

    After reverting to the desired state, verify your system status. You might need to restart your system to see some of the changes.

    \ No newline at end of file diff --git a/docs/user/package-management/repo-management/index.html b/docs/user/package-management/repo-management/index.html index 91a08c350..548ecc941 100644 --- a/docs/user/package-management/repo-management/index.html +++ b/docs/user/package-management/repo-management/index.html @@ -1,22 +1,9 @@ - - - - - -Repository Management | Solus Help Center - - - - - -

    Repository management

    +Repository Management | Solus Help Center

    Repository management

    Solus offers two main software sources: stable (shannon) and unstable. The eopkg package manager can use multiple sources on your system, which is helpful if you use a source provided by another vendor.

    -

    Official repositories

    +

    Official repositories

    The official Solus repositories are:

    -
    RepositoryURLNotes
    Stable (shannon)https://cdn.getsol.us/repo/shannon/eopkg-index.xml.xzDefault software source.
    Unstablehttps://cdn.getsol.us/repo/unstable/eopkg-index.xml.xzOnly use this source if build Solus packages or you test new software before it moves to the stable source.
    -
    danger

    Updating your system while using the unstable source might be risky.

    Before updating, check the #solus-packaging Matrix room.

    -

    Repository management commands

    +
    RepositoryURLNotes
    Stable (shannon)https://cdn.getsol.us/repo/shannon/eopkg-index.xml.xzDefault software source.
    Unstablehttps://cdn.getsol.us/repo/unstable/eopkg-index.xml.xzOnly use this source if build Solus packages or you test new software before it moves to the stable source.
    +
    danger

    Updating your system while using the unstable source might be risky.

    Before updating, check the #solus-packaging Matrix room.

    +

    Repository management commands

    The following table lists the eopkg commands you can use to manage your software sources.

    -
    ActionCommandExample
    Add a repositorysudo eopkg add-repo NAME URLsudo eopkg add-repo Example https://example.com/repo/eopkg-index.xml.xz
    Remove a repositorysudo eopkg remove-repo NAMEsudo eopkg remove-repo Example
    Enable a repositorysudo eopkg enable-repo NAMEsudo eopkg enable-repo Example
    Disable a repositorysudo eopkg disable-repo NAMEsudo eopkg disable-repo Example
    Update a repositorysudo eopkg update-repo NAMEsudo eopkg update-repo Example
    Update all repositoriessudo eopkg update-reposudo eopkg update-repo
    List repositories added to your systemeopkg list-repoeopkg list-repo
    - - \ No newline at end of file +
    ActionCommandExample
    Add a repositorysudo eopkg add-repo NAME URLsudo eopkg add-repo Example https://example.com/repo/eopkg-index.xml.xz
    Remove a repositorysudo eopkg remove-repo NAMEsudo eopkg remove-repo Example
    Enable a repositorysudo eopkg enable-repo NAMEsudo eopkg enable-repo Example
    Disable a repositorysudo eopkg disable-repo NAMEsudo eopkg disable-repo Example
    Update a repositorysudo eopkg update-repo NAMEsudo eopkg update-repo Example
    Update all repositoriessudo eopkg update-reposudo eopkg update-repo
    List repositories added to your systemeopkg list-repoeopkg list-repo
    \ No newline at end of file diff --git a/docs/user/privacy/index.html b/docs/user/privacy/index.html index 98828ccb9..7c97062f1 100644 --- a/docs/user/privacy/index.html +++ b/docs/user/privacy/index.html @@ -1,22 +1,11 @@ - - - - - -Privacy Policy | Solus Help Center - - - - - -

    Privacy Policy

    -

    Solus installations

    +Privacy Policy | Solus Help Center

    Privacy Policy

    +

    Solus installations

      -
    • Solus does not collect or store data from user's machines.
    • +
    • Solus does not collect or store data from user's machines.
    • Solus does not use telemetry or automatic error reporting.
    • Some packages may include their own built-in telemetry (examples: Firefox, Steam). Solus cannot control data collected in this way. These packages may allow you to disable this telemetry.
    -

    Solus forum (discuss.getsol.us)

    +

    Solus forum (discuss.getsol.us)

    • You may view the forum without providing personal data
    • Cookies are used to store login information
    • @@ -29,27 +18,25 @@

    -

    Third party hosts

    +

    Third party hosts

    Solus cannot control how data is collected and processed on the third party hosts we use. We use the following hosts:

    -

    Cloudflare

    +

    Cloudflare

    -

    GitHub

    +

    GitHub

    -

    Matrix

    +

    Matrix

    -

    Your rights under the GDPR

    -

    If you are covered by the GDPR you have rights as a data subject. Your rights are detailed under Chapter 3 of the GDPR. Additionally, you have the right to lodge a complaint with your national Data Protection Authority.

    -

    Privacy contact

    -

    Any concerns or requests about personal data should be sent to privacy@getsol.us

    - - \ No newline at end of file +

    Your rights under the GDPR

    +

    If you are covered by the GDPR you have rights as a data subject. Your rights are detailed under Chapter 3 of the GDPR. Additionally, you have the right to lodge a complaint with your national Data Protection Authority.

    +

    Privacy contact

    +

    Any concerns or requests about personal data should be sent to privacy@getsol.us

    \ No newline at end of file diff --git a/docs/user/quick-start/boot-management/index.html b/docs/user/quick-start/boot-management/index.html index c75b5d363..c2e3864a4 100644 --- a/docs/user/quick-start/boot-management/index.html +++ b/docs/user/quick-start/boot-management/index.html @@ -1,35 +1,22 @@ - - - - - -Boot Management | Solus Help Center - - - - - -

    Boot Management

    -

    clr-boot-manager

    +Boot Management | Solus Help Center

    Boot Management

    +

    clr-boot-manager

    Solus leverages clr-boot-manager from the Clear Linux* project to manage its boot process. On legacy BIOS systems, clr-boot-manager will configure GRUB2 to properly boot your system.
    On modern UEFI systems, clr-boot-manager will configure systemd-boot instead.
    This means that any time we want to modify the boot process, clr-boot-manager will be involved.
    Trying to modify the configurations manually may work temporarily, but will be overwritten eventually.

    -

    Open the boot menu

    +

    Open the boot menu

    By default, EFI installs will not show the boot menu and boot directly into Solus. By hitting space bar (repeatedly) during boot, the boot menu will appear (it may take a couple of goes to get the timing right).

    -

    Displaying the boot menu by default every boot

    +

    Displaying the boot menu by default every boot

    The following command will set the timeout of the boot loader to five seconds so that it appears by default:

    -
    sudo clr-boot-manager set-timeout 5 && sudo clr-boot-manager update
    -

    Adding kernel parameters

    +
    sudo clr-boot-manager set-timeout 5 && sudo clr-boot-manager update
    +

    Adding kernel parameters

    Kernel parameters can be appended to boot via creating a file for clr-boot-manager to use when updating kernels. For example, to add nomodeset to boot options, you would create a file in /etc/kernel/cmdline.d (as sudo):

    -
    sudo mkdir -p /etc/kernel/cmdline.d
    echo 'nomodeset' | sudo tee /etc/kernel/cmdline.d/40_nomodeset.conf
    +
    sudo mkdir -p /etc/kernel/cmdline.d
    echo 'nomodeset' | sudo tee /etc/kernel/cmdline.d/40_nomodeset.conf

    The settings should be on one line with a space between them. You will need to run sudo clr-boot-manager update for the options to be appended to boot.

    -

    Kernels

    -

    Installing a different kernel branch

    -

    By default, Solus utilizes our linux-current kernel. The separate kernel branches can be added by installing the linux-lts or linux-current packages. Note that each kernel has separate module packages, so if you use these kernel modules, you'll need to install the one related to the kernel you are adding.

    -
    linux-ltslinux-current
    bbswitchbbswitch-current
    broadcom-stabroadcom-sta-current
    linux-lts-headerslinux-current-headers
    nvidia-470-glx-drivernvidia-470-glx-driver-current
    nvidia-beta-drivernvidia-beta-driver-current
    nvidia-developer-drivernvidia-developer-driver-current
    nvidia-glx-drivernvidia-glx-driver-current
    openrazeropenrazer-current
    rtl8852burtl8852bu-current
    v4l2loopbackv4l2loopback-current
    vhba-modulevhba-module-current
    virtualboxvirtualbox-current
    xonexone-current
    -

    Change the default kernel branch to boot

    -

    After successfully booting into a kernel from the current or lts branches running sudo clr-boot-manager update will make the booted kernel branch the default boot option going forward.

    - - \ No newline at end of file +

    Kernels

    +

    Installing a different kernel branch

    +

    By default, Solus utilizes our linux-current kernel. The separate kernel branches can be added by installing the linux-lts or linux-current packages. Note that each kernel has separate module packages, so if you use these kernel modules, you'll need to install the one related to the kernel you are adding.

    +
    linux-ltslinux-current
    bbswitchbbswitch-current
    broadcom-stabroadcom-sta-current
    linux-lts-headerslinux-current-headers
    nvidia-470-glx-drivernvidia-470-glx-driver-current
    nvidia-beta-drivernvidia-beta-driver-current
    nvidia-developer-drivernvidia-developer-driver-current
    nvidia-glx-drivernvidia-glx-driver-current
    openrazeropenrazer-current
    rtl8852burtl8852bu-current
    v4l2loopbackv4l2loopback-current
    vhba-modulevhba-module-current
    virtualboxvirtualbox-current
    xonexone-current
    +

    Change the default kernel branch to boot

    +

    After successfully booting into a kernel from the current or lts branches running sudo clr-boot-manager update will make the booted kernel branch the default boot option going forward.

    \ No newline at end of file diff --git a/docs/user/quick-start/default-applications/index.html b/docs/user/quick-start/default-applications/index.html index 47338558a..721ea5f1c 100644 --- a/docs/user/quick-start/default-applications/index.html +++ b/docs/user/quick-start/default-applications/index.html @@ -1,74 +1,61 @@ - - - - - -Default Applications | Solus Help Center - - - - - -

    Default applications

    +Default Applications | Solus Help Center

    Default applications

    Each version of Solus comes with a pre-installed collection of desktop applications that can help you perform common tasks.

    -

    Web browser

    -

    Solus comes pre-installed with Firefox, a secure and trustworthy web browser provided by the non-profit organization Mozilla.

    -

    Firefox Screenshot

    -

    Email client

    -

    Solus comes pre-installed with the powerful Thunderbird email, newsgroup, and feeds client.

    -

    Thunderbird Screenshot

    -

    Managing your files

    +

    Web browser

    +

    Solus comes pre-installed with Firefox, a secure and trustworthy web browser provided by the non-profit organization Mozilla.

    +

    Firefox Screenshot

    +

    Email client

    +

    Solus comes pre-installed with the powerful Thunderbird email, newsgroup, and feeds client.

    +

    Thunderbird Screenshot

    +

    Managing your files

    Each Linux desktop environment has its own graphical application for managing files:

    -
    DesktopApplication
    BudgieNemo
    GNOMEGNOME Files (formerly Nautilus)
    PlasmaDolphin
    XFCENemo
    -

    Nemo

    -

    Nemo Screenshot

    -

    GNOME Files

    -

    GNOME Files Screenshot

    -

    Dolphin

    -

    Dolphin Screenshot

    -

    Office suite

    -

    Solus comes pre-installed with LibreOffice, an office suite that is capable of replacing MicrosoftTM Office for the most common tasks.

    +
    DesktopApplication
    BudgieNemo
    GNOMEGNOME Files (formerly Nautilus)
    PlasmaDolphin
    XFCENemo
    +

    Nemo

    +

    Nemo Screenshot

    +

    GNOME Files

    +

    GNOME Files Screenshot

    +

    Dolphin

    +

    Dolphin Screenshot

    +

    Office suite

    +

    Solus comes pre-installed with LibreOffice, an office suite that is capable of replacing MicrosoftTM Office for the most common tasks.

    By default, Solus provides Writer (document editor), Calc (spreadsheet editor), and Impress (presentation editor). Other applications such as Math or Draw can be installed from the Software Center.

    -
    LibreOfficeMicrosoft Office EquivalentApple Equivalent
    WriterWordPages
    CalcExcelNumbers
    ImpressPowerPointKeynote
    DrawVisio
    Math
    -

    Calc

    -

    LibreOffice Calc Screenshot

    +
    LibreOfficeMicrosoft Office EquivalentApple Equivalent
    WriterWordPages
    CalcExcelNumbers
    ImpressPowerPointKeynote
    DrawVisio
    Math
    +

    Calc

    +

    LibreOffice Calc Screenshot

    Calc is a spreadsheet editor. You can view, create, and edit spreadsheets as well as leverage a comprehensive range of advanced functions. Calc supports a variety of common open formats and MicrosoftTM Office compatible document formats such as (but not limited to): xls, xlsx, and ods.

    -

    Draw

    -

    LibreOffice Draw Screenshot

    +

    Draw

    +

    LibreOffice Draw Screenshot

    Draw is a graphical editor that allows you to sketch diagrams, workflows and any kind of other simple to complex drawing you can imagine. You can install Draw from the Software Center by searching for the package libreoffice-draw.

    -

    Impress

    -

    LibreOffice Impress Screenshot

    +

    Impress

    +

    LibreOffice Impress Screenshot

    Impress is a presentation viewer and editor. You can view, create, edit, and export presentations in common open formats or MicrosoftTM Office compatible document formats such as (but not limited to): ppt, pptx, and odp.

    -

    Math

    -

    LibreOffice Math Screenshot

    +

    Math

    +

    LibreOffice Math Screenshot

    Math is a formula editor. Create your mathematical and scientific expressions and insert them with the correct formatting into your text documents, spreadsheets, presentations, or drawings. Math can be installed from the Software Center by searching for the package libreoffice-math.

    -

    Writer

    -

    LibreOffice Writer Screenshot

    +

    Writer

    +

    LibreOffice Writer Screenshot

    Writer is a document editor. You can view, create, edit, and export documents in common open formats or MicrosoftTM Office compatible document formats such as (but not limited to): doc, docx, and odt.

    -

    Spell-checking

    +

    Spell-checking

    LibreOffice Writer users may want to install the package libreoffice-common-dictionaries from Software Center to automatically enable spell-checking support.

    -

    Finnish

    +

    Finnish

    Finnish language support is provided by installing libreoffice-voikko. After installation of this package, there is further configuration required to properly leverage the Voikko spell-checking and Finnish dictionary support.

    1. Open up LibreOffice Writer
    2. In the menubar, go to Tools then Options. This will open up the Options dialog.
    3. Go to the Language Settings, listed on the left of Options.
    4. -
    5. Under Language Settings, click Writing Aids and ensure the "Spellchecker (Voikko)", "Grammar checker (Voikko)", and "Hyphenator (Voikko)" are under the "Available language modules" section.
    6. -
    7. Under Language Settings, click Voikko and ensure "standard: suomi (perussanasto)" is selected under the "Vocabulary" section.
    8. +
    9. Under Language Settings, click Writing Aids and ensure the "Spellchecker (Voikko)", "Grammar checker (Voikko)", and "Hyphenator (Voikko)" are under the "Available language modules" section.
    10. +
    11. Under Language Settings, click Voikko and ensure "standard: suomi (perussanasto)" is selected under the "Vocabulary" section.
    -

    Music

    -
    DesktopApplication
    BudgieRhythmbox
    GNOMERhythmbox
    PlasmaElisa
    XFCERhythmbox
    -

    Rhythmbox

    -

    Rhythmbox Screenshot

    -

    Elisa

    -

    Elisa Screenshot

    -

    Video

    -
    DesktopApplication
    BudgieCelluloid (formerly GNOME MPV)
    GNOMECelluloid (formerly GNOME MPV)
    PlasmaHaruna
    XFCEParole
    -

    Celluloid

    -

    Celluloid Screenshot

    -

    Haruna

    -

    Haruna Screenshot

    -

    Parole

    -

    Parole Screenshot

    - - \ No newline at end of file +

    Music

    +
    DesktopApplication
    BudgieRhythmbox
    GNOMERhythmbox
    PlasmaElisa
    XFCERhythmbox
    +

    Rhythmbox

    +

    Rhythmbox Screenshot

    +

    Elisa

    +

    Elisa Screenshot

    +

    Video

    +
    DesktopApplication
    BudgieCelluloid (formerly GNOME MPV)
    GNOMECelluloid (formerly GNOME MPV)
    PlasmaHaruna
    XFCEParole
    +

    Celluloid

    +

    Celluloid Screenshot

    +

    Haruna

    +

    Haruna Screenshot

    +

    Parole

    +

    Parole Screenshot

    \ No newline at end of file diff --git a/docs/user/quick-start/installation/disks/index.html b/docs/user/quick-start/installation/disks/index.html index c87ca4eec..d5f0e89ef 100644 --- a/docs/user/quick-start/installation/disks/index.html +++ b/docs/user/quick-start/installation/disks/index.html @@ -1,15 +1,4 @@ - - - - - -Disk Partitioning | Solus Help Center - - - - - -

    Disk Partitioning

    +Disk Partitioning | Solus Help Center

    Disk Partitioning

    Solus provides multiple ways you can install onto your system.

    1. Whole Drive
      @@ -21,14 +10,12 @@ Note: Legacy (BIOS) must use MBR partition table while Unified EFI (UEFI) must use GPT partition table.

    Alongside these options, we also provide the ability to use full-disk encryption. For the obvious reason of it being full-disk, this assumes you are installing Solus onto the entire drive.

    -

    UEFI

    +

    UEFI

    If you are using a system with UEFI, you may need to create an EFI System Partition, also referred to as an ESP. This is not necessary if you are enabling Solus to install onto the entire disk.

    To create an EFI System Partition, open up GParted and create a FAT32 partition that is 1 GB in size. Next, right-click on the partition and click Manage Flags. On the Manage Flags section, enable the boot and esp flags.

    Notes:

      -
    • Your system must be booted using Unified EFI (UEFI) mode, as opposed to a "legacy (BIOS) mode".
    • +
    • Your system must be booted using Unified EFI (UEFI) mode, as opposed to a "legacy (BIOS) mode".
    • Your disk is required to be GPT formatted.
    • If you cannot see your SSD drive, set the SATA configuration to AHCI.
    • -
    - - \ No newline at end of file +
    \ No newline at end of file diff --git a/docs/user/quick-start/installation/index.html b/docs/user/quick-start/installation/index.html index b2f11d23d..c747879d1 100644 --- a/docs/user/quick-start/installation/index.html +++ b/docs/user/quick-start/installation/index.html @@ -1,111 +1,100 @@ - - - - - -Preparing to Install | Solus Help Center - - - - - -

    Preparing to install

    -

    Before you start, make sure your system meets the minimum requirements.

    +Preparing to Install | Solus Help Center

    Preparing to install

    +

    Before you start, make sure your system meets the minimum requirements.

    The first step to installing Solus is getting the correct media. The Solus Project provides ISO images, which contain the contents of Solus for installing.

    -

    Getting the ISO

    -

    Download a Solus ISO by going to our Download page and picking an edition.

    -

    Verifying the ISO

    -

    Linux and macOS

    -

    Download the SHA256SUMS files for your chosen ISO edition: File, Signed File and Public Key from the links next to the Download buttons on our Download page.

    +

    Getting the ISO

    +

    Download a Solus ISO by going to our Download page and picking an edition.

    +

    Verifying the ISO

    +

    Linux and macOS

    +

    Download the SHA256SUMS files for your chosen ISO edition: File, Signed File and Public Key from the links next to the Download buttons on our Download page.

    Note: You should download all these files to the same directory.

    -

    Verifying the SHA256SUMS file signature

    +

    Verifying the SHA256SUMS file signature

    Import the Solus public key:

    -
    cd ~/path/to/download/directory
    gpg --import solus-releng-pub.gpg
    +
    cd ~/path/to/download/directory
    gpg --import solus-releng-pub.gpg

    Verify the signed checksum file:

    -
    gpg --verify Solus-Budgie-Release-2024-10-14.iso.sha256sum.sign Solus-Budgie-Release-2024-10-14.iso.sha256sum
    -

    Verifying the ISO checksum

    +
    gpg --verify Solus-Budgie-Release-2024-10-14.iso.sha256sum.sign Solus-Budgie-Release-2024-10-14.iso.sha256sum
    +

    Verifying the ISO checksum

    Check that the computed hash of the downloaded ISO file matches the hash supplied by Solus:

    -
    sha256sum -c Solus-Budgie-Release-2024-10-14.iso.sha256sum | grep OK
    -

    Windows

    -

    Verifying signed SHA256SUM file

    -

    On Windows, first install Gpg4win.

    -

    Now you can run the same gpg commands from the the Verifyng the SHA256SUMS file signature section above.

    -

    Verifying the ISO checksum

    +
    sha256sum -c Solus-Budgie-Release-2024-10-14.iso.sha256sum | grep OK
    +

    Windows

    +

    Verifying signed SHA256SUM file

    +

    On Windows, first install Gpg4win.

    +

    Now you can run the same gpg commands from the the Verifyng the SHA256SUMS file signature section above.

    +

    Verifying the ISO checksum

    Launch powershell and compute the hash of the ISO file you just downloaded. You will have to manually compare the result to the hash in the SHA256SUMS file.

    -
    Get-FileHash C:\path\to\Solus-Budgie-Release-2024-10-14.iso
    cat C:\path\to\Solus-Budgie-Release-2024-10-14.iso.sha256sum
    +
    Get-FileHash C:\path\to\Solus-Budgie-Release-2024-10-14.iso
    cat C:\path\to\Solus-Budgie-Release-2024-10-14.iso.sha256sum

    Alternatively, you can use a graphical program that can calculate SHA256 hashes like Rufus or 7-Zip.

    -

    Creating bootable media

    +

    Creating bootable media

    To make boot media, you will need:

    1. Either a blank DVD or a USB drive larger than 2 GB.
    2. If using a USB, the ability to boot from the USB.
    3. -
    4. ISO file from the Getting the ISO section.
    5. +
    6. ISO file from the Getting the ISO section.

    There are many tools which can write our ISO image to DVDs or USB thumb drives. Chose from an option below.

    -

    Linux

    -

    DVD

    -

    We recommend using Brasero for writing the ISO to a DVD.

    +

    Linux

    +

    DVD

    +

    We recommend using Brasero for writing the ISO to a DVD.

    1. Insert blank DVD (DVD-R or DVD+RW is suitable) into your DVD writer.
    2. Open Brasero.
    3. Select the option “Burn image”.
    4. Click the “Click here to select a disc image” button and using the file dialog, choose the ISO.
    5. Ensure the correct DVD is selected in the “Select a disc to write to”.
    6. -
    7. Click "Burn" and wait.
    8. -
    9. Upon seeing “Image successfully burned to DVD”, click "Close".
    10. +
    11. Click "Burn" and wait.
    12. +
    13. Upon seeing “Image successfully burned to DVD”, click "Close".
    -

    USB

    -

    We recommend using GNOME MultiWriter or ISO Image Writer for KDE. Please note that UNetbootin will not work.

    -
    GNOME MultiWriter
    +

    USB

    +

    We recommend using GNOME MultiWriter or ISO Image Writer for KDE. Please note that UNetbootin will not work.

    +
    GNOME MultiWriter

    Upon opening GNOME MultiWriter, you will likely be shown a window similar to the one below, if your USB drive is already plugged in and mounted.

    -
    warning

    The ISO image will be written to all mounted USB drives. Ensure that the only USB drive that is connected is the one you wish to write the ISO to.

    -

    MultiWriter Start

    +
    warning

    The ISO image will be written to all mounted USB drives. Ensure that the only USB drive that is connected is the one you wish to write the ISO to.

    +

    MultiWriter Start

    If your USB drive is not mounted, you will be prompted with an image indicating to plug it in.

    -

    Next, click the "Start Copying" button, and you will be prompted to select the ISO. Choose the ISO you downloaded in the "Getting the ISO" section. The USB will automatically be written to.

    -

    MultiWriter Writing

    +

    Next, click the "Start Copying" button, and you will be prompted to select the ISO. Choose the ISO you downloaded in the "Getting the ISO" section. The USB will automatically be written to.

    +

    MultiWriter Writing

    Upon completion, you will be prompted with the following dialog and your USB is now ready for use.

    -

    MultiWriter Done

    -

    KDE ISO Image Writer

    -
    info

    You will need both the ISO and sha256sums file for it saved in the same directory.

    +

    MultiWriter Done

    +

    KDE ISO Image Writer

    +
    info

    You will need both the ISO and sha256sums file for it saved in the same directory.

    When you open ISO Image Writer, you will see a window similar to the one below, if your USB drive is already plugged in and mounted.

    -

    ImageWriter Start

    +

    ImageWriter Start

    If there is no USB drive mounted, the USB drive field will be greyed out. Simply plug in the USB drive you want to use for the ISO, it will be auto-detected.

    -

    Click on the top field "Write this ISO image:". Select the ISO image you downloaded in the "Getting the ISO" section.

    -

    You may see "Downloading ISO image". When this is done, click the Create button.

    -

    ImageWriter Writing

    +

    Click on the top field "Write this ISO image:". Select the ISO image you downloaded in the "Getting the ISO" section.

    +

    You may see "Downloading ISO image". When this is done, click the Create button.

    +

    ImageWriter Writing

    When the operation is finished, you will see the confirmation dialog. Your USB is now ready for use.

    -

    ImageWriter Done

    -
    Command-line
    +

    ImageWriter Done

    +
    Command-line

    For those comfortable with the command-line / terminal, we will walk you through using dd.

    First, insert the USB drive into your computer and open your Terminal. Proceed to type lsblk into your Terminal. It should output something along the lines of:

    -
    NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
    sda 8:0 0 111.8G 0 disk
    ├─sda1 8:1 0 350M 0 part
    ├─sda2 8:2 0 39.7G 0 part
    └─sda3 8:3 0 71.8G 0 part /
    sdb 8:64 1 7.5G 0 disk
    ├─sdb1 8:65 1 712M 0 part
    └─sdb2 8:66 1 17.2M 0 part
    +
    NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
    sda 8:0 0 111.8G 0 disk
    ├─sda1 8:1 0 350M 0 part
    ├─sda2 8:2 0 39.7G 0 part
    └─sda3 8:3 0 71.8G 0 part /
    sdb 8:64 1 7.5G 0 disk
    ├─sdb1 8:65 1 712M 0 part
    └─sdb2 8:66 1 17.2M 0 part

    You will see one disk, in this case /dev/sdb, that is roughly the size of the USB drive. Yours should be similar (difference being in size). Write this device down somewhere.

    Next, locate the downloaded ISO. It will most likely be in your Downloads folder. In the event that it is, type: cd ~/Downloads

    If it is not in your Downloads folder, use cd to navigate to the correct directory.

    -
    danger

    This is where we overwrite the contents of your USB drive so please ensure you identified the correct drive in the lsblk stage above. Selecting the wrong drive here will lead to its contents being overwritten. An example command is below, however you may need to replace sdb with the drive we located above:

    -
    sudo dd if=Solus-Budgie-Release-2024-10-14.iso of=/dev/sdb bs=4M status=progress oflag=sync && sudo eject /dev/sdb
    +
    danger

    This is where we overwrite the contents of your USB drive so please ensure you identified the correct drive in the lsblk stage above. Selecting the wrong drive here will lead to its contents being overwritten. An example command is below, however you may need to replace sdb with the drive we located above:

    +
    sudo dd if=Solus-Budgie-Release-2024-10-14.iso of=/dev/sdb bs=4M status=progress oflag=sync && sudo eject /dev/sdb

    This will write the contents of the ISO to the thumb drive so you can boot it and also make sure the data is synchronized so you can eject the USB safely.

    -

    Windows

    -

    DVD

    -

    You can easily burn an ISO image to a DVD, on Windows 7 and newer, by using Window's built-in file manager (Explorer).

    +

    Windows

    +

    DVD

    +

    You can easily burn an ISO image to a DVD, on Windows 7 and newer, by using Window's built-in file manager (Explorer).

      -
    1. Open Windows' built-in file manager (Explorer).
    2. -
    3. Right click on the ISO image file and click "Burn disk image".
    4. +
    5. Open Windows' built-in file manager (Explorer).
    6. +
    7. Right click on the ISO image file and click "Burn disk image".
    8. Select the correct disc burner.
    9. -
    10. Click "Burn".
    11. +
    12. Click "Burn".
    -

    USB

    -

    You can easily burn an ISO image to a USB by using graphical tool Rufus.

    +

    USB

    +

    You can easily burn an ISO image to a USB by using graphical tool Rufus.

    1. Open Rufus.
    2. Ensure your device is correct by checking the contents of the Device dropdown.
    3. Click the CD icon found in the image below, and select the ISO.
    4. -
    5. Untick all options except "Create a bootable disk using" and use the dropdown to select "DD Image".
    6. -
    7. Click "Start".
    8. +
    9. Untick all options except "Create a bootable disk using" and use the dropdown to select "DD Image".
    10. +
    11. Click "Start".
    -

    Rufus

    -

    macOS

    -

    DVD

    +

    Rufus

    +

    macOS

    +

    DVD

    Since OS X El Capitan (10.11), the easiest way to burn a DVD is:

    1. Insert your DVD and open Finder.
    2. @@ -113,10 +102,10 @@

      DVDClick on “Burn Disk Image ‘Solus-Budgie-Release-2024-10-14.iso’ to Disc…”
    3. Then click “Burn”.
    -

    macOS Burn DVD

    -

    USB

    -
    Graphical tool
    -

    One of the easiest ways to burn an ISO image to a USB thumb drive is by using a graphical tool called Etcher.

    +

    macOS Burn DVD

    +

    USB

    +
    Graphical tool
    +

    One of the easiest ways to burn an ISO image to a USB thumb drive is by using a graphical tool called Etcher.

    1. Open Etcher.
    2. Click on “Select image” and then select the ISO and click “Open”.
    3. @@ -126,27 +115,25 @@
      Graphical too
    4. Once Etcher has finished it is safe to remove the USB drive.

    You may see a message stating “The disk you inserted was not readable by this computer.” once Etcher finishes. This can be ignored.

    -

    macOS Etcher

    -
    Command-line
    +

    macOS Etcher

    +
    Command-line

    For those comfortable with the macOS Terminal app, we will walk you through using dd.

    First, insert the USB drive into your computer and open Terminal (found in Applications/Utilities).

    -

    Now you'll need to identify your USB drive by listing your storage devices with the following command:

    -
    diskutil list
    +

    Now you'll need to identify your USB drive by listing your storage devices with the following command:

    +
    diskutil list

    You should see output similar to this:

    -
    /dev/disk0 (internal, physical):
    #: TYPE NAME SIZE IDENTIFIER
    0: GUID_partition_scheme *1.0 TB disk0
    1: EFI EFI 209.7 MB disk0s1
    2: Apple_HFS Macintosh HD 999.3 GB disk0s2
    3: Apple_Boot Recovery HD 650.0 MB disk0s3

    /dev/disk1 (external, physical):
    #: TYPE NAME SIZE IDENTIFIER
    0: GUID_partition_scheme *15.6 GB disk1
    1: EFI EFI 209.7 MB disk1s1
    2: Apple_HFS Ultra 15.3 GB disk1s2
    +
    /dev/disk0 (internal, physical):
    #: TYPE NAME SIZE IDENTIFIER
    0: GUID_partition_scheme *1.0 TB disk0
    1: EFI EFI 209.7 MB disk0s1
    2: Apple_HFS Macintosh HD 999.3 GB disk0s2
    3: Apple_Boot Recovery HD 650.0 MB disk0s3

    /dev/disk1 (external, physical):
    #: TYPE NAME SIZE IDENTIFIER
    0: GUID_partition_scheme *15.6 GB disk1
    1: EFI EFI 209.7 MB disk1s1
    2: Apple_HFS Ultra 15.3 GB disk1s2

    From this output, we can see the USB drive is listed as /dev/disk1 (external, physical). In this example, the IDENTIFIER is disk1. Please note, your USB drive may have a different identifier. You should be able to tell which is your USB drive by checking the name and size.

    macOS usually auto-mounts USB drives so you’ll need to unmount it first before proceeding. Use the following command and replace IDENTIFIER with the correct identifier we found in the diskutil list step.

    -
    diskutil unmountDisk /dev/IDENTIFIER
    +
    diskutil unmountDisk /dev/IDENTIFIER

    Now navigate to the folder that has the downloaded ISO. This could be your Mac’s Downloads folder. The following command will get you there:

    -
    cd ~/Downloads
    -
    danger

    This next step is dangerous. Using the wrong drive identifier could result in data loss.

    +
    cd ~/Downloads
    +
    danger

    This next step is dangerous. Using the wrong drive identifier could result in data loss.

    We will use the dd command to write the contents of the ISO to the thumb drive. Replace IDENTIFIER in the command below with your drive identifier. Note the extra r before the identifier (i.e rdisk1). This is for raw mode, which along with bs=1m, makes the transfer faster.

    -
    sudo dd if=Solus-Budgie-Release-2024-10-14.iso of=/dev/rIDENTIFIER bs=1m
    +
    sudo dd if=Solus-Budgie-Release-2024-10-14.iso of=/dev/rIDENTIFIER bs=1m

    Be patient! After a few minutes you’ll receive a message saying how much data was transferred. You can now safely eject the usb drive.

    -
    diskutil eject /dev/IDENTIFIER
    -

    Boot the media

    +
    diskutil eject /dev/IDENTIFIER
    +

    Boot the media

    Now it is time to restart your computer to boot the DVD or USB. Most computers will automatically boot from DVDs and USB, however if you experience issues booting the media, you may need to select to boot from DVD or USB.

    This is usually accessible by pressing F9 or F12 while your computer is booting. On some devices it may also be ESC.

    -

    Macs will boot to the "Startup Manager" by holding down the Option (Alt) key. The DVD or USB drive will most likely show up as "EFI Boot".

    - - \ No newline at end of file +

    Macs will boot to the "Startup Manager" by holding down the Option (Alt) key. The DVD or USB drive will most likely show up as "EFI Boot".

    \ No newline at end of file diff --git a/docs/user/quick-start/installation/secure-boot/index.html b/docs/user/quick-start/installation/secure-boot/index.html index 4c3fb4ae7..7c7df4227 100644 --- a/docs/user/quick-start/installation/secure-boot/index.html +++ b/docs/user/quick-start/installation/secure-boot/index.html @@ -1,51 +1,40 @@ - - - - - -Booting with Secure Boot Enabled | Solus Help Center - - - - - -

    Booting with Secure Boot Enabled

    -

    Since Solus 4.4 Secure Boot is now supported. When you first boot the ISO, and, if you have Secure Boot enabled in your UEFI firmware; you will have to perform the one-time-step of manually enrolling the Solus certificate. The following guide will walk you through this. If you already have Solus installed and wish to enable Secure Boot, skip ahead here.

    -Note that this only applies to machines with UEFI firmware, if your machine uses the older BIOS firmware you can safely ignore this article. If you wish to avoid having to do this step then you may disable Secure Boot in your machine's UEFI firmware interface. -

    Enrolling the Solus certificate

    -

    After booting the ISO from USB/DVD and, if Secure Boot is enabled in your device's UEFI firmware. A warning will appear concerning a Secure Boot violation, press Enter on your keyboard to continue.

    -

    Secure Boot violation

    +Booting with Secure Boot Enabled | Solus Help Center

    Booting with Secure Boot Enabled

    +

    Since Solus 4.4 Secure Boot is now supported. When you first boot the ISO, and, if you have Secure Boot enabled in your UEFI firmware; you will have to perform the one-time-step of manually enrolling the Solus certificate. The following guide will walk you through this. If you already have Solus installed and wish to enable Secure Boot, skip ahead here.

    +Note that this only applies to machines with UEFI firmware, if your machine uses the older BIOS firmware you can safely ignore this article. If you wish to avoid having to do this step then you may disable Secure Boot in your machine's UEFI firmware interface. +

    Enrolling the Solus certificate

    +

    After booting the ISO from USB/DVD and, if Secure Boot is enabled in your device's UEFI firmware. A warning will appear concerning a Secure Boot violation, press Enter on your keyboard to continue.

    +

    Secure Boot violation

    Now, it will provide 10 seconds in order to continue to MOK (Machine Owner Key) Management, press Enter again within the timeframe to do so.

    -

    Continue to MOK Management

    +

    Continue to MOK Management

    Use the down arrow key on your keyboard to select Enroll Key from Disk and press Enter to continue.

    -

    Enroll Key from Disk

    -

    Here you'll need to find the solus-enroll-me.cer certificate, it should normally be located in the SOLUSESP directory. Use the arrow keys to select a directory, Enter to enter it and Esc to go back.

    -

    Enroll the Solus Certificate

    -

    Once you found the solus-enroll-me.cer certificate, press Enter to enroll it, and press the and Enter key to continue. Finally, when confirming you wish to Enroll the key(s) press the key to select "Yes" and Enter again.

    +

    Enroll Key from Disk

    +

    Here you'll need to find the solus-enroll-me.cer certificate, it should normally be located in the SOLUSESP directory. Use the arrow keys to select a directory, Enter to enter it and Esc to go back.

    +

    Enroll the Solus Certificate

    +

    Once you found the solus-enroll-me.cer certificate, press Enter to enroll it, and press the and Enter key to continue. Finally, when confirming you wish to Enroll the key(s) press the key to select "Yes" and Enter again.

    Now, with the Solus certificate enrolled, press Enter to reboot the machine, boot the ISO from USB/DVD again and it should continue booting to the installer.

    -

    Confirm Key Enrollment

    +

    Confirm Key Enrollment

    Once Solus is installed you will not have to enroll the certificate again as it will stay enrolled. -

    Enabling Secure Boot on an existing install

    -

    If you already have Solus installed and wish to enable Secure Boot then there is one extra step you must perform BEFORE continuing with Enrolling the Solus Certificate as normal.

    +

    Enabling Secure Boot on an existing install

    +

    If you already have Solus installed and wish to enable Secure Boot then there is one extra step you must perform BEFORE continuing with Enrolling the Solus Certificate as normal.

    Firstly, you must confirm you have clr-boot-manager, version: 3.2.12, release: 29 (or later) installed, run eopkg info clr-boot-manager to confirm this. This version of clr-boot-manager will have created a new UEFI boot entry on your machine called Solus Linux Bootloader that can be booted from with Secure Boot enabled.

    -
    Before continuing, it is important to note the screenshots provided here are for example only, your UEFI firmware interface will almost certainly look different.
    -

    Reboot your machine and select the appropriate keyboard button during startup to choose a boot device. The correct key will vary from machine to machine but some common keys are F2, F11, F12, or Esc. From the boot selection interface, select the Solus Linux Bootloader entry and boot from it. If you've manage to successfully boot then you can continue with enabling Secure Boot.

    +
    Before continuing, it is important to note the screenshots provided here are for example only, your UEFI firmware interface will almost certainly look different.
    +

    Reboot your machine and select the appropriate keyboard button during startup to choose a boot device. The correct key will vary from machine to machine but some common keys are F2, F11, F12, or Esc. From the boot selection interface, select the Solus Linux Bootloader entry and boot from it. If you've manage to successfully boot then you can continue with enabling Secure Boot.

    If there is no entry called Solus Linux Bootloader, reboot, log back in, open a terminal and run sudo clr-boot-manager update. -

    UEFI Choose Boot Device

    -

    After successfully booting from the new Solus Linux Bootloader UEFI entry, open a terminal, input systemctl reboot --firmware-setup and press Enter. This will reboot you into your machine's UEFI firmware interface. Once there, you will have to find and enable the Secure Boot setting. Where this is located varies from machine to machine. Some common places it can be located under are Windows OS Configuration, Security or Device Manager.

    -

    UEFI Secure Boot Configuration

    -

    Once you've found and enabled the Secure Boot setting then reboot once again from the Solus Linux Bootloader UEFI entry. From there you can continue with the instructions: Enrolling the Solus Certificate, bearing in mind you are booting from a disk rather than from a USB/DVD.

    +

    UEFI Choose Boot Device

    +

    After successfully booting from the new Solus Linux Bootloader UEFI entry, open a terminal, input systemctl reboot --firmware-setup and press Enter. This will reboot you into your machine's UEFI firmware interface. Once there, you will have to find and enable the Secure Boot setting. Where this is located varies from machine to machine. Some common places it can be located under are Windows OS Configuration, Security or Device Manager.

    +

    UEFI Secure Boot Configuration

    +

    Once you've found and enabled the Secure Boot setting then reboot once again from the Solus Linux Bootloader UEFI entry. From there you can continue with the instructions: Enrolling the Solus Certificate, bearing in mind you are booting from a disk rather than from a USB/DVD.

    Remember to save settings after enabling Secure Boot! (usually F10) -

    Final tips

    -

    Once you've successfully enabled and booted your Solus install with Secure Boot enabled. Go back into your machine's UEFI firmware interface and change the default boot device to Solus Linux Bootloader.

    -

    You can run bootctl status | grep "Secure Boot" in a terminal to verify Secure Boot is enabled.

    +

    Final tips

    +

    Once you've successfully enabled and booted your Solus install with Secure Boot enabled. Go back into your machine's UEFI firmware interface and change the default boot device to Solus Linux Bootloader.

    +

    You can run bootctl status | grep "Secure Boot" in a terminal to verify Secure Boot is enabled.

    It is possible to delete the old Solus UEFI boot entry with efibootmgr once Secure Boot is enabled successfully, However, caution is required and as such, instructions to do so are not provided here.

    Why is enrolling the Solus certificate necessary?

    -

    In order to avoid the one time step of enrolling the Solus certificate, Solus would have to get it's own shim EFI executable signed by Microsoft. Currently, the following actions must be completed to do this:

    +

    In order to avoid the one time step of enrolling the Solus certificate, Solus would have to get it's own shim EFI executable signed by Microsoft. Currently, the following actions must be completed to do this:

    • Obtain an EV Certificate (expensive!)
    • Register for the Microsoft Windows Hardware Developer Program.
    • -
    • Implement any additional security requirements as required by the shim-review process.
    • +
    • Implement any additional security requirements as required by the shim-review process.

    Currently, we are using a third-party shim that is already signed by Microsoft, the downside is the Solus (vendor) certificate is not already embedded and trusted in the shim executable, and as such, requires the user to enroll the Solus certificate manually on first boot.

    We appreciate that having the enroll the certificate may be confusing to users and, the process to do so may not be self-explanatory. Especially, as Secure Boot is generally enabled by default for the majority of machines.

    @@ -54,12 +43,10 @@

    Why is enrolling the Solus certificate necessary?

  • Obtaining an EV certificate is an expensive investment.
  • Enrolling the Solus certificate is only required once, and, only if Secure Boot is enabled.
  • -

    As such, we are not currently looking to our get our own shim signed by Microsoft. However, thanks to our supporters on OpenCollective, it is indeed within our budget to obtain an EV certificate in the future which would unblock the additional requirements.

    - +

    As such, we are not currently looking to our get our own shim signed by Microsoft. However, thanks to our supporters on OpenCollective, it is indeed within our budget to obtain an EV certificate in the future which would unblock the additional requirements.

    +
    - - \ No newline at end of file +
  • https://learn.microsoft.com/windows-hardware/drivers/dashboard/file-signing-reqs
  • +
  • https://github.com/rhboot/shim-review/
  • +
  • https://github.com/rhboot/shim/
  • +
    \ No newline at end of file diff --git a/docs/user/quick-start/installation/system-requirements/index.html b/docs/user/quick-start/installation/system-requirements/index.html index c4592cb6b..4e55d1ec5 100644 --- a/docs/user/quick-start/installation/system-requirements/index.html +++ b/docs/user/quick-start/installation/system-requirements/index.html @@ -1,15 +1,4 @@ - - - - - -System Requirements | Solus Help Center - - - - - -

    System requirements

    +System Requirements | Solus Help Center

    System requirements

    • A blank DVD or a USB drive that is at least 3 GB
    • On UEFI systems, an EFI partition of 1 GB minimum
    • @@ -17,12 +6,10 @@
    • System connected to AC power

    In order to install Solus, your system must meet the minimum system requirements. Ideally it should meet or exceed the recommended values for a better experience.

    -
    MinimumRecommended
    Disk space free10 GB / 9.3 GiB25 GB / 23.3 GiB
    Memory (RAM)4 GB8 GB or more
    Processor (CPU)64-bit (x86-64) processorx86-64-v2 2 GHz quad core
    System firmwareBIOS / UEFIUEFI
    Display Adapter (GPU)Any onboard or dedicated adapter
    +
    MinimumRecommended
    Disk space free10 GB / 9.3 GiB25 GB / 23.3 GiB
    Memory (RAM)4 GB8 GB or more
    Processor (CPU)64-bit (x86-64) processorx86-64-v2 2 GHz quad core
    System firmwareBIOS / UEFIUEFI
    Display Adapter (GPU)Any onboard or dedicated adapter

    These are general recommendations. Your requirements may vary based on your intended use of the system.

    -
    info

    Desktop environments that are more feature rich (such as GNOME and KDE Plasma) use the graphics card for 3D-acceleration, when possible. They will benefit from dedicated and more powerful GPUs. Older graphics cards may not support acceleration:

      +
      info

      Desktop environments that are more feature rich (such as GNOME and KDE Plasma) use the graphics card for 3D-acceleration, when possible. They will benefit from dedicated and more powerful GPUs. Older graphics cards may not support acceleration:

      • Intel prior to GMA9xx
      • NVIDIA prior to NV30 (GeForce FX5xxx series)
      • Radeon prior to R300 (Radeon 9500)
      • -
    - - \ No newline at end of file +
    \ No newline at end of file diff --git a/docs/user/quick-start/software-center/index.html b/docs/user/quick-start/software-center/index.html index f8f4d3af6..c4e672f7d 100644 --- a/docs/user/quick-start/software-center/index.html +++ b/docs/user/quick-start/software-center/index.html @@ -1,19 +1,6 @@ - - - - - -Software Center | Solus Help Center - - - - - -

    Software Center

    +Software Center | Solus Help Center

    Software Center

    You can install software ranging from Google Chrome to LibreOffice, as well as update software, via our Software Center.

    -

    Software Center

    +

    Software Center

    Solus uses the eopkg package manager, which is not compatible with either deb or rpm packages offered by other Linux-based operating systems. -For information on how to use eopkg directly, see the Package Management section

    -

    You can also use a number of distribution-agnostic (or "universal") package managers to install applications, including Snap, Flatpak, and AppImage.

    - - \ No newline at end of file +For information on how to use eopkg directly, see the Package Management section

    +

    You can also use a number of distribution-agnostic (or "universal") package managers to install applications, including Snap, Flatpak, and AppImage.

    \ No newline at end of file diff --git a/docs/user/software/camera/droidcam/index.html b/docs/user/software/camera/droidcam/index.html index 55a88d554..5b432cdcf 100644 --- a/docs/user/software/camera/droidcam/index.html +++ b/docs/user/software/camera/droidcam/index.html @@ -1,34 +1,21 @@ - - - - - -DroidCam | Solus Help Center - - - - - -

    DroidCam

    -

    DroidCam turns your phone or tablet into a webcam for your computer. You can use it with video conferencing programs like Zoom, MS Teams, and Skype.

    -

    Before installation

    +DroidCam | Solus Help Center

    DroidCam

    +

    DroidCam turns your phone or tablet into a webcam for your computer. You can use it with video conferencing programs like Zoom, MS Teams, and Skype.

    +

    Before installation

    DroidCam relies on the v4l2loopback kernel module. So you need to install v4l2loopback or v4l2loopback-current depending of which kernel is installed on your computer. To find out which kernel is installed, run:

    -
    uname -r
    +
    uname -r

    This should return a version which ends in .current or .lts.

      -
    • If you are running the "current" kernel, install v4l2loopback-current:
    • +
    • If you are running the "current" kernel, install v4l2loopback-current:
    -
    sudo eopkg install v4l2loopback-current
    +
    sudo eopkg install v4l2loopback-current
      -
    • If you are running the "lts" kernel, install v4l2loopback:
    • +
    • If you are running the "lts" kernel, install v4l2loopback:
    -
    sudo eopkg install v4l2loopback
    +
    sudo eopkg install v4l2loopback

    After the kernel module is installed, continue to installation steps.

    -

    Installation

    +

    Installation

    DroidCam can be installed from Software Center or via terminal :

    -
    sudo eopkg it droidcam
    +
    sudo eopkg it droidcam

    Once DroidCam is installed, reboot your system. Now DroidCam is ready to use.

    -

    Usage

    -

    To start pairing your phone or tablet with your computer, you can follow steps provided by this guide from the DroidCam developer.

    - - \ No newline at end of file +

    Usage

    +

    To start pairing your phone or tablet with your computer, you can follow steps provided by this guide from the DroidCam developer.

    \ No newline at end of file diff --git a/docs/user/software/command-line/index.html b/docs/user/software/command-line/index.html index 66ddc9a82..6111e26fb 100644 --- a/docs/user/software/command-line/index.html +++ b/docs/user/software/command-line/index.html @@ -1,28 +1,17 @@ - - - - - -Command Line | Solus Help Center - - - - - -

    Command Line

    -

    Changing Shell

    +Command Line | Solus Help Center

    Command Line

    +

    Changing Shell

    When using a terminal session to perform command-line activities, a Unix shell is used to interpret commands. The default shell on Solus is Bash, however changing your shell may enable additional features and functionality.

    Solus makes available other shells via our repository, with a full list available in /usr/share/defaults/etc/shells. Common shells, aside from Bash, are:

    -

    Installation

    -

    In order to use a shell different from Bash, you may need to install the respective package for the shell to be able to work. You will find those packages in the Software Center within the System utilities category, or via the command-line with sudo eopkg install <Name of the Shell>.

    +

    Installation

    +

    In order to use a shell different from Bash, you may need to install the respective package for the shell to be able to work. You will find those packages in the Software Center within the System utilities category, or via the command-line with sudo eopkg install <Name of the Shell>.

    Example:

    -
    sudo eopkg install fish
    -

    Switching

    +
    sudo eopkg install fish
    +

    Switching

    To switch to another shell, first install the appropriate package, followed by the command chsh (change shell) to change the shell for your user session, using the path provided in /usr/share/defaults/etc/shells. Lastly you need to log out and back in again for the change to take effect.

    Example:

      @@ -33,62 +22,60 @@

      SwitchingTroubleshooting

      +

      Troubleshooting

      If the default shell is not changed, you must add the shell to /etc/shells via the command sh with sudo.

      Example:

      • -

        For zsh: echo "/bin/zsh" | sudo tee -a /etc/shells

        +

        For zsh: echo "/bin/zsh" | sudo tee -a /etc/shells

      • -

        For fish: echo "/usr/bin/fish" | sudo tee -a /etc/shells

        +

        For fish: echo "/usr/bin/fish" | sudo tee -a /etc/shells

      -

      fzf

      -

      fzf is a general-purpose command-line fuzzy finder. It can be used as an interactive Unix filter with any list: files, command history, processes, hostnames, bookmarks, git commits, etc.

      -

      Installation

      +

      fzf

      +

      fzf is a general-purpose command-line fuzzy finder. It can be used as an interactive Unix filter with any list: files, command history, processes, hostnames, bookmarks, git commits, etc.

      +

      Installation

      The fzf project consists of the following components: an fzf executable, an fzf-tmux script for launching fzf in a tmux pane, shell extensions (including key bindings and command-line fuzzy auto-completion), and a vim/Neovim plugin file. They are all available in the fzf package in the Software Center or via eopkg in a terminal:

      -
      sudo eopkg it fzf
      -

      The shell extensions are not enabled by default after the fzf package is installed. The procedures to enable these features are described below. For more tips and examples on the usage of fzf, visit its GitHub repository and Wiki pages.

      -

      Fuzzy Auto-Completion

      -

      Fuzzy completion for files and directories can be triggered by a trigger sequence (** by default) followed by the TAB key for bash and zsh. To enable this feature, add the following lines to the shell configuration file depending on the shell you use (~/.bashrc for bash and ~/.zshrc for zsh).

      -

      Bash

      -
      FZF_COMPLETION_FILE=/usr/share/bash-completion/completions/fzf
      [[ -f $FZF_COMPLETION_FILE ]] && source $FZF_COMPLETION_FILE
      -

      Zsh

      -
      FZF_COMPLETION_FILE=/usr/share/zsh/site-functions/_fzf
      [[ -f $FZF_COMPLETION_FILE ]] && source $FZF_COMPLETION_FILE
      -

      Key Bindings

      -

      fzf can use specific key bindings to trigger a search over a list of files, command history and directories and paste the result onto the command-line. Follow these steps to set up the key bindings for your favorite shell.

      -

      Bash

      +
      sudo eopkg it fzf
      +

      The shell extensions are not enabled by default after the fzf package is installed. The procedures to enable these features are described below. For more tips and examples on the usage of fzf, visit its GitHub repository and Wiki pages.

      +

      Fuzzy Auto-Completion

      +

      Fuzzy completion for files and directories can be triggered by a trigger sequence (** by default) followed by the TAB key for bash and zsh. To enable this feature, add the following lines to the shell configuration file depending on the shell you use (~/.bashrc for bash and ~/.zshrc for zsh).

      +

      Bash

      +
      FZF_COMPLETION_FILE=/usr/share/bash-completion/completions/fzf
      [[ -f $FZF_COMPLETION_FILE ]] && source $FZF_COMPLETION_FILE
      +

      Zsh

      +
      FZF_COMPLETION_FILE=/usr/share/zsh/site-functions/_fzf
      [[ -f $FZF_COMPLETION_FILE ]] && source $FZF_COMPLETION_FILE
      +

      Key Bindings

      +

      fzf can use specific key bindings to trigger a search over a list of files, command history and directories and paste the result onto the command-line. Follow these steps to set up the key bindings for your favorite shell.

      +

      Bash

      Add the following content to ~/.bashrc:

      -
      FZF_KEYBINDING_FILE=/usr/share/fzf/key-bindings.bash
      [[ -f $FZF_KEYBINDING_FILE ]] && source $FZF_KEYBINDING_FILE
      -

      Fish

      +
      FZF_KEYBINDING_FILE=/usr/share/fzf/key-bindings.bash
      [[ -f $FZF_KEYBINDING_FILE ]] && source $FZF_KEYBINDING_FILE
      +

      Fish

      First create the following directory if it does not already exist:

      -
      mkdir -p $HOME/.config/fish/functions
      +
      mkdir -p $HOME/.config/fish/functions

      cd into this directory and make a file fish_user_key_bindings.fish with the following content:

      -
      function fish_user_key_bindings
      fzf_key_bindings
      end
      +
      function fish_user_key_bindings
      fzf_key_bindings
      end

      Then create the following symlink:

      -
      ln -s /usr/share/fzf/key-bindings.fish $HOME/.config/fish/functions/fzf_key_bindings.fish
      -

      Zsh

      +
      ln -s /usr/share/fzf/key-bindings.fish $HOME/.config/fish/functions/fzf_key_bindings.fish
      +

      Zsh

      Add the following content to ~/.zshrc:

      -
      FZF_KEYBINDING_FILE=/usr/share/fzf/key-bindings.zsh
      [[ -f $FZF_KEYBINDING_FILE ]] && source $FZF_KEYBINDING_FILE
      -

      Powerline Shell Prompt

      -

      Powerline is a statusline plugin for vim, and provides statuslines and prompts for several other applications, including zsh, bash, tmux, IPython, Awesome and Qtile.

      -

      Installation

      +
      FZF_KEYBINDING_FILE=/usr/share/fzf/key-bindings.zsh
      [[ -f $FZF_KEYBINDING_FILE ]] && source $FZF_KEYBINDING_FILE
      +

      Powerline Shell Prompt

      +

      Powerline is a statusline plugin for vim, and provides statuslines and prompts for several other applications, including zsh, bash, tmux, IPython, Awesome and Qtile.

      +

      Installation

      Powerline has two components, the plugin system itself powerline and the fonts powerline-fonts. Both are available in the Software Center or via eopkg in a terminal:

      -
      sudo eopkg it powerline powerline-fonts
      +
      sudo eopkg it powerline powerline-fonts

      To get powerline working inside your terminal, you need to add the following commands to the .bashrc inside your $HOME directory.

      -

      Shell Prompts

      +

      Shell Prompts

      The Powerline daemon is not running automatically by any of the bindings. It is advised to add the following before any other powerline-related code in the shell configuration file

      -
      powerline-daemon -q
      -

      Bash

      -
      powerline-daemon -q
      POWERLINE_BASH_CONTINUATION=1
      POWERLINE_BASH_SELECT=1
      source /usr/lib/python3.11/site-packages/powerline/bindings/bash/powerline.sh
      -

      Busybox and dash

      -
      source /usr/lib/python3.11/site-packages/powerline/bindings/shell/powerline.sh
      -

      Fish

      -
      set fish_function_path $fish_function_path "/usr/lib/python3.11/site-packages/powerline/bindings/fish/"
      -

      Zsh

      -
      source /usr/lib/python3.11/site-packages/powerline/bindings/zsh/powerline.zsh
      -

      Read more about powerline on its docs website

    - - \ No newline at end of file +
    powerline-daemon -q
    +

    Bash

    +
    powerline-daemon -q
    POWERLINE_BASH_CONTINUATION=1
    POWERLINE_BASH_SELECT=1
    source /usr/lib/python3.11/site-packages/powerline/bindings/bash/powerline.sh
    +

    Busybox and dash

    +
    source /usr/lib/python3.11/site-packages/powerline/bindings/shell/powerline.sh
    +

    Fish

    +
    set fish_function_path $fish_function_path "/usr/lib/python3.11/site-packages/powerline/bindings/fish/"
    +

    Zsh

    +
    source /usr/lib/python3.11/site-packages/powerline/bindings/zsh/powerline.zsh
    +

    Read more about powerline on its docs website

    \ No newline at end of file diff --git a/docs/user/software/configuration_files/index.html b/docs/user/software/configuration_files/index.html index 4c135f249..54d5da24d 100644 --- a/docs/user/software/configuration_files/index.html +++ b/docs/user/software/configuration_files/index.html @@ -1,21 +1,8 @@ - - - - - -Configuration File Locations | Solus Help Center - - - - - -

    Configuration File Locations

    +Configuration File Locations | Solus Help Center

    Configuration File Locations

    These are the standard locations on a Solus installation for software configuration files.

    -
    note

    Solus uses a "stateless" system configuration. For what that means see the Clear Linux Guide to Stateless Configuration.

    -
    TypeApplies toLocation(s)Priority
    User
    - preserved during package updates
    Per-user~/.config/
    ~/
    others
    Highest
    System
    - preserved during package updates
    All users on the system/etc/
    OS provided (aka defaults)
    - overridden by package updates
    All users on the system/usr/share/defaults/Lowest
    +
    note

    Solus uses a "stateless" system configuration. For what that means see the Clear Linux Guide to Stateless Configuration.

    +
    TypeApplies toLocation(s)Priority
    User
    - preserved during package updates
    Per-user~/.config/
    ~/
    others
    Highest
    System
    - preserved during package updates
    All users on the system/etc/
    OS provided (aka defaults)
    - overridden by package updates
    All users on the system/usr/share/defaults/Lowest

    A user configuration file overrides the system configuration, and the system configuration overrides the OS provided configuration. If no user configuration is provided, then the system configuration is used, and if no system configuration is provided, then the OS provided configuration is used.

    Different software expects user configuration files in different places. Many software packages store these under the XDG_CONFIG_HOME directory: ~/.config. Some applications insist on placing them straight into the home directory. For example the fish shell uses the ~/.config/fish directory to store user configurations, while the bash shell uses the ~/.bashrc configuration file straight from the home directory. Consult documentation before customizing software to ensure you put things in the right place.

    Some common configuration files:

    -
    SoftwareConfiguration files
    apcupsd/etc/changeme
    cups/etc/cups/
    samba/etc/samba/smb.conf
    /usr/share/defaults/samba/
    pam/etc/pam.d/
    /usr/share/defaults/etc/pam.d/
    ssh$HOME/.ssh/
    /usr/share/defaults/etc/ssh/
    ssl/etc/ssl/
    /usr/share/defaults/etc/ssl/
    tigervnc$HOME/.vnc/xstartup
    xrdp/etc/X11/Xwrapper.config
    - - \ No newline at end of file +
    SoftwareConfiguration files
    apcupsd/etc/changeme
    cups/etc/cups/
    samba/etc/samba/smb.conf
    /usr/share/defaults/samba/
    pam/etc/pam.d/
    /usr/share/defaults/etc/pam.d/
    ssh$HOME/.ssh/
    /usr/share/defaults/etc/ssh/
    ssl/etc/ssl/
    /usr/share/defaults/etc/ssl/
    tigervnc$HOME/.vnc/xstartup
    xrdp/etc/X11/Xwrapper.config
    \ No newline at end of file diff --git a/docs/user/software/desktops/index.html b/docs/user/software/desktops/index.html index fc34cfe04..6d731a971 100644 --- a/docs/user/software/desktops/index.html +++ b/docs/user/software/desktops/index.html @@ -1,45 +1,32 @@ - - - - - -Desktops | Solus Help Center - - - - - -

    Desktop Environments

    -

    Solus offers a multitude of desktop environments, ranging from the feature-rich and modern Budgie to the traditional XFCE experience. It is recommended to use the ISO for a specific desktop environment but it is possible to install them afterwards if you wish to do try one out.

    +Desktops | Solus Help Center

    Desktop Environments

    +

    Solus offers a multitude of desktop environments, ranging from the feature-rich and modern Budgie to the traditional XFCE experience. It is recommended to use the ISO for a specific desktop environment but it is possible to install them afterwards if you wish to do try one out.

    WARNING: Do NOT attempt to install ANY other desktop environments next to KDE Plasma Desktop. This scenario is NOT supported and you will be told so in no uncertain terms if asking for support.

    -

    Budgie

    +

    Budgie

    The flagship desktop environment / experience of Solus is Budgie. If you have installed either our GNOME or XFCE editions, you can try out and install Budgie by running the following command:

    -
    # Do NOT attempt to do this if you are running the KDE Plasma Desktop version of Solus!
    sudo eopkg install -c desktop.budgie
    -

    GNOME Shell

    +
    # Do NOT attempt to do this if you are running the KDE Plasma Desktop version of Solus!
    sudo eopkg install -c desktop.budgie
    +

    GNOME Shell

    Solus offers a GNOME Shell experience that ships out-of-the-box with a variety of extensions. If you have installed either our Budgie or XFCE editions, you can try out and install GNOME Shell by running the following commands:

    -
    # Do NOT attempt to do this if you are running the KDE Plasma Desktop version of Solus!
    sudo eopkg install gdm gnome-shell gnome-desktop-branding
    -

    MATE

    -
    caution

    We plan to deprecate the MATE Desktop, for a similar experience, consider XFCE.

    -

    Solus offers the MATE desktop environment / experience, tailored to advanced users and older hardware, as well as shipping with our modern menu called Brisk Menu. If you have installed either our Budgie or GNOME editions, you can try out and install MATE by running the following command:

    -
    # Do NOT attempt to do this if you are running the KDE Plasma Desktop version of Solus!
    sudo eopkg install -c desktop.mate
    -

    XFCE

    +
    # Do NOT attempt to do this if you are running the KDE Plasma Desktop version of Solus!
    sudo eopkg install gdm gnome-shell gnome-desktop-branding
    +

    MATE

    +
    caution

    We plan to deprecate the MATE Desktop, for a similar experience, consider XFCE.

    +

    Solus offers the MATE desktop environment / experience, tailored to advanced users and older hardware, as well as shipping with our modern menu called Brisk Menu. If you have installed either our Budgie or GNOME editions, you can try out and install MATE by running the following command:

    +
    # Do NOT attempt to do this if you are running the KDE Plasma Desktop version of Solus!
    sudo eopkg install -c desktop.mate
    +

    XFCE

    Solus offers the XFCE desktop environment for users preferring a more lightweight experience. It is recommended for existing MATE users. You can install XFCE with the following command:

    -
    # Do NOT attempt to do this if you are running the KDE Plasma Desktop version of Solus!
    sudo eopkg install -c desktop.xfce
    -

    Tiling window managers

    -

    i3

    +
    # Do NOT attempt to do this if you are running the KDE Plasma Desktop version of Solus!
    sudo eopkg install -c desktop.xfce
    +

    Tiling window managers

    +

    i3

    Solus offers i3 as a tiling window manager. Users wanting to try i3 can install it by running the following command:

    -
    # Do NOT attempt to do this if you are running the KDE Plasma Desktop version of Solus!
    sudo eopkg install i3
    +
    # Do NOT attempt to do this if you are running the KDE Plasma Desktop version of Solus!
    sudo eopkg install i3

    If you want to use i3 with support for GNOME Settings Daemon and other GNOME functionality, follow the instructions for installation of GNOME Shell, then choose GNOME+i3 at the login screen to use it.

    -

    Sway

    +

    Sway

    Solus offers Sway as a Wayland-only tiling window manager. You can install it with the following command:

    -
    sudo eopkg install sway
    -

    Sway expects users to do some configuration, refer to the Sway Wiki.

    -

    For more information about tiling window managers, click here.

    -

    Stacking window manager

    -

    Labwc

    +
    sudo eopkg install sway
    +

    Sway expects users to do some configuration, refer to the Sway Wiki.

    +

    For more information about tiling window managers, click here.

    +

    Stacking window manager

    +

    Labwc

    Solus offers Labwc as a Wayland-only stacking window manager. You can install it with the following command:

    -
    sudo eopkg install labwc
    -

    Labwc expects users to do some configuration, refer to the Labwc wiki

    -

    For more information about stacking window managers, click here

    - - \ No newline at end of file +
    sudo eopkg install labwc
    +

    Labwc expects users to do some configuration, refer to the Labwc wiki

    +

    For more information about stacking window managers, click here

    \ No newline at end of file diff --git a/docs/user/software/development/containers/index.html b/docs/user/software/development/containers/index.html index bc615abce..e2020fa4c 100644 --- a/docs/user/software/development/containers/index.html +++ b/docs/user/software/development/containers/index.html @@ -1,33 +1,20 @@ - - - - - -Containers | Solus Help Center - - - - - -

    Containers

    +Containers | Solus Help Center

    Containers

    Containers are a popular method to run and configure applications in a confined environment without directly installing the application and all its dependencies. Solus provides the following container technologies:

    -

    Docker

    +

    Docker

    Docker is a container engine developed by Docker Inc. Solus provides the command line utility docker to run and manage docker containers.

    -

    A wide variety of applications are available through the official container registry Docker Hub

    +

    A wide variety of applications are available through the official container registry Docker Hub

    • Install the docker engine by running sudo eopkg it docker (you may also want to install docker-compose)
    • Test your installation with sudo docker run hello-world
    • Optional: For sudo-less docker, run sudo usermod -aG docker $USER. You must restart for this change to take effect
    • Optional: Allow the docker daemon to start automatically at system startup sudo systemctl enable docker
    • -
    • Refer to the official Docker Docs for further topics
    • +
    • Refer to the official Docker Docs for further topics
    -

    Podman

    -

    Podman is a container manager by Red Hat. Podman's main advantage is the capability of running containers without root permissions, thus limiting the attack surface of the host system. Assuming an attacker will be able to escape a compromised container, they won't have full control of the machine.

    -

    Podman's command line interface is 100% compatible with Docker, to the point it's possible to replace the docker command with podman without any subsequent errors.

    +

    Podman

    +

    Podman is a container manager by Red Hat. Podman's main advantage is the capability of running containers without root permissions, thus limiting the attack surface of the host system. Assuming an attacker will be able to escape a compromised container, they won't have full control of the machine.

    +

    Podman's command line interface is 100% compatible with Docker, to the point it's possible to replace the docker command with podman without any subsequent errors.

    • Install Podman by running sudo eopkg it podman
    • Optionally, add alias docker=podman to your initial shell script, should you want to replace Docker with Podman while retaining your typing habits
    • -
    • Refer to the official Podman website for more documentation
    • -
    - - \ No newline at end of file +
  • Refer to the official Podman website for more documentation
  • +
    \ No newline at end of file diff --git a/docs/user/software/development/index.html b/docs/user/software/development/index.html index 87a7d36fb..48925b5d3 100644 --- a/docs/user/software/development/index.html +++ b/docs/user/software/development/index.html @@ -1,33 +1,20 @@ - - - - - -Development | Solus Help Center - - - - - -

    Development

    +Development | Solus Help Center

    Development

    Solus provides a stable foundation for creating, testing, and deploying applications.

    You can install tools such as text editors, programming languages, compilers, and version control systems. Solus also supports containerization and virtualization technologies.

    -

    Getting started

    +

    Getting started

    If you want to compile and develop software using Solus, we recommend installing the system.devel component.

    -
    sudo eopkg install -c system.devel
    +
    sudo eopkg install -c system.devel

    The system.devel component installs libraries and packages for software development, such as clang, gcc, and make.


    -

    Containers

    +

    Containers

    Install and configure containerization software on Solus.

    -

    Java

    +

    Java

    Learn how to install, run, and manage Java on Solus.

    -

    PostgreSQL

    +

    PostgreSQL

    A quick guide to using PostgreSQL on Solus.

    -

    R and RStudio

    +

    R and RStudio

    Quick start guide for R and RStudio on Solus.

    -

    Rust

    +

    Rust

    A quick guide to getting set up for Rust development on Solus.

    -

    Web Development

    -

    Install and configure different web development tools on Solus.

    - - \ No newline at end of file +

    Web Development

    +

    Install and configure different web development tools on Solus.

    \ No newline at end of file diff --git a/docs/user/software/development/java/index.html b/docs/user/software/development/java/index.html index e0101bd18..70e017eaa 100644 --- a/docs/user/software/development/java/index.html +++ b/docs/user/software/development/java/index.html @@ -1,28 +1,15 @@ - - - - - -Java | Solus Help Center - - - - - -

    Java

    +Java | Solus Help Center

    Java

    Solus includes multiple LTS versions of Java in the repositories. You can install more than one version in your system at once.

    -
    tip

    If you need to install different versions of Java, use alternative installation methods such as SDKMAN!.

    +
    tip

    If you need to install different versions of Java, use alternative installation methods such as SDKMAN!.

    All Java packages in the Solus repositories include the Java Runtime Environment (JRE) and the Java Development Kit (JDK).

    The following table lists the versions of Java available in the Solus repositories.

    -
    VersionPackage nameInstallation directoryIncluded componentsNotes
    Java 11openjdk-11/usr/lib64/openjdk-11JRE, JDK, OpenJFX
    Java 17openjdk-17/usr/lib64/openjdk-17JRE, JDK
    Java 21openjdk-21/usr/lib64/openjdk-21JRE, JDK
    -

    Running Java applications

    -
    Important

    Solus does not add Java to the PATH environment variable by default.

    +
    VersionPackage nameInstallation directoryIncluded componentsNotes
    Java 11openjdk-11/usr/lib64/openjdk-11JRE, JDK, OpenJFX
    Java 17openjdk-17/usr/lib64/openjdk-17JRE, JDK
    Java 21openjdk-21/usr/lib64/openjdk-21JRE, JDK
    +

    Running Java applications

    +
    Important

    Solus does not add Java to the PATH environment variable by default.

    There are multiple ways to execute Java applications in Solus:

    • Create a .desktop file, then add env JAVA_HOME=/path/to/jdk/bin to Exec.
    • Create a script that sets JAVA_HOME before running the application.
    • Symlink the java executable from /path/to/jdk/bin to /usr/bin.
    • Add /path/to/jdk/bin to your PATH environment variable.
    • -
    - - \ No newline at end of file +
    \ No newline at end of file diff --git a/docs/user/software/development/postgresql/index.html b/docs/user/software/development/postgresql/index.html index ff9595331..154ce4542 100644 --- a/docs/user/software/development/postgresql/index.html +++ b/docs/user/software/development/postgresql/index.html @@ -1,64 +1,53 @@ - - - - - -PostgreSQL | Solus Help Center - - - - - -

    PostgreSQL server

    -

    PostgreSQL is an open source object-relational database system. The postgresql package in Solus includes the PostgreSQL library, client and server.

    -

    Usage

    +PostgreSQL | Solus Help Center

    PostgreSQL server

    +

    PostgreSQL is an open source object-relational database system. The postgresql package in Solus includes the PostgreSQL library, client and server.

    +

    Usage

    PostgreSQL can be installed either from the Software Center or via terminal:

    -
    sudo eopkg install postgresql
    +
    sudo eopkg install postgresql

    Management of the server can be done using Systemd:

    -
    sudo systemctl enable postgresql # Start the server on boot
    sudo systemctl start postgresql # Start the server now
    sudo systemctl stop postgresql # Stop the server
    +
    sudo systemctl enable postgresql # Start the server on boot
    sudo systemctl start postgresql # Start the server now
    sudo systemctl stop postgresql # Stop the server

    It is possible to connect to the database using the PostgreSQL user:

    -
    sudo -u postgres psql
    -

    Note that all local connections are trusted and can access all databases by default. This can be changed in /var/db/pgsql/data/pg_hba.conf, see the PostgreSQL documentation for more details.

    -

    Updating to 17

    -

    Because PostgreSQL is included as a single package, the only way to perform a major upgrade of PostgreSQL is via a backup/restore. The procedure below describes the upgrade process as it applies to Solus. See the PostgreSQL documentation for more details.

    +
    sudo -u postgres psql
    +

    Note that all local connections are trusted and can access all databases by default. This can be changed in /var/db/pgsql/data/pg_hba.conf, see the PostgreSQL documentation for more details.

    +

    Updating to 17

    +

    Because PostgreSQL is included as a single package, the only way to perform a major upgrade of PostgreSQL is via a backup/restore. The procedure below describes the upgrade process as it applies to Solus. See the PostgreSQL documentation for more details.

    1. If you have already updated PostgreSQL, downgrade PostgreSQL back to 16.4:
    -
    sudo eopkg it https://cdn.getsol.us/repo/shannon/p/postgresql/postgresql-16.4-51-1-x86_64.eopkg \
    https://cdn.getsol.us/repo/shannon/p/postgresql/postgresql-libpq-16.4-51-1-x86_64.eopkg
    -
      +
      sudo eopkg it https://cdn.getsol.us/repo/shannon/p/postgresql/postgresql-16.4-51-1-x86_64.eopkg \
      https://cdn.getsol.us/repo/shannon/p/postgresql/postgresql-libpq-16.4-51-1-x86_64.eopkg
      +
      1. (Re)start PostgreSQL:
      -
      sudo systemctl restart postgresql
      -
        +
        sudo systemctl restart postgresql
        +
        1. Create a backup of all current data:
        -
        sudo -u postgres pg_dumpall -f /tmp/backup.sql
        +
        sudo -u postgres pg_dumpall -f /tmp/backup.sql

        The location of the backup may be one of your choosing, but keep in mind that the postgres user needs to have write permissions on the given location.

        -
          +
          1. Stop PostgreSQL:
          -
          sudo systemctl stop postgresql
          -
            +
            sudo systemctl stop postgresql
            +
            1. Rename the old data directory. This directory contains the old configuration and the original database, but requires significant disk space.
            -
            sudo mv /var/db/pgsql/data /var/db/pgsql/data.old
            -
              +
              sudo mv /var/db/pgsql/data /var/db/pgsql/data.old
              +
              1. Create a new data directory:
              -
              sudo mkdir /var/db/pgsql/data
              sudo chown postgres: /var/db/pgsql/data
              -
                +
                sudo mkdir /var/db/pgsql/data
                sudo chown postgres: /var/db/pgsql/data
                +
                1. Upgrade PostgreSQL:
                -
                sudo eopkg upgrade
                -
                  +
                  sudo eopkg upgrade
                  +
                  1. Start PostgreSQL:
                  -
                  sudo systemctl start postgresql
                  -
                    +
                    sudo systemctl start postgresql
                    +
                    1. Restore the data:
                    -
                    sudo -u postgres psql < /tmp/backup.sql
                    -
                      +
                      sudo -u postgres psql < /tmp/backup.sql
                      +
                      1. (optional) Update the configuration files in /var/db/pgsql/data based on the configuration in /var/db/pgsql/data.old. Restart PostgreSQL afterwards.

                      2. @@ -69,6 +58,4 @@

                        Updating to 1

                        Remove the backup and data dump:

                      -
                      sudo rm -r /var/db/pgsql/data.old /tmp/backup.sql
    - - \ No newline at end of file +
    sudo rm -r /var/db/pgsql/data.old /tmp/backup.sql
    \ No newline at end of file diff --git a/docs/user/software/development/r-and-rstudio/index.html b/docs/user/software/development/r-and-rstudio/index.html index fd63c8ab4..d2b4a0cb4 100644 --- a/docs/user/software/development/r-and-rstudio/index.html +++ b/docs/user/software/development/r-and-rstudio/index.html @@ -1,32 +1,21 @@ - - - - - -R and RStudio | Solus Help Center - - - - - -

    R and RStudio

    +R and RStudio | Solus Help Center

    R and RStudio

    Covers the basics of how to install R and RStudio on Solus and how to install required dependencies for installing additional CRAN libraries.

    -

    Downloading R

    +

    Downloading R

    It is recommended to download R before downloading RStudio. This can be accomplished easily in any of three ways. -NOTE: Both R and RStudio are available natively on Solus thanks to their amazing maintainers, it is not necessary to go to either software's respective website.

    +NOTE: Both R and RStudio are available natively on Solus thanks to their amazing maintainers, it is not necessary to go to either software's respective website.

      -
    • The easiest way to do this is to search for "R" within the Software Center
    • -
    • Alternatively you can enter the Software Center, select Programming Languages & Tools, then select Programming and scroll down until you see r. The list itself is in alphabetical order so it will be near the bottom.
    • +
    • The easiest way to do this is to search for "R" within the Software Center
    • +
    • Alternatively you can enter the Software Center, select Programming Languages & Tools, then select Programming and scroll down until you see r. The list itself is in alphabetical order so it will be near the bottom.
    • The third option for installation is to open your terminal and enter the command sudo eopkg it r
    -

    Downloading RStudio

    +

    Downloading RStudio

    The first step in setting up RStudio is to download and install it. This can be accomplished in the same ways as R in the prior step.

      -
    • The easiest way to do this is to search for "RStudio" within the Software Center
    • -
    • Alternatively you can enter the Software Center, select Programming Languages & Tools, then select Integrated Development Environments and scroll down until you see RStudio. The list itself is in alphabetical order so it will be near the bottom.
    • +
    • The easiest way to do this is to search for "RStudio" within the Software Center
    • +
    • Alternatively you can enter the Software Center, select Programming Languages & Tools, then select Integrated Development Environments and scroll down until you see RStudio. The list itself is in alphabetical order so it will be near the bottom.
    • The third option for installation is to open your terminal and enter the command sudo eopkg it rstudio
    -

    How to use install.packages() on Solus

    +

    How to use install.packages() on Solus

    Unless you are only going to use base R functions, you will need to make use of install.packages() within R to install additional libraries. To use this function you need to install certain development packages which vary depending on the library you are trying to enable within R.

    On other Linux distros (like Debian, Ubuntu, and Fedora) this is accomplished through the installation of r-devel. However since Solus does not have an r-devel package these dependencies have to be installed through other means.

    There are three main Solus packages that will include many of the dependencies required that allow you to install most CRAN packages. These are system.devel, curl-devel and fontconfig-devel.

    @@ -35,6 +24,4 @@

    - - \ No newline at end of file +

    If you try to install a CRAN library with install.packages() from within R and you are presented with an error that says ...exited with non zero exit status this is most likely because one of the required dependencies, which will be listed within the R console detailing the error, is contained within a Solus devel package you have not yet installed.

    \ No newline at end of file diff --git a/docs/user/software/development/rust/index.html b/docs/user/software/development/rust/index.html index 63e4d5aa2..3a6b8c390 100644 --- a/docs/user/software/development/rust/index.html +++ b/docs/user/software/development/rust/index.html @@ -1,27 +1,14 @@ - - - - - -Rust | Solus Help Center - - - - - -

    Rust

    -

    There are two ways to install Rust. This article explains how they differ and which one should be used, according to users' needs.

    +Rust | Solus Help Center

    Rust

    +

    There are two ways to install Rust. This article explains how they differ and which one should be used, according to users' needs.

    Rust can be obtained by:

    • Installing the rustup package, then installing any Rust target and/or tool using rustup itself
    • Installing the rust package
    -

    Users should prefer the rustup way, since it gives the freedom to install any tools and targets, including nightly versions and debugging utilities, although it may require editing the PATH variable depending on your shell setup. According to the official Rust installation guide:

    +

    Users should prefer the rustup way, since it gives the freedom to install any tools and targets, including nightly versions and debugging utilities, although it may require editing the PATH variable depending on your shell setup. According to the official Rust installation guide:

    It is customary for Rust developers to include ~/.cargo/bin in their PATH environment variable. During installation rustup will attempt to configure the PATH. Because of differences between platforms, command shells, and bugs in rustup, the modifications to PATH may not take effect until the console is restarted, or the user is logged out, or it may not succeed at all.

    The rust package, in fact, is present in the Solus repository for building packages that depend on it and it is not intended to be used by the final user, although it is possible and supported. Users that want to use the rust package for their projects will be limited to the targets and tools that Solus needs to support, namely x86_64 and i686 Linux targets and cargo. On the other hand, the rust package is ready to use after its installation with no extra configurations.

    -

    Either way, it is also recommended to install our system.devel component, which is typically required for compiling. See our documentation for it here.

    -

    As a final note, it is possible to configure rustup to use the system toolchain. This setup is discouraged unless aimed at developing applications targeting Solus itself.

    - - \ No newline at end of file +

    Either way, it is also recommended to install our system.devel component, which is typically required for compiling. See our documentation for it here.

    +

    As a final note, it is possible to configure rustup to use the system toolchain. This setup is discouraged unless aimed at developing applications targeting Solus itself.

    \ No newline at end of file diff --git a/docs/user/software/development/web/index.html b/docs/user/software/development/web/index.html index df8bbf602..a5336e1a0 100644 --- a/docs/user/software/development/web/index.html +++ b/docs/user/software/development/web/index.html @@ -1,74 +1,61 @@ - - - - - -Web Development | Solus Help Center - - - - - -

    Web Development

    +Web Development | Solus Help Center

    Web Development

    Servers

    Solus provides multiple web servers for local testing of web applications.

    -
    Important

    Solus is not a server operating system. Usage of server packages outside local testing is not recommended.

    -

    Caddy

    +
    Important

    Solus is not a server operating system. Usage of server packages outside local testing is not recommended.

    +

    Caddy

    Caddy is installed with a default configuration that you can customize as needed.

    -

    Installation

    +

    Installation

    To install caddy, use the Software Center or execute the following command:

    -
    sudo eopkg install caddy
    -

    Configuration

    +
    sudo eopkg install caddy
    +

    Configuration

    You can configure Caddy using a Caddyfile, a text file that contains configuration directives. The default Caddyfile is located at /usr/share/caddy/Caddyfile.

    To reload Caddy with a new configuration file, use the following command:

    -
    caddy reload --config /path/to/new/caddyfile
    -

    For more information, see the Caddy documentation at https://caddyserver.com/docs/.

    -

    Management

    +
    caddy reload --config /path/to/new/caddyfile
    +

    For more information, see the Caddy documentation at https://caddyserver.com/docs/.

    +

    Management

    You can use the following commands to manage Caddy:

    • Enable Caddy on startup and start immediately after enabling: sudo systemctl enable --now caddy
    • Stop Caddy: sudo systemctl stop caddy
    -

    httpd (Apache)

    +

    httpd (Apache)

    httpd (Apache) is installed with a default configuration that you can customize as needed.

    -

    Installation

    +

    Installation

    To install httpd, use the Software Center or execute the following command:

    -
    sudo eopkg install httpd
    -

    Usage

    -

    Configuration and DocumentRoot

    +
    sudo eopkg install httpd
    +

    Usage

    +

    Configuration and DocumentRoot

    The default configuration files for Apache are located in the /usr/share/defaults/httpd/ directory. To override the default configuration, create a new file with the .conf extension in the /etc/httpd/conf.d directory.

    -
    Important

    If you modify the configuration files located in the /usr/share/defaults/httpd/ folder, your changes might be overwritten during a system update.

    +
    Important

    If you modify the configuration files located in the /usr/share/defaults/httpd/ folder, your changes might be overwritten during a system update.

    The document root is the directory where Apache serves files from. By default, the document root is /var/www/.

    -

    Enabling PHP support

    +

    Enabling PHP support

    1. Install php from the Software Center or execute the following command: sudo eopkg install php.
    2. Create a new /etc/httpd/conf.d/php.conf file with the following contents:
    -
    LoadModule proxy_module lib64/httpd/mod_proxy.so
    LoadModule proxy_fcgi_module lib64/httpd/mod_proxy_fcgi.so
    <FilesMatch \.php$>
    SetHandler "proxy:fcgi://127.0.0.1:9000"
    </FilesMatch>
    <IfModule dir_module>
    DirectoryIndex index.php index.html
    </IfModule>
    -
      -
    1. Execute the following command: sudo systemctl restart httpd && sudo systemctl restart php-fpm
    2. +
      LoadModule proxy_module lib64/httpd/mod_proxy.so
      LoadModule proxy_fcgi_module lib64/httpd/mod_proxy_fcgi.so
      <FilesMatch \.php$>
      SetHandler "proxy:fcgi://127.0.0.1:9000"
      </FilesMatch>
      <IfModule dir_module>
      DirectoryIndex index.php index.html
      </IfModule>
      +
        +
      1. Execute the following command: sudo systemctl restart httpd && sudo systemctl restart php-fpm
      -

      Management

      +

      Management

      You can use the following commands to manage httpd:

      • Enable httpd on startup: sudo systemctl enable httpd.
      • Start the web server: sudo systemctl start httpd
      • Stop the web server: sudo systemctl stop httpd
      -

      nginx

      +

      nginx

      nginx is installed with a default configuration that you can customize as needed.

      -

      Installation

      +

      Installation

      To install nginx, use the Software Center or execute the following command:

      -
      sudo eopkg install nginx
      -

      Usage

      -

      Configuration

      -

      Nginx's configuration files are located in the /usr/share/defaults/nginx/ directory. To override the default configuration, you can create configuration files in the /etc/nginx/conf.d/ or the /etc/nginx/sites-enabled folders.

      -
      tip

      To revert back to the original settings, delete the /etc/nginx/ folder.

      -

      Management

      +
      sudo eopkg install nginx
      +

      Usage

      +

      Configuration

      +

      Nginx's configuration files are located in the /usr/share/defaults/nginx/ directory. To override the default configuration, you can create configuration files in the /etc/nginx/conf.d/ or the /etc/nginx/sites-enabled folders.

      +
      tip

      To revert back to the original settings, delete the /etc/nginx/ folder.

      +

      Management

      You can use the following commands to manage nginx:

      • Enable nginx on startup and start immediately after enabling: sudo systemctl enable --now nginx
      • Stop nginx: sudo systemctl stop nginx
      • -
    - - \ No newline at end of file +
    \ No newline at end of file diff --git a/docs/user/software/gaming/index.html b/docs/user/software/gaming/index.html index 311c3a9fb..32c0f7a0f 100644 --- a/docs/user/software/gaming/index.html +++ b/docs/user/software/gaming/index.html @@ -1,54 +1,41 @@ - - - - - -Gaming | Solus Help Center - - - - - -

    Gaming

    -

    Heroes of Newerth

    -

    First, install the latest version of HoN by downloading it and running "HoNClient.sh".

    +Gaming | Solus Help Center

    Gaming

    +

    Heroes of Newerth

    +

    First, install the latest version of HoN by downloading it and running "HoNClient.sh".

    Assuming that you install to ~/HoN (default), you only need to run two commands:

    -
    sudo eopkg it gconf libgcrypt11 libglu
    +
    sudo eopkg it gconf libgcrypt11 libglu

    That installs all of the dependencies that HoN needs.

    -
    rm ~/HoN/libs-x86_64/{libcurl.so.4,libfreetype.so.6,libgcc_s.so.1,libgcrypt.so.11,libspeexdsp.so.1,libspeex.so.1,libstdc++.so.6,libudev.so.0}
    +
    rm ~/HoN/libs-x86_64/{libcurl.so.4,libfreetype.so.6,libgcc_s.so.1,libgcrypt.so.11,libspeexdsp.so.1,libspeex.so.1,libstdc++.so.6,libudev.so.0}

    This removes all the libraries that conflict with the ones in Solus.

    -

    Lutris

    +

    Lutris

    Lutris is currently available via the Solus repository, as the lutris package.

    -

    About

    +

    About

    Lutris is an open gaming platform for Linux. It helps you install and manage your games in a unified interface. Their goal is to support every game which runs on Linux, from native to Windows games (via Wine) to emulators and browser games. The desktop application and the website are libre software, contributions are welcome!

    -

    For more information you can visit their website at lutris.net. You can also see their list of games here.

    -

    Minecraft

    -

    Minecraft is a sandbox independent video game originally created by Swedish programmer Markus "Notch" Persson and later developed and published by the Swedish company Mojang.

    -

    Minecraft Screenshot

    -

    Installation

    +

    For more information you can visit their website at lutris.net. You can also see their list of games here.

    +

    Minecraft

    +

    Minecraft is a sandbox independent video game originally created by Swedish programmer Markus "Notch" Persson and later developed and published by the Swedish company Mojang.

    +

    Minecraft Screenshot

    +

    Installation

    Install dependencies and download Minecraft:

    -
    sudo eopkg it gconf binutils
    wget https://launcher.mojang.com/download/Minecraft.deb
    +
    sudo eopkg it gconf binutils
    wget https://launcher.mojang.com/download/Minecraft.deb

    Extract files and remove old archive:

    -
    sudo ar xf Minecraft.deb
    sudo tar xf data.tar.xz -C /
    sudo rm control.tar.xz data.tar.xz debian-binary Minecraft.deb
    +
    sudo ar xf Minecraft.deb
    sudo tar xf data.tar.xz -C /
    sudo rm control.tar.xz data.tar.xz debian-binary Minecraft.deb

    Integrate the installed files into your system:

    -
    sudo usysconf run -f
    -

    Prism Launcher

    -

    Prism Launcher is an Open Source Minecraft launcher with the ability to manage multiple instances, accounts and mods. Focused on user freedom and free redistributability.

    +
    sudo usysconf run -f
    +

    Prism Launcher

    +

    Prism Launcher is an Open Source Minecraft launcher with the ability to manage multiple instances, accounts and mods. Focused on user freedom and free redistributability.

    Prism Launcher is currently available via the Solus repository, as the prism-launcher package.

    -
    note

    The official Minecraft launcher is not required to use Prism Launcher

    -

    RetroArch

    +
    note

    The official Minecraft launcher is not required to use Prism Launcher

    +

    RetroArch

    RetroArch is a frontend for emulators, game engines and media players. It has all you need to run classic games through its polished graphical interface.

    -

    RetroArch Screenshot

    -

    Installing the assets

    -

    The assets are not packaged with RetroArch itself and have to be downloaded from inside the program. This can easily be done by going into the Online Updater from the Main Menu and selecting "Update Assets".

    -

    Steam

    +

    RetroArch Screenshot

    +

    Installing the assets

    +

    The assets are not packaged with RetroArch itself and have to be downloaded from inside the program. This can easily be done by going into the Online Updater from the Main Menu and selecting "Update Assets".

    +

    Steam

    Steam is currently available via the Solus repository, as the steam package.

    -

    NVIDIA

    +

    NVIDIA

    For systems running NVIDIA graphics hardware, you will need to install the corresponding 32bit video driver for your card, listed below:

    • Current Gen: nvidia-glx-driver-32bit
    • 470 series: nvidia-470-glx-driver-32bit
    -
    info

    You can use our "Hardware Drivers" utility to find the right driver for your system.

    - - \ No newline at end of file +
    info

    You can use our "Hardware Drivers" utility to find the right driver for your system.

    \ No newline at end of file diff --git a/docs/user/software/localization/ibus/index.html b/docs/user/software/localization/ibus/index.html index 03ac2d087..34876dcfa 100644 --- a/docs/user/software/localization/ibus/index.html +++ b/docs/user/software/localization/ibus/index.html @@ -1,26 +1,13 @@ - - - - - -IBus | Solus Help Center - - - - - -

    IBus

    -

    Configuration

    -

    Find the IME (Input Method Editor) you require from the IBus IME package list and then search for it in the Software Center. Click "Install" to add the IME.

    -

    IBus IME Install

    +IBus | Solus Help Center

    IBus

    +

    Configuration

    +

    Find the IME (Input Method Editor) you require from the IBus IME package list and then search for it in the Software Center. Click "Install" to add the IME.

    +

    IBus IME Install

    You may have to agree to install some additional dependencies and will need to type in your user password as authentication is required.

    -

    IBus IME Dependencies

    -

    Once it has finished installing, logout of your computer and then login again. Now you'll be able to select the newly installed IME by following the same steps as detailed above for changing keyboard layouts in Budgie. For instance, in this example we have installed the ibus-hangul package for the Korean language. By following the steps above and then searching for Korean keyboard layouts, we are now able to select Korean (Hangul) as an input source.

    -

    IBus Region and Language

    -

    Additionally, once you have added the IME and have it selected in the Region & Languages window, you can click on the cog icon under the input sources to load the settings window for your specific IME. The ibus-hangul settings window is shown below but this will vary between the different IME's.

    -

    IBus IME Settings Example: Hangul

    -

    IBus IME package list

    +

    IBus IME Dependencies

    +

    Once it has finished installing, logout of your computer and then login again. Now you'll be able to select the newly installed IME by following the same steps as detailed above for changing keyboard layouts in Budgie. For instance, in this example we have installed the ibus-hangul package for the Korean language. By following the steps above and then searching for Korean keyboard layouts, we are now able to select Korean (Hangul) as an input source.

    +

    IBus Region and Language

    +

    Additionally, once you have added the IME and have it selected in the Region & Languages window, you can click on the cog icon under the input sources to load the settings window for your specific IME. The ibus-hangul settings window is shown below but this will vary between the different IME's.

    +

    IBus IME Settings Example: Hangul

    +

    IBus IME package list

    A list of IBus IME packages available in the Solus software repository.

    -
    PackageInput Method
    ibus-anthyJapanese
    ibus-chewingPhonetic Chinese input method for Zhuyin (Bopomofo)
    ibus-hangulKorean
    ibus-m17nMultiple Languages
    ibus-unikeyVietnamese
    ibus-libpinyinChinese Pinyin and Bopomofo
    ibus-libzhuyinChinese Zhuyin
    ibus-cangjieSimplified Cangjie
    - - \ No newline at end of file +
    PackageInput Method
    ibus-anthyJapanese
    ibus-chewingPhonetic Chinese input method for Zhuyin (Bopomofo)
    ibus-hangulKorean
    ibus-m17nMultiple Languages
    ibus-unikeyVietnamese
    ibus-libpinyinChinese Pinyin and Bopomofo
    ibus-libzhuyinChinese Zhuyin
    ibus-cangjieSimplified Cangjie
    \ No newline at end of file diff --git a/docs/user/software/networking/samba/index.html b/docs/user/software/networking/samba/index.html index d607a68ac..7774fc4ca 100644 --- a/docs/user/software/networking/samba/index.html +++ b/docs/user/software/networking/samba/index.html @@ -1,89 +1,76 @@ - - - - - -Samba File Sharing | Solus Help Center - - - - - -

    Samba file sharing

    +Samba File Sharing | Solus Help Center

    Samba file sharing

    Samba is the standard Windows interoperability suite of programs for Linux and Unix. Among other things, it allows Linux, macOS and Windows users to share files via the Server Message Block (SMB) protocol.

    -

    Samba on Solus

    +

    Samba on Solus

    To enable convenient file-sharing on Solus, we maintain a Solus-specific Samba configuration that out-of-the-box:

    • Supports Samba usershare functionality
    • Enables sharing of $HOME folders (manual user account activation needed)
    • -
    • Is set up as a standalone server using the SMB2.0.2 protocol and up (>= Windows Vista/Server 2008)
    • +
    • Is set up as a standalone server using the SMB2.0.2 protocol and up (>= Windows Vista/Server 2008)
    • Advertises itself via Avahi aka Apple Bonjour / mDNS / zeroconf for macOS compatibility
    • Advertises itself via wsdd aka Web Services Discovery Daemon for Windows 7+ compatibility
    • Disables sharing of printers via Samba (use IPP via CUPS instead)
    • Allows access only from IPv4 and IPv6 private and link-local (non-internet-routable) addresses

    As of Samba 4.7.x, Solus disables the old, deprecated and insecure original SMB1/CIFS protocol by default.

    -

    For more information on this choice, please read this post regarding SMB1.

    +

    For more information on this choice, please read this post regarding SMB1.

    As of Samba 4.11.x, the SMB1/CIFS protocol is officially deprecated upstream.

    -

    How to start/stop Samba

    +

    How to start/stop Samba

    Please note that Samba does NOT run on system boot by default. It needs to be manually started/configured to start automatically:

    -
    # Start Samba manually
    sudo systemctl start smb

    # Configure Samba to start automatically on each boot and immediately start the service
    sudo systemctl enable --now smb

    # Check whether Samba is running
    sudo systemctl status smb

    # Restart Samba manually
    sudo systemctl restart smb

    # Stop Samba manually
    sudo systemctl stop smb

    # Configure Samba to not start automatically on each boot and immediately stop the service
    sudo systemctl disable --now smb
    -

    Enabling Windows 7+ network discovery support

    +
    # Start Samba manually
    sudo systemctl start smb

    # Configure Samba to start automatically on each boot and immediately start the service
    sudo systemctl enable --now smb

    # Check whether Samba is running
    sudo systemctl status smb

    # Restart Samba manually
    sudo systemctl restart smb

    # Stop Samba manually
    sudo systemctl stop smb

    # Configure Samba to not start automatically on each boot and immediately stop the service
    sudo systemctl disable --now smb
    +

    Enabling Windows 7+ network discovery support

    The Web Services Discovery protocol is used by Windows 7+ clients to discover shares on other computers. Solus now includes the wsdd service which provides support for the Web Services Discovery protocol.

    When restarting wsdd, it may be necessary to also restart Samba.

    -
    # Start wsdd manually (depends on the smb service)
    sudo systemctl start wsdd

    # Configure wsdd to start automatically on each boot and immediately start the service
    sudo systemctl enable --now wsdd

    # Check whether wsdd is running
    sudo systemctl status wsdd

    # Restart wsdd and Samba
    sudo systemctl restart wsdd smb

    # Stop wsdd manually
    sudo systemctl stop wsdd

    # Configure wsdd to not start automatically on each boot and immediately stop the service
    sudo systemctl disable --now wsdd
    +
    # Start wsdd manually (depends on the smb service)
    sudo systemctl start wsdd

    # Configure wsdd to start automatically on each boot and immediately start the service
    sudo systemctl enable --now wsdd

    # Check whether wsdd is running
    sudo systemctl status wsdd

    # Restart wsdd and Samba
    sudo systemctl restart wsdd smb

    # Stop wsdd manually
    sudo systemctl stop wsdd

    # Configure wsdd to not start automatically on each boot and immediately stop the service
    sudo systemctl disable --now wsdd

    For more details on managing services on Solus with systemctl, see man systemctl which is part of the systemd system and service manager.

    -

    Accessing Samba via IPv6

    +

    Accessing Samba via IPv6

    In order to access a running Solus Samba server instance via IPv6, first verify that all relevant hosts (including the Samba host) are configured with an IPv6 link-local address.

    This can be verified in a terminal:

    -
    $ ip addr

    2: enp2s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 14:da:e9:10:f9:c7 brd ff:ff:ff:ff:ff:ff
    inet 192.168.147.233/24 brd 192.168.147.255 scope global dynamic noprefixroute enp2s0
    valid_lft 5066sec preferred_lft 5066sec
    inet6 fe80::d555:a50f:1aea:c944/64 scope link noprefixroute
    valid_lft forever preferred_lft forever
    +
    $ ip addr

    2: enp2s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 14:da:e9:10:f9:c7 brd ff:ff:ff:ff:ff:ff
    inet 192.168.147.233/24 brd 192.168.147.255 scope global dynamic noprefixroute enp2s0
    valid_lft 5066sec preferred_lft 5066sec
    inet6 fe80::d555:a50f:1aea:c944/64 scope link noprefixroute
    valid_lft forever preferred_lft forever

    In the above example, the name of the relevant network device is enp2s0. Note how the line starting with inet6 contains an IPv6 address which begins with fe80:: and contains scope link.

    Ensure that Samba has been started on the host and then query the running local Samba instance with the following command, using the IPv6 address and interface as show by the output of ip addr:

    -
    $ smbclient -N -L //fe80::d555:a50f:1aea:c944%enp2s0
    +
    $ smbclient -N -L //fe80::d555:a50f:1aea:c944%enp2s0

    The output might look something like this:

    -
    Unable to initialize messaging context
    Anonymous login successful

    Sharename Type Comment
    --------- ---- -------
    eopkgs Disk
    IPC$ IPC IPC Service (Samba server (version: 4.10.11, protocol: SMB3_11))
    Public Disk
    fe80::d555:a50f:1aea:c944%enp2s0 is an IPv6 address -- no workgroup available
    +
    Unable to initialize messaging context
    Anonymous login successful

    Sharename Type Comment
    --------- ---- -------
    eopkgs Disk
    IPC$ IPC IPC Service (Samba server (version: 4.10.11, protocol: SMB3_11))
    Public Disk
    fe80::d555:a50f:1aea:c944%enp2s0 is an IPv6 address -- no workgroup available

    Make sure to change the IPv6 address and interface name (fe80::d555:a50f:1aea:c944 and enp2s0 respectively in the above example) to the real address and interface name of the Samba host in question.

    -

    A brief introduction to the Samba usershare functionality

    +

    A brief introduction to the Samba usershare functionality

    In order to support user-managed (as opposed to system-managed) shares, Samba provides the so-called usershare functionality, where users can define network shares without touching the traditional Samba configuration file.

    -

    GUI - configuring shares via file manager plugins

    +

    GUI - configuring shares via file manager plugins

    The default Solus configuration was written with the nemo-share (Budgie and XFCE), nautilus-share (GNOME), and kdenetwork-filesharing (Plasma) file manager plugins in mind. These plugins allow the user to share folders in an easy and convenient way.

    All you need to do is to install either the caja-extensions package (which includes the caja-share plugin), the kdenetwork-filesharing package, the nautilus-share package or the nemo-share package from the Software Center and enable the relevant Samba services.

    -
    # Budgie
    sudo eopkg install nemo-share

    #GNOME
    sudo eopkg install nautilus-share

    # Plasma
    sudo eopkg install kdenetwork-filesharing

    # XFCE
    sudo eopkg install nemo-share
    +
    # Budgie
    sudo eopkg install nemo-share

    #GNOME
    sudo eopkg install nautilus-share

    # Plasma
    sudo eopkg install kdenetwork-filesharing

    # XFCE
    sudo eopkg install nemo-share

    In order to load the newly installed file manager plugin, you will need to log out of the current desktop session and log back in to a new desktop session, at which point the plugin in question will be ready for use.

    Afterwards, simply right-clicking a folder and clicking properties will now show an option to share it, as well as whether to allow Read/Write permissions to your users or guest access.

    -

    CLI - using the net usershare command

    +

    CLI - using the net usershare command

    Excerpt from the man smb.conf manual page:

    -
    net usershare add sharename path [comment] [acl] [guest_ok=[y|n]]
    To create or modify (overwrite) a user defined share.

    net usershare delete sharename
    To delete a user defined share.

    net usershare list wildcard-sharename
    To list user defined shares.

    net usershare info wildcard-sharename
    To print information about user defined shares.
    -

    Managing Samba authentication for named users

    +
    net usershare add sharename path [comment] [acl] [guest_ok=[y|n]]
    To create or modify (overwrite) a user defined share.

    net usershare delete sharename
    To delete a user defined share.

    net usershare list wildcard-sharename
    To list user defined shares.

    net usershare info wildcard-sharename
    To print information about user defined shares.
    +

    Managing Samba authentication for named users

    Should the user some_user wish to access e.g. the $HOME directory via Samba, it is necessary to enable the some_user Samba account.

    Note that the some_user Samba account is separate from the some_user Linux user account, but they share the same $HOME directory.

    -
    # Add the some_user account to the Samba login db
    sudo smbpasswd -a some_user

    # Enable the some_user account in the Samba login db
    sudo smbpasswd -e some_user

    # Try to log in to a running Samba instance as some_user and list shares
    smbclient -U some_user -L localhost

    # Disable the some_user account in the Samba login db
    sudo smbpasswd -d some_user

    # Remove the some_user account from the Samba login db
    sudo smbpasswd -x some_user
    +
    # Add the some_user account to the Samba login db
    sudo smbpasswd -a some_user

    # Enable the some_user account in the Samba login db
    sudo smbpasswd -e some_user

    # Try to log in to a running Samba instance as some_user and list shares
    smbclient -U some_user -L localhost

    # Disable the some_user account in the Samba login db
    sudo smbpasswd -d some_user

    # Remove the some_user account from the Samba login db
    sudo smbpasswd -x some_user

    See man smbpasswd for more details.

    -

    Debugging Samba authentication issues

    +

    Debugging Samba authentication issues

    To help debug authentication issues, the Solus Samba configuration is by default set up with relatively verbose logging when it comes to authentication and protocol negotiation.

    The Samba log files live in the /var/log/samba/ directory.

    -

    Adding custom configuration parameters via /etc/samba/smb.conf

    +

    Adding custom configuration parameters via /etc/samba/smb.conf

    CAUTION: From this point on, it is assumed that the user is familiar with the Samba documentation, including man smb.conf, and that the user has a basic understanding of Linux filesystem permissions.

    The default Solus-managed configuration (which lives in /usr/share/defaults/samba/smb.conf and will be overwritten on each Samba package update) is written such that it will attempt to include any configuration parameters present in /etc/samba/smb.conf.

    Hence, any persistent user-managed parameters should be added to /etc/samba/smb.conf which will never be overwritten by the system package manager.

    In addition, the Solus-controlled Samba configuration is written such that it is possible to override its default parameters simply by assigning a new value to the parameter in question in /etc/samba/smb.conf. From a technical perspective, any parameters added without a [shared resource] header will considered part of the [global] configuration section.

    This way, simply deleting or renaming /etc/samba/smb.conf and restarting Samba with sudo systemctl restart smb will reset the configuration to the known working default Solus configuration.

    -

    Example -- anonymous, read-write share outside of $HOME

    -
    # Contents of /etc/samba/smb.conf:
    #
    # If /etc/samba/smb.conf exists, it is automatically loaded by the Solus-
    # controlled default config residing in /usr/share/defaults/samba/smb.conf
    #
    # The following configuration creates a "//servername/someshare" share where
    # anonymous users have read and write access.
    #
    # ';' also denotes a comment (typically used for configuration parameters)
    #
    [someshare]
    path = /mnt/someshare
    # allow anonymous access
    guest ok = Yes
    # ONLY allow anonymous access (don't allow both guest and system user access)
    ;guest only = Yes
    # allow write access
    read only = No
    # This is an example of how to limit access to the share to known IPs
    ;hosts deny = ALL
    ;hosts allow = 127.0.0.1 192.168.1.0/24
    # share config end
    +

    Example -- anonymous, read-write share outside of $HOME

    +
    # Contents of /etc/samba/smb.conf:
    #
    # If /etc/samba/smb.conf exists, it is automatically loaded by the Solus-
    # controlled default config residing in /usr/share/defaults/samba/smb.conf
    #
    # The following configuration creates a "//servername/someshare" share where
    # anonymous users have read and write access.
    #
    # ';' also denotes a comment (typically used for configuration parameters)
    #
    [someshare]
    path = /mnt/someshare
    # allow anonymous access
    guest ok = Yes
    # ONLY allow anonymous access (don't allow both guest and system user access)
    ;guest only = Yes
    # allow write access
    read only = No
    # This is an example of how to limit access to the share to known IPs
    ;hosts deny = ALL
    ;hosts allow = 127.0.0.1 192.168.1.0/24
    # share config end

    In the above example, it is assumed that the user has chosen a suitable method for making /mnt/someshare writeable by guest users.

    After adding a [someshare] section like in the above example, run sudo testparm to check that the newly included share does not contain syntax errors. Check out man testparm for more information about the testparm utility.

    -

    If testparm didn't spot any problems, restart Samba with sudo systemctl restart smb, which will activate the new configuration.

    - +

    If testparm didn't spot any problems, restart Samba with sudo systemctl restart smb, which will activate the new configuration.

    +

    Apart from the aforementioned man smb.conf, wiki.samba.org is your friend, specifically:

    The default Solus Samba configuration is patterned on the above.

    - +

    Full manual control of Samba can be achieved by completely bypassing the default Solus Samba configuration.

    -

    In the smbd manual page (man 8 smbd), it is shown how the compiled-in default config file can be overridden by specifying the --configfile=<somepath> flag during startup.

    +

    In the smbd manual page (man 8 smbd), it is shown how the compiled-in default config file can be overridden by specifying the --configfile=<somepath> flag during startup.

    To use the traditional /etc/samba/smb.conf configuration file exclusively (thus bypassing the Solus configuration), edit the /etc/sysconfig/samba file to look like so:

    -
    ## Path:           Network/Samba
    ## Description: Samba process options
    ## Type: string
    ## Default: ""
    ## ServiceRestart: samba
    SAMBAOPTIONS=""
    ## Type: string
    ## Default: ""
    ## ServiceRestart: smb
    SMBDOPTIONS="--configfile=/etc/samba/smb.conf"
    ## Type: string
    ## Default: ""
    ## ServiceRestart: nmb
    NMBDOPTIONS="--configfile=/etc/samba/smb.conf"
    ## Type: string
    ## Default: ""
    ## ServiceRestart: winbind
    WINBINDOPTIONS=""
    - - \ No newline at end of file +
    ## Path:           Network/Samba
    ## Description: Samba process options
    ## Type: string
    ## Default: ""
    ## ServiceRestart: samba
    SAMBAOPTIONS=""
    ## Type: string
    ## Default: ""
    ## ServiceRestart: smb
    SMBDOPTIONS="--configfile=/etc/samba/smb.conf"
    ## Type: string
    ## Default: ""
    ## ServiceRestart: nmb
    NMBDOPTIONS="--configfile=/etc/samba/smb.conf"
    ## Type: string
    ## Default: ""
    ## ServiceRestart: winbind
    WINBINDOPTIONS=""
    \ No newline at end of file diff --git a/docs/user/software/networking/tigervnc/index.html b/docs/user/software/networking/tigervnc/index.html index 641c32cad..1a803186f 100644 --- a/docs/user/software/networking/tigervnc/index.html +++ b/docs/user/software/networking/tigervnc/index.html @@ -1,35 +1,22 @@ - - - - - -TigerVNC | Solus Help Center - - - - - -

    TigerVNC

    +TigerVNC | Solus Help Center

    TigerVNC

    TigerVNC is a high-performance implementation of the VNC protocol, which allows you to control/view desktops remotely over the internet.

    -

    Installation

    +

    Installation

    TigerVNC can be installed either from the Software Center or via terminal. The terminal command to run it is:

    -
    sudo eopkg install tigervnc
    -

    Usage

    -

    Initial setup of vncserver

    +
    sudo eopkg install tigervnc
    +

    Usage

    +

    Initial setup of vncserver

    For the initial setup of vncserver for TigerVNC you have to open a terminal and run:

    -
    vncserver
    -

    While this setup you will be asked for setting up a password and if you'd like to setup a view-only mode, please do it accordingly your desire.

    +
    vncserver
    +

    While this setup you will be asked for setting up a password and if you'd like to setup a view-only mode, please do it accordingly your desire.

    After the initial setup you have to stop the vncserver process, for this please type inside the terminal

    -
    vncserver -kill :1
    -

    Configuration for your desktops

    +
    vncserver -kill :1
    +

    Configuration for your desktops

    Every Desktop needs a different Setup, you find the vncserver config under$HOME/.vnc/xstartup open the file with your desired editor and change bash script inside the file with the following information for your Desktop.

    -

    Budgie

    -
    #!/bin/bash

    unset SESSION_MANAGER
    unset DBUS_SESSION_BUS_ADDRESS

    gnome-session --session=budgie-desktop &
    budgie-wm &
    budgie-panel &
    -

    GNOME

    -
    #!/bin/bash

    unset SESSION_MANAGER
    unset DBUS_SESSION_BUS_ADDRESS
    export XKL_XMODMAP_DISABLE=1

    gnome-session &
    gnome-panel &
    gnome-settings-daemon &
    metacity &
    nautilus &
    -

    MATE

    -
    #!/bin/bash

    unset SESSION_MANAGER
    unset DBUS_SESSION_BUS_ADDRESS

    mate-session &
    mate-panel &
    -

    Plasma

    -

    Plasma desktop is not supported at the moment. Please use the software x11vnc for vncserver support on Plasma.

    - - \ No newline at end of file +

    Budgie

    +
    #!/bin/bash

    unset SESSION_MANAGER
    unset DBUS_SESSION_BUS_ADDRESS

    gnome-session --session=budgie-desktop &
    budgie-wm &
    budgie-panel &
    +

    GNOME

    +
    #!/bin/bash

    unset SESSION_MANAGER
    unset DBUS_SESSION_BUS_ADDRESS
    export XKL_XMODMAP_DISABLE=1

    gnome-session &
    gnome-panel &
    gnome-settings-daemon &
    metacity &
    nautilus &
    +

    MATE

    +
    #!/bin/bash

    unset SESSION_MANAGER
    unset DBUS_SESSION_BUS_ADDRESS

    mate-session &
    mate-panel &
    +

    Plasma

    +

    Plasma desktop is not supported at the moment. Please use the software x11vnc for vncserver support on Plasma.

    \ No newline at end of file diff --git a/docs/user/software/networking/wireshark/index.html b/docs/user/software/networking/wireshark/index.html index c3219b556..f833f9504 100644 --- a/docs/user/software/networking/wireshark/index.html +++ b/docs/user/software/networking/wireshark/index.html @@ -1,23 +1,10 @@ - - - - - -Wireshark | Solus Help Center - - - - - -

    Wireshark

    -

    Wireshark is a widely-used network protocol analyzer that lets you see what’s happening on a network at a microscopic level.

    -

    Installation

    +Wireshark | Solus Help Center

    Wireshark

    +

    Wireshark is a widely-used network protocol analyzer that lets you see what’s happening on a network at a microscopic level.

    +

    Installation

    Wireshark can be installed either from the Software Center or via terminal:

    -
    sudo eopkg it wireshark
    -

    Use wireshark as a non-root user

    +
    sudo eopkg it wireshark
    +

    Use wireshark as a non-root user

    For security reasons, it is strongly unadvised to run Wireshark as root. To capture packets as non-root user, execute these commands:

    -
    sudo gpasswd -a $USER wireshark
    sudo setcap cap_dac_override,cap_net_admin,cap_net_raw+eip /usr/bin/dumpcap
    -

    Usage

    -

    Wireshark User’s Guide and learning material are available on https://www.wireshark.org.

    - - \ No newline at end of file +
    sudo gpasswd -a $USER wireshark
    sudo setcap cap_dac_override,cap_net_admin,cap_net_raw+eip /usr/bin/dumpcap
    +

    Usage

    +

    Wireshark User’s Guide and learning material are available on https://www.wireshark.org.

    \ No newline at end of file diff --git a/docs/user/software/networking/xrdp/index.html b/docs/user/software/networking/xrdp/index.html index 1ee7a2370..c8538decf 100644 --- a/docs/user/software/networking/xrdp/index.html +++ b/docs/user/software/networking/xrdp/index.html @@ -1,17 +1,6 @@ - - - - - -XRDP | Solus Help Center - - - - - -

    XRDP

    +XRDP | Solus Help Center

    XRDP

    xrdp provides a graphical login to remote machines using Microsoft Remote Desktop Protocol (RDP). xrdp accepts connections from a variety of RDP clients: FreeRDP, rdesktop, NeutrinoRDP and Microsoft Remote Desktop Client (for Windows, Mac OS, iOS and Android).

    -

    Installation

    +

    Installation

    Solus has an xrdp integration package for each Desktop Environment that will install the correct configuration for that DE. Install the respective package for your DE.

    This package will also install the xrdp and xorgxrdp packages.

    -

    Configuration

    -

    The following file needs to be created, if it doesn't already exist, with the following contents.

    -
    cat /etc/X11/Xwrapper.config

    allowed_users=anybody
    -

    Start / Stop xrdp

    +

    Configuration

    +

    The following file needs to be created, if it doesn't already exist, with the following contents.

    +
    cat /etc/X11/Xwrapper.config

    allowed_users=anybody
    +

    Start / Stop xrdp

    Please note that xrdp does NOT run on system boot by default. It needs to be manually started/configured to start automatically:

    -
    # Start xrdp manually
    sudo systemctl start xrdp

    # Configure xrdp to start automatically on each boot and immediately start the service
    sudo systemctl enable --now xrdp

    # Check whether xrdp is running
    sudo systemctl status xrdp

    # Restart xrdp manually
    sudo systemctl restart xrdp

    # Stop xrdp manually
    sudo systemctl stop xrdp

    # Configure xrdp to not start automatically on each boot and immediately stop the service
    sudo systemctl disable --now xrdp
    - - \ No newline at end of file +
    # Start xrdp manually
    sudo systemctl start xrdp

    # Configure xrdp to start automatically on each boot and immediately start the service
    sudo systemctl enable --now xrdp

    # Check whether xrdp is running
    sudo systemctl status xrdp

    # Restart xrdp manually
    sudo systemctl restart xrdp

    # Stop xrdp manually
    sudo systemctl stop xrdp

    # Configure xrdp to not start automatically on each boot and immediately stop the service
    sudo systemctl disable --now xrdp
    \ No newline at end of file diff --git a/docs/user/software/sound/index.html b/docs/user/software/sound/index.html index 3aaf949a1..2de14a010 100644 --- a/docs/user/software/sound/index.html +++ b/docs/user/software/sound/index.html @@ -1,15 +1,2 @@ - - - - - -Sound | Solus Help Center - - - - - - - - \ No newline at end of file +Sound | Solus Help Center \ No newline at end of file diff --git a/docs/user/software/third-party/index.html b/docs/user/software/third-party/index.html index 534891436..95a4c1596 100644 --- a/docs/user/software/third-party/index.html +++ b/docs/user/software/third-party/index.html @@ -1,95 +1,82 @@ - - - - - -Third Party | Solus Help Center - - - - - -

    Third Party

    +Third Party | Solus Help Center

    Third Party

    The following applications are provided via our 3rd Party Repository to facilitate the installation and usage of them. These applications cannot be included in the primary repository due to licensing issues.

    Alongside the following commands, you may also find some of these applications via the Third Party section on our Software Center.

    -

    If these instructions fail to work please file an issue. To upgrade once installed simply run the commands again. If there is a new version it will be installed.

    -

    Browsers

    -

    Google Chrome

    -
    sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/network/web/browser/google-chrome-stable/pspec.xml
    sudo eopkg it google-chrome-*.eopkg;sudo rm google-chrome-*.eopkg
    -

    Google Chrome (Beta)

    -
    sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/network/web/browser/google-chrome-beta/pspec.xml
    sudo eopkg it google-chrome-*.eopkg;sudo rm google-chrome-*.eopkg
    -

    Google Chrome (Dev/Unstable)

    -
    sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/network/web/browser/google-chrome-unstable/pspec.xml
    sudo eopkg it google-chrome-*.eopkg;sudo rm google-chrome-*.eopkg
    -

    Communication

    -

    Franz

    -
    sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/network/im/franz/pspec.xml
    sudo eopkg it franz*.eopkg;sudo rm franz*.eopkg
    -

    Slack

    -
    sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/network/im/slack-desktop/pspec.xml
    sudo eopkg it slack-desktop*.eopkg;sudo rm slack-desktop*.eopkg
    -

    Viber

    -
    sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/network/im/viber/pspec.xml
    sudo eopkg it viber*.eopkg;sudo rm *.eopkg
    -

    Multimedia

    -

    Bitwig Studio

    -
    sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/multimedia/music/bitwig-studio/pspec.xml
    sudo eopkg it bitwig-studio*.eopkg;sudo rm bitwig-studio*.eopkg
    -

    Ocenaudio

    -
    sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/multimedia/music/ocenaudio/pspec.xml
    sudo eopkg it ocenaudio*.eopkg;sudo rm ocenaudio*.eopkg
    -

    Plex Media Server

    -
    sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/multimedia/video/plexmediaserver/pspec.xml
    sudo eopkg it plexmediaserver-*.eopkg;sudo rm plexmediaserver-*.eopkg
    sudo systemd-tmpfiles --create
    sudo systemctl start plexmediaserver.service
    +

    If these instructions fail to work please file an issue. To upgrade once installed simply run the commands again. If there is a new version it will be installed.

    +

    Browsers

    +

    Google Chrome

    +
    sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/network/web/browser/google-chrome-stable/pspec.xml
    sudo eopkg it google-chrome-*.eopkg;sudo rm google-chrome-*.eopkg
    +

    Google Chrome (Beta)

    +
    sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/network/web/browser/google-chrome-beta/pspec.xml
    sudo eopkg it google-chrome-*.eopkg;sudo rm google-chrome-*.eopkg
    +

    Google Chrome (Dev/Unstable)

    +
    sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/network/web/browser/google-chrome-unstable/pspec.xml
    sudo eopkg it google-chrome-*.eopkg;sudo rm google-chrome-*.eopkg
    +

    Communication

    +

    Franz

    +
    sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/network/im/franz/pspec.xml
    sudo eopkg it franz*.eopkg;sudo rm franz*.eopkg
    +

    Slack

    +
    sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/network/im/slack-desktop/pspec.xml
    sudo eopkg it slack-desktop*.eopkg;sudo rm slack-desktop*.eopkg
    +

    Viber

    +
    sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/network/im/viber/pspec.xml
    sudo eopkg it viber*.eopkg;sudo rm *.eopkg
    +

    Multimedia

    +

    Bitwig Studio

    +
    sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/multimedia/music/bitwig-studio/pspec.xml
    sudo eopkg it bitwig-studio*.eopkg;sudo rm bitwig-studio*.eopkg
    +

    Ocenaudio

    +
    sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/multimedia/music/ocenaudio/pspec.xml
    sudo eopkg it ocenaudio*.eopkg;sudo rm ocenaudio*.eopkg
    +

    Plex Media Server

    +
    sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/multimedia/video/plexmediaserver/pspec.xml
    sudo eopkg it plexmediaserver-*.eopkg;sudo rm plexmediaserver-*.eopkg
    sudo systemd-tmpfiles --create
    sudo systemctl start plexmediaserver.service

    Note: Optionally have it start on boot:

    -
    sudo systemctl enable plexmediaserver.service
    -

    SunVox

    -
    sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/multimedia/music/sunvox/pspec.xml
    sudo eopkg it sunvox*.eopkg;sudo rm sunvox*.eopkg
    -

    Spotify

    -
    sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/multimedia/music/spotify/pspec.xml
    sudo eopkg it spotify*.eopkg;sudo rm spotify*.eopkg
    -

    Network

    -

    AnyDesk

    -
    sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/network/util/anydesk/pspec.xml
    sudo eopkg it anydesk*.eopkg;sudo rm anydesk*.eopkg
    -

    Insync

    -
    sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/network/download/insync/pspec.xml
    sudo eopkg it insync*.eopkg;sudo rm insync*.eopkg
    -

    Spideroak

    -
    sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/network/download/spideroak/pspec.xml
    sudo eopkg it spideroak*.eopkg;sudo rm spideroak*.eopkg
    -

    Synology Cloud Station Drive

    -
    sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/network/download/synology-cloud-station-drive/pspec.xml
    sudo eopkg it synology-cloud-station-drive*.eopkg;sudo rm synology-cloud-station-drive*.eopkg
    -

    TeamViewer

    -
    sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/network/util/teamviewer/pspec.xml
    sudo eopkg it teamviewer*.eopkg;sudo rm teamviewer*.eopkg
    sudo systemctl start teamviewerd.service
    -

    Office

    -

    Mendeley Desktop

    -
    sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/office/mendeleydesktop/pspec.xml
    sudo eopkg it mendeleydesktop*.eopkg;sudo rm mendeleydesktop*.eopkg
    -

    Microsoft Core Fonts

    -
    sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/desktop/font/mscorefonts/pspec.xml
    sudo eopkg it mscorefonts*.eopkg;sudo rm mscorefonts*.eopkg
    -

    Moneydance

    -
    sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/office/moneydance/pspec.xml
    sudo eopkg it moneydance*.eopkg;sudo rm moneydance*.eopkg
    -

    PomoDoneApp

    -
    sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/office/pomodoneapp/pspec.xml
    sudo eopkg it pomodoneapp*.eopkg;sudo rm pomodoneapp*.eopkg
    -

    Scrivener

    -
    sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/office/scrivener/pspec.xml
    sudo eopkg it scrivener*.eopkg;sudo rm scrivener*.eopkg
    -

    Programming

    -

    Android Studio

    -
    sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/programming/android-studio/pspec.xml
    sudo eopkg it android-studio*.eopkg;sudo rm android-studio*.eopkg
    -

    CLion

    -
    sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/programming/clion/pspec.xml
    sudo eopkg it clion*.eopkg;sudo rm clion*.eopkg
    -

    DataGrip

    -
    sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/programming/datagrip/pspec.xml
    sudo eopkg it datagrip*.eopkg;sudo rm datagrip*.eopkg
    -

    GitKraken

    -
    sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/programming/gitkraken/pspec.xml
    sudo eopkg it gitkraken*.eopkg;sudo rm gitkraken*.eopkg
    -

    IDEA

    -
    sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/programming/idea/pspec.xml
    sudo eopkg it idea*.eopkg;sudo rm idea*.eopkg
    -

    PhpStorm

    -
    sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/programming/phpstorm/pspec.xml
    sudo eopkg it phpstorm*.eopkg;sudo rm phpstorm*.eopkg
    -

    PyCharm

    -
    sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/programming/pycharm/pspec.xml
    sudo eopkg it pycharm*.eopkg;sudo rm pycharm*.eopkg
    -

    Rider

    -
    sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/programming/rider/pspec.xml
    sudo eopkg it rider*.eopkg;sudo rm rider*.eopkg
    -

    RubyMine

    -
    sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/programming/rubymine/pspec.xml
    sudo eopkg it rubymine*.eopkg;sudo rm rubymine*.eopkg
    -

    Sublime Text

    -
    sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/programming/sublime-text/pspec.xml
    sudo eopkg it sublime*.eopkg;sudo rm sublime*.eopkg
    -

    WebStorm

    -
    sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/programming/webstorm/pspec.xml
    sudo eopkg it webstorm*.eopkg;sudo rm webstorm*.eopkg
    -

    Security

    -

    Enpass

    -
    sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/security/enpass/pspec.xml
    sudo eopkg it enpass*.eopkg;sudo rm enpass*.eopkg
    -

    Other

    -

    Google Earth

    -
    sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/network/web/google-earth/pspec.xml
    sudo eopkg it google-earth*.eopkg;sudo rm google-earth*.eopkg
    - - \ No newline at end of file +
    sudo systemctl enable plexmediaserver.service
    +

    SunVox

    +
    sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/multimedia/music/sunvox/pspec.xml
    sudo eopkg it sunvox*.eopkg;sudo rm sunvox*.eopkg
    +

    Spotify

    +
    sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/multimedia/music/spotify/pspec.xml
    sudo eopkg it spotify*.eopkg;sudo rm spotify*.eopkg
    +

    Network

    +

    AnyDesk

    +
    sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/network/util/anydesk/pspec.xml
    sudo eopkg it anydesk*.eopkg;sudo rm anydesk*.eopkg
    +

    Insync

    +
    sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/network/download/insync/pspec.xml
    sudo eopkg it insync*.eopkg;sudo rm insync*.eopkg
    +

    Spideroak

    +
    sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/network/download/spideroak/pspec.xml
    sudo eopkg it spideroak*.eopkg;sudo rm spideroak*.eopkg
    +

    Synology Cloud Station Drive

    +
    sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/network/download/synology-cloud-station-drive/pspec.xml
    sudo eopkg it synology-cloud-station-drive*.eopkg;sudo rm synology-cloud-station-drive*.eopkg
    +

    TeamViewer

    +
    sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/network/util/teamviewer/pspec.xml
    sudo eopkg it teamviewer*.eopkg;sudo rm teamviewer*.eopkg
    sudo systemctl start teamviewerd.service
    +

    Office

    +

    Mendeley Desktop

    +
    sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/office/mendeleydesktop/pspec.xml
    sudo eopkg it mendeleydesktop*.eopkg;sudo rm mendeleydesktop*.eopkg
    +

    Microsoft Core Fonts

    +
    sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/desktop/font/mscorefonts/pspec.xml
    sudo eopkg it mscorefonts*.eopkg;sudo rm mscorefonts*.eopkg
    +

    Moneydance

    +
    sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/office/moneydance/pspec.xml
    sudo eopkg it moneydance*.eopkg;sudo rm moneydance*.eopkg
    +

    PomoDoneApp

    +
    sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/office/pomodoneapp/pspec.xml
    sudo eopkg it pomodoneapp*.eopkg;sudo rm pomodoneapp*.eopkg
    +

    Scrivener

    +
    sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/office/scrivener/pspec.xml
    sudo eopkg it scrivener*.eopkg;sudo rm scrivener*.eopkg
    +

    Programming

    +

    Android Studio

    +
    sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/programming/android-studio/pspec.xml
    sudo eopkg it android-studio*.eopkg;sudo rm android-studio*.eopkg
    +

    CLion

    +
    sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/programming/clion/pspec.xml
    sudo eopkg it clion*.eopkg;sudo rm clion*.eopkg
    +

    DataGrip

    +
    sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/programming/datagrip/pspec.xml
    sudo eopkg it datagrip*.eopkg;sudo rm datagrip*.eopkg
    +

    GitKraken

    +
    sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/programming/gitkraken/pspec.xml
    sudo eopkg it gitkraken*.eopkg;sudo rm gitkraken*.eopkg
    +

    IDEA

    +
    sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/programming/idea/pspec.xml
    sudo eopkg it idea*.eopkg;sudo rm idea*.eopkg
    +

    PhpStorm

    +
    sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/programming/phpstorm/pspec.xml
    sudo eopkg it phpstorm*.eopkg;sudo rm phpstorm*.eopkg
    +

    PyCharm

    +
    sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/programming/pycharm/pspec.xml
    sudo eopkg it pycharm*.eopkg;sudo rm pycharm*.eopkg
    +

    Rider

    +
    sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/programming/rider/pspec.xml
    sudo eopkg it rider*.eopkg;sudo rm rider*.eopkg
    +

    RubyMine

    +
    sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/programming/rubymine/pspec.xml
    sudo eopkg it rubymine*.eopkg;sudo rm rubymine*.eopkg
    +

    Sublime Text

    +
    sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/programming/sublime-text/pspec.xml
    sudo eopkg it sublime*.eopkg;sudo rm sublime*.eopkg
    +

    WebStorm

    +
    sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/programming/webstorm/pspec.xml
    sudo eopkg it webstorm*.eopkg;sudo rm webstorm*.eopkg
    +

    Security

    +

    Enpass

    +
    sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/security/enpass/pspec.xml
    sudo eopkg it enpass*.eopkg;sudo rm enpass*.eopkg
    +

    Other

    +

    Google Earth

    +
    sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/network/web/google-earth/pspec.xml
    sudo eopkg it google-earth*.eopkg;sudo rm google-earth*.eopkg
    \ No newline at end of file diff --git a/docs/user/software/third-party/snap/index.html b/docs/user/software/third-party/snap/index.html index 3217887fa..f57bdc69f 100644 --- a/docs/user/software/third-party/snap/index.html +++ b/docs/user/software/third-party/snap/index.html @@ -1,46 +1,33 @@ - - - - - -Snap | Solus Help Center - - - - - -

    Snap

    -
    warning

    Note that snaps are going to be removed from Solus in the future, +Snap | Solus Help Center

    Snap

    +
    warning

    Note that snaps are going to be removed from Solus in the future, and are not fully confined in Solus with Linux 6.9 and newer. -See the section on confinement below.

    -

    Snaps are a way of installing third-party packages. +See the section on confinement below.

    +

    Snaps are a way of installing third-party packages. The snapd package installs the CLI client that can be used to install and run snaps.

    -

    Confinement warning

    +

    Confinement warning

    Snaps are usually protected using strict confinement, -ensuring that snaps can't access more of your system than needed. +ensuring that snaps can't access more of your system than needed. The snap command provided by Solus shows a warning when strict confinement is not available. For example:

    -

    WARNING: snap is running with partial confinement. See https://help.getsol.us/docs/user/software/third-party/snap for details

    +

    WARNING: snap is running with partial confinement. See https://help.getsol.us/docs/user/software/third-party/snap for details

    -

    We recommend migrating to Flatpak when possible. +

    We recommend migrating to Flatpak when possible. The warning can be silenced by running sudo snap hide-confinement-warning.

    -

    Migrating to Flatpak

    +

    Migrating to Flatpak

    The unsnap package can be used to migrate from snap to Flatpak. While it does not actively remove user data in ~/snap or /var/lib/snapd, we cannot guarantee that no data gets removed on accident. Please ensure you have system backups that include snap data.

    Run sudo unsnap before migrating to see if all your snaps have known equivalents. -Look for lines containing No equivalent flatpak for <name> found. -Check out this issue if you encounter such snaps.

    +Look for lines containing No equivalent flatpak for <name> found. +Check out this issue if you encounter such snaps.

    Running sudo unsnap auto will migrate as many snaps to Flatpak as possible. It will also uninstall snapd if all snaps were migrated.

    If unsnap is unable to find an equivalent Flatpak for a snap, you have the following options:

      -
    • Search for an equivalent Flatpak manually, and report it if possible.
    • +
    • Search for an equivalent Flatpak manually, and report it if possible.
    • Install an equivalent tool from the package manager if possible.
    • Uninstall the snap manually if it is not needed.
    -

    It is possible to rerun sudo unsnap auto to finish removing snapd.

    - - \ No newline at end of file +

    It is possible to rerun sudo unsnap auto to finish removing snapd.

    \ No newline at end of file diff --git a/docs/user/software/utilities/ksysguard/index.html b/docs/user/software/utilities/ksysguard/index.html index 770eaf105..093b237fb 100644 --- a/docs/user/software/utilities/ksysguard/index.html +++ b/docs/user/software/utilities/ksysguard/index.html @@ -1,23 +1,10 @@ - - - - - -KSysGuard | Solus Help Center - - - - - -

    KSysGuard

    -

    KSysGuard, also known as KDE System Guard and KDE System Monitor, is designed to make simple process control available to a user without needing to do any special setup.

    -

    Installation

    +KSysGuard | Solus Help Center

    KSysGuard

    +

    KSysGuard, also known as KDE System Guard and KDE System Monitor, is designed to make simple process control available to a user without needing to do any special setup.

    +

    Installation

    KSysGuard is usually installed as part of the KDE Plasma Desktop environment, but can be installed from the Software Center or via terminal:

    -
    sudo eopkg it ksysguard
    -

    Use KSysGuard as a non-root user

    +
    sudo eopkg it ksysguard
    +

    Use KSysGuard as a non-root user

    The per process networking plugin requires elevated access to your system. To enable the plugin as non-root user, execute these commands:

    -
    sudo setcap "CAP_NET_RAW=+ep" "/usr/lib64/kf5/ksysguard/ksgrd_network_helper"
    -

    Usage

    -

    KSysGuard User’s Guide or the KDE Help Centre (open khelp on your Plasma Desktop).

    - - \ No newline at end of file +
    sudo setcap "CAP_NET_RAW=+ep" "/usr/lib64/kf5/ksysguard/ksgrd_network_helper"
    +

    Usage

    +

    KSysGuard User’s Guide or the KDE Help Centre (open khelp on your Plasma Desktop).

    \ No newline at end of file diff --git a/docs/user/software/utilities/kwallet/index.html b/docs/user/software/utilities/kwallet/index.html index 431fc085d..d47e46de3 100644 --- a/docs/user/software/utilities/kwallet/index.html +++ b/docs/user/software/utilities/kwallet/index.html @@ -1,42 +1,29 @@ - - - - - -KDE Wallet | Solus Help Center - - - - - -

    KDE Wallet and SSH keys

    +KDE Wallet | Solus Help Center

    KDE Wallet and SSH keys

    In KDE Plasma, the KDE Wallet is responsible for securely storing and supplying user credentials to the various KDE applications that request them.

    Out of the box, the Solus KDE Plasma Desktop is already configured to use the KDE Wallet PAM module, which unlocks the KDE Wallet on session login.

    However, additional configuration is needed to make the KDE Wallet manage SSH key passphrases.

    -

    Prerequisites

    +

    Prerequisites

    This document assumes that you are familiar with utilising SSH key passphrases.

    -

    For more information, see working with SSH key passphrases

    -

    The SSH_ASKPASS environment variable

    +

    For more information, see working with SSH key passphrases

    +

    The SSH_ASKPASS environment variable

    The SSH_ASKPASS environment variable tells the SSH subsystem which application to use when prompting the user for SSH key passphrases.

    On the Solus KDE Plasma Desktop spin, ksshaskpass is installed out of the box and SSH_ASKPASS is set to ksshaskpass in the file /usr/share/xdg/plasma-workspace/env/50-solus-defaults.sh by default.

    -

    Create ~/.config/autostart/ssh-add.desktop

    +

    Create ~/.config/autostart/ssh-add.desktop

    The contents of ~/.config/autostart/ssh-add.desktop should reflect the SSH keys you want to manage using the KDE Wallet.

    -

    Example

    +

    Example

    Below is an example of the contents of ~/.config/autostart/ssh-add.desktop:

    -
    [Desktop Entry]
    Exec=ssh-add -q
    Name=ssh-add
    Type=Application
    +
    [Desktop Entry]
    Exec=ssh-add -q
    Name=ssh-add
    Type=Application

    Tip: The above ssh-add.desktop file will only add the default key ~/.ssh/id_rsa. Assuming you have different keys named key1, key2 etc you need to change the above desktop file to

    -
    [Desktop Entry]
    Exec=ssh-add -q ~/.ssh/key1 ~/.ssh/key2 ~/.ssh/key3
    Name=ssh-add
    Type=Application
    -

    Set correct permissions

    +
    [Desktop Entry]
    Exec=ssh-add -q ~/.ssh/key1 ~/.ssh/key2 ~/.ssh/key3
    Name=ssh-add
    Type=Application
    +

    Set correct permissions

    After you created your file inside the autostart folder you have to give it the correct permissions

    -
    chmod 700 ~/.config/autostart/ssh-add.desktop
    +
    chmod 700 ~/.config/autostart/ssh-add.desktop

    with this the file should appear inside the autostart settings

    -

    Re-log to test your changes

    +

    Re-log to test your changes

    After logging out and back in, you should now be prompted by the KDE Wallet to input your SSH key passphrases.

    -

    Unlock SSH key passphrases automatically on login

    +

    Unlock SSH key passphrases automatically on login

    KDE Wallet supports automatically unlocking your SSH key passphrases on login.

    For this to work, your KDE Wallet password needs to be identical to your login password.

    -

    Troubleshooting

    -

    ssh key doesn't get triggered, you can force this manually by running this command.

    -
    SSH_ASKPASS=/usr/bin/ksshaskpass ssh-add < /dev/null
    - - \ No newline at end of file +

    Troubleshooting

    +

    ssh key doesn't get triggered, you can force this manually by running this command.

    +
    SSH_ASKPASS=/usr/bin/ksshaskpass ssh-add < /dev/null
    \ No newline at end of file diff --git a/docs/user/software/virtualization/virtualbox/index.html b/docs/user/software/virtualization/virtualbox/index.html index ce5e6d552..189f4d43e 100644 --- a/docs/user/software/virtualization/virtualbox/index.html +++ b/docs/user/software/virtualization/virtualbox/index.html @@ -1,57 +1,44 @@ - - - - - -VirtualBox | Solus Help Center - - - - - -

    VirtualBox

    -

    VirtualBox is an x86 and x86_64 virtualization software package developed by Oracle.

    -

    Before you start

    +VirtualBox | Solus Help Center

    VirtualBox

    +

    VirtualBox is an x86 and x86_64 virtualization software package developed by Oracle.

    +

    Before you start

    This section applies to new installations for both Host and Guest.

    -

    Remove prior installation

    +

    Remove prior installation

    It is important to uninstall any version of VirtualBox (or VirtualBox Guest Additions) that was not installed from the Software Center or there will be conflicts that will prevent the application to work. This can usually be done by executing the following command from a terminal:

    -
    sudo /opt/VirtualBox/uninstall.sh
    -

    Update your system

    +
    sudo /opt/VirtualBox/uninstall.sh
    +

    Update your system

    Ensure your system is up-to-date. This is very important because VirtualBox installs some kernel modules and the application will not work if your kernel is outdated.

    -
    sudo eopkg upgrade
    -

    Determine which kernel you are using

    +
    sudo eopkg upgrade
    +

    Determine which kernel you are using

    Solus support both a current and lts kernel. It is important to install the version that corresponds to your kernel.

    -

    If you aren't sure which kernel you are running, run the following in terminal:

    -
    uname -r
    +

    If you aren't sure which kernel you are running, run the following in terminal:

    +
    uname -r

    You will either have a .current or .lts suffix. Examples: 5.13.1-187.current or 4.14.237-175.lts

    -

    Solus as host

    +

    Solus as host

    VirtualBox is available in the Software Center, select the package that matches your kernel.

    -
    virtualboxvirtualbox-current
    VirtualBox host modules for the linux-lts kernelVirtualBox host modules for the linux-current kernel
    +
    virtualboxvirtualbox-current
    VirtualBox host modules for the linux-lts kernelVirtualBox host modules for the linux-current kernel

    You must reboot your computer before running VirtualBox for the first time.

    -

    Solus as guest

    +

    Solus as guest

    VirtualBox Guest Additions are available in the Software Center, select the package that matches kernel version on the Solus virtual machine.

    -
    virtualbox-guestvirtualbox-guest-common
    VirtualBox guest modules for the linux-lts kernelInstall this package if the linux-current kernel is used
    +
    virtualbox-guestvirtualbox-guest-common
    VirtualBox guest modules for the linux-lts kernelInstall this package if the linux-current kernel is used

    You must reboot your virtual machine to load the newly installed modules

    -

    Extra configuration

    -

    USB controller

    -

    If you want to use USB 2.0 or 3.0 in your virtual machine (and your hardware supports it), you have to install the extension pack.

    +

    Extra configuration

    +

    USB controller

    +

    If you want to use USB 2.0 or 3.0 in your virtual machine (and your hardware supports it), you have to install the extension pack.

    Note: Access to USB is granted by the user group vboxusers on the Host operating system. You can add yourself to this group with the following command

    -
    sudo gpasswd -a $USER vboxusers
    -

    Shared folders

    +
    sudo gpasswd -a $USER vboxusers
    +

    Shared folders

    Share folders let you access files from the host system from within a guest machine.

    Note: auto-mounted shared folders are mounted into the /media directory, along with the prefix sf_. For example, the shared folder myfiles would be mounted to /media/sf_myfiles.

    Access to the shared folders is only granted to the user group vboxsf on the Guest operating system.

    Execute these commands to set the permissions and add yourself to the group

    -
    sudo gpasswd -a $USER vboxsf
    -

    Troubleshooting

    -

    VBOX Kernel

    +
    sudo gpasswd -a $USER vboxsf
    +

    Troubleshooting

    +

    VBOX Kernel

    The Error Kernel driver not installed (rc=-1908) may occur if

    • The computer was not restarted before launching VirtualBox for the first time
    • The computer is not booted on the latest kernel. Make sure to apply the updates from the Software Center and restart your machine.
    • The wrong VirtualBox package was installed. Please check the instructions just above to install the correct package for your kernel.
    • VirtualBox was manually installed and it conflicts with the version installed from the Solus Repository.
    • -
    - - \ No newline at end of file +
    \ No newline at end of file diff --git a/docs/user/software/web/obs/index.html b/docs/user/software/web/obs/index.html index a643c00d4..76e4069b9 100644 --- a/docs/user/software/web/obs/index.html +++ b/docs/user/software/web/obs/index.html @@ -1,46 +1,35 @@ - - - - - -Open Broadcaster Software (OBS) | Solus Help Center - - - - - -

    Open Broadcaster Software (OBS)

    +Open Broadcaster Software (OBS) | Solus Help Center

    Open Broadcaster Software (OBS)

    This article covers the installation of OBS Studio as well as the use of third-party plugins.

    -

    Installation

    +

    Installation

    To install OBS Studio, either open up the Software Center and type obs-studio into the Search section or run the following command:

    -
    sudo eopkg install obs-studio
    -

    Virtual camera

    -

    OBS includes a virtual webcam device which can be used to send your OBS stream to video conferencing programs. In order to use this on Solus, you must first install from our repository a separate kernel module that is responsible for creating the necessary "loopback" device. There are two versions of this software available in the repository, you must choose the version that corresponds to the kernel you have installed.

    +
    sudo eopkg install obs-studio
    +

    Virtual camera

    +

    OBS includes a virtual webcam device which can be used to send your OBS stream to video conferencing programs. In order to use this on Solus, you must first install from our repository a separate kernel module that is responsible for creating the necessary "loopback" device. There are two versions of this software available in the repository, you must choose the version that corresponds to the kernel you have installed.

    To find out which kernel is installed, run:

    -
    uname -r
    +
    uname -r

    This should return a version which ends in .current or .lts.

      -
    • If you are running the "current" kernel, install v4l2loopback-current: sudo eopkg install v4l2loopback-current
    • -
    • If you are running the "lts" kernel, install v4l2loopback: sudo eopkg install v4l2loopback
    • +
    • If you are running the "current" kernel, install v4l2loopback-current: sudo eopkg install v4l2loopback-current
    • +
    • If you are running the "lts" kernel, install v4l2loopback: sudo eopkg install v4l2loopback

    Once v4l2loopback is installed, reboot your computer. Next time you start OBS, it will prompt you for your password to set up v4l2loopback. After that, the virtual camera should be available as a webcam in other programs.

    -

    Plugins

    -

    All OBS Studio plugins should be installed into their own respective folders inside the ~/.config/obs-studio/plugins folder. If this folder does not exist for you, you'll need to create it before copying plugins into it.

    +

    Plugins

    +

    All OBS Studio plugins should be installed into their own respective folders inside the ~/.config/obs-studio/plugins folder. If this folder does not exist for you, you'll need to create it before copying plugins into it.

    When installing a plugin, the directory tree should look something like the following:

    -
    plugins
    └── plugin-name
    ├── bin
    │   └── 64bit
    │   └── filename.so
    ├── data
    │   └── locale
    │   └── en-US.ini
    +
    plugins
    └── plugin-name
    ├── bin
    │   └── 64bit
    │   └── filename.so
    ├── data
    │   └── locale
    │   └── en-US.ini

    In essence, you should have bin/64bit folders inside the plugin folder, with any shared object plugin files inside that. As OBS Studio for Solus only supports 64-bit, the plugin must support 64-bit as well.

    Additionally, the plugin may come with additional files or folders, such as locale information. That locale information should be located in data/locale.

    Most Linux-supporting plugins should provide pre-compiled tarballs or zip files that you can extract to get a pre-made / ready folder structure that you can simply copy / paste into ~/.config/obs-studio/plugins

    -

    Known working plugins

    -

    Input Overlay

    -

    The Input Overlay plugin enables you to show an input overlay of your gamepad, mouse, or keyboard. Pre-compiled release files are available on the Releases section of the developer's website.

    +

    Known working plugins

    +

    Input Overlay

    +

    The Input Overlay plugin enables you to show an input overlay of your gamepad, mouse, or keyboard. Pre-compiled release files are available on the Releases section of the developer's website.

    To install Input Overlay, download the input-overlay-vNUM.zip file from their releases page, where NUM is the latest release number, such as 4.4.

    -

    Next, we'll install a library necessary to use the Input Overlay plugin, as well as an unzip tool to make the installation process easier. Run the following command:

    -
    sudo eopkg install libuiohook unzip
    +

    Next, we'll install a library necessary to use the Input Overlay plugin, as well as an unzip tool to make the installation process easier. Run the following command:

    +
    sudo eopkg install libuiohook unzip

    Next, click on the zip file in your File Manager to open up the Extract tool (such as File Roller). You will be presented with contents like the following.

    -

    Input Overlay Zip

    -

    Let's extract this to our Downloads folder to make the process of copying the contents we need more easily. Click the Extract button in the image indicated above. This will present you with a file dialog. Navigate to the Downloads folder and click Extract. This will create a folder, likely called something similar to input-overlay.v4.4.

    -

    Next let's run the following commands in the Terminal. The commands below will:

    +

    Input Overlay Zip

    +

    Let's extract this to our Downloads folder to make the process of copying the contents we need more easily. Click the Extract button in the image indicated above. This will present you with a file dialog. Navigate to the Downloads folder and click Extract. This will create a folder, likely called something similar to input-overlay.v4.4.

    +

    Next let's run the following commands in the Terminal. The commands below will:

    • Remove our zip file to make our directory renaming more reliable.
    • Move our extracted input overlay in our Downloads directory to one which is without a version number, to make it easier for future commands.
    • @@ -48,15 +37,13 @@

      Input Overlay<
    • Create an input-overlay folder in ~/.config/obs-studio/plugins as well as creating the plugins folder if needed.
    • Copy over the necessary and recommended folders and files to our input-overlay plugin folder.
    -
    rm ~/Downloads/input-overlay*.zip
    mv ~/Downloads/input-overlay.v* ~/Downloads/input-overlay
    cd ~/Downloads/input-overlay/presets
    for file in `ls *.zip`; do unzip "${file}" -d "${file:0:-4}"; done
    rm *.zip
    mkdir -p ~/.config/obs-studio/plugins/input-overlay
    cp -R ~/Downloads/input-overlay/plugin-linux/* ~/.config/obs-studio/plugins/input-overlay/
    cp -R ~/Downloads/input-overlay/presets ~/.config/obs-studio/plugins/input-overlay/
    +
    rm ~/Downloads/input-overlay*.zip
    mv ~/Downloads/input-overlay.v* ~/Downloads/input-overlay
    cd ~/Downloads/input-overlay/presets
    for file in `ls *.zip`; do unzip "${file}" -d "${file:0:-4}"; done
    rm *.zip
    mkdir -p ~/.config/obs-studio/plugins/input-overlay
    cp -R ~/Downloads/input-overlay/plugin-linux/* ~/.config/obs-studio/plugins/input-overlay/
    cp -R ~/Downloads/input-overlay/presets ~/.config/obs-studio/plugins/input-overlay/

    Now the Input Overlay source is available to us as a source (if you have OBS Studio already open, restart it), as shown in the below screenshot.

    -

    Input Overlay: Source Menu

    -

    Upon clicking on this source, we'll be presented with the usual add / use existing source dialog.

    -

    Input Overlay: Add Existing Source

    -

    After naming a source, such as "Mouse", click OK and you'll be presented with a dialog that looks similar to below. Do note that yours will be empty by default, as you've not yet selected an Overlay image file and Layout config file yet.

    -

    Input Overlay: Main Source

    +

    Input Overlay: Source Menu

    +

    Upon clicking on this source, we'll be presented with the usual add / use existing source dialog.

    +

    Input Overlay: Add Existing Source

    +

    After naming a source, such as "Mouse", click OK and you'll be presented with a dialog that looks similar to below. Do note that yours will be empty by default, as you've not yet selected an Overlay image file and Layout config file yet.

    +

    Input Overlay: Main Source

    This is where the presets come in handy. Click the Browse button for Overlay image file and navigate to .config/obs-studio/plugins/presets and then the respective preset you want, such as mouse, and then the PNG within it. You will need to enable hidden files in the file dialog by using the keyboard combination Ctrl+H to see .config

    Next, do the same for Layout config overlay, but instead go to the same folder as your PNG and select the ini file.

    -

    If you're using a mouse or gamepad, be sure to check the "Mouse overlay" or "Gamepad overlay" boxes respectively and tweak settings as you see fit.

    - - \ No newline at end of file +

    If you're using a mouse or gamepad, be sure to check the "Mouse overlay" or "Gamepad overlay" boxes respectively and tweak settings as you see fit.

    \ No newline at end of file diff --git a/docs/user/troubleshooting/boot-rescue/index.html b/docs/user/troubleshooting/boot-rescue/index.html index 1f9a3db9c..d970f7aa0 100644 --- a/docs/user/troubleshooting/boot-rescue/index.html +++ b/docs/user/troubleshooting/boot-rescue/index.html @@ -1,115 +1,102 @@ - - - - - -Boot Rescue | Solus Help Center - - - - - -

    Boot Rescue

    +Boot Rescue | Solus Help Center

    Boot Rescue

    In this document, we will walk through restoring the ability to boot Solus.

    The inability to boot Solus can be attributed to various issues, such as:

      -
    • Multi-booting with an other operating system that "owns" GRUB and fails to show Solus after an upgrade of Solus is performed.
    • -
    • Upgrades, such as to the kernel, that may not have applied correctly. In which case this could affect "legacy boot" (non-UEFI) or UEFI systems.
    • +
    • Multi-booting with an other operating system that "owns" GRUB and fails to show Solus after an upgrade of Solus is performed.
    • +
    • Upgrades, such as to the kernel, that may not have applied correctly. In which case this could affect "legacy boot" (non-UEFI) or UEFI systems.
    • If a disk is added, removed or had its UUID / mount point change.
    -

    NOTE: Most examples below use sdX as the drive name. If your system has nvme drives, substitute the appropriate name, for example "nvme0n1".

    -

    Multi-booting

    -

    Multi-booting is when you have multiple operating systems on the same device. Also referred to as "dual-booting" when only having two operating systems on the same device.

    -

    The inability to access Solus in a multi-boot scenario typically applies to "legacy boot" (non-UEFI), where the other operating system owns GRUB, which is used booting itself and Solus. This can be resolved by accessing the other operating system and running sudo update-grub.

    -

    An entry is present in /etc/fstab that is not present at boot time

    -

    If you get to an emergency prompt when the system tries to boot, check /etc/fstab. Look for any entries that might refer to disks not present at boot, such as a USB drive or NFS mount. Try adding "noauto" and rebooting. A USB drive entry might look like:

    -
    UUID=XXXXXX  /mnt/mydisk  exfat noauto,uid=1000,gid=1000,umask=0022  0  0
    -

    Incorrectly applied updates / disk changes

    +

    NOTE: Most examples below use sdX as the drive name. If your system has nvme drives, substitute the appropriate name, for example "nvme0n1".

    +

    Multi-booting

    +

    Multi-booting is when you have multiple operating systems on the same device. Also referred to as "dual-booting" when only having two operating systems on the same device.

    +

    The inability to access Solus in a multi-boot scenario typically applies to "legacy boot" (non-UEFI), where the other operating system owns GRUB, which is used booting itself and Solus. This can be resolved by accessing the other operating system and running sudo update-grub.

    +

    An entry is present in /etc/fstab that is not present at boot time

    +

    If you get to an emergency prompt when the system tries to boot, check /etc/fstab. Look for any entries that might refer to disks not present at boot, such as a USB drive or NFS mount. Try adding "noauto" and rebooting. A USB drive entry might look like:

    +
    UUID=XXXXXX  /mnt/mydisk  exfat noauto,uid=1000,gid=1000,umask=0022  0  0
    +

    Incorrectly applied updates / disk changes

    In the case that updates have not been applied correctly by the system, the updates were interrupted, or the disks have changed, it may be possible to boot rescue the Solus system. To do so, you will need:

    1. A Live ISO of Solus booted on your system
    2. A terminal in that Live ISO opened
    -

    Mounting your system

    -

    Whether you're using GRUB or UEFI, you will need to mount your Solus root (/) partition as the first step of performing a boot rescue. This is typically your primary partition, formatted as the filesystem type ext4.

    +

    Mounting your system

    +

    Whether you're using GRUB or UEFI, you will need to mount your Solus root (/) partition as the first step of performing a boot rescue. This is typically your primary partition, formatted as the filesystem type ext4.

    1. First we need to be the root user. Type: sudo su
    2. Next we make a directory where we will mount our local Solus system: mkdir /target
    3. Now, using lsblk, determine the partition of the Solus system. We recommend checking the size of the partition listed and if it matches the size of your Solus install, use that. It will likely be something along the lines of sda# or sdb#. For NVMe drives, the name will look like nvme0n1px -Note: If you see "lvm" as the type, the system has LVM partitions. See the next section for how to mount them.
    4. -
    5. If your root partition is of type sdX / nvme0n1x, replace the "sdX#" in the following command with the partition and mount to the target directory we created: mount /dev/sdX# /target
    6. +Note: If you see "lvm" as the type, the system has LVM partitions. See the next section for how to mount them. +
    7. If your root partition is of type sdX / nvme0n1x, replace the "sdX#" in the following command with the partition and mount to the target directory we created: mount /dev/sdX# /target
    -

    Encrypted systems / LVM systems

    +

    Encrypted systems / LVM systems

    If you use LVM volumes on your system, the process for mounting the system is a little different. If you use LUKS-based encryption, the process will involve decrypting your LUKS partition before mounting it to the correct location. To do this, note the sda / sdb device from the prior steps and follow the steps below:

    1. If the disk is encrypted, decrypt it by running cryptsetup luksOpen /dev/sdX# decrypted, replacing X# with the partition you identified, and enter your password when prompted.
    2. Next check the output of lsblk. This will show you any LVM volumes. You should now see SolusSystem-Swap and SolusSystem-Root. -For non-encrypted volumes, you may see something like this. In this example, SolusSystem-Swap and SolusSystem-Root are under "sda2":
    3. +For non-encrypted volumes, you may see something like this. In this example, SolusSystem-Swap and SolusSystem-Root are under "sda2":
    -
    NAME                   MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINT
    loop0 7:0 0 1.3G 1 loop /run/initramfs/squashfs
    loop1 7:1 0 6.2G 1 loop /run/rootfsbase
    sr0 11:0 1 2.7G 0 rom /run/initramfs/live
    zram0 251:0 0 7.8G 0 disk [SWAP]
    sda 252:0 0 96G 0 disk
    ├─sda1 252:1 0 287M 0 part
    └─sda2 252:2 0 69.7G 0 part
    ├─SolusSystem-Swap 253:0 0 3.7G 0 lvm
    └─SolusSystem-Root 253:1 0 46G 0 lvm
    ...
    -

    For decrypted volumes, the output should look similar to this, with SolusSystem-Swap and SolusSystem-Root being under "decrypted":

    -
    NAME                   MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINT
    loop0 7:0 0 1.3G 1 loop /run/initramfs/squashfs
    loop1 7:1 0 6.2G 1 loop /run/rootfsbase
    loop2 7:2 0 6.2G 1 loop
    └─live-base 253:0 0 6.2G 1 dm
    sda 8:0 0 238.5G 0 disk
    ├─sda1 8:1 0 488.3M 0 part
    └─sda2 8:2 0 238G 0 part
    └─decrypted 253:1 0 238G 0 crypt
    ├─SolusSystem-Swap 253:2 0 3.7G 0 lvm
    └─SolusSystem-Root 253:3 0 234.3G 0 lvm
    sdb 8:16 1 7.3G 0 disk
    ├─sdb1 8:17 1 1.4G 0 part /run/initramfs/live
    └─sdb2 8:18 1 40M 0 part
    -
      +
      NAME                   MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINT
      loop0 7:0 0 1.3G 1 loop /run/initramfs/squashfs
      loop1 7:1 0 6.2G 1 loop /run/rootfsbase
      sr0 11:0 1 2.7G 0 rom /run/initramfs/live
      zram0 251:0 0 7.8G 0 disk [SWAP]
      sda 252:0 0 96G 0 disk
      ├─sda1 252:1 0 287M 0 part
      └─sda2 252:2 0 69.7G 0 part
      ├─SolusSystem-Swap 253:0 0 3.7G 0 lvm
      └─SolusSystem-Root 253:1 0 46G 0 lvm
      ...
      +

      For decrypted volumes, the output should look similar to this, with SolusSystem-Swap and SolusSystem-Root being under "decrypted":

      +
      NAME                   MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINT
      loop0 7:0 0 1.3G 1 loop /run/initramfs/squashfs
      loop1 7:1 0 6.2G 1 loop /run/rootfsbase
      loop2 7:2 0 6.2G 1 loop
      └─live-base 253:0 0 6.2G 1 dm
      sda 8:0 0 238.5G 0 disk
      ├─sda1 8:1 0 488.3M 0 part
      └─sda2 8:2 0 238G 0 part
      └─decrypted 253:1 0 238G 0 crypt
      ├─SolusSystem-Swap 253:2 0 3.7G 0 lvm
      └─SolusSystem-Root 253:3 0 234.3G 0 lvm
      sdb 8:16 1 7.3G 0 disk
      ├─sdb1 8:17 1 1.4G 0 part /run/initramfs/live
      └─sdb2 8:18 1 40M 0 part
      +
      1. Mount SolusSystem-Root by running mount /dev/mapper/SolusSystem-Root /target
      -

      UEFI

      -

      If your system uses UEFI as opposed to GRUB, you will also need to mount your EFI System Partition, otherwise referred to as ESP. If you followed our UEFI guide during installation of Solus, then in all likelihood your ESP will be about 1GB in size. For an older installation, it may be around 512MB. If you're unsure of the partition, run the following, replacing "X" with the same letter used during your mounting of your root file system, minus the number:

      +

      UEFI

      +

      If your system uses UEFI as opposed to GRUB, you will also need to mount your EFI System Partition, otherwise referred to as ESP. If you followed our UEFI guide during installation of Solus, then in all likelihood your ESP will be about 1GB in size. For an older installation, it may be around 512MB. If you're unsure of the partition, run the following, replacing "X" with the same letter used during your mounting of your root file system, minus the number:

      For HDD / SDD drives:

      -
      fdisk -o Device,Size,Type -l /dev/sdX
      +
      fdisk -o Device,Size,Type -l /dev/sdX

      For nvme drives:

      -
      fdisk -o Device,Size,Type -l /dev/nvme0nX
      +
      fdisk -o Device,Size,Type -l /dev/nvme0nX

      Your output may look something similar to:

      -
      Device       Size Type
      /dev/sda1 512M EFI System
      /dev/sda2 111.3G Linux filesystem
      +
      Device       Size Type
      /dev/sda1 512M EFI System
      /dev/sda2 111.3G Linux filesystem

      Notice we have /dev/sda1 as the Device with the EFI System type and roughly 500MB in size. This is the partition we will be mounting.

      -

      With our ESP device known, let's go ahead and mount it, replacing sdX# in the case below with our partition.

      -
      mount /dev/sdX# /target/boot
      -

      Other partitions

      +

      With our ESP device known, let's go ahead and mount it, replacing sdX# in the case below with our partition.

      +
      mount /dev/sdX# /target/boot
      +

      Other partitions

      If your system has other specific partitions, such as a separate /home partition, they will also need to be mounted.

      -

      Chrooting to your Solus system

      +

      Chrooting to your Solus system

      To access your system and perform boot rescue, you will need to mount specific directories from the host system (in this case, our Live ISO), to our Solus system, and then chroot (change root) to the Solus system.

      First run the following commands:

      -
      mount --types proc /proc /target/proc
      mount --rbind /dev /target/dev
      mount --rbind /sys /target/sys
      mount --make-rslave /target/dev
      mount --make-rslave /target/sys
      +
      mount --types proc /proc /target/proc
      mount --rbind /dev /target/dev
      mount --rbind /sys /target/sys
      mount --make-rslave /target/dev
      mount --make-rslave /target/sys

      Assuming all goes well, you should now be able to chroot into your Solus system by doing chroot /target.

      -

      Networking

      +

      Networking

      To validate a working network connection (assuming a network connection is available in your live image), you can run ping google.com in the chrooted environment. If you get responses from google.com, you have a successful connection to the Internet. If you do not, try the following:

      1. Exit the chroot by typing exit
      2. Run:
      -
      cp /run/systemd/resolve/stub-resolv.conf /target/run/systemd/resolve/
      cd /target/etc
      ln -s ../run/systemd/resolve/stub-resolv.conf /target/etc/resolv.conf
      -
        +
        cp /run/systemd/resolve/stub-resolv.conf /target/run/systemd/resolve/
        cd /target/etc
        ln -s ../run/systemd/resolve/stub-resolv.conf /target/etc/resolv.conf
        +
        1. Chroot back into /target by running chroot /target again.
        2. Retry networking.
        -

        Repairing packages

        +

        Repairing packages

        In the event you had an incomplete upgrade, try the following commands:

        1. sudo eopkg rebuild-db
        2. sudo eopkg up
        3. -
        4. sudo eopkg check | grep Broken | awk '{print $4}' | xargs sudo eopkg it --reinstall -If you see output that starts with "Usage", this means the system has no broken packages.
        5. -
        6. Try reverting the latest package transaction (this should only be done if the first two steps, followed by the "Re-run System-Wide Configuration Triggers", failed to produce a successful bootup). See our documentation on history and rollback for more information, followed by re-applying your updates by running sudo eopkg up.
        7. +
        8. sudo eopkg check | grep Broken | awk '{print $4}' | xargs sudo eopkg it --reinstall +If you see output that starts with "Usage", this means the system has no broken packages.
        9. +
        10. Try reverting the latest package transaction (this should only be done if the first two steps, followed by the "Re-run System-Wide Configuration Triggers", failed to produce a successful bootup). See our documentation on history and rollback for more information, followed by re-applying your updates by running sudo eopkg up.
        -

        Correcting disks

        +

        Correcting disks

        In the event that disk changes had caused the system to fail to boot, try the following in the chroot environment:

        1. Get the UUIDs of your partitions the system expects from /etc/fstab.
        2. Compare this to the output of ls -lah /dev/disk/by-uuid
        -

        Re-run system-wide configuration triggers

        +

        Re-run system-wide configuration triggers

        In the chroot environment, run the following command which will perform various configuration triggers to update your icon cache, update GRUB and EFI configuration, re-compile settings, and more:

        -
        sudo usysconf run -f
        -

        Regenerate UEFI boot entries

        +
        sudo usysconf run -f
        +

        Regenerate UEFI boot entries

        Run the following command, which will update the boot entries for your EFI menu:

        -
        sudo clr-boot-manager update
        -

        After this, you should exit your chroot with exit then reboot your system. In the event you are still unable to access Solus, please contact us.

        -

        Unmounting your system

        -

        In case further partition modifications are required, there's a series of steps that must be followed.

        +
        sudo clr-boot-manager update
        +

        After this, you should exit your chroot with exit then reboot your system. In the event you are still unable to access Solus, please contact us.

        +

        Unmounting your system

        +

        In case further partition modifications are required, there's a series of steps that must be followed.

        If you are still chrooted you have to exit the chroot environment by pressing Ctrl + D.

        Then proceed with unmounting the filesystem.

        -
        umount -R /target
        -

        In case of having a LUKS-based encryption you'll have to deactivate your logical volumes plus volume groups and then close your LUKS partition.

        -
        lvchange -a n /dev/SolusSystem/Swap # `-a n` means `active: no`
        lvchange -a n /dev/SolusSystem/Root
        vgchange -a n SolusSystem
        cryptsetup luksClose decrypted
    - - \ No newline at end of file +
    umount -R /target
    +

    In case of having a LUKS-based encryption you'll have to deactivate your logical volumes plus volume groups and then close your LUKS partition.

    +
    lvchange -a n /dev/SolusSystem/Swap # `-a n` means `active: no`
    lvchange -a n /dev/SolusSystem/Root
    vgchange -a n SolusSystem
    cryptsetup luksClose decrypted
    \ No newline at end of file diff --git a/docs/user/troubleshooting/index.html b/docs/user/troubleshooting/index.html index 28519f7e8..7dbad2da6 100644 --- a/docs/user/troubleshooting/index.html +++ b/docs/user/troubleshooting/index.html @@ -1,62 +1,49 @@ - - - - - -Troubleshooting | Solus Help Center - - - - - -

    Troubleshooting Common Issues

    +Troubleshooting | Solus Help Center

    Troubleshooting Common Issues

    This guide provides some basic troubleshooting instructions for when you have an issue in Solus. Before reporting bugs, it is important to check that your Solus installation is not missing files, or suffering from a corrupted disk. You should also ensure your system is fully up to date as the bug may have already been fixed.

    First, perform a full system update on command line with sudo eopkg up (or using the Software Center).

    -

    Next, validate that packages are installed correctly and aren't missing files. Run this once, it will take some time. If there are no broken packages on your system, there will be no output. Otherwise, you will see packages be reinstalled.

    -
    sudo eopkg check | grep Broken | awk '{print $4}' | xargs -r sudo eopkg it --reinstall
    +

    Next, validate that packages are installed correctly and aren't missing files. Run this once, it will take some time. If there are no broken packages on your system, there will be no output. Otherwise, you will see packages be reinstalled.

    +
    sudo eopkg check | grep Broken | awk '{print $4}' | xargs -r sudo eopkg it --reinstall

    Reboot the system and see if the issue is resolved.

    -

    Issues with Software Center or eopkg

    -

    Can't install updates

    +

    Issues with Software Center or eopkg

    +

    Can't install updates

    If eopkg is interrupted, the database may become corrupted. When updating you will see a message similar to:

    -

    30973, 'BDB0087 DB_RUNRECOVERY: Fatal error, run database recovery - BDB0061 PANIC: Invalid argument'

    +

    30973, 'BDB0087 DB_RUNRECOVERY: Fatal error, run database recovery - BDB0061 PANIC: Invalid argument'

    To run database recovery, run sudo eopkg rdb in the terminal and then updates should function correctly.

    -

    eopkg check shows broken packages

    -

    eopkg check checks the sha256 checksums of files on disk versus what was originally installed by the original .eopkg file. In some cases (for example .pyc files), these files will be modified in the normal operation of Solus. If after reinstalling a package it remains broken, then it's likely nothing to worry about (there are no exceptions made in eopkg check for files that are expected to change from use). When reinstalling broken packages, (per above) it only needs to be run once.

    -

    Updated system and having issues

    -

    Broken UI with Chromium applications

    -

    There is an upstream bug with Chromium that causes it to try to use an invalid shader cache instead of rebuilding it, crashing the GPU process. The issue is now fixed in Chromium, but it may take some time for applications to update their Chromium version.

    +

    eopkg check shows broken packages

    +

    eopkg check checks the sha256 checksums of files on disk versus what was originally installed by the original .eopkg file. In some cases (for example .pyc files), these files will be modified in the normal operation of Solus. If after reinstalling a package it remains broken, then it's likely nothing to worry about (there are no exceptions made in eopkg check for files that are expected to change from use). When reinstalling broken packages, (per above) it only needs to be run once.

    +

    Updated system and having issues

    +

    Broken UI with Chromium applications

    +

    There is an upstream bug with Chromium that causes it to try to use an invalid shader cache instead of rebuilding it, crashing the GPU process. The issue is now fixed in Chromium, but it may take some time for applications to update their Chromium version.

    To fix applications exhibiting this problem, run these commands to remove the shader cache:

    -
    find ~/.cache -name GPUCache -exec rm -rv {} +
    find ~/.config -name GPUCache -exec rm -rv {} +
    +
    find ~/.cache -name GPUCache -exec rm -rv {} +
    find ~/.config -name GPUCache -exec rm -rv {} +

    And restart the application.

    -

    Boot into previous kernel

    +

    Boot into previous kernel

    clr-boot-manager by default retains the latest installed kernel, plus the currently running kernel. This means that when you receive a kernel update, there are two kernels to boot into. Sometimes there are regressions that occur in the kernel, so you are able to boot into the previous kernel if the update has caused any hardware issues (for example failing to suspend when it worked previously). When booting via EFI, the boot menu can be shown by hitting space (repeatedly) during boot.

    -

    Reverting updates

    -

    If booting into the previous kernel doesn't solve the issue, there may be an issue with the package updates. It is possible to revert the updates (this would also confirm that the issue is in the selected updates).

    -

    Boot failure

    +

    Reverting updates

    +

    If booting into the previous kernel doesn't solve the issue, there may be an issue with the package updates. It is possible to revert the updates (this would also confirm that the issue is in the selected updates).

    +

    Boot failure

    If Solus partially boots, you can generally get to a TTY using Ctrl+Alt+F2 to login and be able to run commands just like using a terminal. This enables you to run some commands to identify or resolve the issue.

    -

    Display manager won't start

    +

    Display manager won't start

    A common cause of not being able to boot is due to installing the NVIDIA drivers, but not booting into the latest kernel (the only kernel which has the drivers installed). Also ensure you have the correct driver version installed for your kernel. You can check if you have booted into the latest kernel by comparing the installed package with the booted kernel (instructions for both kernels)

    -
    eopkg info linux-lts | head -n2; uname -a
    -
    eopkg info linux-current | head -n2; uname -a
    -

    If the kernel version and release don't match from lines 2 and 3 of the output, then you aren't booting into the latest kernel and this is the likely cause of X not loading (particularly if you just installed the drivers). A couple of common reasons are:

    +
    eopkg info linux-lts | head -n2; uname -a
    +
    eopkg info linux-current | head -n2; uname -a
    +

    If the kernel version and release don't match from lines 2 and 3 of the output, then you aren't booting into the latest kernel and this is the likely cause of X not loading (particularly if you just installed the drivers). A couple of common reasons are:

    • -

      On a GRUB machine, a common cause for not booting the latest kernel is due to Solus not being the boot loader on the MBR. Make sure you are booting via the Solus boot loader (if possible), or update GRUB on the distro that own the boot loader, see Legacy/BIOS installation.

      +

      On a GRUB machine, a common cause for not booting the latest kernel is due to Solus not being the boot loader on the MBR. Make sure you are booting via the Solus boot loader (if possible), or update GRUB on the distro that own the boot loader, see Legacy/BIOS installation.

    • -

      Another possibility is that the ESP has run out of space so the kernel cannot be copied over to it. You can debug why this isn't happening via sudo CBM_DEBUG=1 clr-boot-manager update. This will output all information on the process, where it may be failing, or that it is working correctly.

      +

      Another possibility is that the ESP has run out of space so the kernel cannot be copied over to it. You can debug why this isn't happening via sudo CBM_DEBUG=1 clr-boot-manager update. This will output all information on the process, where it may be failing, or that it is working correctly.

    -

    If these two steps fail, you can't revert the installation of the drivers via History and Rollback

    -

    No Solus boot loader

    -

    If the Solus boot loader is not functioning (this has been known to be broken by the odd update of a certain OS), the boot loader can be recreated via Boot Rescue

    -

    Long boot time

    +

    If these two steps fail, you can't revert the installation of the drivers via History and Rollback

    +

    No Solus boot loader

    +

    If the Solus boot loader is not functioning (this has been known to be broken by the odd update of a certain OS), the boot loader can be recreated via Boot Rescue

    +

    Long boot time

    There are a number of factors that can contribute to a long boot time. The boot up messages can be viewed to look for any timeouts by looking at the timestamped journal.

    -
    sudo journalctl -b
    +
    sudo journalctl -b

    Notable commands to check the boot time are: systemd-analyze (note that the firmware time is prior to Solus boot, so outside of our control) and systemd-analyze critical-chain.

    -

    Timeout on partition mount (90s)

    +

    Timeout on partition mount (90s)

    If information about a device changes (UUID or mount path /dev/sda), this can cause systemd to time out for 90 seconds creating a long boot process. Most frequently this happens with the swap file which can be shared across distros. Most of the devices mounted on boot will appear in /etc/fstab or be a parameter in a file where configuring resume cat /etc/kernel/cmdline.d/*.

    cat /proc/cmdline will show what parameters the kernel has booted with.

    -

    If the devices don't match up with what's listed in ls /dev/disk/*/* then it will cause a 90s timeout while it waits to see if it can be found. To fix this, you will need to remove the reference to the UUID or device path that no longer exists, or correct it to the new UUID label.

    - - \ No newline at end of file +

    If the devices don't match up with what's listed in ls /dev/disk/*/* then it will cause a 90s timeout while it waits to see if it can be found. To fix this, you will need to remove the reference to the UUID or device path that no longer exists, or correct it to the new UUID label.

    \ No newline at end of file diff --git a/docs/user/troubleshooting/installation/index.html b/docs/user/troubleshooting/installation/index.html index eccb314e8..1ae7e8d28 100644 --- a/docs/user/troubleshooting/installation/index.html +++ b/docs/user/troubleshooting/installation/index.html @@ -1,24 +1,11 @@ - - - - - -Installation Issues | Solus Help Center - - - - - -

    Installation Issues

    +Installation Issues | Solus Help Center

    Installation Issues

    This article covers various issues that you may come across during installation of Solus.

    -

    Can't install in EFI mode

    -

    The live ISO will attempt to install Solus by the same method it was booted. If it is unable to install the boot loader to the ESP, then it is likely booted in legacy mode. Ensure that the ISO has been created via a supported method and that an EFI boot is selected from the boot options.

    -

    You can check whether the Solus ISO has booted in EFI mode by checking the for the existence of ls /sys/firmware/efi (if it's not found, then it's booted in legacy mode).

    -

    I can't boot into Solus after installation!

    +

    Can't install in EFI mode

    +

    The live ISO will attempt to install Solus by the same method it was booted. If it is unable to install the boot loader to the ESP, then it is likely booted in legacy mode. Ensure that the ISO has been created via a supported method and that an EFI boot is selected from the boot options.

    +

    You can check whether the Solus ISO has booted in EFI mode by checking the for the existence of ls /sys/firmware/efi (if it's not found, then it's booted in legacy mode).

    +

    I can't boot into Solus after installation!

    There are some misunderstandings with how legacy and EFI boot work (usually implemented as UEFI). These sections cover the common misconceptions.

    -

    Legacy/BIOS installation

    -

    Legacy installations on Solus use the GRUB boot loader on an MBR disk. Only one boot loader can be used on an MBR disk, so if you haven't installed the Solus boot loader on the MBR, you will need to boot into the other OS and update GRUB prior to being able to boot Solus. This will also be required on each update of the kernel to ensure you're booting the latest release.

    -

    EFI

    -

    EFI allows for multiple boot loaders to be installed, which means you can boot the Solus boot loader directly. To ensure you are booting Solus you need to boot Linux Boot Manager from the EFI options. Common keys for bringing up a boot menu or the options during boot are hitting Esc/F2/F9/F10/F11/F12 during boot (this differs per motherboard). If a boot loader for another OS is not listed in the menu, then it is not correctly registered (and therefore not installed correctly). You can make the Solus boot menu appear via Displaying the Solus boot menu on boot which should be able to boot Windows (as it's registered with UEFI properly) as well as Solus, but not other systems.

    - - \ No newline at end of file +

    Legacy/BIOS installation

    +

    Legacy installations on Solus use the GRUB boot loader on an MBR disk. Only one boot loader can be used on an MBR disk, so if you haven't installed the Solus boot loader on the MBR, you will need to boot into the other OS and update GRUB prior to being able to boot Solus. This will also be required on each update of the kernel to ensure you're booting the latest release.

    +

    EFI

    +

    EFI allows for multiple boot loaders to be installed, which means you can boot the Solus boot loader directly. To ensure you are booting Solus you need to boot Linux Boot Manager from the EFI options. Common keys for bringing up a boot menu or the options during boot are hitting Esc/F2/F9/F10/F11/F12 during boot (this differs per motherboard). If a boot loader for another OS is not listed in the menu, then it is not correctly registered (and therefore not installed correctly). You can make the Solus boot menu appear via Displaying the Solus boot menu on boot which should be able to boot Windows (as it's registered with UEFI properly) as well as Solus, but not other systems.

    \ No newline at end of file diff --git a/docs/user/troubleshooting/plasma/index.html b/docs/user/troubleshooting/plasma/index.html index fb30ce433..6f0d8f4e6 100644 --- a/docs/user/troubleshooting/plasma/index.html +++ b/docs/user/troubleshooting/plasma/index.html @@ -1,76 +1,63 @@ - - - - - -Plasma Troubleshooting | Solus Help Center - - - - - -

    Plasma Desktop Troubleshooting

    +Plasma Troubleshooting | Solus Help Center

    Plasma Desktop Troubleshooting

    This contains fixes for various issues you might encounter with the Plasma desktop environment.

    -

    Desktop no longer responds to clicks, cursor stuck in "move" mode (cross)

    +

    Desktop no longer responds to clicks, cursor stuck in "move" mode (cross)

    This is often caused by a Firefox bug. It can be triggered by various things, like moving Firefox windows.

    Symptoms:

      -
    • Can't click on anything on the desktop.
    • -
    • Bringing up windows with keyboard shortcuts (ex: Super for the app menu, F9 for a drop down terminal) works, but they don't get focused. You can't interact with them.
    • +
    • Can't click on anything on the desktop.
    • +
    • Bringing up windows with keyboard shortcuts (ex: Super for the app menu, F9 for a drop down terminal) works, but they don't get focused. You can't interact with them.
    • Mouse cursor is stuck in move mode, it looks like a cross.
    -

    You may not need to reboot to recover from this state. Killing all firefox processes may be all that's necessary. To do so:

    +

    You may not need to reboot to recover from this state. Killing all firefox processes may be all that's necessary. To do so:

    1. Open a virtual terminal by pressing Ctrl+Alt+F3.
    2. Run the following to kill all firefox windows:
    -
    killall firefox
    +
    killall firefox

    This should close all Firefox windows.

    1. Return to the Plasma session by pressing Ctrl+Alt+F2. You should now be able to use Plasma normally.
    -

    Application windows look corrupt / incomplete

    +

    Application windows look corrupt / incomplete

    Symptoms

    • Application windows look corrupt. For example, NeoChat does not display room or user icons.
    • Menus in an application are blank.

    You may be able to fix this by clearing KDE / Plasma cache files.

    -
    Important

    You should not be logged into your Plasma session while deleting the cache files, booting from a live USB is necessary.

    +
    Important

    You should not be logged into your Plasma session while deleting the cache files, booting from a live USB is necessary.

    1. While still logged into your Plasma session, go to your home directory:
    -
    cd
    +
    cd
    1. Run these commands to back up the following directories:
    -
    cp -av ~/.kde{,.bak}
    cp -av ~/.config{,.bak}
    cp -av ~/.local{,.bak}
    cp -av ~/share{,.bak}
    +
    cp -av ~/.kde{,.bak}
    cp -av ~/.config{,.bak}
    cp -av ~/.local{,.bak}
    cp -av ~/share{,.bak}

    The commands create a copy of the folders. Each copy has the .bak extension (Example: ~/.config.bak). These can be used to recover configuration files, if necessary.

    1. Shut down the system.
    2. -
    3. Boot from a live USB, which you can create from one of the Solus installers.
    4. -
    5. Mount your hard drive's file system.
    6. -
    7. Change to your user's directory where you mounted your file system. For example, if you used /mount:
    8. +
    9. Boot from a live USB, which you can create from one of the Solus installers.
    10. +
    11. Mount your hard drive's file system.
    12. +
    13. Change to your user's directory where you mounted your file system. For example, if you used /mount:
    -
    cd /mount/home/username
    -

    Replace "username" with the username you use for Solus. +

    cd /mount/home/username
    +

    Replace "username" with the username you use for Solus. You can make sure the directory is correct by listing the files:

    -
    ls -laH
    +
    ls -laH

    You should see the files you would usually see in your home directory when logged into Solus normally.

    -
    Important

    Avoid deleting the following directories: ~/.kde, ~/.kde4, ~/.local, and ~/.config

    +
    Important

    Avoid deleting the following directories: ~/.kde, ~/.kde4, ~/.local, and ~/.config

    1. Remove the various caches that Plasma uses. Execute the following commands:
    -
    rm -rf .cache/plasmashell*
    rm -rf .cache/org.kde.dirmodel-qml.kcache
    rm -rf .cache/kioexec/ .cache/krunner/ .cache/ksycoca5*
    rm -rf .cache/krunnerbookmarkrunnerfirefoxdbfile.sqlite

    cd ../.local/
    rm -rf kate/ kded5/ klipper/ knewstuff3/ kscreen/ konsole/ kwalletd/ ksysguard/ kmail2/ kcookiejar/ kactivitymanagerd/

    cd ../share/
    rm -rf dolphin kate kcookiejar kded5 keyrings klipper kmail2 knewstuff3 konsole kscreen ksysguard kwalletd kxmlgui5 plasma_engine_comic plasma plasma_notes org.kde.gwenview

    cd ../.config/
    rm -f plasma*
    rm -rf kde* akonadi* KDE kconf_updaterc baloo* dolphinrc drkonqirc gwenviewrc kmail2rc k*rc katemetainfos
    +
    rm -rf .cache/plasmashell*
    rm -rf .cache/org.kde.dirmodel-qml.kcache
    rm -rf .cache/kioexec/ .cache/krunner/ .cache/ksycoca5*
    rm -rf .cache/krunnerbookmarkrunnerfirefoxdbfile.sqlite

    cd ../.local/
    rm -rf kate/ kded5/ klipper/ knewstuff3/ kscreen/ konsole/ kwalletd/ ksysguard/ kmail2/ kcookiejar/ kactivitymanagerd/

    cd ../share/
    rm -rf dolphin kate kcookiejar kded5 keyrings klipper kmail2 knewstuff3 konsole kscreen ksysguard kwalletd kxmlgui5 plasma_engine_comic plasma plasma_notes org.kde.gwenview

    cd ../.config/
    rm -f plasma*
    rm -rf kde* akonadi* KDE kconf_updaterc baloo* dolphinrc drkonqirc gwenviewrc kmail2rc k*rc katemetainfos
    1. Shut down the live environment and remove the live USB drive.
    2. Reboot back into your regular Plasma session. Verify the issue is fixed.
    3. If you experience system instability, restore the previously backed up folders.

    To restore an entire directory:

    -
    cp -rav .kde.bak/share/config/ .kde/share/config
    -

    After restoring the files or directories, restart your system.

    - - \ No newline at end of file +
    cp -rav .kde.bak/share/config/ .kde/share/config
    +

    After restoring the files or directories, restart your system.

    \ No newline at end of file diff --git a/index.html b/index.html index b5270f642..5fa060ccb 100644 --- a/index.html +++ b/index.html @@ -1,14 +1 @@ - - - - - -Documentation | Solus Help Center - - - - - -

    Solus Help Center

    Documentation for Solus

    Users

    Installing, software, boot management, troubleshooting and more.

    Packaging

    Get to grips with our advanced packaging features using easy to follow guides.

    Dev Log

    Learn what our developers have been up to, and preview upcoming changes.
    - - \ No newline at end of file +Documentation | Solus Help Center

    Solus Help Center

    Documentation for Solus

    Users

    Installing, software, boot management, troubleshooting and more.

    Packaging

    Get to grips with our advanced packaging features using easy to follow guides.

    Dev Log

    Learn what our developers have been up to, and preview upcoming changes.
    \ No newline at end of file diff --git a/search-index-default.json b/search-index-default.json index 70d5747eb..7f3749965 100644 --- a/search-index-default.json +++ b/search-index-default.json @@ -1 +1 @@ -{"documents":[{"id":6,"pageTitle":"Clean, clean, clean!","sectionTitle":"Clean, clean, clean!","sectionRoute":"/blog/clean-clean-clean","type":"blog"},{"id":7,"pageTitle":"Clean, clean, clean!","sectionTitle":"A bit of background","sectionRoute":"/blog/clean-clean-clean#a-bit-of-background","type":"blog"},{"id":8,"pageTitle":"Clean, clean, clean!","sectionTitle":"What is it?","sectionRoute":"/blog/clean-clean-clean#what-is-it","type":"blog"},{"id":9,"pageTitle":"Clean, clean, clean!","sectionTitle":"Why bother?","sectionRoute":"/blog/clean-clean-clean#why-bother","type":"blog"},{"id":10,"pageTitle":"Clean, clean, clean!","sectionTitle":"What we accomplished","sectionRoute":"/blog/clean-clean-clean#what-we-accomplished","type":"blog"},{"id":11,"pageTitle":"Clean, clean, clean!","sectionTitle":"What next?","sectionRoute":"/blog/clean-clean-clean#what-next","type":"blog"},{"id":12,"pageTitle":"Clean, clean, clean!","sectionTitle":"Want to help?","sectionRoute":"/blog/clean-clean-clean#want-to-help","type":"blog"},{"id":13,"pageTitle":"Clean, clean, clean!","sectionTitle":"Closing thoughts","sectionRoute":"/blog/clean-clean-clean#closing-thoughts","type":"blog"},{"id":14,"pageTitle":"Don't call me MATE, pal!","sectionTitle":"Don't call me MATE, pal!","sectionRoute":"/blog/don't-call-me-mate-pal","type":"blog"},{"id":15,"pageTitle":"Don't call me MATE, pal!","sectionTitle":"The problem","sectionRoute":"/blog/don't-call-me-mate-pal#the-problem","type":"blog"},{"id":16,"pageTitle":"Don't call me MATE, pal!","sectionTitle":"Introducing the Solus MATE Transition Tool","sectionRoute":"/blog/don't-call-me-mate-pal#introducing-the-solus-mate-transition-tool","type":"blog"},{"id":17,"pageTitle":"Don't call me MATE, pal!","sectionTitle":"How the Mate Transition Tool is actually part of our Python2 work","sectionRoute":"/blog/don't-call-me-mate-pal#how-the-mate-transition-tool-is-actually-part-of-our-python2-work","type":"blog"},{"id":18,"pageTitle":"eopkg is dead, long live eopkg","sectionTitle":"eopkg is dead, long live eopkg","sectionRoute":"/blog/eopkg-is-dead-long-live-eopkg","type":"blog"},{"id":22,"pageTitle":"Intro to Optimizing Packages on Solus","sectionTitle":"Intro to Optimizing Packages on Solus","sectionRoute":"/blog/solus-optimizing-packages","type":"blog"},{"id":23,"pageTitle":"Intro to Optimizing Packages on Solus","sectionTitle":"Optimization Techniques Available","sectionRoute":"/blog/solus-optimizing-packages","type":"blog"},{"id":24,"pageTitle":"Intro to Optimizing Packages on Solus","sectionTitle":"Optimizing a Package","sectionRoute":"/blog/solus-optimizing-packages","type":"blog"},{"id":25,"pageTitle":"Intro to Optimizing Packages on Solus","sectionTitle":"Let's Start Obvious","sectionRoute":"/blog/solus-optimizing-packages#lets-start-obvious","type":"blog"},{"id":26,"pageTitle":"Intro to Optimizing Packages on Solus","sectionTitle":"PGO is great, except, when it isn't.","sectionRoute":"/blog/solus-optimizing-packages#pgo-is-great-except-when-it-isnt","type":"blog"},{"id":27,"pageTitle":"Intro to Optimizing Packages on Solus","sectionTitle":"256 Vector Units go brrrrrr...","sectionRoute":"/blog/solus-optimizing-packages#256-vector-units-go-brrrrrr","type":"blog"},{"id":28,"pageTitle":"Intro to Optimizing Packages on Solus","sectionTitle":"Something about perf to the rescue","sectionRoute":"/blog/solus-optimizing-packages#something-about-perf-to-the-rescue","type":"blog"},{"id":29,"pageTitle":"Intro to Optimizing Packages on Solus","sectionTitle":"Choosing Wisely","sectionRoute":"/blog/solus-optimizing-packages#choosing-wisely","type":"blog"},{"id":30,"pageTitle":"Intro to Optimizing Packages on Solus","sectionTitle":"Adjusting the Benchmark","sectionRoute":"/blog/solus-optimizing-packages#adjusting-the-benchmark","type":"blog"},{"id":31,"pageTitle":"Intro to Optimizing Packages on Solus","sectionTitle":"Partial Profiling","sectionRoute":"/blog/solus-optimizing-packages#partial-profiling","type":"blog"},{"id":32,"pageTitle":"Intro to Optimizing Packages on Solus","sectionTitle":"Final libwebp Results","sectionRoute":"/blog/solus-optimizing-packages","type":"blog"},{"id":33,"pageTitle":"Intro to Optimizing Packages on Solus","sectionTitle":"\"Next-Generation\" Side Quest","sectionRoute":"/blog/solus-optimizing-packages","type":"blog"},{"id":34,"pageTitle":"Intro to Optimizing Packages on Solus","sectionTitle":"I Zee a Purty lil' Package","sectionRoute":"/blog/solus-optimizing-packages#i-zee-a-purty-lil-package","type":"blog"},{"id":35,"pageTitle":"Intro to Optimizing Packages on Solus","sectionTitle":"Squeezing more from zlib-ng","sectionRoute":"/blog/solus-optimizing-packages#squeezing-more-from-zlib-ng","type":"blog"},{"id":36,"pageTitle":"Intro to Optimizing Packages on Solus","sectionTitle":"Final Words","sectionRoute":"/blog/solus-optimizing-packages","type":"blog"},{"id":19,"pageTitle":"Welcome to the Solus Devlog","sectionTitle":"Welcome to the Solus Devlog","sectionRoute":"/blog/welcome-solus-devlog-v1","type":"blog"}],"index":{"version":"2.3.9","fields":["title","content","tags"],"fieldVectors":[["title/6",[0,3.875]],["content/6",[1,3.834,2,3.834,3,4.622,4,1.479,5,2.927,6,0.225,7,2.36,8,2.617,9,1.946,10,0.746,11,3.834,12,2.139,13,3.315,14,2.086,15,3.834,16,2.927,17,3.315,18,2.139]],["tags/6",[6,0.053,7,0.651,19,1.276,20,0.651]],["title/7",[21,2.46,22,3.43]],["content/7",[5,1.935,6,0.222,7,1.56,8,1.73,10,0.674,12,2.366,13,3.963,23,3.056,24,2.535,25,3.056,26,4.176,27,4.757,28,2.191,29,4.757,30,2.535,31,3.012,32,2.535,33,1.935,34,2.535,35,3.056,36,3.056,37,3.056,38,2.365,39,3.056,40,1.73,41,0.893,42,2.191,43,3.056,44,3.056,45,0.978,46,1.73,47,3.056,48,1.56,49,3.056,50,3.056,51,2.191,52,2.535,53,1.935,54,3.056,55,2.535,56,2.535,57,2.365,58,1.73,59,2.191,60,3.056,61,2.535,62,4.24,63,3.056,64,3.056,65,3.056,66,2.535,67,1.73,68,4.176,69,2.191,70,1.56,71,3.056,72,3.237,73,1.935,74,2.191,75,3.389,76,0.282,77,3.056,78,2.535,79,3.056,80,3.056,81,3.056,82,2.191,83,2.535,84,1.73,85,3.056,86,3.056,87,3.056,88,3.056,89,4.176,90,1.935,91,3.056,92,3.056,93,2.535,94,2.191,95,3.056,96,1.73,97,2.535,98,3.056,99,1.56,100,1.932,101,2.535,102,1.935,103,2.191,104,3.056,105,2.191,106,2.535,107,0.815,108,1.73,109,1.935,110,3.056,111,1.935,112,3.056,113,2.535,114,1.73,115,2.535]],["tags/7",[]],["title/8",[]],["content/8",[5,2.839,6,0.221,7,2.724,8,2.539,72,2.839,76,0.361,90,2.839,100,2.075,103,3.215,108,2.539,109,2.839,114,2.539,116,3.215,117,1.195,118,3.215,119,3.719,120,2.075,121,1.435,122,2.839,123,4.483,124,4.483,125,3.215,126,1.571,127,4.483]],["tags/8",[]],["title/9",[128,3.394]],["content/9",[5,2.156,6,0.208,10,0.724,14,1.307,16,2.156,31,3.181,32,3.724,40,1.928,45,1.089,48,1.738,70,1.738,73,2.156,76,0.34,82,2.441,100,1.575,107,0.907,108,1.928,116,2.441,120,1.575,128,2.823,129,2.292,130,2.324,131,3.404,132,3.404,133,1.738,134,3.404,135,2.564,136,2.823,137,3.404,138,2.441,139,2.471,140,2.156,141,3.404,142,2.823,143,2.542,144,3.404,145,2.441,146,3.404,147,3.404,148,2.823,149,3.404,150,1.575,151,1.433,152,2.292,153,3.404,154,4.489,155,3.404,156,3.404,157,3.219,158,2.823,159,3.404,160,3.404,161,4.489,162,3.724,163,3.219,164,3.219,165,3.724,166,3.83,167,3.404,168,4.489,169,3.404,170,3.404,171,3.404,172,1.193,173,4.489,174,3.404,175,3.404,176,2.823,177,2.156,178,1.433,179,2.823]],["tags/9",[]],["title/10",[16,2.591]],["content/10",[0,2.33,6,0.163,7,2.011,8,2.231,10,0.453,12,1.823,16,1.779,24,3.268,31,1.779,45,1.662,61,2.33,67,2.231,72,3.409,74,3.537,75,2.881,76,0.364,78,4.091,90,1.779,94,2.015,97,2.33,100,1.823,108,1.591,109,1.779,114,1.591,120,1.3,121,0.899,122,1.779,129,1.434,133,1.434,145,2.825,150,1.3,172,0.985,178,1.183,180,2.33,181,2.576,182,2.015,183,2.015,184,2.015,185,2.81,186,2.015,187,2.015,188,2.33,189,2.015,190,2.81,191,1.183,192,2.81,193,2.81,194,2.81,195,3.268,196,1.3,197,2.81,198,1.434,199,2.81,200,2.81,201,2.81,202,3.94,203,2.015,204,3.774,205,3.774,206,2.81,207,3.94,208,2.576,209,2.81,210,1.381,211,2.015,212,2.33,213,1.779,214,2.33,215,2.81,216,2.81,217,2.81,218,2.33,219,1.591,220,2.81,221,2.81,222,2.81,223,2.81,224,2.81,225,2.81,226,2.81,227,2.81,228,2.81,229,2.825,230,2.33,231,2.81,232,2.81,233,2.81,234,2.33,235,4.55,236,1.261,237,3.94,238,3.94,239,2.81,240,2.81,241,2.33,242,1.591,243,2.81,244,2.81,245,3.268,246,1.779,247,0.985,248,2.33,249,1.779,250,2.81,251,2.33,252,2.825,253,2.81,254,2.81,255,0.985,256,2.33,257,2.015,258,2.81,259,2.81,260,2.33,261,2.33,262,2.81]],["tags/10",[]],["title/11",[18,1.893]],["content/11",[6,0.191,10,0.574,14,2.085,38,2.013,46,2.013,58,2.013,59,2.549,74,2.549,76,0.347,118,2.549,129,1.814,145,2.549,165,3.83,204,2.948,205,2.948,212,2.948,213,2.251,230,2.948,263,3.554,264,3.554,265,3.554,266,3.554,267,3.554,268,2.549,269,2.948,270,3.554,271,2.013,272,4.618,273,0.947,274,2.619,275,3.554,276,2.948,277,3.554,278,3.554,279,4.505,280,3.83,281,3.679,282,2.948,283,2.948,284,1.245,285,3.554,286,2.948,287,3.554,288,2.948,289,3.554,290,2.549,291,3.554,292,1.814,293,2.549,294,3.554,295,3.554,296,1.645,297,3.554,298,3.554,299,3.554,300,2.948,301,3.554,302,3.554,303,3.554,304,2.251,305,3.554,306,2.013,307,2.948,308,3.554,309,2.948,310,3.554,311,2.948,312,2.251,313,2.013,314,3.554,315,3.554,316,3.554]],["tags/11",[]],["title/12",[14,1.317,152,1.751]],["content/12",[4,1.243,6,0.221,7,1.983,8,2.199,13,3.836,14,1.491,31,2.46,48,1.983,52,3.222,55,3.222,56,3.222,62,4.054,69,2.785,70,1.983,72,3.095,76,0.391,84,2.199,93,3.222,107,1.035,109,2.46,114,2.199,136,3.222,152,1.983,158,3.222,177,2.46,179,3.222,183,2.785,189,3.505,191,1.635,247,1.361,251,3.222,281,2.785,300,3.222,317,3.222,318,3.222,319,1.635,320,3.884,321,3.884,322,2.46,323,3.884,324,3.884,325,1.635,326,3.222,327,3.884,328,3.884,329,2.785,330,3.884,331,3.884,332,2.785,333,3.884,334,3.222,335,3.884]],["tags/12",[]],["title/13",[246,2.172,260,2.845]],["content/13",[2,3.735,6,0.186,14,1.728,70,2.299,76,0.304,100,2.084,121,1.712,274,2.299,311,3.735,322,2.851,329,3.229,336,4.502,337,1.728,338,3.735,339,3.735,340,4.502,341,2.55,342,2.851,343,2.851,344,4.502,345,4.502,346,4.502,347,4.502,348,4.502,349,4.502]],["tags/13",[]],["title/14",[105,1.859,350,1.859,351,1.091,352,2.592]],["content/14",[6,0.214,11,3.537,45,1.365,73,2.7,96,2.415,111,3.279,130,1.973,172,1.494,247,1.494,268,3.713,273,1.137,351,2.441,353,1.795,354,4.264,355,2.7,356,2.177,357,4.264,358,4.264,359,3.999,360,3.058,361,4.264,362,4.264,363,4.264,364,4.264,365,3.537,366,3.058,367,4.264,368,1.795,369,4.264,370,2.177,371,4.264]],["tags/14",[6,0.065,20,0.801,351,0.661]],["title/15",[372,2.591]],["content/15",[6,0.166,10,0.806,14,1.542,45,1.286,46,2.275,96,2.275,111,2.545,121,1.286,126,1.408,129,2.051,143,2.275,183,2.882,255,1.408,273,1.071,284,1.408,317,3.333,322,2.545,329,2.882,341,2.275,342,2.545,343,2.545,351,2.287,356,2.051,366,2.882,368,1.692,370,2.051,373,4.018,374,2.882,375,4.018,376,4.018,377,3.333,378,3.333,379,2.882,380,2.051,381,4.018,382,3.333,383,2.882,384,4.018,385,3.333,386,4.141,387,4.018,388,3.333,389,4.018,390,1.408,391,3.333,392,4.018,393,4.018,394,4.018,395,4.018,396,3.333]],["tags/15",[]],["title/16",[6,0.096,130,1.069,351,0.972,370,1.179,397,1.916]],["content/16",[6,0.217,10,0.598,12,1.715,14,1.422,69,2.657,82,2.657,96,2.098,121,1.186,122,2.346,126,1.298,129,1.892,130,2.699,133,1.892,135,1.892,151,1.56,181,2.098,255,1.298,273,1.47,284,1.298,286,3.073,288,3.073,304,2.346,313,2.098,325,1.56,339,3.073,351,2.456,356,1.892,360,2.657,366,2.657,368,1.56,370,2.816,396,3.073,398,3.073,399,3.073,400,2.346,401,3.705,402,3.705,403,3.705,404,3.705,405,2.657,406,3.073,407,3.073,408,3.705,409,1.298,410,4.744,411,1.892,412,3.705,413,3.705,414,4.744,415,3.705,416,3.705,417,3.402,418,3.705,419,3.073,420,2.346]],["tags/16",[]],["title/17",[126,0.665,130,0.878,351,0.798,370,0.968,421,0.878,422,0.968,423,1.36]],["content/17",[6,0.233,15,2.709,34,2.709,48,1.667,51,2.342,67,1.849,70,1.667,76,0.221,99,1.667,101,2.709,106,2.709,111,2.068,121,1.045,122,2.068,126,1.144,130,2.277,135,1.667,139,1.511,157,2.342,163,2.342,210,1.144,213,2.766,247,1.144,252,2.342,273,1.164,276,4.082,279,4.082,280,2.709,281,2.342,282,2.709,283,3.623,304,2.068,312,2.068,319,1.375,325,1.375,337,1.254,351,2.071,353,1.375,368,1.839,370,2.23,372,2.068,380,2.682,385,2.709,386,2.709,388,2.709,398,2.709,406,2.709,411,1.667,421,1.511,423,2.342,424,2.068,425,3.266,426,3.266,427,3.266,428,3.266,429,3.266,430,3.266,431,3.266,432,3.266,433,3.266,434,3.266,435,3.266,436,3.266,437,3.266,438,1.667,439,2.068,440,3.266,441,3.266,442,3.266,443,3.266,444,2.709,445,1.849,446,2.709,447,4.921,448,3.266,449,2.342,450,2.068,451,3.266,452,3.266,453,2.709,454,3.266,455,2.709,456,2.342,457,3.266,458,3.266,459,0.954,460,2.709,461,3.266,462,3.266,463,3.266,464,2.342]],["tags/17",[]],["title/18",[28,1.656,380,1.746,465,1.916,466,2.31]],["content/18",[6,0.156,9,1.106,10,0.606,14,1.442,28,1.883,40,2.127,41,0.767,42,1.883,45,0.841,48,1.341,51,3.144,59,2.694,76,0.342,83,2.178,94,1.883,99,1.341,100,1.215,102,1.663,105,2.694,117,0.7,120,1.215,126,0.92,129,1.341,135,1.341,142,2.178,143,1.487,164,1.883,166,1.883,172,1.316,176,2.178,188,2.178,191,1.106,236,1.403,245,2.178,246,1.663,248,3.115,252,3.144,268,1.883,273,1.001,284,1.316,304,1.663,312,2.378,319,1.106,353,1.106,355,1.663,368,1.581,372,1.663,377,3.115,380,2.443,383,2.694,399,3.115,405,1.883,409,0.92,420,1.663,421,1.215,423,3.144,424,2.378,459,0.767,467,2.626,468,2.626,469,0.92,470,2.626,471,2.626,472,2.626,473,5.062,474,5.062,475,1.883,476,2.626,477,2.626,478,2.178,479,2.178,480,2.178,481,2.178,482,2.626,483,2.626,484,2.626,485,2.626,486,2.626,487,1.341,488,5.062,489,5.062,490,2.626,491,2.626,492,1.663,493,1.663,494,1.883,495,4.384,496,2.178,497,2.626,498,2.626,499,1.106,500,2.626,501,2.626,502,2.626,503,2.626,504,3.756,505,2.626,506,2.178,507,1.883,508,2.178,509,2.626,510,2.626,511,2.626,512,1.883,513,2.626,514,2.178,515,3.756,516,2.626,517,2.626,518,2.626,519,2.626,520,2.626,521,2.626,522,1.883,523,2.626,524,2.626,525,1.663,526,1.487,527,1.581,528,2.238,529,2.626,530,2.626,531,2.178,532,2.626,533,2.626,534,1.883,535,2.626,536,1.663,537,2.626,538,2.626,539,2.626,540,2.178,541,3.756,542,2.626,543,1.663,544,2.626,545,1.883]],["tags/18",[6,0.053,20,0.651,380,0.651,506,1.058]],["title/22",[6,0.107,76,0.175,546,2.592,547,0.466]],["content/22",[6,0.159,10,0.437,33,1.715,41,1.122,46,2.525,53,1.715,67,1.533,76,0.407,99,1.382,107,1.293,117,1.023,120,1.253,126,0.949,133,1.382,143,1.533,166,1.942,178,1.14,191,1.877,219,1.533,236,0.867,247,0.949,261,2.246,271,1.533,273,1.418,306,1.533,337,1.862,359,1.942,372,1.715,390,1.345,409,0.949,422,1.96,424,1.715,438,1.382,439,2.824,459,0.791,481,2.246,493,2.431,514,3.699,527,2.303,528,1.382,540,2.246,547,0.957,548,4.459,549,2.824,550,1.715,551,1.942,552,1.243,553,2.753,554,1.039,555,2.708,556,2.246,557,2.246,558,2.246,559,1.715,560,3.184,561,2.708,562,2.246,563,2.708,564,1.877,565,2.246,566,2.708,567,2.708,568,1.942,569,2.708,570,2.246,571,2.708,572,2.708,573,1.715,574,2.708,575,1.966,576,2.708,577,2.708,578,2.708,579,2.708,580,2.753,581,2.246,582,1.715,583,2.708,584,2.246,585,2.431,586,1.533,587,2.174,588,1.14,589,1.715,590,2.708,591,1.942,592,3.184,593,2.708,594,2.246,595,1.039,596,2.708,597,3.184,598,1.942,599,2.708,600,2.708,601,3.699,602,1.023,603,2.246,604,2.708,605,2.246,606,2.708,607,2.246,608,2.246,609,2.708,610,2.708,611,1.942]],["tags/22",[6,0.021,76,0.035,211,0.366,547,0.092,588,0.215,595,0.196,612,0.366,613,0.424,614,0.511,615,0.424,616,0.511,617,0.511]],["title/23",[547,0.531,549,1.87,618,1.87]],["content/23",[6,0.106,38,1.454,41,1.08,42,1.842,45,0.822,57,1.454,76,0.353,107,0.685,117,0.985,126,0.9,130,1.188,139,1.188,143,1.454,150,1.188,151,1.081,184,1.842,196,1.188,236,1.764,247,0.9,309,2.13,313,1.454,319,1.081,325,1.081,332,1.842,337,1.419,356,1.311,374,1.842,390,0.9,400,1.626,421,1.188,422,1.311,439,1.626,449,2.651,459,1.08,469,0.9,487,1.887,499,1.081,525,2.742,526,2.452,527,1.081,528,2.814,531,2.13,547,0.992,549,1.626,550,2.742,552,0.897,553,1.842,556,2.13,560,2.13,564,1.994,565,2.13,573,1.626,575,0.986,581,3.066,585,1.626,586,2.093,587,1.454,588,1.823,591,1.842,592,2.13,595,1.662,612,3.397,619,1.71,620,3.592,621,3.066,622,2.13,623,2.13,624,2.13,625,2.568,626,3.696,627,3.066,628,1.454,629,2.651,630,2.13,631,2.568,632,2.13,633,2.568,634,3.696,635,2.568,636,2.13,637,2.568,638,2.568,639,2.341,640,2.13,641,1.626,642,2.568,643,2.13,644,2.13,645,2.13,646,2.13,647,1.454,648,2.568,649,1.842,650,2.568,651,3.105,652,2.568,653,2.568,654,2.568,655,1.842,656,2.568,657,2.13,658,2.568,659,1.842,660,2.568,661,2.568,662,2.568,663,3.31,664,2.13,665,3.066,666,4.736,667,3.599,668,2.568,669,1.842,670,1.842,671,2.13,672,3.696,673,2.568,674,1.454,675,2.13,676,1.626,677,2.13,678,2.13,679,1.842,680,2.13,681,0.822]],["tags/23",[]],["title/24",[76,0.232,547,0.617]],["content/24",[4,0.706,10,0.214,12,0.613,18,0.613,33,0.838,41,0.966,45,1.058,67,0.75,73,0.838,75,0.838,76,0.223,84,1.248,102,2.092,107,0.881,117,0.881,120,0.613,121,0.424,125,2.369,126,0.464,135,0.676,140,0.838,150,0.613,172,0.464,178,0.557,181,0.75,182,0.949,186,0.949,191,0.557,196,1.02,198,1.125,208,0.75,210,2.114,211,0.949,213,0.838,214,1.829,218,1.098,236,0.706,241,2.35,249,0.838,255,0.773,256,1.098,269,1.098,271,0.75,273,0.755,274,0.676,284,0.773,293,2.032,296,2.29,312,0.838,319,0.557,325,0.928,341,0.75,350,0.949,353,0.557,355,0.838,365,1.829,379,0.949,383,0.949,390,0.773,407,1.098,409,0.773,411,0.676,421,1.311,438,1.125,439,0.838,450,2.324,459,0.966,469,1.158,492,0.838,493,2.092,494,0.949,499,0.928,528,1.687,547,0.397,552,0.802,554,1.268,559,1.396,564,1.545,570,1.098,575,1.087,580,0.949,585,0.838,587,1.248,602,1.173,607,2.741,618,1.396,624,1.098,627,1.098,629,1.581,636,3.287,639,2.509,643,1.829,645,1.098,646,1.098,651,2.369,655,0.949,675,1.098,677,1.098,681,0.907,682,1.324,683,1.324,684,3.619,685,2.661,686,1.324,687,0.949,688,3.963,689,1.324,690,0.949,691,2.509,692,1.324,693,0.949,694,1.324,695,1.324,696,1.324,697,1.286,698,1.324,699,1.324,700,1.324,701,2.032,702,1.098,703,1.324,704,1.324,705,1.324,706,1.324,707,1.098,708,1.324,709,1.324,710,1.098,711,1.324,712,1.829,713,4.257,714,3.963,715,4.401,716,3.287,717,2.205,718,2.145,719,2.205,720,2.205,721,2.205,722,2.205,723,2.205,724,3.304,725,2.205,726,2.205,727,2.205,728,2.205,729,1.829,730,2.205,731,2.205,732,1.396,733,0.949,734,1.324,735,1.829,736,1.324,737,1.324,738,1.324,739,1.324,740,1.324,741,1.324,742,1.324,743,1.324,744,1.324,745,0.949,746,1.324,747,1.324,748,1.098,749,1.324,750,0.75,751,1.324,752,1.098,753,1.794,754,0.949,755,1.324,756,1.324,757,1.098,758,1.324,759,1.324,760,1.324,761,1.324,762,1.324,763,1.324,764,2.661,765,1.324,766,1.324,767,1.324,768,1.324,769,1.324,770,1.324,771,1.324,772,1.098,773,1.521,774,2.023,775,1.324,776,1.604,777,2.205,778,1.324,779,1.829,780,1.668,781,1.324,782,1.324,783,1.324,784,1.324,785,1.324,786,1.324,787,1.829,788,1.098,789,0.75,790,1.098,791,0.949,792,1.324,793,0.949,794,1.324,795,1.324,796,1.829,797,1.324,798,1.098,799,1.098,800,1.324,801,1.098,802,1.324,803,1.324,804,1.098,805,1.324,806,1.324,807,1.098,808,1.098,809,1.324,810,1.098,811,1.829,812,1.829,813,1.125,814,1.098,815,1.324,816,1.098,817,1.324,818,1.324,819,1.098,820,1.098,821,1.324,822,1.098,823,1.324,824,1.324,825,1.098,826,0.676,827,1.098,828,1.324,829,1.125,830,1.098,831,0.838,832,1.324,833,1.324,834,1.324,835,1.324,836,1.098,837,1.324,838,1.098,839,1.324,840,1.324,841,0.949,842,1.604,843,0.928,844,1.391,845,1.248,846,1.098,847,1.521,848,1.324,849,1.324,850,1.324,851,1.248,852,1.248,853,1.248,854,1.324,855,1.324,856,0.838,857,1.02,858,1.324,859,2.023,860,1.098,861,1.324,862,1.324,863,1.324,864,1.324,865,1.098,866,0.838,867,0.75,868,1.324]],["tags/24",[]],["title/25",[12,1.366,659,2.117,681,0.945]],["content/25",[10,0.497,12,1.427,58,1.746,103,2.211,107,1.274,117,1.274,178,1.298,196,1.944,208,1.746,210,2.11,236,1.345,255,1.472,257,2.211,273,1.12,306,1.746,378,2.557,422,1.574,445,1.746,456,2.211,459,1.228,512,2.211,526,1.746,547,0.997,552,1.019,575,1.183,586,1.746,587,1.746,588,1.768,591,2.211,594,2.557,602,1.12,619,2.211,620,2.557,621,2.557,622,2.557,623,2.557,647,1.746,651,2.211,681,0.987,697,1.08,750,1.746,773,1.612,774,2.145,776,1.746,780,2.16,836,2.557,842,2.379,843,1.768,844,2.16,845,2.379,847,2.127,851,2.379,852,2.379,853,2.379,857,1.944,859,2.828,865,3.484,869,3.083,870,3.083,871,2.557,872,2.557,873,2.557,874,2.557,875,3.083,876,2.557,877,3.083,878,3.083,879,3.083,880,2.557,881,3.083,882,3.083,883,3.083,884,3.083,885,3.083,886,3.083,887,2.557,888,2.557]],["tags/25",[]],["title/26",[595,0.995,889,1.859,890,2.592,891,1.323]],["content/26",[4,0.704,10,0.532,17,1.578,18,1.527,21,2.839,41,1.285,46,1.246,53,1.394,57,1.246,76,0.223,84,1.246,96,1.246,102,2.09,107,1.055,117,0.587,121,0.704,126,0.771,138,2.366,139,1.832,151,1.389,172,1.156,181,1.246,184,1.578,187,1.578,191,1.389,195,1.826,196,1.527,198,1.124,203,1.578,208,1.246,210,2.039,229,1.578,236,1.688,255,1.156,273,0.88,296,1.018,306,1.869,307,1.826,322,1.394,337,0.845,374,2.366,400,1.394,409,1.156,411,1.124,421,1.018,422,1.685,445,1.246,459,1.285,464,2.366,465,1.826,469,0.771,475,1.578,480,1.826,487,1.124,499,0.926,526,1.246,528,1.124,543,1.394,545,1.578,547,0.848,549,1.394,552,1.067,554,0.845,564,0.926,573,3.248,589,2.09,595,1.808,602,0.88,618,1.394,639,1.394,641,1.394,663,3.579,665,2.737,667,2.839,676,1.394,681,0.704,685,1.394,697,0.771,732,1.394,754,1.578,764,1.394,773,1.52,774,2.021,776,1.246,780,2.082,829,1.124,842,1.869,843,1.389,844,1.983,845,1.869,847,1.899,851,1.869,852,1.869,853,1.869,856,1.394,857,1.527,859,2.525,871,1.826,872,1.826,891,1.685,892,1.826,893,2.201,894,2.737,895,2.201,896,2.201,897,2.201,898,3.284,899,1.826,900,1.578,901,2.201,902,2.201,903,2.201,904,1.826,905,2.201,906,2.201,907,2.201,908,3.3,909,2.201,910,1.578,911,2.201,912,2.201,913,2.201,914,1.826,915,2.201,916,2.201,917,2.201,918,2.201,919,2.201,920,1.826,921,2.201,922,2.201,923,2.201,924,2.201,925,2.201,926,1.826,927,1.826,928,2.201,929,2.201,930,1.826,931,2.201,932,2.201,933,1.394,934,1.826,935,1.578,936,2.201,937,2.201,938,2.201,939,2.201,940,2.201,941,2.201,942,2.201,943,2.201]],["tags/26",[]],["title/27",[867,1.308,944,2.31,945,2.31,946,2.31,947,2.31]],["content/27",[4,0.507,9,0.667,17,1.832,18,0.733,40,0.897,41,0.747,45,0.507,57,0.897,76,0.217,84,0.897,107,0.681,139,0.733,150,0.733,151,1.075,157,1.136,164,1.136,172,0.895,196,1.182,198,0.809,203,1.136,208,1.447,210,2.132,234,1.314,236,0.818,242,1.447,247,0.555,255,0.895,273,0.681,284,1.125,292,0.809,296,1.182,306,0.897,319,1.075,325,0.667,368,1.075,390,0.555,409,0.555,420,1.003,438,1.88,445,0.897,450,1.003,456,1.136,459,0.938,469,0.555,487,1.304,499,1.075,507,1.136,525,1.003,527,1.351,534,1.136,536,1.003,543,1.003,547,0.46,552,1.048,554,0.608,559,2.033,564,1.7,568,1.136,575,0.981,582,1.003,584,1.314,586,0.897,587,1.818,588,1.351,589,1.618,595,0.608,597,1.314,602,0.856,612,1.136,613,1.314,615,2.119,619,1.485,641,1.003,647,0.897,659,1.136,674,0.897,676,1.003,681,1.178,685,1.003,697,0.895,718,1.304,732,1.003,733,1.832,753,1.003,757,1.314,764,3.171,773,1.413,774,1.304,776,1.447,779,1.314,780,1.55,790,2.119,796,1.314,798,1.314,799,1.314,801,1.314,804,1.314,807,1.314,808,1.314,810,1.314,811,3.919,812,4.65,813,2.885,814,1.314,816,1.314,819,1.314,820,1.314,822,1.314,825,1.314,826,1.304,827,1.314,829,0.809,830,1.314,831,1.003,842,1.818,843,1.075,844,1.55,845,1.447,846,1.314,847,1.922,851,1.447,852,1.447,853,1.447,856,1.003,857,1.182,859,2.557,860,1.314,866,1.618,873,1.314,876,1.314,880,1.314,887,1.314,888,1.314,889,1.136,891,0.809,900,2.302,910,3.802,914,1.314,920,1.314,927,1.314,948,1.584,949,1.314,950,1.584,951,3.21,952,2.675,953,2.554,954,2.554,955,2.119,956,2.119,957,2.554,958,1.584,959,1.584,960,1.314,961,1.584,962,3.21,963,1.584,964,1.314,965,1.314,966,1.584,967,2.554,968,1.584,969,1.584,970,5.008,971,1.584,972,1.584,973,1.584,974,1.584,975,1.584,976,1.584,977,1.584,978,1.584,979,1.584,980,1.584,981,1.584,982,1.584,983,1.584,984,1.584,985,1.584,986,2.554,987,1.584,988,1.584,989,1.584,990,1.584,991,1.584,992,1.584,993,1.584,994,1.584,995,1.584,996,1.584,997,2.119,998,2.554,999,1.584,1000,1.584,1001,1.584,1002,1.584,1003,2.119,1004,1.584,1005,1.584,1006,1.584,1007,1.584,1008,1.584,1009,1.314,1010,1.136,1011,2.332,1012,1.584,1013,1.314,1014,1.003,1015,1.314,1016,1.584,1017,1.584,1018,2.554,1019,1.314,1020,1.584,1021,1.584,1022,1.136,1023,1.314,1024,1.314,1025,1.584,1026,1.584,1027,1.584,1028,1.003,1029,1.584]],["tags/27",[]],["title/28",[40,1.672,1028,1.87,1030,2.953]],["content/28",[4,1.22,9,1.605,10,0.615,48,1.947,107,1.414,117,1.016,139,1.765,150,2.236,152,1.947,178,1.605,242,2.159,247,1.336,338,3.163,419,3.163,469,1.693,527,1.605,536,2.415,547,0.686,552,1.172,575,1.464,628,2.159,647,2.159,674,2.159,681,1.546,750,2.159,753,3.358,773,1.854,774,2.466,780,2.347,831,2.415,841,2.735,843,1.605,844,2.034,857,1.765,1028,3.358,1031,4.831,1032,4.831,1033,3.813,1034,4.831,1035,3.813,1036,3.813,1037,5.303,1038,2.415,1039,3.813,1040,3.813,1041,3.813,1042,3.813]],["tags/28",[]],["title/29",[580,2.46,1043,3.43]],["content/29",[4,1.161,9,1.97,10,0.836,41,1.06,45,1.161,70,1.852,107,0.967,117,0.967,121,1.498,151,1.97,172,1.271,182,2.602,290,2.602,292,1.852,296,1.679,318,3.009,337,1.393,342,2.298,390,1.271,409,1.64,417,2.602,455,3.009,459,1.06,492,2.964,507,2.602,522,2.602,528,1.852,545,2.602,552,0.881,554,1.393,602,0.967,611,3.356,619,2.166,655,2.602,684,2.602,685,2.964,691,2.298,697,1.271,713,3.882,773,1.796,788,3.009,789,3.208,791,2.602,891,1.852,892,3.009,1038,3.281,1044,3.009,1045,3.628,1046,3.628,1047,3.009,1048,3.009,1049,3.628,1050,4.68,1051,3.628,1052,2.65,1053,3.628,1054,3.628,1055,3.628,1056,2.602,1057,3.628,1058,3.628,1059,3.628]],["tags/29",[]],["title/30",[602,0.914,1060,2.845]],["content/30",[4,1.049,41,1.279,53,2.075,76,0.296,151,1.379,172,1.148,178,1.379,210,1.727,219,1.855,246,2.075,247,1.727,284,1.148,341,1.855,368,1.842,409,1.727,459,0.957,493,2.075,499,1.379,547,0.887,552,0.795,554,1.257,588,2.075,589,2.075,595,1.257,602,0.873,619,2.281,640,2.717,644,2.717,647,2.791,681,1.577,697,1.727,718,2.234,750,2.478,773,1.257,780,1.379,787,2.717,791,2.349,813,2.516,826,2.516,831,2.075,843,1.379,844,1.379,847,2.165,866,2.771,889,2.349,949,2.717,952,2.791,1010,2.349,1011,3.571,1013,2.717,1014,2.075,1024,2.717,1028,2.075,1038,2.075,1056,2.349,1060,2.717,1061,3.276,1062,3.276,1063,3.276,1064,3.276,1065,3.276,1066,3.276,1067,2.717,1068,3.276,1069,3.276,1070,3.276,1071,3.276,1072,3.276,1073,3.276,1074,2.349,1075,3.276,1076,2.717,1077,3.276]],["tags/30",[]],["title/31",[663,2.172,1078,2.845]],["content/31",[4,0.845,57,2.135,58,1.495,99,1.348,117,0.704,138,1.893,140,1.671,150,1.221,151,1.111,177,1.671,187,1.893,198,1.348,210,1.946,219,1.495,236,0.845,242,1.495,271,2.135,274,1.348,292,1.924,326,2.189,342,1.671,350,2.703,390,0.925,411,1.348,422,1.348,438,1.348,445,1.495,446,3.647,459,1.285,475,1.893,492,1.671,525,2.784,527,1.111,543,1.671,547,0.913,552,0.915,562,2.189,564,1.111,568,2.703,573,3.037,585,1.671,586,1.495,588,1.587,595,1.841,598,1.893,619,1.744,628,1.495,630,2.189,639,1.671,649,2.703,663,3.212,664,2.189,669,1.893,670,1.893,681,0.845,693,1.893,697,0.925,701,1.893,718,2.448,748,2.189,750,1.495,752,2.189,753,1.671,754,1.893,764,2.387,813,1.924,826,1.924,829,1.924,847,1.447,891,1.348,898,3.127,904,2.189,926,2.189,930,2.189,933,1.671,934,2.189,935,3.439,952,2.135,960,2.189,964,2.189,965,3.127,1011,2.387,1014,1.671,1022,1.893,1023,2.189,1048,2.189,1074,1.893,1078,4.207,1079,2.189,1080,2.639,1081,2.189,1082,2.639,1083,3.127,1084,2.639,1085,2.639,1086,2.639,1087,1.893,1088,4.796,1089,5.552,1090,2.639,1091,2.639,1092,3.769,1093,2.639,1094,3.769,1095,2.639,1096,2.639,1097,2.639,1098,2.639,1099,3.769,1100,2.639,1101,2.639,1102,2.639,1103,2.639,1104,2.639,1105,2.189,1106,2.639,1107,2.639,1108,2.639,1109,2.189,1110,2.639,1111,2.639]],["tags/31",[]],["title/32",[38,1.672,554,1.133,628,1.672]],["content/32",[9,1.605,58,2.736,76,0.258,107,1.288,117,1.016,148,4.007,191,1.605,229,2.735,236,1.22,274,1.947,284,1.336,296,2.236,353,1.605,359,2.735,421,1.765,550,2.415,552,0.925,575,2.036,602,1.016,641,2.415,684,3.465,691,2.415,697,1.336,718,2.846,729,3.163,773,1.464,774,1.947,776,2.159,780,2.034,813,1.947,826,1.947,843,1.605,844,2.034,847,1.854,857,1.765,859,2.466,952,2.159,997,3.163,1003,3.163,1009,3.163,1010,2.735,1011,3.059,1014,2.415,1019,3.163,1056,3.465,1067,3.163,1074,2.735,1076,3.163,1112,3.813,1113,3.813,1114,3.163,1115,3.163]],["tags/32",[]],["title/33",[18,1.199,557,2.15,558,2.15,674,1.468]],["content/33",[6,0.128,9,1.772,21,2.217,41,1.23,45,0.99,76,0.209,99,2.149,121,0.99,172,1.475,180,2.565,219,2.384,247,1.084,255,1.475,271,2.384,274,1.578,284,1.084,313,1.751,319,1.302,334,2.565,337,1.616,353,1.302,379,2.217,390,1.475,397,2.565,420,1.958,444,2.565,450,1.958,453,2.565,460,2.565,469,1.475,478,2.565,479,2.565,487,1.578,499,1.302,512,2.217,547,0.924,552,0.75,559,1.958,582,3.253,598,2.217,602,1.122,611,2.217,629,2.217,632,2.565,657,2.565,676,1.958,680,2.565,681,0.99,687,2.217,690,2.217,693,3.019,772,2.565,789,1.751,829,1.578,838,2.565,867,1.751,891,1.578,900,3.019,910,2.217,935,2.217,955,2.565,956,2.565,1038,1.958,1044,2.565,1052,3.384,1079,3.491,1087,2.217,1109,3.491,1116,3.092,1117,2.565,1118,3.092,1119,4.209,1120,3.092,1121,3.092,1122,3.092,1123,3.092,1124,3.092,1125,4.209,1126,3.092,1127,3.092,1128,3.092,1129,3.092,1130,3.092,1131,3.092,1132,3.092,1133,3.092,1134,3.092,1135,3.491,1136,3.092,1137,3.092,1138,3.092,1139,3.092,1140,3.092,1141,2.666,1142,3.491,1143,3.092]],["tags/33",[]],["title/34",[76,0.175,1144,2.592,1145,2.592,1146,2.592]],["content/34",[4,1.03,10,0.626,18,1.489,33,2.038,41,0.622,75,1.348,76,0.218,107,1.238,117,1.034,120,0.985,121,0.681,133,1.087,140,1.348,178,0.896,191,0.896,196,1.796,198,1.087,210,2.189,236,1.03,249,1.348,255,1.712,257,1.527,273,0.858,284,1.128,293,1.527,296,1.796,313,1.206,325,0.896,355,1.348,380,1.087,382,1.766,390,1.128,400,2.038,405,1.527,409,1.128,411,1.087,417,1.527,459,1.134,464,1.527,469,0.746,487,1.087,494,1.527,499,1.634,527,1.355,534,2.308,547,0.383,552,0.517,554,0.817,582,2.038,602,1.302,605,2.67,649,1.527,667,1.527,671,1.766,674,1.823,679,1.527,681,0.681,690,1.527,691,1.348,697,1.128,701,1.527,702,1.766,707,1.766,710,1.766,712,1.766,716,1.766,732,1.348,733,2.308,735,1.766,745,1.527,773,1.783,780,1.955,789,2.63,841,1.527,842,1.823,843,1.821,844,1.955,845,1.823,847,2.179,851,1.823,852,1.823,853,1.823,856,1.348,857,0.985,859,1.087,894,1.766,933,1.348,1052,3.135,1081,1.766,1083,1.766,1087,1.527,1117,2.67,1135,2.67,1141,2.457,1142,1.766,1147,3.219,1148,3.219,1149,3.219,1150,3.219,1151,2.129,1152,2.129,1153,2.129,1154,2.129,1155,2.129,1156,2.129,1157,2.129,1158,2.129,1159,2.129,1160,2.129,1161,2.129,1162,2.129,1163,2.129,1164,2.129,1165,1.527,1166,2.129,1167,2.129,1168,2.129,1169,2.129,1170,2.129,1171,2.129,1172,2.129,1173,2.129,1174,2.129,1175,2.129,1176,2.129,1177,2.129,1178,2.129,1179,2.129,1180,2.129,1181,2.129,1182,2.129,1183,2.129,1184,2.129,1185,3.219,1186,2.129,1187,2.129,1188,2.129,1189,3.219,1190,2.129,1191,3.219,1192,2.129,1193,2.129,1194,3.219,1195,2.129,1196,2.129,1197,1.766,1198,2.129]],["tags/34",[]],["title/35",[10,0.418,551,1.859,1052,1.468,1141,1.641]],["content/35",[9,1.85,10,0.709,66,2.734,76,0.223,119,2.734,139,1.525,152,1.683,177,2.088,181,2.489,189,2.364,210,1.925,249,2.088,290,2.364,292,1.683,319,1.388,325,1.388,353,1.388,360,2.364,368,1.388,390,1.155,409,1.155,469,1.155,522,2.364,526,1.867,527,1.388,547,0.89,551,2.364,552,1.2,575,1.265,588,2.312,595,1.687,602,1.171,618,2.088,619,2.542,670,2.364,697,1.155,718,2.244,789,1.867,793,2.364,813,2.244,826,2.244,829,1.683,847,2.214,866,2.783,867,1.867,874,2.734,952,2.489,1015,2.734,1052,2.8,1141,2.783,1197,2.734,1199,4.395,1200,5.767,1201,3.296,1202,3.296,1203,3.296,1204,3.296,1205,3.296,1206,3.296,1207,3.296,1208,3.296,1209,3.296,1210,3.296,1211,3.296,1212,3.296,1213,3.296,1214,3.296,1215,3.296,1216,3.296]],["tags/35",[]],["title/36",[38,1.942,679,2.46]],["content/36",[4,1.22,6,0.2,76,0.327,135,2.466,162,3.163,255,1.693,292,2.466,332,2.735,337,2.036,343,2.415,356,1.947,424,2.415,438,1.947,449,2.735,469,1.336,508,3.163,536,2.415,547,1.003,550,2.415,554,1.464,564,1.605,602,1.288,603,3.163,608,3.163,628,2.159,669,2.735,678,3.163,687,2.735,899,3.163,1022,2.735,1114,3.163,1165,3.465,1217,3.813,1218,3.813,1219,3.163,1220,3.813,1221,3.813,1222,3.813,1223,3.813,1224,3.813,1225,4.831,1226,3.813,1227,3.813,1228,4.831,1229,4.831,1230,3.813,1231,3.813,1232,3.813,1233,3.813,1234,3.813,1235,3.813,1236,3.813,1237,3.813]],["tags/36",[]],["title/19",[6,0.122,20,1.507,1238,2.449]],["content/19",[6,0.249,10,0.721,20,2.282,30,3.708,41,1.463,90,2.142,100,2.068,108,2.531,113,2.805,114,1.915,115,4.153,116,3.206,117,0.901,118,2.425,125,2.425,133,2.282,152,2.282,163,2.425,186,3.206,242,1.915,273,0.901,337,1.298,341,2.531,343,2.831,353,1.424,356,1.726,391,2.805,496,3.708,553,2.425,564,1.424,575,1.298,601,2.805,745,3.206,793,3.591,867,1.915,933,2.142,1047,2.805,1105,2.805,1115,2.805,1165,3.206,1219,3.708,1238,2.805,1239,4.47,1240,5.007,1241,3.382,1242,4.47,1243,3.382,1244,3.382,1245,3.382,1246,3.382,1247,3.382,1248,3.382,1249,4.47,1250,4.47,1251,3.382,1252,3.382,1253,3.382,1254,3.382,1255,3.382,1256,3.382,1257,3.382,1258,3.382,1259,3.382,1260,3.382,1261,3.382,1262,3.382,1263,3.382]],["tags/19",[1,1.058,6,0.053,20,0.651,1264,1.276]]],"invertedIndex":[["",{"_index":210,"title":{},"content":{"10":{},"17":{},"24":{},"25":{},"26":{},"27":{},"30":{},"31":{},"34":{},"35":{}},"tags":{}}],["0.009",{"_index":860,"title":{},"content":{"24":{},"27":{}},"tags":{}}],["0.010",{"_index":921,"title":{},"content":{"26":{}},"tags":{}}],["0.012",{"_index":881,"title":{},"content":{"25":{}},"tags":{}}],["0.071",{"_index":883,"title":{},"content":{"25":{}},"tags":{}}],["0.076",{"_index":862,"title":{},"content":{"24":{}},"tags":{}}],["0.078",{"_index":1005,"title":{},"content":{"27":{}},"tags":{}}],["0.082",{"_index":923,"title":{},"content":{"26":{}},"tags":{}}],["0.3",{"_index":848,"title":{},"content":{"24":{}},"tags":{}}],["0.7",{"_index":1177,"title":{},"content":{"34":{}},"tags":{}}],["01",{"_index":215,"title":{},"content":{"10":{}},"tags":{}}],["06",{"_index":207,"title":{},"content":{"10":{}},"tags":{}}],["09",{"_index":200,"title":{},"content":{"10":{}},"tags":{}}],["0x00007f7473200000",{"_index":824,"title":{},"content":{"24":{}},"tags":{}}],["0x00007f74737b8000",{"_index":821,"title":{},"content":{"24":{}},"tags":{}}],["0x00007f747389e000",{"_index":818,"title":{},"content":{"24":{}},"tags":{}}],["0x00007f74738a9000",{"_index":815,"title":{},"content":{"24":{}},"tags":{}}],["0x00007f7473aa6000",{"_index":809,"title":{},"content":{"24":{}},"tags":{}}],["0x00007f7473ae2000",{"_index":806,"title":{},"content":{"24":{}},"tags":{}}],["0x00007f7473bb4000",{"_index":803,"title":{},"content":{"24":{}},"tags":{}}],["0x00007f7473bea000",{"_index":828,"title":{},"content":{"24":{}},"tags":{}}],["0x00007f9a34dbb000",{"_index":994,"title":{},"content":{"27":{}},"tags":{}}],["0x00007f9a34ddb000",{"_index":992,"title":{},"content":{"27":{}},"tags":{}}],["0x00007f9a34ec1000",{"_index":991,"title":{},"content":{"27":{}},"tags":{}}],["0x00007f9a34ed2000",{"_index":989,"title":{},"content":{"27":{}},"tags":{}}],["0x00007f9a350cf000",{"_index":988,"title":{},"content":{"27":{}},"tags":{}}],["0x00007f9a3510b000",{"_index":987,"title":{},"content":{"27":{}},"tags":{}}],["0x00007f9a351d5000",{"_index":985,"title":{},"content":{"27":{}},"tags":{}}],["0x00007f9a3520b000",{"_index":995,"title":{},"content":{"27":{}},"tags":{}}],["0x00007ffeab5b1000",{"_index":983,"title":{},"content":{"27":{}},"tags":{}}],["0x00007ffed8733000",{"_index":800,"title":{},"content":{"24":{}},"tags":{}}],["1",{"_index":196,"title":{},"content":{"10":{},"23":{},"24":{},"25":{},"26":{},"27":{},"34":{}},"tags":{}}],["1.07",{"_index":1013,"title":{},"content":{"27":{},"30":{}},"tags":{}}],["1.2",{"_index":999,"title":{},"content":{"27":{}},"tags":{}}],["1.243",{"_index":1004,"title":{},"content":{"27":{}},"tags":{}}],["1.266",{"_index":922,"title":{},"content":{"26":{}},"tags":{}}],["1.281",{"_index":882,"title":{},"content":{"25":{}},"tags":{}}],["1.3.2",{"_index":703,"title":{},"content":{"24":{}},"tags":{}}],["1.308",{"_index":1006,"title":{},"content":{"27":{}},"tags":{}}],["1.313",{"_index":1003,"title":{},"content":{"27":{},"32":{}},"tags":{}}],["1.33",{"_index":1010,"title":{},"content":{"27":{},"30":{},"32":{}},"tags":{}}],["1.335",{"_index":924,"title":{},"content":{"26":{}},"tags":{}}],["1.336",{"_index":884,"title":{},"content":{"25":{}},"tags":{}}],["1.341",{"_index":1007,"title":{},"content":{"27":{}},"tags":{}}],["1.346",{"_index":861,"title":{},"content":{"24":{}},"tags":{}}],["1.349",{"_index":920,"title":{},"content":{"26":{},"27":{}},"tags":{}}],["1.353",{"_index":880,"title":{},"content":{"25":{},"27":{}},"tags":{}}],["1.369",{"_index":885,"title":{},"content":{"25":{}},"tags":{}}],["1.374",{"_index":925,"title":{},"content":{"26":{}},"tags":{}}],["1.399",{"_index":1009,"title":{},"content":{"27":{},"32":{}},"tags":{}}],["1.40",{"_index":1070,"title":{},"content":{"30":{}},"tags":{}}],["1.410",{"_index":863,"title":{},"content":{"24":{}},"tags":{}}],["1.423",{"_index":858,"title":{},"content":{"24":{}},"tags":{}}],["1.435",{"_index":864,"title":{},"content":{"24":{}},"tags":{}}],["1.464",{"_index":1196,"title":{},"content":{"34":{}},"tags":{}}],["1.5",{"_index":874,"title":{},"content":{"25":{},"35":{}},"tags":{}}],["1.56",{"_index":1068,"title":{},"content":{"30":{}},"tags":{}}],["1.73",{"_index":1012,"title":{},"content":{"27":{}},"tags":{}}],["10",{"_index":208,"title":{},"content":{"10":{},"24":{},"25":{},"26":{},"27":{}},"tags":{}}],["100",{"_index":54,"title":{},"content":{"7":{}},"tags":{}}],["12",{"_index":250,"title":{},"content":{"10":{}},"tags":{}}],["12.3",{"_index":1074,"title":{},"content":{"30":{},"31":{},"32":{}},"tags":{}}],["12.5",{"_index":1103,"title":{},"content":{"31":{}},"tags":{}}],["12.7",{"_index":1072,"title":{},"content":{"30":{}},"tags":{}}],["13",{"_index":239,"title":{},"content":{"10":{}},"tags":{}}],["133.00",{"_index":1204,"title":{},"content":{"35":{}},"tags":{}}],["14",{"_index":856,"title":{},"content":{"24":{},"26":{},"27":{},"34":{}},"tags":{}}],["14.5",{"_index":1067,"title":{},"content":{"30":{},"32":{}},"tags":{}}],["14.6",{"_index":1069,"title":{},"content":{"30":{}},"tags":{}}],["14.7",{"_index":1066,"title":{},"content":{"30":{}},"tags":{}}],["141.00",{"_index":1199,"title":{},"content":{"35":{}},"tags":{}}],["15",{"_index":879,"title":{},"content":{"25":{}},"tags":{}}],["16",{"_index":1076,"title":{},"content":{"30":{},"32":{}},"tags":{}}],["170.00",{"_index":1209,"title":{},"content":{"35":{}},"tags":{}}],["18.0",{"_index":1071,"title":{},"content":{"30":{}},"tags":{}}],["182.00",{"_index":1202,"title":{},"content":{"35":{}},"tags":{}}],["194.3",{"_index":1170,"title":{},"content":{"34":{}},"tags":{}}],["195.4",{"_index":1000,"title":{},"content":{"27":{}},"tags":{}}],["196.3",{"_index":1172,"title":{},"content":{"34":{}},"tags":{}}],["197.0",{"_index":1001,"title":{},"content":{"27":{}},"tags":{}}],["197.3",{"_index":875,"title":{},"content":{"25":{}},"tags":{}}],["198",{"_index":217,"title":{},"content":{"10":{}},"tags":{}}],["198.1",{"_index":877,"title":{},"content":{"25":{}},"tags":{}}],["198.2",{"_index":998,"title":{},"content":{"27":{}},"tags":{}}],["198.6",{"_index":1168,"title":{},"content":{"34":{}},"tags":{}}],["198.9",{"_index":849,"title":{},"content":{"24":{}},"tags":{}}],["1m1.672",{"_index":912,"title":{},"content":{"26":{}},"tags":{}}],["1m42.199",{"_index":913,"title":{},"content":{"26":{}},"tags":{}}],["2",{"_index":203,"title":{},"content":{"10":{},"26":{},"27":{}},"tags":{}}],["2.1.5",{"_index":1147,"title":{},"content":{"34":{}},"tags":{}}],["2.2",{"_index":915,"title":{},"content":{"26":{}},"tags":{}}],["2.3",{"_index":1169,"title":{},"content":{"34":{}},"tags":{}}],["2.35",{"_index":1073,"title":{},"content":{"30":{}},"tags":{}}],["2.5",{"_index":876,"title":{},"content":{"25":{},"27":{}},"tags":{}}],["2.6",{"_index":1179,"title":{},"content":{"34":{}},"tags":{}}],["2.7",{"_index":917,"title":{},"content":{"26":{}},"tags":{}}],["20",{"_index":226,"title":{},"content":{"10":{}},"tags":{}}],["200",{"_index":265,"title":{},"content":{"11":{}},"tags":{}}],["200.0",{"_index":873,"title":{},"content":{"25":{},"27":{}},"tags":{}}],["200.5",{"_index":1002,"title":{},"content":{"27":{}},"tags":{}}],["201.3",{"_index":916,"title":{},"content":{"26":{}},"tags":{}}],["201.6",{"_index":918,"title":{},"content":{"26":{}},"tags":{}}],["201.8",{"_index":854,"title":{},"content":{"24":{}},"tags":{}}],["2015",{"_index":482,"title":{},"content":{"18":{}},"tags":{}}],["202.2",{"_index":846,"title":{},"content":{"24":{},"27":{}},"tags":{}}],["202.7",{"_index":855,"title":{},"content":{"24":{}},"tags":{}}],["2023",{"_index":24,"title":{},"content":{"7":{},"10":{}},"tags":{}}],["2024",{"_index":78,"title":{},"content":{"7":{},"10":{}},"tags":{}}],["203.2",{"_index":878,"title":{},"content":{"25":{}},"tags":{}}],["203.3",{"_index":1173,"title":{},"content":{"34":{}},"tags":{}}],["204.1",{"_index":914,"title":{},"content":{"26":{},"27":{}},"tags":{}}],["207.1",{"_index":919,"title":{},"content":{"26":{}},"tags":{}}],["21",{"_index":231,"title":{},"content":{"10":{}},"tags":{}}],["22",{"_index":214,"title":{},"content":{"10":{},"24":{}},"tags":{}}],["2300",{"_index":201,"title":{},"content":{"10":{}},"tags":{}}],["25",{"_index":241,"title":{},"content":{"10":{},"24":{}},"tags":{}}],["250.00",{"_index":1211,"title":{},"content":{"35":{}},"tags":{}}],["256",{"_index":944,"title":{"27":{}},"content":{},"tags":{}}],["26",{"_index":717,"title":{},"content":{"24":{}},"tags":{}}],["27",{"_index":222,"title":{},"content":{"10":{}},"tags":{}}],["28",{"_index":1148,"title":{},"content":{"34":{}},"tags":{}}],["2937",{"_index":233,"title":{},"content":{"10":{}},"tags":{}}],["295.00",{"_index":1207,"title":{},"content":{"35":{}},"tags":{}}],["2mib",{"_index":1020,"title":{},"content":{"27":{}},"tags":{}}],["3",{"_index":211,"title":{},"content":{"10":{},"24":{}},"tags":{"22":{}}}],["3.0",{"_index":850,"title":{},"content":{"24":{}},"tags":{}}],["3.13",{"_index":1104,"title":{},"content":{"31":{}},"tags":{}}],["3.17",{"_index":1014,"title":{},"content":{"27":{},"30":{},"31":{},"32":{}},"tags":{}}],["3.6",{"_index":1171,"title":{},"content":{"34":{}},"tags":{}}],["3.webp",{"_index":843,"title":{},"content":{"24":{},"25":{},"26":{},"27":{},"28":{},"30":{},"32":{},"34":{}},"tags":{}}],["30",{"_index":199,"title":{},"content":{"10":{}},"tags":{}}],["3070",{"_index":232,"title":{},"content":{"10":{}},"tags":{}}],["316",{"_index":216,"title":{},"content":{"10":{}},"tags":{}}],["32bit",{"_index":755,"title":{},"content":{"24":{}},"tags":{}}],["33",{"_index":1182,"title":{},"content":{"34":{}},"tags":{}}],["34",{"_index":719,"title":{},"content":{"24":{}},"tags":{}}],["37",{"_index":223,"title":{},"content":{"10":{}},"tags":{}}],["38",{"_index":209,"title":{},"content":{"10":{}},"tags":{}}],["3f6576971397b379d4205ae5451ff5a68edf6c103b2f03c4188ed7075fbb5f04",{"_index":1152,"title":{},"content":{"34":{}},"tags":{}}],["3x",{"_index":728,"title":{},"content":{"24":{}},"tags":{}}],["4",{"_index":218,"title":{},"content":{"10":{},"24":{}},"tags":{}}],["4.4",{"_index":354,"title":{},"content":{"14":{}},"tags":{}}],["4.7",{"_index":267,"title":{},"content":{"11":{}},"tags":{}}],["5",{"_index":224,"title":{},"content":{"10":{}},"tags":{}}],["5.68",{"_index":1041,"title":{},"content":{"28":{}},"tags":{}}],["6",{"_index":229,"title":{},"content":{"10":{},"26":{},"32":{}},"tags":{}}],["6000",{"_index":141,"title":{},"content":{"9":{}},"tags":{}}],["62",{"_index":228,"title":{},"content":{"10":{}},"tags":{}}],["64",{"_index":813,"title":{},"content":{"24":{},"27":{},"30":{},"31":{},"32":{},"35":{}},"tags":{}}],["64.so.2",{"_index":827,"title":{},"content":{"24":{},"27":{}},"tags":{}}],["650",{"_index":98,"title":{},"content":{"7":{}},"tags":{}}],["7",{"_index":234,"title":{},"content":{"10":{},"27":{}},"tags":{}}],["8",{"_index":202,"title":{},"content":{"10":{}},"tags":{}}],["84.7",{"_index":1178,"title":{},"content":{"34":{}},"tags":{}}],["86.5",{"_index":1180,"title":{},"content":{"34":{}},"tags":{}}],["87",{"_index":227,"title":{},"content":{"10":{}},"tags":{}}],["87.6",{"_index":1176,"title":{},"content":{"34":{}},"tags":{}}],["88.7",{"_index":1181,"title":{},"content":{"34":{}},"tags":{}}],["882.5",{"_index":1210,"title":{},"content":{"35":{}},"tags":{}}],["882.6",{"_index":1208,"title":{},"content":{"35":{}},"tags":{}}],["883.6",{"_index":1201,"title":{},"content":{"35":{}},"tags":{}}],["892.5",{"_index":1206,"title":{},"content":{"35":{}},"tags":{}}],["892.7",{"_index":1203,"title":{},"content":{"35":{}},"tags":{}}],["894.6",{"_index":1205,"title":{},"content":{"35":{}},"tags":{}}],["896.6",{"_index":1197,"title":{},"content":{"34":{},"35":{}},"tags":{}}],["aarch64",{"_index":1134,"title":{},"content":{"33":{}},"tags":{}}],["abi",{"_index":657,"title":{},"content":{"23":{},"33":{}},"tags":{}}],["abi/api",{"_index":1154,"title":{},"content":{"34":{}},"tags":{}}],["abov",{"_index":244,"title":{},"content":{"10":{}},"tags":{}}],["accept",{"_index":729,"title":{},"content":{"24":{},"32":{}},"tags":{}}],["accommod",{"_index":104,"title":{},"content":{"7":{}},"tags":{}}],["accomplish",{"_index":16,"title":{"10":{}},"content":{"6":{},"9":{},"10":{}},"tags":{}}],["account",{"_index":44,"title":{},"content":{"7":{}},"tags":{}}],["accur",{"_index":1050,"title":{},"content":{"29":{}},"tags":{}}],["activ",{"_index":505,"title":{},"content":{"18":{}},"tags":{}}],["actual",{"_index":421,"title":{"17":{}},"content":{"17":{},"18":{},"23":{},"24":{},"26":{},"32":{}},"tags":{}}],["ad",{"_index":74,"title":{},"content":{"7":{},"10":{},"11":{}},"tags":{}}],["add",{"_index":295,"title":{},"content":{"11":{}},"tags":{}}],["addit",{"_index":438,"title":{},"content":{"17":{},"22":{},"24":{},"27":{},"31":{},"36":{}},"tags":{}}],["addition",{"_index":1256,"title":{},"content":{"19":{}},"tags":{}}],["adjust",{"_index":1060,"title":{"30":{}},"content":{"30":{}},"tags":{}}],["advanc",{"_index":548,"title":{},"content":{"22":{}},"tags":{}}],["affair",{"_index":751,"title":{},"content":{"24":{}},"tags":{}}],["again",{"_index":670,"title":{},"content":{"23":{},"31":{},"35":{}},"tags":{}}],["against",{"_index":607,"title":{},"content":{"22":{},"24":{}},"tags":{}}],["aggress",{"_index":562,"title":{},"content":{"22":{},"31":{}},"tags":{}}],["ahead",{"_index":315,"title":{},"content":{"11":{}},"tags":{}}],["ain't",{"_index":1021,"title":{},"content":{"27":{}},"tags":{}}],["alfi",{"_index":3,"title":{},"content":{"6":{}},"tags":{}}],["allow",{"_index":836,"title":{},"content":{"24":{},"25":{}},"tags":{}}],["alon",{"_index":134,"title":{},"content":{"9":{}},"tags":{}}],["along",{"_index":330,"title":{},"content":{"12":{}},"tags":{}}],["alpha",{"_index":726,"title":{},"content":{"24":{}},"tags":{}}],["alreadi",{"_index":187,"title":{},"content":{"10":{},"26":{},"31":{}},"tags":{}}],["although",{"_index":43,"title":{},"content":{"7":{}},"tags":{}}],["alway",{"_index":189,"title":{},"content":{"10":{},"12":{},"35":{}},"tags":{}}],["ambit",{"_index":1253,"title":{},"content":{"19":{}},"tags":{}}],["amiss",{"_index":868,"title":{},"content":{"24":{}},"tags":{}}],["amongst",{"_index":577,"title":{},"content":{"22":{}},"tags":{}}],["amount",{"_index":433,"title":{},"content":{"17":{}},"tags":{}}],["androidniss",{"_index":81,"title":{},"content":{"7":{}},"tags":{}}],["anim",{"_index":782,"title":{},"content":{"24":{}},"tags":{}}],["announc",{"_index":357,"title":{},"content":{"14":{}},"tags":{}}],["anoth",{"_index":545,"title":{},"content":{"18":{},"26":{},"29":{}},"tags":{}}],["anyon",{"_index":1237,"title":{},"content":{"36":{}},"tags":{}}],["anyth",{"_index":1016,"title":{},"content":{"27":{}},"tags":{}}],["api",{"_index":444,"title":{},"content":{"17":{},"33":{}},"tags":{}}],["app",{"_index":165,"title":{},"content":{"9":{},"11":{}},"tags":{}}],["appli",{"_index":219,"title":{},"content":{"10":{},"22":{},"30":{},"31":{},"33":{}},"tags":{}}],["applic",{"_index":213,"title":{},"content":{"10":{},"11":{},"17":{},"24":{}},"tags":{}}],["approach",{"_index":514,"title":{},"content":{"18":{},"22":{}},"tags":{}}],["appropri",{"_index":606,"title":{},"content":{"22":{}},"tags":{}}],["appstream",{"_index":204,"title":{},"content":{"10":{},"11":{}},"tags":{}}],["architectur",{"_index":955,"title":{},"content":{"27":{},"33":{}},"tags":{}}],["aren't",{"_index":1024,"title":{},"content":{"27":{},"30":{}},"tags":{}}],["around",{"_index":53,"title":{},"content":{"7":{},"22":{},"26":{},"30":{}},"tags":{}}],["ask",{"_index":458,"title":{},"content":{"17":{}},"tags":{}}],["assum",{"_index":393,"title":{},"content":{"15":{}},"tags":{}}],["attach",{"_index":190,"title":{},"content":{"10":{}},"tags":{}}],["attempt",{"_index":1133,"title":{},"content":{"33":{}},"tags":{}}],["attent",{"_index":395,"title":{},"content":{"15":{}},"tags":{}}],["automat",{"_index":902,"title":{},"content":{"26":{}},"tags":{}}],["avail",{"_index":618,"title":{"23":{}},"content":{"24":{},"26":{},"35":{}},"tags":{}}],["avoid",{"_index":1222,"title":{},"content":{"36":{}},"tags":{}}],["avx2",{"_index":962,"title":{},"content":{"27":{}},"tags":{}}],["avx512",{"_index":963,"title":{},"content":{"27":{}},"tags":{}}],["away",{"_index":96,"title":{},"content":{"7":{},"14":{},"15":{},"16":{},"26":{}},"tags":{}}],["awesom",{"_index":787,"title":{},"content":{"24":{},"30":{}},"tags":{}}],["back",{"_index":353,"title":{},"content":{"14":{},"17":{},"18":{},"19":{},"24":{},"32":{},"33":{},"35":{}},"tags":{}}],["background",{"_index":22,"title":{"7":{}},"content":{},"tags":{}}],["base",{"_index":540,"title":{},"content":{"18":{},"22":{}},"tags":{}}],["baselin",{"_index":866,"title":{},"content":{"24":{},"27":{},"30":{},"35":{}},"tags":{}}],["bash",{"_index":385,"title":{},"content":{"15":{},"17":{}},"tags":{}}],["basic",{"_index":865,"title":{},"content":{"24":{},"25":{}},"tags":{}}],["batteri",{"_index":576,"title":{},"content":{"22":{}},"tags":{}}],["be",{"_index":753,"title":{},"content":{"24":{},"27":{},"28":{},"31":{}},"tags":{}}],["bear",{"_index":608,"title":{},"content":{"22":{},"36":{}},"tags":{}}],["becom",{"_index":256,"title":{},"content":{"10":{},"24":{}},"tags":{}}],["befor",{"_index":148,"title":{},"content":{"9":{},"32":{}},"tags":{}}],["begin",{"_index":365,"title":{},"content":{"14":{},"24":{}},"tags":{}}],["beginn",{"_index":71,"title":{},"content":{"7":{}},"tags":{}}],["behind",{"_index":635,"title":{},"content":{"23":{}},"tags":{}}],["believ",{"_index":1257,"title":{},"content":{"19":{}},"tags":{}}],["below",{"_index":404,"title":{},"content":{"16":{}},"tags":{}}],["benchmark",{"_index":602,"title":{"30":{}},"content":{"22":{},"24":{},"25":{},"26":{},"27":{},"29":{},"30":{},"32":{},"33":{},"34":{},"35":{},"36":{}},"tags":{}}],["benefit",{"_index":439,"title":{},"content":{"17":{},"22":{},"23":{},"24":{}},"tags":{}}],["best",{"_index":272,"title":{},"content":{"11":{}},"tags":{}}],["beta",{"_index":367,"title":{},"content":{"14":{}},"tags":{}}],["better",{"_index":150,"title":{},"content":{"9":{},"10":{},"23":{},"24":{},"27":{},"28":{},"31":{}},"tags":{}}],["between",{"_index":91,"title":{},"content":{"7":{}},"tags":{}}],["big",{"_index":1075,"title":{},"content":{"30":{}},"tags":{}}],["bigger",{"_index":630,"title":{},"content":{"23":{},"31":{}},"tags":{}}],["bin",{"_index":474,"title":{},"content":{"18":{}},"tags":{}}],["binari",{"_index":528,"title":{},"content":{"18":{},"22":{},"23":{},"24":{},"26":{},"29":{}},"tags":{}}],["bit",{"_index":21,"title":{"7":{}},"content":{"26":{},"33":{}},"tags":{}}],["black",{"_index":1255,"title":{},"content":{"19":{}},"tags":{}}],["bloat",{"_index":1108,"title":{},"content":{"31":{}},"tags":{}}],["blog",{"_index":343,"title":{},"content":{"13":{},"15":{},"19":{},"36":{}},"tags":{}}],["bolt",{"_index":449,"title":{},"content":{"17":{},"23":{},"36":{}},"tags":{}}],["both",{"_index":830,"title":{},"content":{"24":{},"27":{}},"tags":{}}],["bother",{"_index":128,"title":{"9":{}},"content":{"9":{}},"tags":{}}],["bottl",{"_index":1026,"title":{},"content":{"27":{}},"tags":{}}],["bottleneck",{"_index":611,"title":{},"content":{"22":{},"29":{},"33":{}},"tags":{}}],["box",{"_index":553,"title":{},"content":{"19":{},"22":{},"23":{}},"tags":{}}],["break",{"_index":632,"title":{},"content":{"23":{},"33":{}},"tags":{}}],["bring",{"_index":119,"title":{},"content":{"8":{},"35":{}},"tags":{}}],["brows",{"_index":700,"title":{},"content":{"24":{}},"tags":{}}],["browser",{"_index":698,"title":{},"content":{"24":{}},"tags":{}}],["brrrrrr",{"_index":947,"title":{"27":{}},"content":{},"tags":{}}],["bsd",{"_index":708,"title":{},"content":{"24":{}},"tags":{}}],["budget",{"_index":1232,"title":{},"content":{"36":{}},"tags":{}}],["budgi",{"_index":415,"title":{},"content":{"16":{}},"tags":{}}],["build",{"_index":236,"title":{},"content":{"10":{},"18":{},"22":{},"23":{},"24":{},"25":{},"26":{},"27":{},"31":{},"32":{},"34":{}},"tags":{}}],["builddep",{"_index":737,"title":{},"content":{"24":{}},"tags":{}}],["built",{"_index":900,"title":{},"content":{"26":{},"27":{},"33":{}},"tags":{}}],["bump",{"_index":928,"title":{},"content":{"26":{}},"tags":{}}],["bunch",{"_index":543,"title":{},"content":{"18":{},"26":{},"27":{},"31":{}},"tags":{}}],["byte",{"_index":727,"title":{},"content":{"24":{}},"tags":{}}],["c",{"_index":1127,"title":{},"content":{"33":{}},"tags":{}}],["c2c2f521fa468e3c5949ab698c2da410f5dce1c5e99f5ad9e70e0e8446b86505",{"_index":705,"title":{},"content":{"24":{}},"tags":{}}],["calamar",{"_index":539,"title":{},"content":{"18":{}},"tags":{}}],["call",{"_index":105,"title":{"14":{}},"content":{"7":{},"18":{}},"tags":{}}],["callgraph",{"_index":1029,"title":{},"content":{"27":{}},"tags":{}}],["came",{"_index":64,"title":{},"content":{"7":{}},"tags":{}}],["can't",{"_index":965,"title":{},"content":{"27":{},"31":{}},"tags":{}}],["canon",{"_index":1135,"title":{},"content":{"33":{},"34":{}},"tags":{}}],["capabl",{"_index":948,"title":{},"content":{"27":{}},"tags":{}}],["care",{"_index":655,"title":{},"content":{"23":{},"24":{},"29":{}},"tags":{}}],["cargo",{"_index":220,"title":{},"content":{"10":{}},"tags":{}}],["case",{"_index":829,"title":{},"content":{"24":{},"26":{},"27":{},"31":{},"33":{},"35":{}},"tags":{}}],["casual",{"_index":699,"title":{},"content":{"24":{}},"tags":{}}],["center",{"_index":280,"title":{},"content":{"11":{},"17":{}},"tags":{}}],["cflags=\"${cflag",{"_index":1100,"title":{},"content":{"31":{}},"tags":{}}],["challeng",{"_index":1244,"title":{},"content":{"19":{}},"tags":{}}],["chanc",{"_index":154,"title":{},"content":{"9":{}},"tags":{}}],["chang",{"_index":133,"title":{},"content":{"9":{},"10":{},"16":{},"19":{},"22":{},"34":{}},"tags":{}}],["channel",{"_index":125,"title":{},"content":{"8":{},"19":{},"24":{}},"tags":{}}],["chat",{"_index":89,"title":{},"content":{"7":{}},"tags":{}}],["check",{"_index":464,"title":{},"content":{"17":{},"26":{},"34":{}},"tags":{}}],["chip",{"_index":95,"title":{},"content":{"7":{}},"tags":{}}],["choic",{"_index":309,"title":{},"content":{"11":{},"23":{}},"tags":{}}],["choos",{"_index":580,"title":{"29":{}},"content":{"22":{},"24":{}},"tags":{}}],["chosen",{"_index":1054,"title":{},"content":{"29":{}},"tags":{}}],["chroot",{"_index":903,"title":{},"content":{"26":{}},"tags":{}}],["chuck",{"_index":941,"title":{},"content":{"26":{}},"tags":{}}],["circl",{"_index":1120,"title":{},"content":{"33":{}},"tags":{}}],["citizen",{"_index":443,"title":{},"content":{"17":{}},"tags":{}}],["clang",{"_index":612,"title":{},"content":{"23":{},"27":{}},"tags":{"22":{}}}],["class",{"_index":442,"title":{},"content":{"17":{}},"tags":{}}],["claus",{"_index":709,"title":{},"content":{"24":{}},"tags":{}}],["clean",{"_index":0,"title":{"6":{}},"content":{"10":{}},"tags":{}}],["cleanup",{"_index":7,"title":{},"content":{"6":{},"7":{},"8":{},"10":{},"12":{}},"tags":{"6":{}}}],["click",{"_index":412,"title":{},"content":{"16":{}},"tags":{}}],["close",{"_index":246,"title":{"13":{}},"content":{"10":{},"18":{},"30":{}},"tags":{}}],["closer",{"_index":463,"title":{},"content":{"17":{}},"tags":{}}],["cmake_ninja",{"_index":1155,"title":{},"content":{"34":{}},"tags":{}}],["code",{"_index":935,"title":{},"content":{"26":{},"31":{},"33":{}},"tags":{}}],["collect",{"_index":666,"title":{},"content":{"23":{}},"tags":{}}],["color",{"_index":731,"title":{},"content":{"24":{}},"tags":{}}],["combin",{"_index":644,"title":{},"content":{"23":{},"30":{}},"tags":{}}],["come",{"_index":82,"title":{},"content":{"7":{},"9":{},"16":{}},"tags":{}}],["command",{"_index":381,"title":{},"content":{"15":{}},"tags":{}}],["common",{"_index":687,"title":{},"content":{"24":{},"33":{},"36":{}},"tags":{}}],["commun",{"_index":116,"title":{},"content":{"8":{},"9":{},"19":{}},"tags":{}}],["compar",{"_index":636,"title":{},"content":{"23":{},"24":{}},"tags":{}}],["compat",{"_index":582,"title":{},"content":{"22":{},"27":{},"33":{},"34":{}},"tags":{}}],["compil",{"_index":527,"title":{},"content":{"18":{},"22":{},"23":{},"27":{},"28":{},"31":{},"34":{},"35":{}},"tags":{}}],["complet",{"_index":245,"title":{},"content":{"10":{},"18":{}},"tags":{}}],["compon",{"_index":710,"title":{},"content":{"24":{},"34":{}},"tags":{}}],["comprehens",{"_index":898,"title":{},"content":{"26":{},"31":{}},"tags":{}}],["compress",{"_index":716,"title":{},"content":{"24":{},"34":{}},"tags":{}}],["concept",{"_index":299,"title":{},"content":{"11":{}},"tags":{}}],["confid",{"_index":832,"title":{},"content":{"24":{}},"tags":{}}],["configur",{"_index":752,"title":{},"content":{"24":{},"31":{}},"tags":{}}],["confirm",{"_index":1187,"title":{},"content":{"34":{}},"tags":{}}],["confus",{"_index":47,"title":{},"content":{"7":{}},"tags":{}}],["consid",{"_index":137,"title":{},"content":{"9":{}},"tags":{}}],["consist",{"_index":1230,"title":{},"content":{"36":{}},"tags":{}}],["constrain",{"_index":1233,"title":{},"content":{"36":{}},"tags":{}}],["contain",{"_index":140,"title":{},"content":{"9":{},"24":{},"31":{},"34":{}},"tags":{}}],["content",{"_index":1249,"title":{},"content":{"19":{}},"tags":{}}],["context",{"_index":1258,"title":{},"content":{"19":{}},"tags":{}}],["continu",{"_index":69,"title":{},"content":{"7":{},"12":{},"16":{}},"tags":{}}],["contribut",{"_index":13,"title":{},"content":{"6":{},"7":{},"12":{}},"tags":{}}],["contributor",{"_index":100,"title":{},"content":{"7":{},"8":{},"9":{},"10":{},"13":{},"18":{},"19":{}},"tags":{}}],["control",{"_index":561,"title":{},"content":{"22":{}},"tags":{}}],["cost",{"_index":640,"title":{},"content":{"23":{},"30":{}},"tags":{}}],["count",{"_index":195,"title":{},"content":{"10":{},"26":{}},"tags":{}}],["coupl",{"_index":379,"title":{},"content":{"15":{},"24":{},"33":{}},"tags":{}}],["cover",{"_index":934,"title":{},"content":{"26":{},"31":{}},"tags":{}}],["cpu",{"_index":957,"title":{},"content":{"27":{}},"tags":{}}],["craft",{"_index":1086,"title":{},"content":{"31":{}},"tags":{}}],["creat",{"_index":145,"title":{},"content":{"9":{},"10":{},"11":{}},"tags":{}}],["crew",{"_index":8,"title":{},"content":{"6":{},"7":{},"8":{},"10":{},"12":{}},"tags":{}}],["critic",{"_index":530,"title":{},"content":{"18":{}},"tags":{}}],["cross",{"_index":541,"title":{},"content":{"18":{}},"tags":{}}],["crucial",{"_index":996,"title":{},"content":{"27":{}},"tags":{}}],["cruft",{"_index":147,"title":{},"content":{"9":{}},"tags":{}}],["curat",{"_index":307,"title":{},"content":{"11":{},"26":{}},"tags":{}}],["current",{"_index":122,"title":{},"content":{"8":{},"10":{},"16":{},"17":{}},"tags":{}}],["cwebp",{"_index":774,"title":{},"content":{"24":{},"25":{},"26":{},"27":{},"28":{},"32":{}},"tags":{}}],["cwebp.data",{"_index":1033,"title":{},"content":{"28":{}},"tags":{}}],["cxxflags=\"${cxxflag",{"_index":1101,"title":{},"content":{"31":{}},"tags":{}}],["damn",{"_index":841,"title":{},"content":{"24":{},"28":{},"34":{}},"tags":{}}],["dan",{"_index":347,"title":{},"content":{"13":{}},"tags":{}}],["data",{"_index":667,"title":{},"content":{"23":{},"26":{},"34":{}},"tags":{}}],["date",{"_index":194,"title":{},"content":{"10":{}},"tags":{}}],["day",{"_index":42,"title":{},"content":{"7":{},"18":{},"23":{}},"tags":{}}],["dbuild_shared_libs=on",{"_index":1158,"title":{},"content":{"34":{}},"tags":{}}],["dead",{"_index":465,"title":{"18":{}},"content":{"26":{}},"tags":{}}],["decad",{"_index":428,"title":{},"content":{"17":{}},"tags":{}}],["decid",{"_index":101,"title":{},"content":{"7":{},"17":{}},"tags":{}}],["decod",{"_index":697,"title":{},"content":{"24":{},"25":{},"26":{},"27":{},"29":{},"30":{},"31":{},"32":{},"34":{},"35":{}},"tags":{}}],["deem",{"_index":622,"title":{},"content":{"23":{},"25":{}},"tags":{}}],["default",{"_index":585,"title":{},"content":{"22":{},"23":{},"24":{},"31":{}},"tags":{}}],["depend",{"_index":531,"title":{},"content":{"18":{},"23":{}},"tags":{}}],["deprec",{"_index":240,"title":{},"content":{"10":{}},"tags":{}}],["descript",{"_index":293,"title":{},"content":{"11":{},"24":{},"34":{}},"tags":{}}],["detail",{"_index":344,"title":{},"content":{"13":{}},"tags":{}}],["dev/nul",{"_index":844,"title":{},"content":{"24":{},"25":{},"26":{},"27":{},"28":{},"30":{},"32":{},"34":{}},"tags":{}}],["devel",{"_index":735,"title":{},"content":{"24":{},"34":{}},"tags":{}}],["develop",{"_index":793,"title":{},"content":{"19":{},"24":{},"35":{}},"tags":{}}],["devlog",{"_index":20,"title":{"19":{}},"content":{"19":{}},"tags":{"6":{},"14":{},"18":{},"19":{}}}],["die",{"_index":1166,"title":{},"content":{"34":{}},"tags":{}}],["differ",{"_index":592,"title":{},"content":{"22":{},"23":{}},"tags":{}}],["dig",{"_index":1046,"title":{},"content":{"29":{}},"tags":{}}],["diggiti",{"_index":1183,"title":{},"content":{"34":{}},"tags":{}}],["digit",{"_index":36,"title":{},"content":{"7":{}},"tags":{}}],["dinstall_lib_dir=%libdir",{"_index":1159,"title":{},"content":{"34":{}},"tags":{}}],["dip",{"_index":323,"title":{},"content":{"12":{}},"tags":{}}],["direct",{"_index":520,"title":{},"content":{"18":{}},"tags":{}}],["directli",{"_index":522,"title":{},"content":{"18":{},"29":{},"35":{}},"tags":{}}],["dirti",{"_index":448,"title":{},"content":{"17":{}},"tags":{}}],["disabl",{"_index":747,"title":{},"content":{"24":{}},"tags":{}}],["disappoint",{"_index":896,"title":{},"content":{"26":{}},"tags":{}}],["discov",{"_index":283,"title":{},"content":{"11":{},"17":{}},"tags":{}}],["discuss",{"_index":1225,"title":{},"content":{"36":{}},"tags":{}}],["distribut",{"_index":560,"title":{},"content":{"22":{},"23":{}},"tags":{}}],["ditch",{"_index":436,"title":{},"content":{"17":{}},"tags":{}}],["do",{"_index":70,"title":{},"content":{"7":{},"9":{},"12":{},"13":{},"17":{},"29":{}},"tags":{}}],["doc",{"_index":1090,"title":{},"content":{"31":{}},"tags":{}}],["document",{"_index":251,"title":{},"content":{"10":{},"12":{}},"tags":{}}],["doesn't",{"_index":933,"title":{},"content":{"19":{},"26":{},"31":{},"34":{}},"tags":{}}],["don't",{"_index":350,"title":{"14":{}},"content":{"24":{},"31":{}},"tags":{}}],["done",{"_index":181,"title":{},"content":{"10":{},"16":{},"24":{},"26":{},"35":{}},"tags":{}}],["doubt",{"_index":658,"title":{},"content":{"23":{}},"tags":{}}],["down",{"_index":66,"title":{},"content":{"7":{},"35":{}},"tags":{}}],["downsid",{"_index":600,"title":{},"content":{"22":{}},"tags":{}}],["dozen",{"_index":1130,"title":{},"content":{"33":{}},"tags":{}}],["drag",{"_index":427,"title":{},"content":{"17":{}},"tags":{}}],["dramat",{"_index":1059,"title":{},"content":{"29":{}},"tags":{}}],["drawback",{"_index":625,"title":{},"content":{"23":{}},"tags":{}}],["due",{"_index":693,"title":{},"content":{"24":{},"31":{},"33":{}},"tags":{}}],["dure",{"_index":57,"title":{},"content":{"7":{},"23":{},"26":{},"27":{},"31":{}},"tags":{}}],["dutifulli",{"_index":394,"title":{},"content":{"15":{}},"tags":{}}],["dwebp",{"_index":773,"title":{},"content":{"24":{},"25":{},"26":{},"27":{},"28":{},"29":{},"30":{},"32":{},"34":{}},"tags":{}}],["dwebp.data",{"_index":1032,"title":{},"content":{"28":{}},"tags":{}}],["dwith_gtest=off",{"_index":1157,"title":{},"content":{"34":{}},"tags":{}}],["dzlib_compat=on",{"_index":1156,"title":{},"content":{"34":{}},"tags":{}}],["each",{"_index":85,"title":{},"content":{"7":{}},"tags":{}}],["eager",{"_index":317,"title":{},"content":{"12":{},"15":{}},"tags":{}}],["earli",{"_index":1045,"title":{},"content":{"29":{}},"tags":{}}],["earlier",{"_index":1117,"title":{},"content":{"33":{},"34":{}},"tags":{}}],["easi",{"_index":269,"title":{},"content":{"11":{},"24":{}},"tags":{}}],["easier",{"_index":943,"title":{},"content":{"26":{}},"tags":{}}],["easiest",{"_index":897,"title":{},"content":{"26":{}},"tags":{}}],["ecosystem",{"_index":1123,"title":{},"content":{"33":{}},"tags":{}}],["edit",{"_index":416,"title":{},"content":{"16":{}},"tags":{}}],["editor'",{"_index":308,"title":{},"content":{"11":{}},"tags":{}}],["effect",{"_index":1025,"title":{},"content":{"27":{}},"tags":{}}],["effort",{"_index":339,"title":{},"content":{"13":{},"16":{}},"tags":{}}],["embarrass",{"_index":432,"title":{},"content":{"17":{}},"tags":{}}],["employ",{"_index":1121,"title":{},"content":{"33":{}},"tags":{}}],["emul32",{"_index":732,"title":{},"content":{"24":{},"26":{},"27":{},"34":{}},"tags":{}}],["enabl",{"_index":587,"title":{},"content":{"22":{},"23":{},"24":{},"25":{},"27":{}},"tags":{}}],["encod",{"_index":776,"title":{},"content":{"24":{},"25":{},"26":{},"27":{},"32":{}},"tags":{}}],["encount",{"_index":406,"title":{},"content":{"16":{},"17":{}},"tags":{}}],["encourag",{"_index":30,"title":{},"content":{"7":{},"19":{}},"tags":{}}],["end",{"_index":191,"title":{},"content":{"10":{},"12":{},"18":{},"22":{},"24":{},"26":{},"32":{},"34":{}},"tags":{}}],["enjoy",{"_index":174,"title":{},"content":{"9":{}},"tags":{}}],["enough",{"_index":374,"title":{},"content":{"15":{},"23":{},"26":{}},"tags":{}}],["ensur",{"_index":791,"title":{},"content":{"24":{},"29":{},"30":{}},"tags":{}}],["entertain",{"_index":1235,"title":{},"content":{"36":{}},"tags":{}}],["enthusiast",{"_index":387,"title":{},"content":{"15":{}},"tags":{}}],["entiti",{"_index":1247,"title":{},"content":{"19":{}},"tags":{}}],["environ",{"_index":904,"title":{},"content":{"26":{},"31":{}},"tags":{}}],["eopkg",{"_index":380,"title":{"18":{}},"content":{"15":{},"17":{},"18":{},"34":{}},"tags":{"18":{}}}],["eopkg3",{"_index":495,"title":{},"content":{"18":{}},"tags":{}}],["eopkg4",{"_index":473,"title":{},"content":{"18":{}},"tags":{}}],["equival",{"_index":721,"title":{},"content":{"24":{}},"tags":{}}],["ermo",{"_index":388,"title":{},"content":{"15":{},"17":{}},"tags":{}}],["especi",{"_index":899,"title":{},"content":{"26":{},"36":{}},"tags":{}}],["etc",{"_index":294,"title":{},"content":{"11":{}},"tags":{}}],["evan",{"_index":538,"title":{},"content":{"18":{}},"tags":{}}],["even",{"_index":143,"title":{},"content":{"9":{},"15":{},"18":{},"22":{},"23":{}},"tags":{}}],["event",{"_index":29,"title":{},"content":{"7":{}},"tags":{}}],["eventu",{"_index":509,"title":{},"content":{"18":{}},"tags":{}}],["everyon",{"_index":2,"title":{},"content":{"6":{},"13":{}},"tags":{}}],["everyth",{"_index":748,"title":{},"content":{"24":{},"31":{}},"tags":{}}],["exactli",{"_index":492,"title":{},"content":{"18":{},"24":{},"29":{},"31":{}},"tags":{}}],["exampl",{"_index":960,"title":{},"content":{"27":{},"31":{}},"tags":{}}],["examples/cwebp",{"_index":909,"title":{},"content":{"26":{}},"tags":{}}],["examples/dwebp",{"_index":906,"title":{},"content":{"26":{}},"tags":{}}],["except",{"_index":890,"title":{"26":{}},"content":{},"tags":{}}],["exchang",{"_index":35,"title":{},"content":{"7":{}},"tags":{}}],["excit",{"_index":59,"title":{},"content":{"7":{},"11":{},"18":{}},"tags":{}}],["exclus",{"_index":1062,"title":{},"content":{"30":{}},"tags":{}}],["excus",{"_index":39,"title":{},"content":{"7":{}},"tags":{}}],["execut",{"_index":1096,"title":{},"content":{"31":{}},"tags":{}}],["exist",{"_index":371,"title":{},"content":{"14":{}},"tags":{}}],["expect",{"_index":521,"title":{},"content":{"18":{}},"tags":{}}],["experi",{"_index":46,"title":{},"content":{"7":{},"11":{},"15":{},"22":{},"26":{}},"tags":{}}],["explain",{"_index":1040,"title":{},"content":{"28":{}},"tags":{}}],["explor",{"_index":306,"title":{},"content":{"11":{},"22":{},"25":{},"26":{},"27":{}},"tags":{}}],["export",{"_index":1099,"title":{},"content":{"31":{}},"tags":{}}],["extens",{"_index":1051,"title":{},"content":{"29":{}},"tags":{}}],["extra",{"_index":790,"title":{},"content":{"24":{},"27":{}},"tags":{}}],["extrem",{"_index":1128,"title":{},"content":{"33":{}},"tags":{}}],["ey",{"_index":186,"title":{},"content":{"10":{},"19":{},"24":{}},"tags":{}}],["facilit",{"_index":1241,"title":{},"content":{"19":{}},"tags":{}}],["fact",{"_index":1110,"title":{},"content":{"31":{}},"tags":{}}],["faf",{"_index":596,"title":{},"content":{"22":{}},"tags":{}}],["fail",{"_index":1218,"title":{},"content":{"36":{}},"tags":{}}],["fairli",{"_index":1018,"title":{},"content":{"27":{}},"tags":{}}],["fallen",{"_index":1131,"title":{},"content":{"33":{}},"tags":{}}],["far",{"_index":17,"title":{},"content":{"6":{},"26":{},"27":{}},"tags":{}}],["fashion",{"_index":1126,"title":{},"content":{"33":{}},"tags":{}}],["fast",{"_index":1084,"title":{},"content":{"31":{}},"tags":{}}],["faster",{"_index":581,"title":{},"content":{"22":{},"23":{}},"tags":{}}],["favor",{"_index":437,"title":{},"content":{"17":{}},"tags":{}}],["featur",{"_index":310,"title":{},"content":{"11":{}},"tags":{}}],["feedback",{"_index":1094,"title":{},"content":{"31":{}},"tags":{}}],["feel",{"_index":159,"title":{},"content":{"9":{}},"tags":{}}],["feet",{"_index":87,"title":{},"content":{"7":{}},"tags":{}}],["few",{"_index":61,"title":{},"content":{"7":{},"10":{}},"tags":{}}],["fi",{"_index":1102,"title":{},"content":{"31":{}},"tags":{}}],["fiddl",{"_index":905,"title":{},"content":{"26":{}},"tags":{}}],["fight",{"_index":426,"title":{},"content":{"17":{}},"tags":{}}],["file",{"_index":296,"title":{},"content":{"11":{},"24":{},"26":{},"27":{},"29":{},"32":{},"34":{}},"tags":{}}],["filetype=\"executable\">/usr/bin/cwebp/usr/bin/dwebp/usr/bin/gif2webp/usr/bin/img2webp/usr/bin/vwebp/usr/bin/webpinfo/usr/bin/webpmux/usr/lib64/glibc",{"_index":970,"title":{},"content":{"27":{}},"tags":{}}],["fill",{"_index":156,"title":{},"content":{"9":{}},"tags":{}}],["final",{"_index":38,"title":{"32":{},"36":{}},"content":{"7":{},"11":{},"23":{}},"tags":{}}],["find",{"_index":605,"title":{},"content":{"22":{},"34":{}},"tags":{}}],["finish",{"_index":574,"title":{},"content":{"22":{}},"tags":{}}],["first",{"_index":48,"title":{},"content":{"7":{},"9":{},"12":{},"17":{},"18":{},"28":{}},"tags":{}}],["firstpost",{"_index":1264,"title":{},"content":{},"tags":{"19":{}}}],["fix",{"_index":510,"title":{},"content":{"18":{}},"tags":{}}],["flag",{"_index":586,"title":{},"content":{"22":{},"23":{},"25":{},"27":{},"31":{}},"tags":{}}],["flatpak",{"_index":441,"title":{},"content":{"17":{}},"tags":{}}],["flaw",{"_index":1198,"title":{},"content":{"34":{}},"tags":{}}],["flto",{"_index":637,"title":{},"content":{"23":{}},"tags":{}}],["focu",{"_index":263,"title":{},"content":{"11":{}},"tags":{}}],["follow",{"_index":329,"title":{},"content":{"12":{},"13":{},"15":{}},"tags":{}}],["font",{"_index":206,"title":{},"content":{"10":{}},"tags":{}}],["fork",{"_index":1139,"title":{},"content":{"33":{}},"tags":{}}],["form",{"_index":1248,"title":{},"content":{"19":{}},"tags":{}}],["format",{"_index":685,"title":{},"content":{"24":{},"26":{},"27":{},"29":{}},"tags":{}}],["found",{"_index":676,"title":{},"content":{"23":{},"26":{},"27":{},"33":{}},"tags":{}}],["fprofil",{"_index":1088,"title":{},"content":{"31":{}},"tags":{}}],["frankli",{"_index":516,"title":{},"content":{"18":{}},"tags":{}}],["friend",{"_index":502,"title":{},"content":{"18":{}},"tags":{}}],["fruit",{"_index":609,"title":{},"content":{"22":{}},"tags":{}}],["frustrat",{"_index":321,"title":{},"content":{"12":{}},"tags":{}}],["function",{"_index":1092,"title":{},"content":{"31":{}},"tags":{}}],["futur",{"_index":1228,"title":{},"content":{"36":{}},"tags":{}}],["gain",{"_index":927,"title":{},"content":{"26":{},"27":{}},"tags":{}}],["gate",{"_index":1216,"title":{},"content":{"35":{}},"tags":{}}],["gave",{"_index":1080,"title":{},"content":{"31":{}},"tags":{}}],["gcc",{"_index":649,"title":{},"content":{"23":{},"31":{},"34":{}},"tags":{}}],["gener",{"_index":674,"title":{"33":{}},"content":{"23":{},"27":{},"28":{},"34":{}},"tags":{}}],["get",{"_index":247,"title":{},"content":{"10":{},"12":{},"14":{},"17":{},"22":{},"23":{},"27":{},"28":{},"30":{},"33":{}},"tags":{}}],["getsolu",{"_index":1260,"title":{},"content":{"19":{}},"tags":{}}],["gezeliu",{"_index":80,"title":{},"content":{"7":{}},"tags":{}}],["gif",{"_index":477,"title":{},"content":{"18":{}},"tags":{}}],["giflib",{"_index":744,"title":{},"content":{"24":{}},"tags":{}}],["github",{"_index":1261,"title":{},"content":{"19":{}},"tags":{}}],["give",{"_index":177,"title":{},"content":{"9":{},"12":{},"31":{},"35":{}},"tags":{}}],["given",{"_index":1093,"title":{},"content":{"31":{}},"tags":{}}],["glibc",{"_index":615,"title":{},"content":{"27":{}},"tags":{"22":{}}}],["global",{"_index":599,"title":{},"content":{"22":{}},"tags":{}}],["gnome",{"_index":281,"title":{},"content":{"11":{},"12":{},"17":{}},"tags":{}}],["gnu",{"_index":613,"title":{},"content":{"27":{}},"tags":{"22":{}}}],["go",{"_index":867,"title":{"27":{}},"content":{"19":{},"24":{},"33":{},"35":{}},"tags":{}}],["goal",{"_index":118,"title":{},"content":{"8":{},"11":{},"19":{}},"tags":{}}],["god",{"_index":1035,"title":{},"content":{"28":{}},"tags":{}}],["goe",{"_index":497,"title":{},"content":{"18":{}},"tags":{}}],["good",{"_index":292,"title":{},"content":{"11":{},"27":{},"29":{},"31":{},"35":{},"36":{}},"tags":{}}],["goodby",{"_index":275,"title":{},"content":{"11":{}},"tags":{}}],["googl",{"_index":695,"title":{},"content":{"24":{}},"tags":{}}],["gotten",{"_index":144,"title":{},"content":{"9":{}},"tags":{}}],["grab",{"_index":833,"title":{},"content":{"24":{}},"tags":{}}],["graphic",{"_index":212,"title":{},"content":{"10":{},"11":{}},"tags":{}}],["great",{"_index":889,"title":{"26":{}},"content":{"27":{},"30":{}},"tags":{}}],["greater",{"_index":565,"title":{},"content":{"22":{},"23":{}},"tags":{}}],["greatli",{"_index":566,"title":{},"content":{"22":{}},"tags":{}}],["group",{"_index":103,"title":{},"content":{"7":{},"8":{},"25":{}},"tags":{}}],["guarante",{"_index":626,"title":{},"content":{"23":{}},"tags":{}}],["guess",{"_index":775,"title":{},"content":{"24":{}},"tags":{}}],["guid",{"_index":184,"title":{},"content":{"10":{},"23":{},"26":{}},"tags":{}}],["h",{"_index":777,"title":{},"content":{"24":{}},"tags":{}}],["habit",{"_index":794,"title":{},"content":{"24":{}},"tags":{}}],["hacktoberfest",{"_index":26,"title":{},"content":{"7":{}},"tags":{}}],["halv",{"_index":1185,"title":{},"content":{"34":{}},"tags":{}}],["hammer",{"_index":389,"title":{},"content":{"15":{}},"tags":{}}],["handi",{"_index":937,"title":{},"content":{"26":{}},"tags":{}}],["hang",{"_index":50,"title":{},"content":{"7":{}},"tags":{}}],["happen",{"_index":1048,"title":{},"content":{"29":{},"31":{}},"tags":{}}],["happi",{"_index":262,"title":{},"content":{"10":{}},"tags":{}}],["hard",{"_index":1079,"title":{},"content":{"31":{},"33":{}},"tags":{}}],["hardli",{"_index":1039,"title":{},"content":{"28":{}},"tags":{}}],["hardwar",{"_index":568,"title":{},"content":{"22":{},"27":{},"31":{}},"tags":{}}],["have",{"_index":838,"title":{},"content":{"24":{},"33":{}},"tags":{}}],["header",{"_index":1190,"title":{},"content":{"34":{}},"tags":{}}],["healthi",{"_index":1112,"title":{},"content":{"32":{}},"tags":{}}],["heard",{"_index":683,"title":{},"content":{"24":{}},"tags":{}}],["heavi",{"_index":572,"title":{},"content":{"22":{}},"tags":{}}],["hello",{"_index":1,"title":{},"content":{"6":{}},"tags":{"19":{}}}],["help",{"_index":152,"title":{"12":{}},"content":{"9":{},"12":{},"19":{},"28":{},"35":{}},"tags":{}}],["here",{"_index":4,"title":{},"content":{"6":{},"12":{},"24":{},"26":{},"27":{},"28":{},"29":{},"30":{},"31":{},"34":{},"36":{}},"tags":{}}],["here'",{"_index":405,"title":{},"content":{"16":{},"18":{},"34":{}},"tags":{}}],["hi",{"_index":289,"title":{},"content":{"11":{}},"tags":{}}],["higher",{"_index":887,"title":{},"content":{"25":{},"27":{}},"tags":{}}],["highli",{"_index":1119,"title":{},"content":{"33":{}},"tags":{}}],["highlight",{"_index":1105,"title":{},"content":{"19":{},"31":{}},"tags":{}}],["hint",{"_index":1023,"title":{},"content":{"27":{},"31":{}},"tags":{}}],["histor",{"_index":583,"title":{},"content":{"22":{}},"tags":{}}],["hit",{"_index":480,"title":{},"content":{"18":{},"26":{}},"tags":{}}],["home",{"_index":888,"title":{},"content":{"25":{},"27":{}},"tags":{}}],["homepag",{"_index":75,"title":{},"content":{"7":{},"10":{},"24":{},"34":{}},"tags":{}}],["hope",{"_index":1165,"title":{},"content":{"19":{},"34":{},"36":{}},"tags":{}}],["hopefulli",{"_index":316,"title":{},"content":{"11":{}},"tags":{}}],["hot",{"_index":1083,"title":{},"content":{"31":{},"34":{}},"tags":{}}],["housekeep",{"_index":19,"title":{},"content":{},"tags":{"6":{}}}],["https://developers.google.com/speed/webp",{"_index":706,"title":{},"content":{"24":{}},"tags":{}}],["https://github.com/webmproject/libwebp/archive/refs/tags/v1.3.2.tar.gz",{"_index":704,"title":{},"content":{"24":{}},"tags":{}}],["https://github.com/zlib",{"_index":1149,"title":{},"content":{"34":{}},"tags":{}}],["huge",{"_index":1058,"title":{},"content":{"29":{}},"tags":{}}],["hurt",{"_index":938,"title":{},"content":{"26":{}},"tags":{}}],["hwcap",{"_index":616,"title":{},"content":{},"tags":{"22":{}}}],["hwcaps/x86",{"_index":812,"title":{},"content":{"24":{},"27":{}},"tags":{}}],["hyperfin",{"_index":842,"title":{},"content":{"24":{},"25":{},"26":{},"27":{},"34":{}},"tags":{}}],["i'v",{"_index":682,"title":{},"content":{"24":{}},"tags":{}}],["icon",{"_index":291,"title":{},"content":{"11":{}},"tags":{}}],["idea",{"_index":1082,"title":{},"content":{"31":{}},"tags":{}}],["ignor",{"_index":1095,"title":{},"content":{"31":{}},"tags":{}}],["ikey",{"_index":501,"title":{},"content":{"18":{}},"tags":{}}],["imag",{"_index":713,"title":{},"content":{"24":{},"29":{}},"tags":{}}],["implement",{"_index":254,"title":{},"content":{"10":{}},"tags":{}}],["import",{"_index":1229,"title":{},"content":{"36":{}},"tags":{}}],["improv",{"_index":575,"title":{},"content":{"19":{},"22":{},"23":{},"24":{},"25":{},"27":{},"28":{},"32":{},"35":{}},"tags":{}}],["in_fil",{"_index":778,"title":{},"content":{"24":{}},"tags":{}}],["includ",{"_index":400,"title":{},"content":{"16":{},"23":{},"26":{},"34":{}},"tags":{}}],["inclus",{"_index":472,"title":{},"content":{"18":{}},"tags":{}}],["increas",{"_index":641,"title":{},"content":{"23":{},"26":{},"27":{},"32":{}},"tags":{}}],["increasingli",{"_index":686,"title":{},"content":{"24":{}},"tags":{}}],["incred",{"_index":969,"title":{},"content":{"27":{}},"tags":{}}],["index",{"_index":723,"title":{},"content":{"24":{}},"tags":{}}],["indic",{"_index":932,"title":{},"content":{"26":{}},"tags":{}}],["indirectli",{"_index":788,"title":{},"content":{"24":{},"29":{}},"tags":{}}],["infam",{"_index":652,"title":{},"content":{"23":{}},"tags":{}}],["inform",{"_index":286,"title":{},"content":{"11":{},"16":{}},"tags":{}}],["infrastructur",{"_index":131,"title":{},"content":{"9":{}},"tags":{}}],["initi",{"_index":471,"title":{},"content":{"18":{}},"tags":{}}],["inlin",{"_index":1081,"title":{},"content":{"31":{},"34":{}},"tags":{}}],["input.png",{"_index":785,"title":{},"content":{"24":{}},"tags":{}}],["instal",{"_index":284,"title":{},"content":{"11":{},"15":{},"16":{},"18":{},"24":{},"27":{},"30":{},"32":{},"33":{},"34":{}},"tags":{}}],["instantli",{"_index":1184,"title":{},"content":{"34":{}},"tags":{}}],["instead",{"_index":526,"title":{},"content":{"18":{},"23":{},"25":{},"26":{},"35":{}},"tags":{}}],["instruct",{"_index":958,"title":{},"content":{"27":{}},"tags":{}}],["instrument",{"_index":665,"title":{},"content":{"23":{},"26":{}},"tags":{}}],["integr",{"_index":1143,"title":{},"content":{"33":{}},"tags":{}}],["inter",{"_index":869,"title":{},"content":{"25":{}},"tags":{}}],["interest",{"_index":322,"title":{},"content":{"12":{},"13":{},"15":{},"26":{}},"tags":{}}],["interestingli",{"_index":1107,"title":{},"content":{"31":{}},"tags":{}}],["intro",{"_index":546,"title":{"22":{}},"content":{},"tags":{}}],["introduc",{"_index":397,"title":{"16":{}},"content":{"33":{}},"tags":{}}],["invest",{"_index":604,"title":{},"content":{"22":{}},"tags":{}}],["invis",{"_index":175,"title":{},"content":{"9":{}},"tags":{}}],["invit",{"_index":335,"title":{},"content":{"12":{}},"tags":{}}],["isn't",{"_index":891,"title":{"26":{}},"content":{"26":{},"27":{},"29":{},"31":{},"33":{}},"tags":{}}],["iso",{"_index":268,"title":{},"content":{"11":{},"14":{},"18":{}},"tags":{}}],["issu",{"_index":252,"title":{},"content":{"10":{},"17":{},"18":{}},"tags":{}}],["it'",{"_index":9,"title":{},"content":{"6":{},"18":{},"27":{},"28":{},"29":{},"32":{},"33":{},"35":{}},"tags":{}}],["it'll",{"_index":1226,"title":{},"content":{"36":{}},"tags":{}}],["item",{"_index":470,"title":{},"content":{"18":{}},"tags":{}}],["itself",{"_index":419,"title":{},"content":{"16":{},"28":{}},"tags":{}}],["jakob",{"_index":79,"title":{},"content":{"7":{}},"tags":{}}],["januari",{"_index":77,"title":{},"content":{"7":{}},"tags":{}}],["job",{"_index":1215,"title":{},"content":{"35":{}},"tags":{}}],["joey",{"_index":304,"title":{},"content":{"11":{},"16":{},"17":{},"18":{}},"tags":{}}],["join",{"_index":62,"title":{},"content":{"7":{},"12":{}},"tags":{}}],["joy",{"_index":179,"title":{},"content":{"9":{},"12":{}},"tags":{}}],["jpeg",{"_index":720,"title":{},"content":{"24":{}},"tags":{}}],["jpg",{"_index":692,"title":{},"content":{"24":{}},"tags":{}}],["juli",{"_index":193,"title":{},"content":{"10":{}},"tags":{}}],["jumpa",{"_index":349,"title":{},"content":{"13":{}},"tags":{}}],["justin",{"_index":301,"title":{},"content":{"11":{}},"tags":{}}],["kasih",{"_index":346,"title":{},"content":{"13":{}},"tags":{}}],["kb",{"_index":1200,"title":{},"content":{"35":{}},"tags":{}}],["kde",{"_index":282,"title":{},"content":{"11":{},"17":{}},"tags":{}}],["keen",{"_index":185,"title":{},"content":{"10":{}},"tags":{}}],["keep",{"_index":341,"title":{},"content":{"13":{},"15":{},"19":{},"24":{},"30":{}},"tags":{}}],["key",{"_index":197,"title":{},"content":{"10":{}},"tags":{}}],["know",{"_index":342,"title":{},"content":{"13":{},"15":{},"29":{},"31":{}},"tags":{}}],["known",{"_index":725,"title":{},"content":{"24":{}},"tags":{}}],["lack",{"_index":936,"title":{},"content":{"26":{}},"tags":{}}],["laptop",{"_index":1234,"title":{},"content":{"36":{}},"tags":{}}],["larg",{"_index":634,"title":{},"content":{"23":{}},"tags":{}}],["larger",{"_index":638,"title":{},"content":{"23":{}},"tags":{}}],["largest",{"_index":834,"title":{},"content":{"24":{}},"tags":{}}],["last",{"_index":515,"title":{},"content":{"18":{}},"tags":{}}],["later",{"_index":1213,"title":{},"content":{"35":{}},"tags":{}}],["launch",{"_index":413,"title":{},"content":{"16":{}},"tags":{}}],["layout",{"_index":672,"title":{},"content":{"23":{}},"tags":{}}],["ld.bfd",{"_index":653,"title":{},"content":{"23":{}},"tags":{}}],["ld.ldd",{"_index":650,"title":{},"content":{"23":{}},"tags":{}}],["ldd",{"_index":796,"title":{},"content":{"24":{},"27":{}},"tags":{}}],["lead",{"_index":446,"title":{},"content":{"17":{},"31":{}},"tags":{}}],["learn",{"_index":155,"title":{},"content":{"9":{}},"tags":{}}],["learnt",{"_index":1236,"title":{},"content":{"36":{}},"tags":{}}],["led",{"_index":555,"title":{},"content":{"22":{}},"tags":{}}],["left",{"_index":68,"title":{},"content":{"7":{}},"tags":{}}],["leg",{"_index":646,"title":{},"content":{"23":{},"24":{}},"tags":{}}],["legibl",{"_index":287,"title":{},"content":{"11":{}},"tags":{}}],["less",{"_index":1254,"title":{},"content":{"19":{}},"tags":{}}],["let",{"_index":840,"title":{},"content":{"24":{}},"tags":{}}],["let'",{"_index":681,"title":{"25":{}},"content":{"23":{},"24":{},"25":{},"26":{},"27":{},"28":{},"30":{},"31":{},"33":{},"34":{}},"tags":{}}],["level",{"_index":1115,"title":{},"content":{"19":{},"32":{}},"tags":{}}],["lib",{"_index":997,"title":{},"content":{"27":{},"32":{}},"tags":{}}],["libc",{"_index":532,"title":{},"content":{"18":{}},"tags":{}}],["libc.so.6",{"_index":810,"title":{},"content":{"24":{},"27":{}},"tags":{}}],["libm.so.6",{"_index":819,"title":{},"content":{"24":{},"27":{}},"tags":{}}],["libpng",{"_index":789,"title":{},"content":{"24":{},"29":{},"33":{},"34":{},"35":{}},"tags":{}}],["libpng.so",{"_index":1063,"title":{},"content":{"30":{}},"tags":{}}],["libpng16.so.16",{"_index":807,"title":{},"content":{"24":{},"27":{}},"tags":{}}],["librari",{"_index":499,"title":{},"content":{"18":{},"23":{},"24":{},"26":{},"27":{},"30":{},"33":{},"34":{}},"tags":{}}],["libsharpyuv.so.0",{"_index":816,"title":{},"content":{"24":{},"27":{}},"tags":{}}],["libwebp",{"_index":554,"title":{"32":{}},"content":{"22":{},"24":{},"26":{},"27":{},"29":{},"30":{},"34":{},"36":{}},"tags":{}}],["libwebp.so",{"_index":831,"title":{},"content":{"24":{},"27":{},"28":{},"30":{}},"tags":{}}],["libwebp.so.7",{"_index":804,"title":{},"content":{"24":{},"27":{}},"tags":{}}],["libwebpdemux.so.2",{"_index":801,"title":{},"content":{"24":{},"27":{}},"tags":{}}],["libz",{"_index":1042,"title":{},"content":{"28":{}},"tags":{}}],["libz.so",{"_index":1038,"title":{},"content":{"28":{},"29":{},"30":{},"33":{}},"tags":{}}],["libz.so.1",{"_index":822,"title":{},"content":{"24":{},"27":{}},"tags":{}}],["licens",{"_index":707,"title":{},"content":{"24":{},"34":{}},"tags":{}}],["life",{"_index":481,"title":{},"content":{"18":{},"22":{}},"tags":{}}],["light",{"_index":1136,"title":{},"content":{"33":{}},"tags":{}}],["lil",{"_index":1146,"title":{"34":{}},"content":{},"tags":{}}],["limit",{"_index":579,"title":{},"content":{"22":{}},"tags":{}}],["line",{"_index":266,"title":{},"content":{"11":{}},"tags":{}}],["link",{"_index":651,"title":{},"content":{"23":{},"24":{},"25":{}},"tags":{}}],["linux",{"_index":559,"title":{},"content":{"22":{},"24":{},"27":{},"33":{}},"tags":{}}],["list",{"_index":312,"title":{},"content":{"11":{},"17":{},"18":{},"24":{}},"tags":{}}],["liter",{"_index":1036,"title":{},"content":{"28":{}},"tags":{}}],["littl",{"_index":182,"title":{},"content":{"10":{},"24":{},"29":{}},"tags":{}}],["live",{"_index":466,"title":{"18":{}},"content":{},"tags":{}}],["livingsilv",{"_index":518,"title":{},"content":{"18":{}},"tags":{}}],["lld",{"_index":982,"title":{},"content":{"27":{}},"tags":{}}],["llvm",{"_index":614,"title":{},"content":{},"tags":{"22":{}}}],["load",{"_index":967,"title":{},"content":{"27":{}},"tags":{}}],["loader",{"_index":966,"title":{},"content":{"27":{}},"tags":{}}],["log",{"_index":1239,"title":{},"content":{"19":{}},"tags":{}}],["long",{"_index":28,"title":{"18":{}},"content":{"7":{},"18":{}},"tags":{}}],["look",{"_index":469,"title":{},"content":{"18":{},"23":{},"24":{},"26":{},"27":{},"28":{},"33":{},"34":{},"35":{},"36":{}},"tags":{}}],["lossi",{"_index":715,"title":{},"content":{"24":{}},"tags":{}}],["lossless",{"_index":714,"title":{},"content":{"24":{}},"tags":{}}],["lot",{"_index":261,"title":{},"content":{"10":{},"22":{}},"tags":{}}],["love",{"_index":173,"title":{},"content":{"9":{}},"tags":{}}],["lower",{"_index":968,"title":{},"content":{"27":{}},"tags":{}}],["lpng16",{"_index":1193,"title":{},"content":{"34":{}},"tags":{}}],["lto",{"_index":588,"title":{},"content":{"22":{},"23":{},"25":{},"27":{},"30":{},"31":{},"35":{}},"tags":{"22":{}}}],["luckili",{"_index":445,"title":{},"content":{"17":{},"25":{},"26":{},"27":{},"31":{}},"tags":{}}],["machin",{"_index":377,"title":{},"content":{"15":{},"18":{}},"tags":{}}],["macro",{"_index":221,"title":{},"content":{"10":{}},"tags":{}}],["made",{"_index":311,"title":{},"content":{"11":{},"13":{}},"tags":{}}],["main",{"_index":624,"title":{},"content":{"23":{},"24":{}},"tags":{}}],["major",{"_index":1212,"title":{},"content":{"35":{}},"tags":{}}],["make",{"_index":102,"title":{},"content":{"7":{},"18":{},"24":{},"26":{}},"tags":{}}],["make_instal",{"_index":749,"title":{},"content":{"24":{}},"tags":{}}],["manag",{"_index":51,"title":{},"content":{"7":{},"17":{},"18":{}},"tags":{}}],["mani",{"_index":136,"title":{},"content":{"9":{},"12":{}},"tags":{}}],["mate",{"_index":351,"title":{"14":{},"16":{},"17":{}},"content":{"14":{},"15":{},"16":{},"17":{}},"tags":{"14":{}}}],["materi",{"_index":1227,"title":{},"content":{"36":{}},"tags":{}}],["matrix",{"_index":114,"title":{},"content":{"7":{},"8":{},"10":{},"12":{},"19":{}},"tags":{}}],["matter",{"_index":1085,"title":{},"content":{"31":{}},"tags":{}}],["max",{"_index":853,"title":{},"content":{"24":{},"25":{},"26":{},"27":{},"34":{}},"tags":{}}],["mb",{"_index":1011,"title":{},"content":{"27":{},"30":{},"31":{},"32":{}},"tags":{}}],["mean",{"_index":845,"title":{},"content":{"24":{},"25":{},"26":{},"27":{},"34":{}},"tags":{}}],["meaning",{"_index":610,"title":{},"content":{"22":{}},"tags":{}}],["meantim",{"_index":511,"title":{},"content":{"18":{}},"tags":{}}],["measli",{"_index":1017,"title":{},"content":{"27":{}},"tags":{}}],["medium",{"_index":1251,"title":{},"content":{"19":{}},"tags":{}}],["member",{"_index":5,"title":{},"content":{"6":{},"7":{},"8":{},"9":{}},"tags":{}}],["memori",{"_index":642,"title":{},"content":{"23":{}},"tags":{}}],["merchandis",{"_index":37,"title":{},"content":{"7":{}},"tags":{}}],["merg",{"_index":334,"title":{},"content":{"12":{},"33":{}},"tags":{}}],["mess",{"_index":1064,"title":{},"content":{"30":{}},"tags":{}}],["messag",{"_index":931,"title":{},"content":{"26":{}},"tags":{}}],["metadata",{"_index":758,"title":{},"content":{"24":{}},"tags":{}}],["metainfo",{"_index":205,"title":{},"content":{"10":{},"11":{}},"tags":{}}],["method",{"_index":563,"title":{},"content":{"22":{}},"tags":{}}],["micro",{"_index":954,"title":{},"content":{"27":{}},"tags":{}}],["midday",{"_index":168,"title":{},"content":{"9":{}},"tags":{}}],["migrat",{"_index":149,"title":{},"content":{"9":{}},"tags":{}}],["min",{"_index":852,"title":{},"content":{"24":{},"25":{},"26":{},"27":{},"34":{}},"tags":{}}],["mind",{"_index":508,"title":{},"content":{"18":{},"36":{}},"tags":{}}],["minion",{"_index":476,"title":{},"content":{"18":{}},"tags":{}}],["minor",{"_index":886,"title":{},"content":{"25":{}},"tags":{}}],["mode",{"_index":1142,"title":{},"content":{"33":{},"34":{}},"tags":{}}],["modern",{"_index":278,"title":{},"content":{"11":{}},"tags":{}}],["moment",{"_index":871,"title":{},"content":{"25":{},"26":{}},"tags":{}}],["monitor",{"_index":300,"title":{},"content":{"11":{},"12":{}},"tags":{}}],["monitoring.yml",{"_index":230,"title":{},"content":{"10":{},"11":{}},"tags":{}}],["month",{"_index":27,"title":{},"content":{"7":{}},"tags":{}}],["more",{"_index":10,"title":{"35":{}},"content":{"6":{},"7":{},"9":{},"10":{},"11":{},"15":{},"16":{},"18":{},"19":{},"22":{},"24":{},"25":{},"26":{},"28":{},"29":{},"34":{},"35":{}},"tags":{}}],["moss",{"_index":506,"title":{},"content":{"18":{}},"tags":{"18":{}}}],["mostli",{"_index":73,"title":{},"content":{"7":{},"9":{},"14":{},"24":{}},"tags":{}}],["motiv",{"_index":60,"title":{},"content":{"7":{}},"tags":{}}],["move",{"_index":111,"title":{},"content":{"7":{},"14":{},"15":{},"17":{}},"tags":{}}],["ms",{"_index":847,"title":{},"content":{"24":{},"25":{},"26":{},"27":{},"30":{},"31":{},"32":{},"34":{},"35":{}},"tags":{}}],["much",{"_index":178,"title":{},"content":{"9":{},"10":{},"22":{},"24":{},"25":{},"28":{},"30":{},"34":{}},"tags":{}}],["multimedia.codec",{"_index":711,"title":{},"content":{"24":{}},"tags":{}}],["murmur",{"_index":1259,"title":{},"content":{"19":{}},"tags":{}}],["myself",{"_index":303,"title":{},"content":{"11":{}},"tags":{}}],["n",{"_index":964,"title":{},"content":{"27":{},"31":{}},"tags":{}}],["n/a",{"_index":238,"title":{},"content":{"10":{}},"tags":{}}],["name",{"_index":702,"title":{},"content":{"24":{},"34":{}},"tags":{}}],["name>libwebpmultimedia.codecsa",{"_index":760,"title":{},"content":{"24":{}},"tags":{}}],["xml:lang=\"en\">webp",{"_index":762,"title":{},"content":{"24":{}},"tags":{}}],["ye",{"_index":733,"title":{},"content":{"24":{},"27":{},"34":{}},"tags":{}}],["year",{"_index":11,"title":{},"content":{"6":{},"14":{}},"tags":{}}],["yolo",{"_index":1167,"title":{},"content":{"34":{}},"tags":{}}],["you'd",{"_index":1124,"title":{},"content":{"33":{}},"tags":{}}],["you'll",{"_index":654,"title":{},"content":{"23":{}},"tags":{}}],["you'r",{"_index":392,"title":{},"content":{"15":{}},"tags":{}}],["yuv",{"_index":1056,"title":{},"content":{"29":{},"30":{},"32":{}},"tags":{}}],["zee",{"_index":1144,"title":{"34":{}},"content":{},"tags":{}}],["zlib",{"_index":1052,"title":{"35":{}},"content":{"29":{},"33":{},"34":{},"35":{}},"tags":{}}],["zobel",{"_index":302,"title":{},"content":{"11":{}},"tags":{}}]],"pipeline":["stemmer"]}} \ No newline at end of file +{"documents":[{"id":6,"pageTitle":"Clean, clean, clean!","sectionTitle":"Clean, clean, clean!","sectionRoute":"/blog/clean-clean-clean","type":"blog"},{"id":7,"pageTitle":"Clean, clean, clean!","sectionTitle":"A bit of background","sectionRoute":"/blog/clean-clean-clean#a-bit-of-background","type":"blog"},{"id":8,"pageTitle":"Clean, clean, clean!","sectionTitle":"What is it?","sectionRoute":"/blog/clean-clean-clean#what-is-it","type":"blog"},{"id":9,"pageTitle":"Clean, clean, clean!","sectionTitle":"Why bother?","sectionRoute":"/blog/clean-clean-clean#why-bother","type":"blog"},{"id":10,"pageTitle":"Clean, clean, clean!","sectionTitle":"What we accomplished","sectionRoute":"/blog/clean-clean-clean#what-we-accomplished","type":"blog"},{"id":11,"pageTitle":"Clean, clean, clean!","sectionTitle":"What next?","sectionRoute":"/blog/clean-clean-clean#what-next","type":"blog"},{"id":12,"pageTitle":"Clean, clean, clean!","sectionTitle":"Want to help?","sectionRoute":"/blog/clean-clean-clean#want-to-help","type":"blog"},{"id":13,"pageTitle":"Clean, clean, clean!","sectionTitle":"Closing thoughts","sectionRoute":"/blog/clean-clean-clean#closing-thoughts","type":"blog"},{"id":14,"pageTitle":"Don't call me MATE, pal!","sectionTitle":"Don't call me MATE, pal!","sectionRoute":"/blog/don't-call-me-mate-pal","type":"blog"},{"id":15,"pageTitle":"Don't call me MATE, pal!","sectionTitle":"The problem","sectionRoute":"/blog/don't-call-me-mate-pal#the-problem","type":"blog"},{"id":16,"pageTitle":"Don't call me MATE, pal!","sectionTitle":"Introducing the Solus MATE Transition Tool","sectionRoute":"/blog/don't-call-me-mate-pal#introducing-the-solus-mate-transition-tool","type":"blog"},{"id":17,"pageTitle":"Don't call me MATE, pal!","sectionTitle":"How the Mate Transition Tool is actually part of our Python2 work","sectionRoute":"/blog/don't-call-me-mate-pal#how-the-mate-transition-tool-is-actually-part-of-our-python2-work","type":"blog"},{"id":18,"pageTitle":"eopkg is dead, long live eopkg","sectionTitle":"eopkg is dead, long live eopkg","sectionRoute":"/blog/eopkg-is-dead-long-live-eopkg","type":"blog"},{"id":21,"pageTitle":"Intro to Optimizing Packages on Solus","sectionTitle":"Intro to Optimizing Packages on Solus","sectionRoute":"/blog/solus-optimizing-packages","type":"blog"},{"id":22,"pageTitle":"Intro to Optimizing Packages on Solus","sectionTitle":"Optimization Techniques Available","sectionRoute":"/blog/solus-optimizing-packages","type":"blog"},{"id":23,"pageTitle":"Intro to Optimizing Packages on Solus","sectionTitle":"Optimizing a Package","sectionRoute":"/blog/solus-optimizing-packages","type":"blog"},{"id":24,"pageTitle":"Intro to Optimizing Packages on Solus","sectionTitle":"Let's Start Obvious","sectionRoute":"/blog/solus-optimizing-packages#lets-start-obvious","type":"blog"},{"id":25,"pageTitle":"Intro to Optimizing Packages on Solus","sectionTitle":"PGO is great, except, when it isn't.","sectionRoute":"/blog/solus-optimizing-packages#pgo-is-great-except-when-it-isnt","type":"blog"},{"id":26,"pageTitle":"Intro to Optimizing Packages on Solus","sectionTitle":"256 Vector Units go brrrrrr...","sectionRoute":"/blog/solus-optimizing-packages#256-vector-units-go-brrrrrr","type":"blog"},{"id":27,"pageTitle":"Intro to Optimizing Packages on Solus","sectionTitle":"Something about perf to the rescue","sectionRoute":"/blog/solus-optimizing-packages#something-about-perf-to-the-rescue","type":"blog"},{"id":28,"pageTitle":"Intro to Optimizing Packages on Solus","sectionTitle":"Choosing Wisely","sectionRoute":"/blog/solus-optimizing-packages#choosing-wisely","type":"blog"},{"id":29,"pageTitle":"Intro to Optimizing Packages on Solus","sectionTitle":"Adjusting the Benchmark","sectionRoute":"/blog/solus-optimizing-packages#adjusting-the-benchmark","type":"blog"},{"id":30,"pageTitle":"Intro to Optimizing Packages on Solus","sectionTitle":"Partial Profiling","sectionRoute":"/blog/solus-optimizing-packages#partial-profiling","type":"blog"},{"id":31,"pageTitle":"Intro to Optimizing Packages on Solus","sectionTitle":"Final libwebp Results","sectionRoute":"/blog/solus-optimizing-packages","type":"blog"},{"id":32,"pageTitle":"Intro to Optimizing Packages on Solus","sectionTitle":"\"Next-Generation\" Side Quest","sectionRoute":"/blog/solus-optimizing-packages","type":"blog"},{"id":33,"pageTitle":"Intro to Optimizing Packages on Solus","sectionTitle":"I Zee a Purty lil' Package","sectionRoute":"/blog/solus-optimizing-packages#i-zee-a-purty-lil-package","type":"blog"},{"id":34,"pageTitle":"Intro to Optimizing Packages on Solus","sectionTitle":"Squeezing more from zlib-ng","sectionRoute":"/blog/solus-optimizing-packages#squeezing-more-from-zlib-ng","type":"blog"},{"id":35,"pageTitle":"Intro to Optimizing Packages on Solus","sectionTitle":"Final Words","sectionRoute":"/blog/solus-optimizing-packages","type":"blog"},{"id":36,"pageTitle":"Welcome to the Solus Devlog","sectionTitle":"Welcome to the Solus Devlog","sectionRoute":"/blog/welcome-solus-devlog-v1","type":"blog"}],"index":{"version":"2.3.9","fields":["title","content","tags"],"fieldVectors":[["title/6",[0,3.875]],["content/6",[1,3.834,2,3.834,3,4.622,4,1.479,5,2.927,6,0.225,7,2.36,8,2.617,9,1.946,10,0.746,11,3.834,12,2.139,13,3.315,14,2.086,15,3.834,16,2.927,17,3.315,18,2.139]],["tags/6",[6,0.053,7,0.651,19,1.276,20,0.651]],["title/7",[21,2.46,22,3.43]],["content/7",[5,1.935,6,0.222,7,1.56,8,1.73,10,0.674,12,2.366,13,3.963,23,3.056,24,2.535,25,3.056,26,4.176,27,4.757,28,2.191,29,4.757,30,2.535,31,3.012,32,2.535,33,1.935,34,2.535,35,3.056,36,3.056,37,3.056,38,2.365,39,3.056,40,1.73,41,0.893,42,2.191,43,3.056,44,3.056,45,0.978,46,1.73,47,3.056,48,1.56,49,3.056,50,3.056,51,2.191,52,2.535,53,1.935,54,3.056,55,2.535,56,2.535,57,2.365,58,1.73,59,2.191,60,3.056,61,2.535,62,4.24,63,3.056,64,3.056,65,3.056,66,2.535,67,1.73,68,4.176,69,2.191,70,1.56,71,3.056,72,3.237,73,1.935,74,2.191,75,3.389,76,0.282,77,3.056,78,2.535,79,3.056,80,3.056,81,3.056,82,2.191,83,2.535,84,1.73,85,3.056,86,3.056,87,3.056,88,3.056,89,4.176,90,1.935,91,3.056,92,3.056,93,2.535,94,2.191,95,3.056,96,1.73,97,2.535,98,3.056,99,1.56,100,1.932,101,2.535,102,1.935,103,2.191,104,3.056,105,2.191,106,2.535,107,0.815,108,1.73,109,1.935,110,3.056,111,1.935,112,3.056,113,2.535,114,1.73,115,2.535]],["tags/7",[]],["title/8",[]],["content/8",[5,2.839,6,0.221,7,2.724,8,2.539,72,2.839,76,0.361,90,2.839,100,2.075,103,3.215,108,2.539,109,2.839,114,2.539,116,3.215,117,1.195,118,3.215,119,3.719,120,2.075,121,1.435,122,2.839,123,4.483,124,4.483,125,3.215,126,1.571,127,4.483]],["tags/8",[]],["title/9",[128,3.394]],["content/9",[5,2.156,6,0.208,10,0.724,14,1.307,16,2.156,31,3.181,32,3.724,40,1.928,45,1.089,48,1.738,70,1.738,73,2.156,76,0.34,82,2.441,100,1.575,107,0.907,108,1.928,116,2.441,120,1.575,128,2.823,129,2.292,130,2.324,131,3.404,132,3.404,133,1.738,134,3.404,135,2.564,136,2.823,137,3.404,138,2.441,139,2.471,140,2.156,141,3.404,142,2.823,143,2.542,144,3.404,145,2.441,146,3.404,147,3.404,148,2.823,149,3.404,150,1.575,151,1.433,152,2.292,153,3.404,154,4.489,155,3.404,156,3.404,157,3.219,158,2.823,159,3.404,160,3.404,161,4.489,162,3.724,163,3.219,164,3.219,165,3.724,166,3.83,167,3.404,168,4.489,169,3.404,170,3.404,171,3.404,172,1.193,173,4.489,174,3.404,175,3.404,176,2.823,177,2.156,178,1.433,179,2.823]],["tags/9",[]],["title/10",[16,2.591]],["content/10",[0,2.33,6,0.163,7,2.011,8,2.231,10,0.453,12,1.823,16,1.779,24,3.268,31,1.779,45,1.662,61,2.33,67,2.231,72,3.409,74,3.537,75,2.881,76,0.364,78,4.091,90,1.779,94,2.015,97,2.33,100,1.823,108,1.591,109,1.779,114,1.591,120,1.3,121,0.899,122,1.779,129,1.434,133,1.434,145,2.825,150,1.3,172,0.985,178,1.183,180,2.33,181,2.576,182,2.015,183,2.015,184,2.015,185,2.81,186,2.015,187,2.015,188,2.33,189,2.015,190,2.81,191,1.183,192,2.81,193,2.81,194,2.81,195,3.268,196,1.3,197,2.81,198,1.434,199,2.81,200,2.81,201,2.81,202,3.94,203,2.015,204,3.774,205,3.774,206,2.81,207,3.94,208,2.576,209,2.81,210,1.381,211,2.015,212,2.33,213,1.779,214,2.33,215,2.81,216,2.81,217,2.81,218,2.33,219,1.591,220,2.81,221,2.81,222,2.81,223,2.81,224,2.81,225,2.81,226,2.81,227,2.81,228,2.81,229,2.825,230,2.33,231,2.81,232,2.81,233,2.81,234,2.33,235,4.55,236,1.261,237,3.94,238,3.94,239,2.81,240,2.81,241,2.33,242,1.591,243,2.81,244,2.81,245,3.268,246,1.779,247,0.985,248,2.33,249,1.779,250,2.81,251,2.33,252,2.825,253,2.81,254,2.81,255,0.985,256,2.33,257,2.015,258,2.81,259,2.81,260,2.33,261,2.33,262,2.81]],["tags/10",[]],["title/11",[18,1.893]],["content/11",[6,0.191,10,0.574,14,2.085,38,2.013,46,2.013,58,2.013,59,2.549,74,2.549,76,0.347,118,2.549,129,1.814,145,2.549,165,3.83,204,2.948,205,2.948,212,2.948,213,2.251,230,2.948,263,3.554,264,3.554,265,3.554,266,3.554,267,3.554,268,2.549,269,2.948,270,3.554,271,2.013,272,4.618,273,0.947,274,2.619,275,3.554,276,2.948,277,3.554,278,3.554,279,4.505,280,3.83,281,3.679,282,2.948,283,2.948,284,1.245,285,3.554,286,2.948,287,3.554,288,2.948,289,3.554,290,2.549,291,3.554,292,1.814,293,2.549,294,3.554,295,3.554,296,1.645,297,3.554,298,3.554,299,3.554,300,2.948,301,3.554,302,3.554,303,3.554,304,2.251,305,3.554,306,2.013,307,2.948,308,3.554,309,2.948,310,3.554,311,2.948,312,2.251,313,2.013,314,3.554,315,3.554,316,3.554]],["tags/11",[]],["title/12",[14,1.317,152,1.751]],["content/12",[4,1.243,6,0.221,7,1.983,8,2.199,13,3.836,14,1.491,31,2.46,48,1.983,52,3.222,55,3.222,56,3.222,62,4.054,69,2.785,70,1.983,72,3.095,76,0.391,84,2.199,93,3.222,107,1.035,109,2.46,114,2.199,136,3.222,152,1.983,158,3.222,177,2.46,179,3.222,183,2.785,189,3.505,191,1.635,247,1.361,251,3.222,281,2.785,300,3.222,317,3.222,318,3.222,319,1.635,320,3.884,321,3.884,322,2.46,323,3.884,324,3.884,325,1.635,326,3.222,327,3.884,328,3.884,329,2.785,330,3.884,331,3.884,332,2.785,333,3.884,334,3.222,335,3.884]],["tags/12",[]],["title/13",[246,2.172,260,2.845]],["content/13",[2,3.735,6,0.186,14,1.728,70,2.299,76,0.304,100,2.084,121,1.712,274,2.299,311,3.735,322,2.851,329,3.229,336,4.502,337,1.728,338,3.735,339,3.735,340,4.502,341,2.55,342,2.851,343,2.851,344,4.502,345,4.502,346,4.502,347,4.502,348,4.502,349,4.502]],["tags/13",[]],["title/14",[105,1.859,350,1.859,351,1.091,352,2.592]],["content/14",[6,0.214,11,3.537,45,1.365,73,2.7,96,2.415,111,3.279,130,1.973,172,1.494,247,1.494,268,3.713,273,1.137,351,2.441,353,1.795,354,4.264,355,2.7,356,2.177,357,4.264,358,4.264,359,3.999,360,3.058,361,4.264,362,4.264,363,4.264,364,4.264,365,3.537,366,3.058,367,4.264,368,1.795,369,4.264,370,2.177,371,4.264]],["tags/14",[6,0.065,20,0.801,351,0.661]],["title/15",[372,2.591]],["content/15",[6,0.166,10,0.806,14,1.542,45,1.286,46,2.275,96,2.275,111,2.545,121,1.286,126,1.408,129,2.051,143,2.275,183,2.882,255,1.408,273,1.071,284,1.408,317,3.333,322,2.545,329,2.882,341,2.275,342,2.545,343,2.545,351,2.287,356,2.051,366,2.882,368,1.692,370,2.051,373,4.018,374,2.882,375,4.018,376,4.018,377,3.333,378,3.333,379,2.882,380,2.051,381,4.018,382,3.333,383,2.882,384,4.018,385,3.333,386,4.141,387,4.018,388,3.333,389,4.018,390,1.408,391,3.333,392,4.018,393,4.018,394,4.018,395,4.018,396,3.333]],["tags/15",[]],["title/16",[6,0.096,130,1.069,351,0.972,370,1.179,397,1.916]],["content/16",[6,0.217,10,0.598,12,1.715,14,1.422,69,2.657,82,2.657,96,2.098,121,1.186,122,2.346,126,1.298,129,1.892,130,2.699,133,1.892,135,1.892,151,1.56,181,2.098,255,1.298,273,1.47,284,1.298,286,3.073,288,3.073,304,2.346,313,2.098,325,1.56,339,3.073,351,2.456,356,1.892,360,2.657,366,2.657,368,1.56,370,2.816,396,3.073,398,3.073,399,3.073,400,2.346,401,3.705,402,3.705,403,3.705,404,3.705,405,2.657,406,3.073,407,3.073,408,3.705,409,1.298,410,4.744,411,1.892,412,3.705,413,3.705,414,4.744,415,3.705,416,3.705,417,3.402,418,3.705,419,3.073,420,2.346]],["tags/16",[]],["title/17",[126,0.665,130,0.878,351,0.798,370,0.968,421,0.878,422,0.968,423,1.36]],["content/17",[6,0.233,15,2.709,34,2.709,48,1.667,51,2.342,67,1.849,70,1.667,76,0.221,99,1.667,101,2.709,106,2.709,111,2.068,121,1.045,122,2.068,126,1.144,130,2.277,135,1.667,139,1.511,157,2.342,163,2.342,210,1.144,213,2.766,247,1.144,252,2.342,273,1.164,276,4.082,279,4.082,280,2.709,281,2.342,282,2.709,283,3.623,304,2.068,312,2.068,319,1.375,325,1.375,337,1.254,351,2.071,353,1.375,368,1.839,370,2.23,372,2.068,380,2.682,385,2.709,386,2.709,388,2.709,398,2.709,406,2.709,411,1.667,421,1.511,423,2.342,424,2.068,425,3.266,426,3.266,427,3.266,428,3.266,429,3.266,430,3.266,431,3.266,432,3.266,433,3.266,434,3.266,435,3.266,436,3.266,437,3.266,438,1.667,439,2.068,440,3.266,441,3.266,442,3.266,443,3.266,444,2.709,445,1.849,446,2.709,447,4.921,448,3.266,449,2.342,450,2.068,451,3.266,452,3.266,453,2.709,454,3.266,455,2.709,456,2.342,457,3.266,458,3.266,459,0.954,460,2.709,461,3.266,462,3.266,463,3.266,464,2.342]],["tags/17",[]],["title/18",[28,1.656,380,1.746,465,1.916,466,2.31]],["content/18",[6,0.156,9,1.106,10,0.606,14,1.442,28,1.883,40,2.127,41,0.767,42,1.883,45,0.841,48,1.341,51,3.144,59,2.694,76,0.342,83,2.178,94,1.883,99,1.341,100,1.215,102,1.663,105,2.694,117,0.7,120,1.215,126,0.92,129,1.341,135,1.341,142,2.178,143,1.487,164,1.883,166,1.883,172,1.316,176,2.178,188,2.178,191,1.106,236,1.403,245,2.178,246,1.663,248,3.115,252,3.144,268,1.883,273,1.001,284,1.316,304,1.663,312,2.378,319,1.106,353,1.106,355,1.663,368,1.581,372,1.663,377,3.115,380,2.443,383,2.694,399,3.115,405,1.883,409,0.92,420,1.663,421,1.215,423,3.144,424,2.378,459,0.767,467,2.626,468,2.626,469,0.92,470,2.626,471,2.626,472,2.626,473,5.062,474,5.062,475,1.883,476,2.626,477,2.626,478,2.178,479,2.178,480,2.178,481,2.178,482,2.626,483,2.626,484,2.626,485,2.626,486,2.626,487,1.341,488,5.062,489,5.062,490,2.626,491,2.626,492,1.663,493,1.663,494,1.883,495,4.384,496,2.178,497,2.626,498,2.626,499,1.106,500,2.626,501,2.626,502,2.626,503,2.626,504,3.756,505,2.626,506,2.178,507,1.883,508,2.178,509,2.626,510,2.626,511,2.626,512,1.883,513,2.626,514,2.178,515,3.756,516,2.626,517,2.626,518,2.626,519,2.626,520,2.626,521,2.626,522,1.883,523,2.626,524,2.626,525,1.663,526,1.487,527,1.581,528,2.238,529,2.626,530,2.626,531,2.178,532,2.626,533,2.626,534,1.883,535,2.626,536,1.663,537,2.626,538,2.626,539,2.626,540,2.178,541,3.756,542,2.626,543,1.663,544,2.626,545,1.883]],["tags/18",[6,0.053,20,0.651,380,0.651,506,1.058]],["title/21",[6,0.107,76,0.175,546,2.592,547,0.466]],["content/21",[6,0.159,10,0.437,33,1.715,41,1.122,46,2.525,53,1.715,67,1.533,76,0.407,99,1.382,107,1.293,117,1.023,120,1.253,126,0.949,133,1.382,143,1.533,166,1.942,178,1.14,191,1.877,219,1.533,236,0.867,247,0.949,261,2.246,271,1.533,273,1.418,306,1.533,337,1.862,359,1.942,372,1.715,390,1.345,409,0.949,422,1.96,424,1.715,438,1.382,439,2.824,459,0.791,481,2.246,493,2.431,514,3.699,527,2.303,528,1.382,540,2.246,547,0.957,548,4.459,549,2.824,550,1.715,551,1.942,552,1.243,553,2.753,554,1.039,555,2.708,556,2.246,557,2.246,558,2.246,559,1.715,560,3.184,561,2.708,562,2.246,563,2.708,564,1.877,565,2.246,566,2.708,567,2.708,568,1.942,569,2.708,570,2.246,571,2.708,572,2.708,573,1.715,574,2.708,575,1.966,576,2.708,577,2.708,578,2.708,579,2.708,580,2.753,581,2.246,582,1.715,583,2.708,584,2.246,585,2.431,586,1.533,587,2.174,588,1.14,589,1.715,590,2.708,591,1.942,592,3.184,593,2.708,594,2.246,595,1.039,596,2.708,597,3.184,598,1.942,599,2.708,600,2.708,601,3.699,602,1.023,603,2.246,604,2.708,605,2.246,606,2.708,607,2.246,608,2.246,609,2.708,610,2.708,611,1.942]],["tags/21",[6,0.021,76,0.035,211,0.366,547,0.092,588,0.215,595,0.196,612,0.366,613,0.424,614,0.511,615,0.424,616,0.511,617,0.511]],["title/22",[547,0.531,549,1.87,618,1.87]],["content/22",[6,0.106,38,1.454,41,1.08,42,1.842,45,0.822,57,1.454,76,0.353,107,0.685,117,0.985,126,0.9,130,1.188,139,1.188,143,1.454,150,1.188,151,1.081,184,1.842,196,1.188,236,1.764,247,0.9,309,2.13,313,1.454,319,1.081,325,1.081,332,1.842,337,1.419,356,1.311,374,1.842,390,0.9,400,1.626,421,1.188,422,1.311,439,1.626,449,2.651,459,1.08,469,0.9,487,1.887,499,1.081,525,2.742,526,2.452,527,1.081,528,2.814,531,2.13,547,0.992,549,1.626,550,2.742,552,0.897,553,1.842,556,2.13,560,2.13,564,1.994,565,2.13,573,1.626,575,0.986,581,3.066,585,1.626,586,2.093,587,1.454,588,1.823,591,1.842,592,2.13,595,1.662,612,3.397,619,1.71,620,3.592,621,3.066,622,2.13,623,2.13,624,2.13,625,2.568,626,3.696,627,3.066,628,1.454,629,2.651,630,2.13,631,2.568,632,2.13,633,2.568,634,3.696,635,2.568,636,2.13,637,2.568,638,2.568,639,2.341,640,2.13,641,1.626,642,2.568,643,2.13,644,2.13,645,2.13,646,2.13,647,1.454,648,2.568,649,1.842,650,2.568,651,3.105,652,2.568,653,2.568,654,2.568,655,1.842,656,2.568,657,2.13,658,2.568,659,1.842,660,2.568,661,2.568,662,2.568,663,3.31,664,2.13,665,3.066,666,4.736,667,3.599,668,2.568,669,1.842,670,1.842,671,2.13,672,3.696,673,2.568,674,1.454,675,2.13,676,1.626,677,2.13,678,2.13,679,1.842,680,2.13,681,0.822]],["tags/22",[]],["title/23",[76,0.232,547,0.617]],["content/23",[4,0.706,10,0.214,12,0.613,18,0.613,33,0.838,41,0.966,45,1.058,67,0.75,73,0.838,75,0.838,76,0.223,84,1.248,102,2.092,107,0.881,117,0.881,120,0.613,121,0.424,125,2.369,126,0.464,135,0.676,140,0.838,150,0.613,172,0.464,178,0.557,181,0.75,182,0.949,186,0.949,191,0.557,196,1.02,198,1.125,208,0.75,210,2.114,211,0.949,213,0.838,214,1.829,218,1.098,236,0.706,241,2.35,249,0.838,255,0.773,256,1.098,269,1.098,271,0.75,273,0.755,274,0.676,284,0.773,293,2.032,296,2.29,312,0.838,319,0.557,325,0.928,341,0.75,350,0.949,353,0.557,355,0.838,365,1.829,379,0.949,383,0.949,390,0.773,407,1.098,409,0.773,411,0.676,421,1.311,438,1.125,439,0.838,450,2.324,459,0.966,469,1.158,492,0.838,493,2.092,494,0.949,499,0.928,528,1.687,547,0.397,552,0.802,554,1.268,559,1.396,564,1.545,570,1.098,575,1.087,580,0.949,585,0.838,587,1.248,602,1.173,607,2.741,618,1.396,624,1.098,627,1.098,629,1.581,636,3.287,639,2.509,643,1.829,645,1.098,646,1.098,651,2.369,655,0.949,675,1.098,677,1.098,681,0.907,682,1.324,683,1.324,684,3.619,685,2.661,686,1.324,687,0.949,688,3.963,689,1.324,690,0.949,691,2.509,692,1.324,693,0.949,694,1.324,695,1.324,696,1.324,697,1.286,698,1.324,699,1.324,700,1.324,701,2.032,702,1.098,703,1.324,704,1.324,705,1.324,706,1.324,707,1.098,708,1.324,709,1.324,710,1.098,711,1.324,712,1.829,713,4.257,714,3.963,715,4.401,716,3.287,717,2.205,718,2.145,719,2.205,720,2.205,721,2.205,722,2.205,723,2.205,724,3.304,725,2.205,726,2.205,727,2.205,728,2.205,729,1.829,730,2.205,731,2.205,732,1.396,733,0.949,734,1.324,735,1.829,736,1.324,737,1.324,738,1.324,739,1.324,740,1.324,741,1.324,742,1.324,743,1.324,744,1.324,745,0.949,746,1.324,747,1.324,748,1.098,749,1.324,750,0.75,751,1.324,752,1.098,753,1.794,754,0.949,755,1.324,756,1.324,757,1.098,758,1.324,759,1.324,760,1.324,761,1.324,762,1.324,763,1.324,764,2.661,765,1.324,766,1.324,767,1.324,768,1.324,769,1.324,770,1.324,771,1.324,772,1.098,773,1.521,774,2.023,775,1.324,776,1.604,777,2.205,778,1.324,779,1.829,780,1.668,781,1.324,782,1.324,783,1.324,784,1.324,785,1.324,786,1.324,787,1.829,788,1.098,789,0.75,790,1.098,791,0.949,792,1.324,793,0.949,794,1.324,795,1.324,796,1.829,797,1.324,798,1.098,799,1.098,800,1.324,801,1.098,802,1.324,803,1.324,804,1.098,805,1.324,806,1.324,807,1.098,808,1.098,809,1.324,810,1.098,811,1.829,812,1.829,813,1.125,814,1.098,815,1.324,816,1.098,817,1.324,818,1.324,819,1.098,820,1.098,821,1.324,822,1.098,823,1.324,824,1.324,825,1.098,826,0.676,827,1.098,828,1.324,829,1.125,830,1.098,831,0.838,832,1.324,833,1.324,834,1.324,835,1.324,836,1.098,837,1.324,838,1.098,839,1.324,840,1.324,841,0.949,842,1.604,843,0.928,844,1.391,845,1.248,846,1.098,847,1.521,848,1.324,849,1.324,850,1.324,851,1.248,852,1.248,853,1.248,854,1.324,855,1.324,856,0.838,857,1.02,858,1.324,859,2.023,860,1.098,861,1.324,862,1.324,863,1.324,864,1.324,865,1.098,866,0.838,867,0.75,868,1.324]],["tags/23",[]],["title/24",[12,1.366,659,2.117,681,0.945]],["content/24",[10,0.497,12,1.427,58,1.746,103,2.211,107,1.274,117,1.274,178,1.298,196,1.944,208,1.746,210,2.11,236,1.345,255,1.472,257,2.211,273,1.12,306,1.746,378,2.557,422,1.574,445,1.746,456,2.211,459,1.228,512,2.211,526,1.746,547,0.997,552,1.019,575,1.183,586,1.746,587,1.746,588,1.768,591,2.211,594,2.557,602,1.12,619,2.211,620,2.557,621,2.557,622,2.557,623,2.557,647,1.746,651,2.211,681,0.987,697,1.08,750,1.746,773,1.612,774,2.145,776,1.746,780,2.16,836,2.557,842,2.379,843,1.768,844,2.16,845,2.379,847,2.127,851,2.379,852,2.379,853,2.379,857,1.944,859,2.828,865,3.484,869,3.083,870,3.083,871,2.557,872,2.557,873,2.557,874,2.557,875,3.083,876,2.557,877,3.083,878,3.083,879,3.083,880,2.557,881,3.083,882,3.083,883,3.083,884,3.083,885,3.083,886,3.083,887,2.557,888,2.557]],["tags/24",[]],["title/25",[595,0.995,889,1.859,890,2.592,891,1.323]],["content/25",[4,0.704,10,0.532,17,1.578,18,1.527,21,2.839,41,1.285,46,1.246,53,1.394,57,1.246,76,0.223,84,1.246,96,1.246,102,2.09,107,1.055,117,0.587,121,0.704,126,0.771,138,2.366,139,1.832,151,1.389,172,1.156,181,1.246,184,1.578,187,1.578,191,1.389,195,1.826,196,1.527,198,1.124,203,1.578,208,1.246,210,2.039,229,1.578,236,1.688,255,1.156,273,0.88,296,1.018,306,1.869,307,1.826,322,1.394,337,0.845,374,2.366,400,1.394,409,1.156,411,1.124,421,1.018,422,1.685,445,1.246,459,1.285,464,2.366,465,1.826,469,0.771,475,1.578,480,1.826,487,1.124,499,0.926,526,1.246,528,1.124,543,1.394,545,1.578,547,0.848,549,1.394,552,1.067,554,0.845,564,0.926,573,3.248,589,2.09,595,1.808,602,0.88,618,1.394,639,1.394,641,1.394,663,3.579,665,2.737,667,2.839,676,1.394,681,0.704,685,1.394,697,0.771,732,1.394,754,1.578,764,1.394,773,1.52,774,2.021,776,1.246,780,2.082,829,1.124,842,1.869,843,1.389,844,1.983,845,1.869,847,1.899,851,1.869,852,1.869,853,1.869,856,1.394,857,1.527,859,2.525,871,1.826,872,1.826,891,1.685,892,1.826,893,2.201,894,2.737,895,2.201,896,2.201,897,2.201,898,3.284,899,1.826,900,1.578,901,2.201,902,2.201,903,2.201,904,1.826,905,2.201,906,2.201,907,2.201,908,3.3,909,2.201,910,1.578,911,2.201,912,2.201,913,2.201,914,1.826,915,2.201,916,2.201,917,2.201,918,2.201,919,2.201,920,1.826,921,2.201,922,2.201,923,2.201,924,2.201,925,2.201,926,1.826,927,1.826,928,2.201,929,2.201,930,1.826,931,2.201,932,2.201,933,1.394,934,1.826,935,1.578,936,2.201,937,2.201,938,2.201,939,2.201,940,2.201,941,2.201,942,2.201,943,2.201]],["tags/25",[]],["title/26",[867,1.308,944,2.31,945,2.31,946,2.31,947,2.31]],["content/26",[4,0.507,9,0.667,17,1.832,18,0.733,40,0.897,41,0.747,45,0.507,57,0.897,76,0.217,84,0.897,107,0.681,139,0.733,150,0.733,151,1.075,157,1.136,164,1.136,172,0.895,196,1.182,198,0.809,203,1.136,208,1.447,210,2.132,234,1.314,236,0.818,242,1.447,247,0.555,255,0.895,273,0.681,284,1.125,292,0.809,296,1.182,306,0.897,319,1.075,325,0.667,368,1.075,390,0.555,409,0.555,420,1.003,438,1.88,445,0.897,450,1.003,456,1.136,459,0.938,469,0.555,487,1.304,499,1.075,507,1.136,525,1.003,527,1.351,534,1.136,536,1.003,543,1.003,547,0.46,552,1.048,554,0.608,559,2.033,564,1.7,568,1.136,575,0.981,582,1.003,584,1.314,586,0.897,587,1.818,588,1.351,589,1.618,595,0.608,597,1.314,602,0.856,612,1.136,613,1.314,615,2.119,619,1.485,641,1.003,647,0.897,659,1.136,674,0.897,676,1.003,681,1.178,685,1.003,697,0.895,718,1.304,732,1.003,733,1.832,753,1.003,757,1.314,764,3.171,773,1.413,774,1.304,776,1.447,779,1.314,780,1.55,790,2.119,796,1.314,798,1.314,799,1.314,801,1.314,804,1.314,807,1.314,808,1.314,810,1.314,811,3.919,812,4.65,813,2.885,814,1.314,816,1.314,819,1.314,820,1.314,822,1.314,825,1.314,826,1.304,827,1.314,829,0.809,830,1.314,831,1.003,842,1.818,843,1.075,844,1.55,845,1.447,846,1.314,847,1.922,851,1.447,852,1.447,853,1.447,856,1.003,857,1.182,859,2.557,860,1.314,866,1.618,873,1.314,876,1.314,880,1.314,887,1.314,888,1.314,889,1.136,891,0.809,900,2.302,910,3.802,914,1.314,920,1.314,927,1.314,948,1.584,949,1.314,950,1.584,951,3.21,952,2.675,953,2.554,954,2.554,955,2.119,956,2.119,957,2.554,958,1.584,959,1.584,960,1.314,961,1.584,962,3.21,963,1.584,964,1.314,965,1.314,966,1.584,967,2.554,968,1.584,969,1.584,970,5.008,971,1.584,972,1.584,973,1.584,974,1.584,975,1.584,976,1.584,977,1.584,978,1.584,979,1.584,980,1.584,981,1.584,982,1.584,983,1.584,984,1.584,985,1.584,986,2.554,987,1.584,988,1.584,989,1.584,990,1.584,991,1.584,992,1.584,993,1.584,994,1.584,995,1.584,996,1.584,997,2.119,998,2.554,999,1.584,1000,1.584,1001,1.584,1002,1.584,1003,2.119,1004,1.584,1005,1.584,1006,1.584,1007,1.584,1008,1.584,1009,1.314,1010,1.136,1011,2.332,1012,1.584,1013,1.314,1014,1.003,1015,1.314,1016,1.584,1017,1.584,1018,2.554,1019,1.314,1020,1.584,1021,1.584,1022,1.136,1023,1.314,1024,1.314,1025,1.584,1026,1.584,1027,1.584,1028,1.003,1029,1.584]],["tags/26",[]],["title/27",[40,1.672,1028,1.87,1030,2.953]],["content/27",[4,1.22,9,1.605,10,0.615,48,1.947,107,1.414,117,1.016,139,1.765,150,2.236,152,1.947,178,1.605,242,2.159,247,1.336,338,3.163,419,3.163,469,1.693,527,1.605,536,2.415,547,0.686,552,1.172,575,1.464,628,2.159,647,2.159,674,2.159,681,1.546,750,2.159,753,3.358,773,1.854,774,2.466,780,2.347,831,2.415,841,2.735,843,1.605,844,2.034,857,1.765,1028,3.358,1031,4.831,1032,4.831,1033,3.813,1034,4.831,1035,3.813,1036,3.813,1037,5.303,1038,2.415,1039,3.813,1040,3.813,1041,3.813,1042,3.813]],["tags/27",[]],["title/28",[580,2.46,1043,3.43]],["content/28",[4,1.161,9,1.97,10,0.836,41,1.06,45,1.161,70,1.852,107,0.967,117,0.967,121,1.498,151,1.97,172,1.271,182,2.602,290,2.602,292,1.852,296,1.679,318,3.009,337,1.393,342,2.298,390,1.271,409,1.64,417,2.602,455,3.009,459,1.06,492,2.964,507,2.602,522,2.602,528,1.852,545,2.602,552,0.881,554,1.393,602,0.967,611,3.356,619,2.166,655,2.602,684,2.602,685,2.964,691,2.298,697,1.271,713,3.882,773,1.796,788,3.009,789,3.208,791,2.602,891,1.852,892,3.009,1038,3.281,1044,3.009,1045,3.628,1046,3.628,1047,3.009,1048,3.009,1049,3.628,1050,4.68,1051,3.628,1052,2.65,1053,3.628,1054,3.628,1055,3.628,1056,2.602,1057,3.628,1058,3.628,1059,3.628]],["tags/28",[]],["title/29",[602,0.914,1060,2.845]],["content/29",[4,1.049,41,1.279,53,2.075,76,0.296,151,1.379,172,1.148,178,1.379,210,1.727,219,1.855,246,2.075,247,1.727,284,1.148,341,1.855,368,1.842,409,1.727,459,0.957,493,2.075,499,1.379,547,0.887,552,0.795,554,1.257,588,2.075,589,2.075,595,1.257,602,0.873,619,2.281,640,2.717,644,2.717,647,2.791,681,1.577,697,1.727,718,2.234,750,2.478,773,1.257,780,1.379,787,2.717,791,2.349,813,2.516,826,2.516,831,2.075,843,1.379,844,1.379,847,2.165,866,2.771,889,2.349,949,2.717,952,2.791,1010,2.349,1011,3.571,1013,2.717,1014,2.075,1024,2.717,1028,2.075,1038,2.075,1056,2.349,1060,2.717,1061,3.276,1062,3.276,1063,3.276,1064,3.276,1065,3.276,1066,3.276,1067,2.717,1068,3.276,1069,3.276,1070,3.276,1071,3.276,1072,3.276,1073,3.276,1074,2.349,1075,3.276,1076,2.717,1077,3.276]],["tags/29",[]],["title/30",[663,2.172,1078,2.845]],["content/30",[4,0.845,57,2.135,58,1.495,99,1.348,117,0.704,138,1.893,140,1.671,150,1.221,151,1.111,177,1.671,187,1.893,198,1.348,210,1.946,219,1.495,236,0.845,242,1.495,271,2.135,274,1.348,292,1.924,326,2.189,342,1.671,350,2.703,390,0.925,411,1.348,422,1.348,438,1.348,445,1.495,446,3.647,459,1.285,475,1.893,492,1.671,525,2.784,527,1.111,543,1.671,547,0.913,552,0.915,562,2.189,564,1.111,568,2.703,573,3.037,585,1.671,586,1.495,588,1.587,595,1.841,598,1.893,619,1.744,628,1.495,630,2.189,639,1.671,649,2.703,663,3.212,664,2.189,669,1.893,670,1.893,681,0.845,693,1.893,697,0.925,701,1.893,718,2.448,748,2.189,750,1.495,752,2.189,753,1.671,754,1.893,764,2.387,813,1.924,826,1.924,829,1.924,847,1.447,891,1.348,898,3.127,904,2.189,926,2.189,930,2.189,933,1.671,934,2.189,935,3.439,952,2.135,960,2.189,964,2.189,965,3.127,1011,2.387,1014,1.671,1022,1.893,1023,2.189,1048,2.189,1074,1.893,1078,4.207,1079,2.189,1080,2.639,1081,2.189,1082,2.639,1083,3.127,1084,2.639,1085,2.639,1086,2.639,1087,1.893,1088,4.796,1089,5.552,1090,2.639,1091,2.639,1092,3.769,1093,2.639,1094,3.769,1095,2.639,1096,2.639,1097,2.639,1098,2.639,1099,3.769,1100,2.639,1101,2.639,1102,2.639,1103,2.639,1104,2.639,1105,2.189,1106,2.639,1107,2.639,1108,2.639,1109,2.189,1110,2.639,1111,2.639]],["tags/30",[]],["title/31",[38,1.672,554,1.133,628,1.672]],["content/31",[9,1.605,58,2.736,76,0.258,107,1.288,117,1.016,148,4.007,191,1.605,229,2.735,236,1.22,274,1.947,284,1.336,296,2.236,353,1.605,359,2.735,421,1.765,550,2.415,552,0.925,575,2.036,602,1.016,641,2.415,684,3.465,691,2.415,697,1.336,718,2.846,729,3.163,773,1.464,774,1.947,776,2.159,780,2.034,813,1.947,826,1.947,843,1.605,844,2.034,847,1.854,857,1.765,859,2.466,952,2.159,997,3.163,1003,3.163,1009,3.163,1010,2.735,1011,3.059,1014,2.415,1019,3.163,1056,3.465,1067,3.163,1074,2.735,1076,3.163,1112,3.813,1113,3.813,1114,3.163,1115,3.163]],["tags/31",[]],["title/32",[18,1.199,557,2.15,558,2.15,674,1.468]],["content/32",[6,0.128,9,1.772,21,2.217,41,1.23,45,0.99,76,0.209,99,2.149,121,0.99,172,1.475,180,2.565,219,2.384,247,1.084,255,1.475,271,2.384,274,1.578,284,1.084,313,1.751,319,1.302,334,2.565,337,1.616,353,1.302,379,2.217,390,1.475,397,2.565,420,1.958,444,2.565,450,1.958,453,2.565,460,2.565,469,1.475,478,2.565,479,2.565,487,1.578,499,1.302,512,2.217,547,0.924,552,0.75,559,1.958,582,3.253,598,2.217,602,1.122,611,2.217,629,2.217,632,2.565,657,2.565,676,1.958,680,2.565,681,0.99,687,2.217,690,2.217,693,3.019,772,2.565,789,1.751,829,1.578,838,2.565,867,1.751,891,1.578,900,3.019,910,2.217,935,2.217,955,2.565,956,2.565,1038,1.958,1044,2.565,1052,3.384,1079,3.491,1087,2.217,1109,3.491,1116,3.092,1117,2.565,1118,3.092,1119,4.209,1120,3.092,1121,3.092,1122,3.092,1123,3.092,1124,3.092,1125,4.209,1126,3.092,1127,3.092,1128,3.092,1129,3.092,1130,3.092,1131,3.092,1132,3.092,1133,3.092,1134,3.092,1135,3.491,1136,3.092,1137,3.092,1138,3.092,1139,3.092,1140,3.092,1141,2.666,1142,3.491,1143,3.092]],["tags/32",[]],["title/33",[76,0.175,1144,2.592,1145,2.592,1146,2.592]],["content/33",[4,1.03,10,0.626,18,1.489,33,2.038,41,0.622,75,1.348,76,0.218,107,1.238,117,1.034,120,0.985,121,0.681,133,1.087,140,1.348,178,0.896,191,0.896,196,1.796,198,1.087,210,2.189,236,1.03,249,1.348,255,1.712,257,1.527,273,0.858,284,1.128,293,1.527,296,1.796,313,1.206,325,0.896,355,1.348,380,1.087,382,1.766,390,1.128,400,2.038,405,1.527,409,1.128,411,1.087,417,1.527,459,1.134,464,1.527,469,0.746,487,1.087,494,1.527,499,1.634,527,1.355,534,2.308,547,0.383,552,0.517,554,0.817,582,2.038,602,1.302,605,2.67,649,1.527,667,1.527,671,1.766,674,1.823,679,1.527,681,0.681,690,1.527,691,1.348,697,1.128,701,1.527,702,1.766,707,1.766,710,1.766,712,1.766,716,1.766,732,1.348,733,2.308,735,1.766,745,1.527,773,1.783,780,1.955,789,2.63,841,1.527,842,1.823,843,1.821,844,1.955,845,1.823,847,2.179,851,1.823,852,1.823,853,1.823,856,1.348,857,0.985,859,1.087,894,1.766,933,1.348,1052,3.135,1081,1.766,1083,1.766,1087,1.527,1117,2.67,1135,2.67,1141,2.457,1142,1.766,1147,3.219,1148,3.219,1149,3.219,1150,3.219,1151,2.129,1152,2.129,1153,2.129,1154,2.129,1155,2.129,1156,2.129,1157,2.129,1158,2.129,1159,2.129,1160,2.129,1161,2.129,1162,2.129,1163,2.129,1164,2.129,1165,1.527,1166,2.129,1167,2.129,1168,2.129,1169,2.129,1170,2.129,1171,2.129,1172,2.129,1173,2.129,1174,2.129,1175,2.129,1176,2.129,1177,2.129,1178,2.129,1179,2.129,1180,2.129,1181,2.129,1182,2.129,1183,2.129,1184,2.129,1185,3.219,1186,2.129,1187,2.129,1188,2.129,1189,3.219,1190,2.129,1191,3.219,1192,2.129,1193,2.129,1194,3.219,1195,2.129,1196,2.129,1197,1.766,1198,2.129]],["tags/33",[]],["title/34",[10,0.418,551,1.859,1052,1.468,1141,1.641]],["content/34",[9,1.85,10,0.709,66,2.734,76,0.223,119,2.734,139,1.525,152,1.683,177,2.088,181,2.489,189,2.364,210,1.925,249,2.088,290,2.364,292,1.683,319,1.388,325,1.388,353,1.388,360,2.364,368,1.388,390,1.155,409,1.155,469,1.155,522,2.364,526,1.867,527,1.388,547,0.89,551,2.364,552,1.2,575,1.265,588,2.312,595,1.687,602,1.171,618,2.088,619,2.542,670,2.364,697,1.155,718,2.244,789,1.867,793,2.364,813,2.244,826,2.244,829,1.683,847,2.214,866,2.783,867,1.867,874,2.734,952,2.489,1015,2.734,1052,2.8,1141,2.783,1197,2.734,1199,4.395,1200,5.767,1201,3.296,1202,3.296,1203,3.296,1204,3.296,1205,3.296,1206,3.296,1207,3.296,1208,3.296,1209,3.296,1210,3.296,1211,3.296,1212,3.296,1213,3.296,1214,3.296,1215,3.296,1216,3.296]],["tags/34",[]],["title/35",[38,1.942,679,2.46]],["content/35",[4,1.22,6,0.2,76,0.327,135,2.466,162,3.163,255,1.693,292,2.466,332,2.735,337,2.036,343,2.415,356,1.947,424,2.415,438,1.947,449,2.735,469,1.336,508,3.163,536,2.415,547,1.003,550,2.415,554,1.464,564,1.605,602,1.288,603,3.163,608,3.163,628,2.159,669,2.735,678,3.163,687,2.735,899,3.163,1022,2.735,1114,3.163,1165,3.465,1217,3.813,1218,3.813,1219,3.163,1220,3.813,1221,3.813,1222,3.813,1223,3.813,1224,3.813,1225,4.831,1226,3.813,1227,3.813,1228,4.831,1229,4.831,1230,3.813,1231,3.813,1232,3.813,1233,3.813,1234,3.813,1235,3.813,1236,3.813,1237,3.813]],["tags/35",[]],["title/36",[6,0.122,20,1.507,1238,2.449]],["content/36",[6,0.249,10,0.721,20,2.282,30,3.708,41,1.463,90,2.142,100,2.068,108,2.531,113,2.805,114,1.915,115,4.153,116,3.206,117,0.901,118,2.425,125,2.425,133,2.282,152,2.282,163,2.425,186,3.206,242,1.915,273,0.901,337,1.298,341,2.531,343,2.831,353,1.424,356,1.726,391,2.805,496,3.708,553,2.425,564,1.424,575,1.298,601,2.805,745,3.206,793,3.591,867,1.915,933,2.142,1047,2.805,1105,2.805,1115,2.805,1165,3.206,1219,3.708,1238,2.805,1239,4.47,1240,5.007,1241,3.382,1242,4.47,1243,3.382,1244,3.382,1245,3.382,1246,3.382,1247,3.382,1248,3.382,1249,4.47,1250,4.47,1251,3.382,1252,3.382,1253,3.382,1254,3.382,1255,3.382,1256,3.382,1257,3.382,1258,3.382,1259,3.382,1260,3.382,1261,3.382,1262,3.382,1263,3.382]],["tags/36",[1,1.058,6,0.053,20,0.651,1264,1.276]]],"invertedIndex":[["",{"_index":210,"title":{},"content":{"10":{},"17":{},"23":{},"24":{},"25":{},"26":{},"29":{},"30":{},"33":{},"34":{}},"tags":{}}],["0.009",{"_index":860,"title":{},"content":{"23":{},"26":{}},"tags":{}}],["0.010",{"_index":921,"title":{},"content":{"25":{}},"tags":{}}],["0.012",{"_index":881,"title":{},"content":{"24":{}},"tags":{}}],["0.071",{"_index":883,"title":{},"content":{"24":{}},"tags":{}}],["0.076",{"_index":862,"title":{},"content":{"23":{}},"tags":{}}],["0.078",{"_index":1005,"title":{},"content":{"26":{}},"tags":{}}],["0.082",{"_index":923,"title":{},"content":{"25":{}},"tags":{}}],["0.3",{"_index":848,"title":{},"content":{"23":{}},"tags":{}}],["0.7",{"_index":1177,"title":{},"content":{"33":{}},"tags":{}}],["01",{"_index":215,"title":{},"content":{"10":{}},"tags":{}}],["06",{"_index":207,"title":{},"content":{"10":{}},"tags":{}}],["09",{"_index":200,"title":{},"content":{"10":{}},"tags":{}}],["0x00007f7473200000",{"_index":824,"title":{},"content":{"23":{}},"tags":{}}],["0x00007f74737b8000",{"_index":821,"title":{},"content":{"23":{}},"tags":{}}],["0x00007f747389e000",{"_index":818,"title":{},"content":{"23":{}},"tags":{}}],["0x00007f74738a9000",{"_index":815,"title":{},"content":{"23":{}},"tags":{}}],["0x00007f7473aa6000",{"_index":809,"title":{},"content":{"23":{}},"tags":{}}],["0x00007f7473ae2000",{"_index":806,"title":{},"content":{"23":{}},"tags":{}}],["0x00007f7473bb4000",{"_index":803,"title":{},"content":{"23":{}},"tags":{}}],["0x00007f7473bea000",{"_index":828,"title":{},"content":{"23":{}},"tags":{}}],["0x00007f9a34dbb000",{"_index":994,"title":{},"content":{"26":{}},"tags":{}}],["0x00007f9a34ddb000",{"_index":992,"title":{},"content":{"26":{}},"tags":{}}],["0x00007f9a34ec1000",{"_index":991,"title":{},"content":{"26":{}},"tags":{}}],["0x00007f9a34ed2000",{"_index":989,"title":{},"content":{"26":{}},"tags":{}}],["0x00007f9a350cf000",{"_index":988,"title":{},"content":{"26":{}},"tags":{}}],["0x00007f9a3510b000",{"_index":987,"title":{},"content":{"26":{}},"tags":{}}],["0x00007f9a351d5000",{"_index":985,"title":{},"content":{"26":{}},"tags":{}}],["0x00007f9a3520b000",{"_index":995,"title":{},"content":{"26":{}},"tags":{}}],["0x00007ffeab5b1000",{"_index":983,"title":{},"content":{"26":{}},"tags":{}}],["0x00007ffed8733000",{"_index":800,"title":{},"content":{"23":{}},"tags":{}}],["1",{"_index":196,"title":{},"content":{"10":{},"22":{},"23":{},"24":{},"25":{},"26":{},"33":{}},"tags":{}}],["1.07",{"_index":1013,"title":{},"content":{"26":{},"29":{}},"tags":{}}],["1.2",{"_index":999,"title":{},"content":{"26":{}},"tags":{}}],["1.243",{"_index":1004,"title":{},"content":{"26":{}},"tags":{}}],["1.266",{"_index":922,"title":{},"content":{"25":{}},"tags":{}}],["1.281",{"_index":882,"title":{},"content":{"24":{}},"tags":{}}],["1.3.2",{"_index":703,"title":{},"content":{"23":{}},"tags":{}}],["1.308",{"_index":1006,"title":{},"content":{"26":{}},"tags":{}}],["1.313",{"_index":1003,"title":{},"content":{"26":{},"31":{}},"tags":{}}],["1.33",{"_index":1010,"title":{},"content":{"26":{},"29":{},"31":{}},"tags":{}}],["1.335",{"_index":924,"title":{},"content":{"25":{}},"tags":{}}],["1.336",{"_index":884,"title":{},"content":{"24":{}},"tags":{}}],["1.341",{"_index":1007,"title":{},"content":{"26":{}},"tags":{}}],["1.346",{"_index":861,"title":{},"content":{"23":{}},"tags":{}}],["1.349",{"_index":920,"title":{},"content":{"25":{},"26":{}},"tags":{}}],["1.353",{"_index":880,"title":{},"content":{"24":{},"26":{}},"tags":{}}],["1.369",{"_index":885,"title":{},"content":{"24":{}},"tags":{}}],["1.374",{"_index":925,"title":{},"content":{"25":{}},"tags":{}}],["1.399",{"_index":1009,"title":{},"content":{"26":{},"31":{}},"tags":{}}],["1.40",{"_index":1070,"title":{},"content":{"29":{}},"tags":{}}],["1.410",{"_index":863,"title":{},"content":{"23":{}},"tags":{}}],["1.423",{"_index":858,"title":{},"content":{"23":{}},"tags":{}}],["1.435",{"_index":864,"title":{},"content":{"23":{}},"tags":{}}],["1.464",{"_index":1196,"title":{},"content":{"33":{}},"tags":{}}],["1.5",{"_index":874,"title":{},"content":{"24":{},"34":{}},"tags":{}}],["1.56",{"_index":1068,"title":{},"content":{"29":{}},"tags":{}}],["1.73",{"_index":1012,"title":{},"content":{"26":{}},"tags":{}}],["10",{"_index":208,"title":{},"content":{"10":{},"23":{},"24":{},"25":{},"26":{}},"tags":{}}],["100",{"_index":54,"title":{},"content":{"7":{}},"tags":{}}],["12",{"_index":250,"title":{},"content":{"10":{}},"tags":{}}],["12.3",{"_index":1074,"title":{},"content":{"29":{},"30":{},"31":{}},"tags":{}}],["12.5",{"_index":1103,"title":{},"content":{"30":{}},"tags":{}}],["12.7",{"_index":1072,"title":{},"content":{"29":{}},"tags":{}}],["13",{"_index":239,"title":{},"content":{"10":{}},"tags":{}}],["133.00",{"_index":1204,"title":{},"content":{"34":{}},"tags":{}}],["14",{"_index":856,"title":{},"content":{"23":{},"25":{},"26":{},"33":{}},"tags":{}}],["14.5",{"_index":1067,"title":{},"content":{"29":{},"31":{}},"tags":{}}],["14.6",{"_index":1069,"title":{},"content":{"29":{}},"tags":{}}],["14.7",{"_index":1066,"title":{},"content":{"29":{}},"tags":{}}],["141.00",{"_index":1199,"title":{},"content":{"34":{}},"tags":{}}],["15",{"_index":879,"title":{},"content":{"24":{}},"tags":{}}],["16",{"_index":1076,"title":{},"content":{"29":{},"31":{}},"tags":{}}],["170.00",{"_index":1209,"title":{},"content":{"34":{}},"tags":{}}],["18.0",{"_index":1071,"title":{},"content":{"29":{}},"tags":{}}],["182.00",{"_index":1202,"title":{},"content":{"34":{}},"tags":{}}],["194.3",{"_index":1170,"title":{},"content":{"33":{}},"tags":{}}],["195.4",{"_index":1000,"title":{},"content":{"26":{}},"tags":{}}],["196.3",{"_index":1172,"title":{},"content":{"33":{}},"tags":{}}],["197.0",{"_index":1001,"title":{},"content":{"26":{}},"tags":{}}],["197.3",{"_index":875,"title":{},"content":{"24":{}},"tags":{}}],["198",{"_index":217,"title":{},"content":{"10":{}},"tags":{}}],["198.1",{"_index":877,"title":{},"content":{"24":{}},"tags":{}}],["198.2",{"_index":998,"title":{},"content":{"26":{}},"tags":{}}],["198.6",{"_index":1168,"title":{},"content":{"33":{}},"tags":{}}],["198.9",{"_index":849,"title":{},"content":{"23":{}},"tags":{}}],["1m1.672",{"_index":912,"title":{},"content":{"25":{}},"tags":{}}],["1m42.199",{"_index":913,"title":{},"content":{"25":{}},"tags":{}}],["2",{"_index":203,"title":{},"content":{"10":{},"25":{},"26":{}},"tags":{}}],["2.1.5",{"_index":1147,"title":{},"content":{"33":{}},"tags":{}}],["2.2",{"_index":915,"title":{},"content":{"25":{}},"tags":{}}],["2.3",{"_index":1169,"title":{},"content":{"33":{}},"tags":{}}],["2.35",{"_index":1073,"title":{},"content":{"29":{}},"tags":{}}],["2.5",{"_index":876,"title":{},"content":{"24":{},"26":{}},"tags":{}}],["2.6",{"_index":1179,"title":{},"content":{"33":{}},"tags":{}}],["2.7",{"_index":917,"title":{},"content":{"25":{}},"tags":{}}],["20",{"_index":226,"title":{},"content":{"10":{}},"tags":{}}],["200",{"_index":265,"title":{},"content":{"11":{}},"tags":{}}],["200.0",{"_index":873,"title":{},"content":{"24":{},"26":{}},"tags":{}}],["200.5",{"_index":1002,"title":{},"content":{"26":{}},"tags":{}}],["201.3",{"_index":916,"title":{},"content":{"25":{}},"tags":{}}],["201.6",{"_index":918,"title":{},"content":{"25":{}},"tags":{}}],["201.8",{"_index":854,"title":{},"content":{"23":{}},"tags":{}}],["2015",{"_index":482,"title":{},"content":{"18":{}},"tags":{}}],["202.2",{"_index":846,"title":{},"content":{"23":{},"26":{}},"tags":{}}],["202.7",{"_index":855,"title":{},"content":{"23":{}},"tags":{}}],["2023",{"_index":24,"title":{},"content":{"7":{},"10":{}},"tags":{}}],["2024",{"_index":78,"title":{},"content":{"7":{},"10":{}},"tags":{}}],["203.2",{"_index":878,"title":{},"content":{"24":{}},"tags":{}}],["203.3",{"_index":1173,"title":{},"content":{"33":{}},"tags":{}}],["204.1",{"_index":914,"title":{},"content":{"25":{},"26":{}},"tags":{}}],["207.1",{"_index":919,"title":{},"content":{"25":{}},"tags":{}}],["21",{"_index":231,"title":{},"content":{"10":{}},"tags":{}}],["22",{"_index":214,"title":{},"content":{"10":{},"23":{}},"tags":{}}],["2300",{"_index":201,"title":{},"content":{"10":{}},"tags":{}}],["25",{"_index":241,"title":{},"content":{"10":{},"23":{}},"tags":{}}],["250.00",{"_index":1211,"title":{},"content":{"34":{}},"tags":{}}],["256",{"_index":944,"title":{"26":{}},"content":{},"tags":{}}],["26",{"_index":717,"title":{},"content":{"23":{}},"tags":{}}],["27",{"_index":222,"title":{},"content":{"10":{}},"tags":{}}],["28",{"_index":1148,"title":{},"content":{"33":{}},"tags":{}}],["2937",{"_index":233,"title":{},"content":{"10":{}},"tags":{}}],["295.00",{"_index":1207,"title":{},"content":{"34":{}},"tags":{}}],["2mib",{"_index":1020,"title":{},"content":{"26":{}},"tags":{}}],["3",{"_index":211,"title":{},"content":{"10":{},"23":{}},"tags":{"21":{}}}],["3.0",{"_index":850,"title":{},"content":{"23":{}},"tags":{}}],["3.13",{"_index":1104,"title":{},"content":{"30":{}},"tags":{}}],["3.17",{"_index":1014,"title":{},"content":{"26":{},"29":{},"30":{},"31":{}},"tags":{}}],["3.6",{"_index":1171,"title":{},"content":{"33":{}},"tags":{}}],["3.webp",{"_index":843,"title":{},"content":{"23":{},"24":{},"25":{},"26":{},"27":{},"29":{},"31":{},"33":{}},"tags":{}}],["30",{"_index":199,"title":{},"content":{"10":{}},"tags":{}}],["3070",{"_index":232,"title":{},"content":{"10":{}},"tags":{}}],["316",{"_index":216,"title":{},"content":{"10":{}},"tags":{}}],["32bit",{"_index":755,"title":{},"content":{"23":{}},"tags":{}}],["33",{"_index":1182,"title":{},"content":{"33":{}},"tags":{}}],["34",{"_index":719,"title":{},"content":{"23":{}},"tags":{}}],["37",{"_index":223,"title":{},"content":{"10":{}},"tags":{}}],["38",{"_index":209,"title":{},"content":{"10":{}},"tags":{}}],["3f6576971397b379d4205ae5451ff5a68edf6c103b2f03c4188ed7075fbb5f04",{"_index":1152,"title":{},"content":{"33":{}},"tags":{}}],["3x",{"_index":728,"title":{},"content":{"23":{}},"tags":{}}],["4",{"_index":218,"title":{},"content":{"10":{},"23":{}},"tags":{}}],["4.4",{"_index":354,"title":{},"content":{"14":{}},"tags":{}}],["4.7",{"_index":267,"title":{},"content":{"11":{}},"tags":{}}],["5",{"_index":224,"title":{},"content":{"10":{}},"tags":{}}],["5.68",{"_index":1041,"title":{},"content":{"27":{}},"tags":{}}],["6",{"_index":229,"title":{},"content":{"10":{},"25":{},"31":{}},"tags":{}}],["6000",{"_index":141,"title":{},"content":{"9":{}},"tags":{}}],["62",{"_index":228,"title":{},"content":{"10":{}},"tags":{}}],["64",{"_index":813,"title":{},"content":{"23":{},"26":{},"29":{},"30":{},"31":{},"34":{}},"tags":{}}],["64.so.2",{"_index":827,"title":{},"content":{"23":{},"26":{}},"tags":{}}],["650",{"_index":98,"title":{},"content":{"7":{}},"tags":{}}],["7",{"_index":234,"title":{},"content":{"10":{},"26":{}},"tags":{}}],["8",{"_index":202,"title":{},"content":{"10":{}},"tags":{}}],["84.7",{"_index":1178,"title":{},"content":{"33":{}},"tags":{}}],["86.5",{"_index":1180,"title":{},"content":{"33":{}},"tags":{}}],["87",{"_index":227,"title":{},"content":{"10":{}},"tags":{}}],["87.6",{"_index":1176,"title":{},"content":{"33":{}},"tags":{}}],["88.7",{"_index":1181,"title":{},"content":{"33":{}},"tags":{}}],["882.5",{"_index":1210,"title":{},"content":{"34":{}},"tags":{}}],["882.6",{"_index":1208,"title":{},"content":{"34":{}},"tags":{}}],["883.6",{"_index":1201,"title":{},"content":{"34":{}},"tags":{}}],["892.5",{"_index":1206,"title":{},"content":{"34":{}},"tags":{}}],["892.7",{"_index":1203,"title":{},"content":{"34":{}},"tags":{}}],["894.6",{"_index":1205,"title":{},"content":{"34":{}},"tags":{}}],["896.6",{"_index":1197,"title":{},"content":{"33":{},"34":{}},"tags":{}}],["aarch64",{"_index":1134,"title":{},"content":{"32":{}},"tags":{}}],["abi",{"_index":657,"title":{},"content":{"22":{},"32":{}},"tags":{}}],["abi/api",{"_index":1154,"title":{},"content":{"33":{}},"tags":{}}],["abov",{"_index":244,"title":{},"content":{"10":{}},"tags":{}}],["accept",{"_index":729,"title":{},"content":{"23":{},"31":{}},"tags":{}}],["accommod",{"_index":104,"title":{},"content":{"7":{}},"tags":{}}],["accomplish",{"_index":16,"title":{"10":{}},"content":{"6":{},"9":{},"10":{}},"tags":{}}],["account",{"_index":44,"title":{},"content":{"7":{}},"tags":{}}],["accur",{"_index":1050,"title":{},"content":{"28":{}},"tags":{}}],["activ",{"_index":505,"title":{},"content":{"18":{}},"tags":{}}],["actual",{"_index":421,"title":{"17":{}},"content":{"17":{},"18":{},"22":{},"23":{},"25":{},"31":{}},"tags":{}}],["ad",{"_index":74,"title":{},"content":{"7":{},"10":{},"11":{}},"tags":{}}],["add",{"_index":295,"title":{},"content":{"11":{}},"tags":{}}],["addit",{"_index":438,"title":{},"content":{"17":{},"21":{},"23":{},"26":{},"30":{},"35":{}},"tags":{}}],["addition",{"_index":1256,"title":{},"content":{"36":{}},"tags":{}}],["adjust",{"_index":1060,"title":{"29":{}},"content":{"29":{}},"tags":{}}],["advanc",{"_index":548,"title":{},"content":{"21":{}},"tags":{}}],["affair",{"_index":751,"title":{},"content":{"23":{}},"tags":{}}],["again",{"_index":670,"title":{},"content":{"22":{},"30":{},"34":{}},"tags":{}}],["against",{"_index":607,"title":{},"content":{"21":{},"23":{}},"tags":{}}],["aggress",{"_index":562,"title":{},"content":{"21":{},"30":{}},"tags":{}}],["ahead",{"_index":315,"title":{},"content":{"11":{}},"tags":{}}],["ain't",{"_index":1021,"title":{},"content":{"26":{}},"tags":{}}],["alfi",{"_index":3,"title":{},"content":{"6":{}},"tags":{}}],["allow",{"_index":836,"title":{},"content":{"23":{},"24":{}},"tags":{}}],["alon",{"_index":134,"title":{},"content":{"9":{}},"tags":{}}],["along",{"_index":330,"title":{},"content":{"12":{}},"tags":{}}],["alpha",{"_index":726,"title":{},"content":{"23":{}},"tags":{}}],["alreadi",{"_index":187,"title":{},"content":{"10":{},"25":{},"30":{}},"tags":{}}],["although",{"_index":43,"title":{},"content":{"7":{}},"tags":{}}],["alway",{"_index":189,"title":{},"content":{"10":{},"12":{},"34":{}},"tags":{}}],["ambit",{"_index":1253,"title":{},"content":{"36":{}},"tags":{}}],["amiss",{"_index":868,"title":{},"content":{"23":{}},"tags":{}}],["amongst",{"_index":577,"title":{},"content":{"21":{}},"tags":{}}],["amount",{"_index":433,"title":{},"content":{"17":{}},"tags":{}}],["androidniss",{"_index":81,"title":{},"content":{"7":{}},"tags":{}}],["anim",{"_index":782,"title":{},"content":{"23":{}},"tags":{}}],["announc",{"_index":357,"title":{},"content":{"14":{}},"tags":{}}],["anoth",{"_index":545,"title":{},"content":{"18":{},"25":{},"28":{}},"tags":{}}],["anyon",{"_index":1237,"title":{},"content":{"35":{}},"tags":{}}],["anyth",{"_index":1016,"title":{},"content":{"26":{}},"tags":{}}],["api",{"_index":444,"title":{},"content":{"17":{},"32":{}},"tags":{}}],["app",{"_index":165,"title":{},"content":{"9":{},"11":{}},"tags":{}}],["appli",{"_index":219,"title":{},"content":{"10":{},"21":{},"29":{},"30":{},"32":{}},"tags":{}}],["applic",{"_index":213,"title":{},"content":{"10":{},"11":{},"17":{},"23":{}},"tags":{}}],["approach",{"_index":514,"title":{},"content":{"18":{},"21":{}},"tags":{}}],["appropri",{"_index":606,"title":{},"content":{"21":{}},"tags":{}}],["appstream",{"_index":204,"title":{},"content":{"10":{},"11":{}},"tags":{}}],["architectur",{"_index":955,"title":{},"content":{"26":{},"32":{}},"tags":{}}],["aren't",{"_index":1024,"title":{},"content":{"26":{},"29":{}},"tags":{}}],["around",{"_index":53,"title":{},"content":{"7":{},"21":{},"25":{},"29":{}},"tags":{}}],["ask",{"_index":458,"title":{},"content":{"17":{}},"tags":{}}],["assum",{"_index":393,"title":{},"content":{"15":{}},"tags":{}}],["attach",{"_index":190,"title":{},"content":{"10":{}},"tags":{}}],["attempt",{"_index":1133,"title":{},"content":{"32":{}},"tags":{}}],["attent",{"_index":395,"title":{},"content":{"15":{}},"tags":{}}],["automat",{"_index":902,"title":{},"content":{"25":{}},"tags":{}}],["avail",{"_index":618,"title":{"22":{}},"content":{"23":{},"25":{},"34":{}},"tags":{}}],["avoid",{"_index":1222,"title":{},"content":{"35":{}},"tags":{}}],["avx2",{"_index":962,"title":{},"content":{"26":{}},"tags":{}}],["avx512",{"_index":963,"title":{},"content":{"26":{}},"tags":{}}],["away",{"_index":96,"title":{},"content":{"7":{},"14":{},"15":{},"16":{},"25":{}},"tags":{}}],["awesom",{"_index":787,"title":{},"content":{"23":{},"29":{}},"tags":{}}],["back",{"_index":353,"title":{},"content":{"14":{},"17":{},"18":{},"23":{},"31":{},"32":{},"34":{},"36":{}},"tags":{}}],["background",{"_index":22,"title":{"7":{}},"content":{},"tags":{}}],["base",{"_index":540,"title":{},"content":{"18":{},"21":{}},"tags":{}}],["baselin",{"_index":866,"title":{},"content":{"23":{},"26":{},"29":{},"34":{}},"tags":{}}],["bash",{"_index":385,"title":{},"content":{"15":{},"17":{}},"tags":{}}],["basic",{"_index":865,"title":{},"content":{"23":{},"24":{}},"tags":{}}],["batteri",{"_index":576,"title":{},"content":{"21":{}},"tags":{}}],["be",{"_index":753,"title":{},"content":{"23":{},"26":{},"27":{},"30":{}},"tags":{}}],["bear",{"_index":608,"title":{},"content":{"21":{},"35":{}},"tags":{}}],["becom",{"_index":256,"title":{},"content":{"10":{},"23":{}},"tags":{}}],["befor",{"_index":148,"title":{},"content":{"9":{},"31":{}},"tags":{}}],["begin",{"_index":365,"title":{},"content":{"14":{},"23":{}},"tags":{}}],["beginn",{"_index":71,"title":{},"content":{"7":{}},"tags":{}}],["behind",{"_index":635,"title":{},"content":{"22":{}},"tags":{}}],["believ",{"_index":1257,"title":{},"content":{"36":{}},"tags":{}}],["below",{"_index":404,"title":{},"content":{"16":{}},"tags":{}}],["benchmark",{"_index":602,"title":{"29":{}},"content":{"21":{},"23":{},"24":{},"25":{},"26":{},"28":{},"29":{},"31":{},"32":{},"33":{},"34":{},"35":{}},"tags":{}}],["benefit",{"_index":439,"title":{},"content":{"17":{},"21":{},"22":{},"23":{}},"tags":{}}],["best",{"_index":272,"title":{},"content":{"11":{}},"tags":{}}],["beta",{"_index":367,"title":{},"content":{"14":{}},"tags":{}}],["better",{"_index":150,"title":{},"content":{"9":{},"10":{},"22":{},"23":{},"26":{},"27":{},"30":{}},"tags":{}}],["between",{"_index":91,"title":{},"content":{"7":{}},"tags":{}}],["big",{"_index":1075,"title":{},"content":{"29":{}},"tags":{}}],["bigger",{"_index":630,"title":{},"content":{"22":{},"30":{}},"tags":{}}],["bin",{"_index":474,"title":{},"content":{"18":{}},"tags":{}}],["binari",{"_index":528,"title":{},"content":{"18":{},"21":{},"22":{},"23":{},"25":{},"28":{}},"tags":{}}],["bit",{"_index":21,"title":{"7":{}},"content":{"25":{},"32":{}},"tags":{}}],["black",{"_index":1255,"title":{},"content":{"36":{}},"tags":{}}],["bloat",{"_index":1108,"title":{},"content":{"30":{}},"tags":{}}],["blog",{"_index":343,"title":{},"content":{"13":{},"15":{},"35":{},"36":{}},"tags":{}}],["bolt",{"_index":449,"title":{},"content":{"17":{},"22":{},"35":{}},"tags":{}}],["both",{"_index":830,"title":{},"content":{"23":{},"26":{}},"tags":{}}],["bother",{"_index":128,"title":{"9":{}},"content":{"9":{}},"tags":{}}],["bottl",{"_index":1026,"title":{},"content":{"26":{}},"tags":{}}],["bottleneck",{"_index":611,"title":{},"content":{"21":{},"28":{},"32":{}},"tags":{}}],["box",{"_index":553,"title":{},"content":{"21":{},"22":{},"36":{}},"tags":{}}],["break",{"_index":632,"title":{},"content":{"22":{},"32":{}},"tags":{}}],["bring",{"_index":119,"title":{},"content":{"8":{},"34":{}},"tags":{}}],["brows",{"_index":700,"title":{},"content":{"23":{}},"tags":{}}],["browser",{"_index":698,"title":{},"content":{"23":{}},"tags":{}}],["brrrrrr",{"_index":947,"title":{"26":{}},"content":{},"tags":{}}],["bsd",{"_index":708,"title":{},"content":{"23":{}},"tags":{}}],["budget",{"_index":1232,"title":{},"content":{"35":{}},"tags":{}}],["budgi",{"_index":415,"title":{},"content":{"16":{}},"tags":{}}],["build",{"_index":236,"title":{},"content":{"10":{},"18":{},"21":{},"22":{},"23":{},"24":{},"25":{},"26":{},"30":{},"31":{},"33":{}},"tags":{}}],["builddep",{"_index":737,"title":{},"content":{"23":{}},"tags":{}}],["built",{"_index":900,"title":{},"content":{"25":{},"26":{},"32":{}},"tags":{}}],["bump",{"_index":928,"title":{},"content":{"25":{}},"tags":{}}],["bunch",{"_index":543,"title":{},"content":{"18":{},"25":{},"26":{},"30":{}},"tags":{}}],["byte",{"_index":727,"title":{},"content":{"23":{}},"tags":{}}],["c",{"_index":1127,"title":{},"content":{"32":{}},"tags":{}}],["c2c2f521fa468e3c5949ab698c2da410f5dce1c5e99f5ad9e70e0e8446b86505",{"_index":705,"title":{},"content":{"23":{}},"tags":{}}],["calamar",{"_index":539,"title":{},"content":{"18":{}},"tags":{}}],["call",{"_index":105,"title":{"14":{}},"content":{"7":{},"18":{}},"tags":{}}],["callgraph",{"_index":1029,"title":{},"content":{"26":{}},"tags":{}}],["came",{"_index":64,"title":{},"content":{"7":{}},"tags":{}}],["can't",{"_index":965,"title":{},"content":{"26":{},"30":{}},"tags":{}}],["canon",{"_index":1135,"title":{},"content":{"32":{},"33":{}},"tags":{}}],["capabl",{"_index":948,"title":{},"content":{"26":{}},"tags":{}}],["care",{"_index":655,"title":{},"content":{"22":{},"23":{},"28":{}},"tags":{}}],["cargo",{"_index":220,"title":{},"content":{"10":{}},"tags":{}}],["case",{"_index":829,"title":{},"content":{"23":{},"25":{},"26":{},"30":{},"32":{},"34":{}},"tags":{}}],["casual",{"_index":699,"title":{},"content":{"23":{}},"tags":{}}],["center",{"_index":280,"title":{},"content":{"11":{},"17":{}},"tags":{}}],["cflags=\"${cflag",{"_index":1100,"title":{},"content":{"30":{}},"tags":{}}],["challeng",{"_index":1244,"title":{},"content":{"36":{}},"tags":{}}],["chanc",{"_index":154,"title":{},"content":{"9":{}},"tags":{}}],["chang",{"_index":133,"title":{},"content":{"9":{},"10":{},"16":{},"21":{},"33":{},"36":{}},"tags":{}}],["channel",{"_index":125,"title":{},"content":{"8":{},"23":{},"36":{}},"tags":{}}],["chat",{"_index":89,"title":{},"content":{"7":{}},"tags":{}}],["check",{"_index":464,"title":{},"content":{"17":{},"25":{},"33":{}},"tags":{}}],["chip",{"_index":95,"title":{},"content":{"7":{}},"tags":{}}],["choic",{"_index":309,"title":{},"content":{"11":{},"22":{}},"tags":{}}],["choos",{"_index":580,"title":{"28":{}},"content":{"21":{},"23":{}},"tags":{}}],["chosen",{"_index":1054,"title":{},"content":{"28":{}},"tags":{}}],["chroot",{"_index":903,"title":{},"content":{"25":{}},"tags":{}}],["chuck",{"_index":941,"title":{},"content":{"25":{}},"tags":{}}],["circl",{"_index":1120,"title":{},"content":{"32":{}},"tags":{}}],["citizen",{"_index":443,"title":{},"content":{"17":{}},"tags":{}}],["clang",{"_index":612,"title":{},"content":{"22":{},"26":{}},"tags":{"21":{}}}],["class",{"_index":442,"title":{},"content":{"17":{}},"tags":{}}],["claus",{"_index":709,"title":{},"content":{"23":{}},"tags":{}}],["clean",{"_index":0,"title":{"6":{}},"content":{"10":{}},"tags":{}}],["cleanup",{"_index":7,"title":{},"content":{"6":{},"7":{},"8":{},"10":{},"12":{}},"tags":{"6":{}}}],["click",{"_index":412,"title":{},"content":{"16":{}},"tags":{}}],["close",{"_index":246,"title":{"13":{}},"content":{"10":{},"18":{},"29":{}},"tags":{}}],["closer",{"_index":463,"title":{},"content":{"17":{}},"tags":{}}],["cmake_ninja",{"_index":1155,"title":{},"content":{"33":{}},"tags":{}}],["code",{"_index":935,"title":{},"content":{"25":{},"30":{},"32":{}},"tags":{}}],["collect",{"_index":666,"title":{},"content":{"22":{}},"tags":{}}],["color",{"_index":731,"title":{},"content":{"23":{}},"tags":{}}],["combin",{"_index":644,"title":{},"content":{"22":{},"29":{}},"tags":{}}],["come",{"_index":82,"title":{},"content":{"7":{},"9":{},"16":{}},"tags":{}}],["command",{"_index":381,"title":{},"content":{"15":{}},"tags":{}}],["common",{"_index":687,"title":{},"content":{"23":{},"32":{},"35":{}},"tags":{}}],["commun",{"_index":116,"title":{},"content":{"8":{},"9":{},"36":{}},"tags":{}}],["compar",{"_index":636,"title":{},"content":{"22":{},"23":{}},"tags":{}}],["compat",{"_index":582,"title":{},"content":{"21":{},"26":{},"32":{},"33":{}},"tags":{}}],["compil",{"_index":527,"title":{},"content":{"18":{},"21":{},"22":{},"26":{},"27":{},"30":{},"33":{},"34":{}},"tags":{}}],["complet",{"_index":245,"title":{},"content":{"10":{},"18":{}},"tags":{}}],["compon",{"_index":710,"title":{},"content":{"23":{},"33":{}},"tags":{}}],["comprehens",{"_index":898,"title":{},"content":{"25":{},"30":{}},"tags":{}}],["compress",{"_index":716,"title":{},"content":{"23":{},"33":{}},"tags":{}}],["concept",{"_index":299,"title":{},"content":{"11":{}},"tags":{}}],["confid",{"_index":832,"title":{},"content":{"23":{}},"tags":{}}],["configur",{"_index":752,"title":{},"content":{"23":{},"30":{}},"tags":{}}],["confirm",{"_index":1187,"title":{},"content":{"33":{}},"tags":{}}],["confus",{"_index":47,"title":{},"content":{"7":{}},"tags":{}}],["consid",{"_index":137,"title":{},"content":{"9":{}},"tags":{}}],["consist",{"_index":1230,"title":{},"content":{"35":{}},"tags":{}}],["constrain",{"_index":1233,"title":{},"content":{"35":{}},"tags":{}}],["contain",{"_index":140,"title":{},"content":{"9":{},"23":{},"30":{},"33":{}},"tags":{}}],["content",{"_index":1249,"title":{},"content":{"36":{}},"tags":{}}],["context",{"_index":1258,"title":{},"content":{"36":{}},"tags":{}}],["continu",{"_index":69,"title":{},"content":{"7":{},"12":{},"16":{}},"tags":{}}],["contribut",{"_index":13,"title":{},"content":{"6":{},"7":{},"12":{}},"tags":{}}],["contributor",{"_index":100,"title":{},"content":{"7":{},"8":{},"9":{},"10":{},"13":{},"18":{},"36":{}},"tags":{}}],["control",{"_index":561,"title":{},"content":{"21":{}},"tags":{}}],["cost",{"_index":640,"title":{},"content":{"22":{},"29":{}},"tags":{}}],["count",{"_index":195,"title":{},"content":{"10":{},"25":{}},"tags":{}}],["coupl",{"_index":379,"title":{},"content":{"15":{},"23":{},"32":{}},"tags":{}}],["cover",{"_index":934,"title":{},"content":{"25":{},"30":{}},"tags":{}}],["cpu",{"_index":957,"title":{},"content":{"26":{}},"tags":{}}],["craft",{"_index":1086,"title":{},"content":{"30":{}},"tags":{}}],["creat",{"_index":145,"title":{},"content":{"9":{},"10":{},"11":{}},"tags":{}}],["crew",{"_index":8,"title":{},"content":{"6":{},"7":{},"8":{},"10":{},"12":{}},"tags":{}}],["critic",{"_index":530,"title":{},"content":{"18":{}},"tags":{}}],["cross",{"_index":541,"title":{},"content":{"18":{}},"tags":{}}],["crucial",{"_index":996,"title":{},"content":{"26":{}},"tags":{}}],["cruft",{"_index":147,"title":{},"content":{"9":{}},"tags":{}}],["curat",{"_index":307,"title":{},"content":{"11":{},"25":{}},"tags":{}}],["current",{"_index":122,"title":{},"content":{"8":{},"10":{},"16":{},"17":{}},"tags":{}}],["cwebp",{"_index":774,"title":{},"content":{"23":{},"24":{},"25":{},"26":{},"27":{},"31":{}},"tags":{}}],["cwebp.data",{"_index":1033,"title":{},"content":{"27":{}},"tags":{}}],["cxxflags=\"${cxxflag",{"_index":1101,"title":{},"content":{"30":{}},"tags":{}}],["damn",{"_index":841,"title":{},"content":{"23":{},"27":{},"33":{}},"tags":{}}],["dan",{"_index":347,"title":{},"content":{"13":{}},"tags":{}}],["data",{"_index":667,"title":{},"content":{"22":{},"25":{},"33":{}},"tags":{}}],["date",{"_index":194,"title":{},"content":{"10":{}},"tags":{}}],["day",{"_index":42,"title":{},"content":{"7":{},"18":{},"22":{}},"tags":{}}],["dbuild_shared_libs=on",{"_index":1158,"title":{},"content":{"33":{}},"tags":{}}],["dead",{"_index":465,"title":{"18":{}},"content":{"25":{}},"tags":{}}],["decad",{"_index":428,"title":{},"content":{"17":{}},"tags":{}}],["decid",{"_index":101,"title":{},"content":{"7":{},"17":{}},"tags":{}}],["decod",{"_index":697,"title":{},"content":{"23":{},"24":{},"25":{},"26":{},"28":{},"29":{},"30":{},"31":{},"33":{},"34":{}},"tags":{}}],["deem",{"_index":622,"title":{},"content":{"22":{},"24":{}},"tags":{}}],["default",{"_index":585,"title":{},"content":{"21":{},"22":{},"23":{},"30":{}},"tags":{}}],["depend",{"_index":531,"title":{},"content":{"18":{},"22":{}},"tags":{}}],["deprec",{"_index":240,"title":{},"content":{"10":{}},"tags":{}}],["descript",{"_index":293,"title":{},"content":{"11":{},"23":{},"33":{}},"tags":{}}],["detail",{"_index":344,"title":{},"content":{"13":{}},"tags":{}}],["dev/nul",{"_index":844,"title":{},"content":{"23":{},"24":{},"25":{},"26":{},"27":{},"29":{},"31":{},"33":{}},"tags":{}}],["devel",{"_index":735,"title":{},"content":{"23":{},"33":{}},"tags":{}}],["develop",{"_index":793,"title":{},"content":{"23":{},"34":{},"36":{}},"tags":{}}],["devlog",{"_index":20,"title":{"36":{}},"content":{"36":{}},"tags":{"6":{},"14":{},"18":{},"36":{}}}],["die",{"_index":1166,"title":{},"content":{"33":{}},"tags":{}}],["differ",{"_index":592,"title":{},"content":{"21":{},"22":{}},"tags":{}}],["dig",{"_index":1046,"title":{},"content":{"28":{}},"tags":{}}],["diggiti",{"_index":1183,"title":{},"content":{"33":{}},"tags":{}}],["digit",{"_index":36,"title":{},"content":{"7":{}},"tags":{}}],["dinstall_lib_dir=%libdir",{"_index":1159,"title":{},"content":{"33":{}},"tags":{}}],["dip",{"_index":323,"title":{},"content":{"12":{}},"tags":{}}],["direct",{"_index":520,"title":{},"content":{"18":{}},"tags":{}}],["directli",{"_index":522,"title":{},"content":{"18":{},"28":{},"34":{}},"tags":{}}],["dirti",{"_index":448,"title":{},"content":{"17":{}},"tags":{}}],["disabl",{"_index":747,"title":{},"content":{"23":{}},"tags":{}}],["disappoint",{"_index":896,"title":{},"content":{"25":{}},"tags":{}}],["discov",{"_index":283,"title":{},"content":{"11":{},"17":{}},"tags":{}}],["discuss",{"_index":1225,"title":{},"content":{"35":{}},"tags":{}}],["distribut",{"_index":560,"title":{},"content":{"21":{},"22":{}},"tags":{}}],["ditch",{"_index":436,"title":{},"content":{"17":{}},"tags":{}}],["do",{"_index":70,"title":{},"content":{"7":{},"9":{},"12":{},"13":{},"17":{},"28":{}},"tags":{}}],["doc",{"_index":1090,"title":{},"content":{"30":{}},"tags":{}}],["document",{"_index":251,"title":{},"content":{"10":{},"12":{}},"tags":{}}],["doesn't",{"_index":933,"title":{},"content":{"25":{},"30":{},"33":{},"36":{}},"tags":{}}],["don't",{"_index":350,"title":{"14":{}},"content":{"23":{},"30":{}},"tags":{}}],["done",{"_index":181,"title":{},"content":{"10":{},"16":{},"23":{},"25":{},"34":{}},"tags":{}}],["doubt",{"_index":658,"title":{},"content":{"22":{}},"tags":{}}],["down",{"_index":66,"title":{},"content":{"7":{},"34":{}},"tags":{}}],["downsid",{"_index":600,"title":{},"content":{"21":{}},"tags":{}}],["dozen",{"_index":1130,"title":{},"content":{"32":{}},"tags":{}}],["drag",{"_index":427,"title":{},"content":{"17":{}},"tags":{}}],["dramat",{"_index":1059,"title":{},"content":{"28":{}},"tags":{}}],["drawback",{"_index":625,"title":{},"content":{"22":{}},"tags":{}}],["due",{"_index":693,"title":{},"content":{"23":{},"30":{},"32":{}},"tags":{}}],["dure",{"_index":57,"title":{},"content":{"7":{},"22":{},"25":{},"26":{},"30":{}},"tags":{}}],["dutifulli",{"_index":394,"title":{},"content":{"15":{}},"tags":{}}],["dwebp",{"_index":773,"title":{},"content":{"23":{},"24":{},"25":{},"26":{},"27":{},"28":{},"29":{},"31":{},"33":{}},"tags":{}}],["dwebp.data",{"_index":1032,"title":{},"content":{"27":{}},"tags":{}}],["dwith_gtest=off",{"_index":1157,"title":{},"content":{"33":{}},"tags":{}}],["dzlib_compat=on",{"_index":1156,"title":{},"content":{"33":{}},"tags":{}}],["each",{"_index":85,"title":{},"content":{"7":{}},"tags":{}}],["eager",{"_index":317,"title":{},"content":{"12":{},"15":{}},"tags":{}}],["earli",{"_index":1045,"title":{},"content":{"28":{}},"tags":{}}],["earlier",{"_index":1117,"title":{},"content":{"32":{},"33":{}},"tags":{}}],["easi",{"_index":269,"title":{},"content":{"11":{},"23":{}},"tags":{}}],["easier",{"_index":943,"title":{},"content":{"25":{}},"tags":{}}],["easiest",{"_index":897,"title":{},"content":{"25":{}},"tags":{}}],["ecosystem",{"_index":1123,"title":{},"content":{"32":{}},"tags":{}}],["edit",{"_index":416,"title":{},"content":{"16":{}},"tags":{}}],["editor'",{"_index":308,"title":{},"content":{"11":{}},"tags":{}}],["effect",{"_index":1025,"title":{},"content":{"26":{}},"tags":{}}],["effort",{"_index":339,"title":{},"content":{"13":{},"16":{}},"tags":{}}],["embarrass",{"_index":432,"title":{},"content":{"17":{}},"tags":{}}],["employ",{"_index":1121,"title":{},"content":{"32":{}},"tags":{}}],["emul32",{"_index":732,"title":{},"content":{"23":{},"25":{},"26":{},"33":{}},"tags":{}}],["enabl",{"_index":587,"title":{},"content":{"21":{},"22":{},"23":{},"24":{},"26":{}},"tags":{}}],["encod",{"_index":776,"title":{},"content":{"23":{},"24":{},"25":{},"26":{},"31":{}},"tags":{}}],["encount",{"_index":406,"title":{},"content":{"16":{},"17":{}},"tags":{}}],["encourag",{"_index":30,"title":{},"content":{"7":{},"36":{}},"tags":{}}],["end",{"_index":191,"title":{},"content":{"10":{},"12":{},"18":{},"21":{},"23":{},"25":{},"31":{},"33":{}},"tags":{}}],["enjoy",{"_index":174,"title":{},"content":{"9":{}},"tags":{}}],["enough",{"_index":374,"title":{},"content":{"15":{},"22":{},"25":{}},"tags":{}}],["ensur",{"_index":791,"title":{},"content":{"23":{},"28":{},"29":{}},"tags":{}}],["entertain",{"_index":1235,"title":{},"content":{"35":{}},"tags":{}}],["enthusiast",{"_index":387,"title":{},"content":{"15":{}},"tags":{}}],["entiti",{"_index":1247,"title":{},"content":{"36":{}},"tags":{}}],["environ",{"_index":904,"title":{},"content":{"25":{},"30":{}},"tags":{}}],["eopkg",{"_index":380,"title":{"18":{}},"content":{"15":{},"17":{},"18":{},"33":{}},"tags":{"18":{}}}],["eopkg3",{"_index":495,"title":{},"content":{"18":{}},"tags":{}}],["eopkg4",{"_index":473,"title":{},"content":{"18":{}},"tags":{}}],["equival",{"_index":721,"title":{},"content":{"23":{}},"tags":{}}],["ermo",{"_index":388,"title":{},"content":{"15":{},"17":{}},"tags":{}}],["especi",{"_index":899,"title":{},"content":{"25":{},"35":{}},"tags":{}}],["etc",{"_index":294,"title":{},"content":{"11":{}},"tags":{}}],["evan",{"_index":538,"title":{},"content":{"18":{}},"tags":{}}],["even",{"_index":143,"title":{},"content":{"9":{},"15":{},"18":{},"21":{},"22":{}},"tags":{}}],["event",{"_index":29,"title":{},"content":{"7":{}},"tags":{}}],["eventu",{"_index":509,"title":{},"content":{"18":{}},"tags":{}}],["everyon",{"_index":2,"title":{},"content":{"6":{},"13":{}},"tags":{}}],["everyth",{"_index":748,"title":{},"content":{"23":{},"30":{}},"tags":{}}],["exactli",{"_index":492,"title":{},"content":{"18":{},"23":{},"28":{},"30":{}},"tags":{}}],["exampl",{"_index":960,"title":{},"content":{"26":{},"30":{}},"tags":{}}],["examples/cwebp",{"_index":909,"title":{},"content":{"25":{}},"tags":{}}],["examples/dwebp",{"_index":906,"title":{},"content":{"25":{}},"tags":{}}],["except",{"_index":890,"title":{"25":{}},"content":{},"tags":{}}],["exchang",{"_index":35,"title":{},"content":{"7":{}},"tags":{}}],["excit",{"_index":59,"title":{},"content":{"7":{},"11":{},"18":{}},"tags":{}}],["exclus",{"_index":1062,"title":{},"content":{"29":{}},"tags":{}}],["excus",{"_index":39,"title":{},"content":{"7":{}},"tags":{}}],["execut",{"_index":1096,"title":{},"content":{"30":{}},"tags":{}}],["exist",{"_index":371,"title":{},"content":{"14":{}},"tags":{}}],["expect",{"_index":521,"title":{},"content":{"18":{}},"tags":{}}],["experi",{"_index":46,"title":{},"content":{"7":{},"11":{},"15":{},"21":{},"25":{}},"tags":{}}],["explain",{"_index":1040,"title":{},"content":{"27":{}},"tags":{}}],["explor",{"_index":306,"title":{},"content":{"11":{},"21":{},"24":{},"25":{},"26":{}},"tags":{}}],["export",{"_index":1099,"title":{},"content":{"30":{}},"tags":{}}],["extens",{"_index":1051,"title":{},"content":{"28":{}},"tags":{}}],["extra",{"_index":790,"title":{},"content":{"23":{},"26":{}},"tags":{}}],["extrem",{"_index":1128,"title":{},"content":{"32":{}},"tags":{}}],["ey",{"_index":186,"title":{},"content":{"10":{},"23":{},"36":{}},"tags":{}}],["facilit",{"_index":1241,"title":{},"content":{"36":{}},"tags":{}}],["fact",{"_index":1110,"title":{},"content":{"30":{}},"tags":{}}],["faf",{"_index":596,"title":{},"content":{"21":{}},"tags":{}}],["fail",{"_index":1218,"title":{},"content":{"35":{}},"tags":{}}],["fairli",{"_index":1018,"title":{},"content":{"26":{}},"tags":{}}],["fallen",{"_index":1131,"title":{},"content":{"32":{}},"tags":{}}],["far",{"_index":17,"title":{},"content":{"6":{},"25":{},"26":{}},"tags":{}}],["fashion",{"_index":1126,"title":{},"content":{"32":{}},"tags":{}}],["fast",{"_index":1084,"title":{},"content":{"30":{}},"tags":{}}],["faster",{"_index":581,"title":{},"content":{"21":{},"22":{}},"tags":{}}],["favor",{"_index":437,"title":{},"content":{"17":{}},"tags":{}}],["featur",{"_index":310,"title":{},"content":{"11":{}},"tags":{}}],["feedback",{"_index":1094,"title":{},"content":{"30":{}},"tags":{}}],["feel",{"_index":159,"title":{},"content":{"9":{}},"tags":{}}],["feet",{"_index":87,"title":{},"content":{"7":{}},"tags":{}}],["few",{"_index":61,"title":{},"content":{"7":{},"10":{}},"tags":{}}],["fi",{"_index":1102,"title":{},"content":{"30":{}},"tags":{}}],["fiddl",{"_index":905,"title":{},"content":{"25":{}},"tags":{}}],["fight",{"_index":426,"title":{},"content":{"17":{}},"tags":{}}],["file",{"_index":296,"title":{},"content":{"11":{},"23":{},"25":{},"26":{},"28":{},"31":{},"33":{}},"tags":{}}],["filetype=\"executable\">/usr/bin/cwebp/usr/bin/dwebp/usr/bin/gif2webp/usr/bin/img2webp/usr/bin/vwebp/usr/bin/webpinfo/usr/bin/webpmux/usr/lib64/glibc",{"_index":970,"title":{},"content":{"26":{}},"tags":{}}],["fill",{"_index":156,"title":{},"content":{"9":{}},"tags":{}}],["final",{"_index":38,"title":{"31":{},"35":{}},"content":{"7":{},"11":{},"22":{}},"tags":{}}],["find",{"_index":605,"title":{},"content":{"21":{},"33":{}},"tags":{}}],["finish",{"_index":574,"title":{},"content":{"21":{}},"tags":{}}],["first",{"_index":48,"title":{},"content":{"7":{},"9":{},"12":{},"17":{},"18":{},"27":{}},"tags":{}}],["firstpost",{"_index":1264,"title":{},"content":{},"tags":{"36":{}}}],["fix",{"_index":510,"title":{},"content":{"18":{}},"tags":{}}],["flag",{"_index":586,"title":{},"content":{"21":{},"22":{},"24":{},"26":{},"30":{}},"tags":{}}],["flatpak",{"_index":441,"title":{},"content":{"17":{}},"tags":{}}],["flaw",{"_index":1198,"title":{},"content":{"33":{}},"tags":{}}],["flto",{"_index":637,"title":{},"content":{"22":{}},"tags":{}}],["focu",{"_index":263,"title":{},"content":{"11":{}},"tags":{}}],["follow",{"_index":329,"title":{},"content":{"12":{},"13":{},"15":{}},"tags":{}}],["font",{"_index":206,"title":{},"content":{"10":{}},"tags":{}}],["fork",{"_index":1139,"title":{},"content":{"32":{}},"tags":{}}],["form",{"_index":1248,"title":{},"content":{"36":{}},"tags":{}}],["format",{"_index":685,"title":{},"content":{"23":{},"25":{},"26":{},"28":{}},"tags":{}}],["found",{"_index":676,"title":{},"content":{"22":{},"25":{},"26":{},"32":{}},"tags":{}}],["fprofil",{"_index":1088,"title":{},"content":{"30":{}},"tags":{}}],["frankli",{"_index":516,"title":{},"content":{"18":{}},"tags":{}}],["friend",{"_index":502,"title":{},"content":{"18":{}},"tags":{}}],["fruit",{"_index":609,"title":{},"content":{"21":{}},"tags":{}}],["frustrat",{"_index":321,"title":{},"content":{"12":{}},"tags":{}}],["function",{"_index":1092,"title":{},"content":{"30":{}},"tags":{}}],["futur",{"_index":1228,"title":{},"content":{"35":{}},"tags":{}}],["gain",{"_index":927,"title":{},"content":{"25":{},"26":{}},"tags":{}}],["gate",{"_index":1216,"title":{},"content":{"34":{}},"tags":{}}],["gave",{"_index":1080,"title":{},"content":{"30":{}},"tags":{}}],["gcc",{"_index":649,"title":{},"content":{"22":{},"30":{},"33":{}},"tags":{}}],["gener",{"_index":674,"title":{"32":{}},"content":{"22":{},"26":{},"27":{},"33":{}},"tags":{}}],["get",{"_index":247,"title":{},"content":{"10":{},"12":{},"14":{},"17":{},"21":{},"22":{},"26":{},"27":{},"29":{},"32":{}},"tags":{}}],["getsolu",{"_index":1260,"title":{},"content":{"36":{}},"tags":{}}],["gezeliu",{"_index":80,"title":{},"content":{"7":{}},"tags":{}}],["gif",{"_index":477,"title":{},"content":{"18":{}},"tags":{}}],["giflib",{"_index":744,"title":{},"content":{"23":{}},"tags":{}}],["github",{"_index":1261,"title":{},"content":{"36":{}},"tags":{}}],["give",{"_index":177,"title":{},"content":{"9":{},"12":{},"30":{},"34":{}},"tags":{}}],["given",{"_index":1093,"title":{},"content":{"30":{}},"tags":{}}],["glibc",{"_index":615,"title":{},"content":{"26":{}},"tags":{"21":{}}}],["global",{"_index":599,"title":{},"content":{"21":{}},"tags":{}}],["gnome",{"_index":281,"title":{},"content":{"11":{},"12":{},"17":{}},"tags":{}}],["gnu",{"_index":613,"title":{},"content":{"26":{}},"tags":{"21":{}}}],["go",{"_index":867,"title":{"26":{}},"content":{"23":{},"32":{},"34":{},"36":{}},"tags":{}}],["goal",{"_index":118,"title":{},"content":{"8":{},"11":{},"36":{}},"tags":{}}],["god",{"_index":1035,"title":{},"content":{"27":{}},"tags":{}}],["goe",{"_index":497,"title":{},"content":{"18":{}},"tags":{}}],["good",{"_index":292,"title":{},"content":{"11":{},"26":{},"28":{},"30":{},"34":{},"35":{}},"tags":{}}],["goodby",{"_index":275,"title":{},"content":{"11":{}},"tags":{}}],["googl",{"_index":695,"title":{},"content":{"23":{}},"tags":{}}],["gotten",{"_index":144,"title":{},"content":{"9":{}},"tags":{}}],["grab",{"_index":833,"title":{},"content":{"23":{}},"tags":{}}],["graphic",{"_index":212,"title":{},"content":{"10":{},"11":{}},"tags":{}}],["great",{"_index":889,"title":{"25":{}},"content":{"26":{},"29":{}},"tags":{}}],["greater",{"_index":565,"title":{},"content":{"21":{},"22":{}},"tags":{}}],["greatli",{"_index":566,"title":{},"content":{"21":{}},"tags":{}}],["group",{"_index":103,"title":{},"content":{"7":{},"8":{},"24":{}},"tags":{}}],["guarante",{"_index":626,"title":{},"content":{"22":{}},"tags":{}}],["guess",{"_index":775,"title":{},"content":{"23":{}},"tags":{}}],["guid",{"_index":184,"title":{},"content":{"10":{},"22":{},"25":{}},"tags":{}}],["h",{"_index":777,"title":{},"content":{"23":{}},"tags":{}}],["habit",{"_index":794,"title":{},"content":{"23":{}},"tags":{}}],["hacktoberfest",{"_index":26,"title":{},"content":{"7":{}},"tags":{}}],["halv",{"_index":1185,"title":{},"content":{"33":{}},"tags":{}}],["hammer",{"_index":389,"title":{},"content":{"15":{}},"tags":{}}],["handi",{"_index":937,"title":{},"content":{"25":{}},"tags":{}}],["hang",{"_index":50,"title":{},"content":{"7":{}},"tags":{}}],["happen",{"_index":1048,"title":{},"content":{"28":{},"30":{}},"tags":{}}],["happi",{"_index":262,"title":{},"content":{"10":{}},"tags":{}}],["hard",{"_index":1079,"title":{},"content":{"30":{},"32":{}},"tags":{}}],["hardli",{"_index":1039,"title":{},"content":{"27":{}},"tags":{}}],["hardwar",{"_index":568,"title":{},"content":{"21":{},"26":{},"30":{}},"tags":{}}],["have",{"_index":838,"title":{},"content":{"23":{},"32":{}},"tags":{}}],["header",{"_index":1190,"title":{},"content":{"33":{}},"tags":{}}],["healthi",{"_index":1112,"title":{},"content":{"31":{}},"tags":{}}],["heard",{"_index":683,"title":{},"content":{"23":{}},"tags":{}}],["heavi",{"_index":572,"title":{},"content":{"21":{}},"tags":{}}],["hello",{"_index":1,"title":{},"content":{"6":{}},"tags":{"36":{}}}],["help",{"_index":152,"title":{"12":{}},"content":{"9":{},"12":{},"27":{},"34":{},"36":{}},"tags":{}}],["here",{"_index":4,"title":{},"content":{"6":{},"12":{},"23":{},"25":{},"26":{},"27":{},"28":{},"29":{},"30":{},"33":{},"35":{}},"tags":{}}],["here'",{"_index":405,"title":{},"content":{"16":{},"18":{},"33":{}},"tags":{}}],["hi",{"_index":289,"title":{},"content":{"11":{}},"tags":{}}],["higher",{"_index":887,"title":{},"content":{"24":{},"26":{}},"tags":{}}],["highli",{"_index":1119,"title":{},"content":{"32":{}},"tags":{}}],["highlight",{"_index":1105,"title":{},"content":{"30":{},"36":{}},"tags":{}}],["hint",{"_index":1023,"title":{},"content":{"26":{},"30":{}},"tags":{}}],["histor",{"_index":583,"title":{},"content":{"21":{}},"tags":{}}],["hit",{"_index":480,"title":{},"content":{"18":{},"25":{}},"tags":{}}],["home",{"_index":888,"title":{},"content":{"24":{},"26":{}},"tags":{}}],["homepag",{"_index":75,"title":{},"content":{"7":{},"10":{},"23":{},"33":{}},"tags":{}}],["hope",{"_index":1165,"title":{},"content":{"33":{},"35":{},"36":{}},"tags":{}}],["hopefulli",{"_index":316,"title":{},"content":{"11":{}},"tags":{}}],["hot",{"_index":1083,"title":{},"content":{"30":{},"33":{}},"tags":{}}],["housekeep",{"_index":19,"title":{},"content":{},"tags":{"6":{}}}],["https://developers.google.com/speed/webp",{"_index":706,"title":{},"content":{"23":{}},"tags":{}}],["https://github.com/webmproject/libwebp/archive/refs/tags/v1.3.2.tar.gz",{"_index":704,"title":{},"content":{"23":{}},"tags":{}}],["https://github.com/zlib",{"_index":1149,"title":{},"content":{"33":{}},"tags":{}}],["huge",{"_index":1058,"title":{},"content":{"28":{}},"tags":{}}],["hurt",{"_index":938,"title":{},"content":{"25":{}},"tags":{}}],["hwcap",{"_index":616,"title":{},"content":{},"tags":{"21":{}}}],["hwcaps/x86",{"_index":812,"title":{},"content":{"23":{},"26":{}},"tags":{}}],["hyperfin",{"_index":842,"title":{},"content":{"23":{},"24":{},"25":{},"26":{},"33":{}},"tags":{}}],["i'v",{"_index":682,"title":{},"content":{"23":{}},"tags":{}}],["icon",{"_index":291,"title":{},"content":{"11":{}},"tags":{}}],["idea",{"_index":1082,"title":{},"content":{"30":{}},"tags":{}}],["ignor",{"_index":1095,"title":{},"content":{"30":{}},"tags":{}}],["ikey",{"_index":501,"title":{},"content":{"18":{}},"tags":{}}],["imag",{"_index":713,"title":{},"content":{"23":{},"28":{}},"tags":{}}],["implement",{"_index":254,"title":{},"content":{"10":{}},"tags":{}}],["import",{"_index":1229,"title":{},"content":{"35":{}},"tags":{}}],["improv",{"_index":575,"title":{},"content":{"21":{},"22":{},"23":{},"24":{},"26":{},"27":{},"31":{},"34":{},"36":{}},"tags":{}}],["in_fil",{"_index":778,"title":{},"content":{"23":{}},"tags":{}}],["includ",{"_index":400,"title":{},"content":{"16":{},"22":{},"25":{},"33":{}},"tags":{}}],["inclus",{"_index":472,"title":{},"content":{"18":{}},"tags":{}}],["increas",{"_index":641,"title":{},"content":{"22":{},"25":{},"26":{},"31":{}},"tags":{}}],["increasingli",{"_index":686,"title":{},"content":{"23":{}},"tags":{}}],["incred",{"_index":969,"title":{},"content":{"26":{}},"tags":{}}],["index",{"_index":723,"title":{},"content":{"23":{}},"tags":{}}],["indic",{"_index":932,"title":{},"content":{"25":{}},"tags":{}}],["indirectli",{"_index":788,"title":{},"content":{"23":{},"28":{}},"tags":{}}],["infam",{"_index":652,"title":{},"content":{"22":{}},"tags":{}}],["inform",{"_index":286,"title":{},"content":{"11":{},"16":{}},"tags":{}}],["infrastructur",{"_index":131,"title":{},"content":{"9":{}},"tags":{}}],["initi",{"_index":471,"title":{},"content":{"18":{}},"tags":{}}],["inlin",{"_index":1081,"title":{},"content":{"30":{},"33":{}},"tags":{}}],["input.png",{"_index":785,"title":{},"content":{"23":{}},"tags":{}}],["instal",{"_index":284,"title":{},"content":{"11":{},"15":{},"16":{},"18":{},"23":{},"26":{},"29":{},"31":{},"32":{},"33":{}},"tags":{}}],["instantli",{"_index":1184,"title":{},"content":{"33":{}},"tags":{}}],["instead",{"_index":526,"title":{},"content":{"18":{},"22":{},"24":{},"25":{},"34":{}},"tags":{}}],["instruct",{"_index":958,"title":{},"content":{"26":{}},"tags":{}}],["instrument",{"_index":665,"title":{},"content":{"22":{},"25":{}},"tags":{}}],["integr",{"_index":1143,"title":{},"content":{"32":{}},"tags":{}}],["inter",{"_index":869,"title":{},"content":{"24":{}},"tags":{}}],["interest",{"_index":322,"title":{},"content":{"12":{},"13":{},"15":{},"25":{}},"tags":{}}],["interestingli",{"_index":1107,"title":{},"content":{"30":{}},"tags":{}}],["intro",{"_index":546,"title":{"21":{}},"content":{},"tags":{}}],["introduc",{"_index":397,"title":{"16":{}},"content":{"32":{}},"tags":{}}],["invest",{"_index":604,"title":{},"content":{"21":{}},"tags":{}}],["invis",{"_index":175,"title":{},"content":{"9":{}},"tags":{}}],["invit",{"_index":335,"title":{},"content":{"12":{}},"tags":{}}],["isn't",{"_index":891,"title":{"25":{}},"content":{"25":{},"26":{},"28":{},"30":{},"32":{}},"tags":{}}],["iso",{"_index":268,"title":{},"content":{"11":{},"14":{},"18":{}},"tags":{}}],["issu",{"_index":252,"title":{},"content":{"10":{},"17":{},"18":{}},"tags":{}}],["it'",{"_index":9,"title":{},"content":{"6":{},"18":{},"26":{},"27":{},"28":{},"31":{},"32":{},"34":{}},"tags":{}}],["it'll",{"_index":1226,"title":{},"content":{"35":{}},"tags":{}}],["item",{"_index":470,"title":{},"content":{"18":{}},"tags":{}}],["itself",{"_index":419,"title":{},"content":{"16":{},"27":{}},"tags":{}}],["jakob",{"_index":79,"title":{},"content":{"7":{}},"tags":{}}],["januari",{"_index":77,"title":{},"content":{"7":{}},"tags":{}}],["job",{"_index":1215,"title":{},"content":{"34":{}},"tags":{}}],["joey",{"_index":304,"title":{},"content":{"11":{},"16":{},"17":{},"18":{}},"tags":{}}],["join",{"_index":62,"title":{},"content":{"7":{},"12":{}},"tags":{}}],["joy",{"_index":179,"title":{},"content":{"9":{},"12":{}},"tags":{}}],["jpeg",{"_index":720,"title":{},"content":{"23":{}},"tags":{}}],["jpg",{"_index":692,"title":{},"content":{"23":{}},"tags":{}}],["juli",{"_index":193,"title":{},"content":{"10":{}},"tags":{}}],["jumpa",{"_index":349,"title":{},"content":{"13":{}},"tags":{}}],["justin",{"_index":301,"title":{},"content":{"11":{}},"tags":{}}],["kasih",{"_index":346,"title":{},"content":{"13":{}},"tags":{}}],["kb",{"_index":1200,"title":{},"content":{"34":{}},"tags":{}}],["kde",{"_index":282,"title":{},"content":{"11":{},"17":{}},"tags":{}}],["keen",{"_index":185,"title":{},"content":{"10":{}},"tags":{}}],["keep",{"_index":341,"title":{},"content":{"13":{},"15":{},"23":{},"29":{},"36":{}},"tags":{}}],["key",{"_index":197,"title":{},"content":{"10":{}},"tags":{}}],["know",{"_index":342,"title":{},"content":{"13":{},"15":{},"28":{},"30":{}},"tags":{}}],["known",{"_index":725,"title":{},"content":{"23":{}},"tags":{}}],["lack",{"_index":936,"title":{},"content":{"25":{}},"tags":{}}],["laptop",{"_index":1234,"title":{},"content":{"35":{}},"tags":{}}],["larg",{"_index":634,"title":{},"content":{"22":{}},"tags":{}}],["larger",{"_index":638,"title":{},"content":{"22":{}},"tags":{}}],["largest",{"_index":834,"title":{},"content":{"23":{}},"tags":{}}],["last",{"_index":515,"title":{},"content":{"18":{}},"tags":{}}],["later",{"_index":1213,"title":{},"content":{"34":{}},"tags":{}}],["launch",{"_index":413,"title":{},"content":{"16":{}},"tags":{}}],["layout",{"_index":672,"title":{},"content":{"22":{}},"tags":{}}],["ld.bfd",{"_index":653,"title":{},"content":{"22":{}},"tags":{}}],["ld.ldd",{"_index":650,"title":{},"content":{"22":{}},"tags":{}}],["ldd",{"_index":796,"title":{},"content":{"23":{},"26":{}},"tags":{}}],["lead",{"_index":446,"title":{},"content":{"17":{},"30":{}},"tags":{}}],["learn",{"_index":155,"title":{},"content":{"9":{}},"tags":{}}],["learnt",{"_index":1236,"title":{},"content":{"35":{}},"tags":{}}],["led",{"_index":555,"title":{},"content":{"21":{}},"tags":{}}],["left",{"_index":68,"title":{},"content":{"7":{}},"tags":{}}],["leg",{"_index":646,"title":{},"content":{"22":{},"23":{}},"tags":{}}],["legibl",{"_index":287,"title":{},"content":{"11":{}},"tags":{}}],["less",{"_index":1254,"title":{},"content":{"36":{}},"tags":{}}],["let",{"_index":840,"title":{},"content":{"23":{}},"tags":{}}],["let'",{"_index":681,"title":{"24":{}},"content":{"22":{},"23":{},"24":{},"25":{},"26":{},"27":{},"29":{},"30":{},"32":{},"33":{}},"tags":{}}],["level",{"_index":1115,"title":{},"content":{"31":{},"36":{}},"tags":{}}],["lib",{"_index":997,"title":{},"content":{"26":{},"31":{}},"tags":{}}],["libc",{"_index":532,"title":{},"content":{"18":{}},"tags":{}}],["libc.so.6",{"_index":810,"title":{},"content":{"23":{},"26":{}},"tags":{}}],["libm.so.6",{"_index":819,"title":{},"content":{"23":{},"26":{}},"tags":{}}],["libpng",{"_index":789,"title":{},"content":{"23":{},"28":{},"32":{},"33":{},"34":{}},"tags":{}}],["libpng.so",{"_index":1063,"title":{},"content":{"29":{}},"tags":{}}],["libpng16.so.16",{"_index":807,"title":{},"content":{"23":{},"26":{}},"tags":{}}],["librari",{"_index":499,"title":{},"content":{"18":{},"22":{},"23":{},"25":{},"26":{},"29":{},"32":{},"33":{}},"tags":{}}],["libsharpyuv.so.0",{"_index":816,"title":{},"content":{"23":{},"26":{}},"tags":{}}],["libwebp",{"_index":554,"title":{"31":{}},"content":{"21":{},"23":{},"25":{},"26":{},"28":{},"29":{},"33":{},"35":{}},"tags":{}}],["libwebp.so",{"_index":831,"title":{},"content":{"23":{},"26":{},"27":{},"29":{}},"tags":{}}],["libwebp.so.7",{"_index":804,"title":{},"content":{"23":{},"26":{}},"tags":{}}],["libwebpdemux.so.2",{"_index":801,"title":{},"content":{"23":{},"26":{}},"tags":{}}],["libz",{"_index":1042,"title":{},"content":{"27":{}},"tags":{}}],["libz.so",{"_index":1038,"title":{},"content":{"27":{},"28":{},"29":{},"32":{}},"tags":{}}],["libz.so.1",{"_index":822,"title":{},"content":{"23":{},"26":{}},"tags":{}}],["licens",{"_index":707,"title":{},"content":{"23":{},"33":{}},"tags":{}}],["life",{"_index":481,"title":{},"content":{"18":{},"21":{}},"tags":{}}],["light",{"_index":1136,"title":{},"content":{"32":{}},"tags":{}}],["lil",{"_index":1146,"title":{"33":{}},"content":{},"tags":{}}],["limit",{"_index":579,"title":{},"content":{"21":{}},"tags":{}}],["line",{"_index":266,"title":{},"content":{"11":{}},"tags":{}}],["link",{"_index":651,"title":{},"content":{"22":{},"23":{},"24":{}},"tags":{}}],["linux",{"_index":559,"title":{},"content":{"21":{},"23":{},"26":{},"32":{}},"tags":{}}],["list",{"_index":312,"title":{},"content":{"11":{},"17":{},"18":{},"23":{}},"tags":{}}],["liter",{"_index":1036,"title":{},"content":{"27":{}},"tags":{}}],["littl",{"_index":182,"title":{},"content":{"10":{},"23":{},"28":{}},"tags":{}}],["live",{"_index":466,"title":{"18":{}},"content":{},"tags":{}}],["livingsilv",{"_index":518,"title":{},"content":{"18":{}},"tags":{}}],["lld",{"_index":982,"title":{},"content":{"26":{}},"tags":{}}],["llvm",{"_index":614,"title":{},"content":{},"tags":{"21":{}}}],["load",{"_index":967,"title":{},"content":{"26":{}},"tags":{}}],["loader",{"_index":966,"title":{},"content":{"26":{}},"tags":{}}],["log",{"_index":1239,"title":{},"content":{"36":{}},"tags":{}}],["long",{"_index":28,"title":{"18":{}},"content":{"7":{},"18":{}},"tags":{}}],["look",{"_index":469,"title":{},"content":{"18":{},"22":{},"23":{},"25":{},"26":{},"27":{},"32":{},"33":{},"34":{},"35":{}},"tags":{}}],["lossi",{"_index":715,"title":{},"content":{"23":{}},"tags":{}}],["lossless",{"_index":714,"title":{},"content":{"23":{}},"tags":{}}],["lot",{"_index":261,"title":{},"content":{"10":{},"21":{}},"tags":{}}],["love",{"_index":173,"title":{},"content":{"9":{}},"tags":{}}],["lower",{"_index":968,"title":{},"content":{"26":{}},"tags":{}}],["lpng16",{"_index":1193,"title":{},"content":{"33":{}},"tags":{}}],["lto",{"_index":588,"title":{},"content":{"21":{},"22":{},"24":{},"26":{},"29":{},"30":{},"34":{}},"tags":{"21":{}}}],["luckili",{"_index":445,"title":{},"content":{"17":{},"24":{},"25":{},"26":{},"30":{}},"tags":{}}],["machin",{"_index":377,"title":{},"content":{"15":{},"18":{}},"tags":{}}],["macro",{"_index":221,"title":{},"content":{"10":{}},"tags":{}}],["made",{"_index":311,"title":{},"content":{"11":{},"13":{}},"tags":{}}],["main",{"_index":624,"title":{},"content":{"22":{},"23":{}},"tags":{}}],["major",{"_index":1212,"title":{},"content":{"34":{}},"tags":{}}],["make",{"_index":102,"title":{},"content":{"7":{},"18":{},"23":{},"25":{}},"tags":{}}],["make_instal",{"_index":749,"title":{},"content":{"23":{}},"tags":{}}],["manag",{"_index":51,"title":{},"content":{"7":{},"17":{},"18":{}},"tags":{}}],["mani",{"_index":136,"title":{},"content":{"9":{},"12":{}},"tags":{}}],["mate",{"_index":351,"title":{"14":{},"16":{},"17":{}},"content":{"14":{},"15":{},"16":{},"17":{}},"tags":{"14":{}}}],["materi",{"_index":1227,"title":{},"content":{"35":{}},"tags":{}}],["matrix",{"_index":114,"title":{},"content":{"7":{},"8":{},"10":{},"12":{},"36":{}},"tags":{}}],["matter",{"_index":1085,"title":{},"content":{"30":{}},"tags":{}}],["max",{"_index":853,"title":{},"content":{"23":{},"24":{},"25":{},"26":{},"33":{}},"tags":{}}],["mb",{"_index":1011,"title":{},"content":{"26":{},"29":{},"30":{},"31":{}},"tags":{}}],["mean",{"_index":845,"title":{},"content":{"23":{},"24":{},"25":{},"26":{},"33":{}},"tags":{}}],["meaning",{"_index":610,"title":{},"content":{"21":{}},"tags":{}}],["meantim",{"_index":511,"title":{},"content":{"18":{}},"tags":{}}],["measli",{"_index":1017,"title":{},"content":{"26":{}},"tags":{}}],["medium",{"_index":1251,"title":{},"content":{"36":{}},"tags":{}}],["member",{"_index":5,"title":{},"content":{"6":{},"7":{},"8":{},"9":{}},"tags":{}}],["memori",{"_index":642,"title":{},"content":{"22":{}},"tags":{}}],["merchandis",{"_index":37,"title":{},"content":{"7":{}},"tags":{}}],["merg",{"_index":334,"title":{},"content":{"12":{},"32":{}},"tags":{}}],["mess",{"_index":1064,"title":{},"content":{"29":{}},"tags":{}}],["messag",{"_index":931,"title":{},"content":{"25":{}},"tags":{}}],["metadata",{"_index":758,"title":{},"content":{"23":{}},"tags":{}}],["metainfo",{"_index":205,"title":{},"content":{"10":{},"11":{}},"tags":{}}],["method",{"_index":563,"title":{},"content":{"21":{}},"tags":{}}],["micro",{"_index":954,"title":{},"content":{"26":{}},"tags":{}}],["midday",{"_index":168,"title":{},"content":{"9":{}},"tags":{}}],["migrat",{"_index":149,"title":{},"content":{"9":{}},"tags":{}}],["min",{"_index":852,"title":{},"content":{"23":{},"24":{},"25":{},"26":{},"33":{}},"tags":{}}],["mind",{"_index":508,"title":{},"content":{"18":{},"35":{}},"tags":{}}],["minion",{"_index":476,"title":{},"content":{"18":{}},"tags":{}}],["minor",{"_index":886,"title":{},"content":{"24":{}},"tags":{}}],["mode",{"_index":1142,"title":{},"content":{"32":{},"33":{}},"tags":{}}],["modern",{"_index":278,"title":{},"content":{"11":{}},"tags":{}}],["moment",{"_index":871,"title":{},"content":{"24":{},"25":{}},"tags":{}}],["monitor",{"_index":300,"title":{},"content":{"11":{},"12":{}},"tags":{}}],["monitoring.yml",{"_index":230,"title":{},"content":{"10":{},"11":{}},"tags":{}}],["month",{"_index":27,"title":{},"content":{"7":{}},"tags":{}}],["more",{"_index":10,"title":{"34":{}},"content":{"6":{},"7":{},"9":{},"10":{},"11":{},"15":{},"16":{},"18":{},"21":{},"23":{},"24":{},"25":{},"27":{},"28":{},"33":{},"34":{},"36":{}},"tags":{}}],["moss",{"_index":506,"title":{},"content":{"18":{}},"tags":{"18":{}}}],["mostli",{"_index":73,"title":{},"content":{"7":{},"9":{},"14":{},"23":{}},"tags":{}}],["motiv",{"_index":60,"title":{},"content":{"7":{}},"tags":{}}],["move",{"_index":111,"title":{},"content":{"7":{},"14":{},"15":{},"17":{}},"tags":{}}],["ms",{"_index":847,"title":{},"content":{"23":{},"24":{},"25":{},"26":{},"29":{},"30":{},"31":{},"33":{},"34":{}},"tags":{}}],["much",{"_index":178,"title":{},"content":{"9":{},"10":{},"21":{},"23":{},"24":{},"27":{},"29":{},"33":{}},"tags":{}}],["multimedia.codec",{"_index":711,"title":{},"content":{"23":{}},"tags":{}}],["murmur",{"_index":1259,"title":{},"content":{"36":{}},"tags":{}}],["myself",{"_index":303,"title":{},"content":{"11":{}},"tags":{}}],["n",{"_index":964,"title":{},"content":{"26":{},"30":{}},"tags":{}}],["n/a",{"_index":238,"title":{},"content":{"10":{}},"tags":{}}],["name",{"_index":702,"title":{},"content":{"23":{},"33":{}},"tags":{}}],["name>libwebpmultimedia.codecsa",{"_index":760,"title":{},"content":{"23":{}},"tags":{}}],["xml:lang=\"en\">webp",{"_index":762,"title":{},"content":{"23":{}},"tags":{}}],["ye",{"_index":733,"title":{},"content":{"23":{},"26":{},"33":{}},"tags":{}}],["year",{"_index":11,"title":{},"content":{"6":{},"14":{}},"tags":{}}],["yolo",{"_index":1167,"title":{},"content":{"33":{}},"tags":{}}],["you'd",{"_index":1124,"title":{},"content":{"32":{}},"tags":{}}],["you'll",{"_index":654,"title":{},"content":{"22":{}},"tags":{}}],["you'r",{"_index":392,"title":{},"content":{"15":{}},"tags":{}}],["yuv",{"_index":1056,"title":{},"content":{"28":{},"29":{},"31":{}},"tags":{}}],["zee",{"_index":1144,"title":{"33":{}},"content":{},"tags":{}}],["zlib",{"_index":1052,"title":{"34":{}},"content":{"28":{},"32":{},"33":{},"34":{}},"tags":{}}],["zobel",{"_index":302,"title":{},"content":{"11":{}},"tags":{}}]],"pipeline":["stemmer"]}} \ No newline at end of file diff --git a/search-index-docs-default-current.json b/search-index-docs-default-current.json index e6547dee8..19cc79efc 100644 --- a/search-index-docs-default-current.json +++ b/search-index-docs-default-current.json @@ -1 +1 @@ -{"documents":[{"id":20,"pageTitle":"","sectionTitle":"📄️ Eopkg Configuration","sectionRoute":"/docs/category/advanced-configuration","type":"docs"},{"id":21,"pageTitle":"","sectionTitle":"📄️ Local Repository","sectionRoute":"/docs/category/advanced-configuration","type":"docs"},{"id":37,"pageTitle":"","sectionTitle":"📄️ DroidCam","sectionRoute":"/docs/category/camera","type":"docs"},{"id":38,"pageTitle":"","sectionTitle":"📄️ Laptops","sectionRoute":"/docs/category/compatibility","type":"docs"},{"id":39,"pageTitle":"","sectionTitle":"📄️ WiFi","sectionRoute":"/docs/category/compatibility","type":"docs"},{"id":40,"pageTitle":"","sectionTitle":"📄️ Community Guidelines","sectionRoute":"/docs/category/contributing","type":"docs"},{"id":41,"pageTitle":"","sectionTitle":"📄️ Getting Involved","sectionRoute":"/docs/category/contributing","type":"docs"},{"id":42,"pageTitle":"","sectionTitle":"📄️ Solus Style Guide","sectionRoute":"/docs/category/contributing","type":"docs"},{"id":43,"pageTitle":"","sectionTitle":"📄️ Testing an ISO","sectionRoute":"/docs/category/contributing","type":"docs"},{"id":44,"pageTitle":"","sectionTitle":"📄️ IBus","sectionRoute":"/docs/category/localization","type":"docs"},{"id":45,"pageTitle":"","sectionTitle":"📄️ Android","sectionRoute":"/docs/category/mobile","type":"docs"},{"id":46,"pageTitle":"","sectionTitle":"📄️ Apple","sectionRoute":"/docs/category/mobile","type":"docs"},{"id":47,"pageTitle":"","sectionTitle":"📄️ Samba File Sharing","sectionRoute":"/docs/category/networking","type":"docs"},{"id":48,"pageTitle":"","sectionTitle":"📄️ TigerVNC","sectionRoute":"/docs/category/networking","type":"docs"},{"id":49,"pageTitle":"","sectionTitle":"📄️ Wireshark","sectionRoute":"/docs/category/networking","type":"docs"},{"id":50,"pageTitle":"","sectionTitle":"📄️ XRDP","sectionRoute":"/docs/category/networking","type":"docs"},{"id":59,"pageTitle":"","sectionTitle":"📄️ Basics to Package Management","sectionRoute":"/docs/category/package-management","type":"docs"},{"id":60,"pageTitle":"","sectionTitle":"📄️ History and Software Rollback","sectionRoute":"/docs/category/package-management","type":"docs"},{"id":61,"pageTitle":"","sectionTitle":"📄️ Repository Management","sectionRoute":"/docs/category/package-management","type":"docs"},{"id":51,"pageTitle":"","sectionTitle":"📄️ Mice and Touchpads","sectionRoute":"/docs/category/peripherals","type":"docs"},{"id":52,"pageTitle":"","sectionTitle":"📄️ MIDI Keyboards","sectionRoute":"/docs/category/peripherals","type":"docs"},{"id":53,"pageTitle":"","sectionTitle":"📄️ Printers and Scanners","sectionRoute":"/docs/category/peripherals","type":"docs"},{"id":54,"pageTitle":"","sectionTitle":"📄️ Maintainership","sectionRoute":"/docs/category/procedures","type":"docs"},{"id":55,"pageTitle":"","sectionTitle":"📄️ Package Inclusion Policy","sectionRoute":"/docs/category/procedures","type":"docs"},{"id":56,"pageTitle":"","sectionTitle":"📄️ Release Processes","sectionRoute":"/docs/category/procedures","type":"docs"},{"id":57,"pageTitle":"","sectionTitle":"📄️ Requesting a Package Update","sectionRoute":"/docs/category/procedures","type":"docs"},{"id":58,"pageTitle":"","sectionTitle":"📄️ Requesting a Package","sectionRoute":"/docs/category/procedures","type":"docs"},{"id":62,"pageTitle":"","sectionTitle":"📄️ Boot Management","sectionRoute":"/docs/category/quick-start","type":"docs"},{"id":63,"pageTitle":"","sectionTitle":"📄️ Default Applications","sectionRoute":"/docs/category/quick-start","type":"docs"},{"id":64,"pageTitle":"","sectionTitle":"🗃️ Preparing to Install","sectionRoute":"/docs/category/quick-start","type":"docs"},{"id":65,"pageTitle":"","sectionTitle":"📄️ Software Center","sectionRoute":"/docs/category/quick-start","type":"docs"},{"id":68,"pageTitle":"","sectionTitle":"🗃️ Camera","sectionRoute":"/docs/category/software","type":"docs"},{"id":69,"pageTitle":"","sectionTitle":"📄️ Command Line","sectionRoute":"/docs/category/software","type":"docs"},{"id":70,"pageTitle":"","sectionTitle":"📄️ Configuration File Locations","sectionRoute":"/docs/category/software","type":"docs"},{"id":71,"pageTitle":"","sectionTitle":"📄️ Desktops","sectionRoute":"/docs/category/software","type":"docs"},{"id":72,"pageTitle":"","sectionTitle":"🗃️ Development","sectionRoute":"/docs/category/software","type":"docs"},{"id":73,"pageTitle":"","sectionTitle":"📄️ Gaming","sectionRoute":"/docs/category/software","type":"docs"},{"id":74,"pageTitle":"","sectionTitle":"🗃️ Localization","sectionRoute":"/docs/category/software","type":"docs"},{"id":75,"pageTitle":"","sectionTitle":"🗃️ Networking","sectionRoute":"/docs/category/software","type":"docs"},{"id":76,"pageTitle":"","sectionTitle":"📄️ Sound","sectionRoute":"/docs/category/software","type":"docs"},{"id":77,"pageTitle":"","sectionTitle":"🗃️ Third Party","sectionRoute":"/docs/category/software","type":"docs"},{"id":78,"pageTitle":"","sectionTitle":"🗃️ Utilities","sectionRoute":"/docs/category/software","type":"docs"},{"id":79,"pageTitle":"","sectionTitle":"🗃️ Virtualization","sectionRoute":"/docs/category/software","type":"docs"},{"id":80,"pageTitle":"","sectionTitle":"🗃️ Web","sectionRoute":"/docs/category/software","type":"docs"},{"id":66,"pageTitle":"","sectionTitle":"📄️ KSysGuard","sectionRoute":"/docs/category/utilities","type":"docs"},{"id":67,"pageTitle":"","sectionTitle":"📄️ KDE Wallet","sectionRoute":"/docs/category/utilities","type":"docs"},{"id":82,"pageTitle":"","sectionTitle":"📄️ VirtualBox","sectionRoute":"/docs/category/virtualization","type":"docs"},{"id":81,"pageTitle":"","sectionTitle":"📄️ Open Broadcaster Software (OBS)","sectionRoute":"/docs/category/web","type":"docs"},{"id":83,"pageTitle":"Packaging Overview","sectionTitle":"Packaging Overview","sectionRoute":"/docs/packaging/","type":"docs"},{"id":84,"pageTitle":"Packaging Overview","sectionTitle":"Development environment preparation","sectionRoute":"/docs/packaging/#development-environment-preparation","type":"docs"},{"id":85,"pageTitle":"Packaging Overview","sectionTitle":"Prior to building a package","sectionRoute":"/docs/packaging/#prior-to-building-a-package","type":"docs"},{"id":86,"pageTitle":"Packaging Overview","sectionTitle":"Building packages","sectionRoute":"/docs/packaging/#building-packages","type":"docs"},{"id":87,"pageTitle":"Eopkg Configuration","sectionTitle":"Eopkg Configuration","sectionRoute":"/docs/packaging/advanced-config/eopkg-configuration","type":"docs"},{"id":88,"pageTitle":"Eopkg Configuration","sectionTitle":"Copying the default configuration","sectionRoute":"/docs/packaging/advanced-config/eopkg-configuration#copying-the-default-configuration","type":"docs"},{"id":89,"pageTitle":"Eopkg Configuration","sectionTitle":"Notable keys","sectionRoute":"/docs/packaging/advanced-config/eopkg-configuration#notable-keys","type":"docs"},{"id":90,"pageTitle":"Eopkg Configuration","sectionTitle":"Restoring defaults","sectionRoute":"/docs/packaging/advanced-config/eopkg-configuration#restoring-defaults","type":"docs"},{"id":95,"pageTitle":"Packaging using a local repository","sectionTitle":"Packaging using a local repository","sectionRoute":"/docs/packaging/advanced-config/local-repository","type":"docs"},{"id":96,"pageTitle":"Packaging using a local repository","sectionTitle":"Install the local profile","sectionRoute":"/docs/packaging/advanced-config/local-repository#install-the-local-profile","type":"docs"},{"id":97,"pageTitle":"Packaging using a local repository","sectionTitle":"Using the local repository","sectionRoute":"/docs/packaging/advanced-config/local-repository#using-the-local-repository","type":"docs"},{"id":98,"pageTitle":"Packaging using a local repository","sectionTitle":"Copying .eopkg files to the local repository","sectionRoute":"/docs/packaging/advanced-config/local-repository#copying-eopkg-files-to-the-local-repository","type":"docs"},{"id":99,"pageTitle":"Packaging using a local repository","sectionTitle":"Listing locally built eopkg files","sectionRoute":"/docs/packaging/advanced-config/local-repository#listing-locally-built-eopkg-files","type":"docs"},{"id":100,"pageTitle":"Packaging using a local repository","sectionTitle":"Using the local repository to build a package","sectionRoute":"/docs/packaging/advanced-config/local-repository#using-the-local-repository-to-build-a-package","type":"docs"},{"id":101,"pageTitle":"Packaging using a local repository","sectionTitle":"A streamlined local repository workflow for stack updates","sectionRoute":"/docs/packaging/advanced-config/local-repository#a-streamlined-local-repository-workflow-for-stack-updates","type":"docs"},{"id":102,"pageTitle":"Packaging using a local repository","sectionTitle":"Best practices when working with a solbuild local repository","sectionRoute":"/docs/packaging/advanced-config/local-repository#best-practices-when-working-with-a-solbuild-local-repository","type":"docs"},{"id":103,"pageTitle":"Packaging using a local repository","sectionTitle":"Installing packages from the local repository index","sectionRoute":"/docs/packaging/advanced-config/local-repository#installing-packages-from-the-local-repository-index","type":"docs"},{"id":104,"pageTitle":"Packaging using a local repository","sectionTitle":"Creating or updating the local repository index","sectionRoute":"/docs/packaging/advanced-config/local-repository#creating-or-updating-the-local-repository-index","type":"docs"},{"id":105,"pageTitle":"Packaging using a local repository","sectionTitle":"Package resolution priority in eopkg","sectionRoute":"/docs/packaging/advanced-config/local-repository#package-resolution-priority-in-eopkg","type":"docs"},{"id":106,"pageTitle":"Packaging using a local repository","sectionTitle":"Adding the local repository index to the eopkg repository database","sectionRoute":"/docs/packaging/advanced-config/local-repository#adding-the-local-repository-index-to-the-eopkg-repository-database","type":"docs"},{"id":107,"pageTitle":"Packaging using a local repository","sectionTitle":"Closing thoughts","sectionRoute":"/docs/packaging/advanced-config/local-repository#closing-thoughts","type":"docs"},{"id":91,"pageTitle":"AppStream Metainfo","sectionTitle":"AppStream Metainfo","sectionRoute":"/docs/packaging/appstream-metainfo","type":"docs"},{"id":92,"pageTitle":"AppStream Metainfo","sectionTitle":"Adding appstream metainfo to an existing package","sectionRoute":"/docs/packaging/appstream-metainfo#adding-appstream-metainfo-to-an-existing-package","type":"docs"},{"id":93,"pageTitle":"AppStream Metainfo","sectionTitle":"Testing appstream metainfo","sectionRoute":"/docs/packaging/appstream-metainfo#testing-appstream-metainfo","type":"docs"},{"id":94,"pageTitle":"AppStream Metainfo","sectionTitle":"Other Info","sectionRoute":"/docs/packaging/appstream-metainfo#other-info","type":"docs"},{"id":117,"pageTitle":"Creating a New Package","sectionTitle":"Creating a New Package","sectionRoute":"/docs/packaging/creating-a-new-package","type":"docs"},{"id":118,"pageTitle":"Creating a New Package","sectionTitle":"Update an existing clone","sectionRoute":"/docs/packaging/creating-a-new-package#update-an-existing-clone","type":"docs"},{"id":119,"pageTitle":"Creating a New Package","sectionTitle":"Create a new branch","sectionRoute":"/docs/packaging/creating-a-new-package#create-a-new-branch","type":"docs"},{"id":120,"pageTitle":"Creating a New Package","sectionTitle":"Create the MAINTAINERS.md file","sectionRoute":"/docs/packaging/creating-a-new-package#create-the-maintainersmd-file","type":"docs"},{"id":121,"pageTitle":"Creating a New Package","sectionTitle":"Create the package.yml file","sectionRoute":"/docs/packaging/creating-a-new-package#create-the-packageyml-file","type":"docs"},{"id":122,"pageTitle":"Creating a New Package","sectionTitle":"Build the package","sectionRoute":"/docs/packaging/creating-a-new-package#build-the-package","type":"docs"},{"id":123,"pageTitle":"Creating a New Package","sectionTitle":"Commit your changes","sectionRoute":"/docs/packaging/creating-a-new-package#commit-your-changes","type":"docs"},{"id":124,"pageTitle":"Creating a New Package","sectionTitle":"Commit message format for new packages","sectionRoute":"/docs/packaging/creating-a-new-package#commit-message-format-for-new-packages","type":"docs"},{"id":108,"pageTitle":"Git Basics","sectionTitle":"Git Basics","sectionRoute":"/docs/packaging/git-basics","type":"docs"},{"id":109,"pageTitle":"Git Basics","sectionTitle":"Working with branches","sectionRoute":"/docs/packaging/git-basics#working-with-branches","type":"docs"},{"id":110,"pageTitle":"Git Basics","sectionTitle":"Keeping your branch up to date with the main branch","sectionRoute":"/docs/packaging/git-basics#keeping-your-branch-up-to-date-with-the-main-branch","type":"docs"},{"id":111,"pageTitle":"Git Basics","sectionTitle":"Adding files","sectionRoute":"/docs/packaging/git-basics#adding-files","type":"docs"},{"id":112,"pageTitle":"Git Basics","sectionTitle":"Removing files","sectionRoute":"/docs/packaging/git-basics#removing-files","type":"docs"},{"id":113,"pageTitle":"Git Basics","sectionTitle":"Renaming files","sectionRoute":"/docs/packaging/git-basics#renaming-files","type":"docs"},{"id":114,"pageTitle":"Git Basics","sectionTitle":"Check the changes in your files","sectionRoute":"/docs/packaging/git-basics#check-the-changes-in-your-files","type":"docs"},{"id":115,"pageTitle":"Git Basics","sectionTitle":"Commit your changes","sectionRoute":"/docs/packaging/git-basics#commit-your-changes","type":"docs"},{"id":116,"pageTitle":"Git Basics","sectionTitle":"Deleting your branch after a pull request is merged","sectionRoute":"/docs/packaging/git-basics#deleting-your-branch-after-a-pull-request-is-merged","type":"docs"},{"id":125,"pageTitle":"monitoring.yml","sectionTitle":"monitoring.yml","sectionRoute":"/docs/packaging/monitoring.yml","type":"docs"},{"id":126,"pageTitle":"monitoring.yml","sectionTitle":"Adding monitoring.yml to an existing package","sectionRoute":"/docs/packaging/monitoring.yml#adding-monitoringyml-to-an-existing-package","type":"docs"},{"id":127,"pageTitle":"monitoring.yml","sectionTitle":"systemd as an example","sectionRoute":"/docs/packaging/monitoring.yml#systemd-as-an-example","type":"docs"},{"id":128,"pageTitle":"monitoring.yml","sectionTitle":"\"releases\" fields","sectionRoute":"/docs/packaging/monitoring.yml#releases-fields","type":"docs"},{"id":129,"pageTitle":"monitoring.yml","sectionTitle":"Finding the Anitya ID","sectionRoute":"/docs/packaging/monitoring.yml#finding-the-anitya-id","type":"docs"},{"id":130,"pageTitle":"monitoring.yml","sectionTitle":"\"security\" fields","sectionRoute":"/docs/packaging/monitoring.yml#security-fields","type":"docs"},{"id":131,"pageTitle":"monitoring.yml","sectionTitle":"What is a CPE Name?","sectionRoute":"/docs/packaging/monitoring.yml#what-is-a-cpe-name","type":"docs"},{"id":132,"pageTitle":"monitoring.yml","sectionTitle":"Finding the CPE Name","sectionRoute":"/docs/packaging/monitoring.yml#finding-the-cpe-name","type":"docs"},{"id":133,"pageTitle":"monitoring.yml","sectionTitle":"No known CPE","sectionRoute":"/docs/packaging/monitoring.yml#no-known-cpe","type":"docs"},{"id":134,"pageTitle":"package.yml","sectionTitle":"package.yml","sectionRoute":"/docs/packaging/package.yml","type":"docs"},{"id":135,"pageTitle":"package.yml","sectionTitle":"Format","sectionRoute":"/docs/packaging/package.yml#format","type":"docs"},{"id":136,"pageTitle":"package.yml","sectionTitle":"Keys","sectionRoute":"/docs/packaging/package.yml#keys","type":"docs"},{"id":137,"pageTitle":"package.yml","sectionTitle":"Mandatory keys","sectionRoute":"/docs/packaging/package.yml#mandatory-keys","type":"docs"},{"id":138,"pageTitle":"package.yml","sectionTitle":"Optional, supported keys","sectionRoute":"/docs/packaging/package.yml#optional-supported-keys","type":"docs"},{"id":139,"pageTitle":"package.yml","sectionTitle":"Packaging step keys, optional","sectionRoute":"/docs/packaging/package.yml#packaging-step-keys-optional","type":"docs"},{"id":140,"pageTitle":"package.yml","sectionTitle":"Optimize values","sectionRoute":"/docs/packaging/package.yml#optimize-values","type":"docs"},{"id":141,"pageTitle":"package.yml","sectionTitle":"Macros","sectionRoute":"/docs/packaging/package.yml#macros","type":"docs"},{"id":142,"pageTitle":"package.yml","sectionTitle":"Usage","sectionRoute":"/docs/packaging/package.yml#usage","type":"docs"},{"id":143,"pageTitle":"package.yml","sectionTitle":"Actionable macros","sectionRoute":"/docs/packaging/package.yml#actionable-macros","type":"docs"},{"id":144,"pageTitle":"package.yml","sectionTitle":"Haskell actionable macros","sectionRoute":"/docs/packaging/package.yml#haskell-actionable-macros","type":"docs"},{"id":145,"pageTitle":"package.yml","sectionTitle":"Ninja actionable macros","sectionRoute":"/docs/packaging/package.yml#ninja-actionable-macros","type":"docs"},{"id":146,"pageTitle":"package.yml","sectionTitle":"Perl actionable macros","sectionRoute":"/docs/packaging/package.yml#perl-actionable-macros","type":"docs"},{"id":147,"pageTitle":"package.yml","sectionTitle":"Python actionable macros","sectionRoute":"/docs/packaging/package.yml#python-actionable-macros","type":"docs"},{"id":148,"pageTitle":"package.yml","sectionTitle":"Ruby actionable macros","sectionRoute":"/docs/packaging/package.yml#ruby-actionable-macros","type":"docs"},{"id":149,"pageTitle":"package.yml","sectionTitle":"Rust (cargo) actionable macros","sectionRoute":"/docs/packaging/package.yml#rust-cargo-actionable-macros","type":"docs"},{"id":150,"pageTitle":"package.yml","sectionTitle":"Qt actionable macros","sectionRoute":"/docs/packaging/package.yml#qt-actionable-macros","type":"docs"},{"id":151,"pageTitle":"package.yml","sectionTitle":"Waf actionable macros","sectionRoute":"/docs/packaging/package.yml#waf-actionable-macros","type":"docs"},{"id":152,"pageTitle":"package.yml","sectionTitle":"BOLT actionable macros","sectionRoute":"/docs/packaging/package.yml#bolt-actionable-macros","type":"docs"},{"id":153,"pageTitle":"package.yml","sectionTitle":"Variable macros","sectionRoute":"/docs/packaging/package.yml#variable-macros","type":"docs"},{"id":154,"pageTitle":"package.yml","sectionTitle":"Variables","sectionRoute":"/docs/packaging/package.yml#variables","type":"docs"},{"id":155,"pageTitle":"package.yml","sectionTitle":"Types","sectionRoute":"/docs/packaging/package.yml#types","type":"docs"},{"id":156,"pageTitle":"package.yml","sectionTitle":"string","sectionRoute":"/docs/packaging/package.yml#string","type":"docs"},{"id":157,"pageTitle":"package.yml","sectionTitle":"string(s)","sectionRoute":"/docs/packaging/package.yml#strings","type":"docs"},{"id":158,"pageTitle":"package.yml","sectionTitle":"integer","sectionRoute":"/docs/packaging/package.yml#integer","type":"docs"},{"id":159,"pageTitle":"package.yml","sectionTitle":"list","sectionRoute":"/docs/packaging/package.yml#list","type":"docs"},{"id":160,"pageTitle":"package.yml","sectionTitle":"dict","sectionRoute":"/docs/packaging/package.yml#dict","type":"docs"},{"id":161,"pageTitle":"package.yml","sectionTitle":"dict(s)","sectionRoute":"/docs/packaging/package.yml#dicts","type":"docs"},{"id":162,"pageTitle":"package.yml","sectionTitle":"Packaging practices","sectionRoute":"/docs/packaging/package.yml#packaging-practices","type":"docs"},{"id":163,"pageTitle":"Packaging Changes","sectionTitle":"Packaging Changes","sectionRoute":"/docs/packaging/packaging-changes","type":"docs"},{"id":164,"pageTitle":"Packaging Changes","sectionTitle":"2024","sectionRoute":"/docs/packaging/packaging-changes#2024","type":"docs"},{"id":165,"pageTitle":"Packaging Changes","sectionTitle":"May","sectionRoute":"/docs/packaging/packaging-changes#may","type":"docs"},{"id":166,"pageTitle":"Packaging Changes","sectionTitle":"February","sectionRoute":"/docs/packaging/packaging-changes#february","type":"docs"},{"id":167,"pageTitle":"Packaging Changes","sectionTitle":"2023","sectionRoute":"/docs/packaging/packaging-changes#2023","type":"docs"},{"id":168,"pageTitle":"Packaging Changes","sectionTitle":"October","sectionRoute":"/docs/packaging/packaging-changes#october","type":"docs"},{"id":169,"pageTitle":"Packaging Changes","sectionTitle":"September","sectionRoute":"/docs/packaging/packaging-changes#september","type":"docs"},{"id":170,"pageTitle":"Packaging Changes","sectionTitle":"August","sectionRoute":"/docs/packaging/packaging-changes#august","type":"docs"},{"id":171,"pageTitle":"Packaging Changes","sectionTitle":"April","sectionRoute":"/docs/packaging/packaging-changes#april","type":"docs"},{"id":172,"pageTitle":"Packaging Changes","sectionTitle":"2022 and Earlier","sectionRoute":"/docs/packaging/packaging-changes#2022-and-earlier","type":"docs"},{"id":173,"pageTitle":"Packaging Practices","sectionTitle":"Packaging Practices","sectionRoute":"/docs/packaging/packaging-practices","type":"docs"},{"id":174,"pageTitle":"Packaging Practices","sectionTitle":"Package naming","sectionRoute":"/docs/packaging/packaging-practices#package-naming","type":"docs"},{"id":175,"pageTitle":"Packaging Practices","sectionTitle":"The devel subpackage","sectionRoute":"/docs/packaging/packaging-practices#the-devel-subpackage","type":"docs"},{"id":176,"pageTitle":"Packaging Practices","sectionTitle":"The docs subpackage","sectionRoute":"/docs/packaging/packaging-practices#the-docs-subpackage","type":"docs"},{"id":177,"pageTitle":"Packaging Practices","sectionTitle":"The 32bit subpackage","sectionRoute":"/docs/packaging/packaging-practices#the-32bit-subpackage","type":"docs"},{"id":178,"pageTitle":"Packaging Practices","sectionTitle":"The utils subpackage","sectionRoute":"/docs/packaging/packaging-practices#the-utils-subpackage","type":"docs"},{"id":179,"pageTitle":"Packaging Practices","sectionTitle":"Maintenance","sectionRoute":"/docs/packaging/packaging-practices#maintenance","type":"docs"},{"id":180,"pageTitle":"Packaging Practices","sectionTitle":"Licenses","sectionRoute":"/docs/packaging/packaging-practices#licenses","type":"docs"},{"id":181,"pageTitle":"Packaging Practices","sectionTitle":"Build dependencies","sectionRoute":"/docs/packaging/packaging-practices#build-dependencies","type":"docs"},{"id":182,"pageTitle":"Packaging Practices","sectionTitle":"Background","sectionRoute":"/docs/packaging/packaging-practices#background","type":"docs"},{"id":183,"pageTitle":"Packaging Practices","sectionTitle":"Finding what package provides a pkgconfig dependency (if any)","sectionRoute":"/docs/packaging/packaging-practices#finding-what-package-provides-a-pkgconfig-dependency-if-any","type":"docs"},{"id":184,"pageTitle":"Packaging Practices","sectionTitle":"Using pkgconfig dependencies","sectionRoute":"/docs/packaging/packaging-practices#using-pkgconfig-dependencies","type":"docs"},{"id":185,"pageTitle":"Packaging Practices","sectionTitle":"Using explicitly named dependencies","sectionRoute":"/docs/packaging/packaging-practices#using-explicitly-named-dependencies","type":"docs"},{"id":186,"pageTitle":"Packaging Practices","sectionTitle":"Runtime dependencies","sectionRoute":"/docs/packaging/packaging-practices#runtime-dependencies","type":"docs"},{"id":187,"pageTitle":"Packaging Practices","sectionTitle":"Check dependencies","sectionRoute":"/docs/packaging/packaging-practices#check-dependencies","type":"docs"},{"id":188,"pageTitle":"Packaging Practices","sectionTitle":"Example","sectionRoute":"/docs/packaging/packaging-practices#example","type":"docs"},{"id":189,"pageTitle":"Packaging Practices","sectionTitle":"Patching / extra files","sectionRoute":"/docs/packaging/packaging-practices#patching--extra-files","type":"docs"},{"id":190,"pageTitle":"Packaging Practices","sectionTitle":"Applying a patch","sectionRoute":"/docs/packaging/packaging-practices#applying-a-patch","type":"docs"},{"id":191,"pageTitle":"Packaging Practices","sectionTitle":"Installing extra files","sectionRoute":"/docs/packaging/packaging-practices#installing-extra-files","type":"docs"},{"id":192,"pageTitle":"Packaging Practices","sectionTitle":"Patterns","sectionRoute":"/docs/packaging/packaging-practices#patterns","type":"docs"},{"id":193,"pageTitle":"Packaging Practices","sectionTitle":"Replace / rename","sectionRoute":"/docs/packaging/packaging-practices#replace--rename","type":"docs"},{"id":194,"pageTitle":"Prepare for packaging","sectionTitle":"Prepare for packaging","sectionRoute":"/docs/packaging/prepare-for-packaging","type":"docs"},{"id":195,"pageTitle":"Prepare for packaging","sectionTitle":"Switch to the Unstable repository","sectionRoute":"/docs/packaging/prepare-for-packaging#switch-to-the-unstable-repository","type":"docs"},{"id":196,"pageTitle":"Prepare for packaging","sectionTitle":"Setting up the packager file","sectionRoute":"/docs/packaging/prepare-for-packaging#setting-up-the-packager-file","type":"docs"},{"id":197,"pageTitle":"Prepare for packaging","sectionTitle":"Installing development tools","sectionRoute":"/docs/packaging/prepare-for-packaging#installing-development-tools","type":"docs"},{"id":198,"pageTitle":"Prepare for packaging","sectionTitle":"Setting up a GitHub account and Git","sectionRoute":"/docs/packaging/prepare-for-packaging#setting-up-a-github-account-and-git","type":"docs"},{"id":199,"pageTitle":"Prepare for packaging","sectionTitle":"Configure github-cli.","sectionRoute":"/docs/packaging/prepare-for-packaging#configure-github-cli","type":"docs"},{"id":200,"pageTitle":"Prepare for packaging","sectionTitle":"Git identity setup","sectionRoute":"/docs/packaging/prepare-for-packaging#git-identity-setup","type":"docs"},{"id":201,"pageTitle":"Prepare for packaging","sectionTitle":"Setting up solbuild","sectionRoute":"/docs/packaging/prepare-for-packaging#setting-up-solbuild","type":"docs"},{"id":202,"pageTitle":"Prepare for packaging","sectionTitle":"Updating solbuild","sectionRoute":"/docs/packaging/prepare-for-packaging#updating-solbuild","type":"docs"},{"id":203,"pageTitle":"Prepare for packaging","sectionTitle":"Fork the getsolus/packages repository","sectionRoute":"/docs/packaging/prepare-for-packaging#fork-the-getsoluspackages-repository","type":"docs"},{"id":204,"pageTitle":"Prepare for packaging","sectionTitle":"Clone your forked package repository","sectionRoute":"/docs/packaging/prepare-for-packaging#clone-your-forked-package-repository","type":"docs"},{"id":205,"pageTitle":"Prepare for packaging","sectionTitle":"Initialize git hooks","sectionRoute":"/docs/packaging/prepare-for-packaging#initialize-git-hooks","type":"docs"},{"id":206,"pageTitle":"Prepare for packaging","sectionTitle":"Set up repository helper functions (optional)","sectionRoute":"/docs/packaging/prepare-for-packaging#set-up-repository-helper-functions-optional","type":"docs"},{"id":207,"pageTitle":"Prepare for packaging","sectionTitle":"bash","sectionRoute":"/docs/packaging/prepare-for-packaging#bash","type":"docs"},{"id":208,"pageTitle":"Prepare for packaging","sectionTitle":"fish","sectionRoute":"/docs/packaging/prepare-for-packaging#fish","type":"docs"},{"id":209,"pageTitle":"Prepare for packaging","sectionTitle":"zsh","sectionRoute":"/docs/packaging/prepare-for-packaging#zsh","type":"docs"},{"id":210,"pageTitle":"Prepare for packaging","sectionTitle":"Building packages","sectionRoute":"/docs/packaging/prepare-for-packaging#building-packages","type":"docs"},{"id":211,"pageTitle":"Maintainership","sectionTitle":"Maintainership","sectionRoute":"/docs/packaging/procedures/maintainership","type":"docs"},{"id":212,"pageTitle":"Maintainership","sectionTitle":"Commitment","sectionRoute":"/docs/packaging/procedures/maintainership#commitment","type":"docs"},{"id":213,"pageTitle":"Maintainership","sectionTitle":"Stepping in","sectionRoute":"/docs/packaging/procedures/maintainership#stepping-in","type":"docs"},{"id":214,"pageTitle":"Maintainership","sectionTitle":"Updating a maintained package","sectionRoute":"/docs/packaging/procedures/maintainership#updating-a-maintained-package","type":"docs"},{"id":215,"pageTitle":"Maintainership","sectionTitle":"Maintainers","sectionRoute":"/docs/packaging/procedures/maintainership#maintainers","type":"docs"},{"id":216,"pageTitle":"Maintainership","sectionTitle":"Non-maintainers","sectionRoute":"/docs/packaging/procedures/maintainership#non-maintainers","type":"docs"},{"id":217,"pageTitle":"Maintainership","sectionTitle":"Template for the MAINTAINERS.md file","sectionRoute":"/docs/packaging/procedures/maintainership#template-for-the-maintainersmd-file","type":"docs"},{"id":218,"pageTitle":"Package Inclusion Policy","sectionTitle":"Package Inclusion Policy","sectionRoute":"/docs/packaging/procedures/package-inclusion","type":"docs"},{"id":219,"pageTitle":"Package Inclusion Policy","sectionTitle":"Criteria","sectionRoute":"/docs/packaging/procedures/package-inclusion#criteria","type":"docs"},{"id":220,"pageTitle":"Package Inclusion Policy","sectionTitle":"Explicitly redistributable","sectionRoute":"/docs/packaging/procedures/package-inclusion#explicitly-redistributable","type":"docs"},{"id":221,"pageTitle":"Package Inclusion Policy","sectionTitle":"Server software","sectionRoute":"/docs/packaging/procedures/package-inclusion#server-software","type":"docs"},{"id":222,"pageTitle":"Package Inclusion Policy","sectionTitle":"Software age","sectionRoute":"/docs/packaging/procedures/package-inclusion#software-age","type":"docs"},{"id":223,"pageTitle":"Package Inclusion Policy","sectionTitle":"Stack complexity","sectionRoute":"/docs/packaging/procedures/package-inclusion#stack-complexity","type":"docs"},{"id":224,"pageTitle":"Package Inclusion Policy","sectionTitle":"Value-add","sectionRoute":"/docs/packaging/procedures/package-inclusion#value-add","type":"docs"},{"id":225,"pageTitle":"Package Inclusion Policy","sectionTitle":"Rejection","sectionRoute":"/docs/packaging/procedures/package-inclusion#rejection","type":"docs"},{"id":226,"pageTitle":"Release Processes","sectionTitle":"Release Processes","sectionRoute":"/docs/packaging/procedures/release-processes","type":"docs"},{"id":227,"pageTitle":"Release Processes","sectionTitle":"Repository staging","sectionRoute":"/docs/packaging/procedures/release-processes#repository-staging","type":"docs"},{"id":228,"pageTitle":"Release Processes","sectionTitle":"Weekly Sync - Every Friday","sectionRoute":"/docs/packaging/procedures/release-processes#weekly-sync---every-friday","type":"docs"},{"id":229,"pageTitle":"Release Processes","sectionTitle":"Package deprecation","sectionRoute":"/docs/packaging/procedures/release-processes#package-deprecation","type":"docs"},{"id":230,"pageTitle":"Release Processes","sectionTitle":"Deprecating a package","sectionRoute":"/docs/packaging/procedures/release-processes#deprecating-a-package","type":"docs"},{"id":231,"pageTitle":"Release Processes","sectionTitle":"Un-deprecating a package","sectionRoute":"/docs/packaging/procedures/release-processes#un-deprecating-a-package","type":"docs"},{"id":232,"pageTitle":"Release Processes","sectionTitle":"Major stack changes","sectionRoute":"/docs/packaging/procedures/release-processes#major-stack-changes","type":"docs"},{"id":239,"pageTitle":"Requesting A Package","sectionTitle":"Requesting A Package","sectionRoute":"/docs/packaging/procedures/request-a-package","type":"docs"},{"id":240,"pageTitle":"Requesting A Package","sectionTitle":"Steps to request a new package","sectionRoute":"/docs/packaging/procedures/request-a-package#steps-to-request-a-new-package","type":"docs"},{"id":769,"pageTitle":"Requesting A Package Update","sectionTitle":"Requesting A Package Update","sectionRoute":"/docs/packaging/procedures/request-a-package-update","type":"docs"},{"id":233,"pageTitle":"Rebuilding a stack","sectionTitle":"Rebuilding a stack","sectionRoute":"/docs/packaging/stack-rebuilds","type":"docs"},{"id":234,"pageTitle":"Rebuilding a stack","sectionTitle":"Updating the library","sectionRoute":"/docs/packaging/stack-rebuilds#updating-the-library","type":"docs"},{"id":235,"pageTitle":"Rebuilding a stack","sectionTitle":"What are symbols?","sectionRoute":"/docs/packaging/stack-rebuilds#what-are-symbols","type":"docs"},{"id":236,"pageTitle":"Rebuilding a stack","sectionTitle":"Checking if rebuilds are necessary","sectionRoute":"/docs/packaging/stack-rebuilds#checking-if-rebuilds-are-necessary","type":"docs"},{"id":237,"pageTitle":"Rebuilding a stack","sectionTitle":"Finding reverse dependencies","sectionRoute":"/docs/packaging/stack-rebuilds#finding-reverse-dependencies","type":"docs"},{"id":238,"pageTitle":"Rebuilding a stack","sectionTitle":"Rebuild the stack","sectionRoute":"/docs/packaging/stack-rebuilds#rebuild-the-stack","type":"docs"},{"id":241,"pageTitle":"Submitting a Pull Request for Review","sectionTitle":"Submitting a Pull Request for Review","sectionRoute":"/docs/packaging/submitting-a-pull-request","type":"docs"},{"id":242,"pageTitle":"Submitting a Pull Request for Review","sectionTitle":"Final branch review","sectionRoute":"/docs/packaging/submitting-a-pull-request#final-branch-review","type":"docs"},{"id":243,"pageTitle":"Submitting a Pull Request for Review","sectionTitle":"Creating the pull request","sectionRoute":"/docs/packaging/submitting-a-pull-request#creating-the-pull-request","type":"docs"},{"id":244,"pageTitle":"Submitting a Pull Request for Review","sectionTitle":"Amending a pull request","sectionRoute":"/docs/packaging/submitting-a-pull-request#amending-a-pull-request","type":"docs"},{"id":245,"pageTitle":"Submitting a Pull Request for Review","sectionTitle":"Amending a pull request with multiple commits","sectionRoute":"/docs/packaging/submitting-a-pull-request#amending-a-pull-request-with-multiple-commits","type":"docs"},{"id":246,"pageTitle":"Submitting a Pull Request for Review","sectionTitle":"Updating a pull request that has changes requested","sectionRoute":"/docs/packaging/submitting-a-pull-request#updating-a-pull-request-that-has-changes-requested","type":"docs"},{"id":247,"pageTitle":"Submitting a Pull Request for Review","sectionTitle":"After the pull request is accepted","sectionRoute":"/docs/packaging/submitting-a-pull-request#after-the-pull-request-is-accepted","type":"docs"},{"id":248,"pageTitle":"Testing a Package","sectionTitle":"Testing a Package","sectionRoute":"/docs/packaging/testing-a-package","type":"docs"},{"id":249,"pageTitle":"Testing a Package","sectionTitle":"Install the .eopkg files","sectionRoute":"/docs/packaging/testing-a-package#install-the-eopkg-files","type":"docs"},{"id":250,"pageTitle":"Testing a Package","sectionTitle":"For updated packages: Return to the repository version","sectionRoute":"/docs/packaging/testing-a-package#for-updated-packages-return-to-the-repository-version","type":"docs"},{"id":251,"pageTitle":"Testing a Package","sectionTitle":"Remove the .eopkg files","sectionRoute":"/docs/packaging/testing-a-package#remove-the-eopkg-files","type":"docs"},{"id":252,"pageTitle":"Translation instructions","sectionTitle":"Translation instructions","sectionRoute":"/docs/packaging/translation-instructions","type":"docs"},{"id":253,"pageTitle":"Translation instructions","sectionTitle":"Project specific instructions","sectionRoute":"/docs/packaging/translation-instructions#project-specific-instructions","type":"docs"},{"id":254,"pageTitle":"Translation instructions","sectionTitle":"Solus Mate Transition Tool","sectionRoute":"/docs/packaging/translation-instructions#solus-mate-transition-tool","type":"docs"},{"id":255,"pageTitle":"Troubleshooting for Packagers","sectionTitle":"Troubleshooting for Packagers","sectionRoute":"/docs/packaging/troubleshooting-packaging","type":"docs"},{"id":256,"pageTitle":"Troubleshooting for Packagers","sectionTitle":"Asking for help","sectionRoute":"/docs/packaging/troubleshooting-packaging#asking-for-help","type":"docs"},{"id":257,"pageTitle":"Troubleshooting for Packagers","sectionTitle":"Common Issues","sectionRoute":"/docs/packaging/troubleshooting-packaging#common-issues","type":"docs"},{"id":258,"pageTitle":"Troubleshooting for Packagers","sectionTitle":"\"Error downloading https://github.com/project/blah/1.2.3.tar.gz: checksum mismatch\"","sectionRoute":"/docs/packaging/troubleshooting-packaging#error-downloading-httpsgithubcomprojectblah123targz-checksum-mismatch","type":"docs"},{"id":259,"pageTitle":"Troubleshooting for Packagers","sectionTitle":"\"Failed to build packages err=\"Failed to fetch source https://github.com/project/blah.git#{commit ref here}, reason: exit status 1\\n\"","sectionRoute":"/docs/packaging/troubleshooting-packaging#failed-to-build-packages-errfailed-to-fetch-source-httpsgithubcomprojectblahgitcommit-ref-here-reason-exit-status-1n","type":"docs"},{"id":260,"pageTitle":"Troubleshooting for Packagers","sectionTitle":"\"mount: /var/lib/solbuild/roots/unstable-x86_64: WARNING: source write-protected, mounted read-only\"","sectionRoute":"/docs/packaging/troubleshooting-packaging#mount-varlibsolbuildrootsunstable-x86_64-warning-source-write-protected-mounted-read-only","type":"docs"},{"id":261,"pageTitle":"Troubleshooting for Packagers","sectionTitle":"Solbuild is eating up all my disk space","sectionRoute":"/docs/packaging/troubleshooting-packaging#solbuild-is-eating-up-all-my-disk-space","type":"docs"},{"id":262,"pageTitle":"Troubleshooting for Packagers","sectionTitle":"An old package using %configure doesn't build","sectionRoute":"/docs/packaging/troubleshooting-packaging#an-old-package-using-configure-doesnt-build","type":"docs"},{"id":263,"pageTitle":"Troubleshooting for Packagers","sectionTitle":"Something is wrong with my solbuild profile","sectionRoute":"/docs/packaging/troubleshooting-packaging#something-is-wrong-with-my-solbuild-profile","type":"docs"},{"id":264,"pageTitle":"Troubleshooting for Packagers","sectionTitle":"Git commands fail and complain about package checks","sectionRoute":"/docs/packaging/troubleshooting-packaging#git-commands-fail-and-complain-about-package-checks","type":"docs"},{"id":265,"pageTitle":"Update Your Development Environment","sectionTitle":"Update Your Development Environment","sectionRoute":"/docs/packaging/update-dev-environment","type":"docs"},{"id":266,"pageTitle":"Update Your Development Environment","sectionTitle":"Update your fork of the getsolus/packages repository","sectionRoute":"/docs/packaging/update-dev-environment#update-your-fork-of-the-getsoluspackages-repository","type":"docs"},{"id":267,"pageTitle":"Update Your Development Environment","sectionTitle":"Update your local clone of your fork","sectionRoute":"/docs/packaging/update-dev-environment#update-your-local-clone-of-your-fork","type":"docs"},{"id":268,"pageTitle":"Update Your Development Environment","sectionTitle":"Update solbuild and the system","sectionRoute":"/docs/packaging/update-dev-environment#update-solbuild-and-the-system","type":"docs"},{"id":269,"pageTitle":"Updating an Existing Package","sectionTitle":"Updating an Existing Package","sectionRoute":"/docs/packaging/updating-an-existing-package","type":"docs"},{"id":270,"pageTitle":"Updating an Existing Package","sectionTitle":"Update your clone of the packages repository","sectionRoute":"/docs/packaging/updating-an-existing-package#update-your-clone-of-the-packages-repository","type":"docs"},{"id":271,"pageTitle":"Updating an Existing Package","sectionTitle":"Switch to a new git branch","sectionRoute":"/docs/packaging/updating-an-existing-package#switch-to-a-new-git-branch","type":"docs"},{"id":272,"pageTitle":"Updating an Existing Package","sectionTitle":"Updating a package","sectionRoute":"/docs/packaging/updating-an-existing-package#updating-a-package","type":"docs"},{"id":273,"pageTitle":"Updating an Existing Package","sectionTitle":"Bumping a package","sectionRoute":"/docs/packaging/updating-an-existing-package#bumping-a-package","type":"docs"},{"id":274,"pageTitle":"Updating an Existing Package","sectionTitle":"Using a different version","sectionRoute":"/docs/packaging/updating-an-existing-package#using-a-different-version","type":"docs"},{"id":275,"pageTitle":"Updating an Existing Package","sectionTitle":"The MAINTAINERS.md file","sectionRoute":"/docs/packaging/updating-an-existing-package#the-maintainersmd-file","type":"docs"},{"id":276,"pageTitle":"Updating an Existing Package","sectionTitle":"Build the package","sectionRoute":"/docs/packaging/updating-an-existing-package#build-the-package","type":"docs"},{"id":277,"pageTitle":"Updating an Existing Package","sectionTitle":"Commit your changes","sectionRoute":"/docs/packaging/updating-an-existing-package#commit-your-changes","type":"docs"},{"id":278,"pageTitle":"Updating an Existing Package","sectionTitle":"Commit message format","sectionRoute":"/docs/packaging/updating-an-existing-package#commit-message-format","type":"docs"},{"id":279,"pageTitle":"Updating an Existing Package","sectionTitle":"Package update","sectionRoute":"/docs/packaging/updating-an-existing-package#package-update","type":"docs"},{"id":280,"pageTitle":"Updating an Existing Package","sectionTitle":"Other commit message format examples","sectionRoute":"/docs/packaging/updating-an-existing-package#other-commit-message-format-examples","type":"docs"},{"id":281,"pageTitle":"Your First Package Update","sectionTitle":"Your First Package Update","sectionRoute":"/docs/packaging/your-first-package-update","type":"docs"},{"id":282,"pageTitle":"Your First Package Update","sectionTitle":"Cloning and building nano","sectionRoute":"/docs/packaging/your-first-package-update#cloning-and-building-nano","type":"docs"},{"id":283,"pageTitle":"Your First Package Update","sectionTitle":"Installing your new nano package","sectionRoute":"/docs/packaging/your-first-package-update#installing-your-new-nano-package","type":"docs"},{"id":284,"pageTitle":"Your First Package Update","sectionTitle":"Returning to the repository version (optional)","sectionRoute":"/docs/packaging/your-first-package-update#returning-to-the-repository-version-optional","type":"docs"},{"id":285,"pageTitle":"Community guidelines","sectionTitle":"Community guidelines","sectionRoute":"/docs/user/contributing/community-guidelines","type":"docs"},{"id":286,"pageTitle":"Community guidelines","sectionTitle":"General guidelines","sectionRoute":"/docs/user/contributing/community-guidelines#general-guidelines","type":"docs"},{"id":287,"pageTitle":"Community guidelines","sectionTitle":"Harassment","sectionRoute":"/docs/user/contributing/community-guidelines#harassment","type":"docs"},{"id":288,"pageTitle":"Community guidelines","sectionTitle":"Language","sectionRoute":"/docs/user/contributing/community-guidelines#language","type":"docs"},{"id":289,"pageTitle":"Community guidelines","sectionTitle":"Media sharing","sectionRoute":"/docs/user/contributing/community-guidelines#media-sharing","type":"docs"},{"id":290,"pageTitle":"Community guidelines","sectionTitle":"Observe topic guidance","sectionRoute":"/docs/user/contributing/community-guidelines#observe-topic-guidance","type":"docs"},{"id":291,"pageTitle":"Community guidelines","sectionTitle":"Other","sectionRoute":"/docs/user/contributing/community-guidelines#other","type":"docs"},{"id":292,"pageTitle":"Community guidelines","sectionTitle":"Service-specific guidelines","sectionRoute":"/docs/user/contributing/community-guidelines#service-specific-guidelines","type":"docs"},{"id":293,"pageTitle":"Community guidelines","sectionTitle":"Repositories and issue trackers","sectionRoute":"/docs/user/contributing/community-guidelines#repositories-and-issue-trackers","type":"docs"},{"id":294,"pageTitle":"Getting Involved","sectionTitle":"Getting Involved","sectionRoute":"/docs/user/contributing/getting-involved","type":"docs"},{"id":295,"pageTitle":"Getting Involved","sectionTitle":"Engaging with the community","sectionRoute":"/docs/user/contributing/getting-involved#engaging-with-the-community","type":"docs"},{"id":296,"pageTitle":"Getting Involved","sectionTitle":"Community guidelines","sectionRoute":"/docs/user/contributing/getting-involved#community-guidelines","type":"docs"},{"id":297,"pageTitle":"Getting Involved","sectionTitle":"Community forums","sectionRoute":"/docs/user/contributing/getting-involved#community-forums","type":"docs"},{"id":298,"pageTitle":"Getting Involved","sectionTitle":"Matrix (chat)","sectionRoute":"/docs/user/contributing/getting-involved#matrix-chat","type":"docs"},{"id":299,"pageTitle":"Getting Involved","sectionTitle":"Social Media","sectionRoute":"/docs/user/contributing/getting-involved#social-media","type":"docs"},{"id":300,"pageTitle":"Getting Involved","sectionTitle":"Funding","sectionRoute":"/docs/user/contributing/getting-involved#funding","type":"docs"},{"id":301,"pageTitle":"Getting Involved","sectionTitle":"Improving documentation","sectionRoute":"/docs/user/contributing/getting-involved#improving-documentation","type":"docs"},{"id":302,"pageTitle":"Getting Involved","sectionTitle":"Packaging","sectionRoute":"/docs/user/contributing/getting-involved#packaging","type":"docs"},{"id":303,"pageTitle":"Getting Involved","sectionTitle":"Report bugs","sectionRoute":"/docs/user/contributing/getting-involved#report-bugs","type":"docs"},{"id":304,"pageTitle":"Getting Involved","sectionTitle":"Translations","sectionRoute":"/docs/user/contributing/getting-involved#translations","type":"docs"},{"id":305,"pageTitle":"Solus style guide","sectionTitle":"Solus style guide","sectionRoute":"/docs/user/contributing/style","type":"docs"},{"id":306,"pageTitle":"Solus style guide","sectionTitle":"General writing style","sectionRoute":"/docs/user/contributing/style#general-writing-style","type":"docs"},{"id":307,"pageTitle":"Solus style guide","sectionTitle":"Linux-specific terms","sectionRoute":"/docs/user/contributing/style#linux-specific-terms","type":"docs"},{"id":308,"pageTitle":"Solus style guide","sectionTitle":"Specific guidance","sectionRoute":"/docs/user/contributing/style#specific-guidance","type":"docs"},{"id":309,"pageTitle":"Solus style guide","sectionTitle":"Admonitions","sectionRoute":"/docs/user/contributing/style#admonitions","type":"docs"},{"id":310,"pageTitle":"Solus style guide","sectionTitle":"Code blocks","sectionRoute":"/docs/user/contributing/style#code-blocks","type":"docs"},{"id":311,"pageTitle":"Solus style guide","sectionTitle":"Commands","sectionRoute":"/docs/user/contributing/style#commands","type":"docs"},{"id":312,"pageTitle":"Solus style guide","sectionTitle":"Common Solus terms","sectionRoute":"/docs/user/contributing/style#common-solus-terms","type":"docs"},{"id":313,"pageTitle":"Solus style guide","sectionTitle":"Markdown formatting","sectionRoute":"/docs/user/contributing/style#markdown-formatting","type":"docs"},{"id":314,"pageTitle":"Solus style guide","sectionTitle":"Package names","sectionRoute":"/docs/user/contributing/style#package-names","type":"docs"},{"id":315,"pageTitle":"Solus style guide","sectionTitle":"Spelling","sectionRoute":"/docs/user/contributing/style#spelling","type":"docs"},{"id":322,"pageTitle":"Testing an ISO","sectionTitle":"Testing an ISO","sectionRoute":"/docs/user/contributing/testing-an-iso","type":"docs"},{"id":323,"pageTitle":"Testing an ISO","sectionTitle":"For any release","sectionRoute":"/docs/user/contributing/testing-an-iso#for-any-release","type":"docs"},{"id":324,"pageTitle":"Testing an ISO","sectionTitle":"Laptops","sectionRoute":"/docs/user/contributing/testing-an-iso#laptops","type":"docs"},{"id":325,"pageTitle":"Testing an ISO","sectionTitle":"VMs","sectionRoute":"/docs/user/contributing/testing-an-iso#vms","type":"docs"},{"id":326,"pageTitle":"Testing an ISO","sectionTitle":"For the specific release","sectionRoute":"/docs/user/contributing/testing-an-iso#for-the-specific-release","type":"docs"},{"id":316,"pageTitle":"Editions","sectionTitle":"Editions","sectionRoute":"/docs/user/editions/","type":"docs"},{"id":317,"pageTitle":"Editions","sectionTitle":"Budgie","sectionRoute":"/docs/user/editions/","type":"docs"},{"id":318,"pageTitle":"Editions","sectionTitle":"Plasma","sectionRoute":"/docs/user/editions/","type":"docs"},{"id":319,"pageTitle":"Editions","sectionTitle":"GNOME","sectionRoute":"/docs/user/editions/","type":"docs"},{"id":320,"pageTitle":"Editions","sectionTitle":"MATE","sectionRoute":"/docs/user/editions/","type":"docs"},{"id":321,"pageTitle":"Editions","sectionTitle":"XFCE","sectionRoute":"/docs/user/editions/","type":"docs"},{"id":327,"pageTitle":"Budgie Desktop","sectionTitle":"Budgie Desktop","sectionRoute":"/docs/user/editions/budgie/","type":"docs"},{"id":331,"pageTitle":"Configuration","sectionTitle":"Configuration","sectionRoute":"/docs/user/editions/budgie/configuration","type":"docs"},{"id":332,"pageTitle":"Configuration","sectionTitle":"System","sectionRoute":"/docs/user/editions/budgie/configuration","type":"docs"},{"id":333,"pageTitle":"Configuration","sectionTitle":"Date and Time","sectionRoute":"/docs/user/editions/budgie/configuration#date-and-time","type":"docs"},{"id":334,"pageTitle":"Configuration","sectionTitle":"Default Applications","sectionRoute":"/docs/user/editions/budgie/configuration#default-applications","type":"docs"},{"id":335,"pageTitle":"Configuration","sectionTitle":"Displays","sectionRoute":"/docs/user/editions/budgie/configuration#displays","type":"docs"},{"id":336,"pageTitle":"Configuration","sectionTitle":"Keyboard Layout","sectionRoute":"/docs/user/editions/budgie/configuration#keyboard-layout","type":"docs"},{"id":337,"pageTitle":"Configuration","sectionTitle":"Keyboard Layout Indicator","sectionRoute":"/docs/user/editions/budgie/configuration#keyboard-layout-indicator","type":"docs"},{"id":338,"pageTitle":"Configuration","sectionTitle":"IBus","sectionRoute":"/docs/user/editions/budgie/configuration#ibus","type":"docs"},{"id":339,"pageTitle":"Configuration","sectionTitle":"Language","sectionRoute":"/docs/user/editions/budgie/configuration#language","type":"docs"},{"id":340,"pageTitle":"Configuration","sectionTitle":"Mouse and Touchpad","sectionRoute":"/docs/user/editions/budgie/configuration#mouse-and-touchpad","type":"docs"},{"id":341,"pageTitle":"Configuration","sectionTitle":"Mouse","sectionRoute":"/docs/user/editions/budgie/configuration#mouse","type":"docs"},{"id":342,"pageTitle":"Configuration","sectionTitle":"Touchpad","sectionRoute":"/docs/user/editions/budgie/configuration#touchpad","type":"docs"},{"id":343,"pageTitle":"Configuration","sectionTitle":"Testing","sectionRoute":"/docs/user/editions/budgie/configuration#testing","type":"docs"},{"id":344,"pageTitle":"Configuration","sectionTitle":"Network","sectionRoute":"/docs/user/editions/budgie/configuration#network","type":"docs"},{"id":345,"pageTitle":"Configuration","sectionTitle":"Non-Hidden Network","sectionRoute":"/docs/user/editions/budgie/configuration#non-hidden-network","type":"docs"},{"id":346,"pageTitle":"Configuration","sectionTitle":"Hidden Network","sectionRoute":"/docs/user/editions/budgie/configuration#hidden-network","type":"docs"},{"id":347,"pageTitle":"Configuration","sectionTitle":"Sound and Sound Devices","sectionRoute":"/docs/user/editions/budgie/configuration#sound-and-sound-devices","type":"docs"},{"id":348,"pageTitle":"Configuration","sectionTitle":"Settings","sectionRoute":"/docs/user/editions/budgie/configuration#settings","type":"docs"},{"id":349,"pageTitle":"Configuration","sectionTitle":"Users","sectionRoute":"/docs/user/editions/budgie/configuration#users","type":"docs"},{"id":350,"pageTitle":"Configuration","sectionTitle":"Adding a User","sectionRoute":"/docs/user/editions/budgie/configuration#adding-a-user","type":"docs"},{"id":351,"pageTitle":"Configuration","sectionTitle":"Removing a User","sectionRoute":"/docs/user/editions/budgie/configuration#removing-a-user","type":"docs"},{"id":352,"pageTitle":"Configuration","sectionTitle":"User Interface","sectionRoute":"/docs/user/editions/budgie/configuration","type":"docs"},{"id":353,"pageTitle":"Configuration","sectionTitle":"Desktop Background","sectionRoute":"/docs/user/editions/budgie/configuration#desktop-background","type":"docs"},{"id":354,"pageTitle":"Configuration","sectionTitle":"Desktop Icons","sectionRoute":"/docs/user/editions/budgie/configuration#desktop-icons","type":"docs"},{"id":355,"pageTitle":"Configuration","sectionTitle":"Workspaces","sectionRoute":"/docs/user/editions/budgie/configuration#workspaces","type":"docs"},{"id":356,"pageTitle":"Configuration","sectionTitle":"Keyboard Shortcuts","sectionRoute":"/docs/user/editions/budgie/configuration#keyboard-shortcuts","type":"docs"},{"id":357,"pageTitle":"Configuration","sectionTitle":"Workspaces Configuration","sectionRoute":"/docs/user/editions/budgie/configuration#workspaces-configuration","type":"docs"},{"id":328,"pageTitle":"Tips and Tricks","sectionTitle":"Tips and Tricks","sectionRoute":"/docs/user/editions/budgie/tips-and-tricks","type":"docs"},{"id":329,"pageTitle":"Tips and Tricks","sectionTitle":"Budgie Shortcuts","sectionRoute":"/docs/user/editions/budgie/tips-and-tricks#budgie-shortcuts","type":"docs"},{"id":330,"pageTitle":"Tips and Tricks","sectionTitle":"Restoring Panel Defaults","sectionRoute":"/docs/user/editions/budgie/tips-and-tricks#restoring-panel-defaults","type":"docs"},{"id":358,"pageTitle":"GNOME Shell","sectionTitle":"GNOME Shell","sectionRoute":"/docs/user/editions/gnome/","type":"docs"},{"id":359,"pageTitle":"Configuration","sectionTitle":"Configuration","sectionRoute":"/docs/user/editions/gnome/configuration","type":"docs"},{"id":360,"pageTitle":"Configuration","sectionTitle":"System","sectionRoute":"/docs/user/editions/gnome/configuration#system","type":"docs"},{"id":361,"pageTitle":"Configuration","sectionTitle":"Date and time","sectionRoute":"/docs/user/editions/gnome/configuration#date-and-time","type":"docs"},{"id":362,"pageTitle":"Configuration","sectionTitle":"Default applications","sectionRoute":"/docs/user/editions/gnome/configuration#default-applications","type":"docs"},{"id":363,"pageTitle":"Configuration","sectionTitle":"Displays","sectionRoute":"/docs/user/editions/gnome/configuration#displays","type":"docs"},{"id":364,"pageTitle":"Configuration","sectionTitle":"Keyboard layout","sectionRoute":"/docs/user/editions/gnome/configuration#keyboard-layout","type":"docs"},{"id":365,"pageTitle":"Configuration","sectionTitle":"IBus","sectionRoute":"/docs/user/editions/gnome/configuration#ibus","type":"docs"},{"id":366,"pageTitle":"Configuration","sectionTitle":"Language","sectionRoute":"/docs/user/editions/gnome/configuration#language","type":"docs"},{"id":367,"pageTitle":"Configuration","sectionTitle":"Mouse and touchpad","sectionRoute":"/docs/user/editions/gnome/configuration#mouse-and-touchpad","type":"docs"},{"id":368,"pageTitle":"Configuration","sectionTitle":"Mouse","sectionRoute":"/docs/user/editions/gnome/configuration#mouse","type":"docs"},{"id":369,"pageTitle":"Configuration","sectionTitle":"Touchpad","sectionRoute":"/docs/user/editions/gnome/configuration#touchpad","type":"docs"},{"id":370,"pageTitle":"Configuration","sectionTitle":"Testing","sectionRoute":"/docs/user/editions/gnome/configuration#testing","type":"docs"},{"id":371,"pageTitle":"Configuration","sectionTitle":"Networking","sectionRoute":"/docs/user/editions/gnome/configuration#networking","type":"docs"},{"id":372,"pageTitle":"Configuration","sectionTitle":"Non-hidden network","sectionRoute":"/docs/user/editions/gnome/configuration#non-hidden-network","type":"docs"},{"id":373,"pageTitle":"Configuration","sectionTitle":"Hidden network","sectionRoute":"/docs/user/editions/gnome/configuration#hidden-network","type":"docs"},{"id":374,"pageTitle":"Configuration","sectionTitle":"Sound and sound devices","sectionRoute":"/docs/user/editions/gnome/configuration#sound-and-sound-devices","type":"docs"},{"id":375,"pageTitle":"Configuration","sectionTitle":"Settings","sectionRoute":"/docs/user/editions/gnome/configuration#settings","type":"docs"},{"id":376,"pageTitle":"Configuration","sectionTitle":"Users","sectionRoute":"/docs/user/editions/gnome/configuration#users","type":"docs"},{"id":377,"pageTitle":"Configuration","sectionTitle":"Adding a user","sectionRoute":"/docs/user/editions/gnome/configuration#adding-a-user","type":"docs"},{"id":378,"pageTitle":"Configuration","sectionTitle":"Removing a user","sectionRoute":"/docs/user/editions/gnome/configuration#removing-a-user","type":"docs"},{"id":379,"pageTitle":"Configuration","sectionTitle":"User interface","sectionRoute":"/docs/user/editions/gnome/configuration#user-interface","type":"docs"},{"id":380,"pageTitle":"Configuration","sectionTitle":"Desktop background","sectionRoute":"/docs/user/editions/gnome/configuration#desktop-background","type":"docs"},{"id":381,"pageTitle":"Configuration","sectionTitle":"Desktop icons","sectionRoute":"/docs/user/editions/gnome/configuration#desktop-icons","type":"docs"},{"id":382,"pageTitle":"Configuration","sectionTitle":"Workspaces","sectionRoute":"/docs/user/editions/gnome/configuration#workspaces","type":"docs"},{"id":383,"pageTitle":"Configuration","sectionTitle":"Keyboard Shortcuts","sectionRoute":"/docs/user/editions/gnome/configuration#keyboard-shortcuts","type":"docs"},{"id":384,"pageTitle":"Tips and Tricks","sectionTitle":"Tips and Tricks","sectionRoute":"/docs/user/editions/gnome/tips-and-tricks","type":"docs"},{"id":385,"pageTitle":"Tips and Tricks","sectionTitle":"GNOME Keyboard Shortcuts","sectionRoute":"/docs/user/editions/gnome/tips-and-tricks#gnome-keyboard-shortcuts","type":"docs"},{"id":386,"pageTitle":"Tips and Tricks","sectionTitle":"GNOME Hot Corners","sectionRoute":"/docs/user/editions/gnome/tips-and-tricks#gnome-hot-corners","type":"docs"},{"id":387,"pageTitle":"MATE Desktop","sectionTitle":"MATE Desktop","sectionRoute":"/docs/user/editions/mate/","type":"docs"},{"id":390,"pageTitle":"Configuration","sectionTitle":"Configuration","sectionRoute":"/docs/user/editions/mate/configuration","type":"docs"},{"id":391,"pageTitle":"Configuration","sectionTitle":"System","sectionRoute":"/docs/user/editions/mate/configuration#system","type":"docs"},{"id":392,"pageTitle":"Configuration","sectionTitle":"Date and time","sectionRoute":"/docs/user/editions/mate/configuration#date-and-time","type":"docs"},{"id":393,"pageTitle":"Configuration","sectionTitle":"Default applications","sectionRoute":"/docs/user/editions/mate/configuration#default-applications","type":"docs"},{"id":394,"pageTitle":"Configuration","sectionTitle":"Displays","sectionRoute":"/docs/user/editions/mate/configuration#displays","type":"docs"},{"id":395,"pageTitle":"Configuration","sectionTitle":"Keyboard layout","sectionRoute":"/docs/user/editions/mate/configuration#keyboard-layout","type":"docs"},{"id":396,"pageTitle":"Configuration","sectionTitle":"IBus","sectionRoute":"/docs/user/editions/mate/configuration#ibus","type":"docs"},{"id":397,"pageTitle":"Configuration","sectionTitle":"Mouse and touchpad","sectionRoute":"/docs/user/editions/mate/configuration#mouse-and-touchpad","type":"docs"},{"id":398,"pageTitle":"Configuration","sectionTitle":"Mouse","sectionRoute":"/docs/user/editions/mate/configuration#mouse","type":"docs"},{"id":399,"pageTitle":"Configuration","sectionTitle":"Touchpad","sectionRoute":"/docs/user/editions/mate/configuration#touchpad","type":"docs"},{"id":400,"pageTitle":"Configuration","sectionTitle":"Networking","sectionRoute":"/docs/user/editions/mate/configuration#networking","type":"docs"},{"id":401,"pageTitle":"Configuration","sectionTitle":"Non-hidden network","sectionRoute":"/docs/user/editions/mate/configuration#non-hidden-network","type":"docs"},{"id":402,"pageTitle":"Configuration","sectionTitle":"Hidden network","sectionRoute":"/docs/user/editions/mate/configuration#hidden-network","type":"docs"},{"id":403,"pageTitle":"Configuration","sectionTitle":"Sound and sound devices","sectionRoute":"/docs/user/editions/mate/configuration#sound-and-sound-devices","type":"docs"},{"id":404,"pageTitle":"Configuration","sectionTitle":"Settings","sectionRoute":"/docs/user/editions/mate/configuration#settings","type":"docs"},{"id":405,"pageTitle":"Configuration","sectionTitle":"Users","sectionRoute":"/docs/user/editions/mate/configuration#users","type":"docs"},{"id":406,"pageTitle":"Configuration","sectionTitle":"Adding a user","sectionRoute":"/docs/user/editions/mate/configuration#adding-a-user","type":"docs"},{"id":407,"pageTitle":"Configuration","sectionTitle":"Removing a user","sectionRoute":"/docs/user/editions/mate/configuration#removing-a-user","type":"docs"},{"id":408,"pageTitle":"Configuration","sectionTitle":"User interface","sectionRoute":"/docs/user/editions/mate/configuration#user-interface","type":"docs"},{"id":409,"pageTitle":"Configuration","sectionTitle":"Desktop background","sectionRoute":"/docs/user/editions/mate/configuration#desktop-background","type":"docs"},{"id":410,"pageTitle":"Configuration","sectionTitle":"Desktop icons","sectionRoute":"/docs/user/editions/mate/configuration#desktop-icons","type":"docs"},{"id":411,"pageTitle":"Configuration","sectionTitle":"Workspaces","sectionRoute":"/docs/user/editions/mate/configuration#workspaces","type":"docs"},{"id":412,"pageTitle":"Configuration","sectionTitle":"Keyboard shortcuts","sectionRoute":"/docs/user/editions/mate/configuration#keyboard-shortcuts","type":"docs"},{"id":413,"pageTitle":"Configuration","sectionTitle":"Workspaces configuration","sectionRoute":"/docs/user/editions/mate/configuration#workspaces-configuration","type":"docs"},{"id":388,"pageTitle":"Tips and Tricks","sectionTitle":"Tips and Tricks","sectionRoute":"/docs/user/editions/mate/tips-and-tricks","type":"docs"},{"id":389,"pageTitle":"Tips and Tricks","sectionTitle":"MATE Keyboard Shortcuts","sectionRoute":"/docs/user/editions/mate/tips-and-tricks#mate-keyboard-shortcuts","type":"docs"},{"id":414,"pageTitle":"Plasma","sectionTitle":"Plasma","sectionRoute":"/docs/user/editions/plasma/","type":"docs"},{"id":415,"pageTitle":"Configuration","sectionTitle":"Configuration","sectionRoute":"/docs/user/editions/plasma/configuration","type":"docs"},{"id":416,"pageTitle":"Configuration","sectionTitle":"Opening System Settings","sectionRoute":"/docs/user/editions/plasma/configuration#opening-system-settings","type":"docs"},{"id":417,"pageTitle":"Configuration","sectionTitle":"Date and time","sectionRoute":"/docs/user/editions/plasma/configuration#date-and-time","type":"docs"},{"id":418,"pageTitle":"Configuration","sectionTitle":"Default Applications","sectionRoute":"/docs/user/editions/plasma/configuration#default-applications","type":"docs"},{"id":419,"pageTitle":"Configuration","sectionTitle":"Configuring default applications from System Settings","sectionRoute":"/docs/user/editions/plasma/configuration#configuring-default-applications-from-system-settings","type":"docs"},{"id":420,"pageTitle":"Configuration","sectionTitle":"Configuring default applications from the file manager","sectionRoute":"/docs/user/editions/plasma/configuration#configuring-default-applications-from-the-file-manager","type":"docs"},{"id":421,"pageTitle":"Configuration","sectionTitle":"Displays","sectionRoute":"/docs/user/editions/plasma/configuration#displays","type":"docs"},{"id":422,"pageTitle":"Configuration","sectionTitle":"Keyboard layout","sectionRoute":"/docs/user/editions/plasma/configuration#keyboard-layout","type":"docs"},{"id":423,"pageTitle":"Configuration","sectionTitle":"Configuring keyboard layouts","sectionRoute":"/docs/user/editions/plasma/configuration#configuring-keyboard-layouts","type":"docs"},{"id":424,"pageTitle":"Configuration","sectionTitle":"Using IBus","sectionRoute":"/docs/user/editions/plasma/configuration#using-ibus","type":"docs"},{"id":425,"pageTitle":"Configuration","sectionTitle":"Mouse and touchpad","sectionRoute":"/docs/user/editions/plasma/configuration#mouse-and-touchpad","type":"docs"},{"id":426,"pageTitle":"Configuration","sectionTitle":"Network settings","sectionRoute":"/docs/user/editions/plasma/configuration#network-settings","type":"docs"},{"id":427,"pageTitle":"Configuration","sectionTitle":"Connecting to a hidden Wi-Fi network","sectionRoute":"/docs/user/editions/plasma/configuration#connecting-to-a-hidden-wi-fi-network","type":"docs"},{"id":428,"pageTitle":"Configuration","sectionTitle":"Sound and sound devices","sectionRoute":"/docs/user/editions/plasma/configuration#sound-and-sound-devices","type":"docs"},{"id":429,"pageTitle":"Configuration","sectionTitle":"Users","sectionRoute":"/docs/user/editions/plasma/configuration#users","type":"docs"},{"id":430,"pageTitle":"Configuration","sectionTitle":"Adding user accounts","sectionRoute":"/docs/user/editions/plasma/configuration#adding-user-accounts","type":"docs"},{"id":431,"pageTitle":"Configuration","sectionTitle":"Removing user accounts","sectionRoute":"/docs/user/editions/plasma/configuration#removing-user-accounts","type":"docs"},{"id":432,"pageTitle":"Configuration","sectionTitle":"User interface","sectionRoute":"/docs/user/editions/plasma/configuration#user-interface","type":"docs"},{"id":433,"pageTitle":"Configuration","sectionTitle":"Customizing the desktop","sectionRoute":"/docs/user/editions/plasma/configuration#customizing-the-desktop","type":"docs"},{"id":434,"pageTitle":"Configuration","sectionTitle":"Virtual desktops","sectionRoute":"/docs/user/editions/plasma/configuration#virtual-desktops","type":"docs"},{"id":435,"pageTitle":"Configuration","sectionTitle":"Creating virtual desktops","sectionRoute":"/docs/user/editions/plasma/configuration#creating-virtual-desktops","type":"docs"},{"id":436,"pageTitle":"Configuration","sectionTitle":"Switching between virtual desktops","sectionRoute":"/docs/user/editions/plasma/configuration#switching-between-virtual-desktops","type":"docs"},{"id":437,"pageTitle":"Tips and Tricks","sectionTitle":"Tips and Tricks","sectionRoute":"/docs/user/editions/plasma/tips-and-tricks","type":"docs"},{"id":438,"pageTitle":"Tips and Tricks","sectionTitle":"Keyboard shortcuts","sectionRoute":"/docs/user/editions/plasma/tips-and-tricks#keyboard-shortcuts","type":"docs"},{"id":439,"pageTitle":"Tips and Tricks","sectionTitle":"Using KRunner","sectionRoute":"/docs/user/editions/plasma/tips-and-tricks#using-krunner","type":"docs"},{"id":440,"pageTitle":"Tips and Tricks","sectionTitle":"Dolphin","sectionRoute":"/docs/user/editions/plasma/tips-and-tricks#dolphin","type":"docs"},{"id":441,"pageTitle":"Tips and Tricks","sectionTitle":"Context menu","sectionRoute":"/docs/user/editions/plasma/tips-and-tricks#context-menu","type":"docs"},{"id":442,"pageTitle":"XFCE Desktop","sectionTitle":"XFCE Desktop","sectionRoute":"/docs/user/editions/xfce/","type":"docs"},{"id":445,"pageTitle":"Configuration","sectionTitle":"Configuration","sectionRoute":"/docs/user/editions/xfce/configuration","type":"docs"},{"id":443,"pageTitle":"Tips and Tricks","sectionTitle":"Tips and Tricks","sectionRoute":"/docs/user/editions/xfce/tips-and-tricks","type":"docs"},{"id":444,"pageTitle":"Tips and Tricks","sectionTitle":"XFCE Keyboard Shortcuts","sectionRoute":"/docs/user/editions/xfce/tips-and-tricks#xfce-keyboard-shortcuts","type":"docs"},{"id":446,"pageTitle":"Hardware","sectionTitle":"Hardware","sectionRoute":"/docs/user/hardware/","type":"docs"},{"id":447,"pageTitle":"Hardware","sectionTitle":"Preinstalled drivers","sectionRoute":"/docs/user/hardware/#preinstalled-drivers","type":"docs"},{"id":448,"pageTitle":"Hardware","sectionTitle":"GPUs","sectionRoute":"/docs/user/hardware/#gpus","type":"docs"},{"id":449,"pageTitle":"Hardware","sectionTitle":"Proprietary drivers","sectionRoute":"/docs/user/hardware/#proprietary-drivers","type":"docs"},{"id":450,"pageTitle":"Hardware","sectionTitle":"Supported drivers","sectionRoute":"/docs/user/hardware/#supported-drivers","type":"docs"},{"id":458,"pageTitle":"Laptops","sectionTitle":"Laptops","sectionRoute":"/docs/user/hardware/compatibility/laptops","type":"docs"},{"id":459,"pageTitle":"Laptops","sectionTitle":"Acer","sectionRoute":"/docs/user/hardware/compatibility/laptops#acer","type":"docs"},{"id":460,"pageTitle":"Laptops","sectionTitle":"Alienware","sectionRoute":"/docs/user/hardware/compatibility/laptops#alienware","type":"docs"},{"id":461,"pageTitle":"Laptops","sectionTitle":"Apple","sectionRoute":"/docs/user/hardware/compatibility/laptops#apple","type":"docs"},{"id":462,"pageTitle":"Laptops","sectionTitle":"ASUS","sectionRoute":"/docs/user/hardware/compatibility/laptops#asus","type":"docs"},{"id":463,"pageTitle":"Laptops","sectionTitle":"Dell","sectionRoute":"/docs/user/hardware/compatibility/laptops#dell","type":"docs"},{"id":464,"pageTitle":"Laptops","sectionTitle":"eMachines","sectionRoute":"/docs/user/hardware/compatibility/laptops#emachines","type":"docs"},{"id":465,"pageTitle":"Laptops","sectionTitle":"Fujitsu","sectionRoute":"/docs/user/hardware/compatibility/laptops#fujitsu","type":"docs"},{"id":466,"pageTitle":"Laptops","sectionTitle":"GIGABYTE","sectionRoute":"/docs/user/hardware/compatibility/laptops#gigabyte","type":"docs"},{"id":467,"pageTitle":"Laptops","sectionTitle":"Google","sectionRoute":"/docs/user/hardware/compatibility/laptops#google","type":"docs"},{"id":468,"pageTitle":"Laptops","sectionTitle":"HP","sectionRoute":"/docs/user/hardware/compatibility/laptops#hp","type":"docs"},{"id":469,"pageTitle":"Laptops","sectionTitle":"Lenovo","sectionRoute":"/docs/user/hardware/compatibility/laptops#lenovo","type":"docs"},{"id":470,"pageTitle":"Laptops","sectionTitle":"MSI","sectionRoute":"/docs/user/hardware/compatibility/laptops#msi","type":"docs"},{"id":471,"pageTitle":"Laptops","sectionTitle":"Samsung","sectionRoute":"/docs/user/hardware/compatibility/laptops#samsung","type":"docs"},{"id":472,"pageTitle":"Laptops","sectionTitle":"Schenker","sectionRoute":"/docs/user/hardware/compatibility/laptops#schenker","type":"docs"},{"id":473,"pageTitle":"Laptops","sectionTitle":"Sony","sectionRoute":"/docs/user/hardware/compatibility/laptops#sony","type":"docs"},{"id":474,"pageTitle":"Laptops","sectionTitle":"System76","sectionRoute":"/docs/user/hardware/compatibility/laptops#system76","type":"docs"},{"id":475,"pageTitle":"Laptops","sectionTitle":"Toshiba","sectionRoute":"/docs/user/hardware/compatibility/laptops#toshiba","type":"docs"},{"id":451,"pageTitle":"WiFi","sectionTitle":"WiFi","sectionRoute":"/docs/user/hardware/compatibility/wifi","type":"docs"},{"id":452,"pageTitle":"WiFi","sectionTitle":"Atheros","sectionRoute":"/docs/user/hardware/compatibility/wifi#atheros","type":"docs"},{"id":453,"pageTitle":"WiFi","sectionTitle":"Broadcom","sectionRoute":"/docs/user/hardware/compatibility/wifi#broadcom","type":"docs"},{"id":454,"pageTitle":"WiFi","sectionTitle":"Netgear","sectionRoute":"/docs/user/hardware/compatibility/wifi#netgear","type":"docs"},{"id":455,"pageTitle":"WiFi","sectionTitle":"Intel","sectionRoute":"/docs/user/hardware/compatibility/wifi#intel","type":"docs"},{"id":456,"pageTitle":"WiFi","sectionTitle":"Ralink","sectionRoute":"/docs/user/hardware/compatibility/wifi#ralink","type":"docs"},{"id":457,"pageTitle":"WiFi","sectionTitle":"Realtek","sectionRoute":"/docs/user/hardware/compatibility/wifi#realtek","type":"docs"},{"id":479,"pageTitle":"Android","sectionTitle":"Android","sectionRoute":"/docs/user/hardware/mobile/android","type":"docs"},{"id":480,"pageTitle":"Android","sectionTitle":"File management","sectionRoute":"/docs/user/hardware/mobile/android#file-management","type":"docs"},{"id":481,"pageTitle":"Android","sectionTitle":"Developer tools","sectionRoute":"/docs/user/hardware/mobile/android#developer-tools","type":"docs"},{"id":476,"pageTitle":"Apple","sectionTitle":"Apple","sectionRoute":"/docs/user/hardware/mobile/apple","type":"docs"},{"id":477,"pageTitle":"Apple","sectionTitle":"Installation","sectionRoute":"/docs/user/hardware/mobile/apple#installation","type":"docs"},{"id":478,"pageTitle":"Apple","sectionTitle":"File management","sectionRoute":"/docs/user/hardware/mobile/apple#file-management","type":"docs"},{"id":482,"pageTitle":"Mice and Touchpads","sectionTitle":"Mice and Touchpads","sectionRoute":"/docs/user/hardware/peripherals/mice-and-touchpads","type":"docs"},{"id":483,"pageTitle":"Mice and Touchpads","sectionTitle":"ASUS, Logitech, Roccat, SteelSeries","sectionRoute":"/docs/user/hardware/peripherals/mice-and-touchpads#asus-logitech-roccat-steelseries","type":"docs"},{"id":484,"pageTitle":"Mice and Touchpads","sectionTitle":"Razer","sectionRoute":"/docs/user/hardware/peripherals/mice-and-touchpads#razer","type":"docs"},{"id":485,"pageTitle":"Mice and Touchpads","sectionTitle":"Synaptics","sectionRoute":"/docs/user/hardware/peripherals/mice-and-touchpads#synaptics","type":"docs"},{"id":486,"pageTitle":"Mice and Touchpads","sectionTitle":"Setup","sectionRoute":"/docs/user/hardware/peripherals/mice-and-touchpads#setup","type":"docs"},{"id":487,"pageTitle":"Mice and Touchpads","sectionTitle":"Revert configuration","sectionRoute":"/docs/user/hardware/peripherals/mice-and-touchpads#revert-configuration","type":"docs"},{"id":488,"pageTitle":"MIDI Keyboards","sectionTitle":"MIDI Keyboards","sectionRoute":"/docs/user/hardware/peripherals/midi-keyboard","type":"docs"},{"id":489,"pageTitle":"MIDI Keyboards","sectionTitle":"Installing required software","sectionRoute":"/docs/user/hardware/peripherals/midi-keyboard#installing-required-software","type":"docs"},{"id":490,"pageTitle":"MIDI Keyboards","sectionTitle":"Setting up the soundfont in qsynth","sectionRoute":"/docs/user/hardware/peripherals/midi-keyboard#setting-up-the-soundfont-in-qsynth","type":"docs"},{"id":491,"pageTitle":"MIDI Keyboards","sectionTitle":"Connecting the keyboard","sectionRoute":"/docs/user/hardware/peripherals/midi-keyboard#connecting-the-keyboard","type":"docs"},{"id":492,"pageTitle":"MIDI Keyboards","sectionTitle":"Keyboard compatibility","sectionRoute":"/docs/user/hardware/peripherals/midi-keyboard#keyboard-compatibility","type":"docs"},{"id":493,"pageTitle":"MIDI Keyboards","sectionTitle":"M-audio","sectionRoute":"/docs/user/hardware/peripherals/midi-keyboard#m-audio","type":"docs"},{"id":494,"pageTitle":"Printers and Scanners","sectionTitle":"Printers and Scanners","sectionRoute":"/docs/user/hardware/peripherals/printers-and-scanners","type":"docs"},{"id":495,"pageTitle":"Printers and Scanners","sectionTitle":"Printers","sectionRoute":"/docs/user/hardware/peripherals/printers-and-scanners","type":"docs"},{"id":496,"pageTitle":"Printers and Scanners","sectionTitle":"Drivers","sectionRoute":"/docs/user/hardware/peripherals/printers-and-scanners#drivers","type":"docs"},{"id":497,"pageTitle":"Printers and Scanners","sectionTitle":"Brother","sectionRoute":"/docs/user/hardware/peripherals/printers-and-scanners#brother","type":"docs"},{"id":498,"pageTitle":"Printers and Scanners","sectionTitle":"Compatibility","sectionRoute":"/docs/user/hardware/peripherals/printers-and-scanners#compatibility","type":"docs"},{"id":499,"pageTitle":"Printers and Scanners","sectionTitle":"Brother","sectionRoute":"/docs/user/hardware/peripherals/printers-and-scanners#brother-1","type":"docs"},{"id":500,"pageTitle":"Printers and Scanners","sectionTitle":"Scanners","sectionRoute":"/docs/user/hardware/peripherals/printers-and-scanners","type":"docs"},{"id":501,"pageTitle":"Printers and Scanners","sectionTitle":"Brother","sectionRoute":"/docs/user/hardware/peripherals/printers-and-scanners#brother-2","type":"docs"},{"id":502,"pageTitle":"Printers and Scanners","sectionTitle":"Network scanner","sectionRoute":"/docs/user/hardware/peripherals/printers-and-scanners#network-scanner","type":"docs"},{"id":503,"pageTitle":"Welcome","sectionTitle":"Welcome","sectionRoute":"/docs/user/intro","type":"docs"},{"id":504,"pageTitle":"Welcome","sectionTitle":"Table of contents","sectionRoute":"/docs/user/intro#table-of-contents","type":"docs"},{"id":505,"pageTitle":"Welcome","sectionTitle":"Support channels","sectionRoute":"/docs/user/intro#support-channels","type":"docs"},{"id":509,"pageTitle":"Basics of package management in Solus","sectionTitle":"Basics of package management in Solus","sectionRoute":"/docs/user/package-management/basics","type":"docs"},{"id":506,"pageTitle":"History and software rollback in Solus","sectionTitle":"History and software rollback in Solus","sectionRoute":"/docs/user/package-management/history-and-rollback","type":"docs"},{"id":507,"pageTitle":"History and software rollback in Solus","sectionTitle":"History of software changes","sectionRoute":"/docs/user/package-management/history-and-rollback#history-of-software-changes","type":"docs"},{"id":508,"pageTitle":"History and software rollback in Solus","sectionTitle":"Rollback","sectionRoute":"/docs/user/package-management/history-and-rollback#rollback","type":"docs"},{"id":510,"pageTitle":"Repository management","sectionTitle":"Repository management","sectionRoute":"/docs/user/package-management/repo-management","type":"docs"},{"id":511,"pageTitle":"Repository management","sectionTitle":"Official repositories","sectionRoute":"/docs/user/package-management/repo-management#official-repositories","type":"docs"},{"id":512,"pageTitle":"Repository management","sectionTitle":"Repository management commands","sectionRoute":"/docs/user/package-management/repo-management#repository-management-commands","type":"docs"},{"id":513,"pageTitle":"Privacy Policy","sectionTitle":"Privacy Policy","sectionRoute":"/docs/user/privacy","type":"docs"},{"id":514,"pageTitle":"Privacy Policy","sectionTitle":"Solus installations","sectionRoute":"/docs/user/privacy#solus-installations","type":"docs"},{"id":515,"pageTitle":"Privacy Policy","sectionTitle":"Solus forum (discuss.getsol.us)","sectionRoute":"/docs/user/privacy#solus-forum-discussgetsolus","type":"docs"},{"id":516,"pageTitle":"Privacy Policy","sectionTitle":"Third party hosts","sectionRoute":"/docs/user/privacy#third-party-hosts","type":"docs"},{"id":517,"pageTitle":"Privacy Policy","sectionTitle":"Your rights under the GDPR","sectionRoute":"/docs/user/privacy#your-rights-under-the-gdpr","type":"docs"},{"id":518,"pageTitle":"Privacy Policy","sectionTitle":"Privacy contact","sectionRoute":"/docs/user/privacy#privacy-contact","type":"docs"},{"id":540,"pageTitle":"Boot Management","sectionTitle":"Boot Management","sectionRoute":"/docs/user/quick-start/boot-management","type":"docs"},{"id":541,"pageTitle":"Boot Management","sectionTitle":"clr-boot-manager","sectionRoute":"/docs/user/quick-start/boot-management#clr-boot-manager","type":"docs"},{"id":542,"pageTitle":"Boot Management","sectionTitle":"Open the boot menu","sectionRoute":"/docs/user/quick-start/boot-management#open-the-boot-menu","type":"docs"},{"id":543,"pageTitle":"Boot Management","sectionTitle":"Displaying the boot menu by default every boot","sectionRoute":"/docs/user/quick-start/boot-management#displaying-the-boot-menu-by-default-every-boot","type":"docs"},{"id":544,"pageTitle":"Boot Management","sectionTitle":"Adding kernel parameters","sectionRoute":"/docs/user/quick-start/boot-management#adding-kernel-parameters","type":"docs"},{"id":545,"pageTitle":"Boot Management","sectionTitle":"Kernels","sectionRoute":"/docs/user/quick-start/boot-management#kernels","type":"docs"},{"id":546,"pageTitle":"Boot Management","sectionTitle":"Installing a different kernel branch","sectionRoute":"/docs/user/quick-start/boot-management#installing-a-different-kernel-branch","type":"docs"},{"id":547,"pageTitle":"Boot Management","sectionTitle":"Change the default kernel branch to boot","sectionRoute":"/docs/user/quick-start/boot-management#change-the-default-kernel-branch-to-boot","type":"docs"},{"id":519,"pageTitle":"Default applications","sectionTitle":"Default applications","sectionRoute":"/docs/user/quick-start/default-applications","type":"docs"},{"id":520,"pageTitle":"Default applications","sectionTitle":"Web browser","sectionRoute":"/docs/user/quick-start/default-applications#web-browser","type":"docs"},{"id":521,"pageTitle":"Default applications","sectionTitle":"Email client","sectionRoute":"/docs/user/quick-start/default-applications#email-client","type":"docs"},{"id":522,"pageTitle":"Default applications","sectionTitle":"Managing your files","sectionRoute":"/docs/user/quick-start/default-applications#managing-your-files","type":"docs"},{"id":523,"pageTitle":"Default applications","sectionTitle":"Nemo","sectionRoute":"/docs/user/quick-start/default-applications#nemo","type":"docs"},{"id":524,"pageTitle":"Default applications","sectionTitle":"GNOME Files","sectionRoute":"/docs/user/quick-start/default-applications#gnome-files","type":"docs"},{"id":525,"pageTitle":"Default applications","sectionTitle":"Dolphin","sectionRoute":"/docs/user/quick-start/default-applications#dolphin","type":"docs"},{"id":526,"pageTitle":"Default applications","sectionTitle":"Office suite","sectionRoute":"/docs/user/quick-start/default-applications#office-suite","type":"docs"},{"id":527,"pageTitle":"Default applications","sectionTitle":"Calc","sectionRoute":"/docs/user/quick-start/default-applications#calc","type":"docs"},{"id":528,"pageTitle":"Default applications","sectionTitle":"Draw","sectionRoute":"/docs/user/quick-start/default-applications#draw","type":"docs"},{"id":529,"pageTitle":"Default applications","sectionTitle":"Impress","sectionRoute":"/docs/user/quick-start/default-applications#impress","type":"docs"},{"id":530,"pageTitle":"Default applications","sectionTitle":"Math","sectionRoute":"/docs/user/quick-start/default-applications#math","type":"docs"},{"id":531,"pageTitle":"Default applications","sectionTitle":"Writer","sectionRoute":"/docs/user/quick-start/default-applications#writer","type":"docs"},{"id":532,"pageTitle":"Default applications","sectionTitle":"Spell-checking","sectionRoute":"/docs/user/quick-start/default-applications#spell-checking","type":"docs"},{"id":533,"pageTitle":"Default applications","sectionTitle":"Music","sectionRoute":"/docs/user/quick-start/default-applications#music","type":"docs"},{"id":534,"pageTitle":"Default applications","sectionTitle":"Rhythmbox","sectionRoute":"/docs/user/quick-start/default-applications#rhythmbox","type":"docs"},{"id":535,"pageTitle":"Default applications","sectionTitle":"Elisa","sectionRoute":"/docs/user/quick-start/default-applications#elisa","type":"docs"},{"id":536,"pageTitle":"Default applications","sectionTitle":"Video","sectionRoute":"/docs/user/quick-start/default-applications#video","type":"docs"},{"id":537,"pageTitle":"Default applications","sectionTitle":"Celluloid","sectionRoute":"/docs/user/quick-start/default-applications#celluloid","type":"docs"},{"id":538,"pageTitle":"Default applications","sectionTitle":"Haruna","sectionRoute":"/docs/user/quick-start/default-applications#haruna","type":"docs"},{"id":539,"pageTitle":"Default applications","sectionTitle":"Parole","sectionRoute":"/docs/user/quick-start/default-applications#parole","type":"docs"},{"id":550,"pageTitle":"Preparing to install","sectionTitle":"Preparing to install","sectionRoute":"/docs/user/quick-start/installation/","type":"docs"},{"id":551,"pageTitle":"Preparing to install","sectionTitle":"Getting the ISO","sectionRoute":"/docs/user/quick-start/installation/#getting-the-iso","type":"docs"},{"id":552,"pageTitle":"Preparing to install","sectionTitle":"Verifying the ISO","sectionRoute":"/docs/user/quick-start/installation/#verifying-the-iso","type":"docs"},{"id":553,"pageTitle":"Preparing to install","sectionTitle":"Linux and macOS","sectionRoute":"/docs/user/quick-start/installation/#linux-and-macos","type":"docs"},{"id":554,"pageTitle":"Preparing to install","sectionTitle":"Windows","sectionRoute":"/docs/user/quick-start/installation/#windows","type":"docs"},{"id":555,"pageTitle":"Preparing to install","sectionTitle":"Creating bootable media","sectionRoute":"/docs/user/quick-start/installation/#creating-bootable-media","type":"docs"},{"id":556,"pageTitle":"Preparing to install","sectionTitle":"Linux","sectionRoute":"/docs/user/quick-start/installation/#linux","type":"docs"},{"id":557,"pageTitle":"Preparing to install","sectionTitle":"Windows","sectionRoute":"/docs/user/quick-start/installation/#windows-1","type":"docs"},{"id":558,"pageTitle":"Preparing to install","sectionTitle":"macOS","sectionRoute":"/docs/user/quick-start/installation/#macos","type":"docs"},{"id":559,"pageTitle":"Preparing to install","sectionTitle":"Boot the media","sectionRoute":"/docs/user/quick-start/installation/#boot-the-media","type":"docs"},{"id":548,"pageTitle":"Disk Partitioning","sectionTitle":"Disk Partitioning","sectionRoute":"/docs/user/quick-start/installation/disks","type":"docs"},{"id":549,"pageTitle":"Disk Partitioning","sectionTitle":"UEFI","sectionRoute":"/docs/user/quick-start/installation/disks#uefi","type":"docs"},{"id":561,"pageTitle":"Booting with Secure Boot Enabled","sectionTitle":"Booting with Secure Boot Enabled","sectionRoute":"/docs/user/quick-start/installation/secure-boot","type":"docs"},{"id":562,"pageTitle":"Booting with Secure Boot Enabled","sectionTitle":"Enrolling the Solus certificate","sectionRoute":"/docs/user/quick-start/installation/secure-boot#enrolling-the-solus-certificate","type":"docs"},{"id":563,"pageTitle":"Booting with Secure Boot Enabled","sectionTitle":"Enabling Secure Boot on an existing install","sectionRoute":"/docs/user/quick-start/installation/secure-boot#enabling-secure-boot-on-an-existing-install","type":"docs"},{"id":564,"pageTitle":"Booting with Secure Boot Enabled","sectionTitle":"Final tips","sectionRoute":"/docs/user/quick-start/installation/secure-boot#final-tips","type":"docs"},{"id":565,"pageTitle":"Booting with Secure Boot Enabled","sectionTitle":"Why is enrolling the Solus certificate necessary?","sectionRoute":"/docs/user/quick-start/installation/secure-boot","type":"docs"},{"id":566,"pageTitle":"Booting with Secure Boot Enabled","sectionTitle":"Useful links for additional reading","sectionRoute":"/docs/user/quick-start/installation/secure-boot#useful-links-for-additional-reading","type":"docs"},{"id":560,"pageTitle":"System requirements","sectionTitle":"System requirements","sectionRoute":"/docs/user/quick-start/installation/system-requirements","type":"docs"},{"id":567,"pageTitle":"Software Center","sectionTitle":"Software Center","sectionRoute":"/docs/user/quick-start/software-center/","type":"docs"},{"id":770,"pageTitle":"DroidCam","sectionTitle":"DroidCam","sectionRoute":"/docs/user/software/camera/droidcam","type":"docs"},{"id":771,"pageTitle":"DroidCam","sectionTitle":"Before installation","sectionRoute":"/docs/user/software/camera/droidcam#before-installation","type":"docs"},{"id":772,"pageTitle":"DroidCam","sectionTitle":"Installation","sectionRoute":"/docs/user/software/camera/droidcam#installation","type":"docs"},{"id":773,"pageTitle":"DroidCam","sectionTitle":"Usage","sectionRoute":"/docs/user/software/camera/droidcam#usage","type":"docs"},{"id":569,"pageTitle":"Command Line","sectionTitle":"Command Line","sectionRoute":"/docs/user/software/command-line/","type":"docs"},{"id":570,"pageTitle":"Command Line","sectionTitle":"Changing Shell","sectionRoute":"/docs/user/software/command-line/#changing-shell","type":"docs"},{"id":571,"pageTitle":"Command Line","sectionTitle":"Installation","sectionRoute":"/docs/user/software/command-line/#installation","type":"docs"},{"id":572,"pageTitle":"Command Line","sectionTitle":"Switching","sectionRoute":"/docs/user/software/command-line/#switching","type":"docs"},{"id":573,"pageTitle":"Command Line","sectionTitle":"Troubleshooting","sectionRoute":"/docs/user/software/command-line/#troubleshooting","type":"docs"},{"id":574,"pageTitle":"Command Line","sectionTitle":"fzf","sectionRoute":"/docs/user/software/command-line/#fzf","type":"docs"},{"id":575,"pageTitle":"Command Line","sectionTitle":"Installation","sectionRoute":"/docs/user/software/command-line/#installation-1","type":"docs"},{"id":576,"pageTitle":"Command Line","sectionTitle":"Fuzzy Auto-Completion","sectionRoute":"/docs/user/software/command-line/#fuzzy-auto-completion","type":"docs"},{"id":577,"pageTitle":"Command Line","sectionTitle":"Key Bindings","sectionRoute":"/docs/user/software/command-line/#key-bindings","type":"docs"},{"id":578,"pageTitle":"Command Line","sectionTitle":"Powerline Shell Prompt","sectionRoute":"/docs/user/software/command-line/#powerline-shell-prompt","type":"docs"},{"id":579,"pageTitle":"Command Line","sectionTitle":"Installation","sectionRoute":"/docs/user/software/command-line/#installation-2","type":"docs"},{"id":580,"pageTitle":"Command Line","sectionTitle":"Shell Prompts","sectionRoute":"/docs/user/software/command-line/#shell-prompts","type":"docs"},{"id":568,"pageTitle":"Configuration File Locations","sectionTitle":"Configuration File Locations","sectionRoute":"/docs/user/software/configuration_files","type":"docs"},{"id":583,"pageTitle":"Desktop Environments","sectionTitle":"Desktop Environments","sectionRoute":"/docs/user/software/desktops/","type":"docs"},{"id":584,"pageTitle":"Desktop Environments","sectionTitle":"Budgie","sectionRoute":"/docs/user/software/desktops/#budgie","type":"docs"},{"id":585,"pageTitle":"Desktop Environments","sectionTitle":"GNOME Shell","sectionRoute":"/docs/user/software/desktops/#gnome-shell","type":"docs"},{"id":586,"pageTitle":"Desktop Environments","sectionTitle":"MATE","sectionRoute":"/docs/user/software/desktops/#mate","type":"docs"},{"id":587,"pageTitle":"Desktop Environments","sectionTitle":"XFCE","sectionRoute":"/docs/user/software/desktops/#xfce","type":"docs"},{"id":588,"pageTitle":"Desktop Environments","sectionTitle":"Tiling window managers","sectionRoute":"/docs/user/software/desktops/#tiling-window-managers","type":"docs"},{"id":589,"pageTitle":"Desktop Environments","sectionTitle":"i3","sectionRoute":"/docs/user/software/desktops/#i3","type":"docs"},{"id":590,"pageTitle":"Desktop Environments","sectionTitle":"Sway","sectionRoute":"/docs/user/software/desktops/#sway","type":"docs"},{"id":591,"pageTitle":"Desktop Environments","sectionTitle":"Stacking window manager","sectionRoute":"/docs/user/software/desktops/#stacking-window-manager","type":"docs"},{"id":592,"pageTitle":"Desktop Environments","sectionTitle":"Labwc","sectionRoute":"/docs/user/software/desktops/#labwc","type":"docs"},{"id":581,"pageTitle":"Development","sectionTitle":"Development","sectionRoute":"/docs/user/software/development/","type":"docs"},{"id":582,"pageTitle":"Development","sectionTitle":"Getting started","sectionRoute":"/docs/user/software/development/#getting-started","type":"docs"},{"id":593,"pageTitle":"Containers","sectionTitle":"Containers","sectionRoute":"/docs/user/software/development/containers","type":"docs"},{"id":594,"pageTitle":"Containers","sectionTitle":"Docker","sectionRoute":"/docs/user/software/development/containers#docker","type":"docs"},{"id":595,"pageTitle":"Containers","sectionTitle":"Podman","sectionRoute":"/docs/user/software/development/containers#podman","type":"docs"},{"id":596,"pageTitle":"Java","sectionTitle":"Java","sectionRoute":"/docs/user/software/development/java","type":"docs"},{"id":597,"pageTitle":"Java","sectionTitle":"Running Java applications","sectionRoute":"/docs/user/software/development/java#running-java-applications","type":"docs"},{"id":599,"pageTitle":"PostgreSQL server","sectionTitle":"PostgreSQL server","sectionRoute":"/docs/user/software/development/postgresql","type":"docs"},{"id":600,"pageTitle":"PostgreSQL server","sectionTitle":"Usage","sectionRoute":"/docs/user/software/development/postgresql#usage","type":"docs"},{"id":601,"pageTitle":"PostgreSQL server","sectionTitle":"Updating to 17","sectionRoute":"/docs/user/software/development/postgresql#updating-to-17","type":"docs"},{"id":602,"pageTitle":"R and RStudio","sectionTitle":"R and RStudio","sectionRoute":"/docs/user/software/development/r-and-rstudio","type":"docs"},{"id":603,"pageTitle":"R and RStudio","sectionTitle":"Downloading R","sectionRoute":"/docs/user/software/development/r-and-rstudio#downloading-r","type":"docs"},{"id":604,"pageTitle":"R and RStudio","sectionTitle":"Downloading RStudio","sectionRoute":"/docs/user/software/development/r-and-rstudio#downloading-rstudio","type":"docs"},{"id":605,"pageTitle":"R and RStudio","sectionTitle":"How to use install.packages() on Solus","sectionRoute":"/docs/user/software/development/r-and-rstudio#how-to-use-installpackages-on-solus","type":"docs"},{"id":598,"pageTitle":"Rust","sectionTitle":"Rust","sectionRoute":"/docs/user/software/development/rust","type":"docs"},{"id":606,"pageTitle":"Web Development","sectionTitle":"Web Development","sectionRoute":"/docs/user/software/development/web","type":"docs"},{"id":607,"pageTitle":"Web Development","sectionTitle":"Servers","sectionRoute":"/docs/user/software/development/web","type":"docs"},{"id":608,"pageTitle":"Web Development","sectionTitle":"Caddy","sectionRoute":"/docs/user/software/development/web#caddy","type":"docs"},{"id":609,"pageTitle":"Web Development","sectionTitle":"Installation","sectionRoute":"/docs/user/software/development/web#installation","type":"docs"},{"id":610,"pageTitle":"Web Development","sectionTitle":"Configuration","sectionRoute":"/docs/user/software/development/web#configuration","type":"docs"},{"id":611,"pageTitle":"Web Development","sectionTitle":"httpd (Apache)","sectionRoute":"/docs/user/software/development/web#httpd-apache","type":"docs"},{"id":612,"pageTitle":"Web Development","sectionTitle":"Installation","sectionRoute":"/docs/user/software/development/web#installation-1","type":"docs"},{"id":613,"pageTitle":"Web Development","sectionTitle":"Usage","sectionRoute":"/docs/user/software/development/web#usage","type":"docs"},{"id":614,"pageTitle":"Web Development","sectionTitle":"nginx","sectionRoute":"/docs/user/software/development/web#nginx","type":"docs"},{"id":615,"pageTitle":"Web Development","sectionTitle":"Installation","sectionRoute":"/docs/user/software/development/web#installation-2","type":"docs"},{"id":616,"pageTitle":"Web Development","sectionTitle":"Usage","sectionRoute":"/docs/user/software/development/web#usage-1","type":"docs"},{"id":617,"pageTitle":"Gaming","sectionTitle":"Gaming","sectionRoute":"/docs/user/software/gaming/","type":"docs"},{"id":618,"pageTitle":"Gaming","sectionTitle":"Heroes of Newerth","sectionRoute":"/docs/user/software/gaming/#heroes-of-newerth","type":"docs"},{"id":619,"pageTitle":"Gaming","sectionTitle":"Lutris","sectionRoute":"/docs/user/software/gaming/#lutris","type":"docs"},{"id":620,"pageTitle":"Gaming","sectionTitle":"About","sectionRoute":"/docs/user/software/gaming/#about","type":"docs"},{"id":621,"pageTitle":"Gaming","sectionTitle":"Minecraft","sectionRoute":"/docs/user/software/gaming/#minecraft","type":"docs"},{"id":622,"pageTitle":"Gaming","sectionTitle":"Installation","sectionRoute":"/docs/user/software/gaming/#installation","type":"docs"},{"id":623,"pageTitle":"Gaming","sectionTitle":"Prism Launcher","sectionRoute":"/docs/user/software/gaming/#prism-launcher","type":"docs"},{"id":624,"pageTitle":"Gaming","sectionTitle":"RetroArch","sectionRoute":"/docs/user/software/gaming/#retroarch","type":"docs"},{"id":625,"pageTitle":"Gaming","sectionTitle":"Installing the assets","sectionRoute":"/docs/user/software/gaming/#installing-the-assets","type":"docs"},{"id":626,"pageTitle":"Gaming","sectionTitle":"Steam","sectionRoute":"/docs/user/software/gaming/#steam","type":"docs"},{"id":627,"pageTitle":"Gaming","sectionTitle":"NVIDIA","sectionRoute":"/docs/user/software/gaming/#nvidia","type":"docs"},{"id":628,"pageTitle":"IBus","sectionTitle":"IBus","sectionRoute":"/docs/user/software/localization/ibus","type":"docs"},{"id":629,"pageTitle":"IBus","sectionTitle":"Configuration","sectionRoute":"/docs/user/software/localization/ibus#configuration","type":"docs"},{"id":630,"pageTitle":"IBus","sectionTitle":"IBus IME package list","sectionRoute":"/docs/user/software/localization/ibus#ibus-ime-package-list","type":"docs"},{"id":640,"pageTitle":"Samba file sharing","sectionTitle":"Samba file sharing","sectionRoute":"/docs/user/software/networking/samba","type":"docs"},{"id":641,"pageTitle":"Samba file sharing","sectionTitle":"Samba on Solus","sectionRoute":"/docs/user/software/networking/samba#samba-on-solus","type":"docs"},{"id":642,"pageTitle":"Samba file sharing","sectionTitle":"How to start/stop Samba","sectionRoute":"/docs/user/software/networking/samba#how-to-startstop-samba","type":"docs"},{"id":643,"pageTitle":"Samba file sharing","sectionTitle":"Enabling Windows 7+ network discovery support","sectionRoute":"/docs/user/software/networking/samba#enabling-windows-7-network-discovery-support","type":"docs"},{"id":644,"pageTitle":"Samba file sharing","sectionTitle":"Accessing Samba via IPv6","sectionRoute":"/docs/user/software/networking/samba#accessing-samba-via-ipv6","type":"docs"},{"id":645,"pageTitle":"Samba file sharing","sectionTitle":"A brief introduction to the Samba usershare functionality","sectionRoute":"/docs/user/software/networking/samba#a-brief-introduction-to-the-samba-usershare-functionality","type":"docs"},{"id":646,"pageTitle":"Samba file sharing","sectionTitle":"GUI - configuring shares via file manager plugins","sectionRoute":"/docs/user/software/networking/samba#gui---configuring-shares-via-file-manager-plugins","type":"docs"},{"id":647,"pageTitle":"Samba file sharing","sectionTitle":"CLI - using the net usershare command","sectionRoute":"/docs/user/software/networking/samba#cli---using-the-net-usershare-command","type":"docs"},{"id":648,"pageTitle":"Samba file sharing","sectionTitle":"Managing Samba authentication for named users","sectionRoute":"/docs/user/software/networking/samba#managing-samba-authentication-for-named-users","type":"docs"},{"id":649,"pageTitle":"Samba file sharing","sectionTitle":"Debugging Samba authentication issues","sectionRoute":"/docs/user/software/networking/samba#debugging-samba-authentication-issues","type":"docs"},{"id":650,"pageTitle":"Samba file sharing","sectionTitle":"Adding custom configuration parameters via /etc/samba/smb.conf","sectionRoute":"/docs/user/software/networking/samba#adding-custom-configuration-parameters-via-etcsambasmbconf","type":"docs"},{"id":651,"pageTitle":"Samba file sharing","sectionTitle":"Example -- anonymous, read-write share outside of $HOME","sectionRoute":"/docs/user/software/networking/samba#example----anonymous-read-write-share-outside-of-home","type":"docs"},{"id":652,"pageTitle":"Samba file sharing","sectionTitle":"Links to the official Samba documentation","sectionRoute":"/docs/user/software/networking/samba#links-to-the-official-samba-documentation","type":"docs"},{"id":653,"pageTitle":"Samba file sharing","sectionTitle":"Full manual control of Samba (recommended only for experienced Samba admins)","sectionRoute":"/docs/user/software/networking/samba#full-manual-control-of-samba-recommended-only-for-experienced-samba-admins","type":"docs"},{"id":631,"pageTitle":"TigerVNC","sectionTitle":"TigerVNC","sectionRoute":"/docs/user/software/networking/tigervnc","type":"docs"},{"id":632,"pageTitle":"TigerVNC","sectionTitle":"Installation","sectionRoute":"/docs/user/software/networking/tigervnc#installation","type":"docs"},{"id":633,"pageTitle":"TigerVNC","sectionTitle":"Usage","sectionRoute":"/docs/user/software/networking/tigervnc#usage","type":"docs"},{"id":634,"pageTitle":"TigerVNC","sectionTitle":"Initial setup of vncserver","sectionRoute":"/docs/user/software/networking/tigervnc#initial-setup-of-vncserver","type":"docs"},{"id":635,"pageTitle":"TigerVNC","sectionTitle":"Configuration for your desktops","sectionRoute":"/docs/user/software/networking/tigervnc#configuration-for-your-desktops","type":"docs"},{"id":636,"pageTitle":"TigerVNC","sectionTitle":"Budgie","sectionRoute":"/docs/user/software/networking/tigervnc#budgie","type":"docs"},{"id":637,"pageTitle":"TigerVNC","sectionTitle":"GNOME","sectionRoute":"/docs/user/software/networking/tigervnc#gnome","type":"docs"},{"id":638,"pageTitle":"TigerVNC","sectionTitle":"MATE","sectionRoute":"/docs/user/software/networking/tigervnc#mate","type":"docs"},{"id":639,"pageTitle":"TigerVNC","sectionTitle":"Plasma","sectionRoute":"/docs/user/software/networking/tigervnc#plasma","type":"docs"},{"id":654,"pageTitle":"Wireshark","sectionTitle":"Wireshark","sectionRoute":"/docs/user/software/networking/wireshark","type":"docs"},{"id":655,"pageTitle":"Wireshark","sectionTitle":"Installation","sectionRoute":"/docs/user/software/networking/wireshark#installation","type":"docs"},{"id":656,"pageTitle":"Wireshark","sectionTitle":"Use wireshark as a non-root user","sectionRoute":"/docs/user/software/networking/wireshark#use-wireshark-as-a-non-root-user","type":"docs"},{"id":657,"pageTitle":"Wireshark","sectionTitle":"Usage","sectionRoute":"/docs/user/software/networking/wireshark#usage","type":"docs"},{"id":658,"pageTitle":"XRDP","sectionTitle":"XRDP","sectionRoute":"/docs/user/software/networking/xrdp","type":"docs"},{"id":659,"pageTitle":"XRDP","sectionTitle":"Installation","sectionRoute":"/docs/user/software/networking/xrdp#installation","type":"docs"},{"id":660,"pageTitle":"XRDP","sectionTitle":"Configuration","sectionRoute":"/docs/user/software/networking/xrdp#configuration","type":"docs"},{"id":661,"pageTitle":"XRDP","sectionTitle":"Start / Stop xrdp","sectionRoute":"/docs/user/software/networking/xrdp#start--stop-xrdp","type":"docs"},{"id":662,"pageTitle":"Sound","sectionTitle":"Sound","sectionRoute":"/docs/user/software/sound/","type":"docs"},{"id":663,"pageTitle":"Third Party","sectionTitle":"Third Party","sectionRoute":"/docs/user/software/third-party/","type":"docs"},{"id":664,"pageTitle":"Third Party","sectionTitle":"Browsers","sectionRoute":"/docs/user/software/third-party/#browsers","type":"docs"},{"id":665,"pageTitle":"Third Party","sectionTitle":"Google Chrome","sectionRoute":"/docs/user/software/third-party/#google-chrome","type":"docs"},{"id":666,"pageTitle":"Third Party","sectionTitle":"Google Chrome (Beta)","sectionRoute":"/docs/user/software/third-party/#google-chrome-beta","type":"docs"},{"id":667,"pageTitle":"Third Party","sectionTitle":"Google Chrome (Dev/Unstable)","sectionRoute":"/docs/user/software/third-party/#google-chrome-devunstable","type":"docs"},{"id":668,"pageTitle":"Third Party","sectionTitle":"Communication","sectionRoute":"/docs/user/software/third-party/#communication","type":"docs"},{"id":669,"pageTitle":"Third Party","sectionTitle":"Franz","sectionRoute":"/docs/user/software/third-party/#franz","type":"docs"},{"id":670,"pageTitle":"Third Party","sectionTitle":"Slack","sectionRoute":"/docs/user/software/third-party/#slack","type":"docs"},{"id":671,"pageTitle":"Third Party","sectionTitle":"Viber","sectionRoute":"/docs/user/software/third-party/#viber","type":"docs"},{"id":672,"pageTitle":"Third Party","sectionTitle":"Multimedia","sectionRoute":"/docs/user/software/third-party/#multimedia","type":"docs"},{"id":673,"pageTitle":"Third Party","sectionTitle":"Bitwig Studio","sectionRoute":"/docs/user/software/third-party/#bitwig-studio","type":"docs"},{"id":674,"pageTitle":"Third Party","sectionTitle":"Ocenaudio","sectionRoute":"/docs/user/software/third-party/#ocenaudio","type":"docs"},{"id":675,"pageTitle":"Third Party","sectionTitle":"Plex Media Server","sectionRoute":"/docs/user/software/third-party/#plex-media-server","type":"docs"},{"id":676,"pageTitle":"Third Party","sectionTitle":"SunVox","sectionRoute":"/docs/user/software/third-party/#sunvox","type":"docs"},{"id":677,"pageTitle":"Third Party","sectionTitle":"Spotify","sectionRoute":"/docs/user/software/third-party/#spotify","type":"docs"},{"id":678,"pageTitle":"Third Party","sectionTitle":"Network","sectionRoute":"/docs/user/software/third-party/#network","type":"docs"},{"id":679,"pageTitle":"Third Party","sectionTitle":"AnyDesk","sectionRoute":"/docs/user/software/third-party/#anydesk","type":"docs"},{"id":680,"pageTitle":"Third Party","sectionTitle":"Insync","sectionRoute":"/docs/user/software/third-party/#insync","type":"docs"},{"id":681,"pageTitle":"Third Party","sectionTitle":"Spideroak","sectionRoute":"/docs/user/software/third-party/#spideroak","type":"docs"},{"id":682,"pageTitle":"Third Party","sectionTitle":"Synology Cloud Station Drive","sectionRoute":"/docs/user/software/third-party/#synology-cloud-station-drive","type":"docs"},{"id":683,"pageTitle":"Third Party","sectionTitle":"TeamViewer","sectionRoute":"/docs/user/software/third-party/#teamviewer","type":"docs"},{"id":684,"pageTitle":"Third Party","sectionTitle":"Office","sectionRoute":"/docs/user/software/third-party/#office","type":"docs"},{"id":685,"pageTitle":"Third Party","sectionTitle":"Mendeley Desktop","sectionRoute":"/docs/user/software/third-party/#mendeley-desktop","type":"docs"},{"id":686,"pageTitle":"Third Party","sectionTitle":"Microsoft Core Fonts","sectionRoute":"/docs/user/software/third-party/#microsoft-core-fonts","type":"docs"},{"id":687,"pageTitle":"Third Party","sectionTitle":"Moneydance","sectionRoute":"/docs/user/software/third-party/#moneydance","type":"docs"},{"id":688,"pageTitle":"Third Party","sectionTitle":"PomoDoneApp","sectionRoute":"/docs/user/software/third-party/#pomodoneapp","type":"docs"},{"id":689,"pageTitle":"Third Party","sectionTitle":"Scrivener","sectionRoute":"/docs/user/software/third-party/#scrivener","type":"docs"},{"id":690,"pageTitle":"Third Party","sectionTitle":"Programming","sectionRoute":"/docs/user/software/third-party/#programming","type":"docs"},{"id":691,"pageTitle":"Third Party","sectionTitle":"Android Studio","sectionRoute":"/docs/user/software/third-party/#android-studio","type":"docs"},{"id":692,"pageTitle":"Third Party","sectionTitle":"CLion","sectionRoute":"/docs/user/software/third-party/#clion","type":"docs"},{"id":693,"pageTitle":"Third Party","sectionTitle":"DataGrip","sectionRoute":"/docs/user/software/third-party/#datagrip","type":"docs"},{"id":694,"pageTitle":"Third Party","sectionTitle":"GitKraken","sectionRoute":"/docs/user/software/third-party/#gitkraken","type":"docs"},{"id":695,"pageTitle":"Third Party","sectionTitle":"IDEA","sectionRoute":"/docs/user/software/third-party/#idea","type":"docs"},{"id":696,"pageTitle":"Third Party","sectionTitle":"PhpStorm","sectionRoute":"/docs/user/software/third-party/#phpstorm","type":"docs"},{"id":697,"pageTitle":"Third Party","sectionTitle":"PyCharm","sectionRoute":"/docs/user/software/third-party/#pycharm","type":"docs"},{"id":698,"pageTitle":"Third Party","sectionTitle":"Rider","sectionRoute":"/docs/user/software/third-party/#rider","type":"docs"},{"id":699,"pageTitle":"Third Party","sectionTitle":"RubyMine","sectionRoute":"/docs/user/software/third-party/#rubymine","type":"docs"},{"id":700,"pageTitle":"Third Party","sectionTitle":"Sublime Text","sectionRoute":"/docs/user/software/third-party/#sublime-text","type":"docs"},{"id":701,"pageTitle":"Third Party","sectionTitle":"WebStorm","sectionRoute":"/docs/user/software/third-party/#webstorm","type":"docs"},{"id":702,"pageTitle":"Third Party","sectionTitle":"Security","sectionRoute":"/docs/user/software/third-party/#security","type":"docs"},{"id":703,"pageTitle":"Third Party","sectionTitle":"Enpass","sectionRoute":"/docs/user/software/third-party/#enpass","type":"docs"},{"id":704,"pageTitle":"Third Party","sectionTitle":"Other","sectionRoute":"/docs/user/software/third-party/#other","type":"docs"},{"id":705,"pageTitle":"Third Party","sectionTitle":"Google Earth","sectionRoute":"/docs/user/software/third-party/#google-earth","type":"docs"},{"id":706,"pageTitle":"Snap","sectionTitle":"Snap","sectionRoute":"/docs/user/software/third-party/snap","type":"docs"},{"id":707,"pageTitle":"Snap","sectionTitle":"Confinement warning","sectionRoute":"/docs/user/software/third-party/snap#confinement-warning","type":"docs"},{"id":708,"pageTitle":"Snap","sectionTitle":"Migrating to Flatpak","sectionRoute":"/docs/user/software/third-party/snap#migrating-to-flatpak","type":"docs"},{"id":709,"pageTitle":"KSysGuard","sectionTitle":"KSysGuard","sectionRoute":"/docs/user/software/utilities/ksysguard","type":"docs"},{"id":710,"pageTitle":"KSysGuard","sectionTitle":"Installation","sectionRoute":"/docs/user/software/utilities/ksysguard#installation","type":"docs"},{"id":711,"pageTitle":"KSysGuard","sectionTitle":"Use KSysGuard as a non-root user","sectionRoute":"/docs/user/software/utilities/ksysguard#use-ksysguard-as-a-non-root-user","type":"docs"},{"id":712,"pageTitle":"KSysGuard","sectionTitle":"Usage","sectionRoute":"/docs/user/software/utilities/ksysguard#usage","type":"docs"},{"id":713,"pageTitle":"KDE Wallet and SSH keys","sectionTitle":"KDE Wallet and SSH keys","sectionRoute":"/docs/user/software/utilities/kwallet","type":"docs"},{"id":714,"pageTitle":"KDE Wallet and SSH keys","sectionTitle":"Prerequisites","sectionRoute":"/docs/user/software/utilities/kwallet#prerequisites","type":"docs"},{"id":715,"pageTitle":"KDE Wallet and SSH keys","sectionTitle":"The SSH_ASKPASS environment variable","sectionRoute":"/docs/user/software/utilities/kwallet#the-ssh_askpass-environment-variable","type":"docs"},{"id":716,"pageTitle":"KDE Wallet and SSH keys","sectionTitle":"Create ~/.config/autostart/ssh-add.desktop","sectionRoute":"/docs/user/software/utilities/kwallet#create-configautostartssh-adddesktop","type":"docs"},{"id":717,"pageTitle":"KDE Wallet and SSH keys","sectionTitle":"Example","sectionRoute":"/docs/user/software/utilities/kwallet#example","type":"docs"},{"id":718,"pageTitle":"KDE Wallet and SSH keys","sectionTitle":"Set correct permissions","sectionRoute":"/docs/user/software/utilities/kwallet#set-correct-permissions","type":"docs"},{"id":719,"pageTitle":"KDE Wallet and SSH keys","sectionTitle":"Re-log to test your changes","sectionRoute":"/docs/user/software/utilities/kwallet#re-log-to-test-your-changes","type":"docs"},{"id":720,"pageTitle":"KDE Wallet and SSH keys","sectionTitle":"Unlock SSH key passphrases automatically on login","sectionRoute":"/docs/user/software/utilities/kwallet#unlock-ssh-key-passphrases-automatically-on-login","type":"docs"},{"id":721,"pageTitle":"KDE Wallet and SSH keys","sectionTitle":"Troubleshooting","sectionRoute":"/docs/user/software/utilities/kwallet#troubleshooting","type":"docs"},{"id":722,"pageTitle":"VirtualBox","sectionTitle":"VirtualBox","sectionRoute":"/docs/user/software/virtualization/virtualbox","type":"docs"},{"id":723,"pageTitle":"VirtualBox","sectionTitle":"Before you start","sectionRoute":"/docs/user/software/virtualization/virtualbox#before-you-start","type":"docs"},{"id":724,"pageTitle":"VirtualBox","sectionTitle":"Remove prior installation","sectionRoute":"/docs/user/software/virtualization/virtualbox#remove-prior-installation","type":"docs"},{"id":725,"pageTitle":"VirtualBox","sectionTitle":"Update your system","sectionRoute":"/docs/user/software/virtualization/virtualbox#update-your-system","type":"docs"},{"id":726,"pageTitle":"VirtualBox","sectionTitle":"Determine which kernel you are using","sectionRoute":"/docs/user/software/virtualization/virtualbox#determine-which-kernel-you-are-using","type":"docs"},{"id":727,"pageTitle":"VirtualBox","sectionTitle":"Solus as host","sectionRoute":"/docs/user/software/virtualization/virtualbox#solus-as-host","type":"docs"},{"id":728,"pageTitle":"VirtualBox","sectionTitle":"Solus as guest","sectionRoute":"/docs/user/software/virtualization/virtualbox#solus-as-guest","type":"docs"},{"id":729,"pageTitle":"VirtualBox","sectionTitle":"Extra configuration","sectionRoute":"/docs/user/software/virtualization/virtualbox#extra-configuration","type":"docs"},{"id":730,"pageTitle":"VirtualBox","sectionTitle":"Troubleshooting","sectionRoute":"/docs/user/software/virtualization/virtualbox#troubleshooting","type":"docs"},{"id":731,"pageTitle":"Open Broadcaster Software (OBS)","sectionTitle":"Open Broadcaster Software (OBS)","sectionRoute":"/docs/user/software/web/obs","type":"docs"},{"id":732,"pageTitle":"Open Broadcaster Software (OBS)","sectionTitle":"Installation","sectionRoute":"/docs/user/software/web/obs#installation","type":"docs"},{"id":733,"pageTitle":"Open Broadcaster Software (OBS)","sectionTitle":"Virtual camera","sectionRoute":"/docs/user/software/web/obs#virtual-camera","type":"docs"},{"id":734,"pageTitle":"Open Broadcaster Software (OBS)","sectionTitle":"Plugins","sectionRoute":"/docs/user/software/web/obs#plugins","type":"docs"},{"id":735,"pageTitle":"Open Broadcaster Software (OBS)","sectionTitle":"Known working plugins","sectionRoute":"/docs/user/software/web/obs#known-working-plugins","type":"docs"},{"id":736,"pageTitle":"Troubleshooting Common Issues","sectionTitle":"Troubleshooting Common Issues","sectionRoute":"/docs/user/troubleshooting/","type":"docs"},{"id":737,"pageTitle":"Troubleshooting Common Issues","sectionTitle":"Issues with Software Center or eopkg","sectionRoute":"/docs/user/troubleshooting/#issues-with-software-center-or-eopkg","type":"docs"},{"id":738,"pageTitle":"Troubleshooting Common Issues","sectionTitle":"Can't install updates","sectionRoute":"/docs/user/troubleshooting/#cant-install-updates","type":"docs"},{"id":739,"pageTitle":"Troubleshooting Common Issues","sectionTitle":"eopkg check shows broken packages","sectionRoute":"/docs/user/troubleshooting/#eopkg-check-shows-broken-packages","type":"docs"},{"id":740,"pageTitle":"Troubleshooting Common Issues","sectionTitle":"Updated system and having issues","sectionRoute":"/docs/user/troubleshooting/#updated-system-and-having-issues","type":"docs"},{"id":741,"pageTitle":"Troubleshooting Common Issues","sectionTitle":"Broken UI with Chromium applications","sectionRoute":"/docs/user/troubleshooting/#broken-ui-with-chromium-applications","type":"docs"},{"id":742,"pageTitle":"Troubleshooting Common Issues","sectionTitle":"Boot into previous kernel","sectionRoute":"/docs/user/troubleshooting/#boot-into-previous-kernel","type":"docs"},{"id":743,"pageTitle":"Troubleshooting Common Issues","sectionTitle":"Reverting updates","sectionRoute":"/docs/user/troubleshooting/#reverting-updates","type":"docs"},{"id":744,"pageTitle":"Troubleshooting Common Issues","sectionTitle":"Boot failure","sectionRoute":"/docs/user/troubleshooting/#boot-failure","type":"docs"},{"id":745,"pageTitle":"Troubleshooting Common Issues","sectionTitle":"Display manager won't start","sectionRoute":"/docs/user/troubleshooting/#display-manager-wont-start","type":"docs"},{"id":746,"pageTitle":"Troubleshooting Common Issues","sectionTitle":"No Solus boot loader","sectionRoute":"/docs/user/troubleshooting/#no-solus-boot-loader","type":"docs"},{"id":747,"pageTitle":"Troubleshooting Common Issues","sectionTitle":"Long boot time","sectionRoute":"/docs/user/troubleshooting/#long-boot-time","type":"docs"},{"id":748,"pageTitle":"Troubleshooting Common Issues","sectionTitle":"Timeout on partition mount (90s)","sectionRoute":"/docs/user/troubleshooting/#timeout-on-partition-mount-90s","type":"docs"},{"id":749,"pageTitle":"Boot Rescue","sectionTitle":"Boot Rescue","sectionRoute":"/docs/user/troubleshooting/boot-rescue","type":"docs"},{"id":750,"pageTitle":"Boot Rescue","sectionTitle":"Multi-booting","sectionRoute":"/docs/user/troubleshooting/boot-rescue#multi-booting","type":"docs"},{"id":751,"pageTitle":"Boot Rescue","sectionTitle":"An entry is present in /etc/fstab that is not present at boot time","sectionRoute":"/docs/user/troubleshooting/boot-rescue#an-entry-is-present-in-etcfstab-that-is-not-present-at-boot-time","type":"docs"},{"id":752,"pageTitle":"Boot Rescue","sectionTitle":"Incorrectly applied updates / disk changes","sectionRoute":"/docs/user/troubleshooting/boot-rescue#incorrectly-applied-updates--disk-changes","type":"docs"},{"id":753,"pageTitle":"Boot Rescue","sectionTitle":"Mounting your system","sectionRoute":"/docs/user/troubleshooting/boot-rescue#mounting-your-system","type":"docs"},{"id":754,"pageTitle":"Boot Rescue","sectionTitle":"Chrooting to your Solus system","sectionRoute":"/docs/user/troubleshooting/boot-rescue#chrooting-to-your-solus-system","type":"docs"},{"id":755,"pageTitle":"Boot Rescue","sectionTitle":"Networking","sectionRoute":"/docs/user/troubleshooting/boot-rescue#networking","type":"docs"},{"id":756,"pageTitle":"Boot Rescue","sectionTitle":"Repairing packages","sectionRoute":"/docs/user/troubleshooting/boot-rescue#repairing-packages","type":"docs"},{"id":757,"pageTitle":"Boot Rescue","sectionTitle":"Correcting disks","sectionRoute":"/docs/user/troubleshooting/boot-rescue#correcting-disks","type":"docs"},{"id":758,"pageTitle":"Boot Rescue","sectionTitle":"Re-run system-wide configuration triggers","sectionRoute":"/docs/user/troubleshooting/boot-rescue#re-run-system-wide-configuration-triggers","type":"docs"},{"id":759,"pageTitle":"Boot Rescue","sectionTitle":"Regenerate UEFI boot entries","sectionRoute":"/docs/user/troubleshooting/boot-rescue#regenerate-uefi-boot-entries","type":"docs"},{"id":760,"pageTitle":"Boot Rescue","sectionTitle":"Unmounting your system","sectionRoute":"/docs/user/troubleshooting/boot-rescue#unmounting-your-system","type":"docs"},{"id":764,"pageTitle":"Installation Issues","sectionTitle":"Installation Issues","sectionRoute":"/docs/user/troubleshooting/installation","type":"docs"},{"id":765,"pageTitle":"Installation Issues","sectionTitle":"Can't install in EFI mode","sectionRoute":"/docs/user/troubleshooting/installation#cant-install-in-efi-mode","type":"docs"},{"id":766,"pageTitle":"Installation Issues","sectionTitle":"I can't boot into Solus after installation!","sectionRoute":"/docs/user/troubleshooting/installation#i-cant-boot-into-solus-after-installation","type":"docs"},{"id":767,"pageTitle":"Installation Issues","sectionTitle":"Legacy/BIOS installation","sectionRoute":"/docs/user/troubleshooting/installation#legacybios-installation","type":"docs"},{"id":768,"pageTitle":"Installation Issues","sectionTitle":"EFI","sectionRoute":"/docs/user/troubleshooting/installation#efi","type":"docs"},{"id":761,"pageTitle":"Plasma Desktop Troubleshooting","sectionTitle":"Plasma Desktop Troubleshooting","sectionRoute":"/docs/user/troubleshooting/plasma","type":"docs"},{"id":762,"pageTitle":"Plasma Desktop Troubleshooting","sectionTitle":"Desktop no longer responds to clicks, cursor stuck in \"move\" mode (cross)","sectionRoute":"/docs/user/troubleshooting/plasma#desktop-no-longer-responds-to-clicks-cursor-stuck-in-move-mode-cross","type":"docs"},{"id":763,"pageTitle":"Plasma Desktop Troubleshooting","sectionTitle":"Application windows look corrupt / incomplete","sectionRoute":"/docs/user/troubleshooting/plasma#application-windows-look-corrupt--incomplete","type":"docs"}],"index":{"version":"2.3.9","fields":["title","content","tags"],"fieldVectors":[["title/20",[0,0.972,1,1.524,2,1.545]],["content/20",[0,1.463,1,3.133,2,2.684,3,1.8,4,1.728,5,2.276,6,2.466,7,3.992,8,3.322,9,2.186,10,2.934,11,2.143,12,0.984,13,3.831,14,2.598,15,2.466,16,1.186,17,3.463,18,4.432,19,4.602,20,3.997,21,2.994,22,3.232,23,2.346,24,2.963,25,4.193,26,2.934,27,2.775,28,3.057,29,4.193,30,2.878,31,3.162,32,1.009]],["tags/20",[]],["title/21",[0,0.972,22,2.147,23,1.559]],["content/21",[0,1.463,1,3.133,2,2.684,3,1.8,4,1.728,5,2.276,6,2.466,7,3.992,8,3.322,9,2.186,10,2.934,11,2.143,12,0.984,13,3.831,14,2.598,15,2.466,16,1.186,17,3.463,18,4.432,19,4.602,20,3.997,21,2.994,22,3.232,23,2.346,24,2.963,25,4.193,26,2.934,27,2.775,28,3.057,29,4.193,30,2.878,31,3.162,32,1.009]],["tags/21",[]],["title/37",[0,1.159,33,4.786]],["content/37",[0,1.497,16,1.213,33,7.671,34,6.014,35,7.209,36,7.209,37,7.209,38,4.967,39,5.864,40,7.209,41,4.765,42,7.662,43,7.662,44,6.375,45,7.662]],["tags/37",[]],["title/38",[0,1.159,46,4.935]],["content/38",[0,1.786,46,7.608,47,2.74,48,4.314,49,6.999,50,7.177,51,4.709,52,6.212,53,2.985,54,5.386,55,5.993,56,6.776]],["tags/38",[]],["title/39",[0,1.159,54,4.436]],["content/39",[0,1.786,46,7.608,47,2.74,48,4.314,49,6.999,50,7.177,51,4.709,52,6.212,53,2.985,54,5.386,55,5.993,56,6.776]],["tags/39",[]],["title/40",[0,0.972,57,2.76,58,3.017]],["content/40",[0,1.723,9,1.365,16,0.741,24,4.454,32,1.667,48,3.212,57,3.777,58,4.128,59,3.422,60,2.648,61,3.891,62,3.497,63,3.077,64,3.773,65,2.085,66,3.031,67,4.983,68,4.028,69,4.028,70,2.018,71,4.48,72,3.568,73,3.447,74,3.231,75,3.077,76,2.114,77,5.65,78,1.413,79,3.29,80,4.028,81,3.177,82,2.988,83,2.519,84,4.028,85,3.077,86,2.429,87,2.908,88,4.028,89,2.292,90,3.773,91,2.87,92,1.992,93,3.29,94,2.705,95,3.476,96,3.891,97,3.891,98,4.028]],["tags/40",[]],["title/41",[0,0.972,66,3.226,67,3.641]],["content/41",[0,1.723,9,1.365,16,0.741,24,4.454,32,1.667,48,3.212,57,3.777,58,4.128,59,3.422,60,2.648,61,3.891,62,3.497,63,3.077,64,3.773,65,2.085,66,3.031,67,4.983,68,4.028,69,4.028,70,2.018,71,4.48,72,3.568,73,3.447,74,3.231,75,3.077,76,2.114,77,5.65,78,1.413,79,3.29,80,4.028,81,3.177,82,2.988,83,2.519,84,4.028,85,3.077,86,2.429,87,2.908,88,4.028,89,2.292,90,3.773,91,2.87,92,1.992,93,3.29,94,2.705,95,3.476,96,3.891,97,3.891,98,4.028]],["tags/41",[]],["title/42",[0,0.837,24,2.377,32,0.81,77,3.015]],["content/42",[0,1.723,9,1.365,16,0.741,24,4.454,32,1.667,48,3.212,57,3.777,58,4.128,59,3.422,60,2.648,61,3.891,62,3.497,63,3.077,64,3.773,65,2.085,66,3.031,67,4.983,68,4.028,69,4.028,70,2.018,71,4.48,72,3.568,73,3.447,74,3.231,75,3.077,76,2.114,77,5.65,78,1.413,79,3.29,80,4.028,81,3.177,82,2.988,83,2.519,84,4.028,85,3.077,86,2.429,87,2.908,88,4.028,89,2.292,90,3.773,91,2.87,92,1.992,93,3.29,94,2.705,95,3.476,96,3.891,97,3.891,98,4.028]],["tags/42",[]],["title/43",[0,0.972,48,2.348,95,2.541]],["content/43",[0,1.723,9,1.365,16,0.741,24,4.454,32,1.667,48,3.212,57,3.777,58,4.128,59,3.422,60,2.648,61,3.891,62,3.497,63,3.077,64,3.773,65,2.085,66,3.031,67,4.983,68,4.028,69,4.028,70,2.018,71,4.48,72,3.568,73,3.447,74,3.231,75,3.077,76,2.114,77,5.65,78,1.413,79,3.29,80,4.028,81,3.177,82,2.988,83,2.519,84,4.028,85,3.077,86,2.429,87,2.908,88,4.028,89,2.292,90,3.773,91,2.87,92,1.992,93,3.29,94,2.705,95,3.476,96,3.891,97,3.891,98,4.028]],["tags/43",[]],["title/44",[0,1.159,99,4.03]],["content/44",[0,1.795,2,2.852,99,6.242]],["tags/44",[]],["title/45",[0,1.159,100,4.099]],["content/45",[0,1.773,5,3.032,18,4.212,32,1.715,76,3.217,83,3.834,91,4.369,100,6.271,101,3.834,102,4.425,103,4.683,104,2.096,105,5.586,106,2.614,107,5.447,108,3.309,109,3.309,110,6.696,111,6.696]],["tags/45",[]],["title/46",[0,1.159,105,4.656]],["content/46",[0,1.773,5,3.032,18,4.212,32,1.715,76,3.217,83,3.834,91,4.369,100,6.271,101,3.834,102,4.425,103,4.683,104,2.096,105,5.586,106,2.614,107,5.447,108,3.309,109,3.309,110,6.696,111,6.696]],["tags/46",[]],["title/47",[0,0.837,3,1.03,112,2.427,113,2.507]],["content/47",[0,1.599,3,1.462,14,2.958,16,0.963,41,2.499,53,1.312,100,2.777,106,1.476,107,3.075,109,1.868,112,3.445,113,3.56,114,2.186,115,3.109,116,3.461,117,3.154,118,3.217,119,2.941,120,2.568,121,3.005,122,2.532,123,2.351,124,3.005,125,2.941,126,5.762,127,4.549,128,3.242,129,2.186,130,3.075,131,3.461,132,3.461,133,2.563,134,6.267,135,2.568,136,3.154,137,4.452,138,2.777,139,2.809,140,3.343,141,3.343,142,1.558,143,3.461,144,3.005,145,3.461,146,3.075,147,5.373,148,2.644,149,2.644,150,2.532,151,4.775,152,5.241,153,2.499,154,2.252,155,2.827,156,4.363,157,3.461,158,3.461,159,3.461,160,3.343,161,2.827]],["tags/47",[]],["title/48",[0,1.159,127,4.436]],["content/48",[0,1.599,3,1.462,14,2.958,16,0.963,41,2.499,53,1.312,100,2.777,106,1.476,107,3.075,109,1.868,112,3.445,113,3.56,114,2.186,115,3.109,116,3.461,117,3.154,118,3.217,119,2.941,120,2.568,121,3.005,122,2.532,123,2.351,124,3.005,125,2.941,126,5.762,127,4.549,128,3.242,129,2.186,130,3.075,131,3.461,132,3.461,133,2.563,134,6.267,135,2.568,136,3.154,137,4.452,138,2.777,139,2.809,140,3.343,141,3.343,142,1.558,143,3.461,144,3.005,145,3.461,146,3.075,147,5.373,148,2.644,149,2.644,150,2.532,151,4.775,152,5.241,153,2.499,154,2.252,155,2.827,156,4.363,157,3.461,158,3.461,159,3.461,160,3.343,161,2.827]],["tags/48",[]],["title/49",[0,1.159,137,4.341]],["content/49",[0,1.599,3,1.462,14,2.958,16,0.963,41,2.499,53,1.312,100,2.777,106,1.476,107,3.075,109,1.868,112,3.445,113,3.56,114,2.186,115,3.109,116,3.461,117,3.154,118,3.217,119,2.941,120,2.568,121,3.005,122,2.532,123,2.351,124,3.005,125,2.941,126,5.762,127,4.549,128,3.242,129,2.186,130,3.075,131,3.461,132,3.461,133,2.563,134,6.267,135,2.568,136,3.154,137,4.452,138,2.777,139,2.809,140,3.343,141,3.343,142,1.558,143,3.461,144,3.005,145,3.461,146,3.075,147,5.373,148,2.644,149,2.644,150,2.532,151,4.775,152,5.241,153,2.499,154,2.252,155,2.827,156,4.363,157,3.461,158,3.461,159,3.461,160,3.343,161,2.827]],["tags/49",[]],["title/50",[0,1.159,147,4.341]],["content/50",[0,1.599,3,1.462,14,2.958,16,0.963,41,2.499,53,1.312,100,2.777,106,1.476,107,3.075,109,1.868,112,3.445,113,3.56,114,2.186,115,3.109,116,3.461,117,3.154,118,3.217,119,2.941,120,2.568,121,3.005,122,2.532,123,2.351,124,3.005,125,2.941,126,5.762,127,4.549,128,3.242,129,2.186,130,3.075,131,3.461,132,3.461,133,2.563,134,6.267,135,2.568,136,3.154,137,4.452,138,2.777,139,2.809,140,3.343,141,3.343,142,1.558,143,3.461,144,3.005,145,3.461,146,3.075,147,5.373,148,2.644,149,2.644,150,2.532,151,4.775,152,5.241,153,2.499,154,2.252,155,2.827,156,4.363,157,3.461,158,3.461,159,3.461,160,3.343,161,2.827]],["tags/50",[]],["title/59",[0,0.837,12,0.789,162,3.015,163,1.661]],["content/59",[0,1.626,1,2.55,4,1.613,12,1.673,16,1.439,23,1.562,32,1.717,73,2.525,104,2.452,106,1.832,162,3.509,163,3.523,164,1.153,165,1.635,166,2.166,167,3.126,168,5.019,169,3.817,170,3.843,171,2.795,172,3.061,173,3.576,174,3.729,175,2.27,176,2.854,177,2.885,178,3.988,179,3.281,180,4.024,181,3.281,182,2.795,183,2.987,184,3.729]],["tags/59",[]],["title/60",[0,0.837,167,1.474,168,3.015,169,3.28]],["content/60",[0,1.626,1,2.55,4,1.613,12,1.673,16,1.439,23,1.562,32,1.717,73,2.525,104,2.452,106,1.832,162,3.509,163,3.523,164,1.153,165,1.635,166,2.166,167,3.126,168,5.019,169,3.817,170,3.843,171,2.795,172,3.061,173,3.576,174,3.729,175,2.27,176,2.854,177,2.885,178,3.988,179,3.281,180,4.024,181,3.281,182,2.795,183,2.987,184,3.729]],["tags/60",[]],["title/61",[0,0.972,23,1.559,163,1.929]],["content/61",[0,1.626,1,2.55,4,1.613,12,1.673,16,1.439,23,1.562,32,1.717,73,2.525,104,2.452,106,1.832,162,3.509,163,3.523,164,1.153,165,1.635,166,2.166,167,3.126,168,5.019,169,3.817,170,3.843,171,2.795,172,3.061,173,3.576,174,3.729,175,2.27,176,2.854,177,2.885,178,3.988,179,3.281,180,4.024,181,3.281,182,2.795,183,2.987,184,3.729]],["tags/61",[]],["title/51",[0,0.972,185,3.906,186,3.055]],["content/51",[0,1.839,9,2.446,16,1.327,24,3.492,26,3.458,32,1.19,138,4.35,154,3.528,185,4.941,186,3.864,187,5.08,188,5.423,189,5.423,190,5.423,191,6.971,192,4.171,193,4.081,194,2.717,195,4.207,196,4.277,197,5.423,198,5.08,199,5.238,200,4.515,201,4.818,202,3.915]],["tags/51",[]],["title/52",[0,0.972,191,4.14,192,2.204]],["content/52",[0,1.839,9,2.446,16,1.327,24,3.492,26,3.458,32,1.19,138,4.35,154,3.528,185,4.941,186,3.864,187,5.08,188,5.423,189,5.423,190,5.423,191,6.971,192,4.171,193,4.081,194,2.717,195,4.207,196,4.277,197,5.423,198,5.08,199,5.238,200,4.515,201,4.818,202,3.915]],["tags/52",[]],["title/53",[0,0.972,200,3.569,201,3.808]],["content/53",[0,1.839,9,2.446,16,1.327,24,3.492,26,3.458,32,1.19,138,4.35,154,3.528,185,4.941,186,3.864,187,5.08,188,5.423,189,5.423,190,5.423,191,6.971,192,4.171,193,4.081,194,2.717,195,4.207,196,4.277,197,5.423,198,5.08,199,5.238,200,4.515,201,4.818,202,3.915]],["tags/53",[]],["title/54",[0,1.159,203,4.436]],["content/54",[0,1.718,9,1.173,10,2.207,12,1.867,16,1.163,23,1.906,26,2.207,30,2.165,32,1.662,47,1.204,53,1.312,57,2.229,58,2.436,60,3.445,81,2.73,82,2.568,106,1.476,114,2.186,153,2.499,165,2.408,179,2.644,203,3.005,204,3.343,205,3.242,206,3.005,207,3.154,208,4.003,209,4.066,210,3.343,211,3.154,212,2.882,213,3.656,214,2.941,215,2.882,216,2.532,217,2.125,218,1.78,219,3.343,220,3.343,221,3.242,222,1.68,223,3.242,224,3.242,225,4.909,226,2.73,227,2.052,228,3.343,229,3.075,230,2.642,231,2.73,232,3.005,233,3.075,234,2.605,235,4.066,236,3.075,237,3.242,238,1.816,239,2.73]],["tags/54",[]],["title/55",[0,0.837,12,0.789,208,2.82,209,2.864]],["content/55",[0,1.718,9,1.173,10,2.207,12,1.867,16,1.163,23,1.906,26,2.207,30,2.165,32,1.662,47,1.204,53,1.312,57,2.229,58,2.436,60,3.445,81,2.73,82,2.568,106,1.476,114,2.186,153,2.499,165,2.408,179,2.644,203,3.005,204,3.343,205,3.242,206,3.005,207,3.154,208,4.003,209,4.066,210,3.343,211,3.154,212,2.882,213,3.656,214,2.941,215,2.882,216,2.532,217,2.125,218,1.78,219,3.343,220,3.343,221,3.242,222,1.68,223,3.242,224,3.242,225,4.909,226,2.73,227,2.052,228,3.343,229,3.075,230,2.642,231,2.73,232,3.005,233,3.075,234,2.605,235,4.066,236,3.075,237,3.242,238,1.816,239,2.73]],["tags/55",[]],["title/56",[0,0.972,10,2.733,213,2.478]],["content/56",[0,1.718,9,1.173,10,2.207,12,1.867,16,1.163,23,1.906,26,2.207,30,2.165,32,1.662,47,1.204,53,1.312,57,2.229,58,2.436,60,3.445,81,2.73,82,2.568,106,1.476,114,2.186,153,2.499,165,2.408,179,2.644,203,3.005,204,3.343,205,3.242,206,3.005,207,3.154,208,4.003,209,4.066,210,3.343,211,3.154,212,2.882,213,3.656,214,2.941,215,2.882,216,2.532,217,2.125,218,1.78,219,3.343,220,3.343,221,3.242,222,1.68,223,3.242,224,3.242,225,4.909,226,2.73,227,2.052,228,3.343,229,3.075,230,2.642,231,2.73,232,3.005,233,3.075,234,2.605,235,4.066,236,3.075,237,3.242,238,1.816,239,2.73]],["tags/56",[]],["title/57",[0,0.837,12,0.789,165,1.405,230,1.861]],["content/57",[0,1.718,9,1.173,10,2.207,12,1.867,16,1.163,23,1.906,26,2.207,30,2.165,32,1.662,47,1.204,53,1.312,57,2.229,58,2.436,60,3.445,81,2.73,82,2.568,106,1.476,114,2.186,153,2.499,165,2.408,179,2.644,203,3.005,204,3.343,205,3.242,206,3.005,207,3.154,208,4.003,209,4.066,210,3.343,211,3.154,212,2.882,213,3.656,214,2.941,215,2.882,216,2.532,217,2.125,218,1.78,219,3.343,220,3.343,221,3.242,222,1.68,223,3.242,224,3.242,225,4.909,226,2.73,227,2.052,228,3.343,229,3.075,230,2.642,231,2.73,232,3.005,233,3.075,234,2.605,235,4.066,236,3.075,237,3.242,238,1.816,239,2.73]],["tags/57",[]],["title/58",[0,0.972,12,0.916,230,2.161]],["content/58",[0,1.718,9,1.173,10,2.207,12,1.867,16,1.163,23,1.906,26,2.207,30,2.165,32,1.662,47,1.204,53,1.312,57,2.229,58,2.436,60,3.445,81,2.73,82,2.568,106,1.476,114,2.186,153,2.499,165,2.408,179,2.644,203,3.005,204,3.343,205,3.242,206,3.005,207,3.154,208,4.003,209,4.066,210,3.343,211,3.154,212,2.882,213,3.656,214,2.941,215,2.882,216,2.532,217,2.125,218,1.78,219,3.343,220,3.343,221,3.242,222,1.68,223,3.242,224,3.242,225,4.909,226,2.73,227,2.052,228,3.343,229,3.075,230,2.642,231,2.73,232,3.005,233,3.075,234,2.605,235,4.066,236,3.075,237,3.242,238,1.816,239,2.73]],["tags/58",[]],["title/62",[0,0.972,163,1.929,240,2.094]],["content/62",[0,1.89,32,1.087,73,2.912,109,2.674,129,3.129,133,2.008,163,3.056,164,2.079,165,1.886,167,3.328,175,2.618,240,3.317,241,4.047,242,1.941,243,3.022,244,2.937,245,3.257,246,4.047,247,4.301,248,3.292,249,2.988,250,3.975,251,4.047,252,3.257,253,3.492,254,3.625,255,3.844,256,4.209,257,4.402,258,3.404]],["tags/62",[]],["title/63",[0,0.972,242,1.679,243,1.908]],["content/63",[0,1.89,32,1.087,73,2.912,109,2.674,129,3.129,133,2.008,163,3.056,164,2.079,165,1.886,167,3.328,175,2.618,240,3.317,241,4.047,242,1.941,243,3.022,244,2.937,245,3.257,246,4.047,247,4.301,248,3.292,249,2.988,250,3.975,251,4.047,252,3.257,253,3.492,254,3.625,255,3.844,256,4.209,257,4.402,258,3.404]],["tags/63",[]],["title/64",[0,0.972,164,1.151,250,3.439]],["content/64",[0,1.89,32,1.087,73,2.912,109,2.674,129,3.129,133,2.008,163,3.056,164,2.079,165,1.886,167,3.328,175,2.618,240,3.317,241,4.047,242,1.941,243,3.022,244,2.937,245,3.257,246,4.047,247,4.301,248,3.292,249,2.988,250,3.975,251,4.047,252,3.257,253,3.492,254,3.625,255,3.844,256,4.209,257,4.402,258,3.404]],["tags/64",[]],["title/65",[0,0.972,167,1.712,253,2.204]],["content/65",[0,1.89,32,1.087,73,2.912,109,2.674,129,3.129,133,2.008,163,3.056,164,2.079,165,1.886,167,3.328,175,2.618,240,3.317,241,4.047,242,1.941,243,3.022,244,2.937,245,3.257,246,4.047,247,4.301,248,3.292,249,2.988,250,3.975,251,4.047,252,3.257,253,3.492,254,3.625,255,3.844,256,4.209,257,4.402,258,3.404]],["tags/65",[]],["title/68",[0,1.159,259,3.964]],["content/68",[0,2.1,2,2.27,3,1.455,4,1.291,16,0.632,22,1.722,32,1.382,65,2.699,76,1.804,83,2.15,95,2.038,114,2.171,133,2.553,139,1.843,164,1.4,167,1.373,170,2.15,171,2.237,218,1.768,227,2.038,242,1.347,245,2.26,252,5.595,254,2.516,259,2.668,260,4.771,261,1.373,262,1.988,263,2.15,264,3.144,265,2.712,266,2.588,267,2.45,268,1.768,269,2.482,270,2.192,271,2.055,272,1.972,273,2.668,274,1.856,275,2.092,276,1.659,277,2.809,278,2.588,279,2.758,280,2.758,281,2.45,282,2.42,283,2.758,284,2.26,285,2.335,286,2.309,287,2.335,288,2.26,289,2.284]],["tags/68",[]],["title/69",[0,0.972,261,1.712,262,2.478]],["content/69",[0,2.1,2,2.27,3,1.455,4,1.291,16,0.632,22,1.722,32,1.382,65,2.699,76,1.804,83,2.15,95,2.038,114,2.171,133,2.553,139,1.843,164,1.4,167,1.373,170,2.15,171,2.237,218,1.768,227,2.038,242,1.347,245,2.26,252,5.595,254,2.516,259,2.668,260,4.771,261,1.373,262,1.988,263,2.15,264,3.144,265,2.712,266,2.588,267,2.45,268,1.768,269,2.482,270,2.192,271,2.055,272,1.972,273,2.668,274,1.856,275,2.092,276,1.659,277,2.809,278,2.588,279,2.758,280,2.758,281,2.45,282,2.42,283,2.758,284,2.26,285,2.335,286,2.309,287,2.335,288,2.26,289,2.284]],["tags/69",[]],["title/70",[0,0.837,2,1.33,3,1.03,264,2.226]],["content/70",[0,2.1,2,2.27,3,1.455,4,1.291,16,0.632,22,1.722,32,1.382,65,2.699,76,1.804,83,2.15,95,2.038,114,2.171,133,2.553,139,1.843,164,1.4,167,1.373,170,2.15,171,2.237,218,1.768,227,2.038,242,1.347,245,2.26,252,5.595,254,2.516,259,2.668,260,4.771,261,1.373,262,1.988,263,2.15,264,3.144,265,2.712,266,2.588,267,2.45,268,1.768,269,2.482,270,2.192,271,2.055,272,1.972,273,2.668,274,1.856,275,2.092,276,1.659,277,2.809,278,2.588,279,2.758,280,2.758,281,2.45,282,2.42,283,2.758,284,2.26,285,2.335,286,2.309,287,2.335,288,2.26,289,2.284]],["tags/70",[]],["title/71",[0,1.159,133,2.071]],["content/71",[0,2.1,2,2.27,3,1.455,4,1.291,16,0.632,22,1.722,32,1.382,65,2.699,76,1.804,83,2.15,95,2.038,114,2.171,133,2.553,139,1.843,164,1.4,167,1.373,170,2.15,171,2.237,218,1.768,227,2.038,242,1.347,245,2.26,252,5.595,254,2.516,259,2.668,260,4.771,261,1.373,262,1.988,263,2.15,264,3.144,265,2.712,266,2.588,267,2.45,268,1.768,269,2.482,270,2.192,271,2.055,272,1.972,273,2.668,274,1.856,275,2.092,276,1.659,277,2.809,278,2.588,279,2.758,280,2.758,281,2.45,282,2.42,283,2.758,284,2.26,285,2.335,286,2.309,287,2.335,288,2.26,289,2.284]],["tags/71",[]],["title/72",[0,1.159,218,2.627]],["content/72",[0,2.1,2,2.27,3,1.455,4,1.291,16,0.632,22,1.722,32,1.382,65,2.699,76,1.804,83,2.15,95,2.038,114,2.171,133,2.553,139,1.843,164,1.4,167,1.373,170,2.15,171,2.237,218,1.768,227,2.038,242,1.347,245,2.26,252,5.595,254,2.516,259,2.668,260,4.771,261,1.373,262,1.988,263,2.15,264,3.144,265,2.712,266,2.588,267,2.45,268,1.768,269,2.482,270,2.192,271,2.055,272,1.972,273,2.668,274,1.856,275,2.092,276,1.659,277,2.809,278,2.588,279,2.758,280,2.758,281,2.45,282,2.42,283,2.758,284,2.26,285,2.335,286,2.309,287,2.335,288,2.26,289,2.284]],["tags/72",[]],["title/73",[0,1.159,278,3.845]],["content/73",[0,2.1,2,2.27,3,1.455,4,1.291,16,0.632,22,1.722,32,1.382,65,2.699,76,1.804,83,2.15,95,2.038,114,2.171,133,2.553,139,1.843,164,1.4,167,1.373,170,2.15,171,2.237,218,1.768,227,2.038,242,1.347,245,2.26,252,5.595,254,2.516,259,2.668,260,4.771,261,1.373,262,1.988,263,2.15,264,3.144,265,2.712,266,2.588,267,2.45,268,1.768,269,2.482,270,2.192,271,2.055,272,1.972,273,2.668,274,1.856,275,2.092,276,1.659,277,2.809,278,2.588,279,2.758,280,2.758,281,2.45,282,2.42,283,2.758,284,2.26,285,2.335,286,2.309,287,2.335,288,2.26,289,2.284]],["tags/73",[]],["title/74",[0,1.159,22,2.56]],["content/74",[0,2.1,2,2.27,3,1.455,4,1.291,16,0.632,22,1.722,32,1.382,65,2.699,76,1.804,83,2.15,95,2.038,114,2.171,133,2.553,139,1.843,164,1.4,167,1.373,170,2.15,171,2.237,218,1.768,227,2.038,242,1.347,245,2.26,252,5.595,254,2.516,259,2.668,260,4.771,261,1.373,262,1.988,263,2.15,264,3.144,265,2.712,266,2.588,267,2.45,268,1.768,269,2.482,270,2.192,271,2.055,272,1.972,273,2.668,274,1.856,275,2.092,276,1.659,277,2.809,278,2.588,279,2.758,280,2.758,281,2.45,282,2.42,283,2.758,284,2.26,285,2.335,286,2.309,287,2.335,288,2.26,289,2.284]],["tags/74",[]],["title/75",[0,1.159,139,2.738]],["content/75",[0,2.1,2,2.27,3,1.455,4,1.291,16,0.632,22,1.722,32,1.382,65,2.699,76,1.804,83,2.15,95,2.038,114,2.171,133,2.553,139,1.843,164,1.4,167,1.373,170,2.15,171,2.237,218,1.768,227,2.038,242,1.347,245,2.26,252,5.595,254,2.516,259,2.668,260,4.771,261,1.373,262,1.988,263,2.15,264,3.144,265,2.712,266,2.588,267,2.45,268,1.768,269,2.482,270,2.192,271,2.055,272,1.972,273,2.668,274,1.856,275,2.092,276,1.659,277,2.809,278,2.588,279,2.758,280,2.758,281,2.45,282,2.42,283,2.758,284,2.26,285,2.335,286,2.309,287,2.335,288,2.26,289,2.284]],["tags/75",[]],["title/76",[0,1.159,282,3.596]],["content/76",[0,2.1,2,2.27,3,1.455,4,1.291,16,0.632,22,1.722,32,1.382,65,2.699,76,1.804,83,2.15,95,2.038,114,2.171,133,2.553,139,1.843,164,1.4,167,1.373,170,2.15,171,2.237,218,1.768,227,2.038,242,1.347,245,2.26,252,5.595,254,2.516,259,2.668,260,4.771,261,1.373,262,1.988,263,2.15,264,3.144,265,2.712,266,2.588,267,2.45,268,1.768,269,2.482,270,2.192,271,2.055,272,1.972,273,2.668,274,1.856,275,2.092,276,1.659,277,2.809,278,2.588,279,2.758,280,2.758,281,2.45,282,2.42,283,2.758,284,2.26,285,2.335,286,2.309,287,2.335,288,2.26,289,2.284]],["tags/76",[]],["title/77",[0,0.972,284,2.818,285,2.911]],["content/77",[0,2.1,2,2.27,3,1.455,4,1.291,16,0.632,22,1.722,32,1.382,65,2.699,76,1.804,83,2.15,95,2.038,114,2.171,133,2.553,139,1.843,164,1.4,167,1.373,170,2.15,171,2.237,218,1.768,227,2.038,242,1.347,245,2.26,252,5.595,254,2.516,259,2.668,260,4.771,261,1.373,262,1.988,263,2.15,264,3.144,265,2.712,266,2.588,267,2.45,268,1.768,269,2.482,270,2.192,271,2.055,272,1.972,273,2.668,274,1.856,275,2.092,276,1.659,277,2.809,278,2.588,279,2.758,280,2.758,281,2.45,282,2.42,283,2.758,284,2.26,285,2.335,286,2.309,287,2.335,288,2.26,289,2.284]],["tags/77",[]],["title/78",[0,1.159,286,3.432]],["content/78",[0,2.1,2,2.27,3,1.455,4,1.291,16,0.632,22,1.722,32,1.382,65,2.699,76,1.804,83,2.15,95,2.038,114,2.171,133,2.553,139,1.843,164,1.4,167,1.373,170,2.15,171,2.237,218,1.768,227,2.038,242,1.347,245,2.26,252,5.595,254,2.516,259,2.668,260,4.771,261,1.373,262,1.988,263,2.15,264,3.144,265,2.712,266,2.588,267,2.45,268,1.768,269,2.482,270,2.192,271,2.055,272,1.972,273,2.668,274,1.856,275,2.092,276,1.659,277,2.809,278,2.588,279,2.758,280,2.758,281,2.45,282,2.42,283,2.758,284,2.26,285,2.335,286,2.309,287,2.335,288,2.26,289,2.284]],["tags/78",[]],["title/79",[0,1.159,288,3.359]],["content/79",[0,2.1,2,2.27,3,1.455,4,1.291,16,0.632,22,1.722,32,1.382,65,2.699,76,1.804,83,2.15,95,2.038,114,2.171,133,2.553,139,1.843,164,1.4,167,1.373,170,2.15,171,2.237,218,1.768,227,2.038,242,1.347,245,2.26,252,5.595,254,2.516,259,2.668,260,4.771,261,1.373,262,1.988,263,2.15,264,3.144,265,2.712,266,2.588,267,2.45,268,1.768,269,2.482,270,2.192,271,2.055,272,1.972,273,2.668,274,1.856,275,2.092,276,1.659,277,2.809,278,2.588,279,2.758,280,2.758,281,2.45,282,2.42,283,2.758,284,2.26,285,2.335,286,2.309,287,2.335,288,2.26,289,2.284]],["tags/79",[]],["title/80",[0,1.159,289,3.395]],["content/80",[0,2.1,2,2.27,3,1.455,4,1.291,16,0.632,22,1.722,32,1.382,65,2.699,76,1.804,83,2.15,95,2.038,114,2.171,133,2.553,139,1.843,164,1.4,167,1.373,170,2.15,171,2.237,218,1.768,227,2.038,242,1.347,245,2.26,252,5.595,254,2.516,259,2.668,260,4.771,261,1.373,262,1.988,263,2.15,264,3.144,265,2.712,266,2.588,267,2.45,268,1.768,269,2.482,270,2.192,271,2.055,272,1.972,273,2.668,274,1.856,275,2.092,276,1.659,277,2.809,278,2.588,279,2.758,280,2.758,281,2.45,282,2.42,283,2.758,284,2.26,285,2.335,286,2.309,287,2.335,288,2.26,289,2.284]],["tags/80",[]],["title/66",[0,1.159,290,4.54]],["content/66",[0,1.581,10,3.285,17,3.877,53,2.642,78,1.808,104,2.384,230,2.598,243,2.293,290,6.196,291,4.063,292,6.42,293,5.628,294,4.209,295,4.826,296,2.615,297,3.998,298,3.387,299,2.581,300,3.936,301,4.826,302,3.77,303,6.354,304,3.08,305,4.826,306,3.387,307,4.473,308,5.363,309,5.363]],["tags/66",[]],["title/67",[0,0.972,292,3.017,303,3.906]],["content/67",[0,1.581,10,3.285,17,3.877,53,2.642,78,1.808,104,2.384,230,2.598,243,2.293,290,6.196,291,4.063,292,6.42,293,5.628,294,4.209,295,4.826,296,2.615,297,3.998,298,3.387,299,2.581,300,3.936,301,4.826,302,3.77,303,6.354,304,3.08,305,4.826,306,3.387,307,4.473,308,5.363,309,5.363]],["tags/67",[]],["title/82",[0,1.159,310,4.436]],["content/82",[0,1.621,12,1.528,167,2.854,218,3.676,288,4.699,310,7.463,311,7.807,312,7.148,313,8.298]],["tags/82",[]],["title/81",[0,0.735,167,1.295,314,1.307,315,3.541,316,2.954]],["content/81",[0,1.516,16,1.229,164,1.795,167,2.67,258,4.594,284,4.395,285,4.541,314,2.696,315,7.302,316,7.521,317,6.092,318,5.94,319,6.263,320,5.566]],["tags/81",[]],["title/83",[12,1.092,321,5.931]],["content/83",[12,1.642,165,2.923,322,9.715,323,7.994,324,3.728]],["tags/83",[]],["title/84",[65,2.219,218,2.204,250,3.439]],["content/84",[3,2.022,12,1.853,250,5.815,325,6.955,326,3.631,327,4.868,328,6.034]],["tags/84",[]],["title/85",[11,1.996,12,0.916,329,3.906]],["content/85",[5,2.428,12,1.86,23,1.784,47,1.707,89,2.792,142,2.209,153,4.87,167,1.96,208,5.153,230,4.387,238,2.576,276,2.368,314,1.979,330,4.388,331,3.446,332,3.296,333,4.741,334,2.383,335,4.908,336,4.87,337,4.568,338,3.193,339,4.009,340,4.169,341,6.209,342,4.361,343,4.741,344,2.668]],["tags/85",[]],["title/86",[11,2.379,12,1.092]],["content/86",[11,2.607,12,2.036,15,3.001,48,3.067,65,2.899,89,4.194,142,3.317,165,3.137,218,2.879,230,2.823,250,4.492,324,2.718,325,4.492,336,4.042,337,3.319,338,3.642,342,6.549,345,3.299]],["tags/86",[]],["title/87",[1,1.817,2,1.841]],["content/87",[1,3.114,2,2.656,3,1.562,4,2.102,5,2.769,6,3.001,7,4.416,8,4.042,9,2.498,10,3.57,11,2.607,12,1.197,13,4.661,14,3.161,15,3.001,16,1.029,17,4.214,18,5.065,19,5.599,20,4.567,21,3.642]],["tags/87",[]],["title/88",[2,1.545,242,1.679,346,3.055]],["content/88",[0,1.157,1,1.814,2,2.834,3,2.353,18,3.505,32,1.119,104,1.744,242,3.08,346,4.936,347,4.928,348,5.572,349,4.533,350,8.762,351,4.928,352,4.167,353,2.926,354,8.041,355,4.533,356,2.496,357,4.533,358,4.649,359,4.928,360,6.454,361,3.024,362,3.465,363,3.958,364,3.839,365,5.31]],["tags/88",[]],["title/89",[366,5.931,367,2.93]],["content/89",[0,1.56,8,3.647,11,2.352,12,1.08,16,1.265,20,3.13,71,5.256,86,3.046,164,1.356,178,2.808,235,3.92,352,4.126,367,3.946,368,5.259,369,5.052,370,5.864,371,3.046,372,3.802,373,6.391,374,4.053,375,5.052,376,4.732,377,4.053,378,5.518,379,5.864,380,6.646,381,3.984,382,4.732,383,4.842,384,6.391,385,2.615,386,5.864,387,3.747,388,3.802]],["tags/89",[]],["title/90",[242,2.001,389,4.786]],["content/90",[2,2.541,3,1.967,8,5.09,86,4.252,166,3.555,242,2.761,334,3.423,354,8.185,385,3.65,390,5.09,391,5.09]],["tags/90",[]],["title/95",[12,0.789,16,0.679,22,1.849,23,1.342]],["content/95",[1,2.28,3,1.789,5,2.256,12,1.811,16,1.363,22,3.212,23,2.695,24,2.937,25,4.156,26,4.088,27,2.751,28,4.259,29,4.156,30,4.009,31,4.405,32,1.001,48,2.498,72,2.775,78,1.601,164,1.224,215,3.797,271,2.727,324,3.112,344,2.48,345,2.869,392,2.228,393,5.295,394,4.748,395,4.273,396,3.539,397,3.875,398,3.597,399,3.597,400,5.295]],["tags/95",[]],["title/96",[22,2.147,164,1.151,401,4.14]],["content/96",[1,2.317,8,4.705,22,3.265,23,2.37,30,4.076,65,3.374,78,2.287,142,2.933,164,1.749,165,2.481,181,4.978,194,3.265,218,3.351,356,2.348,402,3.863,403,6.295,404,4.768]],["tags/96",[]],["title/97",[16,0.788,22,2.147,23,1.559]],["content/97",[1,2.614,3,2.051,22,4.38,23,2.673,307,6.382,405,5.704,406,8.029]],["tags/97",[]],["title/98",[1,1.153,3,0.904,22,1.624,23,1.179,346,2.31]],["content/98",[1,2.611,3,2.226,11,2.949,12,1.92,15,3.394,16,1.164,22,3.997,23,2.67,31,3.08,47,1.559,183,3.116,206,3.891,216,3.279,261,1.79,344,2.437,346,5.233,356,1.615,359,4.329,406,6.916,407,5.203,408,5.272,409,2.04,410,10.094,411,4.199,412,3.596,413,2.946,414,5.203]],["tags/98",[]],["title/99",[1,1.153,3,0.904,22,1.624,31,2.227,415,1.427]],["content/99",[1,2.507,3,1.967,16,1.296,22,4.271,23,2.564,249,4.252,334,3.423,405,5.47,415,3.754]],["tags/99",[]],["title/100",[11,1.51,12,0.693,16,0.596,22,1.624,23,1.179]],["content/100",[1,2.513,3,1.972,11,3.718,12,1.707,16,0.967,22,4.278,23,2.904,30,3.288,32,1.153,135,3.9,249,4.816,334,3.877,385,2.722,405,4.079,416,2.651,417,4.079,418,2.716,419,3.612,420,3.9,421,4.564]],["tags/100",[]],["title/101",[22,1.448,23,1.051,165,1.1,323,3.008,396,2.242,422,3.156]],["content/101",[3,1.8,11,4.103,12,1.726,16,0.846,22,4.044,23,2.935,31,3.162,78,1.615,89,2.618,165,1.752,235,3.571,249,3.89,323,4.79,334,3.132,335,4.602,344,2.502,346,3.279,385,2.382,396,3.571,405,3.571,412,3.692,421,3.995,423,4.602,424,3.791,425,5.342,426,8.135,427,4.193,428,4.311,429,4.602,430,4.79]],["tags/101",[]],["title/102",[5,1.429,22,1.448,23,1.051,30,1.807,328,2.406,431,3.156]],["content/102",[5,1.962,11,3.192,12,1.466,16,1.26,22,4.447,23,2.918,30,3.627,32,0.87,120,2.942,164,1.557,165,1.51,166,2,175,3.065,213,3.353,235,3.077,238,2.081,249,4.548,326,1.987,334,1.926,338,2.58,344,2.156,374,3.182,383,2.791,385,2.053,392,1.937,405,3.077,416,2,421,3.443,426,4.332,432,2.863,433,4.332,434,3.715,435,4.604,436,4.332,437,6.732,438,4.129,439,3.302,440,6.091,441,2.371,442,3.966,443,2.791]],["tags/102",[]],["title/103",[12,0.693,22,1.624,23,1.179,164,0.87,405,2.515]],["content/103",[1,2.513,2,1.894,11,2.448,12,1.707,16,1.3,22,4,23,3.105,32,1.153,89,2.991,92,2.6,108,2.838,135,3.9,164,1.411,249,3.17,261,2.099,276,3.411,324,3.432,326,2.634,334,2.552,405,5.484,419,3.612,441,3.143,444,4.671,445,4.377]],["tags/103",[]],["title/104",[22,1.624,23,1.179,165,1.234,324,1.574,405,2.515]],["content/104",[1,2.399,9,1.663,11,2.285,12,1.442,16,0.902,20,3.041,22,3.861,23,2.453,31,3.372,47,1.707,51,2.934,78,1.722,166,3.401,194,2.459,235,3.808,249,2.96,261,1.96,299,2.459,334,2.383,345,2.197,405,5.234,406,5.36,418,1.886,445,4.086,446,7.831,447,6.209,448,4.741,449,3.226,450,3.693,451,6.209,452,3.808,453,4.597,454,5.697,455,2.272,456,5.109]],["tags/104",[]],["title/105",[1,1.313,12,0.789,457,3.566,458,4.032]],["content/105",[1,3.14,6,3.067,12,1.781,22,2.867,23,3.211,32,1.255,89,3.256,213,3.309,216,4.187,383,4.028,415,3.292,419,3.932,435,6.644,459,4.372,460,7.24,461,8.681,462,5.957,463,4.765]],["tags/105",[]],["title/106",[1,0.927,22,1.306,23,1.527,405,2.022,464,1.615,465,2.375]],["content/106",[0,1.437,1,3.078,6,1.672,12,1.035,16,0.574,22,4.191,23,2.903,30,1.952,32,1.678,72,1.11,78,0.64,103,3.697,104,1.398,135,1.353,165,1.843,166,0.92,222,1.985,261,0.728,291,2.461,331,0.932,338,1.187,342,5.631,344,1.697,356,2.606,405,1.415,411,1.709,415,1.374,416,0.92,417,1.415,419,1.253,421,2.709,424,1.072,449,1.199,455,1.893,457,3.014,461,6.315,464,2.534,465,2.843,466,1.709,467,1.804,468,2.66,469,2.549,470,1.824,471,3.756,472,4.844,473,6.884,474,8.358,475,1.284,476,1.55,477,5.619,478,6.882,479,3.948,480,0.88,481,1.584,482,2.308,483,2.308,484,2.308,485,2.308,486,3.948,487,2.308,488,2.461,489,2.308,490,2.308,491,2.308,492,2.308,493,1.584,494,3.182,495,1.899,496,1.1,497,2.308]],["tags/106",[]],["title/107",[498,3.903,499,5.931]],["content/107",[12,1.487,22,3.484,31,4.779,48,3.809,104,2.378,296,3.53,416,3.507,429,6.956,500,8.074,501,7.597,502,6.338,503,8.074]],["tags/107",[]],["title/91",[504,4.786,505,4.935]],["content/91",[3,1.618,12,0.848,14,2.239,16,1.066,23,2.493,32,1.272,70,1.987,85,3.03,104,1.356,106,1.691,148,4.43,156,3.302,164,1.065,167,2.316,178,2.205,233,3.524,243,3.051,253,2.039,264,2.392,292,2.791,299,1.987,326,3.434,432,2.863,455,1.836,493,5.951,504,7.517,505,7.752,506,4.248,507,3.966,508,6.037,509,3.302,510,4.129,511,4.604,512,5.017,513,4.604,514,3.966,515,2.312,516,4.604,517,4.604,518,2.664,519,5.017,520,3.831,521,2.942,522,4.604]],["tags/91",[]],["title/92",[12,0.693,89,1.844,464,2.009,504,3.037,505,3.131]],["content/92",[3,1.226,12,1.553,15,1.479,20,1.709,21,3.562,29,2.514,63,2.108,75,2.108,78,0.968,87,1.992,89,2.5,106,2.335,133,1.781,142,1.242,164,1.676,167,1.102,178,3.044,243,3.391,251,2.254,260,1.742,281,1.966,287,1.874,336,1.992,338,2.859,342,2.451,409,2.842,449,1.814,455,1.277,468,1.795,493,3.814,504,7.826,505,7.872,506,2.722,508,4.574,511,3.203,521,2.047,523,2.514,524,4.799,525,2.759,526,3.49,527,3.203,528,5.559,529,4.111,530,4.652,531,6.927,532,3.49,533,2.759,534,3.203,535,3.014,536,2.297,537,3.525,538,3.589,539,2.047,540,3.49,541,3.49,542,1.365,543,3.49,544,2.213,545,3.49,546,2.451,547,5.559,548,3.203,549,3.49,550,1.992,551,2.395]],["tags/92",[]],["title/93",[48,2.348,504,4.015,505,4.14]],["content/93",[1,2.548,3,1.999,11,2.499,12,1.532,20,4.44,142,3.225,342,4.768,356,1.934,409,2.442,414,6.23,418,2.062,496,4.322,504,8.066,536,5.966,552,4.305,553,5.367,554,6.23,555,6.789,556,6.789,557,6.789,558,2.856,559,6.789,560,6.789,561,6.789]],["tags/93",[]],["title/94",[562,4.907]],["content/94",[3,2.556,12,1.599,20,4.633,92,2.831,106,3.189,133,2.319,243,2.547,276,3.608,377,4.591,504,8.273,505,8.045,563,3.451,564,8.681,565,4.968]],["tags/94",[]],["title/117",[12,0.916,324,2.081,345,1.918]],["content/117",[3,1.331,11,2.222,12,1.753,16,0.877,23,1.735,26,3.043,27,2.878,32,1.451,89,2.715,142,2.148,153,3.445,167,2.642,215,3.973,230,3.829,238,2.504,261,1.906,262,2.759,286,3.205,326,2.39,330,4.304,337,2.828,338,3.104,345,2.136,392,2.331,409,2.172,444,4.24,455,2.209,496,2.878,566,3.4,567,3.54,568,4.348,569,6.037,570,3.828,571,3.241,572,3.137,573,4.967,574,4.609,575,5.539]],["tags/117",[]],["title/118",[89,2.439,165,1.632,552,3.439]],["content/118",[9,2.103,12,1.684,22,3.946,32,1.361,142,2.792,177,4.167,194,3.946,250,4.977,337,3.677,404,4.539,418,2.384,552,6.319,576,5.512,577,4.814,578,4.481,579,3.741]],["tags/118",[]],["title/119",[324,2.081,345,1.918,580,2.945]],["content/119",[4,2.748,5,3.62,12,1.565,14,3.127,23,2.014,73,3.255,78,1.944,92,2.74,196,4.368,226,4.368,345,3.276,418,2.129,459,4.231,570,4.444,578,4.164,579,4.414,580,5.029,581,4.611,582,5.047,583,3.283,584,5.189,585,4.922,586,5.766,587,4.611]],["tags/119",[]],["title/120",[3,1.196,324,2.081,588,3.906]],["content/120",[3,1.89,12,1.448,16,1.53,32,1.486,203,5.88,244,4.015,455,3.136,588,6.172,589,5.342,590,5.88,591,7.051,592,5.434,593,7.863]],["tags/120",[]],["title/121",[3,1.196,324,2.081,327,2.879]],["content/121",[0,2.019,2,0.502,3,1.632,9,0.472,11,1.545,12,1.317,15,1.779,16,0.738,27,0.839,32,0.305,47,0.858,65,0.721,71,1.063,73,0.818,78,1.61,79,1.137,89,0.792,91,0.992,92,0.688,94,0.935,119,1.182,142,1.11,164,1.362,165,0.939,166,1.673,175,1.303,176,0.925,178,2.551,213,1.425,244,0.825,249,3.061,260,1.557,261,2.027,264,1.487,271,0.832,276,0.672,296,1.251,299,0.697,302,1.804,324,1.197,326,0.697,327,3.929,328,1.159,330,2.986,331,0.711,334,2.464,338,0.905,344,1.34,345,2.457,353,0.798,367,0.798,371,2.001,372,1.047,392,0.68,409,0.633,411,1.304,415,1.767,416,1.243,434,2.309,441,0.832,467,1.425,468,0.905,471,1.08,480,2.215,481,1.208,496,1.487,509,2.763,537,1.117,542,0.688,558,0.741,566,0.992,567,1.032,568,6.469,572,0.915,581,1.159,594,1.449,595,1.344,596,1.616,597,1.237,598,1.761,599,1.344,600,5.077,601,4.198,602,4.198,603,1.616,604,1.52,605,1.52,606,1.616,607,1.304,608,1.761,609,1.392,610,1.063,611,1.159,612,2.862,613,3.119,614,2.763,615,4.766,616,4.182,617,2.693,618,2.693,619,2.949,620,2.246,621,2.566,622,2.094,623,1.005,624,0.979,625,1.182,626,1.137,627,1.304,628,1.392,629,1.616,630,1.392,631,1.268,632,0.915,633,1.047,634,1.761,635,0.915,636,1.616,637,1.761,638,1.761,639,1.449,640,1.761,641,1.761,642,1.761,643,1.08,644,1.616,645,1.761,646,1.761,647,1.761,648,1.761,649,1.761,650,1.761,651,1.159,652,0.768,653,1.52,654,1.304,655,1.137,656,1.761,657,1.761,658,1.237,659,1.018,660,1.137,661,1.08]],["tags/121",[]],["title/122",[11,2.379,12,1.092]],["content/122",[0,1.878,1,2.185,3,2.001,11,3.34,12,1.673,15,2.302,16,0.79,23,1.562,31,2.952,47,1.494,48,3.365,78,1.507,85,3.281,166,2.166,181,3.281,230,2.166,242,1.683,249,4.721,260,3.879,327,2.885,334,2.983,337,2.546,361,3.642,412,3.446,416,2.166,488,3.388,529,2.591,558,3.27,565,3.729,568,3.914,612,4.987,662,3.446,663,4.472,664,4.692,665,4.692,666,4.472,667,4.692,668,3.817]],["tags/122",[]],["title/123",[4,1.918,669,3.196]],["content/123",[0,1.298,3,2.324,4,2.807,28,3.802,166,2.886,258,3.932,331,4.255,339,4.675,455,2.65,467,3.309,496,4.509,578,4.254,580,3.932,583,3.392,669,5.523,670,5.361,671,6.251,672,4.968]],["tags/123",[]],["title/124",[12,0.693,123,2.202,345,1.451,635,2.131,669,2.028]],["content/124",[0,0.764,4,1.928,12,1.488,15,1.807,16,0.944,23,1.226,78,1.802,92,1.667,93,2.754,114,2.129,123,4.227,166,1.7,183,2.344,217,2.07,230,3.137,238,1.769,262,4.023,314,1.359,325,2.704,330,2.193,331,1.722,336,2.434,337,1.998,344,2.793,352,2.754,353,2.946,364,2.537,383,2.372,392,1.647,409,1.534,415,2.261,441,2.015,444,4.564,455,2.378,467,1.949,480,1.627,481,2.926,529,2.033,568,5.67,572,2.216,578,2.922,590,2.926,610,2.575,619,5.529,635,2.216,636,3.913,669,4.352,673,2.704,674,1.949,675,2.995,676,3.682,677,2.995,678,3.913,679,3.509,680,4.265,681,3.509,682,3.913,683,4.265,684,2.051,685,3.913,686,2.089,687,3.509,688,2.806,689,4.265,690,2.316]],["tags/124",[]],["title/108",[162,4.174,578,2.907]],["content/108",[]],["tags/108",[]],["title/109",[5,2.527,580,3.511]],["content/109",[16,1.262,72,4.176,271,4.103,324,3.332,345,3.072,578,4.772,579,5.463,580,5.763,587,5.714]],["tags/109",[]],["title/110",[177,1.941,194,1.448,404,2.114,452,2.242,580,3.132]],["content/110",[4,2.767,5,2.769,23,2.036,78,2.587,177,3.761,331,2.86,337,3.319,345,2.506,412,4.492,418,2.152,553,5.599,578,4.688,580,5.662,586,5.828,624,3.94,691,6.115,692,4.661,693,5.245,694,4.573,695,6.5,696,5.245,697,4.042,698,5.245,699,7.083]],["tags/110",[]],["title/111",[3,1.425,464,3.166]],["content/111",[3,2.051,4,2.76,235,5.704,455,4.048,578,4.974,700,8.029]],["tags/111",[]],["title/112",[3,1.425,166,2.576]],["content/112",[3,2.051,16,1.352,78,2.58,166,3.707,578,4.974,700,8.029,701,4.15]],["tags/112",[]],["title/113",[3,1.425,702,4.174]],["content/113",[3,2.022,109,3.912,578,4.933,700,7.917,702,5.921,703,8.414,704,7.917,705,9.17]],["tags/113",[]],["title/114",[3,1.196,4,1.609,331,2.19]],["content/114",[3,2.183,4,2.937,16,1.265,215,4.206,226,3.984,244,4.638,276,3.32,296,3.492,325,4.053,361,2.994,385,2.615,418,1.941,464,3.13,496,3.046,510,5.259,570,4.053,578,3.915,581,5.728,582,4.603,583,2.994,669,3.159,698,7.869,706,4.621,707,4.126,708,5.864]],["tags/114",[]],["title/115",[4,1.918,669,3.196]],["content/115",[3,2.056,4,3.094,48,3.067,296,2.841,325,4.492,331,2.86,339,6.731,385,2.899,416,2.823,440,4.975,570,4.492,578,4.688,580,5.662,669,4.61,672,4.861,706,3.761,707,4.573,709,7.083,710,5.245,711,5.245]],["tags/115",[]],["title/116",[230,1.635,337,1.921,580,2.227,712,2.515,713,3.242]],["content/116",[4,2.036,5,2.682,6,2.906,12,1.543,15,2.906,22,2.717,32,1.19,134,4.818,153,3.915,177,4.847,230,2.734,337,3.214,361,3.214,577,4.207,578,4.615,579,4.352,580,6.361,712,5.599,714,6.412,715,5.08,716,4.941]],["tags/116",[]],["title/125",[717,5.49]],["content/125",[3,1.745,12,1.788,15,2.361,23,1.602,32,1.737,50,4.014,91,3.14,213,4.205,222,2.139,248,2.927,306,4.112,326,2.207,331,3.196,345,2.8,432,3.18,441,2.634,465,4.014,480,2.126,506,2.73,558,2.344,717,5.431,718,5.114,719,4.812,720,6.256,721,4.641,722,6.833,723,6.512,724,4.014,725,4.256,726,4.586,727,4.586,728,4.256,729,4.586,730,5.573,731,3.743,732,4.812,733,5.573]],["tags/125",[]],["title/126",[12,0.789,89,2.1,464,2.287,717,3.205]],["content/126",[0,1.979,3,1.847,9,1.267,12,1.415,15,2.003,16,0.687,21,2.431,47,1.931,76,1.961,89,2.126,94,2.51,166,1.884,213,2.16,249,3.347,261,1.492,291,2.947,294,3.052,306,2.456,324,1.814,327,2.51,331,3.744,334,2.695,336,2.697,353,2.143,404,2.734,409,1.701,413,2.456,420,2.772,455,3.065,480,1.803,565,3.244,583,2.215,590,3.244,615,3.244,622,3.174,625,3.174,652,2.062,677,3.32,717,3.244,724,5.057,727,3.89,731,6.226,734,3.174,735,4.727,736,4.338,737,6.062,738,4.727,739,3.5,740,4.727,741,4.081,742,4.081,743,2.998]],["tags/126",[]],["title/127",[409,2.325,744,4.254]],["content/127",[0,1.922,3,1.655,12,0.875,15,2.193,23,1.488,89,2.328,165,2.258,179,3.126,184,5.15,213,3.43,260,2.584,306,2.69,327,2.748,409,2.7,416,2.063,464,2.535,470,4.092,496,4.209,529,2.467,665,4.469,674,4.035,717,6.059,724,3.728,728,5.73,731,3.476,737,4.469,744,6.765,745,5.176,746,4.75,747,4.092,748,4.75,749,4.092,750,5.176,751,5.176,752,5.176,753,5.176,754,4.469,755,5.73,756,4.75,757,3.079,758,4.75,759,5.176]],["tags/127",[]],["title/128",[213,2.954,622,4.341]],["content/128",[0,1.402,9,1.468,16,1.136,20,2.684,175,3.808,206,5.366,213,4.166,294,3.538,326,2.17,345,2.766,371,2.612,415,2.721,481,5.366,506,3.83,558,2.305,622,5.251,625,3.68,626,3.538,652,2.39,674,4.166,723,4.509,724,5.632,727,4.509,737,7.871,742,8.583,760,2.525,761,4.731,762,5.97,763,5.97,764,5.48,765,5.029,766,4.332,767,3.048,768,4.731,769,5.48]],["tags/128",[]],["title/129",[652,2.365,723,4.462,724,3.906]],["content/129",[16,0.967,76,2.759,179,4.016,213,4.087,324,2.552,332,5.364,409,2.393,450,5.319,455,2.434,467,4.087,475,3.7,480,2.537,481,6.136,506,4.38,567,3.9,591,5.473,622,4.466,652,2.901,723,5.473,724,7.277,727,7.358,736,6.103,744,5.885,746,6.103,770,6.651]],["tags/129",[]],["title/130",[306,3.359,622,4.341]],["content/130",[0,1.008,12,0.95,16,0.817,32,0.975,92,3.113,244,2.634,272,2.548,276,3.037,294,3.63,306,2.921,326,2.226,371,2.68,409,2.022,415,3.5,480,2.144,506,2.753,558,3.889,622,5.347,624,3.127,625,3.775,627,4.162,674,4.595,688,3.699,720,4.444,728,8.415,731,6.208,734,3.775,760,2.59,762,4.292,766,4.444,771,5.621,772,4.853,773,4.626,774,3.251,775,4.162,776,3.448]],["tags/130",[]],["title/131",[480,2.466,731,4.341]],["content/131",[16,1.052,21,3.723,104,1.957,184,6.491,217,4.591,332,3.844,409,2.605,480,4.019,674,3.309,728,5.528,731,7.076,744,4.765,749,5.723,754,6.251,755,7.223,777,5.723,778,6.644,779,5.361,780,6.644,781,7.24,782,6.644]],["tags/131",[]],["title/132",[480,2.068,652,2.365,731,3.641]],["content/132",[0,2.016,1,1.079,16,0.871,25,2.765,26,1.935,47,2.026,51,1.814,72,1.846,164,1.271,177,2.038,184,4.112,214,2.578,218,1.56,261,2.628,275,1.846,332,5.081,356,1.094,368,3.159,392,1.482,448,2.931,450,2.284,455,2.193,466,2.843,470,3.035,480,1.464,521,2.251,581,3.943,674,3.368,684,1.846,714,2.696,724,2.765,731,4.949,744,5.943,754,3.314,756,3.523,776,2.354,782,3.523,783,2.191,784,5.176,785,3.523,786,2.696,787,2.765,788,3.839,789,3.839,790,3.839,791,3.314,792,6.762,793,3.523,794,2.085,795,3.523,796,3.523,797,3.839,798,3.035,799,2.634,800,3.839,801,3.839,802,3.839,803,3.839,804,3.839,805,3.839,806,3.839,807,3.839,808,3.839,809,3.523,810,3.839,811,3.839,812,3.159,813,3.839,814,5.992]],["tags/132",[]],["title/133",[291,4.03,731,4.341]],["content/133",[0,1.603,12,1.124,32,1.153,47,1.829,291,4.146,306,5.249,331,2.686,442,5.257,521,5.244,558,2.798,622,4.466,625,4.466,635,3.456,659,3.846,660,4.294,661,4.079,720,5.257,731,7.255,739,4.925,755,5.078,794,3.612,815,6.103,816,6.651,817,5.078,818,6.651,819,6.651,820,5.742,821,6.103,822,4.671]],["tags/133",[]],["title/134",[327,4.248]],["content/134",[3,2.287,11,3.408,12,1.938,20,3.432,27,4.414,47,1.927,67,4.706,106,3.121,163,2.493,244,3.283,272,3.177,326,2.775,327,3.72,411,5.189,480,2.673,508,5.766,520,5.35,589,4.368,823,5.189,824,6.43,825,5.35,826,5.35]],["tags/134",[]],["title/135",[635,4.157]],["content/135",[0,2.033,3,1.662,11,1.916,12,1.108,16,0.756,27,1.533,47,0.884,62,2.207,70,1.273,82,1.886,164,1.599,175,1.343,178,1.413,213,1.47,222,1.234,295,2.381,296,1.29,297,1.972,299,1.273,301,2.381,302,1.86,327,2.763,343,2.455,348,2.776,363,3.192,364,3.9,367,1.458,371,1.533,409,1.157,415,1.119,416,1.282,434,2.381,480,1.227,509,2.116,510,2.646,521,1.886,551,2.207,614,2.116,616,3.749,617,2.776,619,2.259,621,2.646,630,2.542,681,2.646,684,1.547,714,3.655,716,2.316,721,1.886,757,1.913,772,2.776,774,1.86,775,2.381,776,1.972,783,1.835,822,2.259,826,2.455,827,2.455,828,3.216,829,5.205,830,3.216,831,2.259,832,3.216,833,2.951,834,3.216,835,1.972,836,3.571,837,3.216,838,3.216,839,4.494,840,3.216,841,3.216,842,3.216,843,2.951,844,2.542,845,3.216,846,5.205,847,3.216,848,2.259,849,3.216,850,1.972,851,3.216,852,3.216,853,2.646,854,3.216,855,2.951,856,3.216,857,3.216,858,2.776,859,3.216,860,3.216,861,5.395,862,6.556,863,5.205,864,3.216,865,3.216,866,3.216,867,3.216,868,5.205,869,3.216,870,3.216]],["tags/135",[]],["title/136",[367,3.627]],["content/136",[299,3.581,327,4.801,415,3.147,488,5.637,510,7.441,622,7.304,871,7.148,872,3.777,873,4.237]],["tags/136",[]],["title/137",[367,2.93,871,5.11]],["content/137",[0,1.053,1,0.61,3,1.089,4,0.644,6,0.919,12,1.313,15,2.092,16,0.854,23,0.624,47,1.029,53,0.65,70,0.859,78,0.602,92,0.848,106,0.731,109,0.926,135,1.272,142,0.772,165,1.127,166,0.865,167,1.559,175,2.063,178,4.634,182,1.925,183,1.192,184,1.489,213,2.685,227,1.017,253,0.882,275,1.043,276,0.828,299,0.859,331,0.876,340,1.457,346,1.222,353,0.984,367,2.239,371,2.354,372,2.227,383,3.689,387,2.896,402,1.017,409,2.114,413,1.127,415,0.755,419,2.033,420,1.272,424,1.739,450,1.291,454,1.991,455,0.794,467,0.992,480,3.133,481,5.333,493,3.389,496,1.034,506,1.063,509,3.25,518,1.152,521,1.272,572,1.127,578,3.261,584,2.772,589,1.353,595,5.537,597,1.524,603,1.991,610,1.31,614,3.25,616,1.563,619,2.63,626,1.401,627,1.607,628,1.715,655,1.401,662,1.376,669,1.851,696,1.607,702,3.189,760,1,761,1.873,768,3.233,774,1.255,775,5.37,827,1.657,839,1.873,850,2.296,873,1.017,874,1.873,875,1.563,876,1.873,877,3.081,878,1.785,879,1.607,880,1.873,881,1.873,882,2.17,883,1.873,884,1.607,885,2.17,886,2.17,887,1.607,888,1.192,889,1.785,890,1.785,891,1.991,892,1.991,893,1.991,894,1.094,895,1.563,896,1.873,897,2.17,898,2.17,899,2.17,900,1.873,901,2.17,902,2.17,903,2.17,904,3.744,905,2.17,906,2.17,907,1.715,908,5.392,909,1.991,910,2.17,911,2.17,912,2.17,913,2.17,914,1.715,915,1.353,916,2.17,917,2.17,918,1.428,919,1.353]],["tags/137",[]],["title/138",[108,2.314,367,2.458,920,2.33]],["content/138",[3,1.055,9,2.261,11,3.665,12,1.762,14,1.295,16,0.888,27,1.383,30,1.435,31,1.576,65,1.187,92,2.77,135,1.702,139,2.027,164,0.616,178,1.275,183,1.595,218,1.179,222,1.837,229,2.038,276,1.825,298,1.508,331,1.172,344,3.369,351,2.216,367,2.169,371,1.383,381,1.809,385,1.187,388,2.847,397,1.949,408,1.91,413,2.487,415,1.665,440,2.038,441,2.886,457,2.216,463,1.91,468,1.492,480,1.107,494,3.173,529,3.378,571,1.558,607,2.149,620,2.09,643,1.78,655,1.874,662,5.351,696,2.149,702,1.874,760,1.337,762,4.663,783,2.731,874,4.132,879,5.247,881,2.505,915,1.809,921,3.938,922,8.437,923,2.505,924,1.91,925,3.783,926,2.902,927,1.949,928,2.294,929,2.902,930,2.505,931,2.294,932,2.663,933,2.663,934,2.902,935,2.294,936,2.663,937,2.663,938,1.949,939,5.104,940,2.663,941,2.038,942,2.388,943,2.505,944,2.038,945,2.388,946,1.949,947,2.09,948,2.505,949,2.902,950,2.902,951,3.149,952,2.505,953,2.902,954,3.447]],["tags/138",[]],["title/139",[12,0.789,27,2.226,367,2.117,920,2.007]],["content/139",[0,0.801,2,1.273,3,0.985,9,1.197,11,3.318,12,1.523,15,1.893,16,0.978,20,3.297,21,2.298,27,4.298,48,2.915,65,2.755,94,2.373,129,4.043,164,1.913,178,2.958,244,2.094,296,3.249,298,2.322,302,2.584,331,3.271,367,2.026,371,2.13,401,6.185,409,2.914,413,3.498,418,1.357,450,2.658,463,2.941,467,2.042,480,1.704,537,4.269,662,2.834,743,4.269,776,2.741,831,3.139,835,4.129,920,1.92,925,3.532,935,3.532,938,3.001,955,4.469,956,2.517,957,3.858,958,3.309,959,2.885,960,4.469,961,4.101,962,4.101,963,3.219,964,3.677,965,3.532]],["tags/139",[]],["title/140",[372,3.845,935,5.11]],["content/140",[2,0.775,3,0.6,7,2.884,11,2.148,12,1.151,16,1.415,20,1.332,51,3.576,92,1.064,106,2.295,108,1.936,124,3.113,129,2.264,161,1.757,193,1.618,222,3.486,244,2.125,271,2.757,276,1.038,296,1.091,327,1.444,345,0.962,355,1.911,367,1.233,371,1.297,372,3.471,376,2.014,385,1.856,415,0.947,416,1.084,494,3.538,572,2.357,585,1.911,624,1.513,662,1.725,696,2.014,825,2.077,921,7.134,923,3.917,935,7.181,937,7.5,938,3.918,966,2.349,967,1.867,968,1.96,969,2.721,970,3.186,971,2.721,972,2.151,973,1.757,974,2.721,975,2.496,976,4.537,977,2.721,978,2.721,979,3.917,980,2.721,981,2.721,982,2.721,983,2.721,984,2.721,985,2.721,986,1.643,987,2.721,988,2.721,989,2.721,990,2.721,991,2.721,992,2.496,993,4.537,994,4.537,995,2.721,996,2.721,997,5.835,998,3.733,999,3.464,1000,4.537,1001,4.537,1002,2.721,1003,4.537,1004,2.721,1005,2.721,1006,2.721,1007,4.163,1008,2.721,1009,3.917,1010,3.113,1011,2.496,1012,3.733,1013,4.537,1014,4.537,1015,4.163,1016,4.163]],["tags/140",[]],["title/141",[632,4.157]],["content/141",[11,2.725,12,1.8,18,4.021,27,3.529,72,3.561,82,4.342,129,3.695,299,3.801,383,4.119,391,4.225,402,3.469,413,3.847,450,4.404,583,3.469,632,4.988,835,4.541,941,5.2,956,4.171,1017,6.392,1018,7.404,1019,4.972,1020,6.392]],["tags/141",[]],["title/142",[1021,4.907]],["content/142",[0,1.909,2,2.734,11,2.725,15,3.137,16,1.076,106,2.496,372,4.404,418,2.249,480,2.824,494,3.847,583,3.469,599,5.653,632,5.535,734,4.972,835,5.887,895,5.333,956,4.171,1020,6.392,1022,5.2,1023,6.092]],["tags/142",[]],["title/143",[632,3.359,1024,3.688]],["content/143",[0,0.665,2,3.065,3,1.286,5,1.45,11,2.146,12,0.627,15,1.571,16,1.047,70,2.309,92,1.45,129,1.851,164,1.529,165,1.116,178,1.63,213,1.695,261,1.171,272,1.681,296,2.891,300,2.239,324,1.423,331,1.497,371,1.768,380,2.831,415,1.291,418,3.105,420,2.174,506,2.856,525,2.931,562,2.274,568,2.671,621,3.051,632,4.616,643,2.274,662,2.352,760,1.709,776,4.42,835,3.576,858,3.202,895,2.671,920,3.097,1025,5.831,1026,5.351,1027,4.798,1028,7.207,1029,2.604,1030,3.708,1031,3.202,1032,3.403,1033,3.403,1034,3.403,1035,3.403,1036,3.708,1037,2.394,1038,3.403,1039,3.403,1040,3.403,1041,3.202,1042,3.202,1043,3.708,1044,3.403,1045,2.746,1046,3.202,1047,3.403,1048,2.352,1049,3.708,1050,3.403,1051,3.403,1052,1.869,1053,2.746,1054,2.063,1055,3.708,1056,2.604,1057,2.831,1058,3.708]],["tags/143",[]],["title/144",[632,2.818,1024,3.094,1059,4.682]],["content/144",[2,2.163,3,1.16,8,3.001,11,2.795,12,1.283,16,1.103,20,2.576,28,2.762,77,3.396,89,2.365,164,1.116,175,2.197,264,2.507,326,2.083,330,2.705,344,2.26,345,1.861,346,4.277,371,2.507,380,4.016,402,2.464,418,2.963,439,3.461,467,2.404,506,2.576,632,4.629,895,3.788,986,3.176,1059,4.541,1060,5.26,1061,5.26,1062,4.826,1063,4.158,1064,5.26,1065,9.755,1066,4.541,1067,3.609,1068,5.26,1069,5.26,1070,5.26,1071,4.826,1072,5.26,1073,4.158,1074,4.541,1075,4.826,1076,5.26,1077,5.26,1078,5.26,1079,5.26]],["tags/144",[]],["title/145",[632,2.818,1024,3.094,1031,4.682]],["content/145",[48,2.74,70,2.506,164,1.343,371,3.017,380,7.52,418,3.215,632,5.5,643,6.04,938,4.25,1031,8.503,1032,5.808,1033,5.808,1034,5.808,1042,5.464,1066,5.464,1080,6.329,1081,6.329,1082,5.464,1083,5.483,1084,8.503,1085,7.785,1086,6.329,1087,6.329,1088,6.329]],["tags/145",[]],["title/146",[632,2.818,1024,3.094,1089,4.682]],["content/146",[11,2.725,164,1.571,296,2.97,302,4.282,371,3.529,418,3.235,621,6.092,632,3.847,643,4.541,835,6.533,938,4.972,1083,4.695,1089,9.196,1090,7.404,1091,7.404,1092,7.404,1093,7.404,1094,6.317,1095,7.404]],["tags/146",[]],["title/147",[632,2.818,1024,3.094,1096,4.286]],["content/147",[3,1.897,11,3.166,16,1.533,48,2.719,92,2.455,164,1.332,261,1.982,299,2.487,300,3.792,338,3.229,371,1.944,381,5.361,418,2.98,530,4.217,544,3.982,562,3.851,599,4.795,611,4.132,632,2.119,835,5.275,956,4.845,962,9.001,1083,3.982,1097,4.078,1098,9.809,1099,8.6,1100,4.078,1101,4.078,1102,8.6,1103,4.078,1104,3.792,1105,5.762,1106,4.078,1107,7.425,1108,4.078,1109,4.078,1110,4.078]],["tags/147",[]],["title/148",[632,2.818,1024,3.094,1111,4.976]],["content/148",[11,3.239,164,1.867,371,4.194,418,3.25,632,4.572,1083,5.58,1112,8.799,1113,10.698,1114,8.799,1115,6.516]],["tags/148",[]],["title/149",[632,2.427,1024,2.665,1063,3.692,1116,3.692]],["content/149",[11,2.695,31,3.976,48,3.17,164,1.554,344,3.146,371,3.49,418,3.218,480,2.793,553,5.787,632,3.804,927,4.916,938,6.399,1063,8.374,1117,7.321,1118,5.59,1119,6.718,1120,5.116,1121,7.321,1122,7.321,1123,7.321,1124,7.321]],["tags/149",[]],["title/150",[632,2.818,1024,3.094,1125,5.423]],["content/150",[3,1.452,28,3.458,258,3.576,296,2.641,335,5.204,371,3.138,381,5.537,385,2.694,418,2.698,449,3.421,464,3.225,632,3.421,938,5.964,956,3.709,1022,4.624,1083,4.175,1126,10.051,1127,6.041,1128,6.584,1129,10.051,1130,6.584,1131,6.584,1132,6.584,1133,4.742,1134,8.882,1135,6.584,1136,6.584,1137,6.584,1138,6.041]],["tags/150",[]],["title/151",[632,2.818,1024,3.094,1139,4.976]],["content/151",[2,2.209,164,1.646,371,3.697,380,7.551,418,3.307,632,4.03,643,6.065,895,5.586,1042,6.696,1083,4.918,1084,8.538,1139,9.991,1140,7.755,1141,7.755,1142,7.755]],["tags/151",[]],["title/152",[632,2.818,1024,3.094,1143,4.976]],["content/152",[3,1.209,16,1.136,24,2.79,31,2.976,78,1.52,124,3.76,194,2.17,199,6.961,214,5.251,218,2.228,236,3.849,243,1.928,258,2.976,326,2.17,371,2.612,401,5.97,418,2.769,571,4.198,572,4.063,632,2.848,713,4.332,823,4.058,921,4.509,927,6.676,935,7.206,968,3.947,1009,4.731,1010,3.76,1015,5.029,1016,5.029,1143,9.122,1144,4.731,1145,7.819,1146,5.48,1147,5.48,1148,7.819,1149,5.48,1150,5.48]],["tags/152",[]],["title/153",[632,3.359,643,3.964]],["content/153",[0,0.696,2,1.107,5,1.519,9,2.433,11,1.43,12,0.656,15,3.145,70,1.538,118,2.935,164,0.824,175,4.194,178,1.707,221,2.876,242,1.203,287,2.086,300,2.346,367,1.761,371,1.852,380,5.669,381,3.77,415,1.352,424,2.809,568,2.798,571,3.247,587,3.98,632,2.018,655,4.794,662,2.463,688,2.556,895,4.356,900,3.354,920,1.669,928,3.071,930,5.221,931,4.78,938,2.609,951,2.556,1026,3.565,1029,4.247,1040,3.565,1041,7.84,1066,3.354,1082,5.221,1096,4.78,1104,2.346,1107,3.354,1151,3.885,1152,3.565,1153,3.885,1154,3.565,1155,5.549,1156,5.549,1157,3.885,1158,3.565,1159,5.221,1160,6.813,1161,3.885,1162,3.885,1163,3.885,1164,3.885,1165,3.885,1166,3.885,1167,3.196,1168,3.885,1169,2.666,1170,3.284,1171,3.885,1172,3.885,1173,3.885]],["tags/153",[]],["title/154",[643,4.907]],["content/154",[3,2.002,5,1.771,9,2.921,11,3.341,12,1.149,15,3.846,16,0.989,106,1.527,164,1.443,178,3.589,199,3.459,307,3.109,327,2.405,371,2.16,381,5.659,388,4.046,409,1.63,587,4.476,623,3.882,643,4.172,672,3.109,777,3.581,835,2.779,900,3.912,928,3.581,945,5.597,951,2.982,954,3.263,992,4.157,1041,7.051,1048,4.314,1071,4.157,1082,5.873,1152,4.157,1154,4.157,1155,6.242,1156,6.242,1174,3.728,1175,4.531,1176,4.531,1177,4.531,1178,6.802,1179,4.531,1180,3.912,1181,3.728,1182,4.531]],["tags/154",[]],["title/155",[760,3.686]],["content/155",[3,1.865,16,1.229,47,2.326,153,4.826,182,4.349,327,4.491,367,3.834,372,5.031,734,5.68,760,4.811,826,6.458,1183,7.302,1184,8.458,1185,6.686]],["tags/155",[]],["title/156",[775,5.924]],["content/156",[78,2.735,363,6.048,391,5.627,765,9.049]],["tags/156",[]],["title/157",[881,6.907]],["content/157",[16,1.352,227,4.357,276,3.547,415,3.237,775,8.19,823,6.886,1104,5.616]],["tags/157",[]],["title/158",[761,6.907]],["content/158",[16,1.391,213,4.374,383,5.325,622,6.428,1186,8.784,1187,8.264]],["tags/158",[]],["title/159",[415,2.784]],["content/159",[6,3.365,13,5.228,72,3.82,176,4.172,182,4.085,276,3.03,284,4.128,372,6.549,415,2.765,496,3.787,763,7.667,826,6.065,1188,9.214,1189,6.858,1190,7.944,1191,5.335]],["tags/159",[]],["title/160",[1192,6.907]],["content/160",[0,1.327,3,1.633,244,3.469,291,4.616,367,4.828,372,6.336,392,2.859,542,2.895,585,5.2,722,6.392,826,5.653,831,5.2,877,6.092,1188,6.794,1192,6.392,1193,6.794,1194,7.404,1195,9.599,1196,4.069,1197,6.794,1198,6.392]],["tags/160",[]],["title/161",[879,5.924]],["content/161",[12,1.492,16,1.091,82,3.035,106,1.745,176,4.637,183,2.845,216,2.994,217,2.512,242,1.603,276,3.368,296,2.076,367,4.66,372,6.578,399,3.227,409,1.862,413,2.69,415,2.612,449,2.69,480,2.863,692,3.406,763,5.73,780,4.75,836,3.552,874,4.469,879,3.833,888,2.845,1191,5.929,1192,4.469,1197,8.102,1199,5.176,1200,3.833,1201,4.092,1202,2.88,1203,5.176,1204,4.469,1205,7.505,1206,5.176,1207,4.469,1208,4.75]],["tags/161",[]],["title/162",[12,1.092,328,4.254]],["content/162",[3,1.773,12,1.871,32,1.394,47,2.211,317,5.792,327,4.27,328,6.659,686,3.938,766,6.357,1185,6.357,1209,7.379,1210,7.379,1211,6.943,1212,6.617,1213,6.357,1214,6.943]],["tags/162",[]],["title/163",[4,1.918,12,1.092]],["content/163",[6,3.209,12,1.646,32,1.314,65,3.1,73,3.52,92,2.962,193,4.507,272,3.434,415,3.39,468,3.896,566,5.488,623,4.323,1215,6.952,1216,6.952,1217,6.952,1218,7.576,1219,4.574,1220,6.952,1221,5.087,1222,7.576,1223,7.576]],["tags/163",[]],["title/164",[739,5.924]],["content/164",[]],["tags/164",[]],["title/165",[]],["content/165",[3,1.189,7,2.283,11,1.984,12,1.306,16,1.123,47,1.482,48,2.333,78,1.495,97,4.115,123,4.149,142,2.749,165,1.622,166,2.148,178,3.396,230,2.148,272,2.443,326,2.134,327,5.545,337,2.525,345,1.907,371,2.569,409,1.939,416,3.08,455,2.828,558,2.267,566,4.353,579,2.569,632,5.126,635,2.801,669,3.82,692,3.547,908,7.09,1024,3.076,1063,4.26,1116,7.799,1119,4.946,1224,4.653,1225,4.115,1226,4.26]],["tags/165",[]],["title/166",[1227,8]],["content/166",[3,1.69,12,1.83,16,1.114,59,5.147,142,2.727,213,3.503,294,4.949,306,3.983,331,3.095,345,2.712,441,3.622,464,4.807,584,5.675,659,4.432,717,7.43,720,6.059,1228,5.521,1229,5.852]],["tags/166",[]],["title/167",[1230,8]],["content/167",[]],["tags/167",[]],["title/168",[1231,8]],["content/168",[4,1.863,5,1.595,11,2.818,12,1.569,16,1.113,23,1.805,34,2.938,59,2.739,76,1.692,142,2.234,178,1.792,230,2.503,249,1.944,250,2.586,271,1.927,326,2.487,327,4.566,328,2.684,331,1.647,334,1.565,337,2.942,344,1.753,345,1.443,346,2.297,367,1.849,418,1.239,441,1.927,449,2.119,463,2.684,464,3.075,468,2.097,493,2.799,499,3.742,514,3.224,521,2.391,565,2.799,566,3.537,578,3.868,590,4.309,609,3.224,614,5.039,615,2.799,620,2.938,669,4.591,673,2.586,684,1.961,697,2.327,715,3.02,760,1.879,767,2.269,817,3.114,871,3.224,943,5.422,944,2.864,1225,3.114,1232,3.742,1233,5.167,1234,3.521,1235,2.19,1236,4.078,1237,2.739,1238,3.742,1239,4.65,1240,3.114,1241,4.078,1242,4.078]],["tags/168",[]],["title/169",[1243,8]],["content/169",[0,0.537,4,1.457,7,1.269,11,1.102,12,1.907,16,1.05,20,1.467,22,2.472,23,2.076,32,0.519,48,1.297,76,1.242,77,3.171,78,0.831,135,1.756,142,1.065,150,1.732,164,0.635,165,2.399,230,1.194,249,4.083,261,1.55,271,1.415,276,1.142,296,3.198,299,1.186,302,1.732,326,1.186,330,1.54,334,3.287,337,1.403,338,1.54,345,1.059,353,1.358,363,3.012,398,1.867,409,1.767,416,2.488,418,0.91,440,2.103,449,1.556,539,2.88,552,3.115,558,2.066,565,2.055,574,3.75,578,1.347,579,2.341,590,4.956,615,2.055,619,2.103,669,2.428,673,3.959,694,1.934,697,1.709,712,1.837,721,1.756,767,1.666,783,1.709,836,2.055,888,1.646,965,2.367,1024,2.803,1224,2.586,1225,2.287,1244,4.911,1245,4.911,1246,2.586,1247,2.367,1248,4.507,1249,2.995,1250,2.748,1251,2.995,1252,2.748,1253,2.995,1254,2.287,1255,2.586,1256,4.767,1257,2.995,1258,3.75,1259,2.748,1260,2.586,1261,2.995,1262,2.995,1263,4.24,1264,2.586,1265,4.911]],["tags/169",[]],["title/170",[1266,8]],["content/170",[4,1.86,12,1.656,23,1.802,165,1.886,238,3.563,239,5.355,299,2.482,302,3.625,345,2.218,434,4.641,439,5.653,498,3.785,574,4.786,633,3.729,651,4.125,673,3.975,767,3.487,774,3.625,1202,3.487,1256,4.786,1258,8.049,1259,5.752,1260,5.412,1267,8.59,1268,7.416,1269,6.268,1270,6.268,1271,4.301,1272,6.268,1273,5.412,1274,5.752,1275,3.729]],["tags/170",[]],["title/171",[1276,8]],["content/171",[23,2.834,405,6.048,539,5.782,1277,9.049]],["tags/171",[]],["title/172",[758,5.931,1278,6.464]],["content/172",[415,3.539,558,4.277]],["tags/172",[]],["title/173",[12,1.092,328,4.254]],["content/173",[7,3.407,9,2.155,12,1.359,23,2.311,328,5.292,402,3.768,468,4.135,523,5.792,592,5.1,690,4.368,831,5.648,927,5.4,1185,6.357,1213,6.357,1214,6.943,1219,4.856,1279,6.943,1280,6.943,1281,6.14]],["tags/173",[]],["title/174",[12,1.092,480,2.466]],["content/174",[0,0.684,3,0.842,6,1.617,11,1.405,12,1.241,14,1.703,15,1.617,16,1.309,18,2.073,20,1.869,26,1.924,41,2.178,47,2.019,59,2.563,70,1.511,177,2.026,178,1.677,209,2.341,222,1.465,227,1.788,230,1.521,231,2.379,299,1.511,324,1.465,344,1.64,363,3.658,372,2.27,377,6.545,402,1.788,403,2.914,409,1.373,441,2.818,467,1.744,480,3.641,493,2.619,554,3.502,571,3.202,590,2.619,623,2.178,684,1.835,698,4.416,831,4.189,850,2.341,895,2.749,927,4.005,928,3.017,932,5.473,947,4.296,951,2.512,1052,1.924,1059,6.339,1089,6.339,1096,5.803,1107,3.295,1111,6.737,1280,3.295,1282,2.42,1283,3.816,1284,2.512,1285,3.502,1286,3.502,1287,2.42,1288,3.816,1289,3.816,1290,3.403,1291,5.964,1292,5.964,1293,3.14,1294,5.964]],["tags/174",[]],["title/175",[377,4.099,408,4.254]],["content/175",[2,1.291,3,2.146,9,1.214,11,2.504,12,1.644,20,2.219,47,1.246,106,1.527,144,3.109,177,2.405,218,1.842,230,1.806,306,2.354,324,1.739,355,3.182,377,2.873,391,2.585,392,2.627,408,2.982,412,2.873,413,2.354,417,2.779,418,1.376,450,4.046,464,2.219,494,3.535,496,2.16,537,2.873,571,4.385,572,2.354,624,2.52,658,3.182,875,3.263,876,3.912,888,2.49,889,5.597,924,2.982,933,4.157,944,3.182,947,3.263,961,4.157,1023,7.47,1056,3.182,1057,3.459,1202,2.52,1235,2.433,1247,3.581,1295,4.531,1296,3.728,1297,4.531,1298,6.802,1299,4.531,1300,4.531,1301,4.531,1302,4.531,1303,4.531,1304,4.531,1305,4.157,1306,3.912,1307,4.157,1308,4.531,1309,4.531,1310,4.531]],["tags/175",[]],["title/176",[377,4.099,1311,4.656]],["content/176",[3,1.773,12,1.359,16,1.169,177,4.27,276,3.067,326,3.184,377,6.417,424,3.736,539,4.715,947,7.288,970,5.648,1240,6.14,1311,7.288,1312,8.042,1313,8.042,1314,7.379]],["tags/176",[]],["title/177",[377,4.099,1315,5.581]],["content/177",[11,2.552,12,1.554,16,1.008,20,3.396,47,1.906,106,2.337,229,4.869,275,3.334,377,5.83,388,4.124,392,2.677,441,3.276,449,3.603,537,4.397,889,5.705,915,4.322,928,5.48,1023,5.705,1052,3.494,1202,3.857,1296,5.705,1315,7.938,1316,9.194,1317,6.933,1318,6.362,1319,6.933,1320,6.362,1321,5.986]],["tags/177",[]],["title/178",[286,3.432,377,4.099]],["content/178",[12,1.467,16,1.262,93,5.606,106,2.927,286,4.61,377,5.506,417,5.325,441,4.103,571,4.662,927,5.831,947,6.254,951,5.714,1202,4.83]],["tags/178",[]],["title/179",[1281,6.108]],["content/179",[3,1.8,4,1.728,6,2.466,11,3.004,12,1.726,14,2.598,20,2.851,23,1.673,30,2.878,48,2.52,52,3.629,53,1.744,60,3.025,65,2.382,106,1.962,150,3.367,165,1.752,175,3.409,213,2.66,234,3.463,260,2.906,300,3.515,327,3.091,336,4.657,343,4.445,345,2.06,383,3.239,385,2.382,402,4.415,407,5.342,413,3.025,440,4.089,459,3.515,546,4.089,624,3.239,878,4.79,1306,5.026,1322,5.822,1323,5.342,1324,4.79,1325,4.089]],["tags/179",[]],["title/180",[616,5.762]],["content/180",[12,1.671,47,2.132,70,3.916,165,2.334,209,4.757,345,2.744,434,5.743,445,5.104,459,4.683,493,5.322,616,5.586,617,6.696,618,6.696,628,6.13,833,7.117,1326,7.755,1327,7.755,1328,7.755,1329,5.586,1330,5.447]],["tags/180",[]],["title/181",[11,2.379,344,2.778]],["content/181",[0,1.034,11,2.124,47,1.587,142,2.053,176,3.03,244,2.703,327,3.064,344,4.03,392,2.228,409,2.076,468,4.823,480,2.201,529,2.751,578,2.595,583,4.394,589,3.597,604,4.982,620,4.156,844,4.561,884,4.273,1096,4.561,1296,4.748,1329,4.156,1331,4.406,1332,5.77,1333,4.748,1334,5.77,1335,8.605,1336,5.77,1337,5.77,1338,5.77,1339,5.295,1340,5.77,1341,5.77,1342,5.77,1343,5.77,1344,4.982,1345,5.77,1346,5.77,1347,5.77,1348,5.77,1349,5.77,1350,5.77]],["tags/181",[]],["title/182",[1351,5.762]],["content/182",[2,0.873,3,1.104,8,2.856,11,3.508,12,1.822,14,1.368,16,1.259,21,1.576,23,1.439,28,1.61,31,1.665,51,1.448,65,1.254,72,1.474,106,2.721,108,2.136,167,2.312,176,1.61,183,2.751,196,1.911,217,1.487,222,1.176,230,1.222,264,1.461,267,1.726,272,1.389,275,1.474,276,1.169,296,1.23,299,1.214,326,1.982,327,1.627,336,1.749,344,4.238,367,1.389,377,1.944,381,1.911,391,1.749,402,1.436,408,2.017,412,1.944,413,1.593,415,2.208,419,1.665,424,1.424,438,2.522,440,2.153,449,1.593,459,3.022,467,1.401,480,3.304,558,1.289,571,2.687,572,1.593,579,1.461,620,2.208,684,1.474,722,2.646,783,1.749,872,1.28,888,1.684,938,2.058,944,2.153,951,2.017,954,2.208,986,1.851,1046,2.646,1057,2.34,1074,4.321,1133,2.208,1204,2.646,1247,3.957,1275,1.823,1325,2.153,1329,2.208,1331,5.592,1352,4.119,1353,3.065,1354,3.065,1355,3.065,1356,2.522,1357,2.522,1358,4.119,1359,3.065,1360,1.684,1361,3.065,1362,2.646,1363,2.646,1364,3.065,1365,3.065]],["tags/182",[]],["title/183",[12,0.693,106,1.382,344,1.763,652,1.789,1331,3.131]],["content/183",[1,1.953,11,1.715,12,1.404,16,0.677,106,2.342,119,3.129,182,2.396,235,2.858,249,3.311,251,3.009,299,1.845,332,2.474,334,2.666,344,3.569,361,2.183,367,2.112,408,6.058,409,2.499,418,1.415,420,4.073,430,3.834,471,4.261,480,1.777,496,2.221,562,4.261,652,2.032,844,8.69,850,4.261,944,3.273,1127,4.276,1138,4.276,1331,6.342,1339,4.276,1344,7.948,1366,4.66,1367,6.947,1368,6.947,1369,4.66,1370,4.276,1371,8.306,1372,5.716,1373,4.66,1374,6.947,1375,3.558]],["tags/183",[]],["title/184",[16,0.788,344,2.33,1331,4.14]],["content/184",[11,3.559,12,1.265,16,1.088,47,2.059,106,2.524,251,4.835,344,3.218,385,3.065,408,4.928,409,2.694,415,2.606,455,2.741,620,6.965,844,7.644,872,3.128,1083,4.749,1202,4.166,1212,6.162,1344,6.466,1370,6.872,1376,7.489,1377,7.489]],["tags/184",[]],["title/185",[16,0.679,344,2.007,480,1.781,1329,3.364]],["content/185",[12,1.311,16,1.437,299,3.916,344,4.679,391,4.425,392,2.995,408,5.104,409,2.79,415,2.699,480,3.772,620,5.586,659,4.485,986,4.683,1329,5.586,1331,7.551,1378,7.755]],["tags/185",[]],["title/186",[344,2.778,942,5.319]],["content/186",[1,0.917,3,0.72,8,1.862,11,1.939,12,1.749,16,0.962,32,0.566,47,0.897,51,1.542,52,3.284,70,1.292,78,1.461,92,1.276,106,1.1,177,1.733,217,1.584,242,1.011,248,1.714,258,1.773,331,1.318,344,4.332,367,3.446,377,4.2,408,5.488,409,2.383,412,2.07,424,1.516,428,2.417,441,3.592,444,2.292,449,1.696,455,2.781,464,2.58,468,1.678,475,2.93,480,2.009,571,1.752,611,2.148,760,2.427,763,4.022,831,2.292,877,2.686,879,3.9,894,1.645,920,1.403,927,4.447,940,6.974,942,6.254,944,2.292,951,2.148,954,2.351,973,2.107,1045,2.417,1052,1.645,1074,2.818,1096,7.049,1202,1.816,1204,2.818,1311,2.351,1318,2.995,1362,2.818,1379,4.651,1380,3.264,1381,1.914,1382,2.995,1383,2.818,1384,2.818,1385,8.339,1386,2.58,1387,3.264,1388,2.995,1389,3.264,1390,2.995,1391,3.264]],["tags/186",[]],["title/187",[331,2.61,344,2.778]],["content/187",[11,4.112,12,1.599,16,1.052,30,3.579,48,3.134,91,4.078,301,5.361,331,4.255,344,4.802,388,4.307,441,4.47,463,4.765,468,3.723,944,5.085,945,5.957,1356,5.957,1392,5.361,1393,6.644]],["tags/187",[]],["title/188",[409,2.878]],["content/188",[3,1.941,12,1.487,48,3.809,327,4.672,331,3.553,418,2.673,558,3.701,943,7.597,945,7.24,1394,10.698,1395,8.799]],["tags/188",[]],["title/189",[0,0.837,3,1.03,776,2.864,1379,3.28]],["content/189",[3,2.06,11,2.334,12,1.071,14,1.843,15,2.686,16,1.122,32,1.099,47,1.136,70,2.511,94,2.193,109,2.705,183,2.27,216,2.388,235,2.533,243,1.453,297,2.533,300,2.494,306,2.146,307,4.351,326,2.511,327,2.193,331,2.56,333,3.153,339,2.667,379,3.79,385,1.69,388,2.457,392,2.448,402,1.935,444,4.453,480,1.575,530,2.773,538,2.667,643,2.533,684,4.164,688,2.718,724,2.975,728,7.838,744,2.718,776,5.31,778,3.79,783,2.357,827,3.153,951,2.718,1052,3.196,1104,2.494,1180,3.566,1181,3.398,1187,3.566,1237,2.773,1296,3.398,1379,2.901,1396,2.124,1397,3.79,1398,6.34,1399,8.571,1400,5.818,1401,4.13,1402,4.13,1403,4.13]],["tags/189",[]],["title/190",[776,3.964,1052,3.258]],["content/190",[0,0.661,3,1.796,7,1.562,11,1.357,12,0.623,16,1.482,26,1.858,70,1.46,78,1.61,87,2.104,103,2.227,129,1.84,182,2.985,216,2.132,248,1.937,261,1.164,264,1.758,265,2.299,302,2.132,326,1.46,328,2.427,383,3.23,392,1.424,402,1.728,409,2.089,413,1.916,415,1.283,440,2.59,550,2.104,589,2.299,624,3.23,632,4.232,643,2.261,667,3.183,669,2.87,672,2.53,728,2.815,776,6.718,855,5.327,873,1.728,880,3.183,894,1.858,951,2.427,959,2.381,965,2.915,1019,2.476,1047,3.384,1048,2.338,1051,3.384,1052,4.105,1053,2.73,1054,2.051,1180,3.183,1352,3.034,1399,5.327,1400,5.327,1404,3.687,1405,5.806,1406,5.806,1407,3.687,1408,3.687,1409,3.687,1410,3.687,1411,5.806,1412,3.687,1413,3.687,1414,3.687,1415,2.427,1416,3.687,1417,5.806,1418,5.806,1419,5.806,1420,5.806]],["tags/190",[]],["title/191",[3,1.196,164,1.151,1379,3.808]],["content/191",[3,2.316,6,2.63,9,1.663,12,1.442,15,3.615,16,1.24,164,2.228,165,1.868,175,2.593,227,2.909,261,1.96,271,2.934,327,3.296,330,3.193,401,4.741,402,3.998,409,2.234,467,3.9,776,3.808,861,5.109,959,4.009,1181,5.109,1281,4.741,1282,3.937,1379,4.361,1396,3.193,1421,4.086,1422,4.169,1423,6.209,1424,6.209,1425,6.209,1426,6.209]],["tags/191",[]],["title/192",[947,5.762]],["content/192",[3,2.096,9,1.15,12,1.493,15,1.818,72,2.064,177,3.467,194,1.7,215,2.825,227,2.011,242,2.447,244,2.011,264,4.21,272,1.946,274,1.832,334,1.647,355,3.015,367,2.96,372,2.554,374,2.722,377,5.012,391,2.449,399,2.676,402,3.703,408,4.298,409,2.349,415,1.494,467,1.962,476,2.883,480,3.015,537,2.722,539,2.517,599,3.278,626,4.217,686,2.102,831,3.015,877,3.532,879,3.179,915,4.071,927,2.883,947,7.209,952,5.638,1022,3.015,1202,4.397,1311,4.704,1372,3.532,1382,3.939,1427,5.638,1428,4.293,1429,4.293,1430,2.676,1431,4.293,1432,4.293,1433,4.293,1434,4.293,1435,6.53]],["tags/192",[]],["title/193",[0,0.972,702,3.501,783,3.094]],["content/193",[5,1.458,12,1.887,16,0.851,23,2.079,53,2.167,60,3.759,70,1.477,78,1.034,89,1.677,163,1.327,165,1.122,166,1.486,183,2.05,242,1.155,276,1.423,326,1.477,345,2.072,367,2.655,372,2.218,392,1.44,397,5.504,399,2.325,402,3.389,405,3.593,408,5.862,409,1.342,413,1.938,416,2.335,424,1.733,439,3.855,467,3.306,480,3.398,550,2.128,607,2.761,702,4.67,734,2.504,760,1.718,783,5.843,815,3.422,831,2.619,879,2.761,915,4.509,1085,5.718,1202,2.075,1436,3.22,1437,5.375,1438,4.82,1439,3.729,1440,8.907,1441,8.907,1442,3.729,1443,3.729]],["tags/193",[]],["title/194",[12,1.092,250,4.099]],["content/194",[]],["tags/194",[]],["title/195",[23,1.559,181,3.274,579,2.585]],["content/195",[5,2.769,12,1.576,23,2.996,31,3.847,32,1.228,48,3.067,78,1.965,85,4.277,86,3.376,103,4.277,104,1.914,142,2.52,150,4.096,163,3.317,181,6.295,288,3.681,412,4.492,455,2.592,579,4.445,592,4.492,623,4.042,684,3.406,1444,5.828]],["tags/195",[]],["title/196",[3,1.03,9,1.251,12,0.789,194,1.849]],["content/196",[2,1.463,3,2.26,6,3.161,9,1.376,11,1.89,12,1.807,15,2.176,16,1.084,20,2.515,78,2.07,104,1.388,150,2.97,176,2.697,194,2.034,258,2.789,271,2.427,286,2.727,307,3.524,324,1.971,367,2.328,413,2.669,450,3.055,468,2.641,475,2.857,480,3.353,529,2.448,661,3.15,871,4.06,920,2.207,927,3.449,958,3.803,1054,4.151,1219,4.506,1237,3.449,1445,3.449,1446,7.462,1447,3.524,1448,5.136,1449,3.449,1450,5.899,1451,3.921,1452,4.226,1453,4.713,1454,4.06,1455,5.136,1456,5.136,1457,5.136]],["tags/196",[]],["title/197",[164,1.151,218,2.204,684,2.608]],["content/197",[1,1.214,3,0.953,5,2.566,8,3.745,9,1.158,11,2.921,12,1.498,16,1.458,21,2.222,23,1.242,30,4.712,32,0.749,41,2.466,51,2.042,65,1.768,78,1.199,120,2.534,164,0.917,165,1.3,167,1.364,175,2.741,178,1.899,181,4.792,194,1.711,249,4.225,261,2.072,294,2.79,296,1.733,298,2.245,324,1.658,331,1.745,334,3.401,345,1.529,353,1.959,356,1.231,394,3.555,448,3.299,455,1.581,468,2.222,523,3.112,578,2.952,684,2.078,717,2.965,767,4.415,792,6.023,831,4.61,835,2.65,920,1.857,1198,3.731,1458,6.563,1459,4.321,1460,4.727,1461,3.416,1462,3.731,1463,6.563]],["tags/197",[]],["title/198",[9,1.099,194,1.624,475,2.281,578,1.844,767,2.281]],["content/198",[3,1.597,9,1.94,12,1.223,23,2.719,32,1.255,78,2.624,176,3.802,178,3.182,194,2.867,238,3.003,324,2.779,336,4.131,392,2.796,424,3.364,475,5.861,529,3.451,767,5.262,776,4.44,1260,6.251,1464,6.644,1465,6.644,1466,5.957,1467,4.372]],["tags/198",[]],["title/199",[2,1.545,767,3.017,1460,3.906]],["content/199",[2,2.04,5,2.8,16,1.041,78,2.605,142,2.547,149,4.324,176,3.761,248,3.761,309,5.892,361,3.355,418,2.175,475,3.983,677,5.029,684,3.444,767,6.189,918,4.712,1460,6.765,1465,6.571,1466,5.892,1467,4.324,1468,5.66,1469,7.161,1470,7.161,1471,7.161]],["tags/199",[]],["title/200",[302,3.136,578,2.439,999,4.14]],["content/200",[3,1.513,6,2.906,8,5.855,9,1.838,16,1.327,47,1.886,92,2.682,142,2.44,261,2.165,302,3.967,385,2.807,578,5.268,583,3.214,920,2.948,999,5.238,1472,8.443,1473,6.86,1474,6.86,1475,6.86,1476,6.86,1477,6.86,1478,6.86,1479,6.86]],["tags/200",[]],["title/201",[9,1.453,30,2.681,194,2.147]],["content/201",[6,3.001,11,3.432,16,1.029,30,5.154,109,3.022,250,4.492,349,4.975,356,2.018,385,3.816,387,4.153,443,5.187,544,4.492,567,4.153,673,5.913,684,3.406,850,5.719,1234,6.115,1285,6.5,1480,7.083,1481,5.599,1482,4.492,1483,3.893,1484,3.94]],["tags/201",[]],["title/202",[30,3.196,165,1.945]],["content/202",[11,3.432,12,1.576,30,4.61,73,3.291,78,2.587,165,3.334,337,3.319,356,2.018,385,2.899,387,4.153,418,2.152,443,5.187,452,4.344,546,4.975,581,4.661,582,5.102,850,5.719,1275,4.214,1314,6.5,1485,6.115,1486,7.083]],["tags/202",[]],["title/203",[23,1.559,694,3.501,1487,4.14]],["content/203",[12,1.429,16,1.229,289,4.442,324,3.246,684,4.068,694,6.742,767,5.809,1460,7.521,1468,6.686,1487,6.458,1488,7.761,1489,8.458]],["tags/203",[]],["title/204",[12,0.789,23,1.342,552,2.962,694,3.015]],["content/204",[12,1.905,15,2.817,16,0.967,22,2.634,23,1.912,32,1.752,261,2.099,296,2.668,324,2.552,342,4.671,480,3.411,529,3.17,552,6.407,623,3.795,676,5.742,686,3.257,694,4.294,706,3.531,777,5.257,783,3.795,894,3.352,915,4.146,1447,4.564,1468,5.257,1490,6.651,1491,6.651,1492,3.956]],["tags/204",[]],["title/205",[578,2.439,673,3.439,1233,4.462]],["content/205",[4,2.301,5,3.032,12,1.311,23,2.229,32,1.345,238,3.217,249,3.697,296,3.111,324,2.976,334,2.976,418,2.356,467,3.544,578,3.488,635,4.03,669,4.889,673,4.918,714,5.447,848,5.447,1233,6.381,1234,6.696,1493,5.322]],["tags/205",[]],["title/206",[9,0.979,23,1.051,51,1.728,194,1.448,448,2.791,920,1.571]],["content/206",[12,1.251,23,2.759,51,4.536,73,3.44,92,2.895,129,3.695,178,3.254,247,5.081,263,5.266,301,5.482,324,2.841,332,3.931,345,2.619,353,3.356,448,7.329,552,4.695,835,4.541,1057,5.653,1202,4.119,1305,6.794,1494,4.972]],["tags/206",[]],["title/207",[959,5.165]],["content/207",[32,1.568,357,6.351,358,6.513,786,6.351,1256,6.904,1495,9.043,1496,7.148,1497,9.043,1498,9.043,1499,9.043]],["tags/207",[]],["title/208",[1500,5.762]],["content/208",[32,1.613,357,6.532,358,6.699,786,6.532,1496,7.351,1501,9.3,1502,9.3,1503,9.3]],["tags/208",[]],["title/209",[1504,5.762]],["content/209",[0,0.755,3,1.722,4,2.317,12,1.801,15,3.704,16,0.935,23,1.849,32,1.516,47,1.157,51,3.04,76,2.669,87,2.402,91,2.371,106,1.419,178,1.85,263,2.081,299,1.667,332,3.416,357,2.957,358,3.032,371,2.007,416,1.678,480,2.454,544,2.67,571,3.455,651,4.234,652,2.806,663,3.464,670,3.117,717,2.889,731,2.827,760,1.94,784,2.957,786,2.957,793,5.904,919,2.624,1021,2.582,1256,3.214,1496,3.328,1505,4.21,1506,4.21,1507,4.21,1508,4.21,1509,5.555,1510,4.21,1511,4.21,1512,4.21,1513,6.434,1514,5.904,1515,2.67,1516,4.21,1517,3.214,1518,5.904,1519,3.117,1520,3.464,1521,6.434,1522,3.863,1523,6.434,1524,6.434]],["tags/209",[]],["title/210",[11,2.379,12,1.092]],["content/210",[5,3.44,6,3.728,9,2.358,12,1.948,104,2.378,142,3.13,165,2.648,194,3.484,345,3.113,416,3.507]],["tags/210",[]],["title/211",[203,5.49]],["content/211",[12,1.507,32,1.547,47,2.452,60,4.635,82,5.23,114,4.452,165,2.684,204,6.81,205,6.604,206,6.12,207,6.424]],["tags/211",[]],["title/212",[669,3.955]],["content/212",[3,1.524,12,1.398,18,2.513,20,2.266,23,1.33,32,1.702,53,1.386,57,3.518,58,2.574,59,3.107,60,4.767,82,2.713,92,3.234,104,1.867,114,2.309,153,2.64,165,1.392,212,3.045,243,1.628,244,2.168,276,1.765,328,3.045,334,1.776,345,2.445,390,2.64,402,3.237,415,1.61,542,2.702,571,2.484,624,2.574,633,2.752,669,2.287,681,3.807,776,2.838,827,3.533,875,3.333,973,2.987,1037,2.987,1185,3.657,1213,3.657,1293,3.807,1351,3.333,1525,4.627,1526,5.276,1527,4.627,1528,3.995,1529,4.627,1530,4.627,1531,3.533,1532,4.627,1533,4.246,1534,3.995,1535,3.995,1536,3.533,1537,3.533,1538,3.533,1539,4.246,1540,2.838,1541,4.627,1542,4.246,1543,4.246]],["tags/212",[]],["title/213",[27,3.814]],["content/213",[3,2.071,12,1.88,23,2.058,27,3.413,32,1.242,60,5.446,78,1.986,106,2.414,153,4.086,165,2.155,209,4.392,276,2.731,326,2.836,345,2.533,469,4.624,558,3.012,588,6.765,986,4.324,1438,5.892,1540,4.392,1544,7.161,1545,5.66]],["tags/213",[]],["title/214",[12,0.916,60,2.818,165,1.632]],["content/214",[60,4.974,344,4.114,374,6.07,395,7.088,633,5.694,1546,7.567]],["tags/214",[]],["title/215",[60,4.157]],["content/215",[12,1.549,32,1.59,60,4.765,165,2.759,445,6.034,822,6.44,875,6.605,1104,5.537,1540,5.624]],["tags/215",[]],["title/216",[60,3.359,757,3.845]],["content/216",[3,1.229,12,1.857,32,1.372,60,4.781,109,2.378,123,2.992,165,3.402,227,2.611,230,2.221,245,2.896,301,4.127,306,2.896,336,3.18,390,3.18,391,3.18,472,3.599,521,4.641,633,5.474,659,3.223,660,3.599,661,3.418,957,4.812,964,4.586,1392,4.127,1421,3.668,1528,4.812,1538,4.256,1540,3.418,1547,4.406,1548,5.573,1549,5.573,1550,4.812,1551,5.573,1552,3.14,1553,4.586,1554,5.573,1555,5.573,1556,5.114]],["tags/216",[]],["title/217",[3,1.196,588,3.906,590,3.721]],["content/217",[3,1.887,6,1.455,7,1.455,12,1.681,16,0.996,23,1.578,28,1.804,32,1.188,47,0.945,60,4.741,72,1.652,78,1.522,91,1.935,92,2.146,94,1.824,103,2.074,106,1.158,129,1.715,165,1.652,166,1.369,203,2.357,217,2.664,230,1.369,238,1.425,244,1.61,271,1.623,276,1.31,306,1.785,326,1.36,330,1.767,340,2.307,345,1.215,362,1.845,392,1.327,397,2.307,398,2.142,415,2.724,417,2.107,463,2.261,464,1.683,475,1.911,480,2.094,514,2.716,529,1.638,542,1.343,558,1.445,565,2.357,588,3.953,592,2.179,607,2.544,615,2.357,624,1.911,661,3.366,686,1.683,776,2.107,826,2.623,871,2.716,920,1.476,946,2.307,958,2.544,1019,2.307,1104,2.074,1228,2.474,1237,2.307,1281,2.623,1392,2.544,1415,2.261,1450,4.339,1451,2.623,1452,2.827,1453,3.152,1454,4.339,1466,2.827,1484,1.911,1540,3.366,1557,3.435,1558,2.827,1559,2.474,1560,3.435,1561,2.966,1562,5.489,1563,6.854,1564,3.435,1565,3.435,1566,2.827,1567,3.152,1568,3.152,1569,3.435,1570,3.435,1571,3.435,1572,3.435]],["tags/217",[]],["title/218",[12,0.916,208,3.274,209,3.326]],["content/218",[9,2.423,12,1.528,23,2.599,32,1.568,153,5.16,208,5.46,209,5.546,210,6.904,211,6.513,212,5.951]],["tags/218",[]],["title/219",[211,5.762]],["content/219",[]],["tags/219",[]],["title/220",[1329,4.656,1573,5.319]],["content/220",[12,1.132,16,0.645,21,2.282,23,1.276,32,1.558,70,2.652,106,2.258,108,1.894,130,3.117,164,0.942,167,3.044,178,4.238,208,2.68,216,2.567,226,2.767,227,2.079,252,3.48,269,2.533,284,2.306,285,2.383,305,3.286,314,1.415,326,1.758,363,2.722,381,2.767,385,1.816,415,1.545,424,2.062,445,2.921,506,2.174,509,4.408,521,2.603,553,3.508,565,3.046,571,2.383,578,1.996,595,3.389,616,5.81,628,3.508,757,2.64,774,2.567,776,2.722,822,3.117,875,3.197,876,3.832,927,2.98,1029,3.117,1067,3.046,1282,2.815,1307,4.073,1329,3.197,1330,3.117,1388,4.073,1421,2.921,1573,5.511,1574,3.508,1575,5.294,1576,3.389,1577,4.438,1578,4.438,1579,4.438,1580,4.438,1581,4.438,1582,4.438,1583,4.073]],["tags/220",[]],["title/221",[122,3.738,167,2.04]],["content/221",[5,2.499,18,3.471,21,4.476,22,2.531,32,1.509,70,2.531,104,1.727,106,2.154,108,3.714,122,5.724,208,5.256,218,2.598,289,4.571,465,4.603,521,3.747,779,6.445,907,5.052,1012,5.259,1021,3.92,1067,4.385,1396,3.286,1574,5.052,1584,6.391,1585,6.391,1586,6.391,1587,7.987,1588,4.603,1589,5.259,1590,6.391,1591,5.518,1592,6.391]],["tags/221",[]],["title/222",[167,2.04,1593,5.581]],["content/222",[12,0.993,20,2.877,32,1.019,51,2.776,89,2.642,93,3.793,106,1.98,167,1.854,178,2.581,179,4.959,212,3.866,213,4.93,226,3.662,231,3.662,234,3.494,328,3.866,419,3.19,506,4.022,558,2.471,578,2.642,581,3.866,624,3.268,629,5.39,768,7.09,951,3.866,967,4.031,1104,3.547,1594,5.874,1595,5.874,1596,5.071,1597,5.39,1598,5.874,1599,5.874,1600,5.874,1601,8.212,1602,5.39,1603,4.231,1604,5.071,1605,5.874,1606,5.39,1607,5.874]],["tags/222",[]],["title/223",[396,3.964,1608,5.319]],["content/223",[32,1.087,60,3.257,65,2.565,102,3.577,115,2.435,133,2.008,146,6.033,163,2.23,227,2.937,230,3.906,232,4.301,326,2.482,344,2.694,396,3.844,509,4.125,585,4.402,688,4.125,774,3.625,951,4.125,973,5.546,1067,4.301,1229,4.786,1436,5.412,1536,4.786,1540,3.844,1602,5.752,1603,4.515,1608,5.158,1609,5.752,1610,6.268,1611,6.79,1612,5.412,1613,4.786,1614,3.365,1615,5.752,1616,5.752,1617,6.268]],["tags/223",[]],["title/224",[372,3.845,455,2.365]],["content/224",[5,2.592,12,1.62,18,3.601,23,1.906,31,2.378,51,2.069,70,1.734,89,1.969,104,1.792,108,1.868,133,2.124,170,3.278,208,4.003,212,4.363,218,1.78,223,3.242,230,2.642,272,3.005,276,2.529,289,4.202,326,1.734,338,3.409,345,2.345,372,3.944,402,2.052,427,3.154,428,4.909,429,3.461,439,2.882,455,2.426,459,2.644,496,2.087,550,2.499,558,1.842,563,2.087,566,2.467,571,2.351,609,3.461,703,4.018,715,3.242,783,2.499,941,3.075,957,5.724,1324,3.603,1472,3.603,1526,3.343,1552,3.735,1587,6.084,1618,6.63,1619,4.379,1620,4.379,1621,3.482,1622,2.73,1623,3.242,1624,3.343,1625,4.379,1626,4.018,1627,4.379,1628,3.781,1629,4.379]],["tags/224",[]],["title/225",[212,5.265]],["content/225",[4,2.334,5,2.161,12,1.329,32,0.958,63,3.337,76,2.292,78,1.533,81,3.445,167,1.744,208,3.337,209,4.825,211,3.981,212,6.027,230,3.135,238,3.263,300,3.337,345,1.955,361,2.589,385,2.261,433,4.771,439,3.637,463,3.637,506,2.707,542,2.161,774,3.196,941,3.881,965,4.368,970,3.881,986,3.337,1094,3.637,1240,4.22,1284,3.637,1392,4.092,1415,3.637,1540,3.389,1545,4.368,1583,5.071,1630,3.637,1631,4.547,1632,4.368,1633,3.445,1634,5.526,1635,5.526,1636,5.526,1637,5.526,1638,5.526,1639,5.526,1640,3.981,1641,5.071]],["tags/225",[]],["title/226",[10,3.258,213,2.954]],["content/226",[16,1.064,23,2.104,26,3.69,30,3.619,32,1.652,53,2.193,58,4.073,81,4.564,213,3.346,214,4.916,215,4.818,216,4.234,217,3.553,218,2.976,219,5.59,220,5.59,221,5.421,222,2.81,223,5.421,224,5.421,225,7.056,226,4.564,227,3.43,228,5.59,229,5.142]],["tags/226",[]],["title/227",[23,1.858,672,4.436]],["content/227",[2,1.231,6,1.83,11,2.416,12,1.611,16,0.628,19,3.416,23,2.547,30,2.136,32,1.376,53,1.294,75,2.609,81,2.694,106,1.457,164,0.917,165,2.388,179,2.609,180,7.956,181,6.059,218,2.668,224,3.2,242,1.338,244,2.024,296,2.633,299,1.711,337,2.024,378,3.731,392,1.669,402,3.718,445,2.844,459,3.963,488,2.694,626,4.238,693,3.2,713,3.416,773,3.555,784,3.035,794,2.347,915,4.091,999,3.299,1029,4.61,1133,3.112,1596,3.731,1642,2.844,1643,4.321,1644,5.011,1645,6.023,1646,3.965,1647,3.965,1648,3.555,1649,3.965,1650,4.321,1651,3.965,1652,4.321,1653,4.321,1654,3.112]],["tags/227",[]],["title/228",[693,4.015,1645,4.976,1655,4.682]],["content/228",[4,3.048,12,1.162,14,2.05,23,1.32,32,1.192,53,1.376,63,2.774,81,2.864,89,2.066,92,2.688,115,1.785,128,3.402,165,2.068,172,2.588,180,3.402,181,2.774,213,3.141,218,1.867,275,2.21,276,1.752,296,1.843,297,2.818,306,2.387,385,1.88,388,2.733,399,2.864,402,2.152,413,2.387,431,3.967,450,2.733,459,4.151,467,2.1,523,3.309,558,1.933,583,2.152,677,3.227,692,3.023,693,7.884,734,3.085,915,2.864,1067,3.153,1201,3.632,1228,3.309,1229,5.248,1324,3.78,1612,5.935,1646,4.216,1655,7.893,1656,4.216,1657,6.874,1658,4.594,1659,4.594,1660,4.594,1661,3.153,1662,3.78,1663,4.594,1664,4.594]],["tags/228",[]],["title/229",[12,1.092,946,4.341]],["content/229",[4,2.036,6,3.868,12,1.925,16,0.997,18,3.726,53,2.055,57,3.492,78,2.532,104,1.854,163,2.44,164,1.456,165,2.064,166,2.734,361,3.214,385,2.807,402,3.214,405,4.207,522,6.295,702,4.429,946,6.891,1085,5.423,1293,5.645,1437,6.295,1438,5.645,1665,5.423]],["tags/229",[]],["title/230",[12,1.092,946,4.341]],["content/230",[4,2.363,6,2.381,7,2.381,12,1.794,15,2.381,23,2.288,27,2.68,28,2.952,32,1.381,47,1.546,70,2.226,93,3.63,166,2.24,230,2.24,274,2.398,314,1.792,324,2.157,336,3.208,337,2.634,345,1.989,362,3.018,409,2.022,418,1.708,455,2.057,480,2.144,577,3.448,580,3.053,669,2.779,694,3.63,701,2.508,715,4.162,767,4.429,835,3.448,946,6.208,1022,3.948,1085,4.444,1666,5.158,1667,5.158,1668,7.306,1669,5.158,1670,5.621,1671,5.158,1672,5.621]],["tags/230",[]],["title/231",[12,0.916,946,3.641,1673,4.976]],["content/231",[3,1.516,4,1.363,6,1.946,7,1.946,12,1.736,15,1.946,16,0.999,23,2.627,27,2.19,28,2.413,32,1.192,47,1.263,70,1.819,93,2.966,165,2.068,166,1.831,173,3.023,181,2.774,230,1.831,274,1.96,299,1.819,314,1.465,324,1.763,337,2.152,345,1.625,362,2.467,389,5.09,405,4.216,409,1.653,413,2.387,418,1.396,480,1.752,550,2.622,577,2.818,578,2.066,580,2.495,652,2.004,659,2.657,669,2.271,684,2.21,694,2.966,767,3.824,777,3.632,835,2.818,946,4.616,1052,2.316,1083,2.913,1085,3.632,1120,2.467,1540,2.818,1630,3.023,1666,4.216,1667,4.216,1668,6.308,1669,4.216,1671,4.216,1673,4.216,1674,6.874,1675,4.594,1676,4.216,1677,3.153,1678,3.309]],["tags/231",[]],["title/232",[4,1.609,396,3.326,1045,4.015]],["content/232",[5,3.223,48,3.569,227,3.863,385,3.374,396,5.056,397,5.536,402,3.863,488,5.14,498,4.978,584,6.105,693,6.105,1144,7.118,1452,6.784,1655,7.118,1662,6.784,1679,7.565,1680,6.295]],["tags/232",[]],["title/239",[12,1.092,230,2.576]],["content/239",[12,1.549,16,1.594,32,1.59,235,5.624,236,6.44,237,6.79,238,3.804,239,5.716]],["tags/239",[]],["title/240",[12,0.789,27,2.226,230,1.861,345,1.652]],["content/240",[3,1.298,12,1.86,14,2.626,16,1.195,23,2.087,29,2.702,32,1.259,47,1.031,53,1.762,71,2.265,86,1.788,89,2.646,103,2.265,142,1.334,170,1.854,175,1.567,178,2.586,179,2.265,183,2.061,208,2.265,209,2.3,212,3.872,213,1.714,217,1.82,230,3.277,236,2.634,238,3.411,246,2.422,284,1.949,285,2.014,296,1.505,314,1.876,330,3.734,338,3.734,345,2.569,409,1.349,415,1.305,420,2.199,455,1.373,456,3.086,480,1.431,488,2.338,496,1.788,558,1.578,572,1.949,590,4.038,609,2.965,610,2.265,614,2.468,616,4.238,625,2.519,628,2.965,659,2.169,706,1.991,734,2.519,894,1.89,986,2.265,1029,4.133,1264,3.238,1356,3.086,1421,2.468,1540,2.3,1573,3.086,1649,3.442,1681,3.751,1682,3.442,1683,3.442,1684,3.442,1685,3.442,1686,3.442,1687,3.442,1688,3.086,1689,3.751]],["tags/240",[]],["title/769",[12,0.916,165,1.632,230,2.161]],["content/769",[3,1.743,6,1.818,12,1.606,16,0.624,20,2.102,47,1.18,57,2.185,60,2.231,70,1.7,89,1.931,106,2.201,115,1.668,121,2.946,142,1.527,153,2.449,165,3.305,167,1.355,175,3.302,178,1.886,179,2.592,213,1.962,217,2.083,230,3.15,231,2.676,232,2.946,233,3.015,234,2.554,235,2.633,238,1.781,272,1.946,326,2.586,330,3.358,333,3.278,338,2.207,345,2.31,371,2.046,372,2.554,383,2.388,392,2.522,409,2.349,423,3.393,455,1.571,496,2.046,571,2.305,572,3.393,595,3.278,654,3.179,659,2.482,729,3.532,836,2.946,873,2.011,1201,3.393,1207,3.706,1263,3.706,1264,3.706,1286,3.939,1684,3.939,1685,3.939,1690,6.53,1691,3.278,1692,3.179,1693,4.293,1694,4.293,1695,4.293]],["tags/769",[]],["title/233",[396,3.964,398,4.03]],["content/233",[9,1.506,12,1.794,22,2.226,23,1.616,65,2.3,70,2.226,78,2.208,133,1.801,165,2.396,167,1.774,183,3.089,194,2.226,243,1.978,258,3.053,276,3.037,338,2.891,344,4.322,392,2.171,396,6.51,398,3.504,409,2.022,453,4.162,515,3.668,558,2.365,571,5.399,589,3.504,623,4.543,880,4.853,1221,5.347,1696,5.621,1697,5.621,1698,4.626,1699,4.444,1700,5.158]],["tags/233",[]],["title/234",[165,1.945,571,3.471]],["content/234",[3,1.615,11,3.899,12,1.61,16,1.064,22,2.899,23,2.104,26,3.69,27,3.49,89,3.293,165,2.203,249,4.542,334,4.065,346,4.124,411,5.421,418,2.895,426,6.321,441,3.46,986,4.421,1019,4.916,1701,5.142]],["tags/234",[]],["title/235",[376,5.924]],["content/235",[3,1.816,11,1.691,16,1.197,21,2.363,31,2.495,41,2.622,49,3.227,70,1.819,75,2.774,89,2.066,113,3.691,144,3.153,165,2.478,166,1.831,167,2.6,175,4.447,213,2.1,218,1.867,275,3.306,314,1.465,344,3.539,345,2.432,376,6.769,396,2.818,398,2.864,402,2.152,412,2.913,439,3.023,464,2.25,467,2.1,571,5.255,572,3.572,589,2.864,610,2.774,655,5.318,888,2.525,1029,3.227,1221,4.616,1225,3.508,1678,3.309,1699,3.632,1702,3.632,1703,4.216,1704,5.656,1705,4.594,1706,6.308,1707,4.594,1708,3.967]],["tags/235",[]],["title/236",[28,2.848,331,2.19,398,3.38]],["content/236",[3,1.724,4,1.626,12,1.847,23,1.575,78,1.52,106,1.847,120,3.213,165,1.649,166,2.184,175,2.289,176,2.878,245,2.848,262,2.504,331,2.213,344,2.355,376,5.79,378,4.731,392,2.116,396,3.361,398,3.416,415,2.721,418,1.665,520,4.184,550,3.127,571,4.198,572,2.848,578,2.465,589,3.416,655,3.538,663,4.509,664,4.731,698,4.058,1221,3.68,1293,4.509,1321,4.731,1323,7.175,1522,7.175,1699,6.181,1709,4.731,1710,5.029,1711,9.116,1712,5.48,1713,2.684]],["tags/236",[]],["title/237",[344,2.33,652,2.365,1221,3.641]],["content/237",[0,1.082,1,1.697,5,2.36,12,1.624,16,0.877,23,1.735,32,1.047,70,2.39,104,1.631,165,1.817,262,2.759,326,2.39,344,3.597,398,3.763,409,2.172,412,3.828,418,2.542,420,3.54,441,2.853,459,3.645,496,2.878,521,4.908,530,4.054,544,3.828,562,3.702,571,3.241,572,3.137,652,2.633,684,2.903,707,3.898,1221,4.054,1321,5.212,1714,5.212,1715,6.037,1716,4.967,1717,6.037,1718,6.037,1719,6.037,1720,6.037,1721,6.037,1722,6.037]],["tags/237",[]],["title/238",[396,3.964,398,4.03]],["content/238",[0,0.974,4,2.693,7,2.302,11,2.861,12,1.896,16,1.13,22,3.078,23,1.562,47,1.494,123,2.918,142,1.933,165,1.635,182,2.795,230,3.617,244,2.546,249,3.705,296,2.18,325,3.446,334,2.983,336,3.101,337,3.642,361,2.546,395,4.024,396,4.767,398,3.388,449,2.824,571,2.918,578,3.496,580,2.952,635,2.824,669,4.486,698,4.024,706,2.885,1239,4.024,1678,5.599,1699,4.296,1723,5.434]],["tags/238",[]],["title/241",[230,1.861,325,2.962,336,2.665,337,2.188]],["content/241",[0,0.829,5,2.702,12,1.55,21,2.379,32,1.198,44,3.533,47,1.272,74,2.934,76,1.919,92,1.809,108,1.974,109,1.974,142,1.646,153,3.943,208,2.794,230,4.47,238,2.866,239,2.884,296,1.856,314,2.203,325,4.382,330,3.553,332,2.457,336,2.64,337,3.875,385,2.828,402,2.168,488,2.884,625,3.107,660,2.987,661,2.838,776,5.072,1202,2.574,1229,3.533,1263,3.995,1438,5.686,1537,3.533,1540,4.238,1553,3.807,1630,3.045,1724,4.246,1725,4.246,1726,4.246,1727,3.995,1728,4.246,1729,6.91,1730,8.271,1731,4.627,1732,4.246,1733,4.627,1734,4.627]],["tags/241",[]],["title/242",[325,3.439,580,2.945,963,3.906]],["content/242",[3,2.191,4,2.095,9,1.276,11,2.598,12,1.193,14,2.125,15,2.017,16,0.692,20,2.332,28,2.501,32,0.826,47,1.309,71,2.875,92,1.862,114,2.377,123,2.557,135,2.792,142,1.694,217,2.311,230,1.898,260,2.377,296,2.832,297,2.92,326,1.886,327,3.748,328,3.134,331,1.923,337,2.231,344,2.046,353,2.159,376,3.526,441,2.25,445,3.134,450,2.833,468,2.449,496,2.27,542,1.862,558,3.914,567,2.792,578,2.141,581,3.134,588,3.43,591,3.918,594,3.918,620,3.43,635,2.474,669,3.49,670,3.526,677,3.344,706,3.748,717,3.267,963,3.43,1120,2.557,1213,3.764,1219,2.875,1306,4.111,1710,4.369,1735,4.762,1736,3.43,1737,2.586,1738,3.134]],["tags/242",[]],["title/243",[230,2.161,324,2.081,337,2.541]],["content/243",[4,2.498,8,1.648,9,0.774,12,1.194,14,1.289,16,1.027,22,1.888,23,1.37,27,2.273,32,0.501,57,1.471,72,1.389,78,0.801,86,1.377,89,1.299,106,0.974,123,1.551,134,4.276,170,1.428,182,1.486,183,1.588,208,1.744,230,3.117,238,1.978,261,2.231,262,1.32,271,1.365,276,2.322,296,1.159,314,0.921,324,3.418,331,1.167,333,2.206,337,3.664,339,1.865,344,2.049,345,1.022,352,1.865,353,1.31,361,1.353,363,1.772,364,1.719,385,1.182,391,1.648,403,2.206,418,1.849,424,1.342,440,2.029,449,2.478,481,1.982,562,2.924,572,3.164,574,4.649,578,3.178,580,4.573,597,3.349,615,1.982,619,4.276,624,1.607,626,1.865,659,1.671,668,2.029,669,2.357,670,2.139,671,2.494,684,1.389,687,3.923,694,3.079,706,1.534,710,2.139,715,6.234,767,3.387,850,1.772,888,1.588,920,1.242,1054,2.652,1390,2.651,1452,2.377,1460,4.385,1468,4.813,1487,2.206,1540,1.772,1630,1.901,1692,2.139,1737,1.569,1739,2.494,1740,1.94,1741,2.651,1742,2.889,1743,2.284,1744,1.94,1745,1.719,1746,2.651]],["tags/243",[]],["title/244",[230,2.161,337,2.541,1239,4.015]],["content/244",[0,0.999,4,3.139,5,2.179,12,0.942,72,2.68,78,2.552,86,2.657,142,1.983,165,1.677,230,2.221,234,3.315,276,2.126,289,2.927,296,3.175,336,3.18,337,2.611,385,2.281,392,2.152,441,2.634,455,2.04,467,2.547,578,4.505,611,3.668,669,5.433,672,3.825,684,2.68,715,5.86,767,3.1,1202,3.1,1228,4.014,1239,7.834,1240,4.256,1430,3.475,1612,4.812,1747,3.534]],["tags/244",[]],["title/245",[182,2.109,230,1.635,337,1.921,669,2.028,1239,3.037]],["content/245",[0,0.86,4,2.958,10,2.417,12,0.811,26,2.417,27,3.383,78,1.33,86,2.286,90,3.552,103,2.896,177,2.547,182,2.467,230,1.912,242,2.197,262,3.244,274,2.047,276,1.83,281,2.702,296,1.924,314,1.529,336,2.737,337,2.247,349,3.369,362,3.811,363,2.942,364,4.222,396,2.942,428,3.552,455,1.755,498,2.896,520,3.662,550,2.737,578,4.482,580,2.605,586,7.683,669,4.616,672,3.291,695,4.401,715,5.256,823,3.552,836,3.291,1120,2.575,1239,6.256,1240,3.662,1462,4.141,1748,3.947,1749,2.371,1750,4.797,1751,4.797,1752,5.112,1753,3.662]],["tags/245",[]],["title/246",[4,1.217,165,1.234,230,2.513,337,1.921]],["content/246",[4,2.848,7,3.137,12,1.251,23,2.128,27,3.529,47,2.036,78,2.054,114,3.695,230,3.826,244,3.469,296,3.851,305,5.482,325,6.087,337,3.469,402,3.469,550,4.225,570,4.695,574,5.653,706,3.931,1019,4.972,1213,5.853,1754,7.404]],["tags/246",[]],["title/247",[153,3.094,230,2.161,337,2.541]],["content/247",[0,1.358,11,2.788,12,1.28,22,3,32,1.314,44,5.784,134,5.321,153,4.323,165,2.28,181,4.574,230,3.883,238,3.143,337,4.564,342,5.321,345,2.68,361,3.549,580,4.114,610,4.574,712,4.646,713,5.988,773,6.234,1755,6.952]],["tags/247",[]],["title/248",[12,1.092,48,2.798]],["content/248",[1,2.013,5,2.8,10,3.609,11,3.457,12,1.587,16,1.041,23,2.058,48,4.537,120,4.199,181,4.324,230,3.743,244,3.355,296,2.873,324,2.748,326,2.836,336,4.086,337,4.4,412,4.541,583,3.355,667,6.182,706,3.802,766,5.66,1430,4.464]],["tags/248",[]],["title/249",[1,1.524,3,1.196,164,1.151]],["content/249",[1,2.406,3,1.591,5,1.918,12,1.595,15,2.078,31,3.919,47,1.349,48,3.706,51,2.318,53,1.469,78,1.36,86,4.08,92,1.918,129,2.448,162,3.167,164,1.041,165,1.476,167,1.548,230,1.955,235,3.008,238,2.035,243,1.726,258,2.664,261,1.548,296,2.894,314,1.563,324,1.882,325,3.11,337,2.298,344,2.108,345,1.735,349,3.445,356,1.397,363,3.008,364,2.918,402,3.38,409,1.764,418,1.49,428,3.632,558,2.063,570,3.11,581,3.228,582,3.533,677,3.445,706,3.831,817,3.745,1219,2.961,1279,4.234,1430,3.057,1608,4.036,1647,4.5,1662,4.036,1679,4.5,1756,4.234,1757,4.5,1758,3.745,1759,4.5]],["tags/249",[]],["title/250",[12,0.693,23,1.179,165,1.234,175,1.713,799,2.814]],["content/250",[1,2.129,12,1.28,23,2.177,31,5.291,47,2.083,48,4.218,175,3.164,177,4.022,243,2.665,261,2.391,356,2.158,361,3.549,409,2.725,418,2.301,568,7.017,581,4.985,582,5.457,721,4.442,799,5.198,1760,6.234,1761,5.784]],["tags/250",[]],["title/251",[1,1.524,3,1.196,166,2.161]],["content/251",[1,2.105,3,2.362,11,2.756,12,1.265,23,2.152,31,4.067,78,2.077,106,2.524,122,4.331,166,3.854,178,3.291,230,3.854,232,5.139,249,3.57,334,2.874,336,4.273,337,4.53,418,2.275,440,5.26,583,3.509]],["tags/251",[]],["title/252",[193,3.845,654,4.786]],["content/252",[53,2.566,193,5.097,330,4.406,506,4.197,529,4.085,572,4.452,654,7.794,658,6.018,660,5.533,661,5.255,1596,7.398,1762,7.863,1763,7.051]],["tags/252",[]],["title/253",[193,3.226,272,2.458,506,2.656]],["content/253",[]],["tags/253",[]],["title/254",[32,0.81,684,2.246,1764,2.48,1765,4.67]],["content/254",[0,1.796,47,1.532,164,1.679,262,2.547,330,2.866,345,1.972,369,6.256,370,7.262,409,2.005,449,2.896,506,2.73,537,3.534,558,3.871,572,2.896,654,7.834,668,5.558,706,2.959,775,6.814,1449,3.743,1574,4.406,1752,4.014,1762,5.114,1766,7.914,1767,9.202,1768,7.262,1769,3.418,1770,7.914,1771,7.914,1772,5.573,1773,5.573,1774,5.573,1775,5.573,1776,5.573,1777,5.114]],["tags/254",[]],["title/255",[12,1.092,1778,4.656]],["content/255",[5,3.307,12,1.765,32,1.467,73,3.929,113,4.541,238,3.508,248,4.442,318,5.94,566,4.764,624,4.705,659,4.891,660,5.461,661,5.187,1737,4.594]],["tags/255",[]],["title/256",[73,3.003,659,3.738]],["content/256",[0,1.458,3,1.794,6,1.906,9,1.205,12,0.76,13,2.961,15,1.906,16,1.182,30,4.472,32,0.78,73,2.09,85,2.717,142,1.601,194,1.782,235,2.76,249,3.226,261,2.136,271,2.126,324,2.597,327,4.318,334,2.597,345,1.592,392,1.737,399,2.805,418,2.056,424,2.09,471,5.548,523,3.241,567,2.638,624,2.503,659,2.602,660,2.905,661,2.76,767,3.764,888,2.473,1235,2.416,1255,3.885,1460,3.241,1468,5.349,1779,3.435,1780,7.811,1781,3.885,1782,10.191,1783,4.499,1784,4.499,1785,4.499,1786,7.444,1787,3.557,1788,6.767,1789,3.885]],["tags/256",[]],["title/257",[238,2.681,248,3.395]],["content/257",[]],["tags/257",[]],["title/258",[387,2.405,1037,2.648,1790,4.101,1791,3.242,1792,4.101]],["content/258",[16,1.198,87,4.705,165,2.481,178,3.623,249,4.899,327,4.377,334,3.944,345,2.917,441,3.896,467,3.768,595,6.295,626,5.323,690,4.478,1791,8.124]],["tags/258",[]],["title/259",[11,0.764,12,0.351,178,0.913,339,1.341,529,0.99,536,1.367,553,1.642,1526,1.586,1793,2.077,1794,2.077,1795,2.077,1796,1.642,1797,2.077]],["content/259",[11,3.073,16,1.213,30,4.128,123,4.483,178,4.552,356,2.378,536,5.495,578,4.659,701,3.726,1740,5.607,1798,6.6,1799,6.375,1800,7.662,1801,8.35]],["tags/259",[]],["title/260",[87,1.573,178,1.212,312,2.18,651,1.815,1493,1.892,1802,2.962,1803,2.53,1804,2.381]],["content/260",[11,3.154,30,4.236,78,2.377,312,6.773,356,2.441,520,6.542,697,4.89,1803,7.863,1805,7.398,1806,8.661,1807,8.569,1808,7.863,1809,6.345]],["tags/260",[]],["title/261",[30,2.028,194,1.624,1483,2.254,1484,2.281,1810,4.101]],["content/261",[30,5.041,196,5.076,261,2.57,356,2.319,418,2.473,712,4.993,1483,4.474,1484,4.529,1799,7.786,1811,8.142,1812,8.142,1813,8.142,1814,7.029,1815,7.029,1816,10.198]],["tags/261",[]],["title/262",[2,1.041,11,1.346,12,0.618,16,0.531,439,2.406,530,2.455]],["content/262",[0,1.459,2,2.905,16,1.183,275,3.916,345,2.88,411,6.029,632,4.231,783,4.646,858,8.804,920,3.499,1035,7.471,1037,6.584,1038,7.471,1039,7.471,1422,5.467]],["tags/262",[]],["title/263",[30,2.309,401,3.566,611,3.073,1817,3.843]],["content/263",[30,5.081,181,4.978,242,2.552,249,3.93,275,3.965,334,3.164,346,4.644,387,4.834,401,7.848,418,2.504,495,6.784,673,5.228,712,5.056,1799,6.295,1818,8.244]],["tags/263",[]],["title/264",[12,0.618,261,1.154,331,1.476,536,2.406,578,1.644,1819,3.656]],["content/264",[12,1.506,16,0.764,32,0.912,213,3.47,230,2.096,246,4.902,260,3.789,261,1.66,297,3.226,324,2.018,331,3.598,337,2.464,409,1.892,416,2.096,418,1.598,464,2.576,536,4.996,542,2.056,578,4.653,669,5.329,692,3.461,767,2.926,878,6.247,920,2.26,973,3.396,1037,3.396,1233,6.247,1239,6.597,1820,5.26,1821,5.26,1822,5.26,1823,5.26,1824,5.26,1825,5.26,1826,5.26,1827,5.26,1828,4.826,1829,5.26,1830,4.826,1831,5.098]],["tags/264",[]],["title/265",[65,2.219,165,1.632,218,2.204]],["content/265",[5,2.8,12,1.21,22,2.836,23,2.058,30,4.643,65,2.93,104,2.538,165,3.476,194,2.836,218,2.911,296,2.873,356,2.04,404,4.141,443,3.983,459,4.324,552,4.541,583,3.355,584,5.302,694,6.064,706,3.802,850,4.392,1487,5.468]],["tags/265",[]],["title/266",[23,1.342,165,1.405,694,3.015,1487,3.566]],["content/266",[16,1.029,23,2.036,142,2.52,177,4.951,194,3.693,296,2.841,331,2.86,338,3.642,404,5.393,496,3.376,576,4.975,580,3.847,693,5.245,694,7.432,706,3.761,707,4.573,767,5.187,1104,4.277,1487,5.408,1738,4.661,1832,6.5,1833,3.211]],["tags/266",[]],["title/267",[22,1.849,165,1.405,552,2.962,694,3.015]],["content/267",[12,1.411,22,3.306,32,1.448,78,2.316,177,4.433,194,3.306,337,3.912,338,4.294,404,4.829,418,2.536,552,5.295,576,5.864,577,5.121,578,4.659,579,3.98]],["tags/267",[]],["title/268",[30,2.681,104,1.465,165,1.632]],["content/268",[1,2.44,12,1.793,30,4.292,89,3.905,165,3.193,194,3.438,336,4.954,345,3.072,356,3.023,690,4.716]],["tags/268",[]],["title/269",[12,0.916,89,2.439,165,1.632]],["content/269",[3,1.545,12,1.565,23,2.014,32,1.215,89,3.151,135,4.109,142,2.493,165,3.12,167,2.923,230,4.133,238,2.907,317,5.047,330,4.761,334,2.689,337,3.283,338,3.603,392,2.706,444,4.922,455,2.564,496,3.34,572,3.641,573,5.766,574,5.35,575,6.43]],["tags/269",[]],["title/270",[12,0.789,23,1.342,165,1.405,552,2.962]],["content/270",[9,2.103,12,1.326,22,3.946,32,1.361,142,2.792,177,4.167,194,3.946,250,4.977,337,3.677,404,4.539,418,2.384,552,6.319,576,5.512,577,4.814,578,4.481,579,3.741,1834,7.849]],["tags/270",[]],["title/271",[345,1.652,578,2.1,579,2.226,580,2.536]],["content/271",[4,2.748,5,3.62,12,1.565,14,3.127,23,2.014,73,3.255,78,1.944,92,2.74,196,4.368,226,4.368,345,3.276,418,2.129,459,4.231,570,4.444,578,4.164,579,4.414,580,3.806,581,4.611,582,5.047,583,3.283,584,5.189,585,4.922,586,5.766,587,4.611,1835,7.007]],["tags/271",[]],["title/272",[12,1.092,165,1.945]],["content/272",[4,2.983,12,1.898,70,3.517,78,1.826,165,2.673,175,3.71,176,3.458,226,4.104,231,4.104,344,3.817,345,2.329,398,4.104,412,4.175,464,3.225,539,3.861,721,5.208,760,3.033,894,3.318,924,4.333,1547,5.204,1678,6.397,1691,5.027,1699,5.204,1836,6.584,1837,6.584]],["tags/272",[]],["title/273",[12,1.092,1678,4.656]],["content/273",[12,1.159,28,3.603,144,4.707,194,2.717,213,3.135,249,4.352,260,3.424,296,2.752,327,3.642,331,3.686,334,2.633,371,4.352,383,3.816,392,2.649,418,2.773,450,4.081,578,3.085,624,3.816,698,5.08,706,3.642,878,5.645,973,4.429,1352,5.645,1430,4.277,1678,7.391,1838,5.645,1839,6.86]],["tags/273",[]],["title/274",[16,0.788,175,2.265,894,2.733]],["content/274",[4,2.468,12,1.405,16,0.869,47,1.645,74,3.793,89,2.69,165,3.11,175,4.696,176,3.141,178,4.541,216,3.459,249,4.557,334,2.295,345,2.116,383,3.327,409,2.152,449,3.108,468,3.076,481,6.561,567,3.507,599,4.567,707,5.37,1084,5.164,1210,5.489,1840,6.574,1841,5.489,1842,5.981,1843,5.981]],["tags/274",[]],["title/275",[3,1.425,588,4.656]],["content/275",[3,1.915,12,1.467,16,1.262,89,3.905,203,5.958,338,4.465,424,4.034,455,3.177,480,3.312,588,6.254,589,5.413,590,5.958,593,7.967]],["tags/275",[]],["title/276",[11,2.379,12,1.092]],["content/276",[11,3.586,12,1.82,16,1.101,23,2.177,31,4.114,48,3.28,78,2.101,85,4.574,181,4.574,242,2.345,249,5.418,334,3.739,361,3.549,412,4.804,529,3.611,662,4.804,668,5.321]],["tags/276",[]],["title/277",[4,1.918,669,3.196]],["content/277",[0,1.298,3,2.324,4,2.807,28,3.802,166,2.886,258,3.932,331,4.255,339,4.675,455,2.65,467,3.309,496,4.509,578,4.254,580,3.932,583,3.392,669,5.523,670,5.361,671,6.251,672,4.968]],["tags/277",[]],["title/278",[123,2.911,635,2.818,669,2.681]],["content/278",[4,1.728,12,1.592,23,1.673,51,2.751,73,2.705,82,3.414,114,2.906,123,5.483,206,3.995,222,2.234,244,2.728,262,3.729,353,2.639,392,2.248,409,2.094,415,2.026,480,2.221,546,4.089,578,3.67,579,2.775,619,4.089,635,3.025,651,5.371,669,5.049,675,4.089,676,5.026,823,4.311,848,4.089,873,2.728,1144,5.026,1540,3.571,1651,5.342,1844,4.311,1845,5.822,1846,5.822,1847,5.822,1848,5.342,1849,5.342,1850,5.342]],["tags/278",[]],["title/279",[12,1.092,165,1.945]],["content/279",[0,1.079,5,1.51,7,1.636,16,0.561,23,2.401,32,0.67,47,1.062,58,2.148,72,1.857,78,1.071,86,1.841,114,1.927,120,3.53,123,2.073,130,2.712,165,1.811,166,2.399,171,1.986,183,3.308,213,3.38,238,3.465,262,1.765,272,1.751,276,1.473,314,1.231,344,1.66,353,2.729,364,2.297,383,3.348,392,3.225,398,2.407,409,2.165,412,2.449,415,2.095,432,2.204,441,1.825,467,1.765,480,1.473,493,4.13,513,3.543,525,3.052,529,1.841,542,1.51,558,2.532,566,2.175,572,4.34,578,2.707,590,2.65,610,2.332,611,2.541,619,2.712,624,4.115,635,2.007,669,2.976,673,2.449,674,1.765,678,3.543,679,3.177,682,3.543,688,2.541,787,2.781,883,3.334,920,1.66,1037,2.493,1052,1.946,1217,5.523,1538,2.948,1550,3.334,1686,3.543,1708,3.334,1741,3.543,1848,3.543,1851,3.862,1852,3.543,1853,3.862,1854,3.862,1855,3.862]],["tags/279",[]],["title/280",[123,2.507,409,1.68,635,2.427,669,2.309]],["content/280",[0,0.847,3,1.042,4,2.084,12,1.866,47,1.3,51,2.234,75,2.854,78,1.311,89,2.126,92,1.848,93,4.534,123,3.77,165,2.113,175,2.933,213,2.16,217,2.294,230,1.884,238,1.961,325,2.998,330,2.431,331,1.909,336,2.697,337,2.215,345,1.672,352,3.052,367,2.143,383,2.63,391,2.697,455,3.065,463,3.111,464,2.315,508,3.89,521,2.772,558,1.988,614,4.621,624,5.157,669,3.471,684,2.273,685,4.338,686,2.315,690,2.567,717,4.818,776,4.306,1052,2.382,1330,3.32,1545,3.737,1678,3.405,1849,6.443,1850,4.338,1856,4.727,1857,4.727,1858,3.111,1859,4.338,1860,4.727]],["tags/280",[]],["title/281",[6,2.297,12,0.916,165,1.632]],["content/281",[6,3.209,9,2.03,11,3.963,12,1.646,24,3.856,26,3.818,27,3.611,48,3.28,52,4.723,65,3.1,89,3.407,164,1.608,166,3.019,194,3,296,3.039,326,3,552,4.804,566,4.267,706,4.022,963,5.457,1861,7.576]],["tags/281",[]],["title/282",[11,1.996,552,3.439,836,3.721]],["content/282",[0,1.891,3,1.152,4,0.959,6,1.369,9,0.866,11,2.421,12,1.579,15,2.787,16,0.47,21,1.662,27,1.54,30,1.598,31,1.755,32,0.906,47,0.889,51,1.527,103,1.951,142,1.15,175,1.35,178,1.42,194,1.28,213,3.006,249,2.491,260,2.608,264,1.54,276,1.233,297,1.982,327,1.716,331,2.11,334,2.005,356,0.921,363,1.982,364,1.922,383,1.798,405,1.982,409,1.163,418,0.982,448,2.467,450,1.922,471,1.982,480,2.882,500,2.965,550,1.844,577,3.205,578,2.959,579,1.54,614,2.127,663,2.659,664,2.79,665,2.79,666,4.3,668,2.27,684,2.513,690,1.755,698,3.869,710,2.393,783,1.844,824,2.965,836,6.411,839,4.511,843,2.965,891,2.965,892,2.965,893,2.965,894,1.629,1256,2.467,1514,2.965,1518,2.965,1552,1.82,1642,2.127,1678,3.764,1745,1.922,1862,3.232,1863,3.232,1864,3.232,1865,5.225,1866,5.225,1867,3.232,1868,3.232,1869,5.225,1870,6.036,1871,5.225,1872,4.795,1873,1.82,1874,2.467,1875,3.99,1876,3.232]],["tags/282",[]],["title/283",[12,0.789,164,0.991,345,1.652,836,3.205]],["content/283",[1,1.608,3,1.261,5,2.236,12,1.805,31,3.107,47,1.573,48,4.625,92,2.236,164,1.214,244,2.68,260,2.855,261,2.544,262,2.614,296,2.294,326,2.265,344,2.458,345,2.024,349,4.017,356,1.629,362,3.071,368,4.706,391,3.264,393,5.249,418,2.448,427,4.12,538,3.693,666,4.706,706,3.037,708,5.249,721,3.354,836,6.954,848,4.017,894,2.883,1430,3.566,1626,5.249,1756,4.938,1870,5.249,1872,5.249,1877,5.249]],["tags/283",[]],["title/284",[23,1.342,175,1.951,799,3.205,920,2.007]],["content/284",[1,2.377,12,1.429,23,2.431,31,4.594,48,3.662,166,3.371,175,3.533,356,2.409,361,3.963,581,5.566,582,6.092,721,4.959,799,5.804,836,5.804,1761,6.458]],["tags/284",[]],["title/285",[57,3.29,58,3.596]],["content/285",[9,1.712,16,1.265,32,1.509,57,4.431,58,5.506,59,4.292,60,3.321,61,4.88,62,4.385,63,3.859,64,4.732,65,2.615,170,3.159,207,4.603,284,3.321,285,3.431,420,3.747,506,4.263,542,2.499,784,4.489,1052,3.221,1120,3.431,1392,4.732,1396,3.286,1481,5.052,1540,3.92,1630,4.206,1631,5.259,1749,3.159,1878,6.391,1879,5.864,1880,5.518]],["tags/285",[]],["title/286",[20,3.166,58,3.596]],["content/286",[0,1.134,7,2.681,12,1.069,16,1.257,57,5.013,58,3.521,70,2.506,75,3.822,76,2.625,108,2.7,170,3.129,214,4.25,238,2.625,239,3.945,385,2.59,469,4.086,506,4.824,566,3.565,661,3.882,1052,3.19,1271,4.343,1284,4.165,1451,4.832,1538,4.832,1630,4.165,1665,5.003,1878,4.086,1881,6.329,1882,6.402,1883,5.808,1884,5.808,1885,6.329,1886,5.808,1887,4.165,1888,5.808]],["tags/286",[]],["title/287",[1889,7.341]],["content/287",[0,1.3,16,1.054,28,2.595,32,0.857,57,4.376,70,3.995,76,2.05,106,2.446,108,2.108,123,2.653,166,1.969,374,3.134,424,2.296,445,3.252,450,4.316,506,4.639,534,4.534,633,5.635,1207,4.266,1237,3.318,1415,6.234,1481,3.906,1538,3.773,1540,3.031,1553,4.066,1568,4.534,1611,3.906,1630,5.657,1631,5.97,1701,3.471,1740,4.872,1786,4.066,1878,4.684,1879,6.658,1889,8.692,1890,4.942,1891,4.534,1892,3.559,1893,8.597,1894,4.942]],["tags/287",[]],["title/288",[1290,4.565]],["content/288",[14,2.172,16,1.043,32,0.844,44,3.717,57,2.478,63,2.939,70,1.928,74,4.55,230,1.94,264,2.32,272,2.207,340,3.269,445,5.608,494,2.529,506,2.384,542,1.903,558,2.048,633,4.268,660,3.143,681,5.904,732,4.203,850,2.986,884,3.605,999,3.717,1201,3.848,1284,3.204,1290,5.367,1392,3.605,1430,3.035,1536,3.717,1540,2.986,1550,4.203,1628,4.203,1630,3.204,1725,4.467,1726,4.467,1740,3.269,1895,9.405,1896,8.522,1897,4.868,1898,4.868,1899,7.176,1900,4.868,1901,4.868,1902,8.63,1903,4.467,1904,4.868,1905,4.868,1906,4.868,1907,4.868,1908,3.506,1909,4.868,1910,4.868,1911,4.868]],["tags/288",[]],["title/289",[113,3.471,1887,4.254]],["content/289",[0,1.733,57,3.812,70,2.966,74,4.749,113,5.192,445,6.364,572,3.891,1611,5.92,1630,4.928,1656,6.872,1737,4.067,1887,6.364,1902,6.872,1912,9.67,1913,7.489,1914,7.489,1915,7.489,1916,9.67,1917,7.489]],["tags/289",[]],["title/290",[1226,4.286,1908,3.906,1918,4.682]],["content/290",[0,1.548,16,0.724,17,4.34,32,1.265,57,3.714,70,1.972,108,3.113,170,2.462,218,3.864,230,1.984,238,3.026,252,2.587,402,4.045,424,2.313,452,3.054,468,2.561,506,2.439,660,5.575,822,6.065,1094,3.277,1226,3.936,1237,3.344,1415,3.277,1484,2.77,1539,4.569,1630,3.277,1632,6.826,1677,3.417,1692,3.687,1728,4.569,1878,3.215,1908,6.848,1918,4.299,1919,4.979,1920,5.006,1921,8.635,1922,7.455,1923,4.979,1924,4.979,1925,4.569,1926,4.979,1927,4.979,1928,4.979]],["tags/290",[]],["title/291",[]],["content/291",[14,4.225,16,0.854,32,1.019,49,4.126,57,4.82,58,3.268,72,2.825,166,2.341,272,2.663,300,3.547,329,4.231,409,2.113,450,3.494,506,4.022,661,3.603,755,4.485,873,2.752,875,4.231,1201,4.643,1329,4.231,1421,3.866,1481,4.643,1493,4.031,1630,3.866,1743,4.643,1752,5.915,1878,3.793,1918,5.071,1929,5.874,1930,3.866,1931,5.874,1932,5.39,1933,5.874,1934,5.874,1935,8.212,1936,8.212,1937,5.874,1938,5.071,1939,5.874,1940,5.874,1941,5.071]],["tags/291",[]],["title/292",[58,3.017,272,2.458,1878,3.501]],["content/292",[16,1.333,58,5.101,106,3.091,506,4.491,633,5.455,687,7.545,873,4.296,1052,4.621,1878,5.921]],["tags/292",[]],["title/293",[23,1.559,238,2.249,239,3.38]],["content/293",[0,1.175,12,1.108,16,0.467,17,3.9,20,3.211,23,1.884,26,1.621,32,1.137,53,0.963,57,3.337,58,2.895,60,1.671,63,1.942,70,2.061,81,2.005,108,2.221,164,1.104,167,1.643,207,3.749,217,2.526,218,3.063,230,1.282,238,3.674,239,5.159,244,1.507,249,4.444,252,1.671,253,1.307,272,2.359,286,2.763,296,2.088,330,1.654,369,2.542,383,1.789,385,1.316,453,2.381,475,1.789,494,1.671,498,1.942,506,4.053,542,1.257,558,1.353,633,3.9,684,1.547,686,1.575,749,2.542,767,1.789,791,2.776,822,2.259,963,2.316,1012,2.646,1017,4.494,1067,2.207,1118,2.455,1237,2.159,1271,2.207,1281,2.455,1284,3.425,1287,2.039,1392,2.381,1427,4.494,1430,2.005,1481,2.542,1536,3.974,1540,3.192,1542,2.951,1547,2.542,1630,3.425,1631,2.646,1632,2.542,1665,2.542,1692,2.381,1704,2.646,1724,4.776,1736,2.316,1752,2.316,1880,2.776,1908,2.316,1922,2.776,1942,3.216,1943,3.216,1944,4.776,1945,3.216,1946,3.216,1947,3.216]],["tags/293",[]],["title/294",[66,3.845,67,4.341]],["content/294",[32,1.486,67,5.754,68,6.773,69,6.773,70,3.393,71,6.356,72,5.062,73,4.89,74,5.434,75,5.174,76,3.554]],["tags/294",[]],["title/295",[57,3.29,1536,4.935]],["content/295",[]],["tags/295",[]],["title/296",[57,3.29,58,3.596]],["content/296",[9,2.209,32,1.43,57,5.232,58,5.717,59,5.536,60,4.284,61,6.295,62,5.657,63,4.978,64,6.105,65,3.374,172,4.644,258,4.478,330,4.24,529,3.93]],["tags/296",[]],["title/297",[57,3.29,1882,4.786]],["content/297",[32,1.412,53,3.054,71,4.916,72,3.916,73,5.173,76,4.23,78,2.258,92,3.183,345,2.88,459,4.916,1566,6.699,1763,6.699,1882,6.029,1948,7.029]],["tags/297",[]],["title/298",[661,3.964,1949,6.464]],["content/298",[12,0.793,16,0.682,21,2.413,32,1.795,47,1.29,57,2.389,66,2.792,71,2.834,72,2.257,78,1.302,108,2.98,156,3.089,218,3.755,230,1.87,238,1.947,289,2.465,337,2.199,385,1.921,459,2.834,475,2.611,506,2.299,537,2.976,570,2.976,651,3.089,652,2.047,658,3.296,660,6.684,661,5.666,669,2.32,767,2.611,894,2.365,1271,3.221,1386,3.71,1396,2.413,1451,3.583,1484,2.611,1561,4.052,1566,3.862,1624,3.583,1632,3.71,1702,3.71,1740,3.152,1781,4.052,1903,4.307,1908,3.38,1920,4.792,1948,6.03,1950,4.052,1951,4.307,1952,4.307,1953,4.307,1954,4.693,1955,4.693,1956,4.693,1957,4.693,1958,4.693,1959,4.052,1960,4.693]],["tags/298",[]],["title/299",[1886,5.931,1887,4.254]],["content/299",[16,1.262,47,2.387,57,5.402,218,3.529,276,3.312,597,6.098,1558,7.144,1781,7.496,1882,6.429,1961,8.682,1962,8.682,1963,7.967]],["tags/299",[]],["title/300",[1964,7.341]],["content/300",[7,3.172,26,3.774,32,1.299,92,2.928,178,3.291,222,2.874,247,7.349,314,3.414,496,3.57,566,4.219,567,4.391,651,4.928,757,4.455,924,4.928,1271,5.139,1287,4.749,1964,8.873,1965,7.489,1966,6.872,1967,7.489]],["tags/300",[]],["title/301",[686,3.166,1968,4.935]],["content/301",[23,2.37,67,5.536,73,4.775,230,3.286,236,5.79,253,4.178,336,4.705,337,3.863,455,3.017,686,4.038,1311,7.403,1968,7.848,1969,8.244]],["tags/301",[]],["title/302",[12,1.352]],["content/302",[12,1.762,23,2.036,57,3.606,86,3.376,92,2.769,104,1.914,167,3.497,274,3.022,299,2.805,336,4.042,424,3.291,529,3.376,686,3.469,707,4.573,749,5.599,821,6.5,822,4.975,939,5.102,967,4.861,1537,5.408,1688,5.828,1755,6.5,1968,5.408,1970,5.828,1971,6.115]],["tags/302",[]],["title/303",[967,4.436,1736,4.656]],["content/303",[3,1.983,12,0.903,23,2.825,32,1.805,51,2.526,53,1.601,70,2.117,91,3.011,104,2.43,133,2.88,142,1.902,167,1.687,177,2.838,238,3.186,239,3.332,253,2.173,268,3.122,331,2.159,415,1.86,459,3.228,496,2.548,529,3.662,551,3.668,658,3.754,748,4.905,767,5.468,967,6.17,973,3.452,1083,3.39,1271,3.668,1430,3.332,1736,5.533,1959,4.615,1968,5.865,1972,4.905,1973,5.346,1974,5.346]],["tags/303",[]],["title/304",[654,5.924]],["content/304",[459,5.78,506,4.688,654,7.088,1017,8.264,1290,5.462,1537,7.309]],["tags/304",[]],["title/305",[24,2.76,32,0.94,77,3.501]],["content/305",[24,5.307,32,1.228,47,1.948,73,3.291,77,6.731,78,1.965,79,4.573,80,5.599,81,4.416,82,4.153,83,3.502,84,5.599,85,4.277,86,3.376,87,4.042,88,5.599,89,4.194,90,5.245,91,3.99,92,2.769,93,4.573,94,3.761,253,2.879,392,2.735,1908,5.102]],["tags/305",[]],["title/306",[20,2.656,77,3.501,87,3.094]],["content/306",[16,1.448,20,3.844,24,3.995,77,6.434,87,4.479,218,3.19,255,4.814,363,4.814,395,5.812,415,2.731,462,6.458,566,4.421,619,5.512,635,5.178,686,4.88,1975,7.202,1976,7.849]],["tags/306",[]],["title/307",[118,2.631,272,2.458,784,3.808]],["content/307",[16,1.229,24,4.305,77,5.461,118,4.104,248,4.442,623,4.826,686,4.142,725,6.458,726,6.959,784,7.334,820,7.302,1185,6.686,1977,8.458,1978,7.761]],["tags/307",[]],["title/308",[272,2.93,1226,5.11]],["content/308",[432,5.627,468,5.887,1333,8.114]],["tags/308",[]],["title/309",[1979,7.341]],["content/309",[2,1.639,7,1.545,9,0.977,16,0.836,20,1.786,24,1.856,28,1.915,50,2.626,53,2.424,77,2.354,92,1.426,94,1.936,104,0.985,108,2.455,129,1.82,142,1.297,170,1.803,177,1.936,182,2.959,183,2.004,217,5.075,238,1.513,242,1.129,249,1.738,271,1.723,276,1.391,299,1.444,340,3.864,371,1.738,392,1.408,432,3.284,452,2.236,467,1.666,488,2.273,498,2.202,537,2.312,539,2.138,562,2.236,606,3.346,652,1.59,677,2.561,686,1.786,720,2.882,725,2.784,726,3,743,2.312,755,4.394,760,1.68,794,3.125,850,2.236,918,2.4,939,2.626,973,2.354,1027,3,1120,1.958,1212,3,1226,2.882,1330,2.561,1357,3,1493,4.891,1552,2.054,1692,2.7,1701,2.561,1779,2.784,1908,2.626,1920,2.502,1968,2.784,1978,3.346,1979,8.085,1980,2.882,1981,3.646,1982,3.646,1983,3.646,1984,3.148,1985,3.646,1986,3.646,1987,3.646,1988,3.646,1989,2.449,1990,5.754,1991,5.754,1992,2.784,1993,3.646,1994,3.646,1995,3.346,1996,3.346,1997,3,1998,3.646,1999,3.646,2000,3.346]],["tags/309",[]],["title/310",[124,4.436,655,4.174]],["content/310",[0,1.599,41,5.09,124,6.12,655,6.965,1104,5.386,1290,5.09,2001,8.185,2002,8.919,2003,8.919,2004,7.701]],["tags/310",[]],["title/311",[261,2.525]],["content/311",[0,1.284,15,3.033,53,2.813,78,2.605,91,4.034,124,4.914,261,2.965,346,4.034,356,2.04,395,5.302,402,3.355,539,4.199,577,4.392,583,3.355,655,4.624,760,3.299,956,4.034,959,6.064,1104,4.324,1290,4.086,1449,4.809,1833,3.246,2005,7.161,2006,7.161,2007,7.161]],["tags/311",[]],["title/312",[32,0.94,248,2.848,784,3.808]],["content/312",[1,2.334,3,1.028,12,1.556,16,1.501,23,2.387,32,1.983,70,1.845,85,2.814,118,2.261,142,1.658,161,3.009,238,1.933,239,5.739,243,1.639,268,1.894,270,2.349,272,2.112,304,2.202,340,4.665,342,3.273,362,2.502,409,2.499,419,2.531,480,2.65,506,2.282,515,2.147,558,1.96,623,3.964,635,3.61,655,4.485,707,4.485,784,4.879,873,2.183,894,2.349,986,5.015,1256,5.304,1268,7.171,2008,6.375,2009,4.66,2010,4.276]],["tags/312",[]],["title/313",[635,3.359,1246,5.581]],["content/313",[16,1.581,59,6.072,82,5.302,87,5.16,94,4.801,635,5.652,1246,7.807,2011,9.043]],["tags/313",[]],["title/314",[12,1.092,480,2.466]],["content/314",[12,1.237,16,1.631,23,2.104,32,1.269,47,2.013,164,1.554,167,2.311,253,2.976,261,2.311,409,2.634,480,4.041,506,3.586,623,4.178,635,3.804,655,4.727,755,5.59,956,4.124,2008,6.718,2012,5.787,2013,6.321,2014,6.024,2015,7.321]],["tags/314",[]],["title/315",[2016,6.583]],["content/315",[135,5.091,142,3.089,419,4.716,462,7.144,2016,9.43,2017,8.682,2018,8.682,2019,8.682,2020,8.682,2021,8.682,2022,7.967]],["tags/315",[]],["title/322",[48,2.798,95,3.028]],["content/322",[0,1.436,16,0.824,20,3.923,48,3.468,53,2.782,83,2.803,92,2.217,95,2.657,96,4.329,97,4.329,98,4.482,120,3.325,275,2.727,331,2.29,345,2.006,415,1.973,423,4.482,430,4.666,452,3.478,453,4.199,573,4.666,610,4.837,623,3.236,760,2.612,894,2.858,948,4.895,1045,4.199,1202,3.154,1215,5.203,1220,5.203,1284,3.731,1357,4.666,1383,4.895,1534,4.895,1597,5.203,1779,4.329,2023,4.666,2024,5.67,2025,5.67,2026,5.67,2027,5.203,2028,5.67,2029,5.67,2030,5.67,2031,3.661,2032,5.203,2033,4.895]],["tags/322",[]],["title/323",[213,3.656]],["content/323",[0,1.104,3,1.359,5,2.948,14,1.776,16,1.096,47,1.094,51,1.88,53,1.192,83,1.967,85,2.403,95,2.887,101,3.046,104,1.665,109,1.698,112,2.068,113,2.136,120,2.333,125,2.672,128,2.946,135,2.333,139,1.686,154,2.046,162,2.569,163,1.416,164,1.948,167,1.256,192,1.617,195,3.779,222,1.527,240,1.536,264,1.897,276,1.518,282,4.194,296,1.596,324,1.527,332,2.113,353,1.804,385,2.521,423,3.145,467,1.818,518,2.113,610,2.403,692,2.619,697,2.271,706,2.113,719,3.435,848,2.795,872,1.662,888,2.187,1048,2.523,1118,3.038,1202,2.214,1235,2.136,1375,3.038,1396,2.046,1445,2.672,1536,3.038,1574,3.145,1709,3.435,1716,3.274,1802,2.569,1950,3.435,2034,3.274,2035,2.795,2036,2.333,2037,2.946,2038,3.145,2039,3.979,2040,3.979,2041,1.818,2042,3.979,2043,3.038,2044,3.979,2045,3.979,2046,3.979,2047,3.979,2048,3.435,2049,3.978,2050,3.979,2051,3.979,2052,3.979,2053,2.214,2054,3.651,2055,3.435]],["tags/323",[]],["title/324",[46,6.108]],["content/324",[294,6.091,518,5.009,1232,8.657,2031,6.091,2032,8.657,2038,7.458,2056,7.203]],["tags/324",[]],["title/325",[1444,6.583]],["content/325",[5,3.926,9,2.128,51,3.754,95,3.722,164,2.131,240,3.067,346,5.656,583,3.722,817,7.667,1287,5.038,1444,8.262,1445,5.335,1769,4.872,2057,6.537,2058,5.722]],["tags/325",[]],["title/326",[213,2.954,272,2.93]],["content/326",[95,4.068,238,3.602,239,5.413,249,4.139,291,5.413,331,3.506,594,8.732,624,4.83,749,6.863,1995,7.967,2054,7.967,2059,8.682]],["tags/326",[]],["title/316",[362,4.295]],["content/316",[0,1.902,16,0.817,53,1.684,62,3.857,78,1.559,83,2.779,92,2.198,133,3.4,171,2.891,242,1.74,266,3.344,267,4.485,268,2.285,269,3.208,270,2.833,297,4.883,304,2.656,347,4.292,422,4.853,515,2.59,692,3.699,779,4.162,924,3.699,1200,4.162,1461,4.444,1654,4.049,1764,2.985,2060,5.158,2061,10.614,2062,6.731,2063,5.158,2064,5.158,2065,4.444,2066,4.964,2067,4.853]],["tags/316",[]],["title/317",[268,3.252]],["content/317",[16,1.371,133,3.022,171,4.851,266,5.612,267,5.314,779,6.986,2060,8.657]],["tags/317",[]],["title/318",[304,3.78]],["content/318",[78,2.58,83,4.598,133,2.979,242,2.879,297,5.704,2063,8.534,2064,8.534,2065,7.351]],["tags/318",[]],["title/319",[515,3.686]],["content/319",[92,3.743,133,3.067,267,5.392,297,5.871,422,8.264,2066,5.967]],["tags/319",[]],["title/320",[1764,4.248]],["content/320",[53,2.867,133,3.067,269,5.462,1200,7.088,1654,6.895,2066,5.967]],["tags/320",[]],["title/321",[270,4.032]],["content/321",[62,6.474,133,3.022,347,7.203,692,6.209,924,6.209,1461,7.458,2067,8.145]],["tags/321",[]],["title/327",[133,2.071,268,2.627]],["content/327",[2,1.736,32,1.461,53,1.825,72,2.93,73,2.831,76,2.528,108,2.6,133,2.699,171,3.133,266,3.624,267,3.432,268,4.444,295,4.512,334,3.233,345,2.156,353,2.762,362,3.271,416,2.428,443,3.389,452,3.737,455,2.23,506,4.126,529,2.904,538,3.934,572,3.166,614,4.01,652,2.657,716,4.389,794,3.309,1920,4.181,2062,3.864,2068,4.092,2069,5.26,2070,5.591,2071,6.093,2072,5.014,2073,5.591]],["tags/327",[]],["title/331",[2,2.279]],["content/331",[]],["tags/331",[]],["title/332",[104,2.162]],["content/332",[]],["tags/332",[]],["title/333",[385,2.645,404,3.738]],["content/333",[0,1.588,4,2.417,9,2.374,47,1.014,72,1.773,86,1.758,104,1.569,114,1.84,115,2.256,133,1.181,217,1.789,222,1.415,253,1.499,268,3.311,272,1.672,274,1.573,298,1.916,314,1.851,326,1.46,385,4.483,392,1.424,404,5.441,415,2.02,417,2.261,441,2.743,466,2.73,476,2.476,494,1.916,518,1.958,529,1.758,542,1.442,635,3.017,652,1.608,741,3.183,918,4.725,920,1.585,1196,3.946,1275,2.193,1282,2.338,1360,2.026,1381,2.162,1396,1.896,1492,3.454,1531,2.815,1552,2.077,1614,3.855,1642,3.821,1833,1.672,1873,2.077,2035,2.59,2037,4.299,2041,1.685,2074,2.433,2075,4.588,2076,2.299,2077,4.299,2078,3.687,2079,3.384,2080,3.183,2081,2.656,2082,3.687,2083,3.384,2084,3.384,2085,3.687,2086,3.687]],["tags/333",[]],["title/334",[242,2.001,243,2.274]],["content/334",[2,1.247,3,2.114,4,1.967,6,1.855,9,1.776,16,0.636,39,3.075,78,1.215,102,2.499,164,1.407,167,1.382,222,1.68,242,3.244,243,3.796,244,2.052,253,2.695,268,2.695,274,2.829,298,2.275,299,1.734,314,2.55,338,2.252,415,2.307,449,2.275,529,2.087,542,1.712,583,2.052,633,2.605,662,2.777,690,2.378,760,3.055,872,1.829,873,2.052,918,2.882,1196,2.406,1202,2.436,1275,3.944,1492,3.944,1552,2.467,1613,3.343,1701,3.075,1930,4.363,2041,2.001,2074,3.024,2076,2.73,2077,3.242,2087,3.603,2088,3.781,2089,6.084,2090,4.379,2091,2.777,2092,2.827,2093,3.781]],["tags/334",[]],["title/335",[518,4.248]],["content/335",[2,2.428,4,2.129,7,2.062,9,1.304,16,0.707,34,3.506,47,1.338,79,3.143,104,1.315,115,2.788,123,2.614,183,2.675,268,2.917,274,3.062,294,3.143,314,1.552,334,1.868,361,2.281,390,2.778,416,1.94,452,2.986,457,3.717,496,2.32,518,6.137,592,3.087,633,2.896,659,2.815,711,3.605,872,2.033,914,3.848,920,2.092,970,3.419,1052,2.453,1235,3.853,1363,4.203,1633,3.035,1677,4.924,1833,2.207,1930,3.204,2041,2.225,2074,3.398,2092,3.143,2094,4.203,2095,4.006,2096,4.203,2097,4.203,2098,6.737,2099,4.203,2100,4.203]],["tags/335",[]],["title/336",[192,2.627,2101,3.688]],["content/336",[0,1.571,4,1.07,7,1.528,9,1.528,16,1.274,47,1.568,104,1.541,115,1.401,166,2.273,178,1.585,182,1.854,192,4.426,222,1.384,243,1.269,244,1.689,252,1.874,253,2.319,268,3.562,274,2.434,276,1.375,298,2.964,332,1.915,345,1.276,390,2.058,413,1.874,415,1.985,416,1.437,443,2.006,455,2.087,464,1.766,529,1.719,563,1.719,579,1.719,872,1.506,873,1.689,1104,2.177,1191,2.422,1202,2.006,1235,1.936,1290,3.255,1360,1.982,1381,2.114,1484,2.006,1492,3.393,1614,1.936,1621,1.894,1833,3.647,1930,2.373,2041,1.648,2074,3.43,2075,2.031,2081,2.597,2101,6.09,2102,2.085,2103,4.006,2104,2.177,2105,2.967,2106,2.967,2107,3.309,2108,6.494,2109,5.704,2110,2.114,2111,2.85]],["tags/336",[]],["title/337",[192,2.204,1104,3.274,2101,3.094]],["content/337",[0,1.082,7,2.557,9,1.617,115,3.252,133,1.934,192,3.905,242,1.869,253,2.454,268,3.402,314,1.924,455,3.797,542,2.36,652,2.633,690,3.279,872,2.522,873,2.828,918,3.973,1104,5.801,1196,3.318,1235,3.241,1381,3.54,1531,4.609,1614,4.494,1833,2.737,2041,2.759,2074,3.256,2075,3.4,2077,4.47,2081,4.348,2101,5.482,2112,4.47,2113,4.24]],["tags/337",[]],["title/338",[99,4.987]],["content/338",[0,1.648,16,1.336,76,2.876,78,1.923,99,6.43,102,3.956,142,2.466,192,4.193,245,3.603,268,2.818,334,2.661,416,2.763,502,4.994,579,3.305,1104,4.186,1120,3.722,1360,3.81,1484,3.857,1621,3.641,2081,4.994,2101,5.246,2110,4.065,2111,5.48,2114,6.362,2115,5.294]],["tags/338",[]],["title/339",[1290,4.565]],["content/339",[0,0.899,4,2.177,9,1.344,14,2.239,16,1.066,38,2.985,47,1.38,78,1.392,102,2.863,104,1.356,115,2.851,149,3.03,192,2.039,194,1.987,268,2.982,274,2.141,299,1.987,314,1.599,332,2.664,334,1.926,353,2.275,361,2.351,365,4.129,385,2.053,404,2.902,415,2.553,416,2,567,2.942,576,3.524,635,2.607,721,2.942,872,3.065,1191,3.369,1235,2.694,1275,2.985,1290,6.536,1737,2.725,1833,2.275,1858,3.302,1930,3.302,2041,2.293,2057,4.129,2074,3.233,2075,2.826,2076,3.128,2104,3.03,2105,4.129,2106,4.129,2116,3.831,2117,4.332,2118,4.332]],["tags/339",[]],["title/340",[186,3.641,2053,3.596]],["content/340",[0,1.424,2,2.263,9,2.95,101,3.927,104,2.147,142,2.826,186,5.656,268,3.229,314,2.532,344,3.414,1930,5.228,2041,3.63,2053,6.125,2074,2.692,2119,7.29]],["tags/340",[]],["title/341",[2053,4.45]],["content/341",[0,1.441,9,2.155,74,5.1,185,5.792,222,3.086,494,4.179,542,3.144,592,5.1,888,4.419,968,5.792,1196,5.561,1221,5.4,1833,3.645,1892,5.792,2053,4.473,2074,2.725,2076,6.308]],["tags/341",[]],["title/342",[186,4.506]],["content/342",[0,1.889,9,1.94,74,4.591,186,5.935,222,4.044,494,5.475,542,2.831,592,4.591,888,3.979,968,5.215,1196,5.199,1221,4.862,1833,3.282,1892,5.215,2074,3.206,2076,5.897,2120,6.644]],["tags/342",[]],["title/343",[48,3.463]],["content/343",[9,2.938,48,4.748,115,3.563,542,3.585,1381,5.377,1833,4.157,2074,3.107]],["tags/343",[]],["title/344",[139,3.389]],["content/344",[2,2.656,7,3.95,9,2.498,34,5.102,55,7.12,104,1.914,139,4.416,268,3.79,314,2.258,334,3.579,353,3.211,369,5.599,390,4.042,424,3.291,1833,3.211,1930,4.661,2041,3.237,2074,3.16,2121,5.599,2122,5.599,2123,5.599]],["tags/344",[]],["title/345",[139,2.297,757,3.226,2124,3.569]],["content/345",[7,3.247,9,2.053,54,5.259,115,2.978,139,4.587,154,5.047,274,3.27,416,3.912,467,3.503,610,4.628,760,3.531,1396,3.941,1467,5.927,1745,4.559,1873,5.529,2074,3.326]],["tags/345",[]],["title/346",[139,2.738,2124,4.254]],["content/346",[7,3.101,9,1.962,47,2.013,54,5.024,115,2.845,139,5.052,154,4.9,274,3.124,306,3.804,420,4.293,480,2.793,760,4.39,1467,4.421,1737,3.976,1745,4.355,1873,4.124,2074,2.481,2103,5.142,2124,6.271]],["tags/346",[]],["title/347",[101,2.681,282,4.317]],["content/347",[4,2.386,16,1.169,104,2.173,146,5.648,268,3.269,391,4.589,476,5.4,563,4.823,825,6.14,1196,4.419,1553,6.617,1622,5.013,1633,5.013,1661,5.518,2043,6.14,2074,2.725,2125,6.357,2126,6.943]],["tags/347",[]],["title/348",[9,2.143]],["content/348",[0,0.982,9,2.442,14,2.445,16,0.796,48,2.372,104,2.113,106,1.847,109,2.338,192,2.228,222,2.103,243,1.928,253,2.228,258,2.976,268,2.228,282,5.847,297,4.796,298,2.848,314,2.493,471,3.361,494,2.848,501,4.731,542,2.143,558,2.305,563,2.612,633,3.26,941,3.849,1167,4.509,1396,4.021,1621,2.878,1622,3.416,1624,4.184,1661,5.366,1930,3.606,1989,3.68,2041,2.504,2043,4.184,2074,2.65,2081,5.632,2102,3.169,2110,3.213,2125,4.332,2127,7.175,2128,4.332]],["tags/348",[]],["title/349",[53,2.396]],["content/349",[4,1.825,6,2.605,9,1.648,53,3.132,78,1.706,104,2.291,106,2.073,163,2.188,166,2.451,242,1.904,268,3.446,314,1.961,326,2.435,353,2.788,392,2.375,455,3.103,467,2.811,475,4.716,542,2.405,707,3.971,760,2.834,1381,3.606,1415,4.047,1467,3.714,1833,3.843,1873,4.776,1930,4.047,2035,5.955,2041,2.811,2074,2.873,2129,4.32,2130,6.976]],["tags/349",[]],["title/350",[53,1.936,464,3.166]],["content/350",[53,3.46,115,3.649,252,3.721,314,2.283,326,2.836,345,2.533,455,4.071,464,3.507,542,3.672,615,4.914,873,3.355,1235,3.845,1381,5.507,1833,3.246,2074,3.182,2091,4.541,2129,6.596]],["tags/350",[]],["title/351",[53,1.936,166,2.576]],["content/351",[3,2.028,53,3.424,115,2.694,166,4.556,274,2.958,314,2.21,416,2.763,452,4.252,475,3.857,542,2.711,712,4.252,725,5.294,734,4.656,920,2.98,1640,4.994,1833,3.143,2074,3.495,2075,3.905,2129,4.869,2131,5.986,2132,5.48]],["tags/351",[]],["title/352",[53,1.936,1747,4.099]],["content/352",[]],["tags/352",[]],["title/353",[133,2.071,1351,4.656]],["content/353",[3,1.307,4,1.759,9,1.588,104,1.602,133,2.647,164,1.258,246,3.827,253,3.359,268,4.184,276,3.152,298,4.294,299,2.347,314,2.634,361,2.777,443,5.293,455,3.024,518,3.147,542,3.231,675,4.163,872,2.476,918,3.901,920,2.547,1196,3.257,1351,6.853,1492,3.526,2041,2.709,2074,3.488,2077,4.389,2133,4.877,2134,5.117,2135,5.927]],["tags/353",[]],["title/354",[133,2.071,563,3.081]],["content/354",[3,1.992,6,2.283,9,2.42,86,2.569,133,3.79,163,1.917,194,2.134,222,2.068,242,1.669,268,4.01,314,1.718,413,2.801,443,2.998,494,2.801,537,3.418,539,3.16,542,2.107,563,3.683,579,2.569,675,3.785,872,2.251,873,2.525,918,3.547,1054,2.998,1196,2.962,1235,2.894,1633,3.36,1858,3.547,2036,3.16,2041,3.531,2074,2.618,2077,3.991,2112,6.688,2123,4.26,2133,4.435,2136,5.39,2137,3.991,2138,4.435]],["tags/354",[]],["title/355",[2139,4.831]],["content/355",[0,0.74,9,1.106,85,2.494,86,3.022,92,1.615,104,1.116,115,2.464,133,1.323,142,1.469,177,2.193,222,2.433,242,1.279,243,1.453,253,2.577,268,4.007,298,3.295,299,2.511,314,2.021,361,1.935,385,1.69,413,2.146,415,1.437,416,1.646,455,3.418,464,2.023,539,2.422,542,3.017,563,1.969,579,1.969,652,1.801,675,2.901,690,2.243,872,3.224,918,2.718,1196,2.27,1275,2.457,1360,2.27,1381,2.422,1492,2.457,1531,3.153,1603,2.975,1613,3.153,1614,5.015,1633,2.575,1833,2.874,2041,1.887,2074,2.615,2075,2.326,2076,2.575,2077,3.058,2081,6.236,2133,3.398,2139,6.559,2140,7.131]],["tags/355",[]],["title/356",[192,2.627,1621,3.395]],["content/356",[7,3.814,21,3.455,91,3.785,106,2.265,115,3.498,155,4.338,172,3.785,192,4.41,253,2.731,268,3.66,298,3.491,314,2.142,542,2.627,918,4.422,1196,3.693,1275,3.997,1492,5.356,1494,4.512,1621,5.941,2076,4.189,2077,4.975,2112,4.975,2139,5.437]],["tags/356",[]],["title/357",[2,1.841,2139,3.903]],["content/357",[0,1.39,166,3.941,242,2.401,268,3.152,274,3.309,281,4.369,299,3.071,345,2.744,455,2.838,476,5.208,542,3.032,702,6.385,872,3.239,1833,3.516,2074,3.351,2139,6.924]],["tags/357",[]],["title/328",[794,3.511,2062,4.099]],["content/328",[]],["tags/328",[]],["title/329",[268,2.627,1621,3.395]],["content/329",[0,2.077,7,2.927,106,1.56,115,1.798,133,1.482,174,3.175,182,2.379,192,2.809,243,2.91,268,3.729,296,1.856,314,3.283,394,3.807,418,1.405,472,2.987,579,3.294,747,3.657,786,3.25,919,4.308,1024,2.64,1118,3.533,1254,3.533,1482,2.934,1484,2.574,1494,3.107,1621,3.629,1624,3.533,2036,2.713,2041,2.114,2081,3.333,2101,2.64,2103,3.25,2110,6.039,2111,5.462,2127,6.341,2140,5.276,2141,3.807,2142,4.246,2143,7.269,2144,3.657,2145,3.995,2146,3.807]],["tags/329",[]],["title/330",[242,1.679,389,4.015,1614,2.911]],["content/330",[0,1.683,9,1.919,10,3.609,92,2.8,242,2.217,261,2.26,268,3.818,300,4.324,389,5.302,418,2.175,436,6.182,455,2.621,495,5.892,498,5.671,529,3.413,714,5.029,783,4.086,873,3.355,1515,4.541,1614,5.627,1749,3.54,2068,4.809,2147,7.161,2148,5.892]],["tags/330",[]],["title/358",[263,3.196,515,2.978]],["content/358",[2,1.548,16,0.79,32,0.942,51,2.568,53,2.328,73,2.525,83,3.843,106,3.059,108,2.319,115,2.112,142,1.933,148,3.281,242,1.683,243,1.912,251,3.509,263,3.843,267,3.061,334,2.983,345,1.923,362,2.918,506,2.662,507,4.296,515,5.022,529,2.591,538,3.509,567,3.187,572,2.824,579,2.591,614,3.576,652,2.37,779,4.024,794,2.952,848,3.817,1209,4.987,1229,4.149,1358,4.472,1624,4.149,1698,4.472,1747,4.929,1758,4.149,1920,3.729,2062,3.446,2066,3.388,2149,4.692,2150,5.434,2151,5.434]],["tags/358",[]],["title/359",[2,2.279]],["content/359",[]],["tags/359",[]],["title/360",[104,2.162]],["content/360",[]],["tags/360",[]],["title/361",[385,2.645,404,3.738]],["content/361",[0,1.692,4,2.801,7,2.078,9,1.314,13,3.228,16,0.713,47,1.349,53,1.469,78,1.36,106,1.653,115,2.803,192,1.994,222,1.882,226,3.057,243,2.539,274,2.093,314,2.3,334,1.882,385,4.305,390,2.799,404,5.458,416,1.955,417,3.008,441,3.409,494,2.548,515,2.26,518,2.604,533,3.877,563,2.338,583,2.298,635,2.548,652,3.147,684,2.359,1381,4.231,1482,4.576,1614,2.633,1677,3.365,1737,2.664,1833,2.223,1873,2.763,2031,3.167,2035,3.445,2037,3.632,2074,3.198,2102,2.836,2110,2.876,2152,4.5]],["tags/361",[]],["title/362",[242,2.001,243,2.274]],["content/362",[3,1.872,4,2.237,6,1.686,7,1.686,9,1.066,16,1.234,39,2.795,78,2.091,102,2.271,142,1.416,164,1.307,167,1.256,172,2.241,192,1.617,242,2.843,243,3.78,244,1.864,253,1.617,274,2.629,276,1.518,289,2.09,299,1.576,314,2.403,392,1.536,415,1.385,443,2.214,449,3.201,515,2.839,542,1.556,550,2.271,563,1.897,583,1.864,631,2.866,633,2.367,652,1.735,662,2.523,690,2.161,760,2.839,872,3.149,894,2.005,1202,2.214,1219,3.72,1275,2.367,1482,2.523,1552,2.241,1613,3.038,1623,2.946,1640,2.866,1642,2.619,1701,2.795,1833,1.804,1930,4.055,2031,2.569,2074,3.432,2087,3.274,2089,5.654,2091,2.523,2110,2.333,2153,3.651,2154,3.651,2155,3.979,2156,3.435]],["tags/362",[]],["title/363",[518,4.248]],["content/363",[2,1.87,4,2.355,7,1.83,9,1.158,13,2.844,16,0.954,34,3.112,47,1.188,79,2.79,115,2.55,123,2.32,133,1.384,183,2.375,192,1.756,243,1.52,274,2.8,294,2.79,314,1.377,334,1.658,361,2.024,390,2.466,391,2.466,413,2.245,416,1.722,452,2.65,457,3.299,496,2.06,515,1.991,518,6.056,542,1.689,563,2.06,592,2.74,633,2.57,652,1.885,659,2.499,711,3.2,872,1.805,914,3.416,920,1.857,970,3.035,1052,2.178,1235,3.524,1363,3.731,1482,2.74,1519,3.2,1552,2.434,1633,2.694,1677,4.504,1833,2.975,2031,2.79,2074,3.641,2092,2.79,2094,3.731,2095,3.555,2096,3.731,2097,3.731,2098,6.273,2099,3.731,2100,3.731,2110,2.534,2157,4.321]],["tags/363",[]],["title/364",[192,2.627,2101,3.688]],["content/364",[0,1.306,7,1.598,16,1.302,47,2.004,92,1.475,104,1.019,166,1.504,178,1.658,182,1.94,192,4.48,222,1.448,243,1.327,244,1.767,252,1.96,274,2.522,276,1.439,287,2.025,314,1.203,332,2.003,345,1.335,390,2.153,413,1.96,415,1.313,416,2.356,441,1.783,443,2.099,455,1.381,515,1.738,529,1.798,563,3.474,579,1.798,652,1.645,721,2.212,872,2.469,873,1.767,1191,2.533,1202,2.099,1235,3.913,1290,4.158,1360,2.073,1482,2.392,1484,2.099,1492,2.244,1621,1.981,1622,2.352,1833,3.739,2031,2.436,2074,3.484,2101,6.17,2102,2.182,2103,5.118,2104,3.569,2105,3.104,2106,3.104,2107,3.462,2108,3.462,2110,3.466,2116,2.88,2158,3.462,2159,5.424]],["tags/364",[]],["title/365",[99,4.987]],["content/365",[0,1.27,16,1.355,78,1.965,99,6.499,104,1.914,142,2.52,192,3.79,194,2.805,242,2.193,416,2.823,418,2.152,515,3.264,563,3.376,579,3.376,1120,3.803,1235,3.803,1280,6.115,1360,3.893,1484,3.94,1621,3.72,1622,4.416,2074,2.4,2101,5.321,2110,4.153,2115,5.408]],["tags/365",[]],["title/366",[1290,4.565]],["content/366",[0,0.879,4,1.455,14,2.189,16,1.244,38,2.918,47,1.349,78,1.36,102,2.799,115,2.803,149,2.961,192,2.933,194,1.942,243,1.726,274,2.093,299,1.942,314,1.563,332,2.604,334,1.882,353,2.223,361,2.298,365,4.036,385,2.007,404,2.836,415,2.511,416,1.955,515,2.26,563,2.338,567,2.876,576,3.445,635,2.548,652,2.139,721,2.876,872,3.014,1191,3.294,1235,2.633,1275,2.918,1290,6.367,1482,3.11,1737,2.664,1833,3.271,1858,3.228,2031,3.167,2057,4.036,2074,3.408,2075,2.763,2076,3.057,2104,2.961,2105,4.036,2106,4.036,2110,2.876,2116,3.745,2117,4.234,2118,4.234]],["tags/366",[]],["title/367",[186,3.641,2053,3.596]],["content/367",[9,2.103,16,1.141,101,3.88,142,2.792,186,4.421,192,3.19,243,2.761,314,2.502,344,3.373,515,3.616,563,3.741,652,3.423,1482,4.977,1833,3.558,2031,5.068,2053,5.543,2074,3.377,2110,4.602,2119,7.202]],["tags/367",[]],["title/368",[2053,4.45]],["content/368",[0,1.441,9,2.155,74,5.1,185,5.792,222,3.086,494,4.179,542,3.144,592,5.1,888,4.419,968,5.792,1196,5.561,1221,5.4,1833,3.645,1892,5.792,2053,4.473,2074,2.725,2076,6.308]],["tags/368",[]],["title/369",[186,4.506]],["content/369",[0,1.889,9,1.94,74,4.591,186,5.935,222,4.044,494,5.475,542,2.831,592,4.591,888,3.979,968,5.215,1196,5.199,1221,4.862,1833,3.282,1892,5.215,2074,3.206,2076,5.897,2120,6.644]],["tags/369",[]],["title/370",[48,3.463]],["content/370",[9,2.938,48,4.748,115,3.563,542,3.585,1381,5.377,1833,4.157,2074,3.107]],["tags/370",[]],["title/371",[139,3.389]],["content/371",[4,2.125,9,1.919,16,1.041,54,4.914,104,1.935,139,3.979,154,3.682,192,2.911,196,4.464,243,2.519,314,2.283,515,3.299,542,2.8,563,3.413,652,3.123,1196,3.935,1381,4.199,1482,4.541,1552,4.034,1614,3.845,1622,4.464,1833,3.246,2031,4.624,2074,3.77,2110,4.199]],["tags/371",[]],["title/372",[139,2.297,757,3.226,2124,3.569]],["content/372",[54,5.081,139,4.774,154,5.477,274,3.159,314,2.36,361,3.469,416,3.826,467,3.384,760,3.411,872,3.093,1467,5.796,1745,4.404,1763,6.092,1873,5.407,2041,3.384,2074,3.609]],["tags/372",[]],["title/373",[139,2.738,2124,4.254]],["content/373",[9,1.919,47,1.969,54,6.445,139,4.893,154,4.83,306,3.721,314,2.283,420,4.199,480,2.731,690,3.889,760,4.327,1467,4.324,1737,3.889,1745,4.26,1763,5.892,1873,4.034,2041,3.272,2074,3.182,2103,5.029,2124,6.181]],["tags/373",[]],["title/374",[101,2.681,282,4.317]],["content/374",[4,2.51,104,2.286,391,4.826,515,3.897,542,3.307,1196,4.648,1381,4.959,1614,4.541,1622,5.273,1633,5.273,1661,7.165,2053,4.705,2074,2.866,2125,6.686]],["tags/374",[]],["title/375",[9,2.143]],["content/375",[9,2.03,16,1.101,48,3.28,192,3.079,243,3.428,282,5.419,297,4.646,298,3.936,314,2.415,558,3.187,563,3.611,633,4.507,652,3.304,1396,3.896,1482,4.804,1661,5.198,1833,3.434,2031,4.891,2043,5.784,2074,3.301,2110,4.442]],["tags/375",[]],["title/376",[53,2.396]],["content/376",[4,1.599,6,2.283,9,1.444,16,0.783,53,2.955,78,1.495,104,1.456,106,1.817,163,1.917,166,2.148,192,2.191,242,1.669,243,1.896,314,1.718,326,2.134,392,2.081,455,2.828,467,2.463,475,5.025,480,2.056,501,4.653,515,2.483,542,3.021,563,3.683,652,2.351,707,3.48,760,2.483,1381,4.531,1415,3.547,1467,3.254,1482,3.418,1552,3.036,1614,2.894,1833,4.095,1873,4.353,2031,3.48,2035,5.427,2074,3.539,2110,3.16,2129,3.785,2130,6.358]],["tags/376",[]],["title/377",[53,1.936,464,3.166]],["content/377",[53,3.46,115,3.649,252,3.721,314,2.283,326,2.836,345,2.533,455,4.071,464,3.507,542,3.672,615,4.914,873,3.355,1235,3.845,1381,5.507,1833,3.246,2074,3.182,2091,4.541,2129,6.596]],["tags/377",[]],["title/378",[53,1.936,166,2.576]],["content/378",[3,2.028,53,3.424,115,2.694,166,4.556,274,2.958,314,2.21,416,2.763,452,4.252,475,3.857,542,2.711,712,4.252,725,5.294,734,4.656,920,2.98,1640,4.994,1833,3.143,2074,3.495,2075,3.905,2129,4.869,2131,5.986,2132,5.48]],["tags/378",[]],["title/379",[53,1.936,1747,4.099]],["content/379",[]],["tags/379",[]],["title/380",[133,2.071,1351,4.656]],["content/380",[4,2.532,7,2.63,32,1.077,133,2.734,176,3.261,243,3.002,314,1.979,391,3.543,515,2.861,542,2.428,563,2.96,639,5.109,652,2.708,872,3.565,920,2.668,1054,3.454,1118,4.741,1351,7.928,1360,3.412,1482,3.937,1492,5.076,1519,4.597,1552,3.497,2031,4.009,2036,3.641,2074,3.73,2134,7.368,2160,5.36,2161,5.697]],["tags/380",[]],["title/381",[133,2.071,563,3.081]],["content/381",[0,0.913,3,1.93,7,2.159,16,0.741,86,2.429,120,2.988,133,3.684,192,2.071,222,2.848,243,1.793,252,3.856,314,2.365,330,2.62,332,2.705,346,2.87,392,1.968,416,2.031,443,2.835,455,1.865,515,2.348,533,4.028,539,4.351,542,1.992,563,4.87,684,2.451,710,3.773,721,2.988,774,2.947,872,2.128,873,2.387,1054,4.128,1235,2.736,1482,3.231,1552,2.87,1603,3.67,1633,3.177,1833,2.31,2031,4.791,2074,3.257,2110,2.988,2123,4.028,2137,3.773,2162,5.096]],["tags/381",[]],["title/382",[2139,4.831]],["content/382",[0,1.342,109,3.195,115,3.757,222,2.874,243,2.635,276,2.856,321,8.873,338,3.851,345,2.649,374,4.749,442,5.92,472,6.244,515,3.45,542,2.928,579,3.57,1531,5.718,1633,4.669,2036,4.391,2139,6.467,2140,5.718]],["tags/382",[]],["title/383",[192,2.627,1621,3.395]],["content/383",[7,3.63,106,2.888,155,5.533,172,4.827,192,4.279,243,3.015,314,2.731,515,3.948,1494,5.754,1621,5.528,2076,5.342,2139,5.174]],["tags/383",[]],["title/384",[794,3.511,2062,4.099]],["content/384",[]],["tags/384",[]],["title/385",[192,2.204,515,2.498,1621,2.848]],["content/385",[24,4.873,106,3.227,268,3.891,1621,5.027,1844,7.088,2068,6.428]],["tags/385",[]],["title/386",[515,2.498,2129,3.808,2163,4.976]],["content/386",[16,1.183,53,2.439,76,3.377,120,4.774,196,5.076,515,3.751,610,4.916,706,4.323,1691,6.217,1844,6.029,2068,6.848,2129,5.718,2163,7.471,2164,8.142,2165,8.142,2166,8.142,2167,8.142]],["tags/386",[]],["title/387",[133,2.071,1764,3.432]],["content/387",[2,1.601,16,0.817,18,3.053,32,1.381,65,3.258,73,2.612,104,1.519,106,2.684,108,2.398,118,2.728,119,3.775,133,2.962,142,2,214,3.775,269,3.208,270,2.833,287,3.018,334,3.056,345,1.989,362,4.275,506,2.753,515,2.59,529,3.795,538,3.63,558,2.365,572,2.921,614,3.699,652,2.452,783,3.208,794,3.053,946,3.775,1752,4.049,1764,5.852,1920,3.857,1992,4.292,2062,3.565,2168,4.853,2169,5.158,2170,5.158,2171,5.621,2172,5.621]],["tags/387",[]],["title/390",[2,2.279]],["content/390",[]],["tags/390",[]],["title/391",[104,2.162]],["content/391",[]],["tags/391",[]],["title/392",[385,2.645,404,3.738]],["content/392",[4,2.656,9,2.046,13,3.489,14,2.366,16,1.11,47,1.458,53,1.588,72,2.55,104,1.433,115,2.967,274,2.262,314,2.434,361,2.484,385,4.752,404,5.176,419,4.148,467,2.423,542,2.073,741,4.578,894,2.672,1167,4.363,1552,2.987,1614,2.847,1737,2.88,1748,4.363,1764,2.815,1873,2.987,1950,4.578,2035,3.724,2037,3.926,2041,2.423,2074,3.663,2075,4.302,2079,4.865,2080,4.578,2102,3.066,2130,4.363,2173,3.489]],["tags/392",[]],["title/393",[242,2.001,243,2.274]],["content/393",[3,2.265,4,2.444,6,1.946,7,1.946,9,1.231,16,0.999,78,1.907,164,1.459,167,1.45,242,2.55,243,3.746,253,1.867,274,3.514,276,1.752,296,1.843,299,1.819,314,2.914,419,3.733,443,2.556,449,3.572,542,1.796,583,2.152,633,2.733,652,2.004,662,2.913,690,2.495,706,2.439,760,3.795,872,1.919,919,2.864,1202,2.556,1381,2.694,1386,3.632,1552,2.588,1609,4.216,1701,3.227,1764,3.65,1930,4.524,2041,2.1,2074,3.317,2091,2.913,2156,3.967,2173,3.023,2174,4.216,2175,4.594,2176,6.874]],["tags/393",[]],["title/394",[518,4.248]],["content/394",[2,1.948,4,2.703,9,1.222,13,3.002,34,4.925,53,1.366,79,2.946,92,1.784,102,3.902,104,1.848,115,2.657,123,2.45,138,2.893,260,2.277,274,2.917,294,5.295,314,2.18,361,2.137,413,2.371,416,1.818,419,4.454,443,2.538,449,2.371,452,2.798,457,3.483,475,2.538,496,2.175,518,5.64,592,2.893,633,2.714,639,5.626,659,2.638,711,3.378,872,1.906,873,2.137,914,3.606,1052,4.134,1187,3.939,1235,3.671,1633,2.844,1677,3.131,1764,2.422,2041,2.085,2074,3.307,2092,2.946,2094,3.939,2095,3.754,2096,3.939,2097,3.939,2098,3.606,2173,3.002,2177,4.562,2178,4.562]],["tags/394",[]],["title/395",[192,2.627,2101,3.688]],["content/395",[0,1.216,4,1.004,14,1.509,16,0.492,79,3.5,92,2.119,104,0.914,115,3.014,142,1.203,148,3.273,166,2.16,172,1.905,182,1.739,183,1.859,192,4.347,222,1.298,244,1.585,252,1.757,274,1.443,276,2.068,287,2.91,299,1.339,314,2.888,361,1.585,415,1.886,416,2.16,419,4.214,421,2.321,424,1.571,441,1.598,455,2.482,496,1.612,498,2.042,542,1.322,563,2.584,579,3.233,652,1.475,711,2.504,787,2.436,848,2.375,872,3.241,919,4.229,920,2.915,1196,1.859,1219,2.042,1235,1.816,1290,1.93,1360,1.859,1381,1.983,1422,2.271,1621,2.847,1622,2.108,1764,1.796,1833,3.075,2041,1.546,2074,3.547,2091,2.145,2101,6.312,2104,2.042,2173,2.226,2179,3.382,2180,3.103,2181,3.382,2182,3.382]],["tags/395",[]],["title/396",[99,4.987]],["content/396",[0,1.341,16,1.087,32,0.682,38,2.339,41,2.243,78,2.075,87,2.243,99,6.673,102,2.243,104,1.062,115,1.527,142,1.399,192,2.481,240,1.518,242,1.217,243,1.383,244,1.842,261,1.241,274,3.598,314,1.946,353,3.823,361,1.842,385,2.498,416,2.433,418,1.194,419,4.581,441,1.858,455,2.234,480,1.499,498,2.374,563,1.874,579,1.874,583,1.842,615,2.698,625,2.64,659,2.273,711,2.911,762,3.002,774,2.273,872,1.642,919,2.451,1120,2.111,1196,2.16,1235,2.111,1290,2.243,1360,2.16,1484,2.187,1588,5.389,1621,2.065,1622,2.451,1764,3.241,1833,1.782,2041,2.789,2074,3.275,2091,2.493,2101,4.269,2102,2.273,2110,2.305,2115,3.002,2173,4.017,2183,4.287,2184,3.931,2185,3.931]],["tags/396",[]],["title/397",[186,3.641,2053,3.596]],["content/397",[4,2.248,9,2.03,16,1.101,115,2.944,186,4.267,296,3.039,314,2.415,361,3.549,419,5.291,498,4.574,919,4.723,1360,4.163,1381,4.442,1764,4.022,2041,3.462,2053,5.99,2074,3.301,2091,4.804,2123,5.988,2173,4.985]],["tags/397",[]],["title/398",[2053,4.45]],["content/398",[4,1.86,9,2.301,185,4.515,264,2.988,287,3.365,295,4.641,298,3.257,326,2.482,367,2.842,385,2.565,542,2.451,592,3.975,670,6.36,673,3.975,918,5.653,968,4.515,1073,4.955,1196,3.445,1360,3.445,1515,3.975,1613,6.559,1633,6.109,1727,5.412,1833,2.842,1938,5.412,2053,4.778,2074,3.321,2186,5.752,2187,6.268,2188,6.268,2189,6.268,2190,4.955,2191,6.268]],["tags/398",[]],["title/399",[186,4.506]],["content/399",[0,1.905,9,1.712,17,3.802,74,4.053,176,4.571,186,6.263,222,4.079,494,5.522,691,5.518,760,2.944,812,5.259,920,2.747,968,4.603,1191,4.292,1221,4.292,1727,5.518,1892,4.603,2053,3.555,2074,2.949,2076,6.171,2192,7.987,2193,5.518]],["tags/399",[]],["title/400",[139,3.389]],["content/400",[9,1.729,14,2.88,55,4.928,104,1.744,139,4.521,154,5.488,163,2.296,172,3.635,194,2.556,217,3.132,299,2.556,324,2.477,345,2.283,362,3.465,424,4.071,494,3.354,542,3.426,563,3.076,576,4.533,691,5.572,1196,4.816,1614,3.465,1622,4.023,1764,3.427,2074,3.616,2075,3.635,2194,6.454]],["tags/400",[]],["title/401",[139,2.297,757,3.226,2124,3.569]],["content/401",[78,1.659,86,2.851,92,2.339,104,1.616,139,5.059,154,4.277,274,3.548,276,2.282,299,2.369,369,4.728,416,3.315,424,2.779,467,2.733,563,3.964,652,2.609,760,2.756,872,2.498,1196,4.571,1422,4.017,1467,5.022,1622,3.729,1737,3.249,1745,3.558,1873,4.685,2074,3.68,2195,7.632,2196,5.164]],["tags/401",[]],["title/402",[139,2.738,2124,4.254]],["content/402",[104,2.001,139,5.068,154,4.936,306,3.847,416,2.951,420,4.342,480,2.824,563,3.529,659,4.282,760,3.411,1196,4.069,1467,4.471,1622,4.616,1745,4.404,1873,4.171,2074,2.509,2121,5.853,2122,5.853,2124,6.317]],["tags/402",[]],["title/403",[101,2.681,282,4.317]],["content/403",[104,2.286,563,4.032,1167,6.959,1196,4.648,1614,4.541,1622,5.273,1633,5.273,1661,7.165,1764,4.491,2043,6.458,2053,4.705,2074,2.866,2075,4.764,2125,6.686]],["tags/403",[]],["title/404",[9,2.143]],["content/404",[9,1.782,47,1.829,48,2.879,104,1.797,115,2.584,243,2.34,282,6.01,297,4.079,298,3.456,314,2.851,419,5.487,542,2.6,558,2.798,563,3.17,633,3.956,873,3.116,1235,3.571,1396,3.42,1552,3.746,1614,3.571,1622,4.146,1661,4.564,2041,3.039,2043,6.828,2074,3.423,2075,3.746,2173,4.377]],["tags/404",[]],["title/405",[53,2.396]],["content/405",[53,3.231,166,3.555,314,2.843,455,3.264,884,6.604,1764,4.736,2041,4.076,2074,3.022,2130,7.339,2173,5.87]],["tags/405",[]],["title/406",[53,1.936,464,3.166]],["content/406",[0,1.312,4,2.173,53,3.173,252,3.804,296,2.937,326,2.899,345,2.59,415,2.548,455,3.487,464,3.586,542,2.862,583,3.43,615,5.024,659,4.234,1833,3.319,1873,4.124,2074,3.229,2075,4.124,2091,4.643,2092,4.727,2102,4.234,2129,5.142,2196,6.321]],["tags/406",[]],["title/407",[53,1.936,166,2.576]],["content/407",[0,1.243,3,2.028,9,1.858,53,3.424,115,2.694,166,4.378,274,2.958,314,2.21,415,2.413,416,2.763,452,4.252,475,3.857,712,5.639,734,4.656,920,2.98,1640,4.994,1833,3.143,2074,3.495,2131,5.986,2132,5.48,2196,5.986]],["tags/407",[]],["title/408",[53,1.936,1747,4.099]],["content/408",[]],["tags/408",[]],["title/409",[133,2.071,1351,4.656]],["content/409",[4,2.532,7,2.63,16,0.902,32,1.077,133,3.124,274,2.649,314,1.979,333,4.741,338,3.193,391,3.543,419,3.372,455,2.272,498,3.749,542,2.428,639,5.109,872,3.565,919,3.87,1351,7.023,1360,3.412,1381,3.641,1492,5.076,1519,4.597,1552,3.497,1764,3.296,2041,2.837,2074,3.73,2104,3.749,2134,5.36,2160,5.36,2161,5.697,2173,4.086,2197,6.209]],["tags/409",[]],["title/410",[133,2.071,563,3.081]],["content/410",[0,1.016,3,1.767,7,2.402,86,2.703,120,3.325,133,3.639,163,2.017,222,3.074,242,1.755,252,2.946,274,2.419,314,2.554,346,3.194,416,2.26,419,3.08,421,3.891,443,3.154,455,2.075,494,2.946,533,4.482,539,4.697,542,2.217,563,4.428,721,3.325,774,3.279,872,2.368,873,2.657,1054,3.154,1235,3.044,1633,3.535,1737,3.08,1764,4.253,2041,2.591,2074,3.148,2123,4.482,2137,4.199,2173,3.731,2198,5.203]],["tags/410",[]],["title/411",[2139,4.831]],["content/411",[0,1.728,16,1.222,72,1.879,102,2.23,104,1.056,142,1.39,163,1.39,172,3.422,183,3.339,192,2.469,222,1.5,242,1.21,243,2.622,276,2.317,281,2.201,345,1.382,415,1.36,416,2.421,424,2.822,455,2.223,466,2.894,472,2.523,539,4.93,542,3.287,579,1.863,652,1.704,894,1.969,920,1.679,1120,2.098,1196,3.339,1360,2.148,1449,2.624,1614,4.889,1621,3.191,1622,2.436,1628,3.374,1633,2.436,1764,3.226,1780,3.374,1877,3.586,2074,3.267,2075,5.129,2091,2.478,2137,2.894,2139,6.822,2140,4.639,2143,4.499,2148,4.999,2199,3.908,2200,3.908,2201,3.908,2202,3.908]],["tags/411",[]],["title/412",[192,2.627,1621,3.395]],["content/412",[106,2.362,115,2.723,155,4.524,163,2.493,172,3.947,192,4.215,222,2.689,242,2.169,299,2.775,314,2.234,415,2.439,419,3.806,494,3.641,579,3.34,774,4.052,973,4.524,1621,6.024,1764,3.72,1858,4.611,2041,3.202,2074,2.374,2139,6.261,2173,4.611]],["tags/412",[]],["title/413",[2,1.841,2139,3.903]],["content/413",[4,2.5,6,2.581,16,0.885,92,2.382,106,2.054,166,2.428,242,1.886,281,3.432,352,3.934,361,2.855,419,3.309,424,2.831,455,3.083,480,3.213,498,3.679,542,2.382,550,3.477,563,2.904,670,4.512,702,3.934,711,4.512,760,2.807,787,4.389,825,4.652,872,2.545,1219,3.679,1552,3.432,1614,3.271,1764,3.235,1984,5.26,2074,3.272,2075,3.432,2126,5.26,2139,6.602,2140,6.432]],["tags/413",[]],["title/388",[794,3.511,2062,4.099]],["content/388",[]],["tags/388",[]],["title/389",[192,2.204,1621,2.848,1764,2.879]],["content/389",[16,1.245,53,2.566,106,2.888,268,3.483,455,3.136,523,6.172,794,4.654,1189,7.398,1764,4.549,2062,5.434,2068,7.069,2203,5.533,2204,7.863]],["tags/389",[]],["title/414",[304,3.78]],["content/414",[2,2.369,16,0.869,32,1.442,47,1.645,53,2.864,73,2.779,92,2.339,101,2.957,118,2.903,133,3.479,148,3.612,170,2.957,218,2.431,292,4.626,304,5.132,347,4.567,566,3.369,623,3.413,794,4.517,939,5.99,1029,4.201,1282,3.793,1743,4.728,1747,5.274,2062,5.274,2170,5.489,2205,5.981,2206,5.981,2207,5.981,2208,5.981]],["tags/414",[]],["title/415",[2,2.279]],["content/415",[]],["tags/415",[]],["title/416",[9,1.453,104,1.465,314,1.729]],["content/416",[0,1.792,9,2.679,16,0.947,32,1.13,47,1.792,104,2.384,115,2.533,243,3.104,304,3.08,314,3.188,334,2.501,371,3.107,760,3.003,956,3.672,1484,3.626,1515,5.594,1642,4.29,1749,4.361,1989,5.924,2041,4.031,2143,6.532,2144,5.152,2209,5.363,2210,8.822]],["tags/416",[]],["title/417",[385,2.645,404,3.738]],["content/417",[0,1.252,2,2.632,9,2.873,16,0.682,32,0.814,78,1.302,86,3.329,104,2.254,298,2.439,299,2.766,334,2.68,385,4.689,404,6.201,415,1.633,441,3.941,518,2.492,542,1.835,697,2.678,872,3.484,919,2.926,920,3.001,1052,2.365,1282,2.976,1559,3.38,1614,3.75,1798,3.71,2036,2.752,2037,6.176,2074,2.367,2075,3.934,2080,6.03,2116,3.583,2128,3.71,2211,4.693,2212,6.984]],["tags/417",[]],["title/418",[242,2.001,243,2.274]],["content/418",[]],["tags/418",[]],["title/419",[2,1.168,9,1.099,104,1.108,242,1.27,243,1.443]],["content/419",[0,1.857,9,2.237,16,1.213,104,2.256,242,3.207,243,3.963,334,3.204,419,4.535,872,3.488,1559,6.014,2036,4.896,2041,3.816]],["tags/419",[]],["title/420",[2,1.168,3,0.904,163,1.459,242,1.27,243,1.443]],["content/420",[0,1.217,3,2.402,16,0.987,21,3.491,86,4.322,243,3.833,314,3.254,334,2.605,415,2.363,542,2.654,760,4.177,872,2.836,1054,3.777,1193,6.23,1386,5.367,1492,5.393,1494,4.559,2074,3.072,2092,4.383,2103,4.768,2104,4.099,2213,5.184]],["tags/420",[]],["title/421",[518,4.248]],["content/421",[0,1.869,2,2.969,9,2.793,78,1.965,86,3.376,104,1.914,294,4.573,299,2.805,334,2.718,358,5.102,518,5.535,794,3.847,872,2.959,1052,3.57,1396,3.642,1515,4.492,2036,5.468,2066,4.416,2074,2.4,2101,4.042,2110,4.153]],["tags/421",[]],["title/422",[192,2.627,2101,3.688]],["content/422",[]],["tags/422",[]],["title/423",[2,1.545,192,2.204,2101,3.094]],["content/423",[0,1.115,2,2.164,9,1.079,16,1.527,32,0.698,78,1.725,99,2.511,101,1.991,104,1.089,106,1.358,146,2.829,166,2.479,177,2.139,192,3.967,194,1.595,242,1.247,304,1.903,334,1.546,409,1.449,415,3.214,432,2.299,455,2.276,468,2.071,539,3.647,579,2.965,774,2.33,872,3.569,920,3.265,986,2.432,1009,3.478,1052,2.03,1275,2.396,1282,2.554,1290,2.299,1360,2.214,1552,2.269,1621,5.343,1777,3.696,1833,1.826,2036,3.647,2074,2.895,2092,2.601,2101,6.493,2102,3.597,2104,2.432,2214,4.028,2215,3.696,2216,3.696,2217,3.478]],["tags/423",[]],["title/424",[16,0.939,99,4.03]],["content/424",[0,1.153,2,2.225,3,1.722,7,1.783,9,1.724,12,0.711,16,0.612,32,0.73,47,1.157,76,1.746,78,2.166,99,6.192,102,2.402,104,1.739,164,1.365,192,3.174,222,1.616,242,1.303,243,2.264,262,1.924,304,3.04,314,2.051,326,1.667,332,2.235,334,1.616,349,2.957,355,2.957,363,2.582,364,2.504,419,2.286,432,3.671,455,3.2,558,1.771,583,1.972,919,2.624,954,5.625,1021,2.582,1022,2.957,1120,2.26,1422,2.827,1515,2.67,1588,3.032,1642,2.77,1680,3.214,1738,4.234,1744,2.827,1989,2.827,2036,2.468,2074,1.426,2092,2.718,2101,4.99,2102,2.435,2139,2.542,2183,2.957,2218,4.21,2219,4.21,2220,4.21,2221,4.21,2222,5.904,2223,4.21,2224,4.21,2225,3.214]],["tags/424",[]],["title/425",[186,3.641,2053,3.596]],["content/425",[0,1.708,2,3.196,9,2.553,78,2.031,101,4.711,104,1.978,186,5.368,299,2.899,334,4.065,1052,3.69,1083,4.643,2036,5.587,2053,5.301,2074,2.481,2102,5.511]],["tags/425",[]],["title/426",[9,1.732,139,2.738]],["content/426",[14,3.679,70,3.265,129,4.115,139,4.744,154,4.24,222,3.164,249,3.93,1048,5.228,1614,4.427,2075,4.644,2121,6.517,2122,6.517,2128,6.517,2226,7.565,2227,8.244]],["tags/426",[]],["title/427",[139,1.737,154,2.109,2121,3.242,2122,3.242,2124,2.699]],["content/427",[0,1.436,2,2.646,9,2.705,16,0.824,20,2.777,70,2.245,104,1.532,115,2.203,122,3.279,139,3.394,154,4.777,162,3.661,306,2.946,324,2.176,334,2.176,345,2.834,349,3.982,455,2.075,480,2.163,563,2.703,662,3.596,872,2.368,919,5.791,1120,3.044,1467,3.424,1873,3.194,2036,3.325,2074,3.148,2104,3.424,2121,7.343,2122,7.343,2228,5.67,2229,5.203,2230,4.666,2231,5.67]],["tags/427",[]],["title/428",[101,2.681,282,4.317]],["content/428",[2,2.044,4,2.129,9,1.922,14,3.202,16,0.707,47,1.338,101,5.619,104,2.303,129,2.43,243,1.713,249,3.42,272,3.253,298,3.729,299,2.841,314,2.287,371,2.32,471,5.227,472,6.072,872,3.928,919,3.035,1614,2.614,1661,7.199,1833,2.207,2036,2.854,2074,1.65,2075,2.742,2083,6.584,2102,4.928,2112,3.605,2125,3.848,2128,3.848,2232,8.12,2233,4.868,2234,4.868]],["tags/428",[]],["title/429",[53,2.396]],["content/429",[]],["tags/429",[]],["title/430",[53,1.624,464,2.656,475,3.017]],["content/430",[0,1.342,2,2.133,9,2.591,28,3.933,53,3.208,104,2.024,115,2.91,324,2.874,326,2.966,334,2.874,345,2.649,455,2.741,662,4.749,1467,4.522,1559,5.394,1873,4.219,2036,4.391,2074,3.629,2092,4.835,2104,4.522]],["tags/430",[]],["title/431",[53,1.624,166,2.161,475,3.017]],["content/431",[0,1.298,3,2.464,9,1.94,16,1.052,53,3.346,104,1.957,334,2.779,415,2.52,452,5.802,475,5.262,712,6.462,872,4.401,1559,5.215,2036,4.245,2074,2.453,2235,7.24]],["tags/431",[]],["title/432",[53,1.936,1747,4.099]],["content/432",[]],["tags/432",[]],["title/433",[133,2.071,1282,4.099]],["content/433",[2,2.076,3,0.832,4,2.448,7,4.024,9,2.545,14,1.683,16,0.548,17,2.244,28,3.104,47,1.037,70,1.494,104,1.019,133,3.682,172,2.125,264,3.474,272,1.71,299,1.494,302,2.182,314,1.203,334,3.646,371,1.798,415,1.313,443,2.099,518,3.138,538,2.436,542,1.475,562,2.314,563,4.269,872,2.469,1024,2.153,1054,4.054,1282,3.748,1492,2.244,1519,2.793,2036,4.273,2053,4.054,2074,3.219,2092,5.783,2095,3.104,2101,3.373,2104,2.278,2160,7.732,2203,2.436,2236,3.462,2237,5.103,2238,3.462,2239,3.772]],["tags/433",[]],["title/434",[133,2.071,288,3.359]],["content/434",[2,1.785,5,2.451,14,2.797,16,0.911,32,1.087,38,3.729,73,2.912,78,1.739,117,4.515,133,3.538,182,3.223,242,1.941,249,2.988,276,4.213,288,5.478,304,4.631,340,4.209,392,2.42,409,2.255,452,3.844,1271,4.301,1559,4.515,1732,5.752,2098,4.955,2240,6.268,2241,7.416,2242,7.882]],["tags/434",[]],["title/435",[133,1.737,288,2.818,324,2.081]],["content/435",[0,1.094,2,1.12,4,1.167,9,1.053,16,0.571,26,1.981,27,1.874,104,1.062,133,3.715,141,3.002,174,2.698,182,2.022,192,1.598,243,1.383,288,5.562,304,2.884,324,1.509,334,1.509,345,1.391,383,2.187,424,1.826,441,1.858,455,2.234,480,2.328,507,3.108,518,4.848,579,4.353,690,2.135,702,2.538,794,2.135,920,2.623,979,3.394,1052,1.981,1104,2.374,1360,4.112,1462,3.394,1494,2.64,1621,2.065,1737,4.063,1833,2.767,1944,5.601,1992,3.002,2036,3.579,2053,2.187,2074,2.535,2098,3.108,2101,2.243,2139,3.686,2141,3.235,2225,3.002,2237,3.394,2241,6.46,2242,5.601,2243,3.931,2244,3.931,2245,6.104]],["tags/435",[]],["title/436",[133,1.496,288,2.427,579,2.226,1360,2.567]],["content/436",[0,1.308,4,2.562,9,1.334,16,1.382,32,0.863,47,1.369,104,1.346,133,3.5,142,1.771,192,3.51,242,1.542,243,1.752,288,4.94,299,1.972,304,2.353,314,1.587,332,2.644,334,1.911,371,2.373,392,1.923,494,2.587,539,4.278,579,2.373,690,2.704,1360,5.225,1519,3.687,1614,2.673,1621,4.993,1833,2.257,1989,4.899,2053,4.803,2075,2.805,2081,3.586,2139,3.007,2186,4.569,2203,3.215,2225,3.802,2237,4.299,2241,4.299,2246,4.569,2247,4.979,2248,4.979]],["tags/436",[]],["title/437",[794,3.511,2062,4.099]],["content/437",[]],["tags/437",[]],["title/438",[192,2.627,1621,3.395]],["content/438",[0,2.04,9,1.079,32,0.698,47,1.108,104,1.681,115,2.417,133,1.993,142,1.433,174,2.764,192,3.088,243,3.249,286,2.139,299,2.463,304,1.903,314,3.243,334,1.546,415,2.644,472,4.016,488,2.511,498,2.432,579,2.965,690,2.188,714,2.829,794,2.188,919,3.877,1024,2.299,1118,3.076,1254,3.076,1375,5.801,1484,2.241,1621,4.487,1737,3.378,2036,4.455,2041,1.841,2110,5.415,2111,4.917,2116,3.076,2139,2.432,2140,4.749,2143,6.838,2144,3.184,2145,3.478,2203,2.601,2209,5.118,2249,3.076,2250,4.028,2251,5.707,2252,4.028]],["tags/438",[]],["title/439",[16,0.939,2209,5.319]],["content/439",[0,1.359,3,1.291,9,0.732,14,1.219,16,0.662,18,1.484,32,0.474,41,1.559,47,1.252,70,1.082,86,2.17,95,1.28,104,1.23,108,1.166,115,2.274,129,2.921,133,0.875,138,1.732,142,2.082,155,1.764,243,2.402,260,1.364,261,2.394,299,1.082,304,1.291,314,2.611,326,1.082,331,1.103,332,2.417,371,1.302,376,2.023,385,3.555,409,2.947,415,2.376,418,1.383,455,1,480,3.124,535,2.359,562,1.676,566,1.539,579,1.302,583,1.28,655,1.764,872,2.444,956,1.539,1024,3.339,1054,2.532,1360,1.501,1397,5.37,1484,1.52,1515,4.329,1517,2.086,1642,6.736,1749,1.351,1758,2.086,2037,3.371,2084,6.264,2112,3.371,2113,3.197,2143,3.371,2144,2.16,2146,3.746,2180,4.177,2203,1.764,2209,6.241,2225,2.086,2246,2.507,2253,1.968,2254,2.507,2255,2.248,2256,2.507,2257,2.732,2258,2.732,2259,2.732,2260,4.552,2261,4.552,2262,2.732,2263,2.732,2264,7.585,2265,2.732,2266,2.732,2267,2.732,2268,2.507,2269,2.732,2270,2.732,2271,2.732,2272,2.732,2273,2.732]],["tags/439",[]],["title/440",[2213,6.108]],["content/440",[0,1.739,3,1.758,16,0.516,17,2.11,32,0.615,47,0.975,108,1.513,115,2.188,126,2.29,163,1.262,171,1.824,172,4.897,182,3.6,192,1.442,222,2.161,229,2.491,242,1.098,251,2.29,260,1.77,264,2.684,287,1.905,304,1.676,314,2.771,324,2.161,345,1.992,371,1.691,424,1.648,518,3.717,537,2.25,538,2.29,558,2.368,563,3.8,579,1.691,635,1.843,919,4.364,1024,2.024,1048,4.44,1054,3.132,1219,2.142,1360,1.949,1515,6.573,1531,4.299,1614,3.023,1621,1.863,1680,2.708,1749,3.461,2111,2.804,2124,3.705,2143,2.627,2145,3.063,2148,7.154,2203,2.29,2213,6.086,2274,3.255,2275,5.167,2276,5.167,2277,3.547,2278,3.255,2279,7.971,2280,3.547,2281,3.063,2282,3.547]],["tags/440",[]],["title/441",[1174,5.319,2041,2.954]],["content/441",[3,1.896,9,2.538,47,1.359,106,1.666,133,3.035,155,3.191,243,1.739,299,1.957,304,3.428,314,3.02,371,2.356,424,2.296,442,3.906,518,2.624,538,3.191,542,3.704,872,2.064,920,2.124,1024,2.82,1174,9.389,1484,2.749,1519,3.659,1561,4.266,1614,5.086,2041,5.11,2074,3.21,2075,5.336,2128,6.796,2203,3.191]],["tags/441",[]],["title/442",[133,2.071,270,3.258]],["content/442",[2,1.82,18,3.471,32,1.108,53,1.914,62,4.385,65,2.615,73,2.969,104,2.352,106,2.154,108,2.727,119,4.292,133,2.047,270,5.604,334,3.34,347,4.88,362,3.431,506,3.13,529,3.046,538,4.126,572,3.321,614,4.206,652,2.787,692,4.206,794,3.471,924,4.206,1461,5.052,1920,4.385,2062,4.053,2067,5.518,2169,5.864,2283,6.391,2284,5.518,2285,6.391,2286,6.391]],["tags/442",[]],["title/445",[2,2.279]],["content/445",[2,2.767,270,4.896,455,3.555,2001,8.914,2068,6.524]],["tags/445",[]],["title/443",[794,3.511,2062,4.099]],["content/443",[]],["tags/443",[]],["title/444",[192,2.204,270,2.733,1621,2.848]],["content/444",[16,1.245,53,2.566,106,2.888,268,3.483,270,4.319,455,3.136,523,6.172,794,4.654,1189,7.398,2062,5.434,2068,7.069,2203,5.533,2204,7.863]],["tags/444",[]],["title/446",[2066,4.987]],["content/446",[]],["tags/446",[]],["title/447",[202,3.688,2287,6.464]],["content/447",[2,1.934,16,0.987,32,1.177,73,3.154,108,3.868,118,4.4,120,3.981,139,2.876,195,4.164,202,5.174,326,2.688,558,3.814,652,2.961,686,3.325,763,5.184,958,5.027,1044,6.23,1045,5.027,1120,3.645,1170,3.687,1858,4.468,2066,5.652,2288,4.659,2289,6.23,2290,6.23,2291,5.367,2292,9.066,2293,6.23]],["tags/447",[]],["title/448",[2294,6.583]],["content/448",[9,0.66,14,1.1,26,2.104,39,1.731,51,1.164,53,0.738,66,1.466,78,1.984,82,2.448,91,3.059,94,1.308,101,2.685,106,2.411,108,3.715,118,4.017,120,1.445,122,1.425,129,2.084,154,1.267,162,1.591,163,0.877,171,2.147,176,1.294,178,1.834,182,2.147,194,0.976,202,6.762,231,2.602,243,1.469,244,1.155,299,0.976,314,0.786,326,0.976,403,3.187,428,1.825,431,2.128,438,2.028,446,2.261,468,1.267,476,1.655,498,1.488,514,1.948,518,2.216,558,1.037,581,1.622,643,1.511,941,2.932,973,1.591,975,2.261,986,1.488,1056,1.731,1120,2.241,1170,2.95,1198,2.128,1211,2.128,1250,4.983,1273,2.128,1383,2.128,1396,1.267,1436,3.604,1611,1.948,1654,1.775,1706,2.261,1756,3.604,1759,2.261,1832,3.831,1840,3.3,1858,1.622,1892,1.775,2066,3.985,2288,1.691,2290,5.866,2291,5.053,2294,5.26,2295,3.831,2296,5.431,2297,5.963,2298,2.464,2299,6.393,2300,5.431,2301,6.393,2302,5.519,2303,2.464,2304,2.464,2305,5.431,2306,2.464,2307,2.464,2308,4.174,2309,4.689,2310,2.464,2311,2.464,2312,2.464]],["tags/448",[]],["title/449",[202,3.688,2309,5.581]],["content/449",[16,1.15,28,2.927,32,0.966,102,3.18,106,1.879,129,2.782,164,2.451,171,2.866,194,2.207,202,6.272,252,2.896,258,3.027,274,3.377,286,2.959,326,2.207,371,2.657,392,2.152,427,4.014,476,3.743,652,2.431,873,2.611,888,3.063,930,4.812,931,4.406,973,3.599,1019,3.743,1021,3.418,1415,3.668,1716,4.586,1737,3.027,1769,3.418,1968,4.256,2066,3.475,2074,2.682,2297,4.014,2309,6.833,2313,5.573,2314,4.586,2315,5.114]],["tags/449",[]],["title/450",[108,2.758,202,3.688]],["content/450",[177,3.976,184,5.139,187,5.545,188,5.92,189,5.92,190,5.92,202,4.273,314,2.387,684,3.602,1053,5.545,1444,6.162,2297,5.394,2316,10.385,2317,7.957,2318,6.872,2319,6.466,2320,6.872,2321,6.872,2322,7.489,2323,7.489,2324,6.872]],["tags/450",[]],["title/458",[46,6.108]],["content/458",[32,1.361,46,5.993,47,2.158,48,3.398,49,5.512,50,7.177,51,3.709,52,4.893,53,2.351,70,3.108,101,4.926,415,3.81,873,4.669,2325,6.434,2326,6.204]],["tags/458",[]],["title/459",[2327,7.341]],["content/459",[861,4.293,2327,11.302,2328,12.025,2329,5.218,2330,5.218,2331,5.218,2332,5.218,2333,8.869,2334,5.218,2335,5.218,2336,5.218,2337,5.218,2338,7.548,2339,4.293,2340,7.548,2341,5.218,2342,5.218,2343,4.293,2344,5.218,2345,5.218,2346,7.548,2347,5.218,2348,5.218,2349,5.218,2350,5.218,2351,5.218,2352,6.927,2353,5.218,2354,5.218,2355,5.218,2356,5.218,2357,5.218]],["tags/459",[]],["title/460",[2358,7.341]],["content/460",[2343,9.101,2358,10.833,2359,8.534,2360,9.3,2361,9.3]],["tags/460",[]],["title/461",[105,5.762]],["content/461",[105,8.104,2362,9.572,2363,9.572,2364,8.784,2365,9.572]],["tags/461",[]],["title/462",[187,5.924]],["content/462",[16,1.187,51,3.859,186,4.601,187,9.29,1362,5.873,2339,6.72,2366,6.802,2367,4.531,2368,4.531,2369,6.802,2370,4.531,2371,4.531,2372,4.531,2373,4.531,2374,4.531,2375,4.531,2376,4.531,2377,9.729,2378,4.531,2379,6.048,2380,8.167,2381,8.167,2382,6.802,2383,4.531,2384,6.242,2385,4.531,2386,4.531,2387,4.531,2388,4.531,2389,4.531,2390,4.531,2391,4.531,2392,4.531,2393,6.802,2394,4.531,2395,4.531]],["tags/462",[]],["title/463",[2396,7.341]],["content/463",[2339,5.904,2359,6.584,2396,11.571,2397,11.134,2398,4.868,2399,4.868,2400,4.868,2401,7.176,2402,4.868,2403,4.868,2404,4.868,2405,4.868,2406,4.868,2407,11.559,2408,4.868,2409,4.868,2410,4.868,2411,4.868,2412,4.868,2413,4.868,2414,4.868,2415,4.868,2416,4.868,2417,4.868,2418,7.176,2419,4.868,2420,4.868,2421,4.868,2422,4.868,2423,4.868,2424,4.868]],["tags/463",[]],["title/464",[2425,7.341]],["content/464",[2425,9.33,2426,10.168]],["tags/464",[]],["title/465",[2427,7.341]],["content/465",[2427,10.324,2428,11.251,2429,9.572,2430,9.572]],["tags/465",[]],["title/466",[1814,6.907]],["content/466",[1814,8.644,2431,10.012,2432,10.012]],["tags/466",[]],["title/467",[255,4.907]],["content/467",[255,6.141,2352,9.187,2433,10.012]],["tags/467",[]],["title/468",[2434,6.907]],["content/468",[795,4.788,2339,4.293,2434,10.856,2435,5.218,2436,5.218,2437,8.869,2438,5.218,2439,5.218,2440,7.548,2441,5.218,2442,9.719,2443,5.218,2444,5.218,2445,5.218,2446,5.218,2447,5.218,2448,5.218,2449,5.218,2450,11.085,2451,5.218,2452,5.218,2453,7.548,2454,5.218,2455,5.218,2456,5.218,2457,5.218,2458,5.218,2459,5.218,2460,7.548,2461,5.218,2462,5.218]],["tags/468",[]],["title/469",[2463,7.341]],["content/469",[165,0.954,234,1.885,287,1.701,362,2.761,812,2.608,2217,2.736,2268,2.908,2379,2.347,2463,11.625,2464,3.169,2465,3.169,2466,3.169,2467,5.143,2468,3.169,2469,3.169,2470,3.169,2471,8.213,2472,3.169,2473,3.169,2474,3.169,2475,3.169,2476,2.908,2477,3.169,2478,3.169,2479,12.328,2480,2.908,2481,3.169,2482,3.169,2483,3.169,2484,3.169,2485,3.169,2486,3.169,2487,3.169,2488,3.169,2489,3.169,2490,3.169,2491,3.169,2492,3.169,2493,3.169,2494,3.169,2495,3.169,2496,3.169,2497,5.143,2498,5.143,2499,3.169,2500,3.169,2501,3.169,2502,3.169,2503,3.169,2504,5.143,2505,5.143,2506,3.169,2507,3.169,2508,3.169,2509,3.169,2510,3.169,2511,3.169,2512,3.169,2513,3.169,2514,2.908,2515,3.169,2516,3.169]],["tags/469",[]],["title/470",[2517,7.341]],["content/470",[2517,9.33,2518,10.168]],["tags/470",[]],["title/471",[2519,7.341]],["content/471",[2519,11.323,2520,8.35,2521,8.35,2522,8.35,2523,8.35,2524,8.35,2525,8.35,2526,8.35,2527,8.35,2528,8.35,2529,8.35]],["tags/471",[]],["title/472",[2530,7.341]],["content/472",[2530,9.049,2531,9.861,2532,9.861,2533,9.861]],["tags/472",[]],["title/473",[2534,7.341]],["content/473",[786,6.18,1053,6.516,2384,8.074,2480,9.817,2534,10.578,2535,11.528,2536,8.799]],["tags/473",[]],["title/474",[2537,7.341]],["content/474",[64,7.414,2537,9.187,2538,10.012]],["tags/474",[]],["title/475",[2539,7.341]],["content/475",[2539,11.497,2540,6.329,2541,6.329,2542,8.647,2543,6.329,2544,6.329,2545,12.09,2546,6.329,2547,6.329,2548,6.329,2549,6.329,2550,6.329,2551,6.329,2552,6.329,2553,6.329,2554,6.329,2555,6.329,2556,6.329,2557,6.329,2558,6.329]],["tags/475",[]],["title/451",[54,5.49]],["content/451",[32,1.345,47,2.132,48,3.358,49,5.447,50,7.123,51,3.665,52,4.835,53,2.323,55,5.922,56,6.696,70,3.071,101,4.889,415,3.789,873,4.633,2325,6.385,2326,6.13]],["tags/451",[]],["title/452",[2559,7.341]],["content/452",[0,1.342,1238,6.872,2559,11.649,2560,7.489,2561,7.489,2562,7.489,2563,7.489,2564,7.489,2565,7.489,2566,7.489,2567,7.489,2568,7.489,2569,7.489,2570,7.489,2571,7.489]],["tags/452",[]],["title/453",[2317,6.583]],["content/453",[2317,10.35,2572,8.569,2573,8.569,2574,8.569,2575,8.569,2576,8.569,2577,8.569,2578,8.569]],["tags/453",[]],["title/454",[2579,7.341]],["content/454",[2579,9.33,2580,10.168]],["tags/454",[]],["title/455",[2291,6.324]],["content/455",[0,1.025,54,5.531,55,6.154,572,4.188,747,8.762,1200,6.911,1543,7.396,1593,4.938,2291,9.668,2581,5.72,2582,5.72,2583,10.683,2584,5.72,2585,5.72,2586,5.72,2587,5.72,2588,5.72,2589,8.06,2590,5.72,2591,5.72,2592,5.72,2593,5.72,2594,5.72,2595,5.72,2596,5.72]],["tags/455",[]],["title/456",[2597,7.341]],["content/456",[2597,10.505,2598,9.861,2599,9.861]],["tags/456",[]],["title/457",[2600,7.341]],["content/457",[2600,11.736,2601,7.576,2602,7.576,2603,7.576,2604,7.576,2605,7.576,2606,7.576,2607,7.576,2608,7.576,2609,7.576,2610,7.576,2611,7.576,2612,7.576]],["tags/457",[]],["title/479",[100,5.073]],["content/479",[5,3.487,18,4.844,32,1.547,76,3.7,83,4.409,91,5.024,100,5.656,101,4.409,102,5.09,103,5.386,104,2.41]],["tags/479",[]],["title/480",[3,1.425,163,2.299]],["content/480",[3,2.419,100,5.815,1396,4.715,1623,6.79,2068,6.158,2249,7.001,2613,7.545,2614,9.17]],["tags/480",[]],["title/481",[218,2.627,684,3.109]],["content/481",[1,2.154,78,2.722,100,6.866,164,2.298,167,2.419,218,3.115,253,3.115,261,2.419,262,3.503,318,5.383,356,2.183,374,4.86,684,4.72,2154,7.033,2615,7.664,2616,7.664,2617,7.033]],["tags/481",[]],["title/476",[105,5.762]],["content/476",[3,1.945,32,1.13,51,3.08,70,3.96,94,3.461,101,3.222,106,2.197,107,7.023,108,3.764,109,3.764,110,5.628,111,5.628,154,3.352,163,2.319,164,1.383,171,3.352,193,3.877,198,6.532,330,3.352,346,3.672,392,2.517,687,5.363,873,3.054,1211,5.628,1640,4.695,2087,5.363,2618,5.981,2619,5.981,2620,5.363,2621,5.628]],["tags/476",[]],["title/477",[164,1.698]],["content/477",[1,2.233,104,2.147,107,5.579,108,3.389,109,3.389,164,2.336,167,3.17,253,3.229,271,3.754,326,3.146,356,2.263,392,3.067,402,3.722,1749,3.927,1769,4.872,2622,10.041]],["tags/477",[]],["title/478",[3,1.425,163,2.299]],["content/478",[3,2.142,693,7.193,1396,4.996,2068,6.524,2613,7.994]],["tags/478",[]],["title/482",[185,4.656,186,3.641]],["content/482",[]],["tags/482",[]],["title/483",[187,3.458,188,3.692,189,3.692,190,3.692]],["content/483",[164,1.946,469,5.921,610,5.537,686,4.491,1844,6.79,2068,6.158,2249,7.001,2316,8.414,2613,7.545]],["tags/483",[]],["title/484",[2320,7.341]],["content/484",[164,1.946,469,5.921,610,5.537,686,4.491,1844,6.79,2068,6.158,2249,7.001,2613,7.545,2623,9.17]],["tags/484",[]],["title/485",[2624,6.583]],["content/485",[2,1.629,14,2.552,16,1.356,86,2.727,101,2.828,108,2.44,142,2.035,163,2.035,176,3.004,186,4.54,193,3.403,202,6.325,218,2.325,242,1.771,275,2.751,392,3.112,419,3.107,472,3.693,530,5.413,538,3.693,567,3.354,812,4.706,986,3.454,1048,3.627,1281,4.367,1358,4.706,1611,4.521,2076,5.025,2102,3.308,2192,5.249,2624,8.338,2625,9.223,2626,5.72,2627,5.72]],["tags/485",[]],["title/486",[302,4.627]],["content/486",[0,0.835,1,1.31,3,1.532,6,2.943,8,4.739,15,2.943,16,1.207,66,2.772,72,2.241,135,2.732,150,2.695,164,0.989,186,2.625,194,1.845,202,5.892,238,1.933,242,2.151,264,2.221,274,1.988,314,1.485,340,3.129,346,3.913,353,2.112,356,1.979,359,3.558,362,2.502,392,1.799,402,2.183,437,4.276,450,2.772,458,4.023,713,3.683,799,3.198,986,2.814,1067,5.699,1191,3.129,1749,2.304,1769,2.858,1787,3.683,1831,3.129,1858,3.067,1874,3.558,2102,4.017,2302,4.023,2624,8.802,2625,4.023,2628,4.66,2629,6.375,2630,4.276,2631,3.558,2632,3.834,2633,4.66,2634,3.683]],["tags/486",[]],["title/487",[2,1.841,173,4.254]],["content/487",[1,2.347,16,1.213,202,4.765,274,3.563,356,2.951,390,4.765,579,3.98,701,4.623,2102,4.829,2302,7.209,2624,6.87,2625,7.209,2629,7.662,2630,7.662]],["tags/487",[]],["title/488",[191,4.935,192,2.627]],["content/488",[9,2.711,16,1.471,24,4.094,26,4.053,32,1.394,138,5.1,154,4.135,191,6.14,192,4.113,193,4.784,194,3.184,195,4.932,196,5.013,197,6.357,198,5.955,199,6.14]],["tags/488",[]],["title/489",[164,1.151,167,1.712,326,2.147]],["content/489",[1,2.035,12,1.223,16,1.375,78,2.008,122,4.187,164,1.536,178,3.182,192,2.943,298,3.762,314,2.308,356,2.062,468,3.723,1191,4.862,2232,6.251,2635,7.784,2636,6.644,2637,9.46,2638,8.681,2639,7.24,2640,8.681,2641,9.097]],["tags/489",[]],["title/490",[9,1.251,194,1.849,2635,3.843,2641,4.032]],["content/490",[5,2.711,9,2.463,16,1.336,78,2.55,194,2.745,242,2.146,302,4.009,314,2.931,317,4.994,468,3.565,537,4.397,948,5.986,958,5.134,1494,6.174,2074,3.115,2100,5.986,2635,5.705,2641,10.348,2642,6.933,2643,6.933]],["tags/490",[]],["title/491",[154,3.324,192,2.627]],["content/491",[6,2.581,16,0.885,27,2.904,34,6.067,78,2.678,146,4.279,154,3.133,167,1.923,192,4.444,194,2.413,197,4.816,314,1.942,368,5.014,385,2.493,416,3.357,443,3.389,471,3.737,480,2.324,502,4.389,589,3.798,672,4.181,721,3.573,873,2.855,894,3.071,1515,3.864,1633,3.798,1831,4.092,2048,5.26,2102,3.524,2195,5.591,2635,5.014,2638,7.73,2640,5.591,2644,6.093,2645,6.093,2646,6.093]],["tags/491",[]],["title/492",[192,2.627,2325,4.174]],["content/492",[32,1.361,47,2.158,48,3.398,49,5.512,50,7.177,51,3.709,52,4.893,53,2.351,70,3.108,101,4.926,192,3.19,415,3.81,873,4.669,2325,6.434,2326,6.204]],["tags/492",[]],["title/493",[861,5.319,2232,5.581]],["content/493",[2647,10.168,2648,10.168]],["tags/493",[]],["title/494",[200,4.254,201,4.54]],["content/494",[]],["tags/494",[]],["title/495",[200,5.265]],["content/495",[]],["tags/495",[]],["title/496",[202,4.565]],["content/496",[5,2.769,32,1.228,71,4.277,76,2.938,102,4.042,164,1.503,200,6.137,202,5.949,205,5.245,248,3.72,275,3.406,530,4.757,909,6.5,1120,3.803,2069,6.115,2434,6.115,2649,6.115,2650,9.325,2651,7.083,2652,9.325,2653,6.115,2654,9.325,2655,7.083,2656,7.083]],["tags/496",[]],["title/497",[2657,6.108]],["content/497",[12,1.113,23,1.892,32,1.142,51,3.111,71,3.976,78,1.826,101,3.255,106,2.219,164,1.397,178,2.893,200,6.614,202,5.735,225,4.875,272,2.985,314,2.099,409,2.369,415,2.291,529,3.138,558,2.769,823,4.875,1029,4.624,2056,5.027,2325,4.251,2657,8.215,2658,6.041,2659,6.584,2660,6.584,2661,6.584,2662,6.041,2663,6.041]],["tags/497",[]],["title/498",[2325,5.165]],["content/498",[32,1.361,47,2.158,48,3.398,49,5.512,50,7.177,51,3.709,52,4.893,53,2.351,70,3.108,101,4.926,200,5.165,415,3.81,873,4.669,2325,6.434,2326,6.204]],["tags/498",[]],["title/499",[2657,6.108]],["content/499",[5,1.796,20,2.25,200,4.524,202,2.622,208,2.774,230,1.831,415,1.599,529,3.277,2657,9.595,2658,4.216,2662,10.271,2663,4.216,2664,10.647,2665,4.594,2666,4.594,2667,4.594,2668,4.594,2669,4.594,2670,4.594,2671,4.594,2672,10.647,2673,4.594,2674,4.594,2675,4.594,2676,4.594,2677,4.594,2678,4.594,2679,4.594,2680,4.594,2681,4.594,2682,4.594,2683,4.594,2684,4.594,2685,4.594,2686,4.594,2687,4.594]],["tags/499",[]],["title/500",[201,5.619]],["content/500",[]],["tags/500",[]],["title/501",[2657,6.108]],["content/501",[5,3.35,12,1.448,109,3.656,154,4.406,164,1.818,195,5.255,201,7.393,719,7.398,1840,6.773,2657,8.037,2688,8.569,2689,8.569]],["tags/501",[]],["title/502",[139,2.738,201,4.54]],["content/502",[29,5.273,47,2.013,78,2.031,79,4.727,139,4.037,200,6.271,201,5.142,261,2.311,418,2.224,449,3.804,459,4.421,570,4.643,1023,6.024,1046,6.321,1237,4.916,1449,4.916,2690,9.146,2691,6.718,2692,6.024,2693,7.321,2694,7.321,2695,7.321,2696,7.321]],["tags/502",[]],["title/503",[1537,6.108]],["content/503",[24,4.197,26,4.155,32,1.43,53,2.469,73,5.203,76,3.42,78,2.287,104,2.228,231,5.14,249,3.93,253,3.351,295,6.105,669,4.076,1229,6.295,2697,8.244]],["tags/503",[]],["title/504",[94,3.432,2203,4.174]],["content/504",[2,1.755,7,3.596,9,1.066,10,2.005,12,1.041,23,1.144,24,2.026,32,1.863,53,1.192,66,2.367,73,3.503,76,2.556,94,2.113,102,2.271,104,1.665,108,1.698,118,1.931,163,2.682,164,1.307,167,2.68,196,2.481,209,3.779,240,1.536,249,1.897,253,1.617,326,1.576,345,1.408,353,2.793,362,4.048,371,1.897,374,2.523,542,1.556,558,1.674,565,4.228,591,3.274,624,2.214,652,2.687,653,5.319,686,1.949,707,3.978,743,2.523,794,2.161,894,3.105,939,5.43,965,3.145,1133,2.866,1271,2.73,1360,2.187,1454,3.145,1494,2.672,1535,3.435,1778,4.438,1779,3.038,1844,2.946,1970,5.07,2062,2.523,2066,4.7,2698,3.979,2699,3.435,2700,6.204,2701,3.435,2702,3.979]],["tags/504",[]],["title/505",[108,2.758,1941,5.581]],["content/505",[3,1.013,5,1.796,11,1.691,12,0.776,16,0.668,17,2.733,32,1.697,44,3.508,53,1.376,60,2.387,66,2.733,72,2.21,73,3.193,78,1.274,101,2.271,103,2.774,104,1.242,108,2.933,167,1.45,218,1.867,238,3.792,239,4.285,253,1.867,318,3.227,371,2.19,385,2.813,432,2.622,459,2.774,463,3.023,529,2.19,530,3.085,611,3.023,658,3.227,661,5.051,848,3.227,894,2.316,939,3.309,958,3.402,967,3.153,1396,2.363,1430,2.864,1451,3.508,1484,2.556,1533,4.216,1566,3.78,1632,3.632,1702,3.632,1736,3.309,1740,3.085,1882,6.098,1883,4.216,1884,4.216,1941,5.935,1948,5.935,1951,4.216,1963,4.216,2004,3.967,2037,3.402,2065,3.632,2141,3.78,2284,3.967,2703,4.594,2704,4.594]],["tags/505",[]],["title/509",[12,0.789,32,0.81,162,3.015,163,1.661]],["content/509",[1,3.337,12,1.051,16,0.904,32,1.078,47,1.108,70,1.595,104,1.681,163,1.433,164,2.071,165,2.286,166,3.028,167,3.211,175,1.683,198,5.626,217,1.955,248,2.115,261,1.963,272,1.826,332,4.034,356,3.072,371,1.92,397,5.102,409,1.449,415,1.402,515,4.687,562,3.815,686,4.523,1024,2.299,1517,3.076,1760,3.314,1761,5.801,2203,2.601,2705,9.234,2706,4.028]],["tags/509",[]],["title/506",[32,0.81,167,1.474,168,3.015,169,3.28]],["content/506",[4,2.301,5,3.032,12,1.311,16,1.127,32,1.345,78,2.151,104,2.672,164,1.646,165,2.334,167,2.448,168,5.007,170,3.834,171,5.085,172,4.369,173,5.104,174,5.322,175,3.239,238,3.217,799,5.322,1330,5.447]],["tags/506",[]],["title/507",[4,1.609,167,1.712,168,3.501]],["content/507",[1,2.377,4,3.099,104,2.286,142,3.009,167,3.296,168,6.742,314,2.696,415,2.943,518,4.491,956,4.764,1749,5.162]],["tags/507",[]],["title/508",[169,5.619]],["content/508",[1,2.039,4,2.994,5,1.932,12,1.226,16,0.718,18,2.684,22,3.404,23,2.471,32,0.857,78,2.012,86,2.356,104,1.961,142,1.758,167,2.99,168,5.551,169,3.471,172,2.784,173,5.657,175,2.064,234,2.94,314,1.575,334,1.896,339,3.191,346,2.784,356,1.408,383,5.613,388,2.94,390,2.82,392,1.908,409,1.778,432,2.82,476,4.872,494,2.568,594,4.066,783,2.82,796,4.534,1037,3.191,1330,5.096,1749,2.443,1831,3.318,2278,4.534,2707,3.659,2708,4.534,2709,4.942,2710,3.031]],["tags/508",[]],["title/510",[23,1.858,163,2.299]],["content/510",[1,2.18,12,1.311,16,1.437,32,1.345,73,3.603,104,2.096,106,2.614,163,2.759,167,2.448,170,3.834,176,4.073,177,4.118,178,4.785,179,4.683,180,5.743,181,4.683,182,3.988,183,4.262,184,5.322]],["tags/510",[]],["title/511",[23,1.858,469,4.174]],["content/511",[11,2.307,12,1.452,16,1.248,23,2.469,32,1.699,48,2.714,104,1.694,165,2.585,167,2.711,178,4.633,179,5.187,180,4.641,181,5.187,242,1.941,331,2.531,345,2.218,392,2.42,469,4.047,473,5.752,474,7.416,481,4.301,539,3.676,583,4.024,660,4.047,661,3.844,1997,5.158,2711,6.268,2712,6.268]],["tags/511",[]],["title/512",[23,1.559,163,1.929,261,1.712]],["content/512",[1,3.328,16,0.604,23,2.957,47,1.143,104,1.123,163,1.479,165,2.974,166,3.088,167,1.312,178,1.826,222,2.973,261,2.011,342,8.239,356,3.265,409,3.555,415,3.023,455,2.835,464,2.036,474,3.588,480,3.573,481,2.852,494,4.026,1024,2.372,2203,2.684,2713,4.156]],["tags/512",[]],["title/513",[209,3.964,2700,5.319]],["content/513",[]],["tags/513",[]],["title/514",[32,1.121,164,1.372]],["content/514",[12,1.599,14,3.231,16,1.052,31,3.932,32,1.827,72,3.482,150,4.187,247,6.491,298,3.762,307,4.968,409,2.605,441,3.421,494,3.762,558,3.045,743,5.999,1037,4.675,1517,5.528,1736,5.215,2314,5.957,2714,6.644,2715,10.537]],["tags/514",[]],["title/515",[32,0.94,1882,4.015,2716,5.423]],["content/515",[10,2.987,14,2.645,16,1.201,106,2.786,149,5.745,172,3.339,217,5.253,247,4.067,284,3.08,285,3.182,300,3.579,307,4.067,475,5.726,712,3.635,743,3.759,767,3.297,920,3.552,1073,4.685,1237,3.98,1450,4.685,1467,3.579,1559,5.952,1603,4.269,1624,4.526,1873,3.339,1882,4.389,2013,5.117,2717,5.927,2718,5.439,2719,5.927,2720,5.117,2721,4.685,2722,5.927,2723,7.135]],["tags/515",[]],["title/516",[284,2.818,285,2.911,1287,3.439]],["content/516",[10,2.858,12,0.958,16,1.164,23,1.63,32,1.846,47,1.559,73,2.634,209,4.913,247,3.891,253,2.305,284,2.946,285,3.044,298,2.946,566,3.194,614,3.731,660,3.661,661,4.913,743,3.596,767,5.615,774,3.279,914,4.482,1271,3.891,1277,5.203,1287,7.009,1739,4.895,1952,7.351,1953,7.351,1959,4.895,2700,7.643,2724,9.289,2725,5.67,2726,5.67]],["tags/516",[]],["title/517",[542,2.12,774,3.136,2727,4.976]],["content/517",[251,5.192,318,5.648,542,4.329,732,6.943,743,6.417,774,4.651,1219,4.856,1567,7.379,1804,6.943,2013,6.943,2632,6.617,2727,9.285,2728,8.042,2729,8.042,2730,8.042]],["tags/517",[]],["title/518",[1454,5.11,2700,5.319]],["content/518",[230,3.815,743,6.07,1559,6.895,2701,8.264,2731,9.572,2732,9.572]],["tags/518",[]],["title/540",[163,2.299,240,2.496]],["content/540",[]],["tags/540",[]],["title/541",[163,1.929,240,2.094,241,3.501]],["content/541",[2,2.684,5,2.276,10,4.113,32,1.009,67,3.909,75,3.515,86,2.775,104,2.546,118,2.825,163,3.825,240,4.511,241,6.594,267,3.279,275,2.8,351,6.231,385,2.382,506,2.851,697,3.322,744,3.831,986,3.515,1273,5.026,1798,4.602,2038,4.602,2379,4.311,2733,5.026,2734,4.193,2735,5.822,2736,3.629,2737,5.822,2738,4.79]],["tags/541",[]],["title/542",[240,2.094,314,1.729,2041,2.478]],["content/542",[32,1.329,164,1.626,240,4.408,242,2.373,385,3.136,388,4.559,542,2.997,567,4.494,1484,4.264,1485,6.617,1737,4.163,1748,6.307,1858,5.044,2023,6.307,2041,4.485,2104,4.628,2152,7.033,2739,4.701,2740,7.033]],["tags/542",[]],["title/543",[240,2.435,242,1.27,518,2.177,2041,1.874]],["content/543",[0,1.374,9,2.63,13,5.044,47,2.107,163,3.492,165,2.306,240,4.181,241,6.337,242,2.373,261,2.419,356,2.796,535,6.617,2104,4.628,2174,7.033,2190,7.758,2741,5.675]],["tags/543",[]],["title/544",[464,2.656,1115,4.015,1170,2.945]],["content/544",[0,1.072,3,1.834,9,1.603,16,0.869,78,1.659,109,2.552,163,2.959,165,2.503,240,4.194,241,5.37,262,2.733,276,2.282,324,3.192,356,2.944,357,4.201,358,4.308,409,2.152,418,1.817,455,2.189,920,3.574,1115,4.429,1170,4.517,1360,3.287,1484,3.327,1789,5.164,2742,8.317,2743,8.317,2744,7.632,2745,5.489,2746,5.981]],["tags/544",[]],["title/545",[1170,4.345]],["content/545",[]],["tags/545",[]],["title/546",[164,0.991,580,2.536,894,2.354,1170,2.536]],["content/546",[12,1.051,16,0.585,32,0.698,78,1.117,118,4.937,164,1.32,202,5.996,218,2.528,242,1.247,244,1.887,276,1.536,286,2.139,310,4.268,352,2.601,392,1.555,424,5.515,464,3.046,580,2.188,585,4.368,1169,5.214,1170,5.015,1247,4.917,1920,2.764,2288,5.863,2297,7.568,2317,5.118,2318,5.707,2319,5.37,2321,5.707,2324,5.707,2747,6.22,2748,7.84,2749,5.707,2750,6.22,2751,5.37,2752,6.22]],["tags/546",[]],["title/547",[4,1.217,240,1.584,242,1.27,580,2.227,1170,2.227]],["content/547",[163,2.792,165,2.362,240,4.447,241,5.068,242,2.43,296,3.148,334,3.012,356,2.236,418,2.384,424,3.646,580,5.412,668,5.512,920,3.373,1169,5.386,1170,5.412,2753,7.849]],["tags/547",[]],["title/519",[242,2.001,243,2.274]],["content/519",[32,1.505,73,4.034,129,4.334,133,2.781,164,1.842,175,3.627,243,3.055,244,4.068,245,4.512,246,5.606,247,5.958,248,4.56,249,4.139]],["tags/519",[]],["title/520",[289,3.395,1623,4.786]],["content/520",[32,1.486,106,2.888,164,1.818,245,4.452,246,5.533,289,4.5,306,4.452,757,5.097,1271,5.88,1517,6.542,1623,6.345,1966,7.863,2754,8.569,2755,8.569]],["tags/520",[]],["title/521",[156,4.254,1450,5.11]],["content/521",[32,1.568,156,5.951,164,1.919,245,4.699,246,5.839,742,7.807,1450,7.148,2065,7.148,2756,9.043,2757,9.043]],["tags/521",[]],["title/522",[3,1.425,163,2.299]],["content/522",[3,2.197,65,3.212,118,3.809,133,3.192,148,4.739,163,2.792,243,3.506,244,3.677,268,3.19,270,3.956,304,3.709,515,4.591,2138,8.199,2213,5.993,2620,6.458,2758,7.202]],["tags/522",[]],["title/523",[2138,6.583]],["content/523",[]],["tags/523",[]],["title/524",[3,1.425,515,2.978]],["content/524",[]],["tags/524",[]],["title/525",[2213,6.108]],["content/525",[]],["tags/525",[]],["title/526",[117,4.656,2759,4.935]],["content/526",[32,1.415,70,2.305,105,4.193,106,1.962,117,4.193,151,4.193,164,1.732,167,1.838,242,1.802,243,2.048,245,3.025,246,3.759,248,3.057,249,2.775,253,2.366,257,5.732,364,5.605,383,3.239,417,3.571,462,4.79,566,3.279,686,2.851,783,3.322,1980,6.451,2149,5.026,2255,6.715,2759,7.195,2760,4.79,2761,6.451,2762,7.046,2763,5.026,2764,7.046,2765,7.489,2766,5.822,2767,5.822,2768,5.822,2769,5.822]],["tags/526",[]],["title/527",[2762,6.907]],["content/527",[51,3.384,70,2.836,108,3.055,155,4.624,172,4.034,248,3.761,254,4.141,258,3.889,314,2.283,324,2.748,362,3.845,364,4.26,635,4.88,686,3.507,1200,5.302,1284,4.712,2325,4.624,2733,6.182,2759,5.468,2760,5.892,2762,8.109,2763,8.109,2770,7.161,2771,7.161,2772,7.161,2773,7.161]],["tags/527",[]],["title/528",[1980,6.324]],["content/528",[12,1.342,14,3.545,148,4.797,164,1.686,167,2.508,253,3.229,257,5.579,297,4.872,323,6.537,332,4.218,364,4.726,1356,6.537,1608,6.537,1980,9.144,2774,7.944,2775,7.944,2776,7.944]],["tags/528",[]],["title/529",[2764,6.907]],["content/529",[70,3.071,172,4.369,248,4.073,314,2.472,324,2.976,362,4.164,364,4.613,417,6.065,635,5.139,686,3.798,954,5.586,1284,5.104,2156,6.696,2325,5.007,2759,5.922,2760,6.381,2764,6.696,2777,7.755,2778,7.755,2779,7.755]],["tags/529",[]],["title/530",[2255,6.583]],["content/530",[12,1.295,164,1.626,167,2.419,253,3.115,257,5.383,324,2.941,332,4.069,363,4.701,364,4.559,417,4.701,467,3.503,635,3.983,686,3.754,763,5.852,1980,6.059,2255,8.909,2763,6.617,2780,7.664,2781,7.664,2782,7.664,2783,6.617]],["tags/530",[]],["title/531",[2761,6.324]],["content/531",[70,3.108,172,4.421,248,4.122,314,2.502,324,3.012,362,4.214,364,4.669,635,5.178,686,5.362,954,5.653,1284,5.165,1311,5.653,2325,5.068,2759,5.993,2760,6.458,2761,6.204,2784,7.849,2785,7.849]],["tags/531",[]],["title/532",[331,2.61,2016,5.319]],["content/532",[2,1.247,7,2.809,9,2.144,12,1.12,53,1.312,86,2.087,87,2.499,106,1.476,108,3.414,114,2.186,164,1.698,167,1.382,194,2.625,222,1.68,248,2.3,253,1.78,257,6.267,299,1.734,314,2.113,326,1.734,331,2.677,334,2.544,402,3.106,415,1.524,441,2.069,684,2.106,774,5.16,872,1.829,920,3.438,941,3.075,1196,2.406,1290,5.47,1975,4.018,2016,5.455,2022,6.084,2038,3.461,2074,2.247,2103,3.075,2158,7.342,2288,3.005,2733,3.781,2761,5.241,2786,10.086,2787,4.379,2788,4.379,2789,4.379,2790,4.379,2791,4.379,2792,4.379,2793,4.379,2794,4.379]],["tags/532",[]],["title/533",[198,5.924]],["content/533",[133,2.897,243,3.182,268,3.676,270,4.558,304,4.273,515,4.166,2621,10.071,2795,8.298]],["tags/533",[]],["title/534",[2621,6.907]],["content/534",[]],["tags/534",[]],["title/535",[2795,7.341]],["content/535",[]],["tags/535",[]],["title/536",[39,5.619]],["content/536",[133,2.675,243,2.938,268,3.394,270,4.208,304,3.946,515,5.189,2088,8.944,2153,9.506,2758,9.506,2796,7.662,2797,7.662]],["tags/536",[]],["title/537",[2088,6.907]],["content/537",[]],["tags/537",[]],["title/538",[2796,7.341]],["content/538",[]],["tags/538",[]],["title/539",[2797,7.341]],["content/539",[]],["tags/539",[]],["title/550",[164,1.372,250,4.099]],["content/550",[6,3.209,21,3.896,27,3.611,32,1.867,66,4.507,94,4.022,95,3.549,104,2.047,106,2.554,164,2.067,296,3.039,326,3,353,3.434,443,4.214,467,3.462,506,3.71,583,3.549,677,5.321,706,4.022,1887,4.985,2798,6.952]],["tags/550",[]],["title/551",[66,3.845,95,3.028]],["content/551",[32,1.613,90,6.886,95,4.357,334,3.569,362,4.993,387,6.486,566,5.239]],["tags/551",[]],["title/552",[95,3.028,1831,4.341]],["content/552",[]],["tags/552",[]],["title/553",[118,3.137,121,4.436]],["content/553",[0,0.829,3,2.353,15,1.96,32,1.786,38,2.752,95,3.875,213,3.78,268,3.362,308,3.807,331,1.868,362,2.484,367,3.133,387,5.756,392,1.787,432,3.943,449,2.404,566,2.606,572,2.404,577,2.838,587,3.045,626,2.987,690,2.513,739,6.124,890,6.805,896,5.966,1786,5.686,1791,5.462,1831,6.16,1833,2.097,2092,2.987,2093,3.995,2634,3.657,2721,5.462,2799,4.246,2800,4.627,2801,6.341,2802,4.627,2803,4.627,2804,6.315,2805,4.627,2806,6.341]],["tags/553",[]],["title/554",[115,3.108]],["content/554",[3,2.176,6,2.283,7,2.283,16,0.783,38,3.206,41,3.076,95,3.62,115,2.094,148,3.254,164,1.144,213,3.531,261,1.701,268,3.141,387,3.16,416,2.148,418,1.637,449,2.801,450,3.206,550,3.076,697,3.076,739,5.721,890,7.432,896,7.798,1552,3.036,1753,4.115,1758,4.115,1787,4.26,1791,4.26,1831,5.189,2256,4.946,2721,4.26,2799,4.946,2801,4.946,2804,5.9,2806,4.946,2807,5.39,2808,5.39,2809,5.39,2810,4.653,2811,5.39,2812,7.727,2813,4.653,2814,4.946,2815,4.946,2816,4.653]],["tags/554",[]],["title/555",[324,2.081,1887,3.569,2817,4.976]],["content/555",[3,1.513,7,2.906,16,0.997,66,4.081,71,4.142,78,1.903,87,3.915,95,4.807,195,6.709,240,3.525,287,3.683,296,2.752,443,3.816,675,4.818,684,3.299,873,3.214,920,2.948,1677,4.707,1887,4.515,2049,5.895,2117,5.923,2818,6.971,2819,6.86,2820,5.645,2821,5.923]],["tags/555",[]],["title/556",[118,3.882]],["content/556",[0,0.661,3,0.595,5,0.586,6,0.635,7,1.144,15,1.144,16,0.985,18,0.814,25,1.079,26,0.755,38,0.891,47,0.412,66,1.606,76,0.622,78,0.749,86,0.714,87,3.312,91,2.932,93,0.967,94,1.957,95,4.407,101,0.741,103,2.225,115,1.049,142,1.852,154,0.771,195,5.554,213,0.685,216,0.867,240,0.579,260,1.84,261,1.163,262,1.684,264,1.287,268,0.609,271,1.276,274,0.639,276,1.72,292,1.502,296,0.601,314,1.437,324,0.575,330,1.389,338,1.389,346,0.844,349,1.052,353,0.679,356,0.769,382,1.11,387,3.707,391,0.855,392,0.579,402,1.727,409,0.539,416,1.076,433,1.294,441,0.708,443,4.37,449,0.779,467,1.684,471,0.919,480,0.572,488,0.934,498,0.905,502,1.945,515,1.698,521,0.879,529,1.287,550,1.541,562,0.919,577,1.656,605,1.294,611,0.986,622,1.813,627,1.11,668,1.052,672,1.028,675,1.052,690,1.467,701,0.669,706,0.796,721,0.879,739,1.11,743,0.95,760,1.698,783,0.855,872,2.641,873,1.727,890,1.233,894,0.755,920,0.644,924,1.777,970,2.589,998,1.233,1027,1.233,1054,1.502,1104,0.905,1133,1.079,1235,0.805,1255,1.294,1275,0.891,1381,0.879,1415,0.986,1483,2.025,1492,1.606,1493,1.028,1494,1.006,1640,2.655,1688,1.233,1716,1.233,1745,2.192,1749,1.822,1802,3.361,1817,1.233,1833,1.671,1997,1.233,2033,1.294,2034,2.222,2048,3.892,2049,5.719,2074,2.142,2091,0.95,2103,2.589,2619,1.375,2649,1.294,2738,1.233,2761,3.564,2783,2.331,2804,1.144,2813,1.294,2818,4.827,2821,1.294,2822,2.7,2823,0.919,2824,1.498,2825,3.182,2826,2.331,2827,3.686,2828,1.498,2829,1.498,2830,1.233,2831,2.331,2832,2.478,2833,1.233,2834,1.375,2835,1.375,2836,1.375,2837,1.375,2838,1.375,2839,6.463,2840,1.498,2841,1.375,2842,1.375,2843,1.498,2844,1.375,2845,1.375,2846,1.498,2847,1.498,2848,1.498,2849,1.498,2850,2.478,2851,1.498,2852,1.498,2853,1.375,2854,1.498,2855,1.498,2856,1.375,2857,1.498,2858,1.498,2859,2.7,2860,1.375,2861,1.375,2862,1.498,2863,1.498,2864,1.498,2865,1.498,2866,2.478]],["tags/556",[]],["title/557",[115,3.108]],["content/557",[3,1.839,16,1.343,31,3.793,94,2.492,95,4.328,101,3.453,115,2.714,148,2.834,163,2.484,195,4.283,196,4.354,314,2.226,324,1.801,331,1.895,353,2.128,402,2.199,420,2.752,443,5.759,467,3.192,542,1.835,563,2.237,565,3.221,577,2.878,684,2.257,872,3.484,873,2.199,920,2.017,1483,3.838,1753,3.583,1840,3.71,2074,3.347,2815,6.409,2817,4.307,2818,5.332,2825,7.976,2826,4.052,2831,4.052,2867,4.693,2868,6.984,2869,4.693,2870,6.984,2871,4.693]],["tags/557",[]],["title/558",[121,5.49]],["content/558",[0,0.55,4,0.513,6,1.3,16,0.833,25,1.245,26,0.871,27,1.462,29,1.245,32,0.3,38,1.825,47,1.137,53,0.518,72,1.475,78,0.851,87,0.986,94,0.918,95,2.687,101,0.854,103,1.043,121,2.838,123,1.647,142,1.472,148,1.852,161,1.116,166,0.689,195,5.143,213,1.402,251,1.116,260,1.531,261,2.004,262,0.79,268,1.247,276,1.578,287,1.647,296,0.693,314,1.597,330,0.889,331,0.698,352,1.116,356,0.492,361,1.437,382,1.28,387,2.426,392,1.185,409,0.622,415,1.743,416,1.649,420,1.799,441,0.817,443,2.786,450,1.028,466,2.271,467,1.402,471,1.881,480,1.578,523,1.245,542,0.676,577,1.06,583,1.437,589,1.077,627,6.21,674,0.79,684,1.475,690,0.939,739,2.271,743,1.945,760,1.413,783,1.751,787,1.245,872,2.395,873,0.81,888,0.95,894,0.871,951,1.137,970,2.905,998,2.524,1048,1.096,1054,1.707,1133,1.245,1330,1.214,1379,1.214,1483,1.686,1494,1.16,1641,3.796,1682,1.586,1745,1.028,1749,1.517,1802,1.116,1806,1.422,1817,2.524,1841,1.586,1873,0.973,1997,2.524,2000,1.586,2033,1.492,2049,5.756,2074,2.329,2091,1.945,2112,1.28,2142,1.586,2293,1.586,2720,1.492,2739,3.072,2783,3.571,2804,2.342,2813,2.649,2818,3.158,2820,3.404,2821,2.649,2823,1.06,2825,4.325,2826,1.492,2831,3.571,2833,1.422,2839,2.524,2861,1.586,2866,2.815,2872,1.728,2873,1.728,2874,1.728,2875,1.586,2876,5.735,2877,1.728,2878,1.728,2879,1.728,2880,5.009,2881,1.728,2882,1.728,2883,3.068,2884,1.728,2885,1.728,2886,3.068,2887,4.136,2888,1.728,2889,3.068,2890,1.728,2891,3.068,2892,1.728,2893,1.728,2894,1.728,2895,1.728,2896,1.728,2897,3.068,2898,3.068,2899,1.728,2900,3.068,2901,1.728,2902,1.728,2903,1.728,2904,1.728,2905,3.068,2906,1.728,2907,1.728,2908,3.068,2909,1.728,2910,1.728,2911,1.728,2912,3.068,2913,3.068,2914,1.728,2915,1.728,2916,1.728,2917,1.586,2918,1.728]],["tags/558",[]],["title/559",[240,2.496,1887,4.254]],["content/559",[38,5.715,78,1.674,83,2.984,101,2.984,160,4.609,163,2.148,194,2.39,195,6.363,238,2.504,240,4.464,367,2.737,385,2.47,416,2.406,441,2.853,872,2.522,888,3.318,920,2.594,1275,3.591,1396,3.104,1515,3.828,1528,5.212,1737,3.279,1887,3.973,2049,3.898,2143,4.47,2183,4.24,2281,5.212,2710,3.702,2739,3.702,2818,7.921,2919,5.539,2920,5.212]],["tags/559",[]],["title/548",[1010,4.436,1483,3.552]],["content/548",[2,1.815,4,1.233,16,1.262,18,3.46,32,1.506,53,1.245,70,1.646,72,1.999,78,1.153,89,1.869,104,2.531,106,2.148,115,1.615,163,1.479,164,1.988,182,3.276,194,1.646,232,2.852,240,1.605,269,2.372,271,1.964,392,2.46,399,2.591,476,2.791,544,4.04,567,2.437,607,4.718,688,4.193,690,2.257,697,4.421,920,2.738,924,2.735,1010,6.782,1052,2.095,1083,2.636,1133,2.994,1186,3.814,1200,3.077,1357,3.42,1447,2.852,1483,3.501,1492,2.472,1526,3.173,1558,3.42,1677,2.852,2049,5.003,2055,3.588,2056,3.173,2137,4.718,2203,4.114,2379,3.077,2710,2.549,2734,2.994,2736,2.591,2739,2.549,2921,4.156,2922,3.588,2923,3.588,2924,3.814,2925,3.588]],["tags/548",[]],["title/549",[2736,4.987]],["content/549",[2,1.44,7,2.142,9,1.355,16,1.072,28,2.655,32,0.877,78,1.402,104,2.588,142,1.799,163,2.625,164,1.073,194,2.002,222,2.831,240,2.849,260,2.524,314,1.612,324,3.343,326,2.002,392,1.952,542,1.977,607,3.744,623,2.885,635,2.627,690,2.746,938,5.85,970,3.551,1010,6.572,1048,4.679,1483,4.055,2049,3.265,2074,2.5,2137,3.744,2379,3.744,2734,3.642,2736,4.599,2739,5.343,2820,4.16,2923,4.365,2924,4.64,2926,6.071,2927,5.056,2928,5.056,2929,4.365,2930,5.056,2931,5.056,2932,5.056]],["tags/549",[]],["title/561",[222,1.792,240,2.687,306,2.427]],["content/561",[6,2.265,16,0.777,24,2.721,25,3.85,26,2.694,27,3.662,32,1.559,47,1.47,95,2.505,108,2.281,129,2.668,150,4.442,164,1.134,222,2.948,240,4.02,274,3.277,276,2.039,306,5.107,317,3.85,335,4.226,338,2.749,340,3.59,385,2.188,392,2.064,416,2.13,494,2.778,529,2.548,546,3.754,674,2.443,697,3.05,998,4.399,1052,2.694,1654,3.85,1747,3.39,2168,4.615,2379,3.958,2736,5.605,2933,7.505,2934,4.082,2935,4.082,2936,5.346,2937,4.615]],["tags/561",[]],["title/562",[32,0.94,2934,4.14,2935,4.14]],["content/562",[0,1.268,13,2.373,15,2.416,16,0.829,32,1.395,78,1,95,2.673,106,1.216,150,3.299,163,1.283,164,1.21,192,2.319,222,1.384,240,3.384,264,1.719,274,1.539,306,2.964,334,1.384,352,2.328,361,2.673,367,4.225,390,2.058,413,1.874,416,2.273,420,2.114,468,1.854,529,1.719,652,1.573,762,2.753,872,2.956,963,2.597,1019,2.422,1275,2.145,1422,5.402,1483,1.982,1493,2.474,1515,6.19,1642,6.857,1683,3.309,1752,6.313,1769,2.212,1880,3.113,2104,2.177,2701,3.113,2736,2.248,2804,2.753,2830,2.967,2920,3.113,2933,2.753,2934,7.728,2935,6.142,2938,5.234,2939,3.606,2940,3.606,2941,3.606,2942,5.704,2943,5.704,2944,3.606,2945,3.606,2946,3.606]],["tags/562",[]],["title/563",[89,1.844,164,0.87,222,1.574,240,1.584,306,2.131]],["content/563",[1,0.709,2,0.718,9,1.48,27,1.202,32,1.525,101,2.104,106,0.85,115,0.98,118,3.517,129,1.258,150,4.547,161,1.628,163,2.797,164,0.903,165,0.759,175,1.778,192,1.025,193,1.5,213,1.152,222,3.017,240,4.231,241,4.189,248,2.235,264,2.029,274,1.076,276,0.962,302,1.458,306,4.349,314,1.357,324,0.968,338,1.297,345,1.506,349,1.771,356,0.718,361,2.587,367,1.929,388,1.5,390,1.439,392,0.974,409,0.907,418,1.293,420,1.478,432,1.439,434,1.867,453,1.867,467,1.152,496,1.202,529,1.202,537,1.599,562,1.546,583,1.994,589,2.653,652,1.1,668,2.989,710,3.151,774,1.458,872,2.307,888,1.386,894,1.271,1019,1.693,1083,1.599,1379,1.771,1386,1.993,1422,1.693,1483,1.386,1492,1.5,1515,1.599,1546,3.364,1642,1.659,1738,1.659,1747,3.502,1749,2.104,1752,4.673,1769,4.445,1833,1.143,2027,2.314,2102,1.458,2113,5.091,2144,1.993,2183,1.771,2249,1.925,2274,2.314,2736,4.518,2830,3.502,2919,2.314,2920,2.177,2933,4.217,2934,3.25,2935,3.25,2937,2.177,2938,2.314,2947,2.521,2948,2.521,2949,2.521,2950,6.651,2951,2.521,2952,1.599,2953,2.521]],["tags/563",[]],["title/564",[794,3.511,963,4.656]],["content/564",[0,1.008,4,1.668,32,1.603,70,2.226,101,2.779,106,1.895,118,2.728,164,1.193,193,3.344,222,3.859,227,2.634,240,4.376,242,1.74,306,5.225,326,2.226,334,2.157,339,3.63,361,3.73,390,3.208,418,1.708,439,3.699,529,2.68,668,5.592,710,4.162,712,3.448,1747,3.565,1749,2.779,1831,3.775,1992,4.292,2113,3.948,2634,4.444,2736,4.964,2933,4.292,2937,4.853,2950,5.158,2954,5.621,2955,5.621]],["tags/564",[]],["title/565",[28,2.453,32,0.81,2934,3.566,2935,3.566]],["content/565",[6,1.562,10,2.926,16,0.536,20,1.806,27,1.758,32,1.536,41,2.104,47,1.596,53,1.739,70,2.299,108,1.573,115,1.433,130,2.59,150,2.132,151,5.867,184,2.53,218,1.499,222,2.228,240,2.773,242,1.142,276,1.406,284,1.916,285,1.98,306,3.731,325,2.338,326,3.508,338,2.985,340,2.476,361,1.728,385,1.509,413,1.916,424,3.336,432,2.104,463,2.427,468,1.896,488,2.299,496,1.758,546,2.59,570,2.338,697,2.104,956,3.27,1024,2.104,1045,2.73,1073,2.915,1120,3.117,1701,2.59,1714,3.183,1972,3.384,1996,3.384,2066,2.299,2721,5.676,2739,2.261,2934,6.219,2935,7.788,2956,8.859,2957,6.589,2958,7.18,2959,5.806,2960,3.687,2961,3.384,2962,3.687,2963,3.687,2964,3.687,2965,3.687,2966,3.687,2967,3.687,2968,3.687,2969,3.687,2970,3.687]],["tags/565",[]],["title/566",[16,0.679,572,2.427,651,3.073,1120,2.507]],["content/566",[325,5.983,2721,7.458,2971,9.434,2972,9.434,2973,9.434,2974,11.155]],["tags/566",[]],["title/560",[104,1.747,326,2.56]],["content/560",[0,1.22,16,0.791,20,1.665,32,0.589,65,1.391,70,1.346,83,1.681,92,2.661,104,2.454,108,1.451,133,1.089,136,2.449,148,3.287,154,2.799,164,0.721,171,1.748,195,2.085,215,2.237,227,1.593,232,3.735,251,2.195,260,1.697,266,2.022,271,3.216,281,1.915,287,1.825,292,1.891,304,1.607,311,4.699,326,2.155,329,4.903,372,2.022,468,1.748,515,1.566,518,1.805,562,2.085,609,2.687,675,2.388,677,4.781,822,2.388,850,2.085,923,2.935,931,2.687,1010,2.333,1053,2.517,1159,5.877,1483,1.868,1484,1.891,1546,2.687,1654,2.449,1698,2.797,2049,2.195,2065,4.303,2289,3.12,2291,2.687,2294,4.479,2297,2.449,2379,2.517,2736,4.243,2739,2.085,2798,4.995,2804,2.596,2818,2.596,2820,7.473,2933,2.596,2975,3.4,2976,3.4,2977,3.4,2978,3.4,2979,5.443,2980,3.4,2981,3.4,2982,3.4,2983,3.4,2984,3.12,2985,5.443,2986,3.4,2987,3.4,2988,3.4,2989,5.443,2990,3.4,2991,4.995,2992,3.4,2993,5.443,2994,3.4,2995,3.4,2996,3.4,2997,3.4,2998,5.443,2999,3.4,3000,3.4]],["tags/560",[]],["title/567",[167,2.04,253,2.627]],["content/567",[1,2.338,7,2.534,12,1.746,16,1.389,18,3.249,32,1.037,104,1.616,109,2.552,118,2.903,142,2.128,163,3.401,164,1.765,165,1.8,167,3.018,170,2.957,217,2.903,243,2.104,253,2.431,254,3.459,255,3.669,256,4.017,257,4.201,258,3.249,383,3.327,558,2.516,850,3.669,1029,4.201,1575,4.728,1576,4.567,1858,3.936,2073,5.489,2325,3.862,3001,5.981,3002,5.981,3003,5.981,3004,5.981]],["tags/567",[]],["title/770",[33,5.924]],["content/770",[16,1.245,33,6.345,34,6.172,35,7.398,36,7.398,37,7.398,38,5.097,39,6.018,40,7.398,41,4.89,42,7.863,43,7.863,44,6.542,45,7.863]],["tags/770",[]],["title/771",[164,1.372,583,3.028]],["content/771",[1,2.265,27,2.727,33,4.235,38,3.403,76,2.373,78,1.587,164,2.509,175,2.389,344,2.458,356,2.296,418,2.835,424,4.963,517,5.249,652,2.495,799,3.925,1022,4.017,1169,5.531,1170,6.02,1752,4.12,2288,5.531,2751,9.833,2823,3.508,3005,4.706]],["tags/771",[]],["title/772",[164,1.698]],["content/772",[0,1.441,1,2.26,16,1.169,33,8.604,104,2.173,109,3.431,164,2.147,167,2.538,253,3.269,356,2.291,361,3.768,416,3.205,502,5.792,1749,3.976,1769,4.932]],["tags/772",[]],["title/773",[1021,4.907]],["content/773",[24,4.54,27,4.252,33,6.604,35,7.701,36,7.701,38,5.306,47,2.452,106,3.007,218,3.626,353,4.043,772,7.701]],["tags/773",[]],["title/569",[261,2.04,262,2.954]],["content/569",[]],["tags/569",[]],["title/570",[4,1.918,263,3.196]],["content/570",[4,1.915,16,1.273,23,1.855,32,1.519,51,3.05,109,2.754,119,4.334,129,3.221,171,3.319,222,2.477,242,1.998,248,3.389,261,2.766,262,2.949,263,5.516,296,2.589,299,3.47,415,2.246,472,4.167,679,5.31,688,4.247,959,5.658,1120,3.465,1500,4.649,1504,4.649,1744,4.334,1749,3.191,3006,6.454,3007,5.922,3008,6.454]],["tags/570",[]],["title/571",[164,1.698]],["content/571",[1,2.566,5,2.682,12,1.543,16,0.997,63,4.142,78,1.903,104,1.854,109,2.927,164,2.177,167,2.165,253,2.789,261,2.165,262,3.135,263,5.073,286,3.642,356,2.601,409,2.468,413,3.565,468,3.528,480,2.617,652,2.992,894,3.458,959,4.429,1133,4.941,1500,4.941,1930,4.515]],["tags/571",[]],["title/572",[579,3.814]],["content/572",[4,2.967,6,2.761,12,1.101,16,0.947,19,5.152,47,1.792,53,1.952,76,2.704,78,1.808,106,2.197,164,1.383,183,3.582,261,2.058,263,4.943,390,3.719,409,2.345,567,3.822,579,3.107,786,6.196,915,4.063,1083,4.134,1422,4.377,1500,4.695,1504,4.695,1648,5.363,1738,4.29,1744,4.377,3007,5.981,3009,9.999,3010,5.981,3011,5.981]],["tags/572",[]],["title/573",[1778,5.762]],["content/573",[0,1.733,4,2.222,109,3.195,242,2.319,261,2.364,263,4.78,356,3.051,409,2.694,455,2.741,1500,5.394,1504,5.394,1789,8.349,2745,8.873,3010,6.872,3011,6.872,3012,10.709,3013,7.489]],["tags/573",[]],["title/574",[3014,6.583]],["content/574",[3,1.731,10,3.956,16,1.141,20,3.844,119,5.271,168,5.068,261,3.145,262,3.587,415,2.731,578,3.53,669,3.88,798,6.204,958,5.812,1067,5.386,1743,6.204,2238,7.202,2875,7.202,3014,6.458,3015,7.849,3016,7.849]],["tags/574",[]],["title/575",[164,1.698]],["content/575",[1,2.159,3,1.179,12,1.298,23,1.536,47,1.47,82,3.135,92,2.09,109,2.281,164,1.134,167,1.687,171,2.749,222,2.948,242,1.655,253,2.173,261,1.687,262,2.443,263,3.797,299,2.117,320,3.518,356,1.523,367,2.423,382,3.958,395,3.958,409,1.923,488,3.332,506,2.618,509,3.518,538,3.452,558,2.249,566,3.011,767,2.974,794,2.903,798,4.226,835,3.279,873,2.505,887,5.688,956,3.011,972,4.226,1021,3.279,1749,2.643,1758,4.082,1971,4.615,2276,4.905,3014,9.402,3017,7.049,3018,5.346,3019,4.615]],["tags/575",[]],["title/576",[382,4.015,488,3.38,798,4.286]],["content/576",[0,2.057,2,1.673,3,1.811,15,2.488,16,0.854,47,2.258,171,3.021,178,3.609,222,2.254,242,1.819,262,2.684,263,4.06,344,2.524,367,2.663,455,2.15,488,3.662,798,4.643,919,3.662,959,6.114,1393,5.39,1504,6.82,1509,5.071,1809,6.081,3020,6.081,3021,4.833,3022,5.874,3023,5.874,3024,10.253,3025,5.874,3026,5.874]],["tags/576",[]],["title/577",[367,2.93,972,5.11]],["content/577",[0,1.827,3,1.492,6,1.906,9,1.205,15,3.445,16,0.654,27,2.145,47,2.802,51,2.126,89,2.024,94,4.318,135,2.638,168,2.905,178,2.974,194,1.782,261,2.136,262,2.056,263,2.224,272,2.04,296,1.805,324,2.597,332,2.389,338,2.314,357,3.16,358,3.241,367,3.068,415,1.566,450,2.677,455,2.476,577,2.76,786,3.16,817,3.435,959,2.905,972,5.349,1022,3.16,1057,3.435,1496,3.557,1500,3.241,1504,3.241,1509,3.885,1809,5.011,2137,3.332,3014,3.702,3020,3.332,3021,3.702,3027,4.499,3028,6.767,3029,4.499,3030,9.047,3031,4.499,3032,4.499,3033,4.499,3034,4.499,3035,4.499,3036,4.499,3037,4.499,3038,4.499]],["tags/577",[]],["title/578",[263,2.681,1745,3.226,3039,4.462]],["content/578",[106,2.815,243,2.938,320,5.495,558,3.512,959,5.391,966,7.209,1504,6.014,1615,7.662,1745,4.967,3017,7.662,3039,6.87,3040,10.359,3041,8.35,3042,8.35,3043,8.35]],["tags/578",[]],["title/579",[164,1.698]],["content/579",[1,2.548,5,2.654,15,2.876,47,1.867,78,1.883,104,1.835,109,2.897,167,2.143,176,3.565,216,3.926,253,2.76,261,2.143,299,2.688,320,4.468,356,1.934,455,2.484,509,4.468,551,4.659,1384,8.813,1447,4.659,1449,6.088,1749,4.482,3021,5.586,3039,9.609]],["tags/579",[]],["title/580",[263,3.196,1745,3.845]],["content/580",[2,1.704,3,1.319,9,1.603,47,1.645,92,2.339,178,4.201,263,2.957,418,1.817,441,2.827,455,2.189,583,2.802,597,4.201,651,3.936,655,3.862,679,4.922,959,3.862,972,4.728,1311,4.308,1500,4.308,1504,4.308,1588,6.886,1920,4.104,2691,5.489,3039,8.936,3044,7.632,3045,5.981,3046,5.981,3047,10.334,3048,5.981,3049,5.981,3050,5.981,3051,8.317,3052,5.981,3053,5.981]],["tags/580",[]],["title/568",[2,1.545,3,1.196,264,2.585]],["content/568",[2,3.203,3,1.918,8,1.766,12,1.245,15,3.12,16,1.179,24,1.575,32,0.875,53,2.865,71,1.868,75,1.868,104,2.585,106,2.734,112,1.608,114,1.544,118,1.501,120,1.814,127,2.123,142,1.101,147,2.078,161,4.123,164,0.657,165,1.922,167,2.56,242,0.958,243,1.089,248,1.625,263,2.494,264,1.475,307,3.461,348,4.355,355,3.543,388,3.001,392,1.195,402,1.45,409,1.113,423,2.446,458,2.671,537,4.049,542,1.21,583,1.45,686,1.515,760,1.426,774,1.789,894,2.542,959,1.998,1052,1.559,1067,2.123,1228,2.229,1282,1.962,1430,1.929,1447,3.461,1500,2.229,1746,2.839,1798,2.446,2114,4.629,2653,2.671,3021,2.546,3054,3.094,3055,5.044,3056,3.094,3057,3.094,3058,2.839,3059,2.839,3060,3.094,3061,3.094,3062,3.094,3063,3.094,3064,3.094,3065,3.094,3066,3.094,3067,3.094,3068,3.094,3069,2.839,3070,3.094,3071,2.078,3072,3.094,3073,3.094,3074,3.094,3075,3.094,3076,2.839]],["tags/568",[]],["title/583",[65,2.645,133,2.071]],["content/583",[16,0.911,32,1.087,65,4.01,76,2.6,83,3.099,95,2.937,108,3.665,133,3.377,164,1.823,170,3.099,171,3.223,227,2.937,254,3.625,265,3.908,266,3.729,267,3.531,268,2.548,269,3.577,270,3.159,271,2.962,272,2.842,273,3.844,274,2.674,275,3.015,276,2.391,292,3.487,304,2.962,524,5.412,659,3.625,690,3.404,784,4.402,1094,4.125,1493,4.301,3077,6.268,3078,6.268]],["tags/583",[]],["title/584",[268,3.252]],["content/584",[0,1.66,1,1.97,32,1.605,47,1.927,65,2.867,76,2.907,83,3.464,133,2.966,164,2.2,175,2.927,261,2.212,268,3.764,270,3.532,275,3.37,292,3.898,304,3.311,356,1.996,362,3.762,418,2.813,515,3.229,587,4.611,1094,4.611,2070,6.43,3079,7.007]],["tags/584",[]],["title/585",[263,3.196,515,2.978]],["content/585",[0,1.157,1,1.814,32,1.519,47,1.775,76,3.635,83,3.191,102,3.683,133,2.807,155,4.167,164,2.111,170,3.191,175,2.696,233,4.533,261,2.037,263,4.918,268,2.623,270,3.253,275,3.104,292,3.59,304,3.05,356,1.838,362,3.465,418,2.662,515,4.917,887,4.779,1094,4.247,2069,5.572,3080,6.454]],["tags/585",[]],["title/586",[1764,4.248]],["content/586",[0,1.445,1,1.608,32,1.398,47,1.573,53,1.713,65,2.341,76,2.373,83,3.985,103,3.454,133,2.99,164,1.98,170,2.828,175,2.389,233,4.017,258,3.107,261,1.806,267,3.222,268,2.325,270,2.883,275,2.751,292,3.182,304,2.703,356,1.629,362,3.071,418,2.448,463,3.764,515,2.635,587,3.764,589,3.566,946,3.841,1094,3.764,1200,4.235,1224,4.938,1654,4.12,1764,4.955,1992,4.367,2041,3.683,2066,3.566,2173,3.764,3081,5.72,3082,5.72]],["tags/586",[]],["title/587",[270,4.032]],["content/587",[0,1.256,1,1.97,32,1.605,47,1.927,53,2.773,65,2.867,83,3.464,89,3.151,92,2.74,133,2.966,164,1.965,170,3.464,175,2.927,261,2.212,270,4.666,271,3.311,292,3.898,304,3.311,356,1.996,418,2.129,419,3.806,587,4.611,1094,4.611,1461,5.539,1764,3.72,3083,7.007]],["tags/587",[]],["title/588",[115,2.107,163,1.929,3084,4.682]],["content/588",[]],["tags/588",[]],["title/589",[3085,7.341]],["content/589",[0,1.092,1,1.713,9,1.632,16,1.224,32,1.461,47,2.316,51,2.879,53,1.825,86,4.015,108,2.6,115,2.367,133,1.952,149,3.679,163,2.168,164,2.049,170,3.012,175,2.545,193,3.624,261,1.923,263,3.012,275,2.93,292,3.389,304,2.879,356,1.736,418,2.559,515,4.448,1094,4.01,1492,3.624,1588,4.389,2036,3.573,3084,5.26,3085,9.558,3086,6.093]],["tags/589",[]],["title/590",[3087,7.341]],["content/590",[1,2.035,2,2.062,32,1.255,47,1.991,53,2.169,92,2.831,115,3.676,163,3.365,164,2.007,170,3.579,217,3.513,261,2.285,356,2.062,529,3.451,623,4.131,1372,5.957,1430,4.513,2074,2.453,3019,6.251,3084,8.167,3087,10.252]],["tags/590",[]],["title/591",[115,2.107,163,1.929,396,3.326]],["content/591",[]],["tags/591",[]],["title/592",[3088,7.341]],["content/592",[1,2.035,2,2.062,32,1.255,47,1.991,53,2.169,92,2.831,115,3.676,163,3.365,164,2.007,170,3.579,217,3.513,261,2.285,356,2.062,396,5.802,529,3.451,623,4.131,1372,5.957,1430,4.513,2074,2.453,3019,6.251,3088,10.252]],["tags/592",[]],["title/581",[218,3.252]],["content/581",[32,1.689,41,4.323,48,3.28,70,3,104,2.047,106,2.554,108,3.232,164,1.608,175,3.164,179,4.574,243,2.665,288,3.936,298,3.936,324,2.907,363,4.646,364,4.507,381,4.723,503,6.952,684,3.643,779,5.61,1290,4.323,3089,7.576,3090,6.952]],["tags/581",[]],["title/582",[66,3.845,353,2.93]],["content/582",[1,1.379,2,2.055,9,1.314,12,0.829,16,1.049,21,2.522,24,4.357,32,1.886,66,2.918,70,1.942,86,2.338,163,1.745,164,2.232,167,2.702,194,1.942,218,4.089,271,2.318,289,3.789,296,1.967,353,2.223,356,1.397,381,3.057,418,1.49,509,4.748,571,2.633,587,3.228,630,6.766,684,2.359,894,2.472,921,4.036,939,3.533,1011,4.5,1116,5.703,1844,6.338,2823,4.425,3090,4.5,3091,5.703,3092,5.703,3093,5.509]],["tags/582",[]],["title/593",[21,4.114]],["content/593",[2,2.319,21,5.244,32,1.412,47,2.239,65,3.332,106,2.744,164,1.728,243,3.588,300,4.916,344,3.499,418,2.473,779,6.029,1858,5.358,1989,5.467,3094,8.142,3095,6.699]],["tags/593",[]],["title/594",[907,6.324]],["content/594",[1,1.329,4,1.403,14,2.109,21,4.308,26,2.382,32,0.82,48,2.047,53,1.416,86,2.253,104,1.277,106,1.593,138,2.998,155,3.052,163,1.682,164,1.777,218,1.922,222,1.814,243,1.663,261,1.492,262,2.16,286,2.51,299,1.872,353,2.143,356,2.822,418,2.816,441,2.234,469,4.534,567,2.772,623,2.697,907,9.504,920,3.018,941,3.32,1311,3.405,1588,3.405,1593,4.081,1604,6.062,1648,3.89,1908,3.405,1984,4.081,2004,4.081,2183,3.32,2710,2.899,2952,2.998,3096,4.727,3097,4.727,3098,4.727,3099,4.727,3100,4.727,3101,4.727]],["tags/594",[]],["title/595",[3102,7.341]],["content/595",[1,1.368,21,4.382,86,2.32,92,1.903,104,1.315,150,2.815,163,1.732,164,1.033,177,2.585,227,2.281,261,2.265,262,2.225,263,2.407,298,2.529,300,4.333,356,1.387,399,3.035,418,2.18,425,4.467,455,1.781,456,4.006,469,3.143,544,3.087,570,3.087,597,3.419,610,2.939,623,2.778,673,3.087,686,2.384,688,3.204,725,3.717,726,4.006,760,2.243,783,4.095,835,2.986,907,6.737,920,2.092,1037,3.143,1284,3.204,1287,3.087,1358,4.006,1421,3.204,1591,4.203,1747,3.087,2149,4.203,2325,3.143,2708,4.467,2723,4.203,3102,9.627,3103,7.176,3104,7.176,3105,4.868,3106,4.868,3107,4.868,3108,4.868,3109,4.868,3110,4.868]],["tags/595",[]],["title/596",[3091,6.324]],["content/596",[12,1.168,15,1.96,16,0.672,23,2.377,32,1.434,47,1.272,65,1.893,70,1.832,78,1.283,92,1.809,104,1.25,164,1.947,175,4.101,182,2.379,218,1.881,276,1.765,299,1.832,361,2.168,392,1.787,415,1.61,480,1.765,509,3.045,558,3.479,794,2.513,894,2.332,942,3.807,1169,3.175,1552,2.606,1989,3.107,2203,2.987,2343,6.805,2514,7.589,3091,8.865,3111,4.627,3112,9.174,3113,4.627,3114,9.174,3115,8.271,3116,8.271,3117,4.627,3118,8.271]],["tags/596",[]],["title/597",[243,1.908,418,1.647,3091,4.286]],["content/597",[3,1.437,9,1.746,32,1.53,65,3.61,72,3.135,133,2.088,182,3.352,242,2.018,243,3.104,324,3.385,418,1.98,432,3.719,455,3.659,583,3.054,643,5.41,835,3.998,915,5.499,952,5.628,956,4.969,1057,4.977,3091,7.904,3119,6.518,3120,6.518,3121,5.981,3122,6.518,3123,8.822]],["tags/597",[]],["title/599",[122,3.738,3092,5.11]],["content/599",[12,1.429,32,1.467,104,2.286,122,4.891,156,5.566,178,3.717,314,2.696,465,6.092,558,3.558,571,4.541,1704,6.959,1920,5.804,3092,8.954]],["tags/599",[]],["title/600",[1021,4.907]],["content/600",[0,1.597,1,1.478,4,1.561,16,1.103,22,2.083,53,1.575,92,2.056,109,2.244,122,5.642,142,1.871,154,3.904,163,1.871,164,1.611,167,1.66,222,2.018,227,2.464,240,2.031,242,1.628,253,2.138,353,4.039,356,2.947,392,2.031,416,2.096,465,5.469,686,2.576,721,3.084,744,3.461,1219,3.176,1396,2.705,1749,2.6,2952,5.65,2961,4.826,3092,8.784,3124,5.21,3125,4.541,3126,4.826,3127,4.826,3128,5.26]],["tags/600",[]],["title/601",[165,1.945,2343,5.319]],["content/601",[0,0.897,1,1.407,2,1.807,3,0.676,10,1.545,12,0.518,15,2.688,21,1.576,32,0.531,53,0.918,72,1.474,78,0.85,87,1.749,92,1.198,109,1.308,129,1.53,142,1.09,165,1.506,166,1.222,260,2.498,264,2.386,273,1.88,276,1.169,324,1.921,326,1.214,338,1.576,345,1.084,353,2.269,356,2.958,357,2.153,389,2.269,390,1.749,395,2.269,397,4.918,424,1.424,439,3.294,452,1.88,453,2.269,465,2.208,538,1.979,558,1.289,666,4.119,686,1.501,701,1.368,702,1.979,704,2.646,716,2.208,734,2.058,743,5.492,823,2.269,850,1.88,873,1.436,920,1.317,1045,2.269,1052,1.545,1219,1.851,1258,2.34,1421,2.017,1483,1.684,1484,1.705,1492,1.823,1606,2.812,1809,2.269,1831,2.058,1874,2.34,2710,3.07,2823,1.88,2952,4.023,3092,8.522,3124,3.435,3125,4.321,3126,6.72,3127,2.812,3129,3.065,3130,3.065,3131,6.344,3132,5.005,3133,5.005,3134,3.065,3135,3.065,3136,5.822,3137,3.065,3138,6.344,3139,7.324,3140,6.344,3141,3.065,3142,3.065]],["tags/601",[]],["title/602",[2823,3.964,3093,4.935]],["content/602",[32,1.505,162,5.606,164,2.432,318,6.098,326,3.438,344,3.731,571,4.662,1120,4.662,2823,5.325,3093,6.629,3143,7.967]],["tags/602",[]],["title/603",[387,3.79,2823,3.964]],["content/603",[0,0.928,1,1.455,28,2.719,32,0.898,41,4.283,60,2.69,63,3.126,72,3.609,142,1.841,164,1.098,167,2.369,196,3.227,216,2.994,253,3.051,261,1.634,271,2.446,284,2.69,299,2.05,314,1.65,332,2.748,334,1.987,356,1.474,387,4.401,392,1.999,413,2.69,415,1.801,466,3.833,468,2.662,551,3.552,583,2.425,596,4.75,597,3.636,684,2.489,872,3.135,920,2.225,1183,4.469,1191,3.476,1275,3.079,1290,2.954,1333,4.259,1552,2.916,1603,3.728,1642,4.939,1714,4.469,1749,2.559,2075,2.916,2076,3.227,2692,4.259,2823,6.305,3093,5.73,3144,5.176,3145,4.75]],["tags/603",[]],["title/604",[387,3.79,3093,4.935]],["content/604",[0,1.008,1,1.58,6,2.381,9,1.506,27,3.795,41,3.208,65,2.3,72,3.829,142,2,164,1.69,167,2.513,194,2.226,218,2.285,253,3.236,261,1.774,284,2.921,314,1.792,329,4.049,332,2.985,356,1.601,387,3.296,413,2.921,415,1.956,449,2.921,466,4.162,468,2.891,551,3.857,684,2.703,872,3.326,920,2.416,1275,3.344,1290,3.208,1333,4.626,1552,3.167,1603,4.049,1642,5.24,1680,4.292,1749,2.779,2075,3.167,2076,3.504,2692,4.626,2823,3.448,3093,7.678,3145,5.158]],["tags/604",[]],["title/605",[16,0.788,32,0.94,3146,4.976]],["content/605",[1,1.499,5,1.296,12,1.659,14,1.479,16,0.972,21,2.742,26,2.687,32,1.329,51,2.52,71,2.001,75,2.001,78,1.479,118,1.608,164,2.15,167,1.046,176,1.74,177,1.759,218,1.347,222,1.272,253,1.347,261,1.683,275,2.564,276,1.264,296,1.329,326,2.111,332,1.759,334,1.272,339,2.139,344,3.295,356,1.519,361,1.552,408,6.668,413,4.905,415,1.153,417,2.032,418,1.62,420,1.943,509,2.181,558,1.394,571,3.592,587,2.181,630,5.289,757,1.971,785,6.139,809,3.041,850,2.032,875,2.387,888,1.821,966,2.861,973,2.139,1037,3.443,1120,1.779,1191,2.225,1219,2.001,1546,2.619,1749,1.638,1796,4.215,2072,2.726,2692,2.726,2823,6.021,3143,4.893,3146,6.139,3147,3.041,3148,3.314,3149,6.691,3150,3.314,3151,3.314,3152,3.041]],["tags/605",[]],["title/598",[1116,6.324]],["content/598",[2,1.773,11,1.097,12,1.444,16,1.242,23,0.857,24,1.518,32,1.079,49,2.094,53,2.382,65,1.22,72,2.993,76,1.237,78,1.357,79,1.925,86,1.421,104,0.806,108,2.088,118,1.447,142,1.061,164,2.072,175,1.245,176,1.566,215,1.962,218,1.989,227,2.292,231,1.858,243,1.049,261,0.941,263,2.419,271,1.409,276,1.137,286,1.583,302,2.83,312,2.357,317,2.147,326,1.938,344,2.103,347,2.276,362,1.601,375,2.357,381,1.858,388,1.773,392,1.151,417,1.828,419,1.619,469,1.925,480,1.137,502,2.147,506,1.46,509,1.962,529,1.421,551,3.358,558,2.058,564,2.736,567,1.748,604,4.224,630,2.357,643,3.001,684,2.993,686,1.46,729,2.453,766,2.357,875,2.147,894,2.466,915,4.49,918,1.962,963,3.524,967,2.046,1007,2.736,1063,2.357,1094,1.962,1116,7.717,1284,1.962,1320,2.736,1360,1.638,1379,2.094,1547,2.357,1556,4.49,1603,2.147,1644,6.073,1648,2.453,1687,2.736,1738,1.962,2326,2.357,2710,1.828,2957,2.736,3152,2.736,3153,8.548,3154,2.736,3155,2.981,3156,2.981,3157,2.981]],["tags/598",[]],["title/606",[218,2.627,289,3.395]],["content/606",[]],["tags/606",[]],["title/607",[122,4.627]],["content/607",[12,1.326,18,4.263,22,3.946,32,1.728,48,4.314,104,2.121,106,2.646,122,6.332,182,4.036,243,2.761,271,3.709,289,5.233,432,4.479,1021,4.814,1589,6.458]],["tags/607",[]],["title/608",[2012,6.324]],["content/608",[2,2.727,78,2.655,164,2.031,242,2.964,1282,6.07,2012,7.567]],["tags/608",[]],["title/609",[164,1.698]],["content/609",[1,2.473,16,1.279,47,2.419,164,2.27,167,2.778,253,3.577,261,2.778,356,2.506,956,4.957,2012,8.457]],["tags/609",[]],["title/610",[2,2.279]],["content/610",[2,2.634,3,1.756,8,3.208,16,1.344,21,2.891,47,2.189,92,2.198,142,2,163,2.832,217,2.728,222,3.548,242,1.74,261,2.513,264,2.68,345,1.989,353,2.548,356,2.268,363,3.448,416,2.24,686,2.753,1740,3.775,1892,4.049,2012,9.308,2183,3.948,2952,5.049,3124,5.464,3158,7.962,3159,5.621,3160,7.962,3161,5.621,3162,5.621]],["tags/610",[]],["title/611",[853,5.319,3163,5.319]],["content/611",[2,2.687,78,2.617,164,2.002,242,2.921,853,7.763,1282,5.983,3163,7.763]],["tags/611",[]],["title/612",[164,1.698]],["content/612",[1,2.473,16,1.279,47,2.419,164,2.27,167,2.778,253,3.577,261,2.778,356,2.506,956,4.957,3163,8.803]],["tags/612",[]],["title/613",[1021,4.907]],["content/613",[0,0.65,1,1.019,2,2.299,3,1.938,4,1.076,15,3.009,16,0.527,47,2.219,94,1.925,104,0.98,108,1.547,122,3.313,163,2.038,164,1.216,165,1.091,167,1.145,222,2.726,242,2.199,253,1.474,261,2.242,264,2.731,289,3.009,324,2.199,345,2.027,351,2.769,353,2.597,355,2.547,356,2.661,388,2.157,432,2.069,544,3.633,686,2.806,853,4.714,887,2.685,956,3.227,1054,2.017,1075,3.327,1216,3.327,2183,2.547,2710,3.514,2738,2.984,2952,5.573,3124,3.931,3163,7.687,3164,3.626,3165,5.729,3166,3.626,3167,3.626,3168,8.788,3169,3.626,3170,5.729,3171,3.626,3172,3.626,3173,3.626,3174,3.626,3175,5.729,3176,3.626,3177,3.626,3178,5.729,3179,3.626,3180,3.626,3181,3.626,3182,3.626,3183,3.626]],["tags/613",[]],["title/614",[3184,6.583]],["content/614",[2,2.727,78,2.655,164,2.031,242,2.964,1282,6.07,3184,7.876]],["tags/614",[]],["title/615",[164,1.698]],["content/615",[1,2.473,16,1.279,47,2.419,164,2.27,167,2.778,253,3.577,261,2.778,356,2.506,956,4.957,3184,8.803]],["tags/615",[]],["title/616",[1021,4.907]],["content/616",[2,2.932,3,1.822,9,1.588,15,2.511,16,0.861,47,1.63,163,2.94,173,3.901,222,3.95,242,1.835,261,1.871,264,2.825,324,2.275,353,2.687,355,4.163,356,2.354,390,3.382,416,2.362,712,3.635,716,4.269,794,3.219,1054,4.597,1740,3.98,2183,4.163,2952,5.241,3124,5.671,3184,8.907,3185,5.927,3186,5.927,3187,5.927,3188,5.927,3189,5.927]],["tags/616",[]],["title/617",[278,4.759]],["content/617",[]],["tags/617",[]],["title/618",[279,4.099,280,4.099]],["content/618",[1,1.928,6,2.906,32,1.19,78,2.532,164,2.177,166,2.734,175,2.866,176,3.603,234,4.081,242,2.124,261,2.165,276,2.617,344,2.948,356,1.954,387,4.023,399,4.277,418,2.773,571,3.683,696,5.08,701,3.061,3190,10.261,3191,6.86,3192,6.295,3193,6.86,3194,6.86,3195,6.86,3196,6.86]],["tags/618",[]],["title/619",[3197,6.907]],["content/619",[12,1.572,23,2.673,32,1.613,109,3.968,299,3.683,424,4.321,3197,9.549]],["tags/619",[]],["title/620",[]],["content/620",[73,2.969,92,2.499,108,2.727,109,2.727,115,2.483,118,4.224,133,2.047,142,2.273,163,2.273,164,1.356,167,2.017,217,3.101,243,2.249,278,6.825,314,2.037,415,2.224,418,1.941,529,3.046,597,6.113,729,5.259,1183,5.518,1279,5.518,1537,4.88,1623,4.732,1747,4.053,1970,5.259,1971,5.518,2193,5.518,2315,5.864,2923,5.518,3197,5.518,3198,6.391,3199,6.391]],["tags/620",[]],["title/621",[3200,6.583]],["content/621",[39,5.718,218,3.309,278,4.843,324,3.125,434,6.029,716,5.864,773,6.699,2159,9.358,3200,6.699,3201,8.142,3202,8.142,3203,8.142,3204,8.142,3205,8.142,3206,8.142,3207,8.142,3208,8.142]],["tags/621",[]],["title/622",[164,1.698]],["content/622",[0,1.146,1,1.796,3,1.92,104,1.727,164,1.847,166,2.547,344,2.747,356,3.167,387,3.747,418,1.941,439,4.206,477,5.864,587,4.206,701,2.852,889,5.259,925,5.052,927,4.292,1680,4.88,1809,4.732,2254,5.864,3147,5.864,3192,5.864,3200,5.259,3209,6.391,3210,6.391,3211,8.704,3212,8.704,3213,6.391,3214,8.704,3215,6.391,3216,5.864]],["tags/622",[]],["title/623",[2225,4.935,3217,5.931]],["content/623",[12,1.135,16,0.976,23,1.931,32,1.165,53,2.013,109,2.867,163,2.39,178,2.953,182,3.455,299,2.661,314,2.142,326,2.661,392,2.595,424,3.122,469,4.338,475,3.738,822,4.719,1202,3.738,1573,5.529,1677,4.611,2225,8.89,2699,5.801,3154,6.166,3200,7.409,3217,9.955,3218,6.719]],["tags/623",[]],["title/624",[2014,6.583]],["content/624",[26,4.263,78,2.346,148,5.107,278,6.212,418,2.569,1604,7.302,1747,5.364,1887,5.566,2014,6.959,2087,6.959,2193,7.302,2636,7.761,3219,8.458,3220,8.458]],["tags/624",[]],["title/625",[164,1.372,3221,5.931]],["content/625",[12,1.393,41,4.705,165,3.093,177,4.377,196,5.14,334,3.164,387,4.834,551,5.657,721,4.834,872,3.444,1062,7.565,1449,5.536,2014,6.784,2041,3.768,3221,9.431]],["tags/625",[]],["title/626",[2314,6.583]],["content/626",[12,1.572,23,2.673,32,1.613,109,3.968,299,3.683,424,4.321,2314,9.101]],["tags/626",[]],["title/627",[2297,5.762]],["content/627",[16,0.967,39,4.671,78,1.845,104,2.417,148,4.016,164,1.411,202,6.432,286,3.531,343,5.078,415,2.315,418,2.02,424,3.09,542,2.6,562,4.079,652,2.901,873,3.116,1053,4.925,1315,8.722,2066,5.575,2297,7.277,2319,7.72,2748,8.206,2991,6.103,3222,6.651]],["tags/627",[]],["title/628",[99,4.987]],["content/628",[]],["tags/628",[]],["title/629",[2,2.279]],["content/629",[0,0.722,4,1.195,9,1.666,12,1.051,27,2.965,38,2.396,47,1.71,53,1.207,78,1.117,99,4.736,115,2.952,149,2.432,164,1.959,167,1.272,178,2.733,192,2.528,253,1.637,268,1.637,272,1.826,326,2.463,332,3.302,344,1.731,352,2.601,361,2.914,364,2.396,409,1.449,415,1.402,416,2.479,427,2.901,449,2.093,455,1.474,464,1.973,550,3.549,563,1.92,652,1.757,760,1.856,774,2.33,872,3.174,873,1.887,894,2.03,1120,2.163,1202,2.241,1219,2.432,1235,2.163,1290,3.549,1360,2.214,1422,2.705,1467,2.432,1546,3.184,1873,2.269,1989,2.705,2074,2.108,2091,2.554,2101,3.549,2102,4.394,2115,7.452,2116,3.076,2118,3.478,2631,3.076,2632,3.314,3223,4.028,3224,6.972,3225,6.972,3226,4.028,3227,4.028]],["tags/629",[]],["title/630",[12,0.789,99,2.911,415,1.625,2115,3.566]],["content/630",[12,1.423,23,1.751,32,1.056,99,7.476,167,1.923,182,3.133,299,2.413,415,2.12,1290,3.477,1989,5.657,2102,4.872,2115,4.652,2215,8.86,2216,5.591,3224,5.591,3225,5.591,3228,6.093,3229,6.093,3230,6.093,3231,8.424,3232,8.424,3233,6.093,3234,6.093,3235,6.093,3236,6.093,3237,6.093,3238,6.093,3239,8.424,3240,6.093]],["tags/630",[]],["title/640",[3,1.196,112,2.818,113,2.911]],["content/640",[3,1.71,14,3.461,41,4.425,53,2.323,109,3.309,112,4.03,113,4.164,114,3.871,115,3.842,116,6.13,117,5.586,118,4.799,119,5.208,120,4.548,121,5.322,122,4.485,123,4.164,124,5.322,125,5.208,126,5.007]],["tags/640",[]],["title/641",[32,1.121,112,3.359]],["content/641",[0,1.316,2,1.087,3,0.842,9,1.023,14,1.703,16,0.867,22,1.511,32,1.273,51,1.803,53,1.143,60,1.983,76,1.583,78,1.059,92,1.492,102,2.178,105,2.749,108,1.628,109,3.541,112,4.679,113,3.942,115,2.317,121,2.619,122,2.207,126,4.74,136,2.749,194,2.362,200,2.512,214,2.563,217,1.852,222,2.289,242,1.182,272,1.73,289,2.004,330,1.963,365,3.14,429,3.017,439,2.512,469,2.464,472,2.464,475,2.123,493,2.619,494,3.099,551,4.093,572,1.983,651,2.512,697,2.178,716,2.749,757,2.27,946,4.005,986,2.304,1054,2.123,1237,2.563,1396,1.963,1447,2.619,1588,2.749,1753,2.914,1878,2.464,1891,3.502,1932,5.473,2229,3.502,2230,3.14,2325,3.851,2364,3.502,2653,3.295,3058,5.473,3241,3.017,3242,3.816,3243,3.816,3244,3.816,3245,3.816,3246,3.816,3247,3.816,3248,3.816,3249,3.502,3250,3.295,3251,3.816,3252,3.816,3253,3.816,3254,3.816,3255,5.964,3256,3.816,3257,3.816,3258,3.816]],["tags/641",[]],["title/642",[112,3.359,3259,6.464]],["content/642",[0,1.865,2,2.011,78,1.321,104,1.287,112,5.598,125,6.989,222,1.827,240,3.248,242,1.474,244,3.307,330,2.449,331,1.923,339,3.074,353,4.718,356,2.965,374,3.02,392,1.839,416,2.813,418,2.144,441,3.975,494,2.474,697,5.309,1740,4.741,1878,4.558,2710,4.33,2952,6.6,3124,5.773,3260,4.369]],["tags/642",[]],["title/643",[108,1.56,115,1.42,139,1.549,222,1.403,1753,2.791,3250,3.156]],["content/643",[0,1.715,2,1.707,16,0.558,28,2.016,32,1.039,38,2.284,91,2.162,92,1.501,104,1.037,106,1.294,108,1.638,112,3.113,113,2.061,115,1.492,125,4.024,126,3.869,142,1.366,156,2.526,163,2.132,222,1.473,240,2.314,244,2.807,289,3.147,331,1.55,339,2.479,344,1.65,353,4.094,356,2.726,374,2.434,416,2.937,418,1.166,441,2.831,494,1.995,516,3.523,558,1.615,697,3.419,744,2.526,1219,2.318,1740,4.024,1753,2.931,1878,6.677,2253,2.765,2710,5.107,2952,6.558,3124,5.057,3249,10.587,3250,5.173]],["tags/643",[]],["title/644",[109,1.993,112,2.427,1396,2.402,2230,3.843]],["content/644",[0,0.871,1,0.83,2,0.841,4,0.877,6,1.251,16,0.429,21,2.498,22,1.923,32,0.512,47,0.812,63,1.784,101,1.46,109,1.26,112,4.422,122,2.809,123,1.586,126,1.907,139,1.251,149,1.784,175,1.234,194,1.17,242,0.915,261,0.933,262,1.35,287,1.586,296,1.185,299,1.17,353,2.202,392,1.141,402,1.384,409,1.747,418,1.475,468,1.519,471,2.979,480,2.359,496,1.408,550,2.771,558,1.243,572,3.213,584,2.187,611,1.944,625,1.984,658,2.075,673,1.873,706,1.568,747,2.335,760,1.361,791,2.551,884,2.187,1174,2.431,1202,2.702,1237,5.715,1254,2.256,1287,4.543,1330,2.075,1396,1.519,1451,2.256,1472,2.431,1483,2.669,1692,3.596,1703,2.711,1737,1.604,1747,3.922,1749,1.46,1786,2.431,1831,3.261,1874,2.256,1878,1.907,2230,7.003,2690,4.193,3261,4.857,3262,7.163,3263,2.954,3264,2.954,3265,2.954,3266,2.954,3267,2.954,3268,2.954,3269,2.954,3270,2.954,3271,2.954,3272,4.857,3273,2.954,3274,2.954,3275,2.954,3276,2.954,3277,6.184,3278,4.857,3279,4.857,3280,4.857,3281,4.857,3282,4.857,3283,2.954,3284,4.857,3285,2.954,3286,2.711,3287,4.857,3288,2.431,3289,2.551,3290,2.711,3291,6.184,3292,2.954,3293,2.954,3294,2.954,3295,2.954]],["tags/644",[]],["title/645",[51,1.938,112,2.131,883,3.541,3241,3.242,3296,4.101]],["content/645",[2,2.183,3,1.69,51,3.622,53,2.94,104,2.071,106,2.584,108,3.27,112,5.1,113,5.27,139,3.247,163,3.492,269,4.374,300,4.628,468,3.941,507,6.059,589,4.778,2476,7.033,2929,6.617,3241,6.059]],["tags/645",[]],["title/646",[2,0.939,3,0.727,109,1.407,113,1.771,163,1.173,320,2.17,3297,3.298]],["content/646",[0,1.268,1,2.261,2,1.027,3,1.258,12,1.359,14,2.545,16,0.524,32,0.625,53,1.709,72,1.734,76,1.496,78,1.582,112,1.874,113,5.73,133,1.827,163,2.029,164,1.978,167,1.138,222,1.384,242,1.116,253,1.466,258,1.958,268,2.319,270,2.875,273,2.212,304,2.696,320,5.767,345,1.276,356,2.292,374,2.287,390,2.058,391,2.058,416,1.437,424,1.675,427,2.597,429,2.85,453,2.67,468,1.854,502,2.597,515,2.628,542,1.41,558,1.517,610,2.177,658,2.533,848,2.533,887,2.67,920,1.55,1054,3.173,1396,1.854,1421,2.373,1692,2.67,1737,1.958,1738,3.754,1744,3.831,1878,2.328,1888,3.309,2034,2.967,2058,2.597,2074,1.933,2138,6.62,2198,5.234,2620,5.823,2631,2.753,3298,7.077,3299,7.077,3300,3.606]],["tags/646",[]],["title/647",[16,0.596,261,1.295,1460,2.954,3241,3.242,3301,3.763]],["content/647",[53,3.107,113,5.57,217,2.93,324,2.317,351,4.609,415,2.913,455,2.209,507,8.201,562,3.702,566,3.4,605,5.212,625,4.054,697,3.445,712,5.133,915,3.763,1375,4.609,2010,7.68,2253,4.348,3241,8.201,3290,9.52,3301,9.52,3302,6.037,3303,5.212,3304,6.037,3305,6.037]],["tags/647",[]],["title/648",[53,1.228,112,2.131,163,1.459,480,1.564,1467,2.476]],["content/648",[0,1.708,15,2.78,28,2.269,53,1.966,92,1.689,109,1.844,112,5.583,113,3.524,118,2.097,142,1.537,149,5.352,166,1.722,222,2.519,274,1.844,275,2.078,356,2.525,392,1.669,415,1.504,418,1.313,449,2.245,455,1.581,475,5.801,494,2.245,585,3.035,714,3.035,787,3.112,1202,2.404,1219,2.609,1254,3.299,1396,2.222,1447,4.504,1538,3.299,1738,2.844,2253,3.112,3125,3.731,3286,3.965,3306,11.821,3307,8.133,3308,9.531,3309,4.321,3310,4.321]],["tags/648",[]],["title/649",[112,2.427,238,1.937,375,3.692,1467,2.82]],["content/649",[2,2.183,3,1.69,9,2.053,15,3.247,32,1.329,73,3.561,112,5.1,126,4.949,194,3.035,238,3.179,242,2.373,245,3.983,375,6.059,1181,6.307,1445,5.147,1467,5.927,1738,6.459,3311,7.664,3312,7.664,3313,7.664]],["tags/649",[]],["title/650",[2,1.041,109,1.56,464,1.79,1115,2.707,1282,2.318,3314,3.008]],["content/650",[2,2.808,5,1.615,7,1.75,12,1.071,32,1.338,53,2.311,70,2.511,72,1.986,91,2.326,104,1.116,112,4.499,113,2.217,118,2.004,125,2.773,162,2.667,163,2.745,165,1.243,227,1.935,242,2.389,244,1.935,291,2.575,298,2.146,300,2.494,345,1.461,355,2.901,356,1.176,372,2.457,391,3.618,399,2.575,417,2.533,463,2.718,464,3.105,495,3.398,558,2.667,610,2.494,653,3.566,658,2.901,686,2.023,702,2.667,712,2.533,1094,2.718,1115,6.916,1120,2.217,1247,3.265,1324,3.398,1421,2.718,1427,3.566,1445,2.773,1472,3.398,1520,3.398,1534,3.566,1992,3.153,2034,5.217,2253,2.975,2284,3.566,2710,3.889,2738,5.217,2952,2.619,3303,3.566,3314,7.124,3315,3.79,3316,3.79,3317,4.13,3318,4.13,3319,4.13]],["tags/650",[]],["title/651",[87,1.882,113,1.771,409,1.186,651,2.17,1447,2.263,1589,2.713,3289,2.847]],["content/651",[0,2.137,2,1.886,7,1.383,8,3.006,14,3.721,16,0.474,21,1.678,32,0.566,47,0.897,53,2.277,76,1.354,85,1.971,87,3.006,89,1.468,92,1.276,93,2.107,94,1.733,104,0.882,112,1.696,113,4.081,125,2.192,216,1.888,217,1.584,231,2.035,242,1.011,286,1.733,291,2.035,296,1.309,298,1.696,324,1.253,331,2.127,345,1.155,356,1.5,399,2.035,409,2.383,418,0.991,427,2.351,441,1.542,464,1.599,472,2.107,550,3.006,558,1.373,625,2.192,651,3.467,762,4.022,915,2.035,1022,2.292,1037,2.107,1115,2.417,1212,2.686,1284,2.148,1287,3.34,1396,4.585,1464,2.995,1779,2.492,1859,2.995,1989,2.192,2058,5.474,2092,2.107,2093,2.818,2133,2.686,2253,2.351,2631,2.492,2690,2.818,2710,3.231,2952,2.07,3289,5.718,3314,4.334,3316,2.995,3320,3.264,3321,3.264,3322,5.268,3323,5.268,3324,3.264,3325,3.264,3326,3.264,3327,3.264,3328,7.6]],["tags/651",[]],["title/652",[112,2.427,469,3.015,572,2.427,686,2.287]],["content/652",[2,2.409,32,1.467,112,4.395,242,2.619,272,3.834,550,4.826,947,6.092,2253,6.092,3303,7.302,3329,8.458,3330,8.458,3331,8.458,3332,8.458,3333,8.458,3334,8.458]],["tags/652",[]],["title/653",[112,2.558,271,1.419,298,1.561,688,1.976,697,1.714,1535,2.593,3335,3.003]],["content/653",[0,2.177,2,2.233,3,1.729,8,2.418,10,2.135,16,0.616,32,1.121,112,4.559,125,2.845,242,3.083,269,2.418,298,2.202,362,2.275,371,2.02,381,2.641,388,2.52,488,2.641,496,2.02,566,2.387,662,2.687,688,2.788,697,3.69,760,4.042,775,6.496,915,2.641,920,1.821,938,2.845,1235,2.275,1352,3.486,1591,3.658,1830,5.933,2183,2.976,2253,3.052,2984,3.888,3059,3.888,3314,3.486,3336,6.466,3337,4.237,3338,4.237,3339,4.237,3340,4.237,3341,8.774,3342,4.237,3343,4.237,3344,6.466,3345,4.237,3346,4.237,3347,4.237,3348,4.237]],["tags/653",[]],["title/631",[127,5.49]],["content/631",[14,3.927,126,5.681,127,6.038,128,6.516,129,4.392,130,6.18,131,6.956,132,6.956,133,2.819,134,6.18,135,5.16,136,6.338]],["tags/631",[]],["title/632",[164,1.698]],["content/632",[1,2.44,109,3.704,127,7.282,164,2.252,167,2.741,253,3.529,261,2.741,356,2.473,418,2.637,1749,5.246]],["tags/632",[]],["title/633",[1021,4.907]],["content/633",[]],["tags/633",[]],["title/634",[302,3.136,673,3.439,3349,4.462]],["content/634",[9,1.858,10,3.494,127,4.757,172,3.905,194,2.745,260,3.46,302,6.353,314,2.21,330,4.728,418,2.106,476,4.656,659,4.009,673,5.83,760,3.194,1048,4.397,1449,4.656,1749,4.545,1873,3.905,2146,5.705,3124,4.757,3349,9.039,3350,6.933,3351,6.933]],["tags/634",[]],["title/635",[2,1.841,133,2.071]],["content/635",[3,2.214,4,2.357,8,4.533,47,2.184,78,2.203,133,3.217,217,3.855,302,4.594,314,2.532,364,4.726,476,5.335,652,3.465,835,4.872,894,4.004,959,5.129,1449,5.335,3349,6.537,3352,7.944]],["tags/635",[]],["title/636",[268,3.252]],["content/636",[0,2.019,133,2.675,268,4.211,515,3.847,1614,4.483,1616,7.662,1744,5.607,3353,7.209,3354,8.944,3355,7.209,3356,7.209,3357,8.35]],["tags/636",[]],["title/637",[515,3.686]],["content/637",[0,2.131,9,2.103,515,5.044,954,5.653,1588,5.653,1614,4.214,1744,5.271,2620,6.458,3353,6.776,3354,8.603,3355,6.776,3356,6.776,3358,7.849,3359,7.849]],["tags/637",[]],["title/638",[1764,4.248]],["content/638",[0,1.933,1614,4.789,1744,5.99,1764,5.727,3353,7.701,3354,9.313,3355,7.701,3356,7.701]],["tags/638",[]],["title/639",[304,3.78]],["content/639",[16,1.296,108,4.602,133,2.857,167,2.815,304,5.097,330,4.587,3349,7.339,3360,8.919,3361,8.919]],["tags/639",[]],["title/654",[137,5.372]],["content/654",[16,1.262,126,5.606,137,5.831,138,5.506,139,4.495,140,6.629,141,6.629,142,3.089,143,6.863,144,5.958,145,6.863,146,6.098]],["tags/654",[]],["title/655",[164,1.698]],["content/655",[1,2.577,109,3.912,137,7.365,164,1.946,167,2.894,253,3.727,356,2.612,1749,4.533]],["tags/655",[]],["title/656",[16,0.596,53,1.228,137,2.754,544,2.601,757,2.44]],["content/656",[53,2.962,137,6.641,261,2.448,306,4.03,356,2.817,418,2.356,544,6.271,718,7.117,757,4.613,956,4.369,1526,5.922,2251,7.117,3362,7.755,3363,7.755,3364,7.117,3365,7.117,3366,7.755,3367,7.755]],["tags/656",[]],["title/657",[1021,4.907]],["content/657",[24,4.802,137,6.335,299,3.736,400,8.657,939,6.795,2132,7.458,3368,9.434]],["tags/657",[]],["title/658",[147,5.372]],["content/658",[16,1.029,100,4.492,106,2.388,107,4.975,115,2.752,126,4.573,133,2.987,134,7.322,147,6.262,148,4.277,149,4.277,150,4.096,151,6.717,152,7.371,153,4.042,154,3.642,155,4.573,156,6.137,157,5.599,158,5.599,159,5.599,160,5.408,161,4.573]],["tags/658",[]],["title/659",[164,1.698]],["content/659",[2,1.975,12,1.856,32,1.202,63,4.186,65,2.837,133,2.221,147,7.889,164,2.189,244,3.248,268,2.818,304,3.276,467,3.168,515,3.194,1680,8.727,1764,3.681,1768,8.436,3369,6.933]],["tags/659",[]],["title/660",[2,2.279]],["content/660",[3,1.941,47,2.942,78,2.441,89,3.957,94,4.672,324,3.377,338,4.525,530,5.909,1787,6.956,3076,8.074,3370,8.799]],["tags/660",[]],["title/661",[0,0.837,147,3.136,353,2.117,3124,3.205]],["content/661",[0,1.865,2,2.011,78,1.321,104,1.287,147,8.012,222,1.827,240,3.248,242,1.474,244,3.307,330,2.449,331,1.923,339,3.074,353,4.718,356,2.965,374,3.02,392,1.839,416,2.813,418,2.144,441,3.975,494,2.474,697,5.309,1740,4.741,1878,4.558,2710,4.33,2952,6.6,3124,5.773,3260,4.369]],["tags/661",[]],["title/662",[282,4.45]],["content/662",[2,2.767,32,1.684,242,3.008,245,5.048,283,6.161]],["tags/662",[]],["title/663",[284,3.359,285,3.471]],["content/663",[3,1.356,5,2.405,7,2.605,23,2.437,47,2.331,106,2.073,109,3.617,164,2.059,167,1.941,175,2.569,193,3.659,238,3.517,243,3.414,253,2.5,261,2.676,284,3.196,285,4.552,330,3.163,345,2.176,361,2.881,391,3.51,397,4.13,418,1.868,536,4.047,558,2.587,592,3.9,616,4.43,652,2.682,1012,5.061,1021,3.772,1422,4.13,1558,5.061,1702,4.862,2217,5.31]],["tags/663",[]],["title/664",[1623,5.924]],["content/664",[]],["tags/664",[]],["title/665",[255,3.964,256,4.341]],["content/665",[1,3.13,255,6.254,256,7.477,356,2.905,674,3.721,701,3.633,1713,3.988,3371,4.025,3372,4.025,3373,7.029,3374,8.142,3375,6.699]],["tags/665",[]],["title/666",[255,3.326,256,3.641,2749,4.976]],["content/666",[1,3.13,255,6.254,256,7.477,356,2.905,674,3.721,701,3.633,1713,3.988,3371,4.025,3372,4.025,3373,7.029,3375,6.699,3376,8.142]],["tags/666",[]],["title/667",[255,3.326,256,3.641,3377,5.423]],["content/667",[1,3.13,255,6.254,256,7.477,356,2.905,674,3.721,701,3.633,1713,3.988,3371,4.025,3372,4.025,3373,7.029,3375,6.699,3378,8.142]],["tags/667",[]],["title/668",[57,4.072]],["content/668",[]],["tags/668",[]],["title/669",[3379,8]],["content/669",[1,3.007,356,3.047,674,4.021,701,3.927,1713,4.31,3371,4.35,3372,4.35,3380,8.799,3381,8.799,3382,8.799]],["tags/669",[]],["title/670",[3383,7.341]],["content/670",[1,2.935,356,2.974,674,3.865,701,3.774,1713,4.142,3371,4.181,3372,4.181,3383,9.582,3384,8.458,3385,8.458,3386,8.458,3387,8.458]],["tags/670",[]],["title/671",[3388,8]],["content/671",[1,3.24,356,3.047,674,4.021,701,3.927,1713,4.31,3371,4.35,3372,4.35,3389,8.799,3390,8.799]],["tags/671",[]],["title/672",[3391,8]],["content/672",[]],["tags/672",[]],["title/673",[319,4.786,3392,5.931]],["content/673",[1,2.935,356,2.974,674,3.865,701,3.774,1713,4.142,3371,4.181,3372,4.181,3392,9.582,3393,8.458,3394,7.761,3395,7.761,3396,7.761]],["tags/673",[]],["title/674",[3397,8]],["content/674",[1,3.007,356,3.047,674,4.021,701,3.927,1713,4.31,3371,4.35,3372,4.35,3398,8.799,3399,8.799,3400,8.799]],["tags/674",[]],["title/675",[122,3.136,1887,3.569,3401,5.423]],["content/675",[1,2.93,222,2.718,240,2.735,324,2.718,353,4.227,356,3.279,392,2.735,674,3.237,701,3.161,744,4.661,920,3.044,1713,3.469,2952,5.913,3371,3.502,3372,3.502,3375,5.828,3402,7.083,3403,9.325,3404,7.083,3405,9.325]],["tags/675",[]],["title/676",[3406,8]],["content/676",[1,3.007,356,3.047,674,4.021,701,3.927,1713,4.31,3371,4.35,3372,4.35,3407,8.799,3408,8.799,3409,8.799]],["tags/676",[]],["title/677",[3410,8]],["content/677",[1,3.007,356,3.047,674,4.021,701,3.927,1713,4.31,3371,4.35,3372,4.35,3411,8.799,3412,8.799,3413,8.799]],["tags/677",[]],["title/678",[139,3.389]],["content/678",[]],["tags/678",[]],["title/679",[3414,8]],["content/679",[1,3.007,356,3.047,674,4.021,701,3.927,1713,4.31,3371,4.35,3372,4.35,3415,8.799,3416,8.799,3417,8.799]],["tags/679",[]],["title/680",[3418,8]],["content/680",[1,3.007,356,3.047,674,4.021,701,3.927,1713,4.31,3371,4.35,3372,4.35,3419,8.799,3420,8.799,3421,8.799]],["tags/680",[]],["title/681",[3422,8]],["content/681",[1,3.007,356,3.047,674,4.021,701,3.927,1713,4.31,3371,4.35,3372,4.35,3423,8.799,3424,8.799,3425,8.799]],["tags/681",[]],["title/682",[2049,3.015,3426,4.285,3427,4.285,3428,4.285]],["content/682",[1,2.801,356,2.838,674,3.587,701,3.502,1713,3.844,3371,3.88,3372,3.88,3426,9.144,3427,10.047,3428,10.047,3429,7.849,3430,7.849,3431,7.849,3432,7.849]],["tags/682",[]],["title/683",[3433,8]],["content/683",[1,2.912,353,3.785,356,3.208,674,3.816,701,3.726,1713,4.089,2952,5.295,3371,4.128,3372,4.128,3434,8.35,3435,8.35,3436,8.35,3437,8.35]],["tags/683",[]],["title/684",[2759,6.108]],["content/684",[]],["tags/684",[]],["title/685",[133,2.071,3438,6.464]],["content/685",[1,3.007,356,3.047,674,4.021,701,3.927,1713,4.31,3371,4.35,3372,4.35,3439,8.799,3440,8.799,3441,8.799]],["tags/685",[]],["title/686",[151,3.906,1384,4.682,1698,4.462]],["content/686",[1,3.007,356,3.047,674,4.021,701,3.927,1713,4.31,3371,4.35,3372,4.35,3442,8.799,3443,8.799,3444,8.799]],["tags/686",[]],["title/687",[3445,8]],["content/687",[1,3.007,356,3.047,674,4.021,701,3.927,1713,4.31,3371,4.35,3372,4.35,3446,8.799,3447,8.799,3448,8.799]],["tags/687",[]],["title/688",[3449,8]],["content/688",[1,3.007,356,3.047,674,4.021,701,3.927,1713,4.31,3371,4.35,3372,4.35,3450,8.799,3451,8.799,3452,8.799]],["tags/688",[]],["title/689",[3453,8]],["content/689",[1,3.007,356,3.047,674,4.021,701,3.927,1713,4.31,3371,4.35,3372,4.35,3454,8.799,3455,8.799,3456,8.799]],["tags/689",[]],["title/690",[41,4.565]],["content/690",[]],["tags/690",[]],["title/691",[100,4.099,319,4.786]],["content/691",[1,2.935,100,6.622,356,2.974,674,3.865,701,3.774,1713,4.142,3371,4.181,3372,4.181,3394,7.761,3395,7.761,3396,7.761,3457,8.458]],["tags/691",[]],["title/692",[3458,8]],["content/692",[1,3.007,356,3.047,674,4.021,701,3.927,1713,4.31,3371,4.35,3372,4.35,3459,8.799,3460,8.799,3461,8.799]],["tags/692",[]],["title/693",[3462,8]],["content/693",[1,3.007,356,3.047,674,4.021,701,3.927,1713,4.31,3371,4.35,3372,4.35,3463,8.799,3464,8.799,3465,8.799]],["tags/693",[]],["title/694",[3466,8]],["content/694",[1,3.007,356,3.047,674,4.021,701,3.927,1713,4.31,3371,4.35,3372,4.35,3467,8.799,3468,8.799,3469,8.799]],["tags/694",[]],["title/695",[582,5.762]],["content/695",[1,3.007,356,3.047,674,4.021,701,3.927,1713,4.31,3371,4.35,3372,4.35,3470,8.799,3471,8.799,3472,8.799]],["tags/695",[]],["title/696",[3473,8]],["content/696",[1,3.007,356,3.047,674,4.021,701,3.927,1713,4.31,3371,4.35,3372,4.35,3474,8.799,3475,8.799,3476,8.799]],["tags/696",[]],["title/697",[3477,8]],["content/697",[1,3.007,356,3.047,674,4.021,701,3.927,1713,4.31,3371,4.35,3372,4.35,3478,8.799,3479,8.799,3480,8.799]],["tags/697",[]],["title/698",[3481,8]],["content/698",[1,3.007,356,3.047,674,4.021,701,3.927,1713,4.31,3371,4.35,3372,4.35,3482,8.799,3483,8.799,3484,8.799]],["tags/698",[]],["title/699",[3485,8]],["content/699",[1,3.007,356,3.047,674,4.021,701,3.927,1713,4.31,3371,4.35,3372,4.35,3486,8.799,3487,8.799,3488,8.799]],["tags/699",[]],["title/700",[363,3.964,3489,6.464]],["content/700",[1,2.983,356,3.023,674,3.968,701,3.874,1713,4.252,3371,4.292,3372,4.292,3490,8.682,3491,8.682,3492,8.682,3493,8.682]],["tags/700",[]],["title/701",[3494,8]],["content/701",[1,3.007,356,3.047,674,4.021,701,3.927,1713,4.31,3371,4.35,3372,4.35,3495,8.799,3496,8.799,3497,8.799]],["tags/701",[]],["title/702",[306,4.157]],["content/702",[]],["tags/702",[]],["title/703",[3498,8]],["content/703",[1,3.007,356,3.047,674,4.021,701,3.927,1713,4.31,3371,4.35,3372,4.35,3499,8.799,3500,8.799,3501,8.799]],["tags/703",[]],["title/704",[]],["content/704",[]],["tags/704",[]],["title/705",[255,3.964,3502,6.464]],["content/705",[1,2.935,255,6.404,356,2.974,674,3.865,701,3.774,1713,4.142,3371,4.181,3372,4.181,3503,8.458,3504,8.458,3505,8.458,3506,8.458]],["tags/705",[]],["title/706",[1576,6.108]],["content/706",[7,2.937,12,1.554,16,1.008,32,1.594,72,3.334,118,3.364,142,2.466,156,4.562,164,2.189,166,2.763,284,3.603,285,3.722,334,2.661,392,2.677,403,5.294,418,2.106,873,3.248,1460,4.994,1493,4.757,1576,7.876,1701,4.869,1840,5.48,3095,7.565,3507,6.933,3508,6.362]],["tags/706",[]],["title/707",[1493,4.436,3095,5.319]],["content/707",[16,0.894,32,1.066,78,1.706,92,2.405,104,1.662,106,2.073,142,2.188,227,2.881,261,1.941,271,2.906,299,2.435,356,1.752,402,2.881,409,2.213,418,2.575,631,4.43,888,3.38,1214,7.32,1219,3.714,1258,4.696,1396,3.163,1493,7.176,1575,4.862,1576,8.376,1737,3.34,1804,5.31,2236,5.644,3095,8.605,3509,5.644,3510,6.15,3511,6.15,3512,6.15]],["tags/707",[]],["title/708",[1258,4.935,1575,5.11]],["content/708",[12,1.098,16,0.62,21,2.193,47,1.173,53,1.277,66,2.537,70,1.689,71,2.575,76,1.769,78,1.183,104,1.152,142,1.517,163,1.517,164,0.905,166,3.137,227,4.124,238,1.769,262,1.949,291,2.659,330,2.193,331,1.722,332,2.264,356,2.242,382,4.812,402,1.998,418,1.974,420,2.501,472,2.754,480,1.627,496,2.033,525,3.371,558,1.794,583,1.998,652,1.86,684,2.051,697,3.708,743,4.992,920,1.833,1258,6.721,1575,7.49,1576,8.371,1736,3.072,1760,5.347,2091,2.704,2618,3.913,2765,8.695,3136,3.913,3288,3.509,3508,5.963,3513,9.475,3514,4.265,3515,4.265,3516,4.265]],["tags/708",[]],["title/709",[290,5.619]],["content/709",[10,4.053,53,2.409,78,2.231,104,2.734,290,5.648,291,5.013,292,5.629,293,6.943,294,5.192,295,5.955,296,3.226,297,4.932,298,4.179,299,3.184,300,4.856,301,5.955,302,4.651]],["tags/709",[]],["title/710",[164,1.698]],["content/710",[1,2.347,65,3.417,91,4.703,109,3.563,133,2.675,164,2.198,167,2.636,253,3.394,290,7.276,292,4.645,304,3.946,356,2.378,888,4.589,1749,4.128]],["tags/710",[]],["title/711",[16,0.596,53,1.228,290,2.88,544,2.601,757,2.44]],["content/711",[10,4.053,53,2.409,104,2.173,139,3.407,222,3.086,261,2.538,320,6.659,326,3.184,356,2.291,544,5.1,757,4.784,956,4.53,1228,5.792,1396,4.135,3365,7.379,3517,8.042,3518,8.042,3519,8.042]],["tags/711",[]],["title/712",[1021,4.907]],["content/712",[24,4.603,73,4.201,133,2.897,290,6.351,292,5.03,304,4.273,314,2.883,2132,7.148,3520,9.043,3521,9.043]],["tags/712",[]],["title/713",[292,2.598,303,3.364,367,2.117,3071,3.136]],["content/713",[2,2.447,16,0.911,17,3.729,32,1.087,53,1.877,76,2.6,78,1.739,102,3.577,133,2.008,149,3.785,163,2.23,230,2.498,243,2.205,292,6.497,296,2.514,303,7.593,304,4.059,305,4.641,306,3.257,307,4.301,308,5.158,309,5.158,338,3.223,367,2.842,1120,3.365,1744,4.209,2035,4.402,2288,4.301,3069,5.752,3071,4.209,3522,4.786]],["tags/713",[]],["title/714",[3523,8]],["content/714",[5,3.35,92,3.35,142,3.048,217,4.158,367,4.772,399,5.342,686,4.197,3071,7.069,3315,7.863,3522,8.037,3524,8.569]],["tags/714",[]],["title/715",[65,2.219,643,3.326,3525,4.976]],["content/715",[3,1.545,9,1.877,16,1.018,29,5.047,32,1.605,53,2.099,65,2.867,76,2.907,102,3.999,133,2.245,164,1.487,242,2.169,243,2.465,292,3.898,304,3.311,367,3.177,643,4.298,1745,4.168,3071,6.218,3522,5.35,3525,8.496,3526,7.007,3527,7.007,3528,9.259,3529,7.007,3530,7.007,3531,7.007]],["tags/715",[]],["title/716",[324,2.081,3532,4.462,3533,4.462]],["content/716",[16,1.296,86,4.252,94,4.736,163,3.173,292,4.962,303,6.424,367,4.043,3071,5.99,3532,7.339,3533,7.339,3534,8.919]],["tags/716",[]],["title/717",[409,2.878]],["content/717",[3,1.858,4,1.808,78,1.69,94,3.235,133,3.093,242,1.886,367,3.819,399,3.798,409,2.192,455,4.001,480,2.324,550,4.807,794,3.309,873,2.855,894,3.071,1067,4.181,2113,5.916,3044,7.73,3071,4.092,3532,5.014,3533,6.931,3535,8.424,3536,8.424,3537,8.424,3538,6.093,3539,6.093,3540,6.093,3541,6.093,3542,6.093,3543,6.093]],["tags/717",[]],["title/718",[9,1.453,467,2.478,1421,3.569]],["content/718",[3,2.267,9,2.209,79,5.323,324,3.164,467,3.768,1054,4.586,1421,5.426,1449,6.902,2104,4.978,2222,9.431,3532,6.784,3533,6.784,3544,8.244,3545,8.244]],["tags/718",[]],["title/719",[4,1.386,48,2.022,421,3.205,1738,3.073]],["content/719",[76,3.7,292,4.962,303,6.424,367,4.043,390,5.09,416,3.555,1738,5.87,1745,5.306,2102,5.158,3071,5.99,3522,6.81]],["tags/719",[]],["title/720",[149,2.207,367,1.657,441,1.728,2035,2.568,3071,2.455,3522,2.791]],["content/720",[5,3.223,78,2.287,108,3.518,149,6.206,292,5.717,303,7.403,367,3.737,441,3.896,999,6.295,1873,5.79,2035,5.79,3071,5.536,3522,6.295]],["tags/720",[]],["title/721",[1778,5.762]],["content/721",[0,1.556,261,2.741,367,3.936,418,2.637,455,3.177,530,5.831,697,4.954,1240,6.629,3020,6.429,3071,7.126,3546,8.682,3547,8.682]],["tags/721",[]],["title/722",[310,5.49]],["content/722",[12,1.572,167,2.936,218,3.78,288,4.832,310,6.382,311,8.029,312,7.351,313,8.534]],["tags/722",[]],["title/723",[353,2.93,583,3.028]],["content/723",[7,3.997,164,2.002,216,5.456,345,3.338,1052,4.755,1287,5.983,2058,6.795]],["tags/723",[]],["title/724",[164,1.151,166,2.161,329,3.906]],["content/724",[5,3.032,47,2.132,164,1.646,167,2.448,175,3.239,243,2.729,253,3.152,261,2.448,310,6.786,356,2.209,432,4.425,696,5.743,721,4.548,888,4.262,956,4.369,1120,4.164,1749,3.834,1760,6.381,1938,6.696,2058,5.586,3548,7.755]],["tags/724",[]],["title/725",[104,1.747,165,1.945]],["content/725",[1,2.317,5,3.223,104,2.228,164,1.749,194,3.265,243,2.901,310,5.657,356,2.348,397,5.536,402,3.863,404,4.768,428,6.105,432,4.705,1170,5.582,2288,5.657,3549,8.244]],["tags/725",[]],["title/726",[16,0.788,944,3.808,1170,2.945]],["content/726",[32,1.255,47,1.991,108,3.089,164,1.536,175,3.024,216,4.187,343,5.528,409,2.605,418,2.874,424,4.395,432,4.131,706,3.844,1158,6.644,1169,6.491,1170,5.723,1691,5.528,1749,3.579,2823,4.44,3005,5.957,3550,7.24,3551,7.24,3552,7.24,3553,7.24]],["tags/726",[]],["title/727",[32,1.121,1287,4.099]],["content/727",[6,3.001,12,1.197,38,4.214,118,4.525,167,2.236,253,2.879,299,2.805,310,8.11,385,2.899,418,2.152,424,4.332,583,3.319,626,4.573,872,2.959,1169,4.861,1170,5.662,1287,5.913,1769,4.344,2288,6.399]],["tags/727",[]],["title/728",[32,1.121,2058,4.656]],["content/728",[12,1.491,16,0.947,32,1.13,118,4.281,150,5.102,164,1.872,167,2.058,175,2.723,248,3.423,253,2.65,288,4.584,299,2.581,310,7.353,424,3.028,427,4.695,626,4.209,872,2.723,1120,3.5,1169,4.473,1170,5.431,1769,3.998,2058,7.718,2288,6.053,2631,4.977]],["tags/728",[]],["title/729",[2,1.841,1379,4.54]],["content/729",[3,0.999,9,1.214,15,1.919,16,0.658,18,3.694,47,1.246,53,2.719,86,2.16,104,2.207,108,1.933,113,5.224,150,3.934,164,0.961,195,5.009,261,2.147,288,2.354,298,2.354,356,1.938,382,3.355,392,2.627,409,1.63,413,2.354,455,2.489,618,3.912,844,3.581,884,6.722,887,3.355,895,3.263,956,2.552,1054,5.412,1287,4.314,1396,4.2,1421,2.982,1676,6.242,1802,5.273,1887,2.982,2058,4.9,2066,2.824,2833,3.728,3364,6.242,3554,4.531,3555,6.802,3556,6.802,3557,4.531,3558,4.531,3559,4.531,3560,6.802]],["tags/729",[]],["title/730",[1778,5.762]],["content/730",[6,2.557,12,1.414,23,1.735,32,1.047,38,4.979,150,3.491,164,2.312,165,1.817,167,1.906,175,2.522,193,3.591,202,3.445,234,3.591,240,2.331,253,2.454,296,2.422,310,6.593,330,3.104,331,2.438,385,2.47,467,2.759,550,3.445,583,2.828,696,4.47,697,3.445,706,3.205,964,4.967,1037,3.898,1052,3.043,1170,5.218,1758,4.609,1817,4.967,2710,5.133,3561,6.037,3562,6.037]],["tags/730",[]],["title/731",[167,1.474,314,1.489,315,4.032,316,3.364]],["content/731",[16,1.314,164,1.919,258,4.911,284,4.699,285,4.855,316,6.513,317,6.513,318,6.351,319,6.696,320,5.951]],["tags/731",[]],["title/732",[164,1.698]],["content/732",[1,2.233,7,3.365,47,2.184,164,2.131,167,2.508,194,3.146,253,3.229,261,2.508,314,2.532,316,7.93,319,8.152,332,4.218,356,2.263,418,2.413,760,3.66]],["tags/732",[]],["title/733",[259,3.964,288,3.359]],["content/733",[1,1.863,6,1.855,9,1.173,16,0.963,23,1.906,28,2.3,32,0.759,37,5.724,38,2.605,39,3.075,40,3.781,41,3.783,76,1.816,101,3.278,164,2.289,167,1.382,175,3.342,176,2.3,194,1.734,259,2.686,288,3.445,299,2.625,305,3.242,316,5.763,324,1.68,343,3.343,353,1.985,356,1.888,361,2.052,385,1.792,418,2.43,424,4.146,468,2.252,558,1.842,585,3.075,652,1.91,690,2.378,799,3.005,1022,3.075,1169,4.549,1170,5.207,1492,2.605,1745,2.605,1769,2.686,1780,3.781,1873,2.467,2288,3.005,2751,8.708,2823,2.686,3005,3.603,3563,4.379,3564,4.379]],["tags/733",[]],["title/734",[320,5.265]],["content/734",[0,2.058,3,1.656,15,1.675,22,2.974,32,0.686,47,1.087,63,2.388,70,1.566,78,1.097,89,1.779,106,1.333,108,3.204,113,2.123,118,1.919,164,1.301,217,2.976,226,2.466,245,2.055,246,3.959,258,2.148,264,1.885,316,4.417,319,4.541,320,7.212,324,1.518,346,3.454,352,2.554,381,2.466,391,2.257,480,1.509,496,1.885,502,2.849,568,2.849,583,1.853,595,3.02,611,2.603,743,2.508,777,3.126,817,3.02,925,3.126,931,4.847,1054,5.622,1120,2.123,1159,5.294,1449,5.044,1704,3.254,2632,3.254,2816,3.415,3565,5.627,3566,5.627,3567,3.955,3568,3.955,3569,3.955,3570,3.955,3571,3.955,3572,3.955,3573,3.955,3574,3.955]],["tags/734",[]],["title/735",[5,2.12,291,3.38,320,3.569]],["content/735",[0,0.308,1,0.483,3,2.137,7,0.728,8,2.35,9,0.461,10,1.539,15,1.293,16,0.725,28,1.604,47,1.133,63,1.844,70,1.976,78,1.143,86,0.819,89,0.773,92,1.194,94,1.621,96,1.313,102,0.981,103,1.844,118,0.834,135,1.008,142,1.086,163,0.612,164,1.059,166,1.217,175,0.718,178,2.511,192,1.241,194,0.681,196,1.072,213,2.28,222,1.172,234,1.023,242,0.532,245,0.893,246,1.11,258,1.658,261,1.575,271,0.812,276,0.656,281,0.968,296,2.002,299,1.209,300,1.038,314,0.973,316,1.238,319,1.273,320,3.284,324,1.581,331,0.694,334,0.66,338,0.884,346,1.72,352,1.11,356,0.49,357,1.207,358,1.238,359,2.331,381,1.072,383,1.699,387,2.926,392,0.664,394,2.512,413,0.893,416,0.685,417,3.06,418,0.927,442,1.359,443,2.291,449,1.587,455,0.629,470,2.414,480,0.656,496,0.819,533,1.359,539,1.008,550,0.981,566,0.968,571,0.923,577,1.054,589,1.072,597,1.207,611,1.131,684,1.468,690,2.71,701,1.363,702,1.11,704,1.484,706,0.913,707,1.11,710,1.273,714,1.207,721,1.008,872,1.275,873,1.93,888,0.945,925,5.002,936,3.78,986,1.038,1054,4.065,1104,1.038,1235,0.923,1252,1.577,1482,6.338,1494,2.05,1640,1.238,1701,1.207,1737,0.934,1749,0.85,1757,1.577,1833,1.384,1875,1.313,2053,3.179,2074,2.144,2092,1.11,2099,1.484,2101,1.742,2102,4.839,2103,3.505,2124,1.131,2168,1.484,2249,1.313,2649,1.484,2710,1.054,2816,5.463,2823,1.873,3565,5.244,3566,1.577,3575,4.119,3576,1.719,3577,1.719,3578,1.719,3579,3.053,3580,4.119,3581,1.719,3582,1.719,3583,1.719,3584,6.328,3585,1.719,3586,1.719,3587,3.053,3588,1.719,3589,4.119,3590,1.719,3591,1.719,3592,3.053,3593,1.719,3594,1.719,3595,1.719]],["tags/735",[]],["title/736",[238,2.249,248,2.848,1778,3.906]],["content/736",[0,1.47,1,2.305,3,1.508,6,1.933,12,1.386,16,0.663,24,2.322,32,1.186,52,2.844,104,2.462,106,1.538,129,2.277,142,2.433,162,2.946,164,1.451,165,1.373,167,1.44,193,2.714,194,2.708,237,5.063,238,2.836,253,1.854,261,1.44,262,2.085,281,2.57,331,2.761,338,2.346,356,2.336,361,2.137,385,1.867,402,2.137,403,3.483,404,2.638,418,1.386,432,2.603,444,3.204,445,3.002,471,2.798,567,2.675,583,2.137,624,2.538,688,3.002,690,2.478,827,3.483,967,4.692,1056,4.802,1375,3.483,1483,2.507,1691,3.483,1736,3.286,1761,5.221,1769,2.798,1778,3.286,2634,3.606,2823,2.798,3596,4.562,3597,3.754,3598,4.186,3599,4.186]],["tags/736",[]],["title/737",[1,1.313,167,1.474,238,1.937,253,1.898]],["content/737",[]],["tags/737",[]],["title/738",[164,1.151,165,1.632,631,3.906]],["content/738",[1,2.584,51,3.276,52,4.322,103,4.186,123,3.722,142,2.466,165,2.767,356,1.975,418,3.133,465,7.43,514,5.48,599,5.294,1037,4.476,1749,3.427,1805,5.986,2720,7.938,3597,5.705,3600,6.933,3601,6.933,3602,6.933,3603,6.933,3604,6.933,3605,6.933,3606,6.362,3607,6.933]],["tags/738",[]],["title/739",[1,1.153,12,0.693,331,1.656,1056,2.88,1737,2.227]],["content/739",[1,2.714,3,2.411,4,1.808,12,1.423,16,0.885,18,3.309,32,1.056,78,1.69,164,1.293,226,3.798,331,3.899,351,4.652,361,2.855,409,2.192,418,1.851,521,3.573,527,5.591,550,3.477,565,4.181,570,3.864,716,6.067,1019,4.092,1056,5.916,1105,5.591,1228,4.389,1430,3.798,1483,3.348,1761,6.432,1791,4.816,1922,5.26,2814,5.591,3608,6.093,3609,6.093]],["tags/739",[]],["title/740",[104,1.262,165,1.405,238,1.937,546,3.28]],["content/740",[]],["tags/740",[]],["title/741",[243,1.643,1056,3.28,1488,4.285,3610,4.285]],["content/741",[0,1.809,8,3.236,10,2.858,16,0.824,165,1.706,166,2.26,175,2.368,238,2.352,243,3.268,261,1.79,275,2.727,385,2.32,398,3.535,416,2.26,418,1.722,480,3.056,493,3.891,567,3.325,624,4.456,652,3.494,701,3.575,967,3.891,986,3.424,1708,4.895,1779,4.329,1799,7.093,2294,4.666,2707,4.199,2710,3.478,3121,7.351,3606,5.203,3610,8.524,3611,8.011,3612,5.67,3613,8.011,3614,8.011]],["tags/741",[]],["title/742",[174,3.721,240,2.094,1170,2.945]],["content/742",[5,2.36,75,3.645,109,2.576,163,2.148,164,1.281,165,2.519,174,4.142,176,3.17,234,3.591,238,2.504,240,4.354,241,3.898,242,1.869,388,3.591,409,2.172,418,1.834,424,2.805,520,4.609,536,3.973,825,4.609,964,4.967,1170,6.124,1235,3.241,1484,3.358,1485,5.212,1545,4.772,1662,4.967,2023,4.967,2041,2.759,2066,3.763,2707,4.47,2723,5.212,2739,3.702,2917,5.539,3615,6.037]],["tags/742",[]],["title/743",[165,1.945,173,4.254]],["content/743",[12,1.411,165,3.389,173,5.495,174,5.73,227,3.912,238,4.672,240,3.224,530,5.607,872,3.488,1170,4.535,2830,6.87,3616,8.35]],["tags/743",[]],["title/744",[240,2.496,1050,5.931]],["content/744",[16,1.482,20,3.988,32,1.412,149,4.916,222,3.125,238,3.377,240,3.144,261,3.219,418,3.098,444,5.718,627,6.029,644,7.471,1749,4.025,3509,7.471,3617,7.471]],["tags/744",[]],["title/745",[163,1.661,353,2.117,456,3.843,518,2.48]],["content/745",[0,0.96,1,1.505,5,1.302,10,1.679,12,0.563,27,1.588,32,0.928,52,2.076,76,1.382,85,2.011,109,2.864,118,2.598,135,1.953,142,1.185,144,2.285,150,1.926,163,1.185,164,2.007,165,1.611,168,2.15,169,2.339,173,2.192,175,2.236,176,1.749,183,1.83,193,1.981,202,4.808,213,1.522,216,1.926,217,1.616,227,2.508,234,4.574,240,4.111,241,2.15,248,3.526,251,2.15,262,1.522,287,1.788,296,1.336,331,1.345,333,2.543,346,1.876,356,0.949,375,2.633,402,1.56,418,1.012,424,1.547,467,1.522,471,3.284,536,3.523,562,3.284,626,2.15,631,2.399,706,1.768,787,2.399,924,3.523,1169,2.285,1170,5.658,1248,4.913,1484,1.853,1526,2.543,1691,2.543,1702,4.232,1748,2.74,1828,3.056,2072,2.74,2297,2.399,2631,2.543,2707,4.971,2741,4.971,2810,2.875,2922,2.875,2926,2.74,3005,4.405,3618,5.354,3619,4.088,3620,3.056,3621,3.33]],["tags/745",[]],["title/746",[32,0.94,240,2.094,2741,4.015]],["content/746",[32,1.448,51,3.946,109,3.563,161,5.391,165,2.513,240,4.349,291,5.205,973,5.391,1056,5.864,2741,7.671,3622,8.35,3623,8.35,3624,6.6]],["tags/746",[]],["title/747",[240,2.094,385,2.219,1838,4.462]],["content/747",[32,1.142,123,3.535,140,6.781,172,3.709,194,2.607,240,4.154,261,2.078,298,3.421,329,4.742,331,2.659,356,1.875,366,6.041,383,3.663,385,4.113,392,2.542,496,4.234,744,5.845,1466,5.417,1589,5.417,1838,5.417,1970,5.417,2190,5.204,2933,5.027,3625,6.584,3626,6.584,3627,6.584,3628,6.584,3629,6.584,3630,6.584]],["tags/747",[]],["title/748",[1010,3.205,1802,3.015,2190,3.692,3631,4.285]],["content/748",[2,1.44,3,1.627,4,1.5,10,2.548,13,3.327,76,2.097,78,1.402,85,3.053,89,2.274,101,4.735,113,2.715,142,1.799,144,3.47,166,2.015,194,2.002,217,2.454,240,3.364,324,1.94,345,1.789,385,2.069,415,1.76,420,2.965,467,2.311,623,2.885,624,2.813,626,3.265,744,3.327,915,4.599,1115,5.463,1170,2.746,1225,3.861,1688,4.16,1737,2.746,1787,5.832,1802,4.764,1838,4.16,1875,3.861,2072,4.16,2104,3.053,2190,3.997,2226,4.64,2707,5.463,2744,4.64,3631,6.77,3632,7.521,3633,5.056,3634,4.64,3635,4.16,3636,5.056,3637,5.056,3638,5.056,3639,5.056,3640,5.056]],["tags/748",[]],["title/749",[240,2.496,3624,5.11]],["content/749",[0,0.943,4,1.561,16,0.764,17,3.129,18,2.857,25,3.788,26,2.651,32,1.692,52,3.279,70,3.006,104,2.408,129,2.625,166,2.096,238,2.182,240,3.767,389,3.895,392,2.031,397,5.098,409,2.731,464,2.576,480,2.896,521,3.084,536,3.461,548,4.826,610,3.176,686,2.576,757,3.129,873,2.464,1020,4.541,1052,2.651,1083,3.335,1170,2.857,1483,2.891,1665,4.158,1677,3.609,1737,2.857,1802,3.396,2049,4.902,2056,4.016,2057,4.328,2734,3.788,2736,4.733,3619,4.016,3632,4.541,3641,4.826,3642,4.826,3643,4.826,3644,5.26]],["tags/749",[]],["title/750",[240,2.496,2056,4.935]],["content/750",[16,0.894,18,5.68,32,1.47,101,4.191,104,2.826,165,1.851,176,3.23,182,3.163,231,3.834,240,4.236,356,1.752,418,1.868,444,4.32,449,4.406,524,5.31,546,4.32,551,4.22,623,3.51,757,3.659,1052,3.1,1396,4.36,1665,4.862,2056,6.474,2275,5.644,2734,4.43,2736,3.834,3619,6.474,3641,5.644]],["tags/750",[]],["title/751",[240,1.412,385,1.496,417,3.537,2113,2.568,3635,3.008]],["content/751",[70,2.745,104,1.874,195,5.639,240,3.55,275,4.422,331,2.799,417,4.252,464,3.396,496,4.383,623,3.956,1483,3.81,1745,4.124,1769,4.252,1802,4.476,2049,5.936,2113,6.457,2839,7.565,3635,5.705,3645,6.933,3646,6.933,3647,6.933,3648,6.933,3649,6.933,3650,6.933,3651,6.933]],["tags/751",[]],["title/752",[0,0.655,4,1.085,165,1.1,1052,1.843,1483,2.009,1852,3.355]],["content/752",[4,2.248,32,1.689,52,4.723,78,2.101,95,4.564,104,2.91,165,2.932,227,3.549,240,3.762,314,2.415,521,4.442,1052,3.818,1445,6.542,1483,4.163,1749,3.745,1805,6.541,3624,5.988]],["tags/752",[]],["title/753",[104,1.747,1802,4.174]],["content/753",[0,0.919,3,0.274,6,0.966,7,0.527,10,1.15,15,0.966,16,0.818,22,0.493,24,0.634,27,1.505,32,0.791,47,1.075,53,0.373,67,0.836,70,0.493,78,1.084,91,2.889,101,1.932,103,1.377,104,2.087,118,0.604,129,0.621,142,1.39,164,0.67,231,0.776,240,0.481,260,3.411,261,0.393,262,0.569,264,0.593,271,0.588,272,0.564,291,0.776,296,0.499,324,0.478,329,0.896,331,0.921,334,0.478,335,0.984,356,0.355,357,0.874,374,0.789,383,0.692,388,1.357,392,0.881,409,0.448,415,0.433,416,0.909,418,0.959,445,0.819,449,0.647,467,0.569,470,0.984,471,1.937,480,1.204,496,1.505,521,0.73,544,4.54,583,0.583,585,0.874,592,0.789,611,2.078,623,0.71,626,0.804,627,0.922,635,0.647,690,1.715,701,1.018,707,1.473,757,0.74,760,2.8,774,1.319,783,2.23,787,1.643,820,1.074,850,1.399,873,1.069,894,0.627,924,0.819,944,0.874,970,3.954,979,3.936,1010,5.769,1254,1.742,1335,1.142,1445,0.836,1447,0.854,1483,2.506,1520,1.877,1642,0.819,1644,2.984,1654,0.896,1661,2.682,1737,0.676,1739,1.074,1745,0.74,1802,5.293,1873,0.701,2049,2.039,2055,5.59,2126,1.074,2141,1.024,2295,1.142,2617,1.142,2736,2.437,2739,1.937,2832,2.093,2833,1.024,2834,2.093,2835,2.093,2836,2.093,2837,3.587,2838,1.142,2839,8.682,2841,2.093,2842,1.142,2844,2.897,2845,1.142,2850,2.897,2853,1.142,2856,1.142,2860,1.142,2925,3.374,2926,2.598,2929,1.074,3619,1.742,3624,0.984,3634,4.706,3642,2.897,3643,2.093,3652,1.245,3653,1.245,3654,1.245,3655,1.245,3656,3.908,3657,2.093,3658,4.706,3659,1.142,3660,1.245,3661,6.569,3662,2.281,3663,2.281,3664,2.281,3665,2.281,3666,2.281,3667,2.281,3668,3.908,3669,2.281,3670,1.245,3671,1.245,3672,1.245,3673,2.281,3674,1.245,3675,1.245,3676,1.245,3677,1.245,3678,1.245,3679,1.245,3680,1.245,3681,1.245,3682,1.245,3683,2.281,3684,2.281,3685,2.281,3686,1.245,3687,1.245,3688,1.245,3689,1.245,3690,1.245,3691,1.245,3692,2.281,3693,1.245,3694,1.245,3695,1.245,3696,1.245,3697,1.245,3698,1.245,3699,1.245,3700,1.245,3701,1.245,3702,1.245,3703,1.245,3704,1.245,3705,1.245,3706,1.245,3707,1.245,3708,1.245,3709,2.281,3710,2.281,3711,2.281,3712,1.245,3713,2.281,3714,1.245,3715,1.245,3716,1.245,3717,1.245,3718,1.245]],["tags/753",[]],["title/754",[32,0.94,104,1.465,1325,3.808]],["content/754",[4,1.64,6,2.341,15,2.341,32,1.588,47,1.52,78,1.533,95,2.589,104,2.85,129,2.758,240,2.134,258,3.001,261,1.744,272,2.505,296,3.156,399,3.445,416,2.203,418,1.679,430,4.547,521,3.241,544,3.505,760,2.546,1268,4.771,1287,3.505,1325,6.433,1396,2.842,1445,3.711,1644,4.22,1802,7.077,2740,5.071,3624,4.368,3719,7.866,3720,5.526,3721,7.866,3722,7.866,3723,5.526,3724,7.866,3725,7.866]],["tags/754",[]],["title/755",[139,3.389]],["content/755",[5,2.339,47,1.645,65,2.448,136,4.308,139,4.05,154,4.917,275,2.877,299,2.369,305,4.429,359,4.567,386,5.489,390,3.413,399,3.729,418,2.904,443,3.327,577,3.669,760,2.756,786,4.201,827,4.567,1325,7.258,1422,4.017,1445,4.017,1496,4.728,1644,6.35,1796,6.574,1874,4.567,3726,5.981,3727,8.317,3728,8.317,3729,8.317,3730,5.981,3731,5.981,3732,5.981]],["tags/755",[]],["title/756",[12,1.092,3733,6.464]],["content/756",[0,1.541,1,2.836,2,1.408,6,2.093,12,1.226,27,2.356,47,2.364,75,2.984,92,1.932,104,1.961,138,3.134,142,2.581,165,1.487,168,3.191,169,3.471,173,3.252,176,2.595,194,2.873,217,2.398,234,2.94,261,1.56,275,3.489,281,2.784,331,1.995,353,2.24,356,2.874,397,3.318,398,3.081,411,3.659,418,2.204,421,4.979,471,3.031,536,3.252,686,2.42,721,2.898,1021,3.031,1052,2.491,1056,5.096,1375,3.773,1415,3.252,1761,3.773,1874,3.773,2634,3.906,3020,3.659,3307,4.534,3598,4.534,3599,4.534,3734,4.534,3735,4.942,3736,4.942]],["tags/756",[]],["title/757",[467,2.954,1483,3.552]],["content/757",[4,2.301,47,2.132,65,3.174,104,2.672,240,2.995,275,3.73,471,4.757,536,5.104,1010,5.322,1325,5.447,1415,5.104,1430,4.835,1483,4.262,1875,5.922,2707,5.743,2810,6.696,3632,8.538,3635,6.381,3737,7.117,3738,7.755]],["tags/757",[]],["title/758",[2,1.041,104,0.988,138,2.318,418,1.11,421,2.509,3020,2.707]],["content/758",[2,2.775,9,2.03,17,4.507,47,2.083,65,3.1,92,2.962,129,3.781,165,2.932,261,2.391,356,2.158,381,4.723,418,2.959,421,5.198,563,3.611,1325,5.321,1799,5.784,1809,5.61,2739,4.646,3020,5.61,3216,6.952,3619,5.784]],["tags/758",[]],["title/759",[240,1.803,2113,3.28,2736,2.911,3739,4.67]],["content/759",[32,1.299,47,2.059,104,2.024,163,2.664,165,2.91,240,3.734,241,4.835,261,2.364,330,3.851,356,2.133,418,2.275,692,4.928,1325,5.26,1396,3.851,1415,4.928,1454,5.92,1769,4.593,1796,7.644,2041,3.422,2113,5.26,2739,4.593,3288,6.162]],["tags/759",[]],["title/760",[104,1.747,1806,5.319]],["content/760",[0,1.642,27,2.634,47,1.52,65,2.261,75,3.337,326,2.188,352,3.568,436,4.771,472,3.568,498,3.337,521,4.613,546,3.881,692,3.637,714,3.881,747,7.888,825,4.22,850,3.389,884,4.092,941,3.881,1010,5.398,1027,4.547,1053,4.092,1208,5.071,1325,5.525,1515,3.505,1520,4.547,1547,4.368,1644,4.22,1661,5.398,1796,4.368,1806,4.547,1808,5.071,2148,4.547,2823,3.389,2925,4.771,3657,7.218,3658,5.071,3659,5.071,3661,5.071,3740,5.526,3741,7.866,3742,5.526,3743,5.526,3744,5.526,3745,5.526]],["tags/760",[]],["title/764",[164,1.372,238,2.681]],["content/764",[17,5.532,32,1.613,164,1.973,238,3.858,245,4.832,317,6.699,318,6.532,388,5.532]],["tags/764",[]],["title/765",[164,0.991,631,3.364,1048,2.962,2739,2.864]],["content/765",[32,1.47,89,2.766,95,4.546,108,2.624,109,2.624,164,1.799,240,4.487,324,2.36,331,3.424,374,3.9,402,2.881,420,3.606,449,3.196,570,5.377,872,2.569,920,2.643,1048,6.153,1094,4.047,1445,4.13,1875,4.696,1989,5.694,2734,6.107,2739,5.2,2741,4.554,2926,5.061,3288,5.061,3746,6.15]],["tags/765",[]],["title/766",[32,0.81,164,0.991,240,1.803,631,3.364]],["content/766",[5,3.44,7,3.728,130,6.18,240,3.398,248,4.621,318,6.18,888,4.836,2734,6.338,2736,5.485,2739,5.397,3747,8.799,3748,8.799]],["tags/766",[]],["title/767",[164,1.372,3620,5.931]],["content/767",[16,1.273,32,1.725,78,1.79,161,4.167,164,1.859,165,2.637,213,2.949,234,3.839,240,4.443,244,3.024,276,2.462,326,2.556,329,4.649,402,3.024,707,4.167,924,4.247,1170,3.505,1483,4.816,1700,5.922,2734,4.649,2741,7.367,2922,8.589,3619,6.69]],["tags/767",[]],["title/768",[2739,4.907]],["content/768",[14,2.222,32,1.755,52,4.548,75,3.007,78,1.381,104,1.346,109,2.124,115,1.935,118,2.416,161,3.215,163,1.771,164,1.548,182,2.561,183,2.736,194,1.972,240,4.686,248,2.615,258,2.704,296,1.997,367,2.257,388,4.34,402,2.333,415,1.733,438,4.097,518,2.644,570,3.158,576,3.497,894,2.51,920,3.135,1073,5.767,1228,3.586,1858,3.277,2023,4.097,2038,3.936,2041,4.345,2104,3.007,2736,3.104,2739,4.475,2741,6.394,3749,4.979,3750,4.979]],["tags/768",[]],["title/761",[133,1.737,304,2.562,1778,3.906]],["content/761",[17,5.532,21,4.782,65,3.806,133,2.979,238,3.858,304,4.395,525,7.351,624,5.173]],["tags/761",[]],["title/762",[133,0.883,539,1.617,1048,1.749,1225,2.105,1925,2.53,2074,0.934,3751,2.53,3752,2.53,3753,2.53]],["content/762",[5,1.903,10,2.453,16,0.707,17,2.896,28,2.557,47,1.338,78,1.35,85,2.939,115,3.654,120,2.854,133,1.559,192,1.979,194,1.928,288,2.529,304,3.391,314,1.552,416,1.94,418,1.479,496,2.32,498,2.939,539,4.208,573,4.006,576,3.419,631,5.168,799,3.34,967,3.34,1019,3.269,1048,3.087,1275,2.896,1330,3.419,1515,4.55,1517,8.01,1574,3.848,1613,3.717,1621,2.557,1709,4.203,1743,3.848,1744,3.269,1749,3.547,1769,2.986,1815,4.203,2041,2.225,2053,2.708,2074,1.65,2110,2.854,2112,3.605,2146,5.904,2281,4.203,2699,4.203,2707,3.605,3020,3.605,3617,4.467,3751,4.467,3752,4.467,3753,4.467,3754,4.467,3755,4.868,3756,4.868]],["tags/762",[]],["title/763",[0,0.655,115,1.42,243,1.286,496,1.743,3597,3.008,3734,3.355]],["content/763",[0,0.384,2,0.61,3,1.8,4,0.635,8,2.112,15,3.458,16,0.846,17,1.274,22,1.466,28,1.944,32,0.848,47,1.344,53,0.641,65,0.876,83,1.059,104,1.777,113,1.15,115,0.832,142,1.317,164,0.454,166,1.475,194,1.466,195,2.999,206,1.469,238,0.888,240,1.429,243,1.302,244,1.003,261,1.543,276,0.817,290,2.6,292,3.239,296,0.859,304,3.648,324,1.421,334,0.822,340,1.438,346,2.085,359,5.022,389,3.62,390,2.79,409,1.759,415,0.745,418,0.65,432,2.112,467,0.979,496,1.021,518,1.137,563,1.021,577,4.034,607,1.586,624,2.059,660,1.383,675,1.504,692,1.409,701,3.642,706,1.137,712,2.27,783,1.222,887,1.586,888,1.177,956,1.206,1019,1.438,1054,2.059,1160,1.965,1274,3.397,1275,2.202,1445,3.911,1447,2.54,1545,1.693,1738,3.218,1744,3.283,1769,1.313,1798,1.693,1799,3.733,1800,7.084,1802,3.157,1809,1.586,1815,1.849,1831,1.438,1875,1.635,2041,0.979,2049,1.383,2213,1.635,2710,1.313,2714,1.965,2718,3.397,3597,1.762,3737,1.965,3754,1.965,3757,2.141,3758,5.823,3759,2.141,3760,2.141,3761,2.141,3762,2.141,3763,2.141,3764,2.141,3765,2.141,3766,2.141,3767,2.141,3768,2.141,3769,2.141,3770,2.141,3771,2.141,3772,2.141,3773,2.141,3774,2.141,3775,3.702,3776,3.702,3777,3.702,3778,3.702,3779,3.702,3780,3.702,3781,3.702,3782,3.702,3783,3.702,3784,2.141,3785,2.141,3786,2.141,3787,2.141,3788,2.141,3789,2.141,3790,2.141,3791,2.141,3792,2.141,3793,2.141,3794,2.141,3795,2.141,3796,2.141,3797,2.141,3798,2.141,3799,2.141,3800,2.141,3801,2.141,3802,2.141]],["tags/763",[]]],"invertedIndex":[["",{"_index":0,"title":{"20":{},"21":{},"37":{},"38":{},"39":{},"40":{},"41":{},"42":{},"43":{},"44":{},"45":{},"46":{},"47":{},"48":{},"49":{},"50":{},"51":{},"52":{},"53":{},"54":{},"55":{},"56":{},"57":{},"58":{},"59":{},"60":{},"61":{},"62":{},"63":{},"64":{},"65":{},"66":{},"67":{},"68":{},"69":{},"70":{},"71":{},"72":{},"73":{},"74":{},"75":{},"76":{},"77":{},"78":{},"79":{},"80":{},"81":{},"82":{},"189":{},"193":{},"661":{},"752":{},"763":{}},"content":{"20":{},"21":{},"37":{},"38":{},"39":{},"40":{},"41":{},"42":{},"43":{},"44":{},"45":{},"46":{},"47":{},"48":{},"49":{},"50":{},"51":{},"52":{},"53":{},"54":{},"55":{},"56":{},"57":{},"58":{},"59":{},"60":{},"61":{},"62":{},"63":{},"64":{},"65":{},"66":{},"67":{},"68":{},"69":{},"70":{},"71":{},"72":{},"73":{},"74":{},"75":{},"76":{},"77":{},"78":{},"79":{},"80":{},"81":{},"82":{},"88":{},"89":{},"106":{},"121":{},"122":{},"123":{},"124":{},"126":{},"127":{},"128":{},"130":{},"132":{},"133":{},"135":{},"137":{},"139":{},"142":{},"143":{},"153":{},"160":{},"169":{},"174":{},"181":{},"190":{},"209":{},"237":{},"238":{},"241":{},"244":{},"245":{},"247":{},"254":{},"256":{},"262":{},"277":{},"279":{},"280":{},"282":{},"286":{},"287":{},"289":{},"290":{},"293":{},"310":{},"311":{},"316":{},"322":{},"323":{},"329":{},"330":{},"333":{},"336":{},"337":{},"338":{},"339":{},"340":{},"341":{},"342":{},"348":{},"355":{},"357":{},"361":{},"364":{},"365":{},"366":{},"368":{},"369":{},"381":{},"382":{},"395":{},"396":{},"399":{},"406":{},"407":{},"410":{},"411":{},"416":{},"417":{},"419":{},"420":{},"421":{},"423":{},"424":{},"425":{},"427":{},"430":{},"431":{},"435":{},"436":{},"438":{},"439":{},"440":{},"452":{},"455":{},"486":{},"543":{},"544":{},"553":{},"556":{},"558":{},"560":{},"562":{},"564":{},"573":{},"576":{},"577":{},"584":{},"585":{},"586":{},"587":{},"589":{},"600":{},"601":{},"603":{},"604":{},"613":{},"622":{},"629":{},"636":{},"637":{},"638":{},"641":{},"642":{},"643":{},"644":{},"646":{},"648":{},"651":{},"653":{},"661":{},"721":{},"734":{},"735":{},"736":{},"741":{},"745":{},"749":{},"753":{},"756":{},"760":{},"763":{},"772":{}},"tags":{}}],["0",{"_index":2839,"title":{},"content":{"556":{},"558":{},"751":{},"753":{}},"tags":{}}],["0.1",{"_index":1342,"title":{},"content":{"181":{}},"tags":{}}],["00644",{"_index":862,"title":{},"content":{"135":{}},"tags":{}}],["00:00:00",{"_index":487,"title":{},"content":{"106":{}},"tags":{}}],["00:00:01",{"_index":492,"title":{},"content":{"106":{}},"tags":{}}],["01",{"_index":818,"title":{},"content":{"133":{}},"tags":{}}],["032.gz",{"_index":1413,"title":{},"content":{"190":{}},"tags":{}}],["04",{"_index":740,"title":{},"content":{"126":{}},"tags":{}}],["04ad0cea992a65db20cb1b0dbf6d1ce32c705ce879de51b22095fe8d28030815",{"_index":905,"title":{},"content":{"137":{}},"tags":{}}],["0644",{"_index":1424,"title":{},"content":{"191":{}},"tags":{}}],["1",{"_index":260,"title":{},"content":{"68":{},"69":{},"70":{},"71":{},"72":{},"73":{},"74":{},"75":{},"76":{},"77":{},"78":{},"79":{},"80":{},"92":{},"121":{},"122":{},"127":{},"179":{},"242":{},"264":{},"273":{},"282":{},"283":{},"394":{},"439":{},"440":{},"549":{},"556":{},"558":{},"560":{},"601":{},"634":{},"753":{}},"tags":{}}],["1,6",{"_index":1869,"title":{},"content":{"282":{}},"tags":{}}],["1.0",{"_index":1841,"title":{},"content":{"274":{},"558":{}},"tags":{}}],["1.0.tar.xz",{"_index":1843,"title":{},"content":{"274":{}},"tags":{}}],["1.2.3",{"_index":1686,"title":{},"content":{"240":{},"279":{}},"tags":{}}],["1.2.3.tar.gz",{"_index":1685,"title":{},"content":{"240":{},"769":{}},"tags":{}}],["1.2.3](https://github.com/foo/foo/releases/tag/v1.2.3",{"_index":1855,"title":{},"content":{"279":{}},"tags":{}}],["1.3g",{"_index":3664,"title":{},"content":{"753":{}},"tags":{}}],["1.4g",{"_index":3700,"title":{},"content":{"753":{}},"tags":{}}],["10",{"_index":2804,"title":{},"content":{"553":{},"554":{},"556":{},"558":{},"560":{},"562":{}},"tags":{}}],["10.11",{"_index":2874,"title":{},"content":{"558":{}},"tags":{}}],["100",{"_index":2708,"title":{},"content":{"508":{},"595":{}},"tags":{}}],["1000",{"_index":3269,"title":{},"content":{"644":{}},"tags":{}}],["1001px",{"_index":2367,"title":{},"content":{"462":{}},"tags":{}}],["100644",{"_index":1868,"title":{},"content":{"282":{}},"tags":{}}],["1011px",{"_index":2368,"title":{},"content":{"462":{}},"tags":{}}],["11",{"_index":2514,"title":{},"content":{"469":{},"596":{}},"tags":{}}],["111.3g",{"_index":3716,"title":{},"content":{"753":{}},"tags":{}}],["111.8g",{"_index":2840,"title":{},"content":{"556":{}},"tags":{}}],["1110",{"_index":2404,"title":{},"content":{"463":{}},"tags":{}}],["112p",{"_index":2347,"title":{},"content":{"459":{}},"tags":{}}],["116392",{"_index":802,"title":{},"content":{"132":{}},"tags":{}}],["11:0",{"_index":3671,"title":{},"content":{"753":{}},"tags":{}}],["120506",{"_index":804,"title":{},"content":{"132":{}},"tags":{}}],["120627",{"_index":806,"title":{},"content":{"132":{}},"tags":{}}],["121",{"_index":2350,"title":{},"content":{"459":{}},"tags":{}}],["1210w",{"_index":2673,"title":{},"content":{"499":{}},"tags":{}}],["1212w",{"_index":2674,"title":{},"content":{"499":{}},"tags":{}}],["123",{"_index":1741,"title":{},"content":{"243":{},"279":{}},"tags":{}}],["125",{"_index":2548,"title":{},"content":{"475":{}},"tags":{}}],["127.0.0.1",{"_index":3325,"title":{},"content":{"651":{}},"tags":{}}],["13",{"_index":2480,"title":{},"content":{"469":{},"473":{}},"tags":{}}],["135c",{"_index":2665,"title":{},"content":{"499":{}},"tags":{}}],["14",{"_index":2359,"title":{},"content":{"460":{},"463":{}},"tags":{}}],["14.iso",{"_index":2813,"title":{},"content":{"554":{},"556":{},"558":{}},"tags":{}}],["14.iso.sha256sum",{"_index":2806,"title":{},"content":{"553":{},"554":{}},"tags":{}}],["14.iso.sha256sum.sign",{"_index":2805,"title":{},"content":{"553":{}},"tags":{}}],["14:da:e9:10:f9:c7",{"_index":3271,"title":{},"content":{"644":{}},"tags":{}}],["14k",{"_index":2432,"title":{},"content":{"466":{}},"tags":{}}],["15",{"_index":2339,"title":{},"content":{"459":{},"462":{},"463":{},"468":{}},"tags":{}}],["15.3",{"_index":2903,"title":{},"content":{"558":{}},"tags":{}}],["15.6",{"_index":2899,"title":{},"content":{"558":{}},"tags":{}}],["1500",{"_index":3265,"title":{},"content":{"644":{}},"tags":{}}],["1510",{"_index":2666,"title":{},"content":{"499":{}},"tags":{}}],["1512",{"_index":2667,"title":{},"content":{"499":{}},"tags":{}}],["15api",{"_index":2473,"title":{},"content":{"469":{}},"tags":{}}],["15r",{"_index":2401,"title":{},"content":{"463":{}},"tags":{}}],["16.4",{"_index":3131,"title":{},"content":{"601":{}},"tags":{}}],["161",{"_index":1871,"title":{},"content":{"282":{}},"tags":{}}],["1610w",{"_index":2668,"title":{},"content":{"499":{}},"tags":{}}],["162",{"_index":1872,"title":{},"content":{"282":{},"283":{}},"tags":{}}],["17",{"_index":2343,"title":{"601":{}},"content":{"459":{},"460":{},"596":{}},"tags":{}}],["17.2m",{"_index":2858,"title":{},"content":{"556":{}},"tags":{}}],["1700",{"_index":2422,"title":{},"content":{"463":{}},"tags":{}}],["175.lt",{"_index":3553,"title":{},"content":{"726":{}},"tags":{}}],["1825ptz",{"_index":2329,"title":{},"content":{"459":{}},"tags":{}}],["187.current",{"_index":3551,"title":{},"content":{"726":{}},"tags":{}}],["1908",{"_index":3562,"title":{},"content":{"730":{}},"tags":{}}],["1910w",{"_index":2663,"title":{},"content":{"497":{},"499":{}},"tags":{}}],["192.168.1.0/24",{"_index":3326,"title":{},"content":{"651":{}},"tags":{}}],["192.168.147.233/24",{"_index":3275,"title":{},"content":{"644":{}},"tags":{}}],["192.168.147.255",{"_index":3276,"title":{},"content":{"644":{}},"tags":{}}],["1:1",{"_index":1359,"title":{},"content":{"182":{}},"tags":{}}],["1\\n",{"_index":1797,"title":{"259":{}},"content":{},"tags":{}}],["1gb",{"_index":3705,"title":{},"content":{"753":{}},"tags":{}}],["2",{"_index":287,"title":{},"content":{"68":{},"69":{},"70":{},"71":{},"72":{},"73":{},"74":{},"75":{},"76":{},"77":{},"78":{},"79":{},"80":{},"92":{},"153":{},"364":{},"387":{},"395":{},"398":{},"440":{},"469":{},"555":{},"558":{},"560":{},"644":{},"745":{}},"tags":{}}],["2*2",{"_index":2257,"title":{},"content":{"439":{}},"tags":{}}],["2.0",{"_index":618,"title":{},"content":{"121":{},"180":{},"729":{}},"tags":{}}],["2.1",{"_index":489,"title":{},"content":{"106":{}},"tags":{}}],["2.1.1",{"_index":612,"title":{},"content":{"121":{},"122":{}},"tags":{}}],["2.1.1.tar.gz",{"_index":602,"title":{},"content":{"121":{}},"tags":{}}],["2.7g",{"_index":3672,"title":{},"content":{"753":{}},"tags":{}}],["2.9.5",{"_index":837,"title":{},"content":{"135":{}},"tags":{}}],["2.9.5.tar.xz",{"_index":841,"title":{},"content":{"135":{}},"tags":{}}],["2.9.7",{"_index":1694,"title":{},"content":{"769":{}},"tags":{}}],["2.patch",{"_index":1406,"title":{},"content":{"190":{}},"tags":{}}],["20",{"_index":2157,"title":{},"content":{"363":{}},"tags":{}}],["200",{"_index":2261,"title":{},"content":{"439":{}},"tags":{}}],["2008",{"_index":2364,"title":{},"content":{"461":{},"641":{}},"tags":{}}],["2022",{"_index":758,"title":{"172":{}},"content":{"127":{}},"tags":{}}],["2023",{"_index":1230,"title":{"167":{}},"content":{},"tags":{}}],["2024",{"_index":739,"title":{"164":{}},"content":{"126":{},"133":{},"553":{},"554":{},"556":{},"558":{}},"tags":{}}],["205088",{"_index":746,"title":{},"content":{"127":{},"129":{}},"tags":{}}],["209.7",{"_index":2886,"title":{},"content":{"558":{}},"tags":{}}],["21",{"_index":3118,"title":{},"content":{"596":{}},"tags":{}}],["2220",{"_index":2675,"title":{},"content":{"499":{}},"tags":{}}],["2230",{"_index":2588,"title":{},"content":{"455":{}},"tags":{}}],["23",{"_index":819,"title":{},"content":{"133":{}},"tags":{}}],["23.3",{"_index":2981,"title":{},"content":{"560":{}},"tags":{}}],["234",{"_index":1742,"title":{},"content":{"243":{}},"tags":{}}],["234.3g",{"_index":3696,"title":{},"content":{"753":{}},"tags":{}}],["238.5g",{"_index":3690,"title":{},"content":{"753":{}},"tags":{}}],["238g",{"_index":3692,"title":{},"content":{"753":{}},"tags":{}}],["24",{"_index":741,"title":{},"content":{"126":{},"333":{},"392":{}},"tags":{}}],["240",{"_index":2435,"title":{},"content":{"468":{}},"tags":{}}],["25",{"_index":2980,"title":{},"content":{"560":{}},"tags":{}}],["251:0",{"_index":3675,"title":{},"content":{"753":{}},"tags":{}}],["252.x",{"_index":750,"title":{},"content":{"127":{}},"tags":{}}],["252:0",{"_index":3677,"title":{},"content":{"753":{}},"tags":{}}],["252:1",{"_index":3679,"title":{},"content":{"753":{}},"tags":{}}],["252:2",{"_index":3681,"title":{},"content":{"753":{}},"tags":{}}],["253",{"_index":751,"title":{},"content":{"127":{}},"tags":{}}],["253:0",{"_index":3683,"title":{},"content":{"753":{}},"tags":{}}],["253:1",{"_index":3685,"title":{},"content":{"753":{}},"tags":{}}],["253:2",{"_index":3694,"title":{},"content":{"753":{}},"tags":{}}],["253:3",{"_index":3695,"title":{},"content":{"753":{}},"tags":{}}],["2767v2w",{"_index":2493,"title":{},"content":{"469":{}},"tags":{}}],["2848",{"_index":2354,"title":{},"content":{"459":{}},"tags":{}}],["287m",{"_index":3680,"title":{},"content":{"753":{}},"tags":{}}],["29",{"_index":2949,"title":{},"content":{"563":{}},"tags":{}}],["2fa",{"_index":1465,"title":{},"content":{"198":{},"199":{}},"tags":{}}],["2ff1756..4bc344c",{"_index":1867,"title":{},"content":{"282":{}},"tags":{}}],["3",{"_index":251,"title":{},"content":{"62":{},"63":{},"64":{},"65":{},"92":{},"183":{},"184":{},"358":{},"440":{},"517":{},"558":{},"560":{},"745":{}},"tags":{}}],["3.0",{"_index":844,"title":{},"content":{"135":{},"181":{},"183":{},"184":{},"729":{}},"tags":{}}],["3.2.12",{"_index":2948,"title":{},"content":{"563":{}},"tags":{}}],["3.24.4.tar.gz",{"_index":911,"title":{},"content":{"137":{}},"tags":{}}],["3.7g",{"_index":3684,"title":{},"content":{"753":{}},"tags":{}}],["3.x",{"_index":1327,"title":{},"content":{"180":{}},"tags":{}}],["30",{"_index":2178,"title":{},"content":{"394":{}},"tags":{}}],["3000",{"_index":2464,"title":{},"content":{"469":{}},"tags":{}}],["306",{"_index":2381,"title":{},"content":{"462":{}},"tags":{}}],["30973",{"_index":3600,"title":{},"content":{"738":{}},"tags":{}}],["32",{"_index":930,"title":{},"content":{"138":{},"153":{},"449":{}},"tags":{}}],["32bit",{"_index":1315,"title":{"177":{}},"content":{"177":{},"627":{}},"tags":{}}],["3442",{"_index":2398,"title":{},"content":{"463":{}},"tags":{}}],["3452",{"_index":2399,"title":{},"content":{"463":{}},"tags":{}}],["350m",{"_index":2843,"title":{},"content":{"556":{}},"tags":{}}],["370z",{"_index":2335,"title":{},"content":{"459":{}},"tags":{}}],["39.7g",{"_index":2846,"title":{},"content":{"556":{}},"tags":{}}],["3945abg",{"_index":2590,"title":{},"content":{"455":{}},"tags":{}}],["3d",{"_index":2992,"title":{},"content":{"560":{}},"tags":{}}],["3rd",{"_index":2217,"title":{},"content":{"423":{},"469":{},"663":{}},"tags":{}}],["4",{"_index":281,"title":{},"content":{"68":{},"69":{},"70":{},"71":{},"72":{},"73":{},"74":{},"75":{},"76":{},"77":{},"78":{},"79":{},"80":{},"92":{},"245":{},"357":{},"411":{},"413":{},"560":{},"735":{},"736":{},"756":{}},"tags":{}}],["4.10.11",{"_index":3292,"title":{},"content":{"644":{}},"tags":{}}],["4.11.x",{"_index":3258,"title":{},"content":{"641":{}},"tags":{}}],["4.14.237",{"_index":3552,"title":{},"content":{"726":{}},"tags":{}}],["4.4",{"_index":2168,"title":{},"content":{"387":{},"561":{},"735":{}},"tags":{}}],["4.7.x",{"_index":3253,"title":{},"content":{"641":{}},"tags":{}}],["40.0",{"_index":483,"title":{},"content":{"106":{}},"tags":{}}],["40m",{"_index":3702,"title":{},"content":{"753":{}},"tags":{}}],["4270cto",{"_index":2503,"title":{},"content":{"469":{}},"tags":{}}],["440cn",{"_index":2680,"title":{},"content":{"499":{}},"tags":{}}],["46g",{"_index":3686,"title":{},"content":{"753":{}},"tags":{}}],["470",{"_index":2319,"title":{},"content":{"450":{},"546":{},"627":{}},"tags":{}}],["473",{"_index":2334,"title":{},"content":{"459":{}},"tags":{}}],["4830t",{"_index":2330,"title":{},"content":{"459":{}},"tags":{}}],["488.3m",{"_index":3691,"title":{},"content":{"753":{}},"tags":{}}],["49",{"_index":2648,"title":{},"content":{"493":{}},"tags":{}}],["49192",{"_index":800,"title":{},"content":{"132":{}},"tags":{}}],["4965",{"_index":2591,"title":{},"content":{"455":{}},"tags":{}}],["4th",{"_index":2506,"title":{},"content":{"469":{}},"tags":{}}],["5",{"_index":535,"title":{},"content":{"92":{},"439":{},"543":{}},"tags":{}}],["5.13.1",{"_index":3550,"title":{},"content":{"726":{}},"tags":{}}],["50",{"_index":2268,"title":{},"content":{"439":{},"469":{}},"tags":{}}],["500mb",{"_index":3717,"title":{},"content":{"753":{}},"tags":{}}],["501(c)(3",{"_index":1967,"title":{},"content":{"300":{}},"tags":{}}],["5025",{"_index":2342,"title":{},"content":{"459":{}},"tags":{}}],["5050",{"_index":2405,"title":{},"content":{"463":{}},"tags":{}}],["5066sec",{"_index":3280,"title":{},"content":{"644":{}},"tags":{}}],["51",{"_index":3133,"title":{},"content":{"601":{}},"tags":{}}],["5100",{"_index":2594,"title":{},"content":{"455":{}},"tags":{}}],["512m",{"_index":3714,"title":{},"content":{"753":{}},"tags":{}}],["512mb",{"_index":3706,"title":{},"content":{"753":{}},"tags":{}}],["5300",{"_index":2593,"title":{},"content":{"455":{}},"tags":{}}],["55555",{"_index":759,"title":{},"content":{"127":{}},"tags":{}}],["571g",{"_index":2348,"title":{},"content":{"459":{}},"tags":{}}],["572",{"_index":2341,"title":{},"content":{"459":{}},"tags":{}}],["573g",{"_index":2336,"title":{},"content":{"459":{}},"tags":{}}],["5750g",{"_index":2331,"title":{},"content":{"459":{}},"tags":{}}],["575g",{"_index":2337,"title":{},"content":{"459":{}},"tags":{}}],["6",{"_index":277,"title":{},"content":{"68":{},"69":{},"70":{},"71":{},"72":{},"73":{},"74":{},"75":{},"76":{},"77":{},"78":{},"79":{},"80":{}},"tags":{}}],["6.2g",{"_index":3668,"title":{},"content":{"753":{}},"tags":{}}],["6.9",{"_index":3507,"title":{},"content":{"706":{}},"tags":{}}],["6100",{"_index":2455,"title":{},"content":{"468":{}},"tags":{}}],["6200",{"_index":2584,"title":{},"content":{"455":{}},"tags":{}}],["6205",{"_index":2585,"title":{},"content":{"455":{}},"tags":{}}],["6235",{"_index":2586,"title":{},"content":{"455":{}},"tags":{}}],["6300",{"_index":2587,"title":{},"content":{"455":{}},"tags":{}}],["6360b",{"_index":2461,"title":{},"content":{"468":{}},"tags":{}}],["64",{"_index":1159,"title":{},"content":{"153":{},"560":{},"734":{}},"tags":{}}],["6450b",{"_index":2462,"title":{},"content":{"468":{}},"tags":{}}],["64bit",{"_index":3568,"title":{},"content":{"734":{}},"tags":{}}],["650.0",{"_index":2895,"title":{},"content":{"558":{}},"tags":{}}],["6730b",{"_index":2438,"title":{},"content":{"468":{}},"tags":{}}],["69.7g",{"_index":3682,"title":{},"content":{"753":{}},"tags":{}}],["6c00",{"_index":2454,"title":{},"content":{"468":{}},"tags":{}}],["6e786b3e86982272717ca4bed4f783fc43a678f3",{"_index":899,"title":{},"content":{"137":{}},"tags":{}}],["7",{"_index":1753,"title":{"643":{}},"content":{"245":{},"554":{},"557":{},"641":{},"643":{}},"tags":{}}],["7.2",{"_index":1870,"title":{},"content":{"282":{},"283":{}},"tags":{}}],["7.2.tar.xz",{"_index":892,"title":{},"content":{"137":{},"282":{}},"tags":{}}],["7.3g",{"_index":3698,"title":{},"content":{"753":{}},"tags":{}}],["7.5g",{"_index":2852,"title":{},"content":{"556":{}},"tags":{}}],["7.8g",{"_index":3676,"title":{},"content":{"753":{}},"tags":{}}],["70",{"_index":2516,"title":{},"content":{"469":{}},"tags":{}}],["700",{"_index":3545,"title":{},"content":{"718":{}},"tags":{}}],["7010",{"_index":2669,"title":{},"content":{"499":{}},"tags":{}}],["7060d",{"_index":2670,"title":{},"content":{"499":{}},"tags":{}}],["71.8g",{"_index":2849,"title":{},"content":{"556":{}},"tags":{}}],["712m",{"_index":2855,"title":{},"content":{"556":{}},"tags":{}}],["731g",{"_index":2344,"title":{},"content":{"459":{}},"tags":{}}],["7520",{"_index":2419,"title":{},"content":{"463":{}},"tags":{}}],["7548",{"_index":2406,"title":{},"content":{"463":{}},"tags":{}}],["7551",{"_index":2332,"title":{},"content":{"459":{}},"tags":{}}],["7579",{"_index":2400,"title":{},"content":{"463":{}},"tags":{}}],["765.61",{"_index":485,"title":{},"content":{"106":{}},"tags":{}}],["7:0",{"_index":3663,"title":{},"content":{"753":{}},"tags":{}}],["7:1",{"_index":3667,"title":{},"content":{"753":{}},"tags":{}}],["7:2",{"_index":3688,"title":{},"content":{"753":{}},"tags":{}}],["7b8d181cb57f42fa86a380bb9ad46abab859b60383607f731b65a9077f4b4e19",{"_index":842,"title":{},"content":{"135":{}},"tags":{}}],["8",{"_index":2984,"title":{},"content":{"560":{},"653":{}},"tags":{}}],["80",{"_index":2467,"title":{},"content":{"469":{}},"tags":{}}],["8265",{"_index":2595,"title":{},"content":{"455":{}},"tags":{}}],["8275",{"_index":2596,"title":{},"content":{"455":{}},"tags":{}}],["8440p",{"_index":2443,"title":{},"content":{"468":{}},"tags":{}}],["8460p",{"_index":2444,"title":{},"content":{"468":{}},"tags":{}}],["86f3442768bd2873cec693f83cdf80b4b444ad3cc14760b74361474fc87a4526",{"_index":893,"title":{},"content":{"137":{},"282":{}},"tags":{}}],["8740w",{"_index":2445,"title":{},"content":{"468":{}},"tags":{}}],["8760w",{"_index":2446,"title":{},"content":{"468":{}},"tags":{}}],["8:0",{"_index":2838,"title":{},"content":{"556":{},"753":{}},"tags":{}}],["8:1",{"_index":2842,"title":{},"content":{"556":{},"753":{}},"tags":{}}],["8:16",{"_index":3697,"title":{},"content":{"753":{}},"tags":{}}],["8:17",{"_index":3699,"title":{},"content":{"753":{}},"tags":{}}],["8:18",{"_index":3701,"title":{},"content":{"753":{}},"tags":{}}],["8:2",{"_index":2845,"title":{},"content":{"556":{},"753":{}},"tags":{}}],["8:3",{"_index":2848,"title":{},"content":{"556":{}},"tags":{}}],["8:64",{"_index":2851,"title":{},"content":{"556":{}},"tags":{}}],["8:65",{"_index":2854,"title":{},"content":{"556":{}},"tags":{}}],["8:66",{"_index":2857,"title":{},"content":{"556":{}},"tags":{}}],["9.0",{"_index":1265,"title":{},"content":{"169":{}},"tags":{}}],["9.3",{"_index":2978,"title":{},"content":{"560":{}},"tags":{}}],["90",{"_index":3631,"title":{"748":{}},"content":{"748":{}},"tags":{}}],["9130cw",{"_index":2681,"title":{},"content":{"499":{}},"tags":{}}],["914.38",{"_index":491,"title":{},"content":{"106":{}},"tags":{}}],["9330cdw",{"_index":2682,"title":{},"content":{"499":{}},"tags":{}}],["9500",{"_index":3000,"title":{},"content":{"560":{}},"tags":{}}],["9560",{"_index":2424,"title":{},"content":{"463":{}},"tags":{}}],["96",{"_index":838,"title":{},"content":{"135":{}},"tags":{}}],["96g",{"_index":3678,"title":{},"content":{"753":{}},"tags":{}}],["99",{"_index":2709,"title":{},"content":{"508":{}},"tags":{}}],["999.3",{"_index":2892,"title":{},"content":{"558":{}},"tags":{}}],["_.appdata.xml",{"_index":541,"title":{},"content":{"92":{}},"tags":{}}],["_.metainfo.xml",{"_index":540,"title":{},"content":{"92":{}},"tags":{}}],["a/package.yml",{"_index":1865,"title":{},"content":{"282":{}},"tags":{}}],["a11",{"_index":2558,"title":{},"content":{"475":{}},"tags":{}}],["a485",{"_index":2481,"title":{},"content":{"469":{}},"tags":{}}],["a506",{"_index":2532,"title":{},"content":{"472":{}},"tags":{}}],["a531",{"_index":2429,"title":{},"content":{"465":{}},"tags":{}}],["a660",{"_index":2546,"title":{},"content":{"475":{}},"tags":{}}],["abandon",{"_index":1241,"title":{},"content":{"168":{}},"tags":{}}],["abbrevi",{"_index":1850,"title":{},"content":{"278":{},"280":{}},"tags":{}}],["abcm2p",{"_index":1348,"title":{},"content":{"181":{}},"tags":{}}],["abcmidi",{"_index":1347,"title":{},"content":{"181":{}},"tags":{}}],["abi",{"_index":1735,"title":{},"content":{"242":{}},"tags":{}}],["abi_",{"_index":1710,"title":{},"content":{"236":{},"242":{}},"tags":{}}],["abi_lib",{"_index":1522,"title":{},"content":{"209":{},"236":{}},"tags":{}}],["abi_symbol",{"_index":1711,"title":{},"content":{"236":{}},"tags":{}}],["abi_used_lib",{"_index":663,"title":{},"content":{"122":{},"209":{},"236":{},"282":{}},"tags":{}}],["abi_used_symbol",{"_index":664,"title":{},"content":{"122":{},"236":{},"282":{}},"tags":{}}],["abid",{"_index":1326,"title":{},"content":{"180":{}},"tags":{}}],["abil",{"_index":1677,"title":{},"content":{"231":{},"290":{},"335":{},"361":{},"363":{},"394":{},"548":{},"555":{},"623":{},"749":{}},"tags":{}}],["abort",{"_index":1058,"title":{},"content":{"143":{}},"tags":{}}],["abov",{"_index":550,"title":{},"content":{"92":{},"190":{},"193":{},"224":{},"231":{},"236":{},"245":{},"246":{},"282":{},"362":{},"413":{},"554":{},"556":{},"629":{},"644":{},"651":{},"652":{},"717":{},"730":{},"735":{},"739":{}},"tags":{}}],["abseil",{"_index":1717,"title":{},"content":{"237":{}},"tags":{}}],["absenc",{"_index":955,"title":{},"content":{"139":{}},"tags":{}}],["absl",{"_index":1721,"title":{},"content":{"237":{}},"tags":{}}],["absolut",{"_index":1307,"title":{},"content":{"175":{},"220":{}},"tags":{}}],["ac",{"_index":2975,"title":{},"content":{"560":{}},"tags":{}}],["ac3160",{"_index":2581,"title":{},"content":{"455":{}},"tags":{}}],["ac7265",{"_index":2582,"title":{},"content":{"455":{}},"tags":{}}],["acceler",{"_index":2993,"title":{},"content":{"560":{}},"tags":{}}],["accept",{"_index":153,"title":{"247":{}},"content":{"47":{},"48":{},"49":{},"50":{},"54":{},"55":{},"56":{},"57":{},"58":{},"85":{},"116":{},"117":{},"155":{},"212":{},"213":{},"218":{},"241":{},"247":{},"658":{},"769":{}},"tags":{}}],["access",{"_index":1396,"title":{"644":{}},"content":{"189":{},"191":{},"221":{},"285":{},"298":{},"323":{},"333":{},"345":{},"348":{},"375":{},"404":{},"421":{},"448":{},"478":{},"480":{},"505":{},"559":{},"600":{},"641":{},"644":{},"646":{},"648":{},"651":{},"707":{},"711":{},"729":{},"750":{},"754":{},"759":{}},"tags":{}}],["accid",{"_index":3515,"title":{},"content":{"708":{}},"tags":{}}],["accident",{"_index":2188,"title":{},"content":{"398":{}},"tags":{}}],["accompani",{"_index":407,"title":{},"content":{"98":{},"179":{}},"tags":{}}],["accomplish",{"_index":2692,"title":{},"content":{"502":{},"603":{},"604":{},"605":{}},"tags":{}}],["accord",{"_index":604,"title":{},"content":{"121":{},"181":{},"598":{}},"tags":{}}],["accordingli",{"_index":3351,"title":{},"content":{"634":{}},"tags":{}}],["account",{"_index":475,"title":{"198":{},"430":{},"431":{}},"content":{"106":{},"129":{},"186":{},"196":{},"198":{},"199":{},"217":{},"293":{},"298":{},"349":{},"351":{},"376":{},"378":{},"394":{},"407":{},"431":{},"515":{},"623":{},"641":{},"648":{}},"tags":{}}],["acer",{"_index":2327,"title":{"459":{}},"content":{"459":{}},"tags":{}}],["achiev",{"_index":1352,"title":{},"content":{"182":{},"190":{},"273":{},"653":{}},"tags":{}}],["acl",{"_index":3304,"title":{},"content":{"647":{}},"tags":{}}],["act",{"_index":1916,"title":{},"content":{"289":{}},"tags":{}}],["action",{"_index":1024,"title":{"143":{},"144":{},"145":{},"146":{},"147":{},"148":{},"149":{},"150":{},"151":{},"152":{}},"content":{"165":{},"169":{},"329":{},"433":{},"438":{},"439":{},"440":{},"441":{},"509":{},"512":{},"565":{}},"tags":{}}],["action’",{"_index":1994,"title":{},"content":{"309":{}},"tags":{}}],["activ",{"_index":472,"title":{},"content":{"106":{},"216":{},"329":{},"382":{},"411":{},"428":{},"438":{},"485":{},"570":{},"641":{},"651":{},"708":{},"760":{}},"tags":{}}],["actual",{"_index":1198,"title":{},"content":{"160":{},"197":{},"448":{}},"tags":{}}],["ad",{"_index":464,"title":{"92":{},"106":{},"111":{},"126":{},"350":{},"377":{},"406":{},"430":{},"544":{},"650":{}},"content":{"106":{},"114":{},"127":{},"150":{},"166":{},"168":{},"175":{},"186":{},"217":{},"235":{},"264":{},"272":{},"280":{},"336":{},"350":{},"355":{},"377":{},"406":{},"512":{},"546":{},"629":{},"650":{},"651":{},"749":{},"751":{}},"tags":{}}],["ad5br",{"_index":2523,"title":{},"content":{"471":{}},"tags":{}}],["adapt",{"_index":2989,"title":{},"content":{"560":{}},"tags":{}}],["adb",{"_index":2615,"title":{},"content":{"481":{}},"tags":{}}],["add",{"_index":455,"title":{"224":{}},"content":{"91":{},"92":{},"104":{},"106":{},"111":{},"117":{},"120":{},"123":{},"124":{},"126":{},"129":{},"132":{},"137":{},"165":{},"184":{},"186":{},"195":{},"197":{},"224":{},"230":{},"240":{},"244":{},"245":{},"269":{},"275":{},"277":{},"280":{},"301":{},"327":{},"330":{},"336":{},"337":{},"349":{},"350":{},"353":{},"355":{},"357":{},"364":{},"376":{},"377":{},"381":{},"389":{},"395":{},"396":{},"405":{},"406":{},"409":{},"410":{},"411":{},"413":{},"423":{},"424":{},"427":{},"430":{},"435":{},"439":{},"444":{},"445":{},"512":{},"544":{},"573":{},"576":{},"577":{},"579":{},"580":{},"595":{},"597":{},"629":{},"647":{},"648":{},"717":{},"721":{},"729":{},"735":{},"769":{}},"tags":{}}],["add.desktop",{"_index":3533,"title":{"716":{}},"content":{"716":{},"717":{},"718":{}},"tags":{}}],["addit",{"_index":1120,"title":{"566":{}},"content":{"149":{},"231":{},"242":{},"245":{},"285":{},"309":{},"338":{},"365":{},"396":{},"411":{},"424":{},"427":{},"447":{},"448":{},"496":{},"565":{},"570":{},"602":{},"605":{},"629":{},"650":{},"713":{},"724":{},"728":{},"734":{}},"tags":{}}],["addition",{"_index":2632,"title":{},"content":{"486":{},"517":{},"629":{},"734":{}},"tags":{}}],["addr",{"_index":3261,"title":{},"content":{"644":{}},"tags":{}}],["address",{"_index":1237,"title":{},"content":{"168":{},"189":{},"196":{},"217":{},"287":{},"290":{},"293":{},"502":{},"515":{},"641":{},"644":{}},"tags":{}}],["adher",{"_index":1213,"title":{},"content":{"162":{},"173":{},"212":{},"242":{},"246":{}},"tags":{}}],["adjust",{"_index":2083,"title":{},"content":{"333":{},"428":{}},"tags":{}}],["admin",{"_index":3335,"title":{"653":{}},"content":{},"tags":{}}],["administr",{"_index":2130,"title":{},"content":{"349":{},"376":{},"392":{},"405":{}},"tags":{}}],["admonit",{"_index":1979,"title":{"309":{}},"content":{"309":{}},"tags":{}}],["advanc",{"_index":1200,"title":{},"content":{"161":{},"316":{},"320":{},"455":{},"527":{},"548":{},"586":{}},"tags":{}}],["advantag",{"_index":1358,"title":{},"content":{"182":{},"358":{},"485":{},"595":{}},"tags":{}}],["advertis",{"_index":1932,"title":{},"content":{"291":{},"641":{}},"tags":{}}],["advic",{"_index":1988,"title":{},"content":{"309":{}},"tags":{}}],["advis",{"_index":2691,"title":{},"content":{"502":{},"580":{}},"tags":{}}],["advisori",{"_index":720,"title":{},"content":{"125":{},"130":{},"133":{},"166":{},"309":{}},"tags":{}}],["aero",{"_index":2431,"title":{},"content":{"466":{}},"tags":{}}],["aesthet",{"_index":1529,"title":{},"content":{"212":{}},"tags":{}}],["affect",{"_index":2057,"title":{},"content":{"325":{},"339":{},"366":{},"749":{}},"tags":{}}],["affili",{"_index":1905,"title":{},"content":{"288":{}},"tags":{}}],["aforement",{"_index":3330,"title":{},"content":{"652":{}},"tags":{}}],["afterward",{"_index":273,"title":{},"content":{"68":{},"69":{},"70":{},"71":{},"72":{},"73":{},"74":{},"75":{},"76":{},"77":{},"78":{},"79":{},"80":{},"583":{},"601":{},"646":{}},"tags":{}}],["ag",{"_index":1593,"title":{"222":{}},"content":{"455":{},"594":{}},"tags":{}}],["again",{"_index":1422,"title":{},"content":{"191":{},"262":{},"395":{},"401":{},"424":{},"562":{},"563":{},"572":{},"629":{},"663":{},"755":{}},"tags":{}}],["against",{"_index":412,"title":{},"content":{"98":{},"101":{},"110":{},"122":{},"175":{},"182":{},"186":{},"195":{},"235":{},"237":{},"248":{},"272":{},"276":{},"279":{}},"tags":{}}],["agn",{"_index":2592,"title":{},"content":{"455":{}},"tags":{}}],["agnost",{"_index":2073,"title":{},"content":{"327":{},"567":{}},"tags":{}}],["agre",{"_index":3223,"title":{},"content":{"629":{}},"tags":{}}],["ahci",{"_index":2932,"title":{},"content":{"549":{}},"tags":{}}],["ahead",{"_index":335,"title":{},"content":{"85":{},"101":{},"150":{},"561":{},"753":{}},"tags":{}}],["aid",{"_index":2788,"title":{},"content":{"532":{}},"tags":{}}],["aim",{"_index":347,"title":{},"content":{"88":{},"316":{},"321":{},"414":{},"442":{},"598":{}},"tags":{}}],["airplan",{"_index":2227,"title":{},"content":{"426":{}},"tags":{}}],["aka",{"_index":3058,"title":{},"content":{"568":{},"641":{}},"tags":{}}],["akonadi",{"_index":3790,"title":{},"content":{"763":{}},"tags":{}}],["ala",{"_index":640,"title":{},"content":{"121":{}},"tags":{}}],["algorithm",{"_index":1291,"title":{},"content":{"174":{}},"tags":{}}],["alia",{"_index":3108,"title":{},"content":{"595":{}},"tags":{}}],["alienwar",{"_index":2358,"title":{"460":{}},"content":{"460":{}},"tags":{}}],["alik",{"_index":1846,"title":{},"content":{"278":{}},"tags":{}}],["allow",{"_index":14,"title":{},"content":{"20":{},"21":{},"47":{},"48":{},"49":{},"50":{},"87":{},"91":{},"119":{},"138":{},"174":{},"179":{},"182":{},"189":{},"228":{},"240":{},"242":{},"243":{},"271":{},"288":{},"291":{},"323":{},"339":{},"348":{},"366":{},"392":{},"395":{},"400":{},"426":{},"428":{},"433":{},"434":{},"439":{},"448":{},"485":{},"514":{},"515":{},"528":{},"594":{},"605":{},"631":{},"640":{},"641":{},"646":{},"651":{},"768":{}},"tags":{}}],["allowed_users=anybodi",{"_index":3370,"title":{},"content":{"660":{}},"tags":{}}],["along",{"_index":2833,"title":{},"content":{"556":{},"558":{},"729":{},"753":{}},"tags":{}}],["alongsid",{"_index":1558,"title":{},"content":{"217":{},"299":{},"548":{},"663":{}},"tags":{}}],["alphabet",{"_index":1333,"title":{},"content":{"181":{},"308":{},"603":{},"604":{}},"tags":{}}],["alpin",{"_index":854,"title":{},"content":{"135":{}},"tags":{}}],["alreadi",{"_index":338,"title":{},"content":{"85":{},"86":{},"92":{},"102":{},"106":{},"117":{},"121":{},"147":{},"169":{},"224":{},"233":{},"240":{},"266":{},"267":{},"269":{},"275":{},"334":{},"382":{},"409":{},"556":{},"561":{},"563":{},"565":{},"577":{},"601":{},"660":{},"713":{},"735":{},"736":{},"769":{}},"tags":{}}],["alt",{"_index":2143,"title":{},"content":{"329":{},"411":{},"416":{},"438":{},"439":{},"440":{},"559":{}},"tags":{}}],["alter",{"_index":1167,"title":{},"content":{"153":{},"348":{},"392":{},"403":{}},"tags":{}}],["altern",{"_index":1552,"title":{},"content":{"216":{},"224":{},"282":{},"309":{},"333":{},"334":{},"362":{},"363":{},"371":{},"376":{},"380":{},"381":{},"392":{},"393":{},"404":{},"409":{},"413":{},"423":{},"554":{},"596":{},"603":{},"604":{}},"tags":{}}],["although",{"_index":1556,"title":{},"content":{"216":{},"598":{}},"tags":{}}],["alway",{"_index":459,"title":{},"content":{"105":{},"119":{},"179":{},"180":{},"182":{},"224":{},"227":{},"228":{},"237":{},"265":{},"271":{},"297":{},"298":{},"303":{},"304":{},"502":{},"505":{}},"tags":{}}],["am/pm",{"_index":2078,"title":{},"content":{"333":{}},"tags":{}}],["amaz",{"_index":3144,"title":{},"content":{"603":{}},"tags":{}}],["amd",{"_index":2290,"title":{},"content":{"447":{},"448":{}},"tags":{}}],["amend",{"_index":1239,"title":{"244":{},"245":{}},"content":{"168":{},"238":{},"244":{},"245":{},"264":{}},"tags":{}}],["american",{"_index":2017,"title":{},"content":{"315":{}},"tags":{}}],["amount",{"_index":2265,"title":{},"content":{"439":{}},"tags":{}}],["analyz",{"_index":140,"title":{},"content":{"47":{},"48":{},"49":{},"50":{},"654":{},"747":{}},"tags":{}}],["ancillari",{"_index":1592,"title":{},"content":{"221":{}},"tags":{}}],["and/or",{"_index":49,"title":{},"content":{"38":{},"39":{},"235":{},"291":{},"451":{},"458":{},"492":{},"498":{},"598":{}},"tags":{}}],["android",{"_index":100,"title":{"45":{},"479":{},"691":{}},"content":{"45":{},"46":{},"47":{},"48":{},"49":{},"50":{},"479":{},"480":{},"481":{},"658":{},"691":{}},"tags":{}}],["anim",{"_index":2245,"title":{},"content":{"435":{}},"tags":{}}],["anitya",{"_index":723,"title":{"129":{}},"content":{"125":{},"128":{},"129":{}},"tags":{}}],["anonym",{"_index":3289,"title":{"651":{}},"content":{"644":{},"651":{}},"tags":{}}],["anoth",{"_index":183,"title":{},"content":{"59":{},"60":{},"61":{},"98":{},"124":{},"137":{},"138":{},"161":{},"182":{},"189":{},"193":{},"233":{},"240":{},"243":{},"279":{},"309":{},"335":{},"363":{},"395":{},"411":{},"510":{},"572":{},"745":{},"768":{}},"tags":{}}],["answer",{"_index":1951,"title":{},"content":{"298":{},"505":{}},"tags":{}}],["anthi",{"_index":3228,"title":{},"content":{"630":{}},"tags":{}}],["anydesk",{"_index":3414,"title":{"679":{}},"content":{},"tags":{}}],["anydesk*.eopkg",{"_index":3417,"title":{},"content":{"679":{}},"tags":{}}],["anydesk*.eopkg;sudo",{"_index":3416,"title":{},"content":{"679":{}},"tags":{}}],["anyon",{"_index":98,"title":{},"content":{"40":{},"41":{},"42":{},"43":{},"322":{}},"tags":{}}],["anyth",{"_index":1574,"title":{},"content":{"220":{},"221":{},"254":{},"323":{},"762":{}},"tags":{}}],["anywher",{"_index":1519,"title":{},"content":{"209":{},"363":{},"380":{},"409":{},"433":{},"436":{},"441":{}},"tags":{}}],["apach",{"_index":853,"title":{"611":{}},"content":{"135":{},"611":{},"613":{}},"tags":{}}],["apart",{"_index":3329,"title":{},"content":{"652":{}},"tags":{}}],["apcupsd",{"_index":3065,"title":{},"content":{"568":{}},"tags":{}}],["app",{"_index":2112,"title":{},"content":{"337":{},"354":{},"356":{},"428":{},"439":{},"558":{},"762":{}},"tags":{}}],["appdata.xml",{"_index":549,"title":{},"content":{"92":{}},"tags":{}}],["appeal",{"_index":2286,"title":{},"content":{"442":{}},"tags":{}}],["appear",{"_index":2104,"title":{},"content":{"336":{},"339":{},"364":{},"366":{},"395":{},"409":{},"420":{},"423":{},"427":{},"430":{},"433":{},"542":{},"543":{},"562":{},"718":{},"748":{},"768":{}},"tags":{}}],["append",{"_index":2742,"title":{},"content":{"544":{}},"tags":{}}],["appimag",{"_index":3004,"title":{},"content":{"567":{}},"tags":{}}],["appind",{"_index":1341,"title":{},"content":{"181":{}},"tags":{}}],["appl",{"_index":105,"title":{"46":{},"461":{},"476":{}},"content":{"45":{},"46":{},"461":{},"526":{},"641":{}},"tags":{}}],["apple_boot",{"_index":2894,"title":{},"content":{"558":{}},"tags":{}}],["apple_hf",{"_index":2889,"title":{},"content":{"558":{}},"tags":{}}],["applet",{"_index":2081,"title":{},"content":{"329":{},"333":{},"336":{},"337":{},"338":{},"348":{},"355":{},"436":{}},"tags":{}}],["appli",{"_index":1052,"title":{"190":{},"752":{}},"content":{"143":{},"174":{},"177":{},"186":{},"189":{},"190":{},"231":{},"279":{},"280":{},"285":{},"286":{},"292":{},"335":{},"363":{},"394":{},"417":{},"421":{},"423":{},"425":{},"435":{},"548":{},"561":{},"568":{},"601":{},"723":{},"730":{},"749":{},"750":{},"752":{},"756":{}},"tags":{}}],["applic",{"_index":243,"title":{"63":{},"334":{},"362":{},"393":{},"418":{},"419":{},"420":{},"519":{},"597":{},"741":{},"763":{}},"content":{"62":{},"63":{},"64":{},"65":{},"66":{},"67":{},"91":{},"92":{},"94":{},"152":{},"189":{},"212":{},"233":{},"249":{},"250":{},"312":{},"329":{},"334":{},"336":{},"348":{},"355":{},"358":{},"361":{},"362":{},"363":{},"364":{},"366":{},"367":{},"371":{},"375":{},"376":{},"380":{},"381":{},"382":{},"383":{},"393":{},"396":{},"404":{},"411":{},"416":{},"419":{},"420":{},"424":{},"428":{},"435":{},"436":{},"438":{},"439":{},"441":{},"448":{},"519":{},"522":{},"526":{},"533":{},"536":{},"567":{},"568":{},"578":{},"581":{},"593":{},"594":{},"597":{},"598":{},"607":{},"620":{},"663":{},"713":{},"715":{},"724":{},"725":{},"741":{},"763":{}},"tags":{}}],["applications/util",{"_index":2879,"title":{},"content":{"558":{}},"tags":{}}],["apply_patch",{"_index":1051,"title":{},"content":{"143":{},"190":{}},"tags":{}}],["appreci",{"_index":2962,"title":{},"content":{"565":{}},"tags":{}}],["appropri",{"_index":1083,"title":{},"content":{"145":{},"146":{},"147":{},"148":{},"150":{},"151":{},"184":{},"231":{},"303":{},"425":{},"548":{},"563":{},"572":{},"749":{}},"tags":{}}],["approv",{"_index":1689,"title":{},"content":{"240":{}},"tags":{}}],["appstream",{"_index":504,"title":{"91":{},"92":{},"93":{}},"content":{"91":{},"92":{},"93":{},"94":{}},"tags":{}}],["april",{"_index":1276,"title":{"171":{}},"content":{},"tags":{}}],["ar",{"_index":477,"title":{},"content":{"106":{},"622":{}},"tags":{}}],["ar242x",{"_index":2561,"title":{},"content":{"452":{}},"tags":{}}],["ar542x",{"_index":2562,"title":{},"content":{"452":{}},"tags":{}}],["ar5b97",{"_index":2560,"title":{},"content":{"452":{}},"tags":{}}],["ar8161",{"_index":2564,"title":{},"content":{"452":{}},"tags":{}}],["ar9285",{"_index":2565,"title":{},"content":{"452":{}},"tags":{}}],["ar9287",{"_index":2566,"title":{},"content":{"452":{}},"tags":{}}],["ar928x",{"_index":2563,"title":{},"content":{"452":{}},"tags":{}}],["ar9462",{"_index":2567,"title":{},"content":{"452":{}},"tags":{}}],["ar9485",{"_index":2568,"title":{},"content":{"452":{}},"tags":{}}],["ar9485wb",{"_index":2569,"title":{},"content":{"452":{}},"tags":{}}],["ar9565",{"_index":2571,"title":{},"content":{"452":{}},"tags":{}}],["arch",{"_index":1151,"title":{},"content":{"153":{}},"tags":{}}],["architectur",{"_index":221,"title":{},"content":{"54":{},"55":{},"56":{},"57":{},"58":{},"153":{},"226":{}},"tags":{}}],["archiv",{"_index":889,"title":{},"content":{"137":{},"175":{},"177":{},"622":{}},"tags":{}}],["archive/2.1.1/unix",{"_index":601,"title":{},"content":{"121":{}},"tags":{}}],["area",{"_index":2059,"title":{},"content":{"326":{}},"tags":{}}],["aren't",{"_index":1691,"title":{},"content":{"272":{},"386":{},"726":{},"736":{},"745":{},"769":{}},"tags":{}}],["aren’t",{"_index":1318,"title":{},"content":{"177":{},"186":{}},"tags":{}}],["argument",{"_index":599,"title":{},"content":{"121":{},"142":{},"147":{},"192":{},"274":{},"738":{}},"tags":{}}],["around",{"_index":2141,"title":{},"content":{"329":{},"435":{},"505":{},"753":{}},"tags":{}}],["arrang",{"_index":2098,"title":{},"content":{"335":{},"363":{},"394":{},"434":{},"435":{}},"tags":{}}],["array",{"_index":1188,"title":{},"content":{"159":{},"160":{}},"tags":{}}],["arriv",{"_index":1596,"title":{},"content":{"222":{},"227":{},"252":{}},"tags":{}}],["arrow",{"_index":2942,"title":{},"content":{"562":{}},"tags":{}}],["articl",{"_index":317,"title":{},"content":{"81":{},"162":{},"269":{},"490":{},"561":{},"598":{},"731":{},"764":{}},"tags":{}}],["asciibet",{"_index":1332,"title":{},"content":{"181":{}},"tags":{}}],["asid",{"_index":3008,"title":{},"content":{"570":{}},"tags":{}}],["ask",{"_index":659,"title":{"256":{}},"content":{"121":{},"133":{},"166":{},"185":{},"216":{},"231":{},"240":{},"243":{},"255":{},"256":{},"335":{},"363":{},"394":{},"396":{},"402":{},"406":{},"583":{},"634":{},"769":{}},"tags":{}}],["aspect",{"_index":2095,"title":{},"content":{"335":{},"363":{},"394":{},"433":{}},"tags":{}}],["aspir",{"_index":2328,"title":{},"content":{"459":{}},"tags":{}}],["asset",{"_index":3221,"title":{"625":{}},"content":{"625":{}},"tags":{}}],["assign",{"_index":1427,"title":{},"content":{"192":{},"293":{},"650":{}},"tags":{}}],["assist",{"_index":1017,"title":{},"content":{"141":{},"293":{},"304":{}},"tags":{}}],["associ",{"_index":1193,"title":{},"content":{"160":{},"420":{}},"tags":{}}],["assum",{"_index":399,"title":{},"content":{"95":{},"161":{},"192":{},"193":{},"228":{},"256":{},"548":{},"595":{},"618":{},"650":{},"651":{},"714":{},"717":{},"754":{},"755":{}},"tags":{}}],["assumpt",{"_index":1199,"title":{},"content":{"161":{}},"tags":{}}],["asterisk",{"_index":1244,"title":{},"content":{"169":{}},"tags":{}}],["asu",{"_index":187,"title":{"462":{},"483":{}},"content":{"51":{},"52":{},"53":{},"450":{},"462":{}},"tags":{}}],["athero",{"_index":2559,"title":{"452":{}},"content":{"452":{}},"tags":{}}],["attach",{"_index":1554,"title":{},"content":{"216":{}},"tags":{}}],["attack",{"_index":3104,"title":{},"content":{"595":{}},"tags":{}}],["attempt",{"_index":1094,"title":{},"content":{"146":{},"225":{},"290":{},"583":{},"584":{},"585":{},"586":{},"587":{},"589":{},"598":{},"650":{},"765":{}},"tags":{}}],["attent",{"_index":1982,"title":{},"content":{"309":{}},"tags":{}}],["attract",{"_index":2171,"title":{},"content":{"387":{}},"tags":{}}],["attribut",{"_index":548,"title":{},"content":{"92":{},"749":{}},"tags":{}}],["au05",{"_index":2529,"title":{},"content":{"471":{}},"tags":{}}],["audio",{"_index":2232,"title":{"493":{}},"content":{"428":{},"489":{}},"tags":{}}],["august",{"_index":1266,"title":{"170":{}},"content":{},"tags":{}}],["auth",{"_index":1469,"title":{},"content":{"199":{}},"tags":{}}],["authent",{"_index":1467,"title":{"648":{},"649":{}},"content":{"198":{},"199":{},"345":{},"346":{},"349":{},"372":{},"373":{},"376":{},"401":{},"402":{},"427":{},"430":{},"515":{},"629":{},"649":{}},"tags":{}}],["author",{"_index":2013,"title":{},"content":{"314":{},"515":{},"517":{}},"tags":{}}],["auto",{"_index":382,"title":{"576":{}},"content":{"89":{},"556":{},"558":{},"575":{},"708":{},"729":{}},"tags":{}}],["autocomplet",{"_index":1516,"title":{},"content":{"209":{}},"tags":{}}],["autodep",{"_index":926,"title":{},"content":{"138":{}},"tags":{}}],["autogen",{"_index":1025,"title":{},"content":{"143":{}},"tags":{}}],["autom",{"_index":1934,"title":{},"content":{"291":{}},"tags":{}}],["automat",{"_index":441,"title":{"720":{}},"content":{"102":{},"103":{},"121":{},"124":{},"125":{},"138":{},"166":{},"168":{},"174":{},"177":{},"178":{},"186":{},"187":{},"234":{},"237":{},"242":{},"244":{},"258":{},"279":{},"333":{},"361":{},"364":{},"395":{},"396":{},"417":{},"435":{},"514":{},"532":{},"556":{},"558":{},"559":{},"580":{},"594":{},"642":{},"643":{},"651":{},"661":{},"720":{}},"tags":{}}],["autostart",{"_index":2222,"title":{},"content":{"424":{},"718":{}},"tags":{}}],["av",{"_index":3758,"title":{},"content":{"763":{}},"tags":{}}],["avahi",{"_index":3245,"title":{},"content":{"641":{}},"tags":{}}],["avail",{"_index":299,"title":{},"content":{"66":{},"67":{},"91":{},"104":{},"121":{},"135":{},"136":{},"137":{},"141":{},"147":{},"169":{},"170":{},"174":{},"182":{},"183":{},"185":{},"209":{},"227":{},"231":{},"302":{},"309":{},"334":{},"339":{},"353":{},"355":{},"357":{},"362":{},"366":{},"393":{},"395":{},"400":{},"401":{},"412":{},"417":{},"421":{},"425":{},"428":{},"433":{},"436":{},"438":{},"439":{},"441":{},"448":{},"532":{},"570":{},"575":{},"579":{},"594":{},"596":{},"603":{},"619":{},"623":{},"626":{},"630":{},"644":{},"657":{},"707":{},"709":{},"727":{},"728":{},"733":{},"735":{},"755":{}},"tags":{}}],["avoid",{"_index":340,"title":{},"content":{"85":{},"137":{},"217":{},"288":{},"309":{},"312":{},"434":{},"486":{},"561":{},"565":{},"763":{}},"tags":{}}],["avx2",{"_index":992,"title":{},"content":{"140":{},"154":{}},"tags":{}}],["avx256",{"_index":988,"title":{},"content":{"140":{}},"tags":{}}],["avx2build",{"_index":1176,"title":{},"content":{"154":{}},"tags":{}}],["away",{"_index":1659,"title":{},"content":{"228":{}},"tags":{}}],["awesom",{"_index":1615,"title":{},"content":{"223":{},"578":{}},"tags":{}}],["awk",{"_index":3598,"title":{},"content":{"736":{},"756":{}},"tags":{}}],["b",{"_index":3628,"title":{},"content":{"747":{}},"tags":{}}],["b)100",{"_index":484,"title":{},"content":{"106":{}},"tags":{}}],["b/package.yml",{"_index":1866,"title":{},"content":{"282":{}},"tags":{}}],["b218",{"_index":2555,"title":{},"content":{"475":{}},"tags":{}}],["b41",{"_index":2466,"title":{},"content":{"469":{}},"tags":{}}],["b50",{"_index":2468,"title":{},"content":{"469":{}},"tags":{}}],["back",{"_index":390,"title":{},"content":{"90":{},"212":{},"216":{},"335":{},"336":{},"344":{},"361":{},"363":{},"364":{},"487":{},"508":{},"562":{},"563":{},"564":{},"572":{},"601":{},"616":{},"646":{},"719":{},"755":{},"763":{}},"tags":{}}],["background",{"_index":1351,"title":{"182":{},"353":{},"380":{},"409":{}},"content":{"212":{},"353":{},"380":{},"409":{}},"tags":{}}],["backup",{"_index":3136,"title":{},"content":{"601":{},"708":{}},"tags":{}}],["backup/restor",{"_index":3129,"title":{},"content":{"601":{}},"tags":{}}],["bak",{"_index":3763,"title":{},"content":{"763":{}},"tags":{}}],["balanc",{"_index":1610,"title":{},"content":{"223":{}},"tags":{}}],["baloo",{"_index":3792,"title":{},"content":{"763":{}},"tags":{}}],["ban",{"_index":1879,"title":{},"content":{"285":{},"287":{}},"tags":{}}],["bar",{"_index":2152,"title":{},"content":{"361":{},"542":{}},"tags":{}}],["base",{"_index":850,"title":{},"content":{"135":{},"137":{},"174":{},"183":{},"201":{},"202":{},"243":{},"265":{},"288":{},"309":{},"560":{},"567":{},"601":{},"605":{},"753":{},"760":{}},"tags":{}}],["bash",{"_index":959,"title":{"207":{}},"content":{"139":{},"190":{},"191":{},"311":{},"568":{},"570":{},"571":{},"576":{},"577":{},"578":{},"580":{},"635":{}},"tags":{}}],["bashrc",{"_index":3021,"title":{},"content":{"568":{},"576":{},"577":{},"579":{}},"tags":{}}],["bashrc.d",{"_index":1495,"title":{},"content":{"207":{}},"tags":{}}],["bashrc.d/solu",{"_index":1498,"title":{},"content":{"207":{}},"tags":{}}],["basi",{"_index":207,"title":{},"content":{"54":{},"55":{},"56":{},"57":{},"58":{},"211":{},"285":{},"293":{}},"tags":{}}],["basic",{"_index":162,"title":{"59":{},"108":{},"509":{}},"content":{"59":{},"60":{},"61":{},"249":{},"323":{},"427":{},"448":{},"602":{},"650":{},"736":{}},"tags":{}}],["batch",{"_index":1047,"title":{},"content":{"143":{},"190":{}},"tags":{}}],["bbswitch",{"_index":2747,"title":{},"content":{"546":{}},"tags":{}}],["bcd2a0327ad40592a9c43e09a4d2ef834e6f17aa9a59012a5fb1007950b5ec",{"_index":613,"title":{},"content":{"121":{}},"tags":{}}],["bcm4312",{"_index":2572,"title":{},"content":{"453":{}},"tags":{}}],["bcm4313",{"_index":2573,"title":{},"content":{"453":{}},"tags":{}}],["bcm4322",{"_index":2574,"title":{},"content":{"453":{}},"tags":{}}],["bcm4324",{"_index":2575,"title":{},"content":{"453":{}},"tags":{}}],["bcm4331",{"_index":2576,"title":{},"content":{"453":{}},"tags":{}}],["bcm4365",{"_index":2577,"title":{},"content":{"453":{}},"tags":{}}],["bcm57785",{"_index":2578,"title":{},"content":{"453":{}},"tags":{}}],["bdb0061",{"_index":3604,"title":{},"content":{"738":{}},"tags":{}}],["bdb0087",{"_index":3601,"title":{},"content":{"738":{}},"tags":{}}],["be",{"_index":924,"title":{},"content":{"138":{},"175":{},"272":{},"300":{},"316":{},"321":{},"442":{},"548":{},"556":{},"745":{},"753":{},"767":{}},"tags":{}}],["bear",{"_index":2953,"title":{},"content":{"563":{}},"tags":{}}],["becom",{"_index":514,"title":{},"content":{"91":{},"168":{},"217":{},"448":{},"738":{}},"tags":{}}],["befor",{"_index":583,"title":{"723":{},"771":{}},"content":{"114":{},"119":{},"123":{},"126":{},"141":{},"142":{},"181":{},"200":{},"228":{},"248":{},"251":{},"265":{},"271":{},"277":{},"311":{},"325":{},"334":{},"361":{},"362":{},"393":{},"396":{},"406":{},"424":{},"439":{},"511":{},"550":{},"558":{},"563":{},"568":{},"580":{},"597":{},"603":{},"708":{},"727":{},"730":{},"734":{},"736":{},"753":{}},"tags":{}}],["begin",{"_index":584,"title":{},"content":{"119":{},"137":{},"166":{},"232":{},"265":{},"271":{},"644":{}},"tags":{}}],["beginn",{"_index":2698,"title":{},"content":{"504":{}},"tags":{}}],["behav",{"_index":1232,"title":{},"content":{"168":{},"324":{}},"tags":{}}],["behavior",{"_index":1944,"title":{},"content":{"293":{},"435":{}},"tags":{}}],["behaviour",{"_index":1428,"title":{},"content":{"192":{}},"tags":{}}],["behind",{"_index":1832,"title":{},"content":{"266":{},"448":{}},"tags":{}}],["belief",{"_index":1901,"title":{},"content":{"288":{}},"tags":{}}],["believ",{"_index":1570,"title":{},"content":{"217":{}},"tags":{}}],["belong",{"_index":885,"title":{},"content":{"137":{}},"tags":{}}],["below",{"_index":873,"title":{},"content":{"136":{},"137":{},"190":{},"278":{},"291":{},"292":{},"312":{},"330":{},"334":{},"336":{},"337":{},"350":{},"354":{},"364":{},"377":{},"381":{},"394":{},"404":{},"410":{},"449":{},"451":{},"458":{},"476":{},"491":{},"492":{},"498":{},"555":{},"556":{},"557":{},"558":{},"575":{},"601":{},"627":{},"629":{},"706":{},"717":{},"735":{},"749":{},"753":{},"769":{}},"tags":{}}],["benefit",{"_index":923,"title":{},"content":{"138":{},"140":{},"560":{}},"tags":{}}],["best",{"_index":431,"title":{"102":{}},"content":{"228":{},"448":{}},"tags":{}}],["beta",{"_index":2749,"title":{"666":{}},"content":{"546":{}},"tags":{}}],["beta/pspec.xml",{"_index":3376,"title":{},"content":{"666":{}},"tags":{}}],["better",{"_index":609,"title":{},"content":{"121":{},"168":{},"224":{},"240":{},"560":{}},"tags":{}}],["between",{"_index":1360,"title":{"436":{}},"content":{"182":{},"333":{},"336":{},"338":{},"355":{},"364":{},"365":{},"380":{},"395":{},"396":{},"397":{},"398":{},"409":{},"411":{},"423":{},"435":{},"436":{},"439":{},"440":{},"504":{},"544":{},"598":{},"629":{}},"tags":{}}],["beyond",{"_index":629,"title":{},"content":{"121":{},"222":{}},"tags":{}}],["bi",{"_index":3371,"title":{},"content":{"665":{},"666":{},"667":{},"669":{},"670":{},"671":{},"673":{},"674":{},"675":{},"676":{},"677":{},"679":{},"680":{},"681":{},"682":{},"683":{},"685":{},"686":{},"687":{},"688":{},"689":{},"691":{},"692":{},"693":{},"694":{},"695":{},"696":{},"697":{},"698":{},"699":{},"700":{},"701":{},"703":{},"705":{}},"tags":{}}],["big",{"_index":68,"title":{},"content":{"40":{},"41":{},"42":{},"43":{},"294":{}},"tags":{}}],["bin",{"_index":3567,"title":{},"content":{"734":{}},"tags":{}}],["bin/64bit",{"_index":3573,"title":{},"content":{"734":{}},"tags":{}}],["bin/bash",{"_index":3353,"title":{},"content":{"636":{},"637":{},"638":{}},"tags":{}}],["bin/zsh",{"_index":3010,"title":{},"content":{"572":{},"573":{}},"tags":{}}],["binari",{"_index":927,"title":{},"content":{"138":{},"149":{},"152":{},"173":{},"174":{},"178":{},"186":{},"192":{},"196":{},"220":{},"622":{}},"tags":{}}],["binaries/librari",{"_index":1014,"title":{},"content":{"140":{}},"tags":{}}],["bind",{"_index":972,"title":{"577":{}},"content":{"140":{},"575":{},"577":{},"580":{}},"tags":{}}],["bindings.bash",{"_index":3029,"title":{},"content":{"577":{}},"tags":{}}],["bindings.fish",{"_index":3036,"title":{},"content":{"577":{}},"tags":{}}],["bindings.zsh",{"_index":3038,"title":{},"content":{"577":{}},"tags":{}}],["binutil",{"_index":3209,"title":{},"content":{"622":{}},"tags":{}}],["bio",{"_index":2379,"title":{},"content":{"462":{},"469":{},"541":{},"548":{},"549":{},"560":{},"561":{}},"tags":{}}],["bit",{"_index":931,"title":{},"content":{"138":{},"153":{},"449":{},"560":{},"734":{}},"tags":{}}],["bitwig",{"_index":3392,"title":{"673":{}},"content":{"673":{}},"tags":{}}],["blank",{"_index":675,"title":{},"content":{"124":{},"278":{},"353":{},"354":{},"355":{},"555":{},"556":{},"560":{},"763":{}},"tags":{}}],["bleed",{"_index":811,"title":{},"content":{"132":{}},"tags":{}}],["block",{"_index":124,"title":{"310":{}},"content":{"47":{},"48":{},"49":{},"50":{},"140":{},"152":{},"310":{},"311":{},"640":{}},"tags":{}}],["blog",{"_index":2169,"title":{},"content":{"387":{},"442":{}},"tags":{}}],["blue",{"_index":2202,"title":{},"content":{"411":{}},"tags":{}}],["bluetooth",{"_index":2044,"title":{},"content":{"323":{}},"tags":{}}],["bodi",{"_index":1848,"title":{},"content":{"278":{},"279":{}},"tags":{}}],["bold",{"_index":1245,"title":{},"content":{"169":{}},"tags":{}}],["bolt",{"_index":1143,"title":{"152":{}},"content":{"152":{}},"tags":{}}],["bolt'",{"_index":1013,"title":{},"content":{"140":{}},"tags":{}}],["bolt_instr",{"_index":1146,"title":{},"content":{"152":{}},"tags":{}}],["bolt_merg",{"_index":1148,"title":{},"content":{"152":{}},"tags":{}}],["bolt_opt",{"_index":1150,"title":{},"content":{"152":{}},"tags":{}}],["bonjour",{"_index":3246,"title":{},"content":{"641":{}},"tags":{}}],["bonu",{"_index":2039,"title":{},"content":{"323":{}},"tags":{}}],["book",{"_index":1479,"title":{},"content":{"200":{}},"tags":{}}],["bookmark",{"_index":3016,"title":{},"content":{"574":{}},"tags":{}}],["bool",{"_index":922,"title":{},"content":{"138":{}},"tags":{}}],["boot",{"_index":240,"title":{"62":{},"540":{},"541":{},"542":{},"543":{},"547":{},"559":{},"561":{},"563":{},"742":{},"744":{},"746":{},"747":{},"749":{},"750":{},"751":{},"759":{},"766":{}},"content":{"62":{},"63":{},"64":{},"65":{},"323":{},"325":{},"396":{},"504":{},"541":{},"542":{},"543":{},"544":{},"547":{},"548":{},"549":{},"555":{},"556":{},"559":{},"561":{},"562":{},"563":{},"564":{},"565":{},"600":{},"642":{},"643":{},"661":{},"675":{},"730":{},"742":{},"743":{},"744":{},"745":{},"746":{},"747":{},"748":{},"749":{},"750":{},"751":{},"752":{},"753":{},"754":{},"757":{},"759":{},"763":{},"765":{},"766":{},"767":{},"768":{}},"tags":{}}],["bootabl",{"_index":2817,"title":{"555":{}},"content":{"557":{}},"tags":{}}],["bootctl",{"_index":2954,"title":{},"content":{"564":{}},"tags":{}}],["bootload",{"_index":2950,"title":{},"content":{"563":{},"564":{}},"tags":{}}],["bootstrap",{"_index":1582,"title":{},"content":{"220":{}},"tags":{}}],["bootup",{"_index":3736,"title":{},"content":{"756":{}},"tags":{}}],["bopomofo",{"_index":3232,"title":{},"content":{"630":{}},"tags":{}}],["borrow",{"_index":532,"title":{},"content":{"92":{}},"tags":{}}],["bot",{"_index":1933,"title":{},"content":{"291":{}},"tags":{}}],["both",{"_index":216,"title":{},"content":{"54":{},"55":{},"56":{},"57":{},"58":{},"98":{},"105":{},"161":{},"189":{},"190":{},"220":{},"226":{},"274":{},"556":{},"579":{},"603":{},"651":{},"723":{},"726":{},"745":{}},"tags":{}}],["bottom",{"_index":2075,"title":{},"content":{"333":{},"336":{},"337":{},"339":{},"351":{},"355":{},"366":{},"378":{},"392":{},"400":{},"403":{},"404":{},"406":{},"411":{},"413":{},"417":{},"426":{},"428":{},"436":{},"441":{},"603":{},"604":{}},"tags":{}}],["box",{"_index":102,"title":{},"content":{"45":{},"46":{},"223":{},"334":{},"338":{},"339":{},"362":{},"366":{},"394":{},"396":{},"411":{},"424":{},"449":{},"479":{},"496":{},"504":{},"585":{},"641":{},"713":{},"715":{},"735":{}},"tags":{}}],["bpast",{"_index":1785,"title":{},"content":{"256":{}},"tags":{}}],["bq171t",{"_index":2383,"title":{},"content":{"462":{}},"tags":{}}],["brace",{"_index":1767,"title":{},"content":{"254":{}},"tags":{}}],["branch",{"_index":580,"title":{"109":{},"110":{},"116":{},"119":{},"242":{},"271":{},"546":{},"547":{}},"content":{"109":{},"110":{},"115":{},"116":{},"119":{},"123":{},"230":{},"231":{},"238":{},"243":{},"245":{},"247":{},"266":{},"271":{},"277":{},"546":{},"547":{}},"tags":{}}],["brand",{"_index":2069,"title":{},"content":{"327":{},"496":{},"585":{}},"tags":{}}],["brasero",{"_index":2822,"title":{},"content":{"556":{}},"tags":{}}],["brd",{"_index":3272,"title":{},"content":{"644":{}},"tags":{}}],["break",{"_index":1664,"title":{},"content":{"228":{}},"tags":{}}],["brief",{"_index":883,"title":{"645":{}},"content":{"137":{},"279":{}},"tags":{}}],["bring",{"_index":576,"title":{},"content":{"118":{},"266":{},"267":{},"270":{},"339":{},"366":{},"400":{},"762":{},"768":{}},"tags":{}}],["brisk",{"_index":2173,"title":{},"content":{"392":{},"393":{},"394":{},"395":{},"396":{},"397":{},"404":{},"405":{},"409":{},"410":{},"412":{},"586":{}},"tags":{}}],["british",{"_index":2018,"title":{},"content":{"315":{}},"tags":{}}],["brlaser",{"_index":2658,"title":{},"content":{"497":{},"499":{}},"tags":{}}],["broadcast",{"_index":315,"title":{"81":{},"731":{}},"content":{"81":{}},"tags":{}}],["broadcast,multicast,up,lower_up",{"_index":3263,"title":{},"content":{"644":{}},"tags":{}}],["broadcom",{"_index":2317,"title":{"453":{}},"content":{"450":{},"453":{},"546":{}},"tags":{}}],["broken",{"_index":1056,"title":{"739":{},"741":{}},"content":{"143":{},"175":{},"448":{},"736":{},"739":{},"746":{},"756":{}},"tags":{}}],["brother",{"_index":2657,"title":{"497":{},"499":{},"501":{}},"content":{"497":{},"499":{},"501":{}},"tags":{}}],["brought",{"_index":2107,"title":{},"content":{"336":{},"364":{}},"tags":{}}],["brows",{"_index":1252,"title":{},"content":{"169":{},"735":{}},"tags":{}}],["browser",{"_index":1623,"title":{"520":{},"664":{}},"content":{"224":{},"362":{},"480":{},"520":{},"620":{}},"tags":{}}],["brsaneconfig4",{"_index":2693,"title":{},"content":{"502":{}},"tags":{}}],["brscan4",{"_index":2689,"title":{},"content":{"501":{}},"tags":{}}],["bs=1m",{"_index":2912,"title":{},"content":{"558":{}},"tags":{}}],["bs=4m",{"_index":2863,"title":{},"content":{"556":{}},"tags":{}}],["bsymbol",{"_index":977,"title":{},"content":{"140":{}},"tags":{}}],["bu",{"_index":1565,"title":{},"content":{"217":{}},"tags":{}}],["buddiesofbudgie/budgi",{"_index":1974,"title":{},"content":{"303":{}},"tags":{}}],["budget",{"_index":2969,"title":{},"content":{"565":{}},"tags":{}}],["budgi",{"_index":268,"title":{"317":{},"327":{},"329":{},"584":{},"636":{}},"content":{"68":{},"69":{},"70":{},"71":{},"72":{},"73":{},"74":{},"75":{},"76":{},"77":{},"78":{},"79":{},"80":{},"303":{},"312":{},"316":{},"327":{},"329":{},"330":{},"333":{},"334":{},"335":{},"336":{},"337":{},"338":{},"339":{},"340":{},"344":{},"347":{},"348":{},"349":{},"353":{},"354":{},"355":{},"356":{},"357":{},"385":{},"389":{},"444":{},"522":{},"533":{},"536":{},"553":{},"554":{},"556":{},"558":{},"583":{},"584":{},"585":{},"586":{},"629":{},"636":{},"646":{},"659":{}},"tags":{}}],["budgie'",{"_index":2147,"title":{},"content":{"330":{}},"tags":{}}],["bug",{"_index":967,"title":{"303":{}},"content":{"140":{},"222":{},"302":{},"303":{},"505":{},"598":{},"736":{},"741":{},"762":{}},"tags":{}}],["bugfix",{"_index":1854,"title":{},"content":{"279":{}},"tags":{}}],["build",{"_index":11,"title":{"85":{},"86":{},"100":{},"122":{},"181":{},"210":{},"259":{},"262":{},"276":{},"282":{}},"content":{"20":{},"21":{},"86":{},"87":{},"89":{},"93":{},"98":{},"100":{},"101":{},"102":{},"103":{},"104":{},"117":{},"121":{},"122":{},"134":{},"135":{},"138":{},"139":{},"140":{},"141":{},"142":{},"143":{},"144":{},"146":{},"147":{},"148":{},"149":{},"153":{},"154":{},"165":{},"168":{},"169":{},"174":{},"175":{},"177":{},"179":{},"181":{},"182":{},"183":{},"184":{},"186":{},"187":{},"189":{},"190":{},"196":{},"197":{},"201":{},"202":{},"227":{},"234":{},"235":{},"238":{},"242":{},"247":{},"248":{},"251":{},"259":{},"260":{},"276":{},"281":{},"282":{},"505":{},"511":{},"598":{}},"tags":{}}],["build.pl",{"_index":1091,"title":{},"content":{"146":{}},"tags":{}}],["builddep",{"_index":620,"title":{},"content":{"121":{},"138":{},"168":{},"181":{},"182":{},"184":{},"185":{},"242":{}},"tags":{}}],["builder",{"_index":556,"title":{},"content":{"93":{}},"tags":{}}],["built",{"_index":31,"title":{"99":{}},"content":{"20":{},"21":{},"95":{},"98":{},"101":{},"104":{},"107":{},"122":{},"138":{},"149":{},"152":{},"182":{},"195":{},"224":{},"235":{},"249":{},"250":{},"251":{},"276":{},"282":{},"283":{},"284":{},"514":{},"557":{}},"tags":{}}],["bullet",{"_index":678,"title":{},"content":{"124":{},"279":{}},"tags":{}}],["bump",{"_index":1678,"title":{"273":{}},"content":{"231":{},"235":{},"238":{},"272":{},"273":{},"280":{},"282":{}},"tags":{}}],["bundl",{"_index":519,"title":{},"content":{"91":{}},"tags":{}}],["burn",{"_index":2825,"title":{},"content":{"556":{},"557":{},"558":{}},"tags":{}}],["burner",{"_index":2869,"title":{},"content":{"557":{}},"tags":{}}],["busybox",{"_index":3049,"title":{},"content":{"580":{}},"tags":{}}],["button",{"_index":1833,"title":{},"content":{"266":{},"311":{},"333":{},"335":{},"336":{},"337":{},"339":{},"341":{},"342":{},"343":{},"344":{},"349":{},"350":{},"351":{},"355":{},"357":{},"361":{},"362":{},"363":{},"364":{},"366":{},"367":{},"368":{},"369":{},"370":{},"371":{},"375":{},"376":{},"377":{},"378":{},"381":{},"395":{},"396":{},"398":{},"406":{},"407":{},"423":{},"428":{},"435":{},"436":{},"553":{},"556":{},"563":{},"735":{}},"tags":{}}],["bypass",{"_index":1830,"title":{},"content":{"264":{},"653":{}},"tags":{}}],["c",{"_index":587,"title":{},"content":{"109":{},"119":{},"153":{},"154":{},"271":{},"553":{},"582":{},"584":{},"586":{},"587":{},"605":{},"622":{}},"tags":{}}],["c50d",{"_index":2547,"title":{},"content":{"475":{}},"tags":{}}],["c55d",{"_index":2549,"title":{},"content":{"475":{}},"tags":{}}],["c640",{"_index":2550,"title":{},"content":{"475":{}},"tags":{}}],["c665d",{"_index":2551,"title":{},"content":{"475":{}},"tags":{}}],["c710",{"_index":2351,"title":{},"content":{"459":{}},"tags":{}}],["c720",{"_index":2353,"title":{},"content":{"459":{}},"tags":{}}],["c:\\path\\to\\solu",{"_index":2812,"title":{},"content":{"554":{}},"tags":{}}],["cabal",{"_index":1061,"title":{},"content":{"144":{}},"tags":{}}],["cabal_build",{"_index":1076,"title":{},"content":{"144":{}},"tags":{}}],["cabal_configur",{"_index":1060,"title":{},"content":{"144":{}},"tags":{}}],["cabal_instal",{"_index":1077,"title":{},"content":{"144":{}},"tags":{}}],["cabal_regist",{"_index":1078,"title":{},"content":{"144":{}},"tags":{}}],["cach",{"_index":1799,"title":{},"content":{"259":{},"261":{},"263":{},"741":{},"758":{},"763":{}},"tags":{}}],["cache/kioexec",{"_index":3771,"title":{},"content":{"763":{}},"tags":{}}],["cache/krunn",{"_index":3772,"title":{},"content":{"763":{}},"tags":{}}],["cache/krunnerbookmarkrunnerfirefoxdbfile.sqlit",{"_index":3774,"title":{},"content":{"763":{}},"tags":{}}],["cache/ksycoca5",{"_index":3773,"title":{},"content":{"763":{}},"tags":{}}],["cache/org.kde.dirmodel",{"_index":3769,"title":{},"content":{"763":{}},"tags":{}}],["cache/plasmashel",{"_index":3768,"title":{},"content":{"763":{}},"tags":{}}],["cad",{"_index":2266,"title":{},"content":{"439":{}},"tags":{}}],["caddi",{"_index":2012,"title":{"608":{}},"content":{"314":{},"608":{},"609":{},"610":{}},"tags":{}}],["caddyfil",{"_index":3158,"title":{},"content":{"610":{}},"tags":{}}],["caja",{"_index":2198,"title":{},"content":{"410":{},"646":{}},"tags":{}}],["calc",{"_index":2762,"title":{"527":{}},"content":{"526":{},"527":{}},"tags":{}}],["calcul",{"_index":2256,"title":{},"content":{"439":{},"554":{}},"tags":{}}],["call",{"_index":589,"title":{},"content":{"120":{},"134":{},"137":{},"181":{},"190":{},"233":{},"235":{},"236":{},"275":{},"491":{},"558":{},"563":{},"586":{},"645":{},"735":{}},"tags":{}}],["camera",{"_index":259,"title":{"68":{},"733":{}},"content":{"68":{},"69":{},"70":{},"71":{},"72":{},"73":{},"74":{},"75":{},"76":{},"77":{},"78":{},"79":{},"80":{},"733":{}},"tags":{}}],["can't",{"_index":631,"title":{"738":{},"765":{},"766":{}},"content":{"121":{},"362":{},"707":{},"745":{},"762":{}},"tags":{}}],["cancel",{"_index":2131,"title":{},"content":{"351":{},"378":{},"407":{}},"tags":{}}],["candid",{"_index":814,"title":{},"content":{"132":{}},"tags":{}}],["cangji",{"_index":3239,"title":{},"content":{"630":{}},"tags":{}}],["canon",{"_index":2650,"title":{},"content":{"496":{}},"tags":{}}],["cap_dac_override,cap_net_admin,cap_net_raw+eip",{"_index":3366,"title":{},"content":{"656":{}},"tags":{}}],["cap_net_raw=+ep",{"_index":3518,"title":{},"content":{"711":{}},"tags":{}}],["capabl",{"_index":2149,"title":{},"content":{"358":{},"526":{},"595":{}},"tags":{}}],["capac",{"_index":2298,"title":{},"content":{"448":{}},"tags":{}}],["capitan",{"_index":2873,"title":{},"content":{"558":{}},"tags":{}}],["captur",{"_index":2251,"title":{},"content":{"438":{},"656":{}},"tags":{}}],["carbon",{"_index":2505,"title":{},"content":{"469":{}},"tags":{}}],["card",{"_index":2991,"title":{},"content":{"560":{},"627":{}},"tags":{}}],["cargo",{"_index":1063,"title":{"149":{}},"content":{"144":{},"149":{},"165":{},"598":{}},"tags":{}}],["cargo/bin",{"_index":3156,"title":{},"content":{"598":{}},"tags":{}}],["cargo_build",{"_index":1119,"title":{},"content":{"149":{},"165":{}},"tags":{}}],["cargo_fetch",{"_index":1117,"title":{},"content":{"149":{}},"tags":{}}],["cargo_instal",{"_index":1121,"title":{},"content":{"149":{}},"tags":{}}],["cargo_test",{"_index":1124,"title":{},"content":{"149":{}},"tags":{}}],["case",{"_index":521,"title":{},"content":{"91":{},"92":{},"132":{},"133":{},"135":{},"137":{},"168":{},"216":{},"220":{},"221":{},"237":{},"280":{},"556":{},"739":{},"749":{},"752":{},"753":{},"754":{},"760":{}},"tags":{}}],["cat",{"_index":1787,"title":{},"content":{"256":{},"486":{},"554":{},"660":{},"748":{}},"tags":{}}],["categori",{"_index":1930,"title":{},"content":{"291":{},"334":{},"335":{},"336":{},"339":{},"340":{},"344":{},"348":{},"349":{},"362":{},"393":{},"571":{}},"tags":{}}],["cater",{"_index":1590,"title":{},"content":{"221":{}},"tags":{}}],["caus",{"_index":2707,"title":{},"content":{"508":{},"741":{},"742":{},"745":{},"748":{},"757":{},"762":{}},"tags":{}}],["caution",{"_index":1992,"title":{},"content":{"309":{},"387":{},"435":{},"564":{},"586":{},"650":{}},"tags":{}}],["cbindgen",{"_index":1394,"title":{},"content":{"188":{}},"tags":{}}],["cbm_debug=1",{"_index":3621,"title":{},"content":{"745":{}},"tags":{}}],["cc",{"_index":1152,"title":{},"content":{"153":{},"154":{}},"tags":{}}],["cd",{"_index":577,"title":{},"content":{"116":{},"118":{},"230":{},"231":{},"267":{},"270":{},"282":{},"311":{},"553":{},"556":{},"557":{},"558":{},"577":{},"735":{},"755":{},"763":{}},"tags":{}}],["cdn.getsol.u",{"_index":1277,"title":{},"content":{"171":{},"516":{}},"tags":{}}],["ceas",{"_index":1910,"title":{},"content":{"288":{}},"tags":{}}],["celluloid",{"_index":2088,"title":{"537":{}},"content":{"334":{},"536":{}},"tags":{}}],["center",{"_index":253,"title":{"65":{},"567":{},"737":{}},"content":{"62":{},"63":{},"64":{},"65":{},"91":{},"137":{},"293":{},"301":{},"303":{},"305":{},"314":{},"333":{},"334":{},"336":{},"337":{},"348":{},"353":{},"355":{},"356":{},"362":{},"393":{},"477":{},"481":{},"503":{},"504":{},"505":{},"516":{},"526":{},"528":{},"530":{},"532":{},"567":{},"571":{},"575":{},"579":{},"600":{},"603":{},"604":{},"605":{},"609":{},"612":{},"613":{},"615":{},"629":{},"632":{},"646":{},"655":{},"663":{},"710":{},"724":{},"727":{},"728":{},"730":{},"732":{},"736":{},"772":{}},"tags":{}}],["centr",{"_index":3520,"title":{},"content":{"712":{}},"tags":{}}],["central",{"_index":685,"title":{},"content":{"124":{},"280":{}},"tags":{}}],["centrino",{"_index":2583,"title":{},"content":{"455":{}},"tags":{}}],["certain",{"_index":973,"title":{},"content":{"140":{},"186":{},"212":{},"223":{},"264":{},"273":{},"303":{},"309":{},"412":{},"448":{},"449":{},"605":{},"746":{}},"tags":{}}],["certainli",{"_index":2027,"title":{},"content":{"322":{},"563":{}},"tags":{}}],["certif",{"_index":2935,"title":{"562":{},"565":{}},"content":{"561":{},"562":{},"563":{},"565":{}},"tags":{}}],["cflag",{"_index":1082,"title":{},"content":{"145":{},"153":{},"154":{}},"tags":{}}],["chain",{"_index":3630,"title":{},"content":{"747":{}},"tags":{}}],["chang",{"_index":4,"title":{"114":{},"115":{},"123":{},"163":{},"232":{},"246":{},"277":{},"507":{},"547":{},"570":{},"719":{},"752":{}},"content":{"20":{},"21":{},"59":{},"60":{},"61":{},"68":{},"69":{},"70":{},"71":{},"72":{},"73":{},"74":{},"75":{},"76":{},"77":{},"78":{},"79":{},"80":{},"87":{},"110":{},"111":{},"114":{},"115":{},"116":{},"119":{},"123":{},"124":{},"137":{},"168":{},"169":{},"170":{},"179":{},"205":{},"209":{},"225":{},"228":{},"229":{},"230":{},"231":{},"236":{},"238":{},"242":{},"243":{},"244":{},"245":{},"246":{},"271":{},"272":{},"274":{},"277":{},"278":{},"280":{},"282":{},"333":{},"334":{},"335":{},"336":{},"339":{},"347":{},"349":{},"353":{},"361":{},"362":{},"363":{},"366":{},"371":{},"374":{},"376":{},"380":{},"392":{},"393":{},"394":{},"395":{},"397":{},"398":{},"406":{},"409":{},"413":{},"428":{},"433":{},"435":{},"436":{},"506":{},"507":{},"508":{},"548":{},"558":{},"564":{},"570":{},"572":{},"573":{},"594":{},"600":{},"613":{},"629":{},"635":{},"644":{},"717":{},"739":{},"748":{},"749":{},"752":{},"754":{},"757":{},"763":{}},"tags":{}}],["changelog",{"_index":1217,"title":{},"content":{"163":{},"279":{}},"tags":{}}],["channel",{"_index":1941,"title":{"505":{}},"content":{"291":{},"505":{}},"tags":{}}],["chapter",{"_index":2728,"title":{},"content":{"517":{}},"tags":{}}],["charact",{"_index":1777,"title":{},"content":{"254":{},"423":{}},"tags":{}}],["chat",{"_index":1949,"title":{"298":{}},"content":{},"tags":{}}],["check",{"_index":331,"title":{"114":{},"187":{},"236":{},"264":{},"532":{},"739":{}},"content":{"85":{},"106":{},"110":{},"115":{},"121":{},"123":{},"124":{},"125":{},"126":{},"133":{},"137":{},"138":{},"139":{},"143":{},"166":{},"168":{},"186":{},"187":{},"188":{},"189":{},"197":{},"236":{},"242":{},"243":{},"264":{},"266":{},"273":{},"277":{},"280":{},"282":{},"303":{},"322":{},"326":{},"439":{},"511":{},"532":{},"553":{},"557":{},"558":{},"642":{},"643":{},"651":{},"661":{},"708":{},"730":{},"735":{},"736":{},"739":{},"745":{},"747":{},"751":{},"753":{},"756":{},"765":{}},"tags":{}}],["checkbox",{"_index":2211,"title":{},"content":{"417":{}},"tags":{}}],["checkdep",{"_index":943,"title":{},"content":{"138":{},"168":{},"188":{}},"tags":{}}],["checker",{"_index":2790,"title":{},"content":{"532":{}},"tags":{}}],["checklist",{"_index":97,"title":{},"content":{"40":{},"41":{},"42":{},"43":{},"165":{},"322":{}},"tags":{}}],["checksum",{"_index":1791,"title":{"258":{}},"content":{"258":{},"553":{},"554":{},"739":{}},"tags":{}}],["chew",{"_index":3229,"title":{},"content":{"630":{}},"tags":{}}],["chines",{"_index":2215,"title":{},"content":{"423":{},"630":{}},"tags":{}}],["chipset",{"_index":56,"title":{},"content":{"38":{},"39":{},"451":{}},"tags":{}}],["chmod",{"_index":3544,"title":{},"content":{"718":{}},"tags":{}}],["choic",{"_index":365,"title":{},"content":{"88":{},"339":{},"366":{},"641":{}},"tags":{}}],["choos",{"_index":1492,"title":{},"content":{"204":{},"333":{},"334":{},"336":{},"353":{},"355":{},"356":{},"364":{},"380":{},"409":{},"420":{},"433":{},"548":{},"556":{},"563":{},"589":{},"601":{},"733":{}},"tags":{}}],["chooser",{"_index":2179,"title":{},"content":{"395":{}},"tags":{}}],["chose",{"_index":2117,"title":{},"content":{"339":{},"366":{},"555":{}},"tags":{}}],["chosen",{"_index":2093,"title":{},"content":{"334":{},"553":{},"651":{}},"tags":{}}],["chown",{"_index":3141,"title":{},"content":{"601":{}},"tags":{}}],["chrome",{"_index":256,"title":{"665":{},"666":{},"667":{}},"content":{"62":{},"63":{},"64":{},"65":{},"567":{},"665":{},"666":{},"667":{}},"tags":{}}],["chromebook",{"_index":2352,"title":{},"content":{"459":{},"467":{}},"tags":{}}],["chromium",{"_index":3610,"title":{"741":{}},"content":{"741":{}},"tags":{}}],["chronolog",{"_index":1222,"title":{},"content":{"163":{}},"tags":{}}],["chroot",{"_index":1325,"title":{"754":{}},"content":{"179":{},"182":{},"754":{},"755":{},"757":{},"758":{},"759":{},"760":{}},"tags":{}}],["chsh",{"_index":3009,"title":{},"content":{"572":{}},"tags":{}}],["clang",{"_index":921,"title":{},"content":{"138":{},"140":{},"152":{},"582":{}},"tags":{}}],["clarifi",{"_index":1555,"title":{},"content":{"216":{}},"tags":{}}],["clariti",{"_index":80,"title":{},"content":{"40":{},"41":{},"42":{},"43":{},"305":{}},"tags":{}}],["classic",{"_index":3219,"title":{},"content":{"624":{}},"tags":{}}],["classifi",{"_index":1898,"title":{},"content":{"288":{}},"tags":{}}],["clean",{"_index":440,"title":{},"content":{"102":{},"115":{},"138":{},"169":{},"179":{},"182":{},"190":{},"243":{},"251":{}},"tags":{}}],["cleanli",{"_index":1807,"title":{},"content":{"260":{}},"tags":{}}],["cleanup=scissor",{"_index":1236,"title":{},"content":{"168":{}},"tags":{}}],["clear",{"_index":1798,"title":{},"content":{"259":{},"417":{},"541":{},"568":{},"763":{}},"tags":{}}],["cli",{"_index":1460,"title":{"199":{},"647":{}},"content":{"197":{},"199":{},"203":{},"243":{},"256":{},"706":{}},"tags":{}}],["cli.tar.gz",{"_index":904,"title":{},"content":{"137":{}},"tags":{}}],["click",{"_index":2074,"title":{"762":{}},"content":{"333":{},"334":{},"335":{},"336":{},"337":{},"339":{},"340":{},"341":{},"342":{},"343":{},"344":{},"345":{},"346":{},"347":{},"348":{},"349":{},"350":{},"351":{},"353":{},"354":{},"355":{},"357":{},"361":{},"362":{},"363":{},"364":{},"365":{},"366":{},"367":{},"368":{},"369":{},"370":{},"371":{},"372":{},"373":{},"374":{},"375":{},"376":{},"377":{},"378":{},"380":{},"381":{},"392":{},"393":{},"394":{},"395":{},"396":{},"397":{},"398":{},"399":{},"400":{},"401":{},"402":{},"403":{},"404":{},"405":{},"406":{},"407":{},"409":{},"410":{},"411":{},"412":{},"413":{},"417":{},"420":{},"421":{},"423":{},"424":{},"425":{},"427":{},"428":{},"430":{},"431":{},"433":{},"435":{},"441":{},"449":{},"490":{},"532":{},"549":{},"556":{},"557":{},"558":{},"590":{},"592":{},"629":{},"646":{},"735":{},"762":{}},"tags":{}}],["client",{"_index":156,"title":{"521":{}},"content":{"47":{},"48":{},"49":{},"50":{},"91":{},"298":{},"521":{},"599":{},"643":{},"658":{},"706":{}},"tags":{}}],["clion",{"_index":3458,"title":{"692":{}},"content":{},"tags":{}}],["clion*.eopkg",{"_index":3461,"title":{},"content":{"692":{}},"tags":{}}],["clion*.eopkg;sudo",{"_index":3460,"title":{},"content":{"692":{}},"tags":{}}],["clipboard",{"_index":2005,"title":{},"content":{"311":{}},"tags":{}}],["clock",{"_index":2080,"title":{},"content":{"333":{},"392":{},"417":{}},"tags":{}}],["clone",{"_index":552,"title":{"118":{},"204":{},"267":{},"270":{},"282":{}},"content":{"93":{},"118":{},"169":{},"204":{},"206":{},"265":{},"267":{},"270":{},"281":{}},"tags":{}}],["clone/fork",{"_index":1261,"title":{},"content":{"169":{}},"tags":{}}],["close",{"_index":498,"title":{"107":{}},"content":{"170":{},"232":{},"245":{},"293":{},"309":{},"330":{},"395":{},"396":{},"397":{},"409":{},"413":{},"438":{},"448":{},"556":{},"760":{},"762":{}},"tags":{}}],["cloud",{"_index":3427,"title":{"682":{}},"content":{"682":{}},"tags":{}}],["cloudflar",{"_index":2724,"title":{},"content":{"516":{}},"tags":{}}],["clr",{"_index":241,"title":{"541":{}},"content":{"62":{},"63":{},"64":{},"65":{},"541":{},"543":{},"544":{},"547":{},"563":{},"742":{},"745":{},"759":{}},"tags":{}}],["clutter",{"_index":1732,"title":{},"content":{"241":{},"434":{}},"tags":{}}],["cmake",{"_index":1028,"title":{},"content":{"143":{}},"tags":{}}],["cmake_ninja",{"_index":1030,"title":{},"content":{"143":{}},"tags":{}}],["code",{"_index":655,"title":{"310":{}},"content":{"121":{},"137":{},"138":{},"153":{},"235":{},"236":{},"310":{},"311":{},"312":{},"314":{},"439":{},"580":{}},"tags":{}}],["code::block",{"_index":2015,"title":{},"content":{"314":{}},"tags":{}}],["cog",{"_index":3226,"title":{},"content":{"629":{}},"tags":{}}],["cold",{"_index":1000,"title":{},"content":{"140":{}},"tags":{}}],["collect",{"_index":247,"title":{},"content":{"62":{},"63":{},"64":{},"65":{},"206":{},"300":{},"514":{},"515":{},"516":{},"519":{}},"tags":{}}],["colon",{"_index":1194,"title":{},"content":{"160":{}},"tags":{}}],["color",{"_index":639,"title":{},"content":{"121":{},"380":{},"394":{},"409":{}},"tags":{}}],["combin",{"_index":2099,"title":{},"content":{"335":{},"363":{},"735":{}},"tags":{}}],["come",{"_index":245,"title":{},"content":{"62":{},"63":{},"64":{},"65":{},"68":{},"69":{},"70":{},"71":{},"72":{},"73":{},"74":{},"75":{},"76":{},"77":{},"78":{},"79":{},"80":{},"216":{},"236":{},"338":{},"519":{},"520":{},"521":{},"526":{},"649":{},"662":{},"734":{},"735":{},"764":{}},"tags":{}}],["comfort",{"_index":2033,"title":{},"content":{"322":{},"556":{},"558":{}},"tags":{}}],["command",{"_index":261,"title":{"69":{},"264":{},"311":{},"512":{},"569":{},"647":{}},"content":{"68":{},"69":{},"70":{},"71":{},"72":{},"73":{},"74":{},"75":{},"76":{},"77":{},"78":{},"79":{},"80":{},"98":{},"103":{},"104":{},"106":{},"117":{},"121":{},"126":{},"132":{},"143":{},"147":{},"169":{},"190":{},"191":{},"197":{},"200":{},"204":{},"243":{},"249":{},"250":{},"256":{},"261":{},"264":{},"283":{},"311":{},"314":{},"330":{},"396":{},"439":{},"481":{},"502":{},"509":{},"512":{},"543":{},"554":{},"556":{},"558":{},"570":{},"571":{},"572":{},"573":{},"574":{},"575":{},"577":{},"579":{},"584":{},"585":{},"586":{},"587":{},"589":{},"590":{},"592":{},"594":{},"595":{},"598":{},"603":{},"604":{},"605":{},"609":{},"610":{},"612":{},"613":{},"615":{},"616":{},"618":{},"632":{},"644":{},"656":{},"663":{},"707":{},"711":{},"721":{},"724":{},"729":{},"732":{},"735":{},"736":{},"741":{},"744":{},"747":{},"753":{},"754":{},"756":{},"758":{},"759":{},"763":{}},"tags":{}}],["commands:n",{"_index":1863,"title":{},"content":{"282":{}},"tags":{}}],["comment",{"_index":625,"title":{},"content":{"121":{},"126":{},"128":{},"130":{},"133":{},"240":{},"241":{},"396":{},"644":{},"647":{},"651":{}},"tags":{}}],["commit",{"_index":669,"title":{"115":{},"123":{},"124":{},"212":{},"245":{},"277":{},"278":{},"280":{}},"content":{"114":{},"115":{},"123":{},"124":{},"137":{},"165":{},"168":{},"169":{},"190":{},"205":{},"212":{},"230":{},"231":{},"238":{},"242":{},"243":{},"244":{},"245":{},"264":{},"277":{},"278":{},"279":{},"280":{},"298":{},"503":{},"574":{}},"tags":{}}],["common",{"_index":248,"title":{"257":{},"312":{},"736":{}},"content":{"62":{},"63":{},"64":{},"65":{},"125":{},"186":{},"190":{},"199":{},"255":{},"307":{},"496":{},"509":{},"519":{},"526":{},"527":{},"529":{},"531":{},"532":{},"563":{},"568":{},"570":{},"728":{},"745":{},"766":{},"768":{}},"tags":{}}],["commonli",{"_index":1696,"title":{},"content":{"233":{}},"tags":{}}],["commun",{"_index":57,"title":{"40":{},"285":{},"295":{},"296":{},"297":{},"668":{}},"content":{"40":{},"41":{},"42":{},"43":{},"54":{},"55":{},"56":{},"57":{},"58":{},"212":{},"229":{},"243":{},"285":{},"286":{},"287":{},"288":{},"289":{},"290":{},"291":{},"293":{},"296":{},"298":{},"299":{},"302":{},"769":{}},"tags":{}}],["compact",{"_index":2282,"title":{},"content":{"440":{}},"tags":{}}],["compani",{"_index":3207,"title":{},"content":{"621":{}},"tags":{}}],["compaq",{"_index":2437,"title":{},"content":{"468":{}},"tags":{}}],["compar",{"_index":2810,"title":{},"content":{"554":{},"745":{},"757":{}},"tags":{}}],["compat",{"_index":2325,"title":{"492":{},"498":{}},"content":{"451":{},"458":{},"492":{},"497":{},"498":{},"527":{},"529":{},"531":{},"567":{},"595":{},"641":{}},"tags":{}}],["compil",{"_index":381,"title":{},"content":{"89":{},"138":{},"147":{},"150":{},"153":{},"154":{},"182":{},"220":{},"581":{},"582":{},"598":{},"653":{},"734":{},"735":{},"758":{}},"tags":{}}],["complain",{"_index":1819,"title":{"264":{}},"content":{},"tags":{}}],["complaint",{"_index":2730,"title":{},"content":{"517":{}},"tags":{}}],["complet",{"_index":488,"title":{"576":{}},"content":{"106":{},"122":{},"136":{},"227":{},"232":{},"240":{},"241":{},"309":{},"438":{},"556":{},"565":{},"575":{},"576":{},"653":{}},"tags":{}}],["completion/completions/fzf",{"_index":3023,"title":{},"content":{"576":{}},"tags":{}}],["complex",{"_index":1608,"title":{"223":{}},"content":{"223":{},"249":{},"528":{}},"tags":{}}],["compli",{"_index":1401,"title":{},"content":{"189":{}},"tags":{}}],["complic",{"_index":1756,"title":{},"content":{"249":{},"283":{},"448":{}},"tags":{}}],["compon",{"_index":509,"title":{},"content":{"91":{},"121":{},"135":{},"137":{},"220":{},"223":{},"575":{},"579":{},"582":{},"596":{},"598":{},"605":{}},"tags":{}}],["compos",{"_index":3099,"title":{},"content":{"594":{}},"tags":{}}],["comprehens",{"_index":2770,"title":{},"content":{"527":{}},"tags":{}}],["compress",{"_index":1408,"title":{},"content":{"190":{}},"tags":{}}],["compromis",{"_index":3107,"title":{},"content":{"595":{}},"tags":{}}],["compulsori",{"_index":2185,"title":{},"content":{"396":{}},"tags":{}}],["comput",{"_index":38,"title":{},"content":{"37":{},"339":{},"366":{},"396":{},"434":{},"553":{},"554":{},"556":{},"558":{},"559":{},"629":{},"643":{},"727":{},"730":{},"733":{},"770":{},"771":{},"773":{}},"tags":{}}],["concept",{"_index":1209,"title":{},"content":{"162":{},"358":{}},"tags":{}}],["concern",{"_index":2701,"title":{},"content":{"504":{},"518":{},"562":{}},"tags":{}}],["condemn",{"_index":1890,"title":{},"content":{"287":{}},"tags":{}}],["condit",{"_index":1323,"title":{},"content":{"179":{},"236":{}},"tags":{}}],["conf",{"_index":1075,"title":{},"content":{"144":{},"613":{}},"tags":{}}],["conferenc",{"_index":40,"title":{},"content":{"37":{},"733":{},"770":{}},"tags":{}}],["config",{"_index":8,"title":{},"content":{"20":{},"21":{},"87":{},"89":{},"90":{},"96":{},"144":{},"182":{},"186":{},"197":{},"200":{},"243":{},"486":{},"568":{},"610":{},"635":{},"651":{},"653":{},"735":{},"741":{},"763":{}},"tags":{}}],["config.bak",{"_index":3764,"title":{},"content":{"763":{}},"tags":{}}],["config/autostart/ssh",{"_index":3532,"title":{"716":{}},"content":{"716":{},"717":{},"718":{}},"tags":{}}],["config/fish",{"_index":3064,"title":{},"content":{"568":{}},"tags":{}}],["config/fish/conf.d",{"_index":1501,"title":{},"content":{"208":{}},"tags":{}}],["config/fish/conf.d/solus.fish",{"_index":1503,"title":{},"content":{"208":{}},"tags":{}}],["config/ob",{"_index":3565,"title":{},"content":{"734":{},"735":{}},"tags":{}}],["config/solu",{"_index":1446,"title":{},"content":{"196":{}},"tags":{}}],["config/~/oth",{"_index":3056,"title":{},"content":{"568":{}},"tags":{}}],["configfile=/etc/samba/smb.conf",{"_index":3344,"title":{},"content":{"653":{}},"tags":{}}],["configfile=